[f-spot] What a mess. Sorry everyone.



commit b5914a9328db88f3342add944dd9b5f66412b0f3
Author: Stephen Shaw <sshaw decriptor com>
Date:   Wed Apr 11 00:58:12 2012 -0600

    What a mess.  Sorry everyone.
    
    I'll merge these changes back in probably, but a little more
    carefully.
    
    This reverts commit 9093456bc76d95a006d224ce56fb4ce55f3c6c3f.
    This reverts commit e3e0383ec34ceedff66e4e7b49501e18633c60f9.
    This reverts commit d6dd9a00ee6d7e32ed2b08f7288f018ddd143029.
    This reverts commit 29ba3800121c9643c49eba92f21e799e27b0cc8e.
    This reverts commit 9f3d0c34ff91e600a44b8545f3752f821bcd85b9.
    This reverts commit 90ed8cc581a748219a589cb173c0c38dc5284365.
    This reverts commit ebefcba82bbb6362e47ee16d4822f0ee213fe4b0.

 .gitignore                                         |    2 -
 F-Spot.sln                                         |  469 +-
 lib/Mono.Google/Mono.Google.csproj                 |   41 +-
 lib/Mono.Tabblo/Mono.Tabblo.csproj                 |   40 +-
 lib/SmugMugNet/SmugMugNet.csproj                   |   40 +-
 lib/gio-sharp/generator/AliasGen.cs                |   60 +-
 lib/gio-sharp/generator/BoxedGen.cs                |  164 +-
 lib/gio-sharp/generator/ByRefGen.cs                |  126 +-
 lib/gio-sharp/generator/ChildProperty.cs           |   90 +-
 lib/gio-sharp/generator/ClassGen.cs                |  188 +-
 lib/gio-sharp/generator/CodeGenerator.cs           |  244 +-
 lib/gio-sharp/generator/ConstFilenameGen.cs        |  104 +-
 lib/gio-sharp/generator/ConstStringGen.cs          |  118 +-
 lib/gio-sharp/generator/Ctor.cs                    |  326 +-
 lib/gio-sharp/generator/EnumGen.cs                 |  254 +-
 lib/gio-sharp/generator/GenBase.cs                 |  264 +-
 lib/gio-sharp/generator/GenerationInfo.cs          |  376 +-
 lib/gio-sharp/generator/IGeneratable.cs            |  142 +-
 lib/gio-sharp/generator/IManualMarshaler.cs        |   64 +-
 lib/gio-sharp/generator/InterfaceGen.cs            |  766 +-
 lib/gio-sharp/generator/LPGen.cs                   |  116 +-
 lib/gio-sharp/generator/LPUGen.cs                  |  116 +-
 lib/gio-sharp/generator/ManualGen.cs               |  116 +-
 lib/gio-sharp/generator/Method.cs                  |  598 +-
 lib/gio-sharp/generator/MethodBody.cs              |  354 +-
 lib/gio-sharp/generator/ObjectGen.cs               |  850 +-
 lib/gio-sharp/generator/OpaqueGen.cs               |  460 +-
 lib/gio-sharp/generator/Parameters.cs              | 1456 ++--
 lib/gio-sharp/generator/Parser.cs                  |  340 +-
 lib/gio-sharp/generator/Property.cs                |  386 +-
 lib/gio-sharp/generator/ReturnValue.cs             |  340 +-
 lib/gio-sharp/generator/Signal.cs                  | 1174 ++--
 lib/gio-sharp/generator/Signature.cs               |  246 +-
 lib/gio-sharp/generator/SimpleBase.cs              |  242 +-
 lib/gio-sharp/generator/SimpleGen.cs               |   62 +-
 lib/gio-sharp/generator/Statistics.cs              |  394 +-
 lib/gio-sharp/generator/StructGen.cs               |  106 +-
 lib/gio-sharp/generator/SymbolTable.cs             |  824 +-
 lib/gio-sharp/generator/VMSignature.cs             |  150 +-
 lib/gio-sharp/gio/snk                              |  Bin 596 -> 596 bytes
 lib/unique-sharp/generator/AliasGen.cs             |   60 +-
 lib/unique-sharp/generator/BoxedGen.cs             |  164 +-
 lib/unique-sharp/generator/ByRefGen.cs             |  126 +-
 lib/unique-sharp/generator/ChildProperty.cs        |   90 +-
 lib/unique-sharp/generator/ClassGen.cs             |  188 +-
 lib/unique-sharp/generator/CodeGenerator.cs        |  244 +-
 lib/unique-sharp/generator/ConstFilenameGen.cs     |  104 +-
 lib/unique-sharp/generator/ConstStringGen.cs       |  118 +-
 lib/unique-sharp/generator/Ctor.cs                 |  326 +-
 lib/unique-sharp/generator/EnumGen.cs              |  254 +-
 lib/unique-sharp/generator/GenBase.cs              |  264 +-
 lib/unique-sharp/generator/GenerationInfo.cs       |  376 +-
 lib/unique-sharp/generator/IGeneratable.cs         |  142 +-
 lib/unique-sharp/generator/IManualMarshaler.cs     |   64 +-
 lib/unique-sharp/generator/InterfaceGen.cs         |  768 +-
 lib/unique-sharp/generator/LPGen.cs                |  116 +-
 lib/unique-sharp/generator/LPUGen.cs               |  116 +-
 lib/unique-sharp/generator/ManualGen.cs            |  116 +-
 lib/unique-sharp/generator/Method.cs               |  606 +-
 lib/unique-sharp/generator/MethodBody.cs           |  354 +-
 lib/unique-sharp/generator/ObjectGen.cs            |  850 +-
 lib/unique-sharp/generator/OpaqueGen.cs            |  460 +-
 lib/unique-sharp/generator/Parameters.cs           | 1456 ++--
 lib/unique-sharp/generator/Parser.cs               |  340 +-
 lib/unique-sharp/generator/Property.cs             |  386 +-
 lib/unique-sharp/generator/ReturnValue.cs          |  340 +-
 lib/unique-sharp/generator/Signal.cs               | 1174 ++--
 lib/unique-sharp/generator/Signature.cs            |  246 +-
 lib/unique-sharp/generator/SimpleBase.cs           |  242 +-
 lib/unique-sharp/generator/SimpleGen.cs            |   62 +-
 lib/unique-sharp/generator/Statistics.cs           |  394 +-
 lib/unique-sharp/generator/StructGen.cs            |  106 +-
 lib/unique-sharp/generator/SymbolTable.cs          |  824 +-
 lib/unique-sharp/generator/VMSignature.cs          |  150 +-
 po/sl.po                                           | 9422 ++++++++++----------
 .../MainApp.UnitTest/MainApp.UnitTest.csproj       |   40 +-
 src/Clients/MainApp/DependentListStore.cs          |    2 +
 .../MainApp/FSpot.ColorAdjustment/Adjustment.cs    |    5 +-
 .../MainApp/FSpot.ColorAdjustment/AutoStretch.cs   |    7 +-
 .../MainApp/FSpot.ColorAdjustment/Desaturate.cs    |    4 +-
 .../FSpot.ColorAdjustment/FullColorAdjustment.cs   |    4 +-
 .../MainApp/FSpot.ColorAdjustment/SepiaTone.cs     |    4 +-
 .../MainApp/FSpot.Editors/AutoStretchEditor.cs     |   20 +-
 src/Clients/MainApp/FSpot.Editors/ColorEditor.cs   |   10 +-
 src/Clients/MainApp/FSpot.Editors/CropEditor.cs    |   16 +-
 .../MainApp/FSpot.Editors/DesaturateEditor.cs      |   20 +-
 src/Clients/MainApp/FSpot.Editors/Editor.cs        |   11 +-
 src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs  |    5 +-
 src/Clients/MainApp/FSpot.Editors/SepiaEditor.cs   |   20 +-
 .../MainApp/FSpot.Editors/SoftFocusEditor.cs       |   10 +-
 src/Clients/MainApp/FSpot.Editors/TiltEditor.cs    |   13 +-
 .../FSpot.Extensions/CommandMenuItemNode.cs        |    5 +-
 .../FSpot.Extensions/ComplexMenuItemNode.cs        |   22 +-
 .../MainApp/FSpot.Extensions/ExportMenuItemNode.cs |    5 +-
 src/Clients/MainApp/FSpot.Extensions/IExporter.cs  |    3 +
 src/Clients/MainApp/FSpot.Extensions/MenuNode.cs   |    1 -
 .../FSpot.Extensions/PhotoSelectionCondition.cs    |    7 +-
 .../MainApp/FSpot.Extensions/PopupCommands.cs      |    3 +-
 .../MainApp/FSpot.Extensions/ServiceNode.cs        |    2 -
 .../MainApp/FSpot.Extensions/SidebarPage.cs        |   29 +-
 .../MainApp/FSpot.Extensions/SidebarPageNode.cs    |    4 +-
 .../MainApp/FSpot.Extensions/TransitionNode.cs     |   12 +-
 .../MainApp/FSpot.Extensions/ViewModeCondition.cs  |    9 +-
 src/Clients/MainApp/FSpot.Filters/FilterRequest.cs |    4 +-
 src/Clients/MainApp/FSpot.Filters/JpegFilter.cs    |   19 +-
 src/Clients/MainApp/FSpot.Filters/ResizeFilter.cs  |   27 +-
 src/Clients/MainApp/FSpot.Filters/SharpFilter.cs   |    9 +-
 .../MainApp/FSpot.Filters/UniqueNameFilter.cs      |    2 +-
 .../MainApp/FSpot.Filters/WhiteListFilter.cs       |    2 +-
 src/Clients/MainApp/FSpot.Imaging/Ciff.cs          |   18 +-
 src/Clients/MainApp/FSpot.Imaging/DCRawFile.cs     |    3 +
 src/Clients/MainApp/FSpot.Imaging/IImageFile.cs    |    5 +
 src/Clients/MainApp/FSpot.Imaging/IOChannel.cs     |    6 +-
 src/Clients/MainApp/FSpot.Imaging/ImageFile.cs     |   43 +-
 .../MainApp/FSpot.Imaging/InternalProcess.cs       |   11 +-
 src/Clients/MainApp/FSpot.Imaging/RafFile.cs       |    5 +-
 src/Clients/MainApp/FSpot.Imaging/Tiff.cs          |    8 +-
 .../MainApp/FSpot.Import/FileImportSource.cs       |   28 +-
 src/Clients/MainApp/FSpot.Import/IImportSource.cs  |    4 +
 .../MainApp/FSpot.Import/ImportController.cs       |   36 +-
 .../MainApp/FSpot.Import/MetadataImporter.cs       |    8 +-
 src/Clients/MainApp/FSpot.Jobs/CalculateHashJob.cs |    4 +-
 src/Clients/MainApp/FSpot.Jobs/SyncMetadataJob.cs  |    8 +-
 .../MainApp/FSpot.Loaders/AreaPreparedEventArgs.cs |    3 +-
 .../MainApp/FSpot.Loaders/AreaUpdatedEventArgs.cs  |    3 +-
 .../MainApp/FSpot.Loaders/GdkImageLoader.cs        |   42 +-
 src/Clients/MainApp/FSpot.Loaders/IImageLoader.cs  |    4 +-
 src/Clients/MainApp/FSpot.Loaders/ImageLoader.cs   |   10 +-
 src/Clients/MainApp/FSpot.Query/HiddenTag.cs       |   19 +-
 src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs |  260 +-
 .../MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs    |   33 +-
 .../MainApp/FSpot.UI.Dialog/BuilderDialog.cs       |    1 +
 .../MainApp/FSpot.UI.Dialog/DateRangeDialog.cs     |   22 +-
 .../MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs |   26 +-
 .../MainApp/FSpot.UI.Dialog/EditTagDialog.cs       |   10 +-
 .../MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs   |   24 +-
 .../MainApp/FSpot.UI.Dialog/ImportDialog.cs        |   24 +-
 .../MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs |  201 +-
 .../MainApp/FSpot.UI.Dialog/LastRollDialog.cs      |   10 +-
 .../MainApp/FSpot.UI.Dialog/PreferenceDialog.cs    |    6 +-
 .../MainApp/FSpot.UI.Dialog/ProgressDialog.cs      |   39 +-
 .../MainApp/FSpot.UI.Dialog/RatingFilterDialog.cs  |   47 +-
 .../MainApp/FSpot.UI.Dialog/RepairDbDialog.cs      |    5 +-
 .../MainApp/FSpot.UI.Dialog/RepairDialog.cs        |    9 +-
 .../FSpot.UI.Dialog/SelectionRatioDialog.cs        |    5 +-
 .../MainApp/FSpot.UI.Dialog/TagSelectionDialog.cs  |   10 +-
 .../FSpot.UI.Dialog/ThreadProgressDialog.cs        |    6 +-
 .../FSpot.Widgets/BrowseablePointerGridView.cs     |   10 +-
 .../FSpot.Widgets/CellRendererTextProgress.cs      |    7 +
 .../FSpot.Widgets/CollectionCellGridView.cs        |   63 +-
 src/Clients/MainApp/FSpot.Widgets/EditorPage.cs    |   20 +-
 src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs     |   54 +-
 src/Clients/MainApp/FSpot.Widgets/FindBar.cs       |  181 +-
 .../MainApp/FSpot.Widgets/FolderTreeModel.cs       |   12 +-
 .../MainApp/FSpot.Widgets/FolderTreePage.cs        |    6 +-
 .../MainApp/FSpot.Widgets/FolderTreeView.cs        |   28 +-
 src/Clients/MainApp/FSpot.Widgets/ImageInfo.cs     |    8 +-
 src/Clients/MainApp/FSpot.Widgets/InfoBox.cs       | 1463 ++--
 src/Clients/MainApp/FSpot.Widgets/Loupe.cs         |   69 +-
 .../MainApp/FSpot.Widgets/MetadataDisplay.cs       |   49 +-
 .../MainApp/FSpot.Widgets/PhotoImageView.cs        |   55 +-
 src/Clients/MainApp/FSpot.Widgets/PreviewPopup.cs  |    9 +-
 src/Clients/MainApp/FSpot.Widgets/QueryView.cs     |    5 +-
 .../MainApp/FSpot.Widgets/RatingMenuItem.cs        |    1 +
 .../FSpot.Widgets/SelectionCollectionGridView.cs   |  881 +-
 src/Clients/MainApp/FSpot.Widgets/Sharpener.cs     |   42 +-
 src/Clients/MainApp/FSpot.Widgets/Sidebar.cs       |   22 +-
 src/Clients/MainApp/FSpot.Widgets/SlideShow.cs     |   14 +-
 src/Clients/MainApp/FSpot.Widgets/SoftFocus.cs     |   23 +-
 src/Clients/MainApp/FSpot.Widgets/TagEntry.cs      |   31 +-
 src/Clients/MainApp/FSpot.Widgets/TagMenu.cs       |   14 +-
 src/Clients/MainApp/FSpot.Widgets/TagView.cs       |   12 +-
 .../FSpot.Widgets/ThumbnailCaptionRenderer.cs      |   15 +-
 .../FSpot.Widgets/ThumbnailDateCaptionRenderer.cs  |   18 +-
 .../FSpot.Widgets/ThumbnailDecorationRenderer.cs   |   14 +-
 .../ThumbnailFilenameCaptionRenderer.cs            |    9 +
 .../ThumbnailRatingDecorationRenderer.cs           |   15 +-
 .../FSpot.Widgets/ThumbnailTagsCaptionRenderer.cs  |    7 +-
 .../FSpot.Widgets/ThumbnailTextCaptionRenderer.cs  |   14 +-
 src/Clients/MainApp/FSpot.Widgets/TrayView.cs      |    4 +
 src/Clients/MainApp/FSpot/Accelerometer.cs         |    4 +-
 src/Clients/MainApp/FSpot/App.cs                   |   32 +-
 src/Clients/MainApp/FSpot/BitConverter.cs          |    3 +
 src/Clients/MainApp/FSpot/ColorManagement.cs       |    2 +-
 src/Clients/MainApp/FSpot/ControlOverlay.cs        |    6 +-
 src/Clients/MainApp/FSpot/DragDropTargets.cs       |    1 +
 src/Clients/MainApp/FSpot/ExportStore.cs           |   18 +-
 src/Clients/MainApp/FSpot/FolderQueryWidget.cs     |    5 +-
 src/Clients/MainApp/FSpot/FullScreenView.cs        |   50 +-
 src/Clients/MainApp/FSpot/GroupAdaptor.cs          |    1 +
 src/Clients/MainApp/FSpot/GroupSelector.cs         |   34 +-
 src/Clients/MainApp/FSpot/InfoOverlay.cs           |    1 -
 src/Clients/MainApp/FSpot/ItemAction.cs            |    6 +-
 src/Clients/MainApp/FSpot/JobStore.cs              |   21 +-
 src/Clients/MainApp/FSpot/Literal.cs               |   12 +-
 src/Clients/MainApp/FSpot/MainWindow.cs            |  211 +-
 src/Clients/MainApp/FSpot/MetaStore.cs             |   13 +-
 src/Clients/MainApp/FSpot/Photo.cs                 |   48 +-
 src/Clients/MainApp/FSpot/PhotoLoader.cs           |    2 +
 src/Clients/MainApp/FSpot/PhotoPopup.cs            |    9 +-
 src/Clients/MainApp/FSpot/PhotoQuery.cs            |   36 +-
 src/Clients/MainApp/FSpot/PhotoStore.cs            | 1791 ++--
 src/Clients/MainApp/FSpot/PhotoVersion.cs          |    3 +-
 src/Clients/MainApp/FSpot/PhotoView.cs             |   55 +-
 src/Clients/MainApp/FSpot/PixbufCache.cs           |   11 +-
 src/Clients/MainApp/FSpot/Preferences.cs           |    6 +-
 src/Clients/MainApp/FSpot/PrintOperation.cs        |   11 +-
 src/Clients/MainApp/FSpot/ProgressItem.cs          |    5 +
 src/Clients/MainApp/FSpot/QueryWidget.cs           |   11 +-
 src/Clients/MainApp/FSpot/RollStore.cs             |   15 +-
 src/Clients/MainApp/FSpot/RotateCommand.cs         |  122 +-
 .../MainApp/FSpot/SelectionDataExtensions.cs       |   33 +-
 src/Clients/MainApp/FSpot/SendEmail.cs             |    8 +-
 src/Clients/MainApp/FSpot/SingleView.cs            |   24 +-
 src/Clients/MainApp/FSpot/TagQueryWidget.cs        |   95 +-
 src/Clients/MainApp/FSpot/TagSelectionWidget.cs    |  152 +-
 src/Clients/MainApp/FSpot/TagStore.cs              |   34 +-
 src/Clients/MainApp/FSpot/Term.cs                  |   32 +-
 src/Clients/MainApp/FSpot/ThumbnailCache.cs        |   35 +-
 src/Clients/MainApp/FSpot/ThumbnailGenerator.cs    |    8 +-
 src/Clients/MainApp/FSpot/TimeAdaptor.cs           |   23 +-
 src/Clients/MainApp/FSpot/UriCollection.cs         |   12 +-
 src/Clients/MainApp/FSpot/XScreenSaverSlide.cs     |   12 +-
 src/Clients/MainApp/FSpot/main.cs                  |   27 +-
 src/Clients/MainApp/ImageLoaderThread.cs           |   32 +-
 src/Clients/MainApp/MainApp.csproj                 |   49 +-
 src/Clients/MainApp/PhotoTagMenu.cs                |    9 +-
 src/Clients/MainApp/PhotoVersionCommands.cs        |   10 +-
 src/Clients/MainApp/PhotoVersionMenu.cs            |    5 +-
 src/Clients/MainApp/Pinta/CairoExtensions.cs       |    2 +-
 src/Clients/MainApp/Pinta/ColorBgra.cs             |    3 +
 src/Clients/MainApp/Pinta/GaussianBlurEffect.cs    |    3 +-
 src/Clients/MainApp/PixbufUtils.cs                 |   77 +-
 src/Clients/MainApp/TagCommands.cs                 |   25 +-
 src/Clients/MainApp/TagPopup.cs                    |   27 +-
 src/Clients/MainApp/ThumbnailCommand.cs            |    4 +-
 src/Core/FSpot.Bling/FSpot.Bling.csproj            |   41 +-
 src/Core/FSpot.Bling/FSpot.Bling/Animation.cs      |    1 -
 src/Core/FSpot.Bling/FSpot.Bling/BackEase.cs       |    3 +-
 src/Core/FSpot.Bling/FSpot.Bling/CubicEase.cs      |    7 +-
 src/Core/FSpot.Bling/FSpot.Bling/EasedAnimation.cs |    2 +-
 src/Core/FSpot.Bling/FSpot.Bling/QuinticEase.cs    |    8 +-
 src/Core/FSpot.Cms/Cms/CmsException.cs             |    4 +-
 src/Core/FSpot.Cms/Cms/ColorCIELCh.cs              |    7 +
 src/Core/FSpot.Cms/Cms/ColorCIELab.cs              |    5 +
 src/Core/FSpot.Cms/Cms/ColorCIEXYZ.cs              |    4 +
 src/Core/FSpot.Cms/Cms/ColorCIExyY.cs              |    4 +-
 src/Core/FSpot.Cms/Cms/GammaTable.cs               |    4 +
 src/Core/FSpot.Cms/Cms/Profile.cs                  |   16 +-
 src/Core/FSpot.Cms/Cms/SaveException.cs            |    4 +
 src/Core/FSpot.Cms/Cms/Transform.cs                |    4 +
 src/Core/FSpot.Cms/FSpot.Cms.csproj                |   44 +-
 src/Core/FSpot.Core/FSpot.Core.csproj              |   44 +-
 .../FSpot.Core/BrowsableCollectionProxy.cs         |    9 +-
 .../FSpot.Core/FSpot.Core/BrowsableEventArgs.cs    |    2 +
 src/Core/FSpot.Core/FSpot.Core/BrowsablePointer.cs |   36 +-
 .../FSpot.Core/BrowsablePointerChangedEventArgs.cs |    2 +-
 src/Core/FSpot.Core/FSpot.Core/DbItem.cs           |    4 +-
 src/Core/FSpot.Core/FSpot.Core/FilePhoto.cs        |    5 +-
 src/Core/FSpot.Core/FSpot.Core/Global.cs           |    1 -
 src/Core/FSpot.Core/FSpot.Core/IPhoto.cs           |    3 +
 src/Core/FSpot.Core/FSpot.Core/IPhotoComparer.cs   |    1 -
 src/Core/FSpot.Core/FSpot.Core/IPhotoVersion.cs    |    1 +
 .../FSpot.Core/FSpot.Core/IPhotoVersionable.cs     |    2 +
 src/Core/FSpot.Core/FSpot.Core/PhotoChanges.cs     |   34 +-
 src/Core/FSpot.Core/FSpot.Core/PhotoList.cs        |    9 +-
 src/Core/FSpot.Core/FSpot.Core/PhotosChanges.cs    |   18 +-
 src/Core/FSpot.Core/FSpot.Core/Roll.cs             |    1 -
 src/Core/FSpot.Core/FSpot.Core/Tag.cs              |   15 +-
 src/Core/FSpot.Gui/FSpot.Gui.csproj                |   45 +-
 src/Core/FSpot.Gui/FSpot.Gui/CompositeUtils.cs     |    5 +-
 src/Core/FSpot.Gui/FSpot.Gui/WindowOpacityFader.cs |    6 +-
 .../FSpot.Gui/FSpot.Transitions/CairoTransition.cs |    8 +-
 .../FSpot.Transitions/SlideShowTransition.cs       |   16 +-
 .../FSpot.Widgets/ApplicationActivatedEventArgs.cs |    2 +-
 src/Core/FSpot.Gui/FSpot.Widgets/BuilderWindow.cs  |    1 +
 src/Core/FSpot.Gui/FSpot.Widgets/CellGridView.cs   |  895 +-
 src/Core/FSpot.Gui/FSpot.Widgets/CheckPattern.cs   |    1 -
 src/Core/FSpot.Gui/FSpot.Widgets/Curve.cs          |    6 +-
 .../FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs   |   39 +-
 src/Core/FSpot.Gui/FSpot.Widgets/DateEdit.cs       |   10 +-
 src/Core/FSpot.Gui/FSpot.Widgets/HighlightedBox.cs |    3 +-
 src/Core/FSpot.Gui/FSpot.Widgets/ImageView.cs      |  405 +-
 .../FSpot.Gui/FSpot.Widgets/ImageView_Container.cs |  240 +-
 .../FSpot.Gui/FSpot.Widgets/ImageView_Panning.cs   |    1 +
 src/Core/FSpot.Gui/FSpot.Widgets/Layout.cs         |   60 +-
 src/Core/FSpot.Gui/FSpot.Widgets/MenuButton.cs     |   18 +-
 src/Core/FSpot.Gui/FSpot.Widgets/OpenWithMenu.cs   |   15 +-
 src/Core/FSpot.Gui/FSpot.Widgets/RatingEntry.cs    |    2 +
 src/Core/FSpot.Gui/FSpot.Widgets/RatingRenderer.cs |   23 +-
 src/Core/FSpot.Gui/FSpot.Widgets/SaneTreeView.cs   |    1 -
 src/Core/FSpot.Gui/FSpot.Widgets/ScrolledView.cs   |    7 +-
 .../FSpot.Gui/FSpot.Widgets/SelectionCollection.cs |   84 +-
 src/Core/FSpot.Gui/FSpot.Widgets/ToolTipWindow.cs  |    1 +
 .../FSpot.JobScheduler/Banshee.Base/FSpotCompat.cs |   10 +-
 .../Banshee.Kernel/IInstanceCriticalJob.cs         |    2 +
 src/Core/FSpot.JobScheduler/Banshee.Kernel/IJob.cs |    2 +
 .../Banshee.Kernel/IntervalHeap.cs                 |  715 +-
 .../Banshee.Kernel/JobPriority.cs                  |    2 +
 .../FSpot.JobScheduler/Banshee.Kernel/Scheduler.cs |    5 +-
 .../FSpot.JobScheduler/FSpot.JobScheduler.csproj   |   41 +-
 src/Core/FSpot.Platform/FSpot.Platform.csproj      |   41 +-
 .../FSpot.Platform/PreferenceBackend.cs            |    7 +-
 .../FSpot.Platform/FSpot.Platform/ScreenSaver.cs   |    1 +
 src/Core/FSpot.Platform/FSpot.Platform/WebProxy.cs |    1 -
 src/Core/FSpot.Query/FSpot.Query.csproj            |   41 +-
 src/Core/FSpot.Query/FSpot.Query/DateRange.cs      |    1 -
 src/Core/FSpot.Query/FSpot.Query/FolderSet.cs      |    2 +-
 src/Core/FSpot.Query/FSpot.Query/LogicalTerm.cs    |   25 +-
 src/Core/FSpot.Utils/FSpot.Utils.csproj            |   44 +-
 src/Core/FSpot.Utils/FSpot.Utils/Cache.cs          |    7 +-
 src/Core/FSpot.Utils/FSpot.Utils/CairoUtils.cs     |    2 +-
 .../FSpot.Utils/FSpot.Utils/DelayedOperation.cs    |    6 +-
 src/Core/FSpot.Utils/FSpot.Utils/FileExtensions.cs |    5 +-
 .../FSpot.Utils/GIOTagLibFileAbstraction.cs        |    2 -
 src/Core/FSpot.Utils/FSpot.Utils/GdkUtils.cs       |    4 +-
 src/Core/FSpot.Utils/FSpot.Utils/GtkUtil.cs        |   12 +-
 src/Core/FSpot.Utils/FSpot.Utils/Metadata.cs       |    7 +-
 src/Core/FSpot.Utils/FSpot.Utils/PixbufUtils.cs    |   43 +-
 .../FSpot.Utils/RecursiveFileEnumerator.cs         |    3 +-
 .../FSpot.Utils/FSpot.Utils/SafeUriExtensions.cs   |    3 +-
 .../FSpot.Utils/SidecarXmpExtensions.cs            |  115 +-
 .../FSpot.Utils/TargetListExtensionMethods.cs      |    3 +-
 src/Core/FSpot.Utils/FSpot.Utils/UriList.cs        |   12 +-
 src/Core/FSpot.Utils/FSpot.Utils/UriUtils.cs       |    1 +
 .../FSpot.Utils/FSpot.Utils/XdgThumbnailSpec.cs    |   11 +-
 .../FSpot.Addins.Editors/BWEditor.cs               |   11 +-
 .../FSpot.Editors.BW/FSpot.Editors.BW.csproj       |   45 +-
 .../FSpot.Addins.Editors/BlackoutEditor.cs         |    3 +-
 .../FSpot.Editors.Blackout.csproj                  |   45 +-
 .../FSpot.Addins.Editors/FlipEditor.cs             |   15 +-
 .../FSpot.Editors.Flip/FSpot.Editors.Flip.csproj   |   44 +-
 .../FSpot.Addins.Editors/PixelateEditor.cs         |    3 +-
 .../FSpot.Editors.Pixelate.csproj                  |   45 +-
 .../FSpot.Addins.Editors/ResizeEditor.cs           |    6 +-
 .../FSpot.Editors.Resize.csproj                    |   45 +-
 .../FSpot.Exporters.CD/FSpot.Exporters.CD.csproj   |   44 +-
 .../FSpot.Exporters.CD/Brasero.cs                  |    4 +-
 .../FSpot.Exporters.CD/CDExport.cs                 |   18 +-
 .../FSpot.Exporters.CD/CDExportDialog.cs           |   12 +-
 .../FSpot.Exporters.Facebook.csproj                |   45 +-
 .../FSpot.Exporters.Facebook/FacebookExport.cs     |   79 +-
 .../FacebookExportDialog.cs                        |  104 +-
 .../FSpot.Exporters.Facebook/FacebookTagPopup.cs   |   12 +-
 .../FindNullableClashes.cs                         |    1 -
 .../Mono.Facebook/Album.cs                         |   11 +-
 .../Mono.Facebook/Error.cs                         |    2 +-
 .../Mono.Facebook/Event.cs                         |    7 +-
 .../Mono.Facebook/FacebookException.cs             |   16 +-
 .../Mono.Facebook/FacebookParam.cs                 |   16 +-
 .../Mono.Facebook/FacebookSession.cs               |   11 +-
 .../Mono.Facebook/Friend.cs                        |    7 +-
 .../Mono.Facebook/FriendInfo.cs                    |    2 +-
 .../Mono.Facebook/Group.cs                         |    3 +-
 .../Mono.Facebook/Location.cs                      |    2 +-
 .../Mono.Facebook/Notification.cs                  |    4 +-
 .../Mono.Facebook/PeopleList.cs                    |    3 +-
 .../Mono.Facebook/Photo.cs                         |    9 +-
 .../Mono.Facebook/Responses.cs                     |    4 +-
 .../Mono.Facebook/SessionInfo.cs                   |    6 +-
 .../Mono.Facebook/SessionWrapper.cs                |    1 +
 .../FSpot.Exporters.Facebook/Mono.Facebook/Tag.cs  |   11 +-
 .../FSpot.Exporters.Facebook/Mono.Facebook/User.cs |    1 -
 .../FSpot.Exporters.Facebook/Mono.Facebook/Util.cs |   33 +-
 .../FSpot.Exporters.Flickr.csproj                  |   47 +-
 .../FSpot.Exporters.Flickr/FlickrExport.cs         |   67 +-
 .../FSpot.Exporters.Flickr/FlickrRemote.cs         |   17 +-
 .../FSpot.Exporters.Folder.csproj                  |   47 +-
 .../FSpot.Exporters.Folder/FolderExport.cs         |   18 +-
 .../FSpot.Exporters.Folder/FolderGallery.cs        |   19 +-
 .../FSpot.Exporters.Folder/HtmlGallery.cs          |    7 +-
 .../FSpot.Exporters.Folder/OriginalGallery.cs      |    5 +-
 .../FSpot.Exporters.Gallery.csproj                 |   47 +-
 .../FSpot.Exporters.Gallery/AccountDialog.cs       |    4 +-
 .../FSpot.Exporters.Gallery/FormClient.cs          |   49 +-
 .../FSpot.Exporters.Gallery/Gallery2.cs            |    2 +-
 .../FSpot.Exporters.Gallery/GalleryAccount.cs      |   13 +-
 .../FSpot.Exporters.Gallery/GalleryAddAlbum.cs     |    8 +-
 .../FSpot.Exporters.Gallery/GalleryExport.cs       |    9 +-
 .../FSpot.Exporters.Gallery/GalleryRemote.cs       |   28 +-
 .../FSpot.Exporters.PicasaWeb.csproj               |   47 +-
 .../FSpot.Exporters.PicasaWeb/GoogleAccount.cs     |   61 +-
 .../GoogleAccountDialog.cs                         |   22 +-
 .../GoogleAccountManager.cs                        |   21 +-
 .../FSpot.Exporters.PicasaWeb/GoogleAddAlbum.cs    |   21 +-
 .../FSpot.Exporters.PicasaWeb/PicasaWebExport.cs   |   33 +-
 .../FSpot.Exporters.SmugMug.csproj                 |   48 +-
 .../FSpot.Exporters.SmugMug/SmugMugAccount.cs      |   19 +-
 .../SmugMugAccountDialog.cs                        |   26 +-
 .../SmugMugAccountManager.cs                       |   27 +-
 .../FSpot.Exporters.SmugMug/SmugMugAddAlbum.cs     |   30 +-
 .../FSpot.Exporters.SmugMug/SmugMugExport.cs       |   62 +-
 .../FSpot.Exporters.Tabblo.csproj                  |   45 +-
 .../ApplicationCentricCertificatePolicy.cs         |    1 +
 .../FSpot.Exporters.Tabblo/FSpotUploadProgress.cs  |    7 +-
 .../FSpot.Exporters.Tabblo/TabbloExport.cs         |   17 +-
 .../FSpot.Exporters.Tabblo/TabbloExportModel.cs    |   41 +-
 .../FSpot.Exporters.Tabblo/TabbloExportView.cs     |    2 +
 .../FSpot.Exporters.Zip/FSpot.Exporters.Zip.csproj |   47 +-
 .../FSpot.Exporters.Zip/ZipExport.cs               |   31 +-
 .../FSpotExporters.UnitTests.csproj                |   42 +-
 .../FSpot.Tools.ChangePhotoPath.csproj             |   47 +-
 .../ChangePhotoPathController.cs                   |   22 +-
 .../ChangePhotoPathGui.cs                          |   17 +-
 .../FSpot.Tools.DevelopInUFraw.csproj              |   46 +-
 .../AbstractDevelopInUFRaw.cs                      |   21 +-
 .../FSpot.Tools.DevelopInUFraw/DevelopInUFRaw.cs   |    9 +
 .../DevelopInUFRawBatch.cs                         |   15 +-
 .../FSpot.Tools.LiveWebGallery.csproj              |   45 +-
 .../GalleryRequestHandler.cs                       |   71 +-
 .../FSpot.Tools.LiveWebGallery/LiveWebGallery.cs   |   11 +-
 .../LiveWebGalleryDialog.cs                        |    9 +-
 .../PhotoRequestHandler.cs                         |    4 +-
 .../ResourceRequestHandler.cs                      |    4 +
 .../FSpot.Tools.LiveWebGallery/SimpleWebServer.cs  |    7 +-
 .../FSpot.Tools.MergeDb/FSpot.Tools.MergeDb.csproj |   47 +-
 .../FSpot.Tools.MergeDb/MergeDb.cs                 |  101 +-
 .../FSpot.Tools.MergeDb/MergeDbDialog.cs           |    9 +-
 .../FSpot.Tools.MergeDb/PickFolderDialog.cs        |   11 +-
 .../FSpot.Tools.RawPlusJpeg.csproj                 |   45 +-
 .../FSpot.Tools.RawPlusJpeg/RawPlusJpeg.cs         |    6 +-
 .../FSpot.Tools.RetroactiveRoll.csproj             |   41 +-
 .../FSpot.Tools.RetroactiveRoll/RetroactiveRoll.cs |    6 +-
 .../FSpot.Tools.ScreensaverConfig.csproj           |   45 +-
 .../ScreensaverConfig.cs                           |    7 +-
 .../FSpot.Addins.Transitions/Cover.cs              |    7 +-
 .../FSpot.Transitions.Cover.csproj                 |   48 +-
 .../FSpot.Addins.Transitions/Dissolve.cs           |    7 +-
 .../FSpot.Transitions.Dissolve.csproj              |   48 +-
 .../FSpot.Addins.Transitions/Push.cs               |    7 +-
 .../FSpot.Transitions.Push.csproj                  |   47 +-
 431 files changed, 23283 insertions(+), 23788 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index a02db67..cc7a774 100644
--- a/.gitignore
+++ b/.gitignore
@@ -67,5 +67,3 @@ help/*/*.xml
 /test-results/
 /src/Clients/MainApp.UnitTest/test-results/
 /src/Extensions/Exporters/FSpotExporters.UnitTests/bin/
-obj/
-*.user
diff --git a/F-Spot.sln b/F-Spot.sln
index 9cac95e..bdebbc3 100644
--- a/F-Spot.sln
+++ b/F-Spot.sln
@@ -1,22 +1,8 @@
 ï
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{6DC9A109-EC89-4221-B8CD-9E88B589DBC1}"
 EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{6369E0D4-0A68-4D4E-A6A0-EF2EA793002F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Clients", "Clients", "{9D75644A-DEF1-4362-8553-4B5F09783DC9}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{7D049DAA-F1B0-4697-9BCA-91FC0E1A2B9D}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Editors", "Editors", "{416E19A2-9CD9-498F-BE75-20AB74535ACD}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transitions", "Transitions", "{E9BCB7B9-3D8C-4C5C-B6FA-0BBAC6611106}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{78EC5D8B-299B-4724-844D-6F3A8E8D1536}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Exporters", "Exporters", "{C9302C4A-B571-4F8E-8FFA-7B4C7DF8B3E3}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Bling", "src\Core\FSpot.Bling\FSpot.Bling.csproj", "{7281334F-0B1D-4383-9EA2-6740D56ADCDE}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Cms", "src\Core\FSpot.Cms\FSpot.Cms.csproj", "{9D66BC1B-4390-4B8D-8468-19D5A862EC23}"
@@ -33,6 +19,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Utils", "src\Core\FSp
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Gui", "src\Core\FSpot.Gui\FSpot.Gui.csproj", "{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{6369E0D4-0A68-4D4E-A6A0-EF2EA793002F}"
+EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hyena", "lib\Hyena\Hyena\Hyena.csproj", "{95374549-9553-4C1E-9D89-667755F90E12}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hyena.Data.Sqlite", "lib\Hyena\Hyena.Data.Sqlite\Hyena.Data.Sqlite.csproj", "{95374549-9553-4C1E-9D89-667755F90E13}"
@@ -45,10 +33,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmugMugNet", "lib\SmugMugNe
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Tabblo", "lib\Mono.Tabblo\Mono.Tabblo.csproj", "{B5CDF05C-278A-40AA-A587-B27A00BD9135}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Clients", "Clients", "{9D75644A-DEF1-4362-8553-4B5F09783DC9}"
+EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MainApp", "src\Clients\MainApp\MainApp.csproj", "{27EC05FB-0223-4B26-8157-E49AF81D0007}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MainApp.UnitTest", "src\Clients\MainApp.UnitTest\MainApp.UnitTest.csproj", "{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{7D049DAA-F1B0-4697-9BCA-91FC0E1A2B9D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Editors", "Editors", "{416E19A2-9CD9-498F-BE75-20AB74535ACD}"
+EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Editors.Blackout", "src\Extensions\Editors\FSpot.Editors.Blackout\FSpot.Editors.Blackout.csproj", "{7011154B-87B0-4C54-98DD-B5FF1E60B75F}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Editors.BW", "src\Extensions\Editors\FSpot.Editors.BW\FSpot.Editors.BW.csproj", "{61DAD6B1-E866-485B-819E-A9E86B793F5E}"
@@ -59,12 +53,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Editors.Pixelate", "s
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Editors.Resize", "src\Extensions\Editors\FSpot.Editors.Resize\FSpot.Editors.Resize.csproj", "{1F610540-D2ED-4F58-87CE-9092A43DBD4A}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transitions", "Transitions", "{E9BCB7B9-3D8C-4C5C-B6FA-0BBAC6611106}"
+EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Transitions.Cover", "src\Extensions\Transitions\FSpot.Transitions.Cover\FSpot.Transitions.Cover.csproj", "{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Transitions.Dissolve", "src\Extensions\Transitions\FSpot.Transitions.Dissolve\FSpot.Transitions.Dissolve.csproj", "{ECF8996A-DE63-4225-927F-84641E0EB794}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Transitions.Push", "src\Extensions\Transitions\FSpot.Transitions.Push\FSpot.Transitions.Push.csproj", "{D6004A34-A123-415D-A79C-21FD3F96A1E5}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{78EC5D8B-299B-4724-844D-6F3A8E8D1536}"
+EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Tools.ChangePhotoPath", "src\Extensions\Tools\FSpot.Tools.ChangePhotoPath\FSpot.Tools.ChangePhotoPath.csproj", "{4E372D8D-A822-40F2-8C64-25F2296DAC6F}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Tools.DevelopInUFraw", "src\Extensions\Tools\FSpot.Tools.DevelopInUFraw\FSpot.Tools.DevelopInUFraw.csproj", "{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}"
@@ -79,6 +77,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Tools.RetroactiveRoll
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Tools.ScreensaverConfig", "src\Extensions\Tools\FSpot.Tools.ScreensaverConfig\FSpot.Tools.ScreensaverConfig.csproj", "{A19E926A-19C5-428B-8518-8CCC7B255C42}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Exporters", "Exporters", "{C9302C4A-B571-4F8E-8FFA-7B4C7DF8B3E3}"
+EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Exporters.CD", "src\Extensions\Exporters\FSpot.Exporters.CD\FSpot.Exporters.CD.csproj", "{3CBAA4AE-AC83-4043-BBB5-6EA7962EC983}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSpot.Exporters.Facebook", "src\Extensions\Exporters\FSpot.Exporters.Facebook\FSpot.Exporters.Facebook.csproj", "{7004A4E6-12A5-46F1-BB1F-578FA9B63493}"
@@ -102,289 +102,235 @@ EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
-		Default|Any CPU = Default|Any CPU
-		Release|Any CPU = Release|Any CPU
 		Submodule|Any CPU = Submodule|Any CPU
+		Release|Any CPU = Release|Any CPU
+		Default|Any CPU = Default|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Release|Any CPU.Build.0 = Release|Any CPU
-		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Release|Any CPU.Build.0 = Release|Any CPU
-		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Release|Any CPU.Build.0 = Release|Any CPU
-		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{57EDC3BC-E777-4400-B4E7-32A5D8F15A76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{57EDC3BC-E777-4400-B4E7-32A5D8F15A76}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{57EDC3BC-E777-4400-B4E7-32A5D8F15A76}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{57EDC3BC-E777-4400-B4E7-32A5D8F15A76}.Release|Any CPU.ActiveCfg = Debug|Any CPU
-		{57EDC3BC-E777-4400-B4E7-32A5D8F15A76}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Release|Any CPU.Build.0 = Release|Any CPU
-		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Release|Any CPU.Build.0 = Release|Any CPU
-		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Submodule|Any CPU.Build.0 = Debug|Any CPU
 		{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}.Default|Any CPU.ActiveCfg = Debug|Any CPU
 		{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}.Release|Any CPU.Build.0 = Release|Any CPU
 		{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
 		{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E12}.Debug|Any CPU.ActiveCfg = Submodule|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E12}.Debug|Any CPU.Build.0 = Submodule|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E12}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E12}.Release|Any CPU.ActiveCfg = Debug|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E12}.Release|Any CPU.Build.0 = Debug|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E12}.Submodule|Any CPU.ActiveCfg = Submodule|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E12}.Submodule|Any CPU.Build.0 = Submodule|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E13}.Debug|Any CPU.ActiveCfg = Submodule|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E13}.Debug|Any CPU.Build.0 = Submodule|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E13}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E13}.Release|Any CPU.ActiveCfg = Debug|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E13}.Release|Any CPU.Build.0 = Debug|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E13}.Submodule|Any CPU.ActiveCfg = Submodule|Any CPU
-		{95374549-9553-4C1E-9D89-667755F90E13}.Submodule|Any CPU.Build.0 = Submodule|Any CPU
-		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Debug|Any CPU.ActiveCfg = Submodule|Any CPU
-		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Debug|Any CPU.Build.0 = Submodule|Any CPU
-		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Release|Any CPU.ActiveCfg = Debug|Any CPU
-		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Release|Any CPU.Build.0 = Debug|Any CPU
-		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Submodule|Any CPU.ActiveCfg = Submodule|Any CPU
-		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Submodule|Any CPU.Build.0 = Submodule|Any CPU
-		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Release|Any CPU.Build.0 = Release|Any CPU
-		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Release|Any CPU.Build.0 = Release|Any CPU
-		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Release|Any CPU.Build.0 = Release|Any CPU
-		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Release|Any CPU.Build.0 = Release|Any CPU
-		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Release|Any CPU.Build.0 = Release|Any CPU
-		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Release|Any CPU.Build.0 = Release|Any CPU
-		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{8EB3933F-A089-43A3-B662-617DC71A2173}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{8EB3933F-A089-43A3-B662-617DC71A2173}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{8EB3933F-A089-43A3-B662-617DC71A2173}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{8EB3933F-A089-43A3-B662-617DC71A2173}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{8EB3933F-A089-43A3-B662-617DC71A2173}.Release|Any CPU.Build.0 = Release|Any CPU
-		{8EB3933F-A089-43A3-B662-617DC71A2173}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{8EB3933F-A089-43A3-B662-617DC71A2173}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Release|Any CPU.Build.0 = Release|Any CPU
-		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{ECF8996A-DE63-4225-927F-84641E0EB794}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{ECF8996A-DE63-4225-927F-84641E0EB794}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{ECF8996A-DE63-4225-927F-84641E0EB794}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{ECF8996A-DE63-4225-927F-84641E0EB794}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{ECF8996A-DE63-4225-927F-84641E0EB794}.Release|Any CPU.Build.0 = Release|Any CPU
-		{ECF8996A-DE63-4225-927F-84641E0EB794}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{ECF8996A-DE63-4225-927F-84641E0EB794}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Release|Any CPU.Build.0 = Release|Any CPU
-		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Release|Any CPU.Build.0 = Release|Any CPU
-		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Submodule|Any CPU.Build.0 = Debug|Any CPU
 		{08D1D5D9-22E6-40C8-802F-FD9BF5161481}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{08D1D5D9-22E6-40C8-802F-FD9BF5161481}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{08D1D5D9-22E6-40C8-802F-FD9BF5161481}.Default|Any CPU.ActiveCfg = Debug|Any CPU
 		{08D1D5D9-22E6-40C8-802F-FD9BF5161481}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{08D1D5D9-22E6-40C8-802F-FD9BF5161481}.Release|Any CPU.Build.0 = Release|Any CPU
 		{08D1D5D9-22E6-40C8-802F-FD9BF5161481}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
 		{08D1D5D9-22E6-40C8-802F-FD9BF5161481}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Release|Any CPU.Build.0 = Release|Any CPU
+		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{1F610540-D2ED-4F58-87CE-9092A43DBD4A}.Submodule|Any CPU.Build.0 = Debug|Any CPU
 		{203D1EDB-3885-4CD7-BBA1-190393E4876A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{203D1EDB-3885-4CD7-BBA1-190393E4876A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{203D1EDB-3885-4CD7-BBA1-190393E4876A}.Default|Any CPU.ActiveCfg = Debug|Any CPU
 		{203D1EDB-3885-4CD7-BBA1-190393E4876A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{203D1EDB-3885-4CD7-BBA1-190393E4876A}.Release|Any CPU.Build.0 = Release|Any CPU
 		{203D1EDB-3885-4CD7-BBA1-190393E4876A}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
 		{203D1EDB-3885-4CD7-BBA1-190393E4876A}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{55199016-6D69-4F52-AB82-06FC99408E78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{55199016-6D69-4F52-AB82-06FC99408E78}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{55199016-6D69-4F52-AB82-06FC99408E78}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{55199016-6D69-4F52-AB82-06FC99408E78}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{55199016-6D69-4F52-AB82-06FC99408E78}.Release|Any CPU.Build.0 = Release|Any CPU
-		{55199016-6D69-4F52-AB82-06FC99408E78}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{55199016-6D69-4F52-AB82-06FC99408E78}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Release|Any CPU.Build.0 = Release|Any CPU
-		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Release|Any CPU.Build.0 = Release|Any CPU
+		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{27EC05FB-0223-4B26-8157-E49AF81D0007}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{2D3B12F7-ABF3-4784-92FE-78A1C775E157}.Submodule|Any CPU.Build.0 = Debug|Any CPU
 		{3CBAA4AE-AC83-4043-BBB5-6EA7962EC983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{3CBAA4AE-AC83-4043-BBB5-6EA7962EC983}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{3CBAA4AE-AC83-4043-BBB5-6EA7962EC983}.Default|Any CPU.ActiveCfg = Debug|Any CPU
 		{3CBAA4AE-AC83-4043-BBB5-6EA7962EC983}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{3CBAA4AE-AC83-4043-BBB5-6EA7962EC983}.Release|Any CPU.Build.0 = Release|Any CPU
 		{3CBAA4AE-AC83-4043-BBB5-6EA7962EC983}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
 		{3CBAA4AE-AC83-4043-BBB5-6EA7962EC983}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Release|Any CPU.Build.0 = Release|Any CPU
+		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{40C7D4EA-FB93-49FE-B18F-700A28C3E670}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{414E9813-E0A8-4BD4-8694-485F528518F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{414E9813-E0A8-4BD4-8694-485F528518F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{414E9813-E0A8-4BD4-8694-485F528518F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{414E9813-E0A8-4BD4-8694-485F528518F5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{414E9813-E0A8-4BD4-8694-485F528518F5}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{414E9813-E0A8-4BD4-8694-485F528518F5}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Release|Any CPU.Build.0 = Release|Any CPU
+		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{46049AF4-97E0-4EE5-A5CB-A9D0C9026B25}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{4E372D8D-A822-40F2-8C64-25F2296DAC6F}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{53DAC12F-0421-4F5E-A746-17A701D2BDDA}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{55199016-6D69-4F52-AB82-06FC99408E78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{55199016-6D69-4F52-AB82-06FC99408E78}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{55199016-6D69-4F52-AB82-06FC99408E78}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{55199016-6D69-4F52-AB82-06FC99408E78}.Release|Any CPU.Build.0 = Release|Any CPU
+		{55199016-6D69-4F52-AB82-06FC99408E78}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{55199016-6D69-4F52-AB82-06FC99408E78}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{57EDC3BC-E777-4400-B4E7-32A5D8F15A76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{57EDC3BC-E777-4400-B4E7-32A5D8F15A76}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{61DAD6B1-E866-485B-819E-A9E86B793F5E}.Submodule|Any CPU.Build.0 = Debug|Any CPU
 		{7004A4E6-12A5-46F1-BB1F-578FA9B63493}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7004A4E6-12A5-46F1-BB1F-578FA9B63493}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7004A4E6-12A5-46F1-BB1F-578FA9B63493}.Default|Any CPU.ActiveCfg = Debug|Any CPU
 		{7004A4E6-12A5-46F1-BB1F-578FA9B63493}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{7004A4E6-12A5-46F1-BB1F-578FA9B63493}.Release|Any CPU.Build.0 = Release|Any CPU
 		{7004A4E6-12A5-46F1-BB1F-578FA9B63493}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
 		{7004A4E6-12A5-46F1-BB1F-578FA9B63493}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Release|Any CPU.Build.0 = Release|Any CPU
-		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{13D4FF63-5D83-42D7-AE4C-56BB512D5D89}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{7011154B-87B0-4C54-98DD-B5FF1E60B75F}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{7203A6ED-DA2E-4D56-B1AF-4C296A1C39D5}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{7281334F-0B1D-4383-9EA2-6740D56ADCDE}.Submodule|Any CPU.Build.0 = Debug|Any CPU
 		{7FBEAF56-65E5-4C07-B346-C6A0BC87B368}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7FBEAF56-65E5-4C07-B346-C6A0BC87B368}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7FBEAF56-65E5-4C07-B346-C6A0BC87B368}.Default|Any CPU.ActiveCfg = Debug|Any CPU
 		{7FBEAF56-65E5-4C07-B346-C6A0BC87B368}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{7FBEAF56-65E5-4C07-B346-C6A0BC87B368}.Release|Any CPU.Build.0 = Release|Any CPU
 		{7FBEAF56-65E5-4C07-B346-C6A0BC87B368}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
 		{7FBEAF56-65E5-4C07-B346-C6A0BC87B368}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Release|Any CPU.Build.0 = Release|Any CPU
-		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Release|Any CPU.Build.0 = Release|Any CPU
-		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{0735C3A2-17C1-4C8B-9653-3854AFD64D6D}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{8EB3933F-A089-43A3-B662-617DC71A2173}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8EB3933F-A089-43A3-B662-617DC71A2173}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8EB3933F-A089-43A3-B662-617DC71A2173}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8EB3933F-A089-43A3-B662-617DC71A2173}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8EB3933F-A089-43A3-B662-617DC71A2173}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{8EB3933F-A089-43A3-B662-617DC71A2173}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E12}.Debug|Any CPU.ActiveCfg = Submodule|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E12}.Debug|Any CPU.Build.0 = Submodule|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E12}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E12}.Release|Any CPU.Build.0 = Debug|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E12}.Submodule|Any CPU.ActiveCfg = Submodule|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E12}.Submodule|Any CPU.Build.0 = Submodule|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E13}.Debug|Any CPU.ActiveCfg = Submodule|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E13}.Debug|Any CPU.Build.0 = Submodule|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E13}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E13}.Release|Any CPU.Build.0 = Debug|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E13}.Submodule|Any CPU.ActiveCfg = Submodule|Any CPU
+		{95374549-9553-4C1E-9D89-667755F90E13}.Submodule|Any CPU.Build.0 = Submodule|Any CPU
+		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{9D66BC1B-4390-4B8D-8468-19D5A862EC23}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{A19E926A-19C5-428B-8518-8CCC7B255C42}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{A2A7E62B-8AE1-44F3-BB1B-B8E2DE7916C4}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{B5CDF05C-278A-40AA-A587-B27A00BD9135}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{B850C11B-69B7-45A4-AB1D-1BECA8C667C0}.Submodule|Any CPU.Build.0 = Debug|Any CPU
 		{BE981FC8-9B41-4336-815C-ECC365AE05D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{BE981FC8-9B41-4336-815C-ECC365AE05D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{BE981FC8-9B41-4336-815C-ECC365AE05D4}.Default|Any CPU.ActiveCfg = Debug|Any CPU
 		{BE981FC8-9B41-4336-815C-ECC365AE05D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{BE981FC8-9B41-4336-815C-ECC365AE05D4}.Release|Any CPU.Build.0 = Release|Any CPU
 		{BE981FC8-9B41-4336-815C-ECC365AE05D4}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
 		{BE981FC8-9B41-4336-815C-ECC365AE05D4}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Release|Any CPU.Build.0 = Release|Any CPU
-		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{4C9355A7-1797-4708-A1F2-FBCDB782D04D}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-		{414E9813-E0A8-4BD4-8694-485F528518F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{414E9813-E0A8-4BD4-8694-485F528518F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{414E9813-E0A8-4BD4-8694-485F528518F5}.Default|Any CPU.ActiveCfg = Debug|Any CPU
-		{414E9813-E0A8-4BD4-8694-485F528518F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{414E9813-E0A8-4BD4-8694-485F528518F5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{414E9813-E0A8-4BD4-8694-485F528518F5}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
-		{414E9813-E0A8-4BD4-8694-485F528518F5}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Debug|Any CPU.ActiveCfg = Submodule|Any CPU
+		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Debug|Any CPU.Build.0 = Submodule|Any CPU
+		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Release|Any CPU.Build.0 = Debug|Any CPU
+		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Submodule|Any CPU.ActiveCfg = Submodule|Any CPU
+		{C856EFD8-E812-4E61-8B76-E3583D94C233}.Submodule|Any CPU.Build.0 = Submodule|Any CPU
+		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{CE160879-1BF0-4711-A18F-FDA2772900FA}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{D4E4D07E-D323-4CAE-BE04-8EE8EDF7F07E}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{D6004A34-A123-415D-A79C-21FD3F96A1E5}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{E55F73E0-576A-4FE2-9108-E76960820AA3}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{ECF8996A-DE63-4225-927F-84641E0EB794}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{ECF8996A-DE63-4225-927F-84641E0EB794}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{ECF8996A-DE63-4225-927F-84641E0EB794}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{ECF8996A-DE63-4225-927F-84641E0EB794}.Release|Any CPU.Build.0 = Release|Any CPU
+		{ECF8996A-DE63-4225-927F-84641E0EB794}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{ECF8996A-DE63-4225-927F-84641E0EB794}.Submodule|Any CPU.Build.0 = Debug|Any CPU
 		{F38C0ADF-29A3-453B-B272-61CC5BF3BB1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{F38C0ADF-29A3-453B-B272-61CC5BF3BB1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{F38C0ADF-29A3-453B-B272-61CC5BF3BB1E}.Default|Any CPU.ActiveCfg = Debug|Any CPU
@@ -393,9 +339,18 @@ Global
 		{F38C0ADF-29A3-453B-B272-61CC5BF3BB1E}.Release|Any CPU.Build.0 = Release|Any CPU
 		{F38C0ADF-29A3-453B-B272-61CC5BF3BB1E}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
 		{F38C0ADF-29A3-453B-B272-61CC5BF3BB1E}.Submodule|Any CPU.Build.0 = Debug|Any CPU
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
+		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{FBA30EB0-05EB-446D-827D-D41EBF4B81E4}.Submodule|Any CPU.Build.0 = Debug|Any CPU
+		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Submodule|Any CPU.ActiveCfg = Debug|Any CPU
+		{FFC3D9B1-B19A-44D8-8AA2-96DDE911320E}.Submodule|Any CPU.Build.0 = Debug|Any CPU
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
 		{7281334F-0B1D-4383-9EA2-6740D56ADCDE} = {6DC9A109-EC89-4221-B8CD-9E88B589DBC1}
diff --git a/autogen.sh b/autogen.sh
old mode 100644
new mode 100755
diff --git a/build/dll-map-makefile-verifier b/build/dll-map-makefile-verifier
old mode 100644
new mode 100755
diff --git a/build/private-icon-theme-installer b/build/private-icon-theme-installer
old mode 100644
new mode 100755
diff --git a/icon-theme-installer b/icon-theme-installer
old mode 100644
new mode 100755
diff --git a/lib/Mono.Google/Mono.Google.csproj b/lib/Mono.Google/Mono.Google.csproj
index 2d73098..b9e2c46 100644
--- a/lib/Mono.Google/Mono.Google.csproj
+++ b/lib/Mono.Google/Mono.Google.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>Mono.Google</RootNamespace>
     <AssemblyName>Mono.Google</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -88,21 +68,8 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Mono.Google\" />
+    <Folder Include="Mono.Google.Picasa\" />
   </ItemGroup>
   <ItemGroup>
     <Reference Include="System" />
diff --git a/lib/Mono.Tabblo/Mono.Tabblo.csproj b/lib/Mono.Tabblo/Mono.Tabblo.csproj
index 14bbd57..011f842 100644
--- a/lib/Mono.Tabblo/Mono.Tabblo.csproj
+++ b/lib/Mono.Tabblo/Mono.Tabblo.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>Mono.Tabblo</RootNamespace>
     <AssemblyName>Mono.Tabblo</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -78,21 +58,7 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Mono.Tabblo\" />
   </ItemGroup>
   <ItemGroup>
     <Reference Include="Mono.Posix" />
diff --git a/lib/SmugMugNet/SmugMugNet.csproj b/lib/SmugMugNet/SmugMugNet.csproj
index fb60d37..30ed122 100644
--- a/lib/SmugMugNet/SmugMugNet.csproj
+++ b/lib/SmugMugNet/SmugMugNet.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>SmugMugNet</RootNamespace>
     <AssemblyName>SmugMugNet</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -77,21 +57,7 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="SmugMugNet\" />
   </ItemGroup>
   <ItemGroup>
     <Reference Include="System" />
diff --git a/lib/dpap-sharp/dpap-client/dpap-sharp.dll b/lib/dpap-sharp/dpap-client/dpap-sharp.dll
deleted file mode 100644
index f4f70db..0000000
--- a/lib/dpap-sharp/dpap-client/dpap-sharp.dll
+++ /dev/null
@@ -1 +0,0 @@
-../lib/dpap-sharp.dll
\ No newline at end of file
diff --git a/lib/dpap-sharp/dpap-client/dpap-sharp.dll b/lib/dpap-sharp/dpap-client/dpap-sharp.dll
new file mode 120000
index 0000000..f4f70db
--- /dev/null
+++ b/lib/dpap-sharp/dpap-client/dpap-sharp.dll
@@ -0,0 +1 @@
+../lib/dpap-sharp.dll
\ No newline at end of file
diff --git a/lib/dpap-sharp/dpap-server/dpap-sharp.dll b/lib/dpap-sharp/dpap-server/dpap-sharp.dll
deleted file mode 100644
index f4f70db..0000000
--- a/lib/dpap-sharp/dpap-server/dpap-sharp.dll
+++ /dev/null
@@ -1 +0,0 @@
-../lib/dpap-sharp.dll
\ No newline at end of file
diff --git a/lib/dpap-sharp/dpap-server/dpap-sharp.dll b/lib/dpap-sharp/dpap-server/dpap-sharp.dll
new file mode 120000
index 0000000..f4f70db
--- /dev/null
+++ b/lib/dpap-sharp/dpap-server/dpap-sharp.dll
@@ -0,0 +1 @@
+../lib/dpap-sharp.dll
\ No newline at end of file
diff --git a/lib/gio-sharp/generator/AliasGen.cs b/lib/gio-sharp/generator/AliasGen.cs
index 3134aa7..19911d6 100644
--- a/lib/gio-sharp/generator/AliasGen.cs
+++ b/lib/gio-sharp/generator/AliasGen.cs
@@ -1,30 +1,30 @@
-// GtkSharp.Generation.AliasGen.cs - The Alias type Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2003 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class AliasGen : SimpleBase {
-		
-		public AliasGen (string ctype, string type) : base (ctype, type, String.Empty) {}
-	}
-}
-
+// GtkSharp.Generation.AliasGen.cs - The Alias type Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class AliasGen : SimpleBase {
+		
+		public AliasGen (string ctype, string type) : base (ctype, type, String.Empty) {}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/BoxedGen.cs b/lib/gio-sharp/generator/BoxedGen.cs
index 6f0321d..759868c 100644
--- a/lib/gio-sharp/generator/BoxedGen.cs
+++ b/lib/gio-sharp/generator/BoxedGen.cs
@@ -1,82 +1,82 @@
-// GtkSharp.Generation.BoxedGen.cs - The Boxed Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.IO;
-	using System.Xml;
-
-	public class BoxedGen : StructBase {
-		
-		public BoxedGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
-		
-		public override void Generate (GenerationInfo gen_info)
-		{
-			Method copy = methods["Copy"] as Method;
-			methods.Remove ("Copy");
-			methods.Remove ("Free");
-
-			gen_info.CurrentType = Name;
-
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
-			base.Generate (gen_info);
-			sw.WriteLine ("\t\t[DllImport(\"glibsharpglue-2\")]");
-			sw.WriteLine ("\t\tstatic extern IntPtr glibsharp_value_get_boxed (ref GLib.Value val);");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\t[DllImport(\"glibsharpglue-2\")]");
-			sw.WriteLine ("\t\tstatic extern void glibsharp_value_set_boxed (ref GLib.Value val, ref " + QualifiedName + " boxed);");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tpublic static explicit operator GLib.Value (" + QualifiedName + " boxed)");
-			sw.WriteLine ("\t\t{");
-
-			sw.WriteLine ("\t\t\tGLib.Value val = GLib.Value.Empty;");
-			sw.WriteLine ("\t\t\tval.Init (" + QualifiedName + ".GType);");
-			sw.WriteLine ("\t\t\tglibsharp_value_set_boxed (ref val, ref boxed);");
-			sw.WriteLine ("\t\t\treturn val;");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tpublic static explicit operator " + QualifiedName + " (GLib.Value val)");
-			sw.WriteLine ("\t\t{");
-
-			sw.WriteLine ("\t\t\tIntPtr boxed_ptr = glibsharp_value_get_boxed (ref val);");
-			sw.WriteLine ("\t\t\treturn New (boxed_ptr);");
-			sw.WriteLine ("\t\t}");
-
-			if (copy != null && copy.IsDeprecated) {
-				sw.WriteLine ();
-				sw.WriteLine ("\t\t[Obsolete(\"This is a no-op\")]");
-				sw.WriteLine ("\t\tpublic " + QualifiedName + " Copy() {");
-				sw.WriteLine ("\t\t\treturn this;");
-				sw.WriteLine ("\t\t}");
-			}
-
-			sw.WriteLine ("#endregion");
-                        AppendCustom(sw, gen_info.CustomDir);
-                        sw.WriteLine ("\t}");
-                        sw.WriteLine ("}");
-			sw.Close ();
-			gen_info.Writer = null;
-			Statistics.BoxedCount++;
-		}		
-	}
-}
-
+// GtkSharp.Generation.BoxedGen.cs - The Boxed Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.IO;
+	using System.Xml;
+
+	public class BoxedGen : StructBase {
+		
+		public BoxedGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+		
+		public override void Generate (GenerationInfo gen_info)
+		{
+			Method copy = methods["Copy"] as Method;
+			methods.Remove ("Copy");
+			methods.Remove ("Free");
+
+			gen_info.CurrentType = Name;
+
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+			base.Generate (gen_info);
+			sw.WriteLine ("\t\t[DllImport(\"glibsharpglue-2\")]");
+			sw.WriteLine ("\t\tstatic extern IntPtr glibsharp_value_get_boxed (ref GLib.Value val);");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\t[DllImport(\"glibsharpglue-2\")]");
+			sw.WriteLine ("\t\tstatic extern void glibsharp_value_set_boxed (ref GLib.Value val, ref " + QualifiedName + " boxed);");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tpublic static explicit operator GLib.Value (" + QualifiedName + " boxed)");
+			sw.WriteLine ("\t\t{");
+
+			sw.WriteLine ("\t\t\tGLib.Value val = GLib.Value.Empty;");
+			sw.WriteLine ("\t\t\tval.Init (" + QualifiedName + ".GType);");
+			sw.WriteLine ("\t\t\tglibsharp_value_set_boxed (ref val, ref boxed);");
+			sw.WriteLine ("\t\t\treturn val;");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tpublic static explicit operator " + QualifiedName + " (GLib.Value val)");
+			sw.WriteLine ("\t\t{");
+
+			sw.WriteLine ("\t\t\tIntPtr boxed_ptr = glibsharp_value_get_boxed (ref val);");
+			sw.WriteLine ("\t\t\treturn New (boxed_ptr);");
+			sw.WriteLine ("\t\t}");
+
+			if (copy != null && copy.IsDeprecated) {
+				sw.WriteLine ();
+				sw.WriteLine ("\t\t[Obsolete(\"This is a no-op\")]");
+				sw.WriteLine ("\t\tpublic " + QualifiedName + " Copy() {");
+				sw.WriteLine ("\t\t\treturn this;");
+				sw.WriteLine ("\t\t}");
+			}
+
+			sw.WriteLine ("#endregion");
+                        AppendCustom(sw, gen_info.CustomDir);
+                        sw.WriteLine ("\t}");
+                        sw.WriteLine ("}");
+			sw.Close ();
+			gen_info.Writer = null;
+			Statistics.BoxedCount++;
+		}		
+	}
+}
+
diff --git a/lib/gio-sharp/generator/ByRefGen.cs b/lib/gio-sharp/generator/ByRefGen.cs
index 232c325..7a2641e 100644
--- a/lib/gio-sharp/generator/ByRefGen.cs
+++ b/lib/gio-sharp/generator/ByRefGen.cs
@@ -1,63 +1,63 @@
-// GtkSharp.Generation.ByRefGen.cs - The ByRef type Generatable.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2003 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class ByRefGen : SimpleBase, IManualMarshaler {
-		
-		public ByRefGen (string ctype, string type) : base (ctype, type, type + ".Empty") {}
-		
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-
-		public override string CallByName (string var_name)
-		{
-			return "native_" + var_name;
-		}
-		
-		public string AllocNative ()
-		{
-			return "Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + QualifiedName + ")))";
-		}
-
-		public string AllocNative (string var_name)
-		{
-			return "GLib.Marshaller.StructureToPtrAlloc (" + var_name + ")";
-		}
-
-		public override string FromNative (string var_name)
-		{
-			return String.Format ("({0}) Marshal.PtrToStructure ({1}, typeof ({0}))", QualifiedName, var_name);
-		}
-
-		public string ReleaseNative (string var_name)
-		{
-			return "Marshal.FreeHGlobal (" + var_name + ")";
-		}
-	}
-}
-
+// GtkSharp.Generation.ByRefGen.cs - The ByRef type Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class ByRefGen : SimpleBase, IManualMarshaler {
+		
+		public ByRefGen (string ctype, string type) : base (ctype, type, type + ".Empty") {}
+		
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+
+		public override string CallByName (string var_name)
+		{
+			return "native_" + var_name;
+		}
+		
+		public string AllocNative ()
+		{
+			return "Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + QualifiedName + ")))";
+		}
+
+		public string AllocNative (string var_name)
+		{
+			return "GLib.Marshaller.StructureToPtrAlloc (" + var_name + ")";
+		}
+
+		public override string FromNative (string var_name)
+		{
+			return String.Format ("({0}) Marshal.PtrToStructure ({1}, typeof ({0}))", QualifiedName, var_name);
+		}
+
+		public string ReleaseNative (string var_name)
+		{
+			return "Marshal.FreeHGlobal (" + var_name + ")";
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/ChildProperty.cs b/lib/gio-sharp/generator/ChildProperty.cs
index a3041d0..fe361ed 100644
--- a/lib/gio-sharp/generator/ChildProperty.cs
+++ b/lib/gio-sharp/generator/ChildProperty.cs
@@ -1,45 +1,45 @@
-// GtkSharp.Generation.ChildProperty.cs - GtkContainer child properties
-//
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class ChildProperty : Property {
-
-		public ChildProperty (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
-
-		protected override string PropertyAttribute (string qpname) {
-			return "[Gtk.ChildProperty (" + qpname + ")]";
-		}
-
-		protected override string RawGetter (string qpname) {
-			return "parent.ChildGetProperty (child, " + qpname + ")";
-		}
-
-		protected override string RawSetter (string qpname) {
-			return "parent.ChildSetProperty(child, " + qpname + ", val)";
-		}
-
-	}
-}
-
+// GtkSharp.Generation.ChildProperty.cs - GtkContainer child properties
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class ChildProperty : Property {
+
+		public ChildProperty (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
+
+		protected override string PropertyAttribute (string qpname) {
+			return "[Gtk.ChildProperty (" + qpname + ")]";
+		}
+
+		protected override string RawGetter (string qpname) {
+			return "parent.ChildGetProperty (child, " + qpname + ")";
+		}
+
+		protected override string RawSetter (string qpname) {
+			return "parent.ChildSetProperty(child, " + qpname + ", val)";
+		}
+
+	}
+}
+
diff --git a/lib/gio-sharp/generator/ClassGen.cs b/lib/gio-sharp/generator/ClassGen.cs
index 9f4a2f2..700a27a 100644
--- a/lib/gio-sharp/generator/ClassGen.cs
+++ b/lib/gio-sharp/generator/ClassGen.cs
@@ -1,94 +1,94 @@
-// GtkSharp.Generation.ClassGen.cs - The Class Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Text;
-	using System.Xml;
-
-	public class ClassGen : ClassBase  {
-
-		public ClassGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
-
-		public override string AssignToName {
-			get {
-				return String.Empty;
-			}
-		}
-
-		public override string MarshalType {
-			get {
-				return String.Empty;
-			}
-		}
-
-		public override string CallByName () 
-		{
-			return String.Empty;
-		}
-
-		public override string CallByName (string var) 
-		{
-			return String.Empty;
-		}
-
-		public override string FromNative (string var) 
-		{
-			return String.Empty;
-		}
-
-		public override void Generate (GenerationInfo gen_info)
-		{
-			gen_info.CurrentType = Name;
-
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream(Name);
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
-			sw.WriteLine ();
-
-			sw.WriteLine ("#region Autogenerated code");
-			if (IsDeprecated)
-				sw.WriteLine ("\t[Obsolete]");
-			sw.Write ("\t{0} class " + Name, IsInternal ? "internal" : "public");
-			sw.WriteLine (" {");
-			sw.WriteLine ();
-
-			GenProperties (gen_info, null);
-			GenMethods (gen_info, null, null);
-			
-			sw.WriteLine ("#endregion");
-			AppendCustom(sw, gen_info.CustomDir);
-
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-
-			sw.Close ();
-			gen_info.Writer = null;
-		}
-	}
-}
-
+// GtkSharp.Generation.ClassGen.cs - The Class Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Text;
+	using System.Xml;
+
+	public class ClassGen : ClassBase  {
+
+		public ClassGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+
+		public override string AssignToName {
+			get {
+				return String.Empty;
+			}
+		}
+
+		public override string MarshalType {
+			get {
+				return String.Empty;
+			}
+		}
+
+		public override string CallByName () 
+		{
+			return String.Empty;
+		}
+
+		public override string CallByName (string var) 
+		{
+			return String.Empty;
+		}
+
+		public override string FromNative (string var) 
+		{
+			return String.Empty;
+		}
+
+		public override void Generate (GenerationInfo gen_info)
+		{
+			gen_info.CurrentType = Name;
+
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream(Name);
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+			sw.WriteLine ();
+
+			sw.WriteLine ("#region Autogenerated code");
+			if (IsDeprecated)
+				sw.WriteLine ("\t[Obsolete]");
+			sw.Write ("\t{0} class " + Name, IsInternal ? "internal" : "public");
+			sw.WriteLine (" {");
+			sw.WriteLine ();
+
+			GenProperties (gen_info, null);
+			GenMethods (gen_info, null, null);
+			
+			sw.WriteLine ("#endregion");
+			AppendCustom(sw, gen_info.CustomDir);
+
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+
+			sw.Close ();
+			gen_info.Writer = null;
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/CodeGenerator.cs b/lib/gio-sharp/generator/CodeGenerator.cs
index dfb9526..f45c7a0 100644
--- a/lib/gio-sharp/generator/CodeGenerator.cs
+++ b/lib/gio-sharp/generator/CodeGenerator.cs
@@ -1,122 +1,122 @@
-// GtkSharp.Generation.CodeGenerator.cs - The main code generation engine.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner 
-// Copyright (c) 2003-2004 Novell Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.Xml;
-
-	public class CodeGenerator  {
-
-		public static int Main (string[] args)
-		{
-			if (args.Length < 2) {
-				Console.WriteLine ("Usage: codegen --generate <filename1...>");
-				return 0;
-			}
-
-			bool generate = false;
-			string dir = "";
-			string custom_dir = "";
-			string assembly_name = "";
-			string glue_filename = "";
-			string glue_includes = "";
-			string gluelib_name = "";
-
-			SymbolTable table = SymbolTable.Table;
-			ArrayList gens = new ArrayList ();
-			foreach (string arg in args) {
-				string filename = arg;
-				if (arg == "--generate") {
-					generate = true;
-					continue;
-				} else if (arg == "--include") {
-					generate = false;
-					continue;
-				} else if (arg.StartsWith ("-I:")) {
-					generate = false;
-					filename = filename.Substring (3);
-				} else if (arg.StartsWith ("--outdir=")) {
-					generate = false;
-					dir = arg.Substring (9);
-					continue;
-				} else if (arg.StartsWith ("--customdir=")) {
-					generate = false;
-					custom_dir = arg.Substring (12);
-					continue;
-				} else if (arg.StartsWith ("--assembly-name=")) {
-					generate = false;
-					assembly_name = arg.Substring (16);
-					continue;
-				} else if (arg.StartsWith ("--glue-filename=")) {
-					generate = false;
-					glue_filename = arg.Substring (16);
-					continue;
-				} else if (arg.StartsWith ("--glue-includes=")) {
-					generate = false;
-					glue_includes = arg.Substring (16);
-					continue;
-				} else if (arg.StartsWith ("--gluelib-name=")) {
-					generate = false;
-					gluelib_name = arg.Substring (15);
-					continue;
-				}
-
-				Parser p = new Parser ();
-				IGeneratable[] curr_gens = p.Parse (filename);
-				table.AddTypes (curr_gens);
-				if (generate)
-					gens.AddRange (curr_gens);
-			}
-
-			// Now that everything is loaded, validate all the to-be-
-			// generated generatables and then remove the invalid ones.
-			ArrayList invalids = new ArrayList ();
-			foreach (IGeneratable gen in gens) {
-				if (!gen.Validate ())
-					invalids.Add (gen);
-			}
-			foreach (IGeneratable gen in invalids)
-				gens.Remove (gen);
-
-			GenerationInfo gen_info = null;
-			if (dir != "" || assembly_name != "" || glue_filename != "" || glue_includes != "" || gluelib_name != "")
-				gen_info = new GenerationInfo (dir, custom_dir, assembly_name, glue_filename, glue_includes, gluelib_name);
-			
-			foreach (IGeneratable gen in gens) {
-				if (gen_info == null)
-					gen.Generate ();
-				else
-					gen.Generate (gen_info);
-			}
-
-			ObjectGen.GenerateMappers ();
-
-			if (gen_info != null)
-				gen_info.CloseGlueWriter ();
-
-			Statistics.Report();
-			return 0;
-		}
-	}
-}
+// GtkSharp.Generation.CodeGenerator.cs - The main code generation engine.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner 
+// Copyright (c) 2003-2004 Novell Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.Xml;
+
+	public class CodeGenerator  {
+
+		public static int Main (string[] args)
+		{
+			if (args.Length < 2) {
+				Console.WriteLine ("Usage: codegen --generate <filename1...>");
+				return 0;
+			}
+
+			bool generate = false;
+			string dir = "";
+			string custom_dir = "";
+			string assembly_name = "";
+			string glue_filename = "";
+			string glue_includes = "";
+			string gluelib_name = "";
+
+			SymbolTable table = SymbolTable.Table;
+			ArrayList gens = new ArrayList ();
+			foreach (string arg in args) {
+				string filename = arg;
+				if (arg == "--generate") {
+					generate = true;
+					continue;
+				} else if (arg == "--include") {
+					generate = false;
+					continue;
+				} else if (arg.StartsWith ("-I:")) {
+					generate = false;
+					filename = filename.Substring (3);
+				} else if (arg.StartsWith ("--outdir=")) {
+					generate = false;
+					dir = arg.Substring (9);
+					continue;
+				} else if (arg.StartsWith ("--customdir=")) {
+					generate = false;
+					custom_dir = arg.Substring (12);
+					continue;
+				} else if (arg.StartsWith ("--assembly-name=")) {
+					generate = false;
+					assembly_name = arg.Substring (16);
+					continue;
+				} else if (arg.StartsWith ("--glue-filename=")) {
+					generate = false;
+					glue_filename = arg.Substring (16);
+					continue;
+				} else if (arg.StartsWith ("--glue-includes=")) {
+					generate = false;
+					glue_includes = arg.Substring (16);
+					continue;
+				} else if (arg.StartsWith ("--gluelib-name=")) {
+					generate = false;
+					gluelib_name = arg.Substring (15);
+					continue;
+				}
+
+				Parser p = new Parser ();
+				IGeneratable[] curr_gens = p.Parse (filename);
+				table.AddTypes (curr_gens);
+				if (generate)
+					gens.AddRange (curr_gens);
+			}
+
+			// Now that everything is loaded, validate all the to-be-
+			// generated generatables and then remove the invalid ones.
+			ArrayList invalids = new ArrayList ();
+			foreach (IGeneratable gen in gens) {
+				if (!gen.Validate ())
+					invalids.Add (gen);
+			}
+			foreach (IGeneratable gen in invalids)
+				gens.Remove (gen);
+
+			GenerationInfo gen_info = null;
+			if (dir != "" || assembly_name != "" || glue_filename != "" || glue_includes != "" || gluelib_name != "")
+				gen_info = new GenerationInfo (dir, custom_dir, assembly_name, glue_filename, glue_includes, gluelib_name);
+			
+			foreach (IGeneratable gen in gens) {
+				if (gen_info == null)
+					gen.Generate ();
+				else
+					gen.Generate (gen_info);
+			}
+
+			ObjectGen.GenerateMappers ();
+
+			if (gen_info != null)
+				gen_info.CloseGlueWriter ();
+
+			Statistics.Report();
+			return 0;
+		}
+	}
+}
diff --git a/lib/gio-sharp/generator/ConstFilenameGen.cs b/lib/gio-sharp/generator/ConstFilenameGen.cs
index f094aa1..562ab9c 100644
--- a/lib/gio-sharp/generator/ConstFilenameGen.cs
+++ b/lib/gio-sharp/generator/ConstFilenameGen.cs
@@ -1,52 +1,52 @@
-// ConstFilenameGen.cs - The Const Filename type Generatable.
-//
-// Author:  Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class ConstFilenameGen : SimpleBase, IManualMarshaler {
-		
-		public ConstFilenameGen (string ctype) : base (ctype, "string", "null") {}
-
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-		
-		public override string FromNative (string var)
-		{
-			return "GLib.Marshaller.FilenamePtrToString (" + var + ")";
-		}
-
-		public string AllocNative (string managed_var)
-		{
-			return "GLib.Marshaller.StringToFilenamePtr (" + managed_var + ")";
-		}
-
-		public string ReleaseNative (string native_var)
-		{
-			return "GLib.Marshaller.Free (" + native_var + ")";
-		}
-	}
-}
-
+// ConstFilenameGen.cs - The Const Filename type Generatable.
+//
+// Author:  Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class ConstFilenameGen : SimpleBase, IManualMarshaler {
+		
+		public ConstFilenameGen (string ctype) : base (ctype, "string", "null") {}
+
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+		
+		public override string FromNative (string var)
+		{
+			return "GLib.Marshaller.FilenamePtrToString (" + var + ")";
+		}
+
+		public string AllocNative (string managed_var)
+		{
+			return "GLib.Marshaller.StringToFilenamePtr (" + managed_var + ")";
+		}
+
+		public string ReleaseNative (string native_var)
+		{
+			return "GLib.Marshaller.Free (" + native_var + ")";
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/ConstStringGen.cs b/lib/gio-sharp/generator/ConstStringGen.cs
index adef8d3..70f882e 100644
--- a/lib/gio-sharp/generator/ConstStringGen.cs
+++ b/lib/gio-sharp/generator/ConstStringGen.cs
@@ -1,59 +1,59 @@
-// GtkSharp.Generation.ConstStringGen.cs - The Const String type Generatable.
-//
-// Author: Rachel Hestilow <rachel nullenvoid com>
-//         Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2003 Rachel Hestilow
-// Copyright (c) 2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class ConstStringGen : SimpleBase, IManualMarshaler {
-		
-		public ConstStringGen (string ctype) : base (ctype, "string", "null") {}
-
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-		
-		public override string FromNative (string var)
-		{
-			return "GLib.Marshaller.Utf8PtrToString (" + var + ")";
-		}
-
-		public override string ToNativeReturn (string var)
-		{
-			return "GLib.Marshaller.StringToPtrGStrdup (" + var + ")";
-		}
-
-		public string AllocNative (string managed_var)
-		{
-			return "GLib.Marshaller.StringToPtrGStrdup (" + managed_var + ")";
-		}
-
-		public string ReleaseNative (string native_var)
-		{
-			return "GLib.Marshaller.Free (" + native_var + ")";
-		}
-	}
-}
-
+// GtkSharp.Generation.ConstStringGen.cs - The Const String type Generatable.
+//
+// Author: Rachel Hestilow <rachel nullenvoid com>
+//         Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2003 Rachel Hestilow
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class ConstStringGen : SimpleBase, IManualMarshaler {
+		
+		public ConstStringGen (string ctype) : base (ctype, "string", "null") {}
+
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+		
+		public override string FromNative (string var)
+		{
+			return "GLib.Marshaller.Utf8PtrToString (" + var + ")";
+		}
+
+		public override string ToNativeReturn (string var)
+		{
+			return "GLib.Marshaller.StringToPtrGStrdup (" + var + ")";
+		}
+
+		public string AllocNative (string managed_var)
+		{
+			return "GLib.Marshaller.StringToPtrGStrdup (" + managed_var + ")";
+		}
+
+		public string ReleaseNative (string native_var)
+		{
+			return "GLib.Marshaller.Free (" + native_var + ")";
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/Ctor.cs b/lib/gio-sharp/generator/Ctor.cs
index d6a427e..9d57043 100644
--- a/lib/gio-sharp/generator/Ctor.cs
+++ b/lib/gio-sharp/generator/Ctor.cs
@@ -1,165 +1,165 @@
-// GtkSharp.Generation.Ctor.cs - The Constructor Generation Class.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2004-2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Ctor : MethodBase  {
-
-		private bool preferred;
-		private string name;
-		private bool needs_chaining = false;
-
-		public Ctor (XmlElement elem, ClassBase implementor) : base (elem, implementor) 
-		{
-			if (elem.HasAttribute ("preferred"))
-				preferred = true;
-			if (implementor is ObjectGen)
-				needs_chaining = true;
-			name = implementor.Name;
-		}
-
-		public bool Preferred {
-			get { return preferred; }
-			set { preferred = value; }
-		}
-
-		public string StaticName {
-			get {
-				if (!IsStatic)
-					return String.Empty;
-
-				string[] toks = CName.Substring(CName.IndexOf("new")).Split ('_');
-				string result = String.Empty;
-
-				foreach (string tok in toks)
-					result += tok.Substring(0,1).ToUpper() + tok.Substring(1);
-				return result;
-			}
-		}
-
-		void GenerateImport (StreamWriter sw)
-		{
-			sw.WriteLine("\t\t[DllImport(\"" + LibraryName + "\")]");
-			sw.WriteLine("\t\tstatic extern " + Safety + "IntPtr " + CName + "(" + Parameters.ImportSignature + ");");
-			sw.WriteLine();
-		}
-
-		void GenerateStatic (GenerationInfo gen_info)
-		{
-			StreamWriter sw = gen_info.Writer;
+// GtkSharp.Generation.Ctor.cs - The Constructor Generation Class.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Ctor : MethodBase  {
+
+		private bool preferred;
+		private string name;
+		private bool needs_chaining = false;
+
+		public Ctor (XmlElement elem, ClassBase implementor) : base (elem, implementor) 
+		{
+			if (elem.HasAttribute ("preferred"))
+				preferred = true;
+			if (implementor is ObjectGen)
+				needs_chaining = true;
+			name = implementor.Name;
+		}
+
+		public bool Preferred {
+			get { return preferred; }
+			set { preferred = value; }
+		}
+
+		public string StaticName {
+			get {
+				if (!IsStatic)
+					return String.Empty;
+
+				string[] toks = CName.Substring(CName.IndexOf("new")).Split ('_');
+				string result = String.Empty;
+
+				foreach (string tok in toks)
+					result += tok.Substring(0,1).ToUpper() + tok.Substring(1);
+				return result;
+			}
+		}
+
+		void GenerateImport (StreamWriter sw)
+		{
+			sw.WriteLine("\t\t[DllImport(\"" + LibraryName + "\")]");
+			sw.WriteLine("\t\tstatic extern " + Safety + "IntPtr " + CName + "(" + Parameters.ImportSignature + ");");
+			sw.WriteLine();
+		}
+
+		void GenerateStatic (GenerationInfo gen_info)
+		{
+			StreamWriter sw = gen_info.Writer;
 			sw.WriteLine("\t\t" + Protection + " static " + Safety + Modifiers +  name + " " + StaticName + "(" + Signature + ")");
-			sw.WriteLine("\t\t{");
-
-			Body.Initialize(gen_info, false, false, ""); 
-
-			sw.Write("\t\t\t" + name + " result = ");
-			if (container_type is StructBase)
-				sw.Write ("{0}.New (", name);
-			else
-				sw.Write ("new {0} (", name);
-			sw.WriteLine (CName + "(" + Body.GetCallString (false) + "));");
-			Body.Finish (sw, ""); 
-			Body.HandleException (sw, ""); 
-			sw.WriteLine ("\t\t\treturn result;");
-		}
-
-		public void Generate (GenerationInfo gen_info)
-		{
-			if (!Validate ())
-				return;
-
-			StreamWriter sw = gen_info.Writer;
-			gen_info.CurrentMember = CName;
-
-			GenerateImport (sw);
-			
-			if (IsStatic)
-				GenerateStatic (gen_info);
-			else {
+			sw.WriteLine("\t\t{");
+
+			Body.Initialize(gen_info, false, false, ""); 
+
+			sw.Write("\t\t\t" + name + " result = ");
+			if (container_type is StructBase)
+				sw.Write ("{0}.New (", name);
+			else
+				sw.Write ("new {0} (", name);
+			sw.WriteLine (CName + "(" + Body.GetCallString (false) + "));");
+			Body.Finish (sw, ""); 
+			Body.HandleException (sw, ""); 
+			sw.WriteLine ("\t\t\treturn result;");
+		}
+
+		public void Generate (GenerationInfo gen_info)
+		{
+			if (!Validate ())
+				return;
+
+			StreamWriter sw = gen_info.Writer;
+			gen_info.CurrentMember = CName;
+
+			GenerateImport (sw);
+			
+			if (IsStatic)
+				GenerateStatic (gen_info);
+			else {
 				sw.WriteLine("\t\t{0} {1}{2} ({3}) {4}", Protection, Safety, name, Signature.ToString(), needs_chaining ? ": base (IntPtr.Zero)" : "");
-				sw.WriteLine("\t\t{");
-
-				if (needs_chaining) {
-					sw.WriteLine ("\t\t\tif (GetType () != typeof (" + name + ")) {");
-					
-					if (Parameters.Count == 0) {
-						sw.WriteLine ("\t\t\t\tCreateNativeObject (new string [0], new GLib.Value[0]);");
-						sw.WriteLine ("\t\t\t\treturn;");
-					} else {
-						ArrayList names = new ArrayList ();
-						ArrayList values = new ArrayList ();
-						for (int i = 0; i < Parameters.Count; i++) {
-							Parameter p = Parameters[i];
-							if (container_type.GetPropertyRecursively (p.StudlyName) != null) {
-								names.Add (p.Name);
-								values.Add (p.Name);
-							} else if (p.PropertyName != String.Empty) {
-								names.Add (p.PropertyName);
-								values.Add (p.Name);
-							}
-						}
-
-						if (names.Count == Parameters.Count) {
-							sw.WriteLine ("\t\t\t\tArrayList vals = new ArrayList();");
-							sw.WriteLine ("\t\t\t\tArrayList names = new ArrayList();");
-							for (int i = 0; i < names.Count; i++) {
-								Parameter p = Parameters [i];
-								string indent = "\t\t\t\t";
-								if (p.Generatable is ClassBase && !(p.Generatable is StructBase)) {
-									sw.WriteLine (indent + "if (" + p.Name + " != null) {");
-									indent += "\t";
-								}
-								sw.WriteLine (indent + "names.Add (\"" + names [i] + "\");");
-								sw.WriteLine (indent + "vals.Add (new GLib.Value (" + values[i] + "));");
-
-								if (p.Generatable is ClassBase && !(p.Generatable is StructBase))
-									sw.WriteLine ("\t\t\t\t}");
-							}
-
-							sw.WriteLine ("\t\t\t\tCreateNativeObject ((string[])names.ToArray (typeof (string)), (GLib.Value[])vals.ToArray (typeof (GLib.Value)));");
-							sw.WriteLine ("\t\t\t\treturn;");
-						} else
-							sw.WriteLine ("\t\t\t\tthrow new InvalidOperationException (\"Can't override this constructor.\");");
-					}
-					
-					sw.WriteLine ("\t\t\t}");
-				}
-	
-				Body.Initialize(gen_info, false, false, ""); 
-				sw.WriteLine("\t\t\t{0} = {1}({2});", container_type.AssignToName, CName, Body.GetCallString (false));
-				Body.Finish (sw, "");
-				Body.HandleException (sw, "");
-			}
-			
-			sw.WriteLine("\t\t}");
-			sw.WriteLine();
-			
-			Statistics.CtorCount++;
-		}
-	}
-}
-
+				sw.WriteLine("\t\t{");
+
+				if (needs_chaining) {
+					sw.WriteLine ("\t\t\tif (GetType () != typeof (" + name + ")) {");
+					
+					if (Parameters.Count == 0) {
+						sw.WriteLine ("\t\t\t\tCreateNativeObject (new string [0], new GLib.Value[0]);");
+						sw.WriteLine ("\t\t\t\treturn;");
+					} else {
+						ArrayList names = new ArrayList ();
+						ArrayList values = new ArrayList ();
+						for (int i = 0; i < Parameters.Count; i++) {
+							Parameter p = Parameters[i];
+							if (container_type.GetPropertyRecursively (p.StudlyName) != null) {
+								names.Add (p.Name);
+								values.Add (p.Name);
+							} else if (p.PropertyName != String.Empty) {
+								names.Add (p.PropertyName);
+								values.Add (p.Name);
+							}
+						}
+
+						if (names.Count == Parameters.Count) {
+							sw.WriteLine ("\t\t\t\tArrayList vals = new ArrayList();");
+							sw.WriteLine ("\t\t\t\tArrayList names = new ArrayList();");
+							for (int i = 0; i < names.Count; i++) {
+								Parameter p = Parameters [i];
+								string indent = "\t\t\t\t";
+								if (p.Generatable is ClassBase && !(p.Generatable is StructBase)) {
+									sw.WriteLine (indent + "if (" + p.Name + " != null) {");
+									indent += "\t";
+								}
+								sw.WriteLine (indent + "names.Add (\"" + names [i] + "\");");
+								sw.WriteLine (indent + "vals.Add (new GLib.Value (" + values[i] + "));");
+
+								if (p.Generatable is ClassBase && !(p.Generatable is StructBase))
+									sw.WriteLine ("\t\t\t\t}");
+							}
+
+							sw.WriteLine ("\t\t\t\tCreateNativeObject ((string[])names.ToArray (typeof (string)), (GLib.Value[])vals.ToArray (typeof (GLib.Value)));");
+							sw.WriteLine ("\t\t\t\treturn;");
+						} else
+							sw.WriteLine ("\t\t\t\tthrow new InvalidOperationException (\"Can't override this constructor.\");");
+					}
+					
+					sw.WriteLine ("\t\t\t}");
+				}
+	
+				Body.Initialize(gen_info, false, false, ""); 
+				sw.WriteLine("\t\t\t{0} = {1}({2});", container_type.AssignToName, CName, Body.GetCallString (false));
+				Body.Finish (sw, "");
+				Body.HandleException (sw, "");
+			}
+			
+			sw.WriteLine("\t\t}");
+			sw.WriteLine();
+			
+			Statistics.CtorCount++;
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/EnumGen.cs b/lib/gio-sharp/generator/EnumGen.cs
index 82091f6..fa66af5 100644
--- a/lib/gio-sharp/generator/EnumGen.cs
+++ b/lib/gio-sharp/generator/EnumGen.cs
@@ -1,127 +1,127 @@
-// GtkSharp.Generation.EnumGen.cs - The Enumeration Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class EnumGen : GenBase {
-		
-		string enum_type = String.Empty;
-		ArrayList members = new ArrayList ();
-
-		public EnumGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
-		{
-			foreach (XmlElement member in elem.ChildNodes) {
-				if (member.Name != "member")
-					continue;
-
-				string result = "\t\t" + member.GetAttribute("name");
-				if (member.HasAttribute("value")) {
-					string value = member.GetAttribute("value");
-					if (value.EndsWith("U")) {
-						enum_type = " : uint";
-						value = value.TrimEnd('U');
-					}
-					result += " = " + value;
-				}
-				members.Add (result + ",");
-			}
-		}
-
-		public override bool Validate ()
-		{
-			return true;
-		}
-
-		public override string DefaultValue {
-			get {
-				return "(" + QualifiedName + ") 0";
-			}
-		}
-
-		public override string MarshalType {
-			get {
-				return "int";
-			}
-		}
-
-		public override string CallByName (string var_name)
-		{
-			return "(int) " + var_name;
-		}
-		
-		public override string FromNative(string var)
-		{
-			return "(" + QualifiedName + ") " + var;
-		}
-		
-		public override void Generate (GenerationInfo gen_info)
-		{
-			StreamWriter sw = gen_info.OpenStream (Name);
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
-			sw.WriteLine ();
-
-			sw.WriteLine ("#region Autogenerated code");
-					
-			if (Elem.GetAttribute("type") == "flags")
-				sw.WriteLine ("\t[Flags]");
-			if (Elem.HasAttribute("gtype"))
-				sw.WriteLine ("\t[GLib.GType (typeof (" + NS + "." + Name + "GType))]");
-
-			string access = IsInternal ? "internal" : "public";
-			sw.WriteLine ("\t" + access + " enum " + Name + enum_type + " {");
-			sw.WriteLine ();
-				
-			foreach (string member in members)
-				sw.WriteLine (member);
-
-			sw.WriteLine ("\t}");
-
-			if (Elem.HasAttribute ("gtype")) {
-				sw.WriteLine ();
-				sw.WriteLine ("\tinternal class " + Name + "GType {");
-				sw.WriteLine ("\t\t[DllImport (\"" + LibraryName + "\")]");
-				sw.WriteLine ("\t\tstatic extern IntPtr " + Elem.GetAttribute ("gtype") + " ();");
-				sw.WriteLine ();
-				sw.WriteLine ("\t\tpublic static GLib.GType GType {");
-				sw.WriteLine ("\t\t\tget {");
-				sw.WriteLine ("\t\t\t\treturn new GLib.GType (" + Elem.GetAttribute ("gtype") + " ());");
-				sw.WriteLine ("\t\t\t}");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ("\t}");
-			}
-
-			sw.WriteLine ("#endregion");
-			sw.WriteLine ("}");
-			sw.Close ();
-			Statistics.EnumCount++;
-		}
-	}
-}
-
+// GtkSharp.Generation.EnumGen.cs - The Enumeration Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class EnumGen : GenBase {
+		
+		string enum_type = String.Empty;
+		ArrayList members = new ArrayList ();
+
+		public EnumGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
+		{
+			foreach (XmlElement member in elem.ChildNodes) {
+				if (member.Name != "member")
+					continue;
+
+				string result = "\t\t" + member.GetAttribute("name");
+				if (member.HasAttribute("value")) {
+					string value = member.GetAttribute("value");
+					if (value.EndsWith("U")) {
+						enum_type = " : uint";
+						value = value.TrimEnd('U');
+					}
+					result += " = " + value;
+				}
+				members.Add (result + ",");
+			}
+		}
+
+		public override bool Validate ()
+		{
+			return true;
+		}
+
+		public override string DefaultValue {
+			get {
+				return "(" + QualifiedName + ") 0";
+			}
+		}
+
+		public override string MarshalType {
+			get {
+				return "int";
+			}
+		}
+
+		public override string CallByName (string var_name)
+		{
+			return "(int) " + var_name;
+		}
+		
+		public override string FromNative(string var)
+		{
+			return "(" + QualifiedName + ") " + var;
+		}
+		
+		public override void Generate (GenerationInfo gen_info)
+		{
+			StreamWriter sw = gen_info.OpenStream (Name);
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+			sw.WriteLine ();
+
+			sw.WriteLine ("#region Autogenerated code");
+					
+			if (Elem.GetAttribute("type") == "flags")
+				sw.WriteLine ("\t[Flags]");
+			if (Elem.HasAttribute("gtype"))
+				sw.WriteLine ("\t[GLib.GType (typeof (" + NS + "." + Name + "GType))]");
+
+			string access = IsInternal ? "internal" : "public";
+			sw.WriteLine ("\t" + access + " enum " + Name + enum_type + " {");
+			sw.WriteLine ();
+				
+			foreach (string member in members)
+				sw.WriteLine (member);
+
+			sw.WriteLine ("\t}");
+
+			if (Elem.HasAttribute ("gtype")) {
+				sw.WriteLine ();
+				sw.WriteLine ("\tinternal class " + Name + "GType {");
+				sw.WriteLine ("\t\t[DllImport (\"" + LibraryName + "\")]");
+				sw.WriteLine ("\t\tstatic extern IntPtr " + Elem.GetAttribute ("gtype") + " ();");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\tpublic static GLib.GType GType {");
+				sw.WriteLine ("\t\t\tget {");
+				sw.WriteLine ("\t\t\t\treturn new GLib.GType (" + Elem.GetAttribute ("gtype") + " ());");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ("\t}");
+			}
+
+			sw.WriteLine ("#endregion");
+			sw.WriteLine ("}");
+			sw.Close ();
+			Statistics.EnumCount++;
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/GenBase.cs b/lib/gio-sharp/generator/GenBase.cs
index 5b9219a..db0a004 100644
--- a/lib/gio-sharp/generator/GenBase.cs
+++ b/lib/gio-sharp/generator/GenBase.cs
@@ -1,54 +1,54 @@
-// GtkSharp.Generation.GenBase.cs - The Generatable base class.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2001-2002 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.IO;
-	using System.Xml;
-
-	public abstract class GenBase : IGeneratable {
-		
-		private XmlElement ns;
-		private XmlElement elem;
-
-		protected GenBase (XmlElement ns, XmlElement elem)
-		{
-			this.ns = ns;
-			this.elem = elem;
-		}
-
-		public string CName {
-			get {
-				return elem.GetAttribute ("cname");
-			}
-		}
-
-		public XmlElement Elem {
-			get {
-				return elem;
-			}
-		}
-
+// GtkSharp.Generation.GenBase.cs - The Generatable base class.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001-2002 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.IO;
+	using System.Xml;
+
+	public abstract class GenBase : IGeneratable {
+		
+		private XmlElement ns;
+		private XmlElement elem;
+
+		protected GenBase (XmlElement ns, XmlElement elem)
+		{
+			this.ns = ns;
+			this.elem = elem;
+		}
+
+		public string CName {
+			get {
+				return elem.GetAttribute ("cname");
+			}
+		}
+
+		public XmlElement Elem {
+			get {
+				return elem;
+			}
+		}
+
 		public bool IsInternal {
 			get {
 				if (elem.HasAttribute ("internal")) {
@@ -59,84 +59,84 @@ namespace GtkSharp.Generation {
 			}
 		}
 
-		public string LibraryName {
-			get {
-				return ns.GetAttribute ("library");
-			}
-		}
-
-		public virtual string MarshalReturnType { 
-			get {
-				return MarshalType;
-			}
-		}
-
-		public abstract string MarshalType { get; }
-
-		public string Name {
-			get {
-				return elem.GetAttribute ("name");
-			}
-		}
-
-		public string NS {
-			get {
-				return ns.GetAttribute ("name");
-			}
-		}
-
-		public abstract string DefaultValue { get; }
-
-		public string QualifiedName {
-			get {
-				return NS + "." + Name;
-			}
-		}
-
-		public virtual string ToNativeReturnType { 
-			get {
-				return MarshalType;
-			}
-		}
-
-		protected void AppendCustom (StreamWriter sw, string custom_dir)
-		{
-			char sep = Path.DirectorySeparatorChar;
-			string custom = custom_dir + sep + Name + ".custom";
-			if (File.Exists(custom)) {
-				sw.WriteLine ("#region Customized extensions");
-				sw.WriteLine ("#line 1 \"" + Name + ".custom\"");
-				FileStream custstream = new FileStream(custom, FileMode.Open, FileAccess.Read);
-				StreamReader sr = new StreamReader(custstream);
-				sw.WriteLine (sr.ReadToEnd ());
-				sw.WriteLine ("#endregion");
-				sr.Close ();
-			}
-		}
-
-		public abstract string CallByName (string var);
-
-		public abstract string FromNative (string var);
-
-		public virtual string FromNativeReturn (string var)
-		{
-			return FromNative (var);
-		}
-
-		public virtual string ToNativeReturn (string var)
-		{
-			return CallByName (var);
-		}
-
-		public abstract bool Validate ();
-
-		public void Generate ()
-		{
-			GenerationInfo geninfo = new GenerationInfo (ns);
-			Generate (geninfo);
-		}
-
-		public abstract void Generate (GenerationInfo geninfo);
-	}
-}
-
+		public string LibraryName {
+			get {
+				return ns.GetAttribute ("library");
+			}
+		}
+
+		public virtual string MarshalReturnType { 
+			get {
+				return MarshalType;
+			}
+		}
+
+		public abstract string MarshalType { get; }
+
+		public string Name {
+			get {
+				return elem.GetAttribute ("name");
+			}
+		}
+
+		public string NS {
+			get {
+				return ns.GetAttribute ("name");
+			}
+		}
+
+		public abstract string DefaultValue { get; }
+
+		public string QualifiedName {
+			get {
+				return NS + "." + Name;
+			}
+		}
+
+		public virtual string ToNativeReturnType { 
+			get {
+				return MarshalType;
+			}
+		}
+
+		protected void AppendCustom (StreamWriter sw, string custom_dir)
+		{
+			char sep = Path.DirectorySeparatorChar;
+			string custom = custom_dir + sep + Name + ".custom";
+			if (File.Exists(custom)) {
+				sw.WriteLine ("#region Customized extensions");
+				sw.WriteLine ("#line 1 \"" + Name + ".custom\"");
+				FileStream custstream = new FileStream(custom, FileMode.Open, FileAccess.Read);
+				StreamReader sr = new StreamReader(custstream);
+				sw.WriteLine (sr.ReadToEnd ());
+				sw.WriteLine ("#endregion");
+				sr.Close ();
+			}
+		}
+
+		public abstract string CallByName (string var);
+
+		public abstract string FromNative (string var);
+
+		public virtual string FromNativeReturn (string var)
+		{
+			return FromNative (var);
+		}
+
+		public virtual string ToNativeReturn (string var)
+		{
+			return CallByName (var);
+		}
+
+		public abstract bool Validate ();
+
+		public void Generate ()
+		{
+			GenerationInfo geninfo = new GenerationInfo (ns);
+			Generate (geninfo);
+		}
+
+		public abstract void Generate (GenerationInfo geninfo);
+	}
+}
+
diff --git a/lib/gio-sharp/generator/GenerationInfo.cs b/lib/gio-sharp/generator/GenerationInfo.cs
index 3031c7c..7b7619a 100644
--- a/lib/gio-sharp/generator/GenerationInfo.cs
+++ b/lib/gio-sharp/generator/GenerationInfo.cs
@@ -1,188 +1,188 @@
-// GtkSharp.Generation.GenerationInfo.cs - Generation information class.
-//
-// Author: Mike Kestner <mkestner ximian com>
-//
-// Copyright (c) 2003-2008 Novell Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class GenerationInfo {
-		
-		string dir;
-		string custom_dir;
-		string assembly_name;
-		string gluelib_name;
-		bool glue_enabled;
-		StreamWriter sw;
-		StreamWriter glue_sw;
-
-		public GenerationInfo (XmlElement ns)
-		{
-			string ns_name = ns.GetAttribute ("name");
-			char sep = Path.DirectorySeparatorChar;
-			dir = ".." + sep + ns_name.ToLower () + sep + "generated";
-			custom_dir = ".." + sep + ns_name.ToLower ();
-			assembly_name = ns_name.ToLower () + "-sharp";
-		}
-
-		public GenerationInfo (string dir, string assembly_name) : this (dir, dir, assembly_name, "", "", "") {}
-
-		public GenerationInfo (string dir, string custom_dir, string assembly_name, string glue_filename, string glue_includes, string gluelib_name)
-		{
-			this.dir = dir;
-			this.custom_dir = custom_dir;
-			this.assembly_name = assembly_name;
-			this.gluelib_name = gluelib_name;
-			InitializeGlue (glue_filename, glue_includes, gluelib_name);
-		}
-
-		void InitializeGlue (string glue_filename, string glue_includes, string gluelib_name)
-		{
-			if (gluelib_name != String.Empty && glue_filename != String.Empty) {
-				FileStream stream;
-				try {
-					stream = new FileStream (glue_filename, FileMode.Create, FileAccess.Write);
-				} catch (Exception) {
-					Console.Error.WriteLine ("Unable to create specified glue file.  Glue will not be generated.");
-					return;
-				}
-
-				glue_sw = new StreamWriter (stream);
-			
-				glue_sw.WriteLine ("// This file was generated by the Gtk# code generator.");
-				glue_sw.WriteLine ("// Any changes made will be lost if regenerated.");
-				glue_sw.WriteLine ();
-
-				if (glue_includes != "") {
-					foreach (string header in glue_includes.Split (new char[] {',', ' '})) {
-						if (header != "")
-							glue_sw.WriteLine ("#include <{0}>", header);
-					}
-					glue_sw.WriteLine ("");
-				}
-				glue_sw.WriteLine ("const gchar *__prefix = \"__gtksharp_\";\n");
-				glue_sw.WriteLine ("#define HAS_PREFIX(a) (*((guint64 *)(a)) == *((guint64 *) __prefix))\n");
-				glue_sw.WriteLine ("static GObjectClass *");
-				glue_sw.WriteLine ("get_threshold_class (GObject *obj)");
-				glue_sw.WriteLine ("{");
-				glue_sw.WriteLine ("\tGType gtype = G_TYPE_FROM_INSTANCE (obj);");
-				glue_sw.WriteLine ("\twhile (HAS_PREFIX (g_type_name (gtype)))");
-				glue_sw.WriteLine ("\t\tgtype = g_type_parent (gtype);");
-				glue_sw.WriteLine ("\tGObjectClass *klass = g_type_class_peek (gtype);");
-				glue_sw.WriteLine ("\tif (klass == NULL) klass = g_type_class_ref (gtype);");
-				glue_sw.WriteLine ("\treturn klass;");
-				glue_sw.WriteLine ("}\n");
-				glue_enabled = true;
-			}
-		}
-
-		public string AssemblyName {
-			get {
-				return assembly_name;
-			}
-		}
-
-		public string CustomDir {
-			get {
-				return custom_dir;
-			}
-		}
-
-		public string Dir {
-			get {
-				return dir;
-			}
-		}
-
-		public string GluelibName {
-			get {
-				return gluelib_name;
-			}
-		}
-
-		public bool GlueEnabled {
-			get {
-				return glue_enabled;
-			}
-		}
-
-		public StreamWriter GlueWriter {
-			get {
-				return glue_sw;
-			}
-		}
-
-		public StreamWriter Writer {
-			get {
-				return sw;
-			}
-			set {
-				sw = value;
-			}
-		}
-
-		public void CloseGlueWriter ()
-		{
-			if (glue_sw != null)
-				glue_sw.Close ();
-		}
-
-		string member;
-		public string CurrentMember {
-			get {
-				return typename + "." + member;
-			}
-			set {
-				member = value;
-			}
-		}
-
-		string typename;
-		public string CurrentType {
-			get {
-				return typename;
-			}
-			set {
-				typename = value;
-			}
-		}
-
-		public StreamWriter OpenStream (string name) 
-		{
-			char sep = Path.DirectorySeparatorChar;
-			if (!Directory.Exists(dir))
-				Directory.CreateDirectory(dir);
-			string filename = dir + sep + name + ".cs";
-			
-			FileStream stream = new FileStream (filename, FileMode.Create, FileAccess.Write);
-			StreamWriter sw = new StreamWriter (stream);
-			
-			sw.WriteLine ("// This file was generated by the Gtk# code generator.");
-			sw.WriteLine ("// Any changes made will be lost if regenerated.");
-			sw.WriteLine ();
-
-			return sw;
-		}
-	}
-}
-
+// GtkSharp.Generation.GenerationInfo.cs - Generation information class.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2003-2008 Novell Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class GenerationInfo {
+		
+		string dir;
+		string custom_dir;
+		string assembly_name;
+		string gluelib_name;
+		bool glue_enabled;
+		StreamWriter sw;
+		StreamWriter glue_sw;
+
+		public GenerationInfo (XmlElement ns)
+		{
+			string ns_name = ns.GetAttribute ("name");
+			char sep = Path.DirectorySeparatorChar;
+			dir = ".." + sep + ns_name.ToLower () + sep + "generated";
+			custom_dir = ".." + sep + ns_name.ToLower ();
+			assembly_name = ns_name.ToLower () + "-sharp";
+		}
+
+		public GenerationInfo (string dir, string assembly_name) : this (dir, dir, assembly_name, "", "", "") {}
+
+		public GenerationInfo (string dir, string custom_dir, string assembly_name, string glue_filename, string glue_includes, string gluelib_name)
+		{
+			this.dir = dir;
+			this.custom_dir = custom_dir;
+			this.assembly_name = assembly_name;
+			this.gluelib_name = gluelib_name;
+			InitializeGlue (glue_filename, glue_includes, gluelib_name);
+		}
+
+		void InitializeGlue (string glue_filename, string glue_includes, string gluelib_name)
+		{
+			if (gluelib_name != String.Empty && glue_filename != String.Empty) {
+				FileStream stream;
+				try {
+					stream = new FileStream (glue_filename, FileMode.Create, FileAccess.Write);
+				} catch (Exception) {
+					Console.Error.WriteLine ("Unable to create specified glue file.  Glue will not be generated.");
+					return;
+				}
+
+				glue_sw = new StreamWriter (stream);
+			
+				glue_sw.WriteLine ("// This file was generated by the Gtk# code generator.");
+				glue_sw.WriteLine ("// Any changes made will be lost if regenerated.");
+				glue_sw.WriteLine ();
+
+				if (glue_includes != "") {
+					foreach (string header in glue_includes.Split (new char[] {',', ' '})) {
+						if (header != "")
+							glue_sw.WriteLine ("#include <{0}>", header);
+					}
+					glue_sw.WriteLine ("");
+				}
+				glue_sw.WriteLine ("const gchar *__prefix = \"__gtksharp_\";\n");
+				glue_sw.WriteLine ("#define HAS_PREFIX(a) (*((guint64 *)(a)) == *((guint64 *) __prefix))\n");
+				glue_sw.WriteLine ("static GObjectClass *");
+				glue_sw.WriteLine ("get_threshold_class (GObject *obj)");
+				glue_sw.WriteLine ("{");
+				glue_sw.WriteLine ("\tGType gtype = G_TYPE_FROM_INSTANCE (obj);");
+				glue_sw.WriteLine ("\twhile (HAS_PREFIX (g_type_name (gtype)))");
+				glue_sw.WriteLine ("\t\tgtype = g_type_parent (gtype);");
+				glue_sw.WriteLine ("\tGObjectClass *klass = g_type_class_peek (gtype);");
+				glue_sw.WriteLine ("\tif (klass == NULL) klass = g_type_class_ref (gtype);");
+				glue_sw.WriteLine ("\treturn klass;");
+				glue_sw.WriteLine ("}\n");
+				glue_enabled = true;
+			}
+		}
+
+		public string AssemblyName {
+			get {
+				return assembly_name;
+			}
+		}
+
+		public string CustomDir {
+			get {
+				return custom_dir;
+			}
+		}
+
+		public string Dir {
+			get {
+				return dir;
+			}
+		}
+
+		public string GluelibName {
+			get {
+				return gluelib_name;
+			}
+		}
+
+		public bool GlueEnabled {
+			get {
+				return glue_enabled;
+			}
+		}
+
+		public StreamWriter GlueWriter {
+			get {
+				return glue_sw;
+			}
+		}
+
+		public StreamWriter Writer {
+			get {
+				return sw;
+			}
+			set {
+				sw = value;
+			}
+		}
+
+		public void CloseGlueWriter ()
+		{
+			if (glue_sw != null)
+				glue_sw.Close ();
+		}
+
+		string member;
+		public string CurrentMember {
+			get {
+				return typename + "." + member;
+			}
+			set {
+				member = value;
+			}
+		}
+
+		string typename;
+		public string CurrentType {
+			get {
+				return typename;
+			}
+			set {
+				typename = value;
+			}
+		}
+
+		public StreamWriter OpenStream (string name) 
+		{
+			char sep = Path.DirectorySeparatorChar;
+			if (!Directory.Exists(dir))
+				Directory.CreateDirectory(dir);
+			string filename = dir + sep + name + ".cs";
+			
+			FileStream stream = new FileStream (filename, FileMode.Create, FileAccess.Write);
+			StreamWriter sw = new StreamWriter (stream);
+			
+			sw.WriteLine ("// This file was generated by the Gtk# code generator.");
+			sw.WriteLine ("// Any changes made will be lost if regenerated.");
+			sw.WriteLine ();
+
+			return sw;
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/IGeneratable.cs b/lib/gio-sharp/generator/IGeneratable.cs
index effb558..1608fd7 100644
--- a/lib/gio-sharp/generator/IGeneratable.cs
+++ b/lib/gio-sharp/generator/IGeneratable.cs
@@ -1,71 +1,71 @@
-// GtkSharp.Generation.IGeneratable.cs - Interface to generate code for a type.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2001 Mike Kestner
-// Copyright (c) 2007 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	public interface IGeneratable  {
-
-		// The C name of the generatable
-		string CName {get;}
-
-		// The (short) C# name of the generatable
-		string Name {get;}
-
-		// The fully-qualified C# name of the generatable
-		string QualifiedName {get;}
-
-		// The type (possibly including "ref" or "out") to use in the import
-		// signature when passing this generatable to unmanaged code
-		string MarshalType {get;}
-
-		// The type to use as the return type in an import signature when
-		// receiving this generatable back from unmanaged code
-		string MarshalReturnType {get;}
-
-		// The type to use in a managed callback signature when returning this
-		// generatable to unmanaged code
-		string ToNativeReturnType {get;}
-
-		// The value returned by callbacks that are interrupted prematurely
-		// by managed exceptions or other conditions where an appropriate
-		// value can't be otherwise obtained.
-		string DefaultValue {get;}
-
-		// Generates an expression to convert var_name to MarshalType
-		string CallByName (string var_name);
-
-		// Generates an expression to convert var from MarshalType
-		string FromNative (string var);
-
-		// Generates an expression to convert var from MarshalReturnType
-		string FromNativeReturn (string var);
-
-		// Generates an expression to convert var to ToNativeReturnType
-		string ToNativeReturn (string var);
-
-		bool Validate ();
-
-		void Generate ();
-
-		void Generate (GenerationInfo gen_info);
-	}
-}
+// GtkSharp.Generation.IGeneratable.cs - Interface to generate code for a type.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001 Mike Kestner
+// Copyright (c) 2007 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	public interface IGeneratable  {
+
+		// The C name of the generatable
+		string CName {get;}
+
+		// The (short) C# name of the generatable
+		string Name {get;}
+
+		// The fully-qualified C# name of the generatable
+		string QualifiedName {get;}
+
+		// The type (possibly including "ref" or "out") to use in the import
+		// signature when passing this generatable to unmanaged code
+		string MarshalType {get;}
+
+		// The type to use as the return type in an import signature when
+		// receiving this generatable back from unmanaged code
+		string MarshalReturnType {get;}
+
+		// The type to use in a managed callback signature when returning this
+		// generatable to unmanaged code
+		string ToNativeReturnType {get;}
+
+		// The value returned by callbacks that are interrupted prematurely
+		// by managed exceptions or other conditions where an appropriate
+		// value can't be otherwise obtained.
+		string DefaultValue {get;}
+
+		// Generates an expression to convert var_name to MarshalType
+		string CallByName (string var_name);
+
+		// Generates an expression to convert var from MarshalType
+		string FromNative (string var);
+
+		// Generates an expression to convert var from MarshalReturnType
+		string FromNativeReturn (string var);
+
+		// Generates an expression to convert var to ToNativeReturnType
+		string ToNativeReturn (string var);
+
+		bool Validate ();
+
+		void Generate ();
+
+		void Generate (GenerationInfo gen_info);
+	}
+}
diff --git a/lib/gio-sharp/generator/IManualMarshaler.cs b/lib/gio-sharp/generator/IManualMarshaler.cs
index 25633c5..e9e7eaf 100644
--- a/lib/gio-sharp/generator/IManualMarshaler.cs
+++ b/lib/gio-sharp/generator/IManualMarshaler.cs
@@ -1,32 +1,32 @@
-// GtkSharp.Generation.IManualMarshaler.cs - Interface for manual marshaling.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	public interface IManualMarshaler  {
-
-		string AllocNative (string managed_var);
-
-		string ReleaseNative (string native_var);
-
-	}
-}
-
+// GtkSharp.Generation.IManualMarshaler.cs - Interface for manual marshaling.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	public interface IManualMarshaler  {
+
+		string AllocNative (string managed_var);
+
+		string ReleaseNative (string native_var);
+
+	}
+}
+
diff --git a/lib/gio-sharp/generator/InterfaceGen.cs b/lib/gio-sharp/generator/InterfaceGen.cs
index d59c1a1..85b93fa 100644
--- a/lib/gio-sharp/generator/InterfaceGen.cs
+++ b/lib/gio-sharp/generator/InterfaceGen.cs
@@ -1,384 +1,384 @@
-// GtkSharp.Generation.InterfaceGen.cs - The Interface Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2004, 2007 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class InterfaceGen : ObjectBase {
-
-		bool consume_only;
-		ArrayList vms = new ArrayList ();
-		ArrayList members = new ArrayList ();
-
-		public InterfaceGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
-		{
-			consume_only = elem.HasAttribute ("consume_only");
-			foreach (XmlNode node in elem.ChildNodes) {
-				switch (node.Name) {
-				case "virtual_method":
-					VirtualMethod vm = new VirtualMethod (node as XmlElement, this);
-					vms.Add (vm);
-					members.Add (vm);
-					break;
-				case "signal":
-					object sig = sigs [(node as XmlElement).GetAttribute ("name")];
-					if (sig == null)
-						sig = new Signal (node as XmlElement, this);
-					members.Add (sig);
-					break;
-				default:
-					if (!IsNodeNameHandled (node.Name))
-						Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
-					break;
-				}
-			}
-		}
-
-		public bool IsConsumeOnly {
-			get {
-				return consume_only;
-			}
-		}
-
-		public override string FromNative (string var, bool owned)
-		{
-			return QualifiedName + "Adapter.GetObject (" + var + ", " + (owned ? "true" : "false") + ")";
-		}
-
-		public override bool ValidateForSubclass ()
-		{
-			ArrayList invalids = new ArrayList ();
-
-			foreach (Method method in methods.Values) {
-				if (!method.Validate ()) {
-					Console.WriteLine ("in type " + QualifiedName);
-					invalids.Add (method);
-				}
-			}
-			foreach (Method method in invalids)
-				methods.Remove (method.Name);
-			invalids.Clear ();
-
-			return base.ValidateForSubclass ();
-		}
-
-		string IfaceName {
-			get {
-				return Name + "Iface";
-			}
-		}
-
-		void GenerateIfaceStruct (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tstatic " + IfaceName + " iface;");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tstruct " + IfaceName + " {");
-			sw.WriteLine ("\t\t\tpublic IntPtr gtype;");
-			sw.WriteLine ("\t\t\tpublic IntPtr itype;");
-			sw.WriteLine ();
-
-			foreach (object member in members) {
-				if (member is Signal) {
-					Signal sig = member as Signal;
-					sw.WriteLine ("\t\t\tpublic IntPtr {0};", sig.CName.Replace ("\"", "").Replace ("-", "_"));
-				} else if (member is VirtualMethod) {
-					VirtualMethod vm = member as VirtualMethod;
-					bool has_target = methods [vm.Name] != null;
-					if (!has_target)
-						Console.WriteLine ("Interface " + QualifiedName + " virtual method " + vm.Name + " has no matching method to invoke.");
-					string type = has_target && vm.IsValid ? vm.Name + "Delegate" : "IntPtr";
-					sw.WriteLine ("\t\t\tpublic " + type + " " + vm.CName + ";");
-				}
-			}
-
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateStaticCtor (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tstatic " + Name + "Adapter ()");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tGLib.GType.Register (_gtype, typeof({0}Adapter));", Name);
-			foreach (VirtualMethod vm in vms) {
-				bool has_target = methods [vm.Name] != null;
-				if (has_target && vm.IsValid)
-					sw.WriteLine ("\t\t\tiface.{0} = new {1}Delegate ({1}Callback);", vm.CName, vm.Name);
-			}
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateInitialize (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tstatic void Initialize (IntPtr ifaceptr, IntPtr data)");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\t" + IfaceName + " native_iface = (" + IfaceName + ") Marshal.PtrToStructure (ifaceptr, typeof (" + IfaceName + "));");
-			foreach (VirtualMethod vm in vms)
-				sw.WriteLine ("\t\t\tnative_iface." + vm.CName + " = iface." + vm.CName + ";");
-			sw.WriteLine ("\t\t\tMarshal.StructureToPtr (native_iface, ifaceptr, false);");
-			sw.WriteLine ("\t\t\tGCHandle gch = (GCHandle) data;");
-			sw.WriteLine ("\t\t\tgch.Free ();");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateCallbacks (StreamWriter sw)
-		{
-			foreach (VirtualMethod vm in vms) {
-				if (methods [vm.Name] != null) {
-					sw.WriteLine ();
-					vm.GenerateCallback (sw);
-				}
-			}
-		}
-
-		void GenerateCtors (StreamWriter sw)
-		{
-			if (!IsConsumeOnly) {
-				sw.WriteLine ("\t\tpublic " + Name + "Adapter ()");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tInitHandler = new GLib.GInterfaceInitHandler (Initialize);");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-				sw.WriteLine ("\t\t{0}Implementor implementor;", Name);
-				sw.WriteLine ();
-				sw.WriteLine ("\t\tpublic {0}Adapter ({0}Implementor implementor)", Name);
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tif (implementor == null)");
-				sw.WriteLine ("\t\t\t\tthrow new ArgumentNullException (\"implementor\");");
-				sw.WriteLine ("\t\t\tthis.implementor = implementor;");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-			}
-			sw.WriteLine ("\t\tpublic " + Name + "Adapter (IntPtr handle)");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tthis.handle = handle;");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateGType (StreamWriter sw)
-		{
-			Method m = GetMethod ("GetType");
-			m.GenerateImport (sw);
-			sw.WriteLine ("\t\tprivate static GLib.GType _gtype = new GLib.GType ({0} ());", m.CName);
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tpublic override GLib.GType GType {");
-			sw.WriteLine ("\t\t\tget {");
-			sw.WriteLine ("\t\t\t\treturn _gtype;");
-			sw.WriteLine ("\t\t\t}");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateHandleProp (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tIntPtr handle;");
-			sw.WriteLine ("\t\tpublic override IntPtr Handle {");
-			sw.WriteLine ("\t\t\tget {");
-			if (IsConsumeOnly) {
-				sw.WriteLine ("\t\t\t\treturn handle;");
-			} else {
-				sw.WriteLine ("\t\t\t\tif (handle != IntPtr.Zero)");
-				sw.WriteLine ("\t\t\t\t\treturn handle;");
-				sw.WriteLine ("\t\t\t\treturn implementor == null ? IntPtr.Zero : implementor.Handle;");
-			}
-			sw.WriteLine ("\t\t\t}");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateGetObject (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tpublic static " + Name + " GetObject (IntPtr handle, bool owned)");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tGLib.Object obj = GLib.Object.GetObject (handle, owned);");
-			sw.WriteLine ("\t\t\treturn GetObject (obj);");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tpublic static " + Name + " GetObject (GLib.Object obj)");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tif (obj == null)");
-			sw.WriteLine ("\t\t\t\treturn null;");
-			if (!IsConsumeOnly) {
-				sw.WriteLine ("\t\t\telse if (obj is " + Name + "Implementor)");
-				sw.WriteLine ("\t\t\t\treturn new {0}Adapter (obj as {0}Implementor);", Name);
-			}
-			sw.WriteLine ("\t\t\telse if (obj as " + Name + " == null)");
-			sw.WriteLine ("\t\t\t\treturn new {0}Adapter (obj.Handle);", Name);
-			sw.WriteLine ("\t\t\telse");
-			sw.WriteLine ("\t\t\t\treturn obj as {0};", Name);
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateImplementorProp (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tpublic " + Name + "Implementor Implementor {");
-			sw.WriteLine ("\t\t\tget {");
-			sw.WriteLine ("\t\t\t\treturn implementor;");
-			sw.WriteLine ("\t\t\t}");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateAdapter (GenerationInfo gen_info)
-		{
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name + "Adapter");
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
-			sw.WriteLine ();
-			sw.WriteLine ("#region Autogenerated code");
-			sw.WriteLine ("\tpublic class " + Name + "Adapter : GLib.GInterfaceAdapter, " + QualifiedName + " {");
-			sw.WriteLine ();
-
-			if (!IsConsumeOnly) {
-				GenerateIfaceStruct (sw);
-				GenerateStaticCtor (sw);
-				GenerateCallbacks (sw);
-				GenerateInitialize (sw);
-			}
-			GenerateCtors (sw);
-			GenerateGType (sw);
-			GenerateHandleProp (sw);
-			GenerateGetObject (sw);
-			if (!IsConsumeOnly)
-				GenerateImplementorProp (sw);
-
-			GenProperties (gen_info, null);
-
-			foreach (Signal sig in sigs.Values)
-				sig.GenEvent (sw, null, "GLib.Object.GetObject (Handle)");
-
-			Method temp = methods ["GetType"] as Method;
-			if (temp != null)
-				methods.Remove ("GetType");
-			GenMethods (gen_info, new Hashtable (), this);
-			if (temp != null)
-				methods ["GetType"] = temp;
-
-			sw.WriteLine ("#endregion");
-
-			string custom = Path.Combine (gen_info.CustomDir, Name + "Adapter.custom");
-			if (File.Exists (custom)) {
-				sw.WriteLine ("#region Customized extensions");
-				sw.WriteLine ("#line 1 \"" + Name + "Adapter.custom\"");
-				using (StreamReader sr = new StreamReader(new FileStream (custom, FileMode.Open, FileAccess.Read)))
-					sw.WriteLine (sr.ReadToEnd ());
-				
-				sw.WriteLine ("#endregion");
-			}
-
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-			sw.Close ();
-			gen_info.Writer = null;
-		}
-
-		void GenerateImplementorIface (StreamWriter sw)
-		{
-			if (IsConsumeOnly)
-				return;
-
-			sw.WriteLine ();
-			sw.WriteLine ("\t[GLib.GInterface (typeof (" + Name + "Adapter))]");
-			string access = IsInternal ? "internal" : "public";
-			sw.WriteLine ("\t" + access + " interface " + Name + "Implementor : GLib.IWrapper {");
-			sw.WriteLine ();
-			Hashtable vm_table = new Hashtable ();
-			foreach (VirtualMethod vm in vms)
-				vm_table [vm.Name] = vm;
-			foreach (VirtualMethod vm in vms) {
-				if (vm_table [vm.Name] == null)
-					continue;
-				else if (!vm.IsValid) {
-					vm_table.Remove (vm.Name);
-					continue;
-				} else if (vm.IsGetter || vm.IsSetter) {
-					string cmp_name = (vm.IsGetter ? "Set" : "Get") + vm.Name.Substring (3);
-					VirtualMethod cmp = vm_table [cmp_name] as VirtualMethod;
-					if (cmp != null && (cmp.IsGetter || cmp.IsSetter)) {
-						if (vm.IsSetter)
-							cmp.GenerateDeclaration (sw, vm);
-						else
-							vm.GenerateDeclaration (sw, cmp);
-						vm_table.Remove (cmp.Name);
-					} else 
-						vm.GenerateDeclaration (sw, null);
-					vm_table.Remove (vm.Name);
-				} else {
-					vm.GenerateDeclaration (sw, null);
-					vm_table.Remove (vm.Name);
-				}
-			}
-			sw.WriteLine ("\t}");
-		}
-
-		public override void Generate (GenerationInfo gen_info)
-		{
-			GenerateAdapter (gen_info);
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ();
-			sw.WriteLine ("#region Autogenerated code");
-			string access = IsInternal ? "internal" : "public";
-			sw.WriteLine ("\t" + access + " interface " + Name + " : GLib.IWrapper {");
-			sw.WriteLine ();
-			
-			foreach (Signal sig in sigs.Values) {
-				sig.GenerateDecl (sw);
-				sig.GenEventHandler (gen_info);
-			}
-
-			foreach (Method method in methods.Values) {
-				if (IgnoreMethod (method, this))
-					continue;
+// GtkSharp.Generation.InterfaceGen.cs - The Interface Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004, 2007 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class InterfaceGen : ObjectBase {
+
+		bool consume_only;
+		ArrayList vms = new ArrayList ();
+		ArrayList members = new ArrayList ();
+
+		public InterfaceGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
+		{
+			consume_only = elem.HasAttribute ("consume_only");
+			foreach (XmlNode node in elem.ChildNodes) {
+				switch (node.Name) {
+				case "virtual_method":
+					VirtualMethod vm = new VirtualMethod (node as XmlElement, this);
+					vms.Add (vm);
+					members.Add (vm);
+					break;
+				case "signal":
+					object sig = sigs [(node as XmlElement).GetAttribute ("name")];
+					if (sig == null)
+						sig = new Signal (node as XmlElement, this);
+					members.Add (sig);
+					break;
+				default:
+					if (!IsNodeNameHandled (node.Name))
+						Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
+					break;
+				}
+			}
+		}
+
+		public bool IsConsumeOnly {
+			get {
+				return consume_only;
+			}
+		}
+
+		public override string FromNative (string var, bool owned)
+		{
+			return QualifiedName + "Adapter.GetObject (" + var + ", " + (owned ? "true" : "false") + ")";
+		}
+
+		public override bool ValidateForSubclass ()
+		{
+			ArrayList invalids = new ArrayList ();
+
+			foreach (Method method in methods.Values) {
+				if (!method.Validate ()) {
+					Console.WriteLine ("in type " + QualifiedName);
+					invalids.Add (method);
+				}
+			}
+			foreach (Method method in invalids)
+				methods.Remove (method.Name);
+			invalids.Clear ();
+
+			return base.ValidateForSubclass ();
+		}
+
+		string IfaceName {
+			get {
+				return Name + "Iface";
+			}
+		}
+
+		void GenerateIfaceStruct (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tstatic " + IfaceName + " iface;");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tstruct " + IfaceName + " {");
+			sw.WriteLine ("\t\t\tpublic IntPtr gtype;");
+			sw.WriteLine ("\t\t\tpublic IntPtr itype;");
+			sw.WriteLine ();
+
+			foreach (object member in members) {
+				if (member is Signal) {
+					Signal sig = member as Signal;
+					sw.WriteLine ("\t\t\tpublic IntPtr {0};", sig.CName.Replace ("\"", "").Replace ("-", "_"));
+				} else if (member is VirtualMethod) {
+					VirtualMethod vm = member as VirtualMethod;
+					bool has_target = methods [vm.Name] != null;
+					if (!has_target)
+						Console.WriteLine ("Interface " + QualifiedName + " virtual method " + vm.Name + " has no matching method to invoke.");
+					string type = has_target && vm.IsValid ? vm.Name + "Delegate" : "IntPtr";
+					sw.WriteLine ("\t\t\tpublic " + type + " " + vm.CName + ";");
+				}
+			}
+
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateStaticCtor (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tstatic " + Name + "Adapter ()");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tGLib.GType.Register (_gtype, typeof({0}Adapter));", Name);
+			foreach (VirtualMethod vm in vms) {
+				bool has_target = methods [vm.Name] != null;
+				if (has_target && vm.IsValid)
+					sw.WriteLine ("\t\t\tiface.{0} = new {1}Delegate ({1}Callback);", vm.CName, vm.Name);
+			}
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateInitialize (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tstatic void Initialize (IntPtr ifaceptr, IntPtr data)");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\t" + IfaceName + " native_iface = (" + IfaceName + ") Marshal.PtrToStructure (ifaceptr, typeof (" + IfaceName + "));");
+			foreach (VirtualMethod vm in vms)
+				sw.WriteLine ("\t\t\tnative_iface." + vm.CName + " = iface." + vm.CName + ";");
+			sw.WriteLine ("\t\t\tMarshal.StructureToPtr (native_iface, ifaceptr, false);");
+			sw.WriteLine ("\t\t\tGCHandle gch = (GCHandle) data;");
+			sw.WriteLine ("\t\t\tgch.Free ();");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateCallbacks (StreamWriter sw)
+		{
+			foreach (VirtualMethod vm in vms) {
+				if (methods [vm.Name] != null) {
+					sw.WriteLine ();
+					vm.GenerateCallback (sw);
+				}
+			}
+		}
+
+		void GenerateCtors (StreamWriter sw)
+		{
+			if (!IsConsumeOnly) {
+				sw.WriteLine ("\t\tpublic " + Name + "Adapter ()");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tInitHandler = new GLib.GInterfaceInitHandler (Initialize);");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\t{0}Implementor implementor;", Name);
+				sw.WriteLine ();
+				sw.WriteLine ("\t\tpublic {0}Adapter ({0}Implementor implementor)", Name);
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tif (implementor == null)");
+				sw.WriteLine ("\t\t\t\tthrow new ArgumentNullException (\"implementor\");");
+				sw.WriteLine ("\t\t\tthis.implementor = implementor;");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+			}
+			sw.WriteLine ("\t\tpublic " + Name + "Adapter (IntPtr handle)");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tthis.handle = handle;");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateGType (StreamWriter sw)
+		{
+			Method m = GetMethod ("GetType");
+			m.GenerateImport (sw);
+			sw.WriteLine ("\t\tprivate static GLib.GType _gtype = new GLib.GType ({0} ());", m.CName);
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tpublic override GLib.GType GType {");
+			sw.WriteLine ("\t\t\tget {");
+			sw.WriteLine ("\t\t\t\treturn _gtype;");
+			sw.WriteLine ("\t\t\t}");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateHandleProp (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tIntPtr handle;");
+			sw.WriteLine ("\t\tpublic override IntPtr Handle {");
+			sw.WriteLine ("\t\t\tget {");
+			if (IsConsumeOnly) {
+				sw.WriteLine ("\t\t\t\treturn handle;");
+			} else {
+				sw.WriteLine ("\t\t\t\tif (handle != IntPtr.Zero)");
+				sw.WriteLine ("\t\t\t\t\treturn handle;");
+				sw.WriteLine ("\t\t\t\treturn implementor == null ? IntPtr.Zero : implementor.Handle;");
+			}
+			sw.WriteLine ("\t\t\t}");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateGetObject (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tpublic static " + Name + " GetObject (IntPtr handle, bool owned)");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tGLib.Object obj = GLib.Object.GetObject (handle, owned);");
+			sw.WriteLine ("\t\t\treturn GetObject (obj);");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tpublic static " + Name + " GetObject (GLib.Object obj)");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tif (obj == null)");
+			sw.WriteLine ("\t\t\t\treturn null;");
+			if (!IsConsumeOnly) {
+				sw.WriteLine ("\t\t\telse if (obj is " + Name + "Implementor)");
+				sw.WriteLine ("\t\t\t\treturn new {0}Adapter (obj as {0}Implementor);", Name);
+			}
+			sw.WriteLine ("\t\t\telse if (obj as " + Name + " == null)");
+			sw.WriteLine ("\t\t\t\treturn new {0}Adapter (obj.Handle);", Name);
+			sw.WriteLine ("\t\t\telse");
+			sw.WriteLine ("\t\t\t\treturn obj as {0};", Name);
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateImplementorProp (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tpublic " + Name + "Implementor Implementor {");
+			sw.WriteLine ("\t\t\tget {");
+			sw.WriteLine ("\t\t\t\treturn implementor;");
+			sw.WriteLine ("\t\t\t}");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateAdapter (GenerationInfo gen_info)
+		{
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name + "Adapter");
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+			sw.WriteLine ();
+			sw.WriteLine ("#region Autogenerated code");
+			sw.WriteLine ("\tpublic class " + Name + "Adapter : GLib.GInterfaceAdapter, " + QualifiedName + " {");
+			sw.WriteLine ();
+
+			if (!IsConsumeOnly) {
+				GenerateIfaceStruct (sw);
+				GenerateStaticCtor (sw);
+				GenerateCallbacks (sw);
+				GenerateInitialize (sw);
+			}
+			GenerateCtors (sw);
+			GenerateGType (sw);
+			GenerateHandleProp (sw);
+			GenerateGetObject (sw);
+			if (!IsConsumeOnly)
+				GenerateImplementorProp (sw);
+
+			GenProperties (gen_info, null);
+
+			foreach (Signal sig in sigs.Values)
+				sig.GenEvent (sw, null, "GLib.Object.GetObject (Handle)");
+
+			Method temp = methods ["GetType"] as Method;
+			if (temp != null)
+				methods.Remove ("GetType");
+			GenMethods (gen_info, new Hashtable (), this);
+			if (temp != null)
+				methods ["GetType"] = temp;
+
+			sw.WriteLine ("#endregion");
+
+			string custom = Path.Combine (gen_info.CustomDir, Name + "Adapter.custom");
+			if (File.Exists (custom)) {
+				sw.WriteLine ("#region Customized extensions");
+				sw.WriteLine ("#line 1 \"" + Name + "Adapter.custom\"");
+				using (StreamReader sr = new StreamReader(new FileStream (custom, FileMode.Open, FileAccess.Read)))
+					sw.WriteLine (sr.ReadToEnd ());
+				
+				sw.WriteLine ("#endregion");
+			}
+
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+			sw.Close ();
+			gen_info.Writer = null;
+		}
+
+		void GenerateImplementorIface (StreamWriter sw)
+		{
+			if (IsConsumeOnly)
+				return;
+
+			sw.WriteLine ();
+			sw.WriteLine ("\t[GLib.GInterface (typeof (" + Name + "Adapter))]");
+			string access = IsInternal ? "internal" : "public";
+			sw.WriteLine ("\t" + access + " interface " + Name + "Implementor : GLib.IWrapper {");
+			sw.WriteLine ();
+			Hashtable vm_table = new Hashtable ();
+			foreach (VirtualMethod vm in vms)
+				vm_table [vm.Name] = vm;
+			foreach (VirtualMethod vm in vms) {
+				if (vm_table [vm.Name] == null)
+					continue;
+				else if (!vm.IsValid) {
+					vm_table.Remove (vm.Name);
+					continue;
+				} else if (vm.IsGetter || vm.IsSetter) {
+					string cmp_name = (vm.IsGetter ? "Set" : "Get") + vm.Name.Substring (3);
+					VirtualMethod cmp = vm_table [cmp_name] as VirtualMethod;
+					if (cmp != null && (cmp.IsGetter || cmp.IsSetter)) {
+						if (vm.IsSetter)
+							cmp.GenerateDeclaration (sw, vm);
+						else
+							vm.GenerateDeclaration (sw, cmp);
+						vm_table.Remove (cmp.Name);
+					} else 
+						vm.GenerateDeclaration (sw, null);
+					vm_table.Remove (vm.Name);
+				} else {
+					vm.GenerateDeclaration (sw, null);
+					vm_table.Remove (vm.Name);
+				}
+			}
+			sw.WriteLine ("\t}");
+		}
+
+		public override void Generate (GenerationInfo gen_info)
+		{
+			GenerateAdapter (gen_info);
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ();
+			sw.WriteLine ("#region Autogenerated code");
+			string access = IsInternal ? "internal" : "public";
+			sw.WriteLine ("\t" + access + " interface " + Name + " : GLib.IWrapper {");
+			sw.WriteLine ();
+			
+			foreach (Signal sig in sigs.Values) {
+				sig.GenerateDecl (sw);
+				sig.GenEventHandler (gen_info);
+			}
+
+			foreach (Method method in methods.Values) {
+				if (IgnoreMethod (method, this))
+					continue;
 				method.GenerateDecl (sw, true);
-			}
-
-			foreach (Property prop in props.Values)
-				prop.GenerateDecl (sw, "\t\t");
-
-			AppendCustom (sw, gen_info.CustomDir);
-
-			sw.WriteLine ("\t}");
-			GenerateImplementorIface (sw);
-			sw.WriteLine ("#endregion");
-			sw.WriteLine ("}");
-			sw.Close ();
-			gen_info.Writer = null;
-			Statistics.IFaceCount++;
-		}
-	}
-}
-
+			}
+
+			foreach (Property prop in props.Values)
+				prop.GenerateDecl (sw, "\t\t");
+
+			AppendCustom (sw, gen_info.CustomDir);
+
+			sw.WriteLine ("\t}");
+			GenerateImplementorIface (sw);
+			sw.WriteLine ("#endregion");
+			sw.WriteLine ("}");
+			sw.Close ();
+			gen_info.Writer = null;
+			Statistics.IFaceCount++;
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/LPGen.cs b/lib/gio-sharp/generator/LPGen.cs
index 84940b5..3fb774e 100644
--- a/lib/gio-sharp/generator/LPGen.cs
+++ b/lib/gio-sharp/generator/LPGen.cs
@@ -1,58 +1,58 @@
-// GtkSharp.Generation.LPGen.cs - long/pointer Generatable.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.IO;
-
-	public class LPGen : SimpleGen, IAccessor {
-		
-		public LPGen (string ctype) : base (ctype, "long", "0L") {}
-
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-
-		public override string CallByName (string var_name)
-		{
-			return "new IntPtr (" + var_name + ")";
-		}
-		
-		public override string FromNative(string var)
-		{
-			return "(long) " + var;
-		}
-
-		public void WriteAccessors (StreamWriter sw, string indent, string var)
-		{
-			sw.WriteLine (indent + "get {");
-			sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
-			sw.WriteLine (indent + "}");
-			sw.WriteLine (indent + "set {");
-			sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
-			sw.WriteLine (indent + "}");
-		}
-	}
-}
-
+// GtkSharp.Generation.LPGen.cs - long/pointer Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.IO;
+
+	public class LPGen : SimpleGen, IAccessor {
+		
+		public LPGen (string ctype) : base (ctype, "long", "0L") {}
+
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+
+		public override string CallByName (string var_name)
+		{
+			return "new IntPtr (" + var_name + ")";
+		}
+		
+		public override string FromNative(string var)
+		{
+			return "(long) " + var;
+		}
+
+		public void WriteAccessors (StreamWriter sw, string indent, string var)
+		{
+			sw.WriteLine (indent + "get {");
+			sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
+			sw.WriteLine (indent + "}");
+			sw.WriteLine (indent + "set {");
+			sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
+			sw.WriteLine (indent + "}");
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/LPUGen.cs b/lib/gio-sharp/generator/LPUGen.cs
index f84cdd8..331b25f 100644
--- a/lib/gio-sharp/generator/LPUGen.cs
+++ b/lib/gio-sharp/generator/LPUGen.cs
@@ -1,58 +1,58 @@
-// GtkSharp.Generation.LPUGen.cs - unsugned long/pointer generatable.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.IO;
-
-	public class LPUGen : SimpleGen, IAccessor {
-		
-		public LPUGen (string ctype) : base (ctype, "ulong", "0") {}
-
-		public override string MarshalType {
-			get {
-				return "UIntPtr";
-			}
-		}
-
-		public override string CallByName (string var_name)
-		{
-			return "new UIntPtr (" + var_name + ")";
-		}
-		
-		public override string FromNative(string var)
-		{
-			return "(ulong) " + var;
-		}
-
-		public void WriteAccessors (StreamWriter sw, string indent, string var)
-		{
-			sw.WriteLine (indent + "get {");
-			sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
-			sw.WriteLine (indent + "}");
-			sw.WriteLine (indent + "set {");
-			sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
-			sw.WriteLine (indent + "}");
-		}
-	}
-}
-
+// GtkSharp.Generation.LPUGen.cs - unsugned long/pointer generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.IO;
+
+	public class LPUGen : SimpleGen, IAccessor {
+		
+		public LPUGen (string ctype) : base (ctype, "ulong", "0") {}
+
+		public override string MarshalType {
+			get {
+				return "UIntPtr";
+			}
+		}
+
+		public override string CallByName (string var_name)
+		{
+			return "new UIntPtr (" + var_name + ")";
+		}
+		
+		public override string FromNative(string var)
+		{
+			return "(ulong) " + var;
+		}
+
+		public void WriteAccessors (StreamWriter sw, string indent, string var)
+		{
+			sw.WriteLine (indent + "get {");
+			sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
+			sw.WriteLine (indent + "}");
+			sw.WriteLine (indent + "set {");
+			sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
+			sw.WriteLine (indent + "}");
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/ManualGen.cs b/lib/gio-sharp/generator/ManualGen.cs
index 8041905..1d94916 100644
--- a/lib/gio-sharp/generator/ManualGen.cs
+++ b/lib/gio-sharp/generator/ManualGen.cs
@@ -1,58 +1,58 @@
-// GtkSharp.Generation.ManualGen.cs - Ungenerated handle type Generatable.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2003 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class ManualGen : SimpleBase {
-		
-		string from_fmt;
-
-		public ManualGen (string ctype, string type) : base (ctype, type, "null") 
-		{
-			from_fmt = "new " + QualifiedName + "({0})";
-		}
-
-		public ManualGen (string ctype, string type, string from_fmt) : base (ctype, type, "null")
-		{
-			this.from_fmt = from_fmt;
-		}
-		
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-
-		public override string CallByName (string var_name)
-		{
-			return var_name + " == null ? IntPtr.Zero : " + var_name + ".Handle";
-		}
-		
-		public override string FromNative(string var)
-		{
-			return String.Format (from_fmt, var);
-		}
-	}
-}
-
+// GtkSharp.Generation.ManualGen.cs - Ungenerated handle type Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class ManualGen : SimpleBase {
+		
+		string from_fmt;
+
+		public ManualGen (string ctype, string type) : base (ctype, type, "null") 
+		{
+			from_fmt = "new " + QualifiedName + "({0})";
+		}
+
+		public ManualGen (string ctype, string type, string from_fmt) : base (ctype, type, "null")
+		{
+			this.from_fmt = from_fmt;
+		}
+		
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+
+		public override string CallByName (string var_name)
+		{
+			return var_name + " == null ? IntPtr.Zero : " + var_name + ".Handle";
+		}
+		
+		public override string FromNative(string var)
+		{
+			return String.Format (from_fmt, var);
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/Method.cs b/lib/gio-sharp/generator/Method.cs
index e1fd683..3ecf077 100644
--- a/lib/gio-sharp/generator/Method.cs
+++ b/lib/gio-sharp/generator/Method.cs
@@ -1,314 +1,314 @@
-// GtkSharp.Generation.Method.cs - The Method Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Method : MethodBase  {
-		
-		private ReturnValue retval;
-
-		private string call;
-		private bool is_get, is_set;
-		private bool deprecated = false;
-
-		public Method (XmlElement elem, ClassBase container_type) : base (elem, container_type)
-		{
-			this.retval = new ReturnValue (elem["return-type"]);
-			
-			if (!container_type.IsDeprecated && elem.HasAttribute ("deprecated")) {
-				string attr = elem.GetAttribute ("deprecated");
-				deprecated = attr == "1" || attr == "true";
-			}
-			
-			if (Name == "GetType")
-				Name = "GetGType";
-		}
-
-		public bool IsDeprecated {
-			get {
-				return deprecated;
-			}
-		}
-
-		public bool IsGetter {
-			get {
-				return is_get;
-			}
-		}
-
-		public bool IsSetter {
-			get {
-				return is_set;
-			}
-		}
-
-		public string ReturnType {
-			get {
-				return retval.CSType;
-			}
-		}
-
-		public override bool Validate ()
-		{
-			if (!retval.Validate () || !base.Validate ()) {
-				Console.Write(" in method " + Name + " ");
-				return false;
-			}
-
-			Parameters parms = Parameters;
-			is_get = ((((parms.IsAccessor && retval.IsVoid) || (parms.Count == 0 && !retval.IsVoid)) || (parms.Count == 0 && !retval.IsVoid)) && HasGetterName);
-			is_set = ((parms.IsAccessor || (parms.VisibleCount == 1 && retval.IsVoid)) && HasSetterName);
-
-			call = "(" + (IsStatic ? "" : container_type.CallByName () + (parms.Count > 0 ? ", " : "")) + Body.GetCallString (is_set) + ")";
-
-			return true;
-		}
-		
-		private Method GetComplement ()
-		{
-			char complement;
-			if (is_get)
-				complement = 'S';
-			else
-				complement = 'G';
-			
-			return container_type.GetMethod (complement + BaseName.Substring (1));
-		}
-		
-		public string Declaration {
-			get {
-				return retval.CSType + " " + Name + " (" + (Signature != null ? Signature.ToString() : "") + ");";
-			}
-		}
-
+// GtkSharp.Generation.Method.cs - The Method Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Method : MethodBase  {
+		
+		private ReturnValue retval;
+
+		private string call;
+		private bool is_get, is_set;
+		private bool deprecated = false;
+
+		public Method (XmlElement elem, ClassBase container_type) : base (elem, container_type)
+		{
+			this.retval = new ReturnValue (elem["return-type"]);
+			
+			if (!container_type.IsDeprecated && elem.HasAttribute ("deprecated")) {
+				string attr = elem.GetAttribute ("deprecated");
+				deprecated = attr == "1" || attr == "true";
+			}
+			
+			if (Name == "GetType")
+				Name = "GetGType";
+		}
+
+		public bool IsDeprecated {
+			get {
+				return deprecated;
+			}
+		}
+
+		public bool IsGetter {
+			get {
+				return is_get;
+			}
+		}
+
+		public bool IsSetter {
+			get {
+				return is_set;
+			}
+		}
+
+		public string ReturnType {
+			get {
+				return retval.CSType;
+			}
+		}
+
+		public override bool Validate ()
+		{
+			if (!retval.Validate () || !base.Validate ()) {
+				Console.Write(" in method " + Name + " ");
+				return false;
+			}
+
+			Parameters parms = Parameters;
+			is_get = ((((parms.IsAccessor && retval.IsVoid) || (parms.Count == 0 && !retval.IsVoid)) || (parms.Count == 0 && !retval.IsVoid)) && HasGetterName);
+			is_set = ((parms.IsAccessor || (parms.VisibleCount == 1 && retval.IsVoid)) && HasSetterName);
+
+			call = "(" + (IsStatic ? "" : container_type.CallByName () + (parms.Count > 0 ? ", " : "")) + Body.GetCallString (is_set) + ")";
+
+			return true;
+		}
+		
+		private Method GetComplement ()
+		{
+			char complement;
+			if (is_get)
+				complement = 'S';
+			else
+				complement = 'G';
+			
+			return container_type.GetMethod (complement + BaseName.Substring (1));
+		}
+		
+		public string Declaration {
+			get {
+				return retval.CSType + " " + Name + " (" + (Signature != null ? Signature.ToString() : "") + ");";
+			}
+		}
+
 		private void GenerateDeclCommon (StreamWriter sw, ClassBase implementor)
 		{
 			GenerateDeclCommon (sw, implementor, false);
 		}
 
 		private void GenerateDeclCommon (StreamWriter sw, ClassBase implementor, bool is_interface)
-		{
-			if (IsStatic)
-				sw.Write("static ");
-			sw.Write (Safety);
-			Method dup = null;
-			if (container_type != null)
-				dup = container_type.GetMethodRecursively (Name);
-			if (implementor != null)
-				dup = implementor.GetMethodRecursively (Name);
-
+		{
+			if (IsStatic)
+				sw.Write("static ");
+			sw.Write (Safety);
+			Method dup = null;
+			if (container_type != null)
+				dup = container_type.GetMethodRecursively (Name);
+			if (implementor != null)
+				dup = implementor.GetMethodRecursively (Name);
+
 			if (Name == "ToString" && Parameters.Count == 0 && !is_interface)
-				sw.Write("override ");
-			else if (Name == "GetGType" && container_type is ObjectGen)
-				sw.Write("new ");
-			else if (Modifiers == "new " || (dup != null && ((dup.Signature != null && Signature != null && dup.Signature.ToString() == Signature.ToString()) || (dup.Signature == null && Signature == null))))
-				sw.Write("new ");
-
-			if (is_get || is_set) {
-				if (retval.IsVoid)
-					sw.Write (Parameters.AccessorReturnType);
-				else
-					sw.Write(retval.CSType);
-				sw.Write(" ");
-				if (Name.StartsWith ("Get") || Name.StartsWith ("Set"))
-					sw.Write (Name.Substring (3));
-				else {
-					int dot = Name.LastIndexOf ('.');
-					if (dot != -1 && (Name.Substring (dot + 1, 3) == "Get" || Name.Substring (dot + 1, 3) == "Set"))
-						sw.Write (Name.Substring (0, dot + 1) + Name.Substring (dot + 4));
-					else
-						sw.Write (Name);
-				}
-				sw.WriteLine(" { ");
-			} else if (IsAccessor) {
-				sw.Write (Signature.AccessorType + " " + Name + "(" + Signature.AsAccessor + ")");
-			} else {
-				sw.Write(retval.CSType + " " + Name + "(" + (Signature != null ? Signature.ToString() : "") + ")");
-			}
-		}
-
+				sw.Write("override ");
+			else if (Name == "GetGType" && container_type is ObjectGen)
+				sw.Write("new ");
+			else if (Modifiers == "new " || (dup != null && ((dup.Signature != null && Signature != null && dup.Signature.ToString() == Signature.ToString()) || (dup.Signature == null && Signature == null))))
+				sw.Write("new ");
+
+			if (is_get || is_set) {
+				if (retval.IsVoid)
+					sw.Write (Parameters.AccessorReturnType);
+				else
+					sw.Write(retval.CSType);
+				sw.Write(" ");
+				if (Name.StartsWith ("Get") || Name.StartsWith ("Set"))
+					sw.Write (Name.Substring (3));
+				else {
+					int dot = Name.LastIndexOf ('.');
+					if (dot != -1 && (Name.Substring (dot + 1, 3) == "Get" || Name.Substring (dot + 1, 3) == "Set"))
+						sw.Write (Name.Substring (0, dot + 1) + Name.Substring (dot + 4));
+					else
+						sw.Write (Name);
+				}
+				sw.WriteLine(" { ");
+			} else if (IsAccessor) {
+				sw.Write (Signature.AccessorType + " " + Name + "(" + Signature.AsAccessor + ")");
+			} else {
+				sw.Write(retval.CSType + " " + Name + "(" + (Signature != null ? Signature.ToString() : "") + ")");
+			}
+		}
+
 		public void GenerateDecl (StreamWriter sw)
 		{
 			GenerateDecl (sw, false);
 		}
 
 		public void GenerateDecl (StreamWriter sw, bool is_interface)
-		{
-			if (IsStatic)
-				return;
-
-			if (is_get || is_set)
-			{
-				Method comp = GetComplement ();
-				if (comp != null && is_set)
-					return;
-			
-				sw.Write("\t\t");
-				GenerateDeclCommon (sw, null);
-
-				sw.Write("\t\t\t");
-				sw.Write ((is_get) ? "get;" : "set;");
-
-				if (comp != null && comp.is_set)
-					sw.WriteLine (" set;");
-				else
-					sw.WriteLine ();
-
-				sw.WriteLine ("\t\t}");
-			}
-			else
-			{
-				sw.Write("\t\t");
+		{
+			if (IsStatic)
+				return;
+
+			if (is_get || is_set)
+			{
+				Method comp = GetComplement ();
+				if (comp != null && is_set)
+					return;
+			
+				sw.Write("\t\t");
+				GenerateDeclCommon (sw, null);
+
+				sw.Write("\t\t\t");
+				sw.Write ((is_get) ? "get;" : "set;");
+
+				if (comp != null && comp.is_set)
+					sw.WriteLine (" set;");
+				else
+					sw.WriteLine ();
+
+				sw.WriteLine ("\t\t}");
+			}
+			else
+			{
+				sw.Write("\t\t");
 				GenerateDeclCommon (sw, null, is_interface);
-				sw.WriteLine (";");
-			}
-
-			Statistics.MethodCount++;
-		}
-
-		public void GenerateImport (StreamWriter sw)
-		{
-			string import_sig = IsStatic ? "" : container_type.MarshalType + " raw";
-			import_sig += !IsStatic && Parameters.Count > 0 ? ", " : "";
-			import_sig += Parameters.ImportSignature.ToString();
-			sw.WriteLine("\t\t[DllImport(\"" + LibraryName + "\")]");
-			if (retval.MarshalType.StartsWith ("[return:"))
-				sw.WriteLine("\t\t" + retval.MarshalType + " static extern " + Safety + retval.CSType + " " + CName + "(" + import_sig + ");");
-			else
-				sw.WriteLine("\t\tstatic extern " + Safety + retval.MarshalType + " " + CName + "(" + import_sig + ");");
-			sw.WriteLine();
-		}
-
-		public void Generate (GenerationInfo gen_info, ClassBase implementor)
-		{
-			if (!Validate ())
-				return;
-
-			Method comp = null;
-
-			gen_info.CurrentMember = Name;
-
-			/* we are generated by the get Method, if there is one */
-			if (is_set || is_get)
-			{
-				if (Modifiers != "new " && container_type.GetPropertyRecursively (Name.Substring (3)) != null)
-					return;
-				comp = GetComplement ();
-				if (comp != null && is_set) {
-					if (Parameters.AccessorReturnType == comp.ReturnType)
-						return;
-					else {
-						is_set = false;
-						call = "(Handle, " + Body.GetCallString (false) + ")";
-						comp = null;
-					}
-				}
-				/* some setters take more than one arg */
-				if (comp != null && !comp.is_set)
-					comp = null;
-			}
-			
-			GenerateImport (gen_info.Writer);
-			if (comp != null && retval.CSType == comp.Parameters.AccessorReturnType)
-				comp.GenerateImport (gen_info.Writer);
-
-			if (IsDeprecated)
-				gen_info.Writer.WriteLine("\t\t[Obsolete]");
-			gen_info.Writer.Write("\t\t");
+				sw.WriteLine (";");
+			}
+
+			Statistics.MethodCount++;
+		}
+
+		public void GenerateImport (StreamWriter sw)
+		{
+			string import_sig = IsStatic ? "" : container_type.MarshalType + " raw";
+			import_sig += !IsStatic && Parameters.Count > 0 ? ", " : "";
+			import_sig += Parameters.ImportSignature.ToString();
+			sw.WriteLine("\t\t[DllImport(\"" + LibraryName + "\")]");
+			if (retval.MarshalType.StartsWith ("[return:"))
+				sw.WriteLine("\t\t" + retval.MarshalType + " static extern " + Safety + retval.CSType + " " + CName + "(" + import_sig + ");");
+			else
+				sw.WriteLine("\t\tstatic extern " + Safety + retval.MarshalType + " " + CName + "(" + import_sig + ");");
+			sw.WriteLine();
+		}
+
+		public void Generate (GenerationInfo gen_info, ClassBase implementor)
+		{
+			if (!Validate ())
+				return;
+
+			Method comp = null;
+
+			gen_info.CurrentMember = Name;
+
+			/* we are generated by the get Method, if there is one */
+			if (is_set || is_get)
+			{
+				if (Modifiers != "new " && container_type.GetPropertyRecursively (Name.Substring (3)) != null)
+					return;
+				comp = GetComplement ();
+				if (comp != null && is_set) {
+					if (Parameters.AccessorReturnType == comp.ReturnType)
+						return;
+					else {
+						is_set = false;
+						call = "(Handle, " + Body.GetCallString (false) + ")";
+						comp = null;
+					}
+				}
+				/* some setters take more than one arg */
+				if (comp != null && !comp.is_set)
+					comp = null;
+			}
+			
+			GenerateImport (gen_info.Writer);
+			if (comp != null && retval.CSType == comp.Parameters.AccessorReturnType)
+				comp.GenerateImport (gen_info.Writer);
+
+			if (IsDeprecated)
+				gen_info.Writer.WriteLine("\t\t[Obsolete]");
+			gen_info.Writer.Write("\t\t");
 			if (Protection != "")
-				gen_info.Writer.Write("{0} ", Protection);
-			GenerateDeclCommon (gen_info.Writer, implementor);
-
-			if (is_get || is_set)
-			{
-				gen_info.Writer.Write ("\t\t\t");
-				gen_info.Writer.Write ((is_get) ? "get" : "set");
-				GenerateBody (gen_info, implementor, "\t");
-			}
-			else
-				GenerateBody (gen_info, implementor, "");
-			
-			if (is_get || is_set)
-			{
-				if (comp != null && retval.CSType == comp.Parameters.AccessorReturnType)
-				{
-					gen_info.Writer.WriteLine ();
-					gen_info.Writer.Write ("\t\t\tset");
-					comp.GenerateBody (gen_info, implementor, "\t");
-				}
-				gen_info.Writer.WriteLine ();
-				gen_info.Writer.WriteLine ("\t\t}");
-			}
-			else
-				gen_info.Writer.WriteLine();
-			
-			gen_info.Writer.WriteLine();
-
-			Statistics.MethodCount++;
-		}
-
-		public void GenerateBody (GenerationInfo gen_info, ClassBase implementor, string indent)
-		{
-			StreamWriter sw = gen_info.Writer;
-			sw.WriteLine(" {");
-			if (!IsStatic && implementor != null)
-				implementor.Prepare (sw, indent + "\t\t\t");
-			if (IsAccessor)
-				Body.InitAccessor (sw, Signature, indent);
-			Body.Initialize(gen_info, is_get, is_set, indent);
-
-			sw.Write(indent + "\t\t\t");
-			if (retval.IsVoid)
-				sw.WriteLine(CName + call + ";");
-			else {
-				sw.WriteLine(retval.MarshalType + " raw_ret = " + CName + call + ";");
-				sw.WriteLine(indent + "\t\t\t" + retval.CSType + " ret = " + retval.FromNative ("raw_ret") + ";");
-			}
-
-			if (!IsStatic && implementor != null)
-				implementor.Finish (sw, indent + "\t\t\t");
-			Body.Finish (sw, indent);
-			Body.HandleException (sw, indent);
-
-			if (is_get && Parameters.Count > 0) 
-				sw.WriteLine (indent + "\t\t\treturn " + Parameters.AccessorName + ";");
-			else if (!retval.IsVoid)
-				sw.WriteLine (indent + "\t\t\treturn ret;");
-			else if (IsAccessor)
-				Body.FinishAccessor (sw, Signature, indent);
-
-			sw.Write(indent + "\t\t}");
-		}
-
-		bool IsAccessor { 
-			get { 
-				return retval.IsVoid && Signature.IsAccessor; 
-			} 
-		}
-	}
-}
-
+				gen_info.Writer.Write("{0} ", Protection);
+			GenerateDeclCommon (gen_info.Writer, implementor);
+
+			if (is_get || is_set)
+			{
+				gen_info.Writer.Write ("\t\t\t");
+				gen_info.Writer.Write ((is_get) ? "get" : "set");
+				GenerateBody (gen_info, implementor, "\t");
+			}
+			else
+				GenerateBody (gen_info, implementor, "");
+			
+			if (is_get || is_set)
+			{
+				if (comp != null && retval.CSType == comp.Parameters.AccessorReturnType)
+				{
+					gen_info.Writer.WriteLine ();
+					gen_info.Writer.Write ("\t\t\tset");
+					comp.GenerateBody (gen_info, implementor, "\t");
+				}
+				gen_info.Writer.WriteLine ();
+				gen_info.Writer.WriteLine ("\t\t}");
+			}
+			else
+				gen_info.Writer.WriteLine();
+			
+			gen_info.Writer.WriteLine();
+
+			Statistics.MethodCount++;
+		}
+
+		public void GenerateBody (GenerationInfo gen_info, ClassBase implementor, string indent)
+		{
+			StreamWriter sw = gen_info.Writer;
+			sw.WriteLine(" {");
+			if (!IsStatic && implementor != null)
+				implementor.Prepare (sw, indent + "\t\t\t");
+			if (IsAccessor)
+				Body.InitAccessor (sw, Signature, indent);
+			Body.Initialize(gen_info, is_get, is_set, indent);
+
+			sw.Write(indent + "\t\t\t");
+			if (retval.IsVoid)
+				sw.WriteLine(CName + call + ";");
+			else {
+				sw.WriteLine(retval.MarshalType + " raw_ret = " + CName + call + ";");
+				sw.WriteLine(indent + "\t\t\t" + retval.CSType + " ret = " + retval.FromNative ("raw_ret") + ";");
+			}
+
+			if (!IsStatic && implementor != null)
+				implementor.Finish (sw, indent + "\t\t\t");
+			Body.Finish (sw, indent);
+			Body.HandleException (sw, indent);
+
+			if (is_get && Parameters.Count > 0) 
+				sw.WriteLine (indent + "\t\t\treturn " + Parameters.AccessorName + ";");
+			else if (!retval.IsVoid)
+				sw.WriteLine (indent + "\t\t\treturn ret;");
+			else if (IsAccessor)
+				Body.FinishAccessor (sw, Signature, indent);
+
+			sw.Write(indent + "\t\t}");
+		}
+
+		bool IsAccessor { 
+			get { 
+				return retval.IsVoid && Signature.IsAccessor; 
+			} 
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/MethodBody.cs b/lib/gio-sharp/generator/MethodBody.cs
index 2f614d0..cee7079 100644
--- a/lib/gio-sharp/generator/MethodBody.cs
+++ b/lib/gio-sharp/generator/MethodBody.cs
@@ -1,177 +1,177 @@
-// GtkSharp.Generation.MethodBody.cs - The MethodBody Generation Class.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-
-	public class MethodBody  {
-		
-		Parameters parameters;
-
-		public MethodBody (Parameters parms) 
-		{
-			parameters = parms;
-		}
-
-		private string CastFromInt (string type)
-		{
-			return type != "int" ? "(" + type + ") " : "";
-		}
-
-		public string GetCallString (bool is_set)
-		{
-			if (parameters.Count == 0)
-				return String.Empty;
-
-			string[] result = new string [parameters.Count];
-			for (int i = 0; i < parameters.Count; i++) {
-				Parameter p = parameters [i];
-				IGeneratable igen = p.Generatable;
-
-				bool is_prop = is_set && i == 0;
-
-				if (i > 0 && parameters [i - 1].IsString && p.IsLength && p.PassAs == String.Empty) {
-					string string_name = (i == 1 && is_set) ? "value" : parameters [i - 1].Name;
-					result[i] = igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" +  string_name + ")");
-					continue;
-				}
-
-				if (is_prop)
-					p.CallName = "value";
-				else
-					p.CallName = p.Name;
-				string call_parm = p.CallString;
-
-				if (p.IsUserData && parameters.IsHidden (p) && !parameters.HideData &&
-					   (i == 0 || parameters [i - 1].Scope != "notified")) {
-					call_parm = "IntPtr.Zero"; 
-				}
-
-				result [i] += call_parm;
-			}
-
-			return String.Join (", ", result);
-		}
-
-		public void Initialize (GenerationInfo gen_info)
-		{
-			Initialize (gen_info, false, false, String.Empty);
-		}
-
-		public void Initialize (GenerationInfo gen_info, bool is_get, bool is_set, string indent)
-		{
-			if (parameters.Count == 0)
-				return;
-
-			StreamWriter sw = gen_info.Writer;
-			for (int i = 0; i < parameters.Count; i++) {
-				Parameter p = parameters [i];
-
-				IGeneratable gen = p.Generatable;
-				string name = p.Name;
-				if (is_set)
-					name = "value";
-
-				p.CallName = name;
-				foreach (string prep in p.Prepare)
-					sw.WriteLine (indent + "\t\t\t" + prep);
-
-				if (gen is CallbackGen) {
-					CallbackGen cbgen = gen as CallbackGen;
-					string wrapper = cbgen.GenWrapper(gen_info);
-					switch (p.Scope) {
-					case "notified":
-						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
-						sw.WriteLine (indent + "\t\t\tIntPtr {0};", parameters [i + 1].Name);
-						sw.WriteLine (indent + "\t\t\t{0} {1};", parameters [i + 2].CSType, parameters [i + 2].Name);
-						sw.WriteLine (indent + "\t\t\tif ({0} == null) {{", name);
-						sw.WriteLine (indent + "\t\t\t\t{0} = IntPtr.Zero;", parameters [i + 1].Name);
-						sw.WriteLine (indent + "\t\t\t\t{0} = null;", parameters [i + 2].Name);
-						sw.WriteLine (indent + "\t\t\t} else {");
-						sw.WriteLine (indent + "\t\t\t\t{0} = (IntPtr) GCHandle.Alloc ({1}_wrapper);", parameters [i + 1].Name, name);
-						sw.WriteLine (indent + "\t\t\t\t{0} = GLib.DestroyHelper.NotifyHandler;", parameters [i + 2].Name, parameters [i + 2].CSType);
-						sw.WriteLine (indent + "\t\t\t}");
-						break;
-
-					case "async":
-						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
-						sw.WriteLine (indent + "\t\t\t{0}_wrapper.PersistUntilCalled ();", name);
-						break;
-					case "call":
-					default:
-						if (p.Scope == String.Empty)
-							Console.WriteLine ("Defaulting " + gen.Name + " param to 'call' scope in method " + gen_info.CurrentMember);
-						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
-						break;
-					}
-				}
-			}
-
-			if (ThrowsException)
-				sw.WriteLine (indent + "\t\t\tIntPtr error = IntPtr.Zero;");
-		}
-
-		public void InitAccessor (StreamWriter sw, Signature sig, string indent)
-		{
-			sw.WriteLine (indent + "\t\t\t" + sig.AccessorType + " " + sig.AccessorName + ";");
-		}
-
-		public void Finish (StreamWriter sw, string indent)
-		{
-			foreach (Parameter p in parameters)
-				foreach (string s in p.Finish)
-					sw.WriteLine(indent + "\t\t\t" + s);
-		}
-
-		public void FinishAccessor (StreamWriter sw, Signature sig, string indent)
-		{
-			sw.WriteLine (indent + "\t\t\treturn " + sig.AccessorName + ";");
-		}
-
-		public void HandleException (StreamWriter sw, string indent)
-		{
-			if (!ThrowsException)
-				return;
-			sw.WriteLine (indent + "\t\t\tif (error != IntPtr.Zero) throw new GLib.GException (error);");
-		}
-		
-		public bool ThrowsException {
-			get {
-				int idx = parameters.Count - 1;
-
-				while (idx >= 0) {
-					if (parameters [idx].IsUserData)
-						idx--;
-					else if (parameters [idx].CType == "GError**")
-						return true;
-					else
-						break;
-				}
-				return false;
-			}
-		}
-	}
-}
-
+// GtkSharp.Generation.MethodBody.cs - The MethodBody Generation Class.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+
+	public class MethodBody  {
+		
+		Parameters parameters;
+
+		public MethodBody (Parameters parms) 
+		{
+			parameters = parms;
+		}
+
+		private string CastFromInt (string type)
+		{
+			return type != "int" ? "(" + type + ") " : "";
+		}
+
+		public string GetCallString (bool is_set)
+		{
+			if (parameters.Count == 0)
+				return String.Empty;
+
+			string[] result = new string [parameters.Count];
+			for (int i = 0; i < parameters.Count; i++) {
+				Parameter p = parameters [i];
+				IGeneratable igen = p.Generatable;
+
+				bool is_prop = is_set && i == 0;
+
+				if (i > 0 && parameters [i - 1].IsString && p.IsLength && p.PassAs == String.Empty) {
+					string string_name = (i == 1 && is_set) ? "value" : parameters [i - 1].Name;
+					result[i] = igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" +  string_name + ")");
+					continue;
+				}
+
+				if (is_prop)
+					p.CallName = "value";
+				else
+					p.CallName = p.Name;
+				string call_parm = p.CallString;
+
+				if (p.IsUserData && parameters.IsHidden (p) && !parameters.HideData &&
+					   (i == 0 || parameters [i - 1].Scope != "notified")) {
+					call_parm = "IntPtr.Zero"; 
+				}
+
+				result [i] += call_parm;
+			}
+
+			return String.Join (", ", result);
+		}
+
+		public void Initialize (GenerationInfo gen_info)
+		{
+			Initialize (gen_info, false, false, String.Empty);
+		}
+
+		public void Initialize (GenerationInfo gen_info, bool is_get, bool is_set, string indent)
+		{
+			if (parameters.Count == 0)
+				return;
+
+			StreamWriter sw = gen_info.Writer;
+			for (int i = 0; i < parameters.Count; i++) {
+				Parameter p = parameters [i];
+
+				IGeneratable gen = p.Generatable;
+				string name = p.Name;
+				if (is_set)
+					name = "value";
+
+				p.CallName = name;
+				foreach (string prep in p.Prepare)
+					sw.WriteLine (indent + "\t\t\t" + prep);
+
+				if (gen is CallbackGen) {
+					CallbackGen cbgen = gen as CallbackGen;
+					string wrapper = cbgen.GenWrapper(gen_info);
+					switch (p.Scope) {
+					case "notified":
+						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
+						sw.WriteLine (indent + "\t\t\tIntPtr {0};", parameters [i + 1].Name);
+						sw.WriteLine (indent + "\t\t\t{0} {1};", parameters [i + 2].CSType, parameters [i + 2].Name);
+						sw.WriteLine (indent + "\t\t\tif ({0} == null) {{", name);
+						sw.WriteLine (indent + "\t\t\t\t{0} = IntPtr.Zero;", parameters [i + 1].Name);
+						sw.WriteLine (indent + "\t\t\t\t{0} = null;", parameters [i + 2].Name);
+						sw.WriteLine (indent + "\t\t\t} else {");
+						sw.WriteLine (indent + "\t\t\t\t{0} = (IntPtr) GCHandle.Alloc ({1}_wrapper);", parameters [i + 1].Name, name);
+						sw.WriteLine (indent + "\t\t\t\t{0} = GLib.DestroyHelper.NotifyHandler;", parameters [i + 2].Name, parameters [i + 2].CSType);
+						sw.WriteLine (indent + "\t\t\t}");
+						break;
+
+					case "async":
+						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
+						sw.WriteLine (indent + "\t\t\t{0}_wrapper.PersistUntilCalled ();", name);
+						break;
+					case "call":
+					default:
+						if (p.Scope == String.Empty)
+							Console.WriteLine ("Defaulting " + gen.Name + " param to 'call' scope in method " + gen_info.CurrentMember);
+						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
+						break;
+					}
+				}
+			}
+
+			if (ThrowsException)
+				sw.WriteLine (indent + "\t\t\tIntPtr error = IntPtr.Zero;");
+		}
+
+		public void InitAccessor (StreamWriter sw, Signature sig, string indent)
+		{
+			sw.WriteLine (indent + "\t\t\t" + sig.AccessorType + " " + sig.AccessorName + ";");
+		}
+
+		public void Finish (StreamWriter sw, string indent)
+		{
+			foreach (Parameter p in parameters)
+				foreach (string s in p.Finish)
+					sw.WriteLine(indent + "\t\t\t" + s);
+		}
+
+		public void FinishAccessor (StreamWriter sw, Signature sig, string indent)
+		{
+			sw.WriteLine (indent + "\t\t\treturn " + sig.AccessorName + ";");
+		}
+
+		public void HandleException (StreamWriter sw, string indent)
+		{
+			if (!ThrowsException)
+				return;
+			sw.WriteLine (indent + "\t\t\tif (error != IntPtr.Zero) throw new GLib.GException (error);");
+		}
+		
+		public bool ThrowsException {
+			get {
+				int idx = parameters.Count - 1;
+
+				while (idx >= 0) {
+					if (parameters [idx].IsUserData)
+						idx--;
+					else if (parameters [idx].CType == "GError**")
+						return true;
+					else
+						break;
+				}
+				return false;
+			}
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/ObjectGen.cs b/lib/gio-sharp/generator/ObjectGen.cs
index 2235a64..58d2c17 100644
--- a/lib/gio-sharp/generator/ObjectGen.cs
+++ b/lib/gio-sharp/generator/ObjectGen.cs
@@ -1,425 +1,425 @@
-// GtkSharp.Generation.ObjectGen.cs - The Object Generatable.
-//
-// Author: Mike Kestner <mkestner ximian com>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Text;
-	using System.Xml;
-
-	public class ObjectGen : ObjectBase  {
-
-		private ArrayList custom_attrs = new ArrayList();
-		private ArrayList strings = new ArrayList();
-		private ArrayList vm_nodes = new ArrayList();
-		private Hashtable childprops = new Hashtable();
-		private static Hashtable dirs = new Hashtable ();
-
-		public ObjectGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
-		{
-			foreach (XmlNode node in elem.ChildNodes) {
-				string name;
-
-				if (!(node is XmlElement)) continue;
-				XmlElement member = (XmlElement) node;
-
-				switch (node.Name) {
-				case "callback":
-					Statistics.IgnoreCount++;
-					break;
-
-				case "custom-attribute":
-					custom_attrs.Add (member.InnerXml);
-					break;
-
-				case "virtual_method":
-					Statistics.IgnoreCount++;
-					break;
-
-				case "static-string":
-					strings.Add (node);
-					break;
-
-				case "childprop":
-					name = member.GetAttribute ("name");
-					while (childprops.ContainsKey (name))
-						name += "mangled";
-					childprops.Add (name, new ChildProperty (member, this));
-					break;
-
-				default:
-					if (!IsNodeNameHandled (node.Name))
-						Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
-					break;
-				}
-			}
-		}
-
-		public override bool Validate ()
-		{
-			ArrayList invalids = new ArrayList ();
-
-			foreach (ChildProperty prop in childprops.Values) {
-				if (!prop.Validate ()) {
-					Console.WriteLine ("in Object " + QualifiedName);
-					invalids.Add (prop);
-				}
-			}
-			foreach (ChildProperty prop in invalids)
-				childprops.Remove (prop);
-
-			return base.Validate ();
-		}
-
-		private bool DisableVoidCtor {
-			get {
-				return Elem.HasAttribute ("disable_void_ctor");
-			}
-		}
-
-		private bool DisableGTypeCtor {
-			get {
-				return Elem.HasAttribute ("disable_gtype_ctor");
-			}
-		}
-
-		private class DirectoryInfo {
-			public string assembly_name;
-			public Hashtable objects;
-
-			public DirectoryInfo (string assembly_name) {
-				this.assembly_name = assembly_name;
-				objects = new Hashtable ();
-			}
-		}
-
-		private static DirectoryInfo GetDirectoryInfo (string dir, string assembly_name)
-		{
-			DirectoryInfo result;
-
-			if (dirs.ContainsKey (dir)) {
-				result = dirs [dir] as DirectoryInfo;
-				if  (result.assembly_name != assembly_name) {
-					Console.WriteLine ("Can't put multiple assemblies in one directory.");
-					return null;
-				}
-
-				return result;
-			}
-
-			result = new DirectoryInfo (assembly_name);
-			dirs.Add (dir, result);
-			
-			return result;
-		}
-
-		public override void Generate (GenerationInfo gen_info)
-		{
-			gen_info.CurrentType = Name;
-
-			string asm_name = gen_info.AssemblyName.Length == 0 ? NS.ToLower () + "-sharp" : gen_info.AssemblyName;
-			DirectoryInfo di = GetDirectoryInfo (gen_info.Dir, asm_name);
-
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ("\tusing System.Collections;");
-			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
-			sw.WriteLine ();
-
-			SymbolTable table = SymbolTable.Table;
-
-			sw.WriteLine ("#region Autogenerated code");
-			if (IsDeprecated)
-				sw.WriteLine ("\t[Obsolete]");
-			foreach (string attr in custom_attrs)
-				sw.WriteLine ("\t" + attr);
-			sw.Write ("\t{0} {1}class " + Name, IsInternal ? "internal" : "public", IsAbstract ? "abstract " : "");
-			string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));
-			if (cs_parent != "") {
-				di.objects.Add (CName, QualifiedName);
-				sw.Write (" : " + cs_parent);
-			}
-			foreach (string iface in interfaces) {
-				if (Parent != null && Parent.Implements (iface))
-					continue;
-				sw.Write (", " + table.GetCSType (iface));
-			}
-			foreach (string iface in managed_interfaces) {
-				if (Parent != null && Parent.Implements (iface))
-					continue;
-				sw.Write (", " + iface);
-			}
-			sw.WriteLine (" {");
-			sw.WriteLine ();
-
-			GenCtors (gen_info);
-			GenProperties (gen_info, null);
-			GenFields (gen_info);
-			GenChildProperties (gen_info);
-			
-			bool has_sigs = (sigs != null && sigs.Count > 0);
-			if (!has_sigs) {
-				foreach (string iface in interfaces) {
-					ClassBase igen = table.GetClassGen (iface);
-					if (igen != null && igen.Signals != null) {
-						has_sigs = true;
-						break;
-					}
-				}
-			}
-
-			if (has_sigs && Elem.HasAttribute("parent")) {
-				GenSignals (gen_info, null);
-			}
-
-			if (vm_nodes.Count > 0) {
-				if (gen_info.GlueEnabled) {
-					GenVirtualMethods (gen_info);
-				} else {
-					Statistics.VMIgnored = true;
-					Statistics.ThrottledCount += vm_nodes.Count;
-				}
-			}
-
-			GenMethods (gen_info, null, null);
-			
-			if (interfaces.Count != 0) {
-				Hashtable all_methods = new Hashtable ();
-				foreach (Method m in Methods.Values)
-					all_methods[m.Name] = m;
-				Hashtable collisions = new Hashtable ();
-				foreach (string iface in interfaces) {
-					ClassBase igen = table.GetClassGen (iface);
-					foreach (Method m in igen.Methods.Values) {
-						Method collision = all_methods[m.Name] as Method;
-						if (collision != null && collision.Signature.Types == m.Signature.Types)
-							collisions[m.Name] = true;
-						else
-							all_methods[m.Name] = m;
-					}
-				}
-					
-				foreach (string iface in interfaces) {
-					if (Parent != null && Parent.Implements (iface))
-						continue;
-					ClassBase igen = table.GetClassGen (iface);
-					igen.GenMethods (gen_info, collisions, this);
-					igen.GenProperties (gen_info, this);
-					igen.GenSignals (gen_info, this);
-				}
-			}
-
-			foreach (XmlElement str in strings) {
-				sw.Write ("\t\tpublic static string " + str.GetAttribute ("name"));
-				sw.WriteLine (" {\n\t\t\t get { return \"" + str.GetAttribute ("value") + "\"; }\n\t\t}");
-			}
-
-			if (cs_parent != String.Empty && GetExpected (CName) != QualifiedName) {
-				sw.WriteLine ();
-				sw.WriteLine ("\t\tstatic " + Name + " ()");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tGtkSharp." + Studlify (asm_name) + ".ObjectManager.Initialize ();");
-				sw.WriteLine ("\t\t}");
-			}
-
-			sw.WriteLine ("#endregion");
-			AppendCustom (sw, gen_info.CustomDir);
-
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-
-			sw.Close ();
-			gen_info.Writer = null;
-			Statistics.ObjectCount++;
-		}
-
-		protected override void GenCtors (GenerationInfo gen_info)
-		{
-			if (!Elem.HasAttribute("parent"))
-				return;
-
-			if (!DisableGTypeCtor) {
-				gen_info.Writer.WriteLine("\t\t[Obsolete]");
-				gen_info.Writer.WriteLine("\t\tprotected " + Name + "(GLib.GType gtype) : base(gtype) {}");
-			}
-			gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}");
-			if (ctors.Count == 0 && !DisableVoidCtor) {
-				gen_info.Writer.WriteLine();
-				gen_info.Writer.WriteLine("\t\tprotected " + Name + "() : base(IntPtr.Zero)");
-				gen_info.Writer.WriteLine("\t\t{");
-				gen_info.Writer.WriteLine("\t\t\tCreateNativeObject (new string [0], new GLib.Value [0]);");
-				gen_info.Writer.WriteLine("\t\t}");
-			}
-			gen_info.Writer.WriteLine();
-
-			base.GenCtors (gen_info);
-		}
-
-		protected void GenChildProperties (GenerationInfo gen_info)
-		{
-			if (childprops.Count == 0)
-				return;
-
-			StreamWriter sw = gen_info.Writer;
-
-			ObjectGen child_ancestor = Parent as ObjectGen;
-			while (child_ancestor.CName != "GtkContainer" &&
-			       child_ancestor.childprops.Count == 0)
-				child_ancestor = child_ancestor.Parent as ObjectGen;
-
-			sw.WriteLine ("\t\tpublic class " + Name + "Child : " + child_ancestor.NS + "." + child_ancestor.Name + "." + child_ancestor.Name + "Child {");
-			sw.WriteLine ("\t\t\tprotected internal " + Name + "Child (Gtk.Container parent, Gtk.Widget child) : base (parent, child) {}");
-			sw.WriteLine ("");
-
-			foreach (ChildProperty prop in childprops.Values)
-				prop.Generate (gen_info, "\t\t\t", null);
-
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ("");
-
-			sw.WriteLine ("\t\tpublic override Gtk.Container.ContainerChild this [Gtk.Widget child] {");
-			sw.WriteLine ("\t\t\tget {");
-			sw.WriteLine ("\t\t\t\treturn new " + Name + "Child (this, child);");
-			sw.WriteLine ("\t\t\t}");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ("");
-			
-		}
-
-		private void GenVMGlue (GenerationInfo gen_info, XmlElement elem)
-		{
-			StreamWriter sw = gen_info.GlueWriter;
-
-			string vm_name = elem.GetAttribute ("cname");
-			string method = gen_info.GluelibName + "_" + NS + Name + "_override_" + vm_name;
-			sw.WriteLine ();
-			sw.WriteLine ("void " + method + " (GType type, gpointer cb);");
-			sw.WriteLine ();
-			sw.WriteLine ("void");
-			sw.WriteLine (method + " (GType type, gpointer cb)");
-			sw.WriteLine ("{");
-			sw.WriteLine ("\t{0} *klass = ({0} *) g_type_class_peek (type);", NS + Name + "Class");
-			sw.WriteLine ("\tklass->" + vm_name + " = cb;");
-			sw.WriteLine ("}");
-		}
-
-		static bool vmhdrs_needed = true;
-
-		private void GenVirtualMethods (GenerationInfo gen_info)
-		{
-			if (vmhdrs_needed) {
-				gen_info.GlueWriter.WriteLine ("#include <glib-object.h>");
-				gen_info.GlueWriter.WriteLine ("#include \"vmglueheaders.h\"");
-				gen_info.GlueWriter.WriteLine ();
-				vmhdrs_needed = false;
-			}
-
-			foreach (XmlElement elem in vm_nodes) {
-				GenVMGlue (gen_info, elem);
-			}
-		}
-
-		/* Keep this in sync with the one in glib/GType.cs */
-		private static string GetExpected (string cname)
-		{
-			for (int i = 1; i < cname.Length; i++) {
-				if (Char.IsUpper (cname[i])) {
-					if (i == 1 && cname[0] == 'G')
-						return "GLib." + cname.Substring (1);
-					else
-						return cname.Substring (0, i) + "." + cname.Substring (i);
-				}
-			}
-
-			throw new ArgumentException ("cname doesn't follow the NamespaceType capitalization style: " + cname);
-		}
-
-		private static bool NeedsMap (Hashtable objs, string assembly_name)
-		{
-			foreach (string key in objs.Keys)
-				if (GetExpected (key) != ((string) objs[key]))
-					return true;
-			
-			return false;
-		}
-
-		private static string Studlify (string name)
-		{
-			string result = "";
-
-			string[] subs = name.Split ('-');
-			foreach (string sub in subs)
-				result += Char.ToUpper (sub[0]) + sub.Substring (1);
-				
-			return result;
-		}
-				
-		public static void GenerateMappers ()
-		{
-			foreach (string dir in dirs.Keys) {
-
-				DirectoryInfo di = dirs[dir] as DirectoryInfo;
-
-				if (!NeedsMap (di.objects, di.assembly_name))
-					continue;
-	
-				GenerationInfo gen_info = new GenerationInfo (dir, di.assembly_name);
-
-				GenerateMapper (di, gen_info);
-			}
-		}
-
-		private static void GenerateMapper (DirectoryInfo dir_info, GenerationInfo gen_info)
-		{
-			StreamWriter sw = gen_info.OpenStream ("ObjectManager");
-
-			sw.WriteLine ("namespace GtkSharp." + Studlify (dir_info.assembly_name) + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tpublic class ObjectManager {");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tstatic bool initialized = false;");
-			sw.WriteLine ("\t\t// Call this method from the appropriate module init function.");
-			sw.WriteLine ("\t\tpublic static void Initialize ()");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tif (initialized)");
-			sw.WriteLine ("\t\t\t\treturn;");
-			sw.WriteLine ("");
-			sw.WriteLine ("\t\t\tinitialized = true;");
-	
-			foreach (string key in dir_info.objects.Keys) {
-				if (GetExpected(key) != ((string) dir_info.objects[key]))
-					sw.WriteLine ("\t\t\tGLib.GType.Register ({0}.GType, typeof ({0}));", dir_info.objects [key]);
-			}
-					
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-			sw.Close ();
-		}
-	}
-}
-
+// GtkSharp.Generation.ObjectGen.cs - The Object Generatable.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Text;
+	using System.Xml;
+
+	public class ObjectGen : ObjectBase  {
+
+		private ArrayList custom_attrs = new ArrayList();
+		private ArrayList strings = new ArrayList();
+		private ArrayList vm_nodes = new ArrayList();
+		private Hashtable childprops = new Hashtable();
+		private static Hashtable dirs = new Hashtable ();
+
+		public ObjectGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
+		{
+			foreach (XmlNode node in elem.ChildNodes) {
+				string name;
+
+				if (!(node is XmlElement)) continue;
+				XmlElement member = (XmlElement) node;
+
+				switch (node.Name) {
+				case "callback":
+					Statistics.IgnoreCount++;
+					break;
+
+				case "custom-attribute":
+					custom_attrs.Add (member.InnerXml);
+					break;
+
+				case "virtual_method":
+					Statistics.IgnoreCount++;
+					break;
+
+				case "static-string":
+					strings.Add (node);
+					break;
+
+				case "childprop":
+					name = member.GetAttribute ("name");
+					while (childprops.ContainsKey (name))
+						name += "mangled";
+					childprops.Add (name, new ChildProperty (member, this));
+					break;
+
+				default:
+					if (!IsNodeNameHandled (node.Name))
+						Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
+					break;
+				}
+			}
+		}
+
+		public override bool Validate ()
+		{
+			ArrayList invalids = new ArrayList ();
+
+			foreach (ChildProperty prop in childprops.Values) {
+				if (!prop.Validate ()) {
+					Console.WriteLine ("in Object " + QualifiedName);
+					invalids.Add (prop);
+				}
+			}
+			foreach (ChildProperty prop in invalids)
+				childprops.Remove (prop);
+
+			return base.Validate ();
+		}
+
+		private bool DisableVoidCtor {
+			get {
+				return Elem.HasAttribute ("disable_void_ctor");
+			}
+		}
+
+		private bool DisableGTypeCtor {
+			get {
+				return Elem.HasAttribute ("disable_gtype_ctor");
+			}
+		}
+
+		private class DirectoryInfo {
+			public string assembly_name;
+			public Hashtable objects;
+
+			public DirectoryInfo (string assembly_name) {
+				this.assembly_name = assembly_name;
+				objects = new Hashtable ();
+			}
+		}
+
+		private static DirectoryInfo GetDirectoryInfo (string dir, string assembly_name)
+		{
+			DirectoryInfo result;
+
+			if (dirs.ContainsKey (dir)) {
+				result = dirs [dir] as DirectoryInfo;
+				if  (result.assembly_name != assembly_name) {
+					Console.WriteLine ("Can't put multiple assemblies in one directory.");
+					return null;
+				}
+
+				return result;
+			}
+
+			result = new DirectoryInfo (assembly_name);
+			dirs.Add (dir, result);
+			
+			return result;
+		}
+
+		public override void Generate (GenerationInfo gen_info)
+		{
+			gen_info.CurrentType = Name;
+
+			string asm_name = gen_info.AssemblyName.Length == 0 ? NS.ToLower () + "-sharp" : gen_info.AssemblyName;
+			DirectoryInfo di = GetDirectoryInfo (gen_info.Dir, asm_name);
+
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Collections;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+			sw.WriteLine ();
+
+			SymbolTable table = SymbolTable.Table;
+
+			sw.WriteLine ("#region Autogenerated code");
+			if (IsDeprecated)
+				sw.WriteLine ("\t[Obsolete]");
+			foreach (string attr in custom_attrs)
+				sw.WriteLine ("\t" + attr);
+			sw.Write ("\t{0} {1}class " + Name, IsInternal ? "internal" : "public", IsAbstract ? "abstract " : "");
+			string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));
+			if (cs_parent != "") {
+				di.objects.Add (CName, QualifiedName);
+				sw.Write (" : " + cs_parent);
+			}
+			foreach (string iface in interfaces) {
+				if (Parent != null && Parent.Implements (iface))
+					continue;
+				sw.Write (", " + table.GetCSType (iface));
+			}
+			foreach (string iface in managed_interfaces) {
+				if (Parent != null && Parent.Implements (iface))
+					continue;
+				sw.Write (", " + iface);
+			}
+			sw.WriteLine (" {");
+			sw.WriteLine ();
+
+			GenCtors (gen_info);
+			GenProperties (gen_info, null);
+			GenFields (gen_info);
+			GenChildProperties (gen_info);
+			
+			bool has_sigs = (sigs != null && sigs.Count > 0);
+			if (!has_sigs) {
+				foreach (string iface in interfaces) {
+					ClassBase igen = table.GetClassGen (iface);
+					if (igen != null && igen.Signals != null) {
+						has_sigs = true;
+						break;
+					}
+				}
+			}
+
+			if (has_sigs && Elem.HasAttribute("parent")) {
+				GenSignals (gen_info, null);
+			}
+
+			if (vm_nodes.Count > 0) {
+				if (gen_info.GlueEnabled) {
+					GenVirtualMethods (gen_info);
+				} else {
+					Statistics.VMIgnored = true;
+					Statistics.ThrottledCount += vm_nodes.Count;
+				}
+			}
+
+			GenMethods (gen_info, null, null);
+			
+			if (interfaces.Count != 0) {
+				Hashtable all_methods = new Hashtable ();
+				foreach (Method m in Methods.Values)
+					all_methods[m.Name] = m;
+				Hashtable collisions = new Hashtable ();
+				foreach (string iface in interfaces) {
+					ClassBase igen = table.GetClassGen (iface);
+					foreach (Method m in igen.Methods.Values) {
+						Method collision = all_methods[m.Name] as Method;
+						if (collision != null && collision.Signature.Types == m.Signature.Types)
+							collisions[m.Name] = true;
+						else
+							all_methods[m.Name] = m;
+					}
+				}
+					
+				foreach (string iface in interfaces) {
+					if (Parent != null && Parent.Implements (iface))
+						continue;
+					ClassBase igen = table.GetClassGen (iface);
+					igen.GenMethods (gen_info, collisions, this);
+					igen.GenProperties (gen_info, this);
+					igen.GenSignals (gen_info, this);
+				}
+			}
+
+			foreach (XmlElement str in strings) {
+				sw.Write ("\t\tpublic static string " + str.GetAttribute ("name"));
+				sw.WriteLine (" {\n\t\t\t get { return \"" + str.GetAttribute ("value") + "\"; }\n\t\t}");
+			}
+
+			if (cs_parent != String.Empty && GetExpected (CName) != QualifiedName) {
+				sw.WriteLine ();
+				sw.WriteLine ("\t\tstatic " + Name + " ()");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tGtkSharp." + Studlify (asm_name) + ".ObjectManager.Initialize ();");
+				sw.WriteLine ("\t\t}");
+			}
+
+			sw.WriteLine ("#endregion");
+			AppendCustom (sw, gen_info.CustomDir);
+
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+
+			sw.Close ();
+			gen_info.Writer = null;
+			Statistics.ObjectCount++;
+		}
+
+		protected override void GenCtors (GenerationInfo gen_info)
+		{
+			if (!Elem.HasAttribute("parent"))
+				return;
+
+			if (!DisableGTypeCtor) {
+				gen_info.Writer.WriteLine("\t\t[Obsolete]");
+				gen_info.Writer.WriteLine("\t\tprotected " + Name + "(GLib.GType gtype) : base(gtype) {}");
+			}
+			gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}");
+			if (ctors.Count == 0 && !DisableVoidCtor) {
+				gen_info.Writer.WriteLine();
+				gen_info.Writer.WriteLine("\t\tprotected " + Name + "() : base(IntPtr.Zero)");
+				gen_info.Writer.WriteLine("\t\t{");
+				gen_info.Writer.WriteLine("\t\t\tCreateNativeObject (new string [0], new GLib.Value [0]);");
+				gen_info.Writer.WriteLine("\t\t}");
+			}
+			gen_info.Writer.WriteLine();
+
+			base.GenCtors (gen_info);
+		}
+
+		protected void GenChildProperties (GenerationInfo gen_info)
+		{
+			if (childprops.Count == 0)
+				return;
+
+			StreamWriter sw = gen_info.Writer;
+
+			ObjectGen child_ancestor = Parent as ObjectGen;
+			while (child_ancestor.CName != "GtkContainer" &&
+			       child_ancestor.childprops.Count == 0)
+				child_ancestor = child_ancestor.Parent as ObjectGen;
+
+			sw.WriteLine ("\t\tpublic class " + Name + "Child : " + child_ancestor.NS + "." + child_ancestor.Name + "." + child_ancestor.Name + "Child {");
+			sw.WriteLine ("\t\t\tprotected internal " + Name + "Child (Gtk.Container parent, Gtk.Widget child) : base (parent, child) {}");
+			sw.WriteLine ("");
+
+			foreach (ChildProperty prop in childprops.Values)
+				prop.Generate (gen_info, "\t\t\t", null);
+
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ("");
+
+			sw.WriteLine ("\t\tpublic override Gtk.Container.ContainerChild this [Gtk.Widget child] {");
+			sw.WriteLine ("\t\t\tget {");
+			sw.WriteLine ("\t\t\t\treturn new " + Name + "Child (this, child);");
+			sw.WriteLine ("\t\t\t}");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ("");
+			
+		}
+
+		private void GenVMGlue (GenerationInfo gen_info, XmlElement elem)
+		{
+			StreamWriter sw = gen_info.GlueWriter;
+
+			string vm_name = elem.GetAttribute ("cname");
+			string method = gen_info.GluelibName + "_" + NS + Name + "_override_" + vm_name;
+			sw.WriteLine ();
+			sw.WriteLine ("void " + method + " (GType type, gpointer cb);");
+			sw.WriteLine ();
+			sw.WriteLine ("void");
+			sw.WriteLine (method + " (GType type, gpointer cb)");
+			sw.WriteLine ("{");
+			sw.WriteLine ("\t{0} *klass = ({0} *) g_type_class_peek (type);", NS + Name + "Class");
+			sw.WriteLine ("\tklass->" + vm_name + " = cb;");
+			sw.WriteLine ("}");
+		}
+
+		static bool vmhdrs_needed = true;
+
+		private void GenVirtualMethods (GenerationInfo gen_info)
+		{
+			if (vmhdrs_needed) {
+				gen_info.GlueWriter.WriteLine ("#include <glib-object.h>");
+				gen_info.GlueWriter.WriteLine ("#include \"vmglueheaders.h\"");
+				gen_info.GlueWriter.WriteLine ();
+				vmhdrs_needed = false;
+			}
+
+			foreach (XmlElement elem in vm_nodes) {
+				GenVMGlue (gen_info, elem);
+			}
+		}
+
+		/* Keep this in sync with the one in glib/GType.cs */
+		private static string GetExpected (string cname)
+		{
+			for (int i = 1; i < cname.Length; i++) {
+				if (Char.IsUpper (cname[i])) {
+					if (i == 1 && cname[0] == 'G')
+						return "GLib." + cname.Substring (1);
+					else
+						return cname.Substring (0, i) + "." + cname.Substring (i);
+				}
+			}
+
+			throw new ArgumentException ("cname doesn't follow the NamespaceType capitalization style: " + cname);
+		}
+
+		private static bool NeedsMap (Hashtable objs, string assembly_name)
+		{
+			foreach (string key in objs.Keys)
+				if (GetExpected (key) != ((string) objs[key]))
+					return true;
+			
+			return false;
+		}
+
+		private static string Studlify (string name)
+		{
+			string result = "";
+
+			string[] subs = name.Split ('-');
+			foreach (string sub in subs)
+				result += Char.ToUpper (sub[0]) + sub.Substring (1);
+				
+			return result;
+		}
+				
+		public static void GenerateMappers ()
+		{
+			foreach (string dir in dirs.Keys) {
+
+				DirectoryInfo di = dirs[dir] as DirectoryInfo;
+
+				if (!NeedsMap (di.objects, di.assembly_name))
+					continue;
+	
+				GenerationInfo gen_info = new GenerationInfo (dir, di.assembly_name);
+
+				GenerateMapper (di, gen_info);
+			}
+		}
+
+		private static void GenerateMapper (DirectoryInfo dir_info, GenerationInfo gen_info)
+		{
+			StreamWriter sw = gen_info.OpenStream ("ObjectManager");
+
+			sw.WriteLine ("namespace GtkSharp." + Studlify (dir_info.assembly_name) + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tpublic class ObjectManager {");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tstatic bool initialized = false;");
+			sw.WriteLine ("\t\t// Call this method from the appropriate module init function.");
+			sw.WriteLine ("\t\tpublic static void Initialize ()");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tif (initialized)");
+			sw.WriteLine ("\t\t\t\treturn;");
+			sw.WriteLine ("");
+			sw.WriteLine ("\t\t\tinitialized = true;");
+	
+			foreach (string key in dir_info.objects.Keys) {
+				if (GetExpected(key) != ((string) dir_info.objects[key]))
+					sw.WriteLine ("\t\t\tGLib.GType.Register ({0}.GType, typeof ({0}));", dir_info.objects [key]);
+			}
+					
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+			sw.Close ();
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/OpaqueGen.cs b/lib/gio-sharp/generator/OpaqueGen.cs
index 8f7a3c1..ca5bf86 100644
--- a/lib/gio-sharp/generator/OpaqueGen.cs
+++ b/lib/gio-sharp/generator/OpaqueGen.cs
@@ -1,230 +1,230 @@
-// GtkSharp.Generation.OpaqueGen.cs - The Opaque Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class OpaqueGen : HandleBase {
-
-		public OpaqueGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
-	
-		public override string FromNative(string var, bool owned)
-		{
-			return var + " == IntPtr.Zero ? null : (" + QualifiedName + ") GLib.Opaque.GetOpaque (" + var + ", typeof (" + QualifiedName + "), " + (owned ? "true" : "false") + ")";
-		}
-
-		private bool DisableRawCtor {
-			get {
-				return Elem.HasAttribute ("disable_raw_ctor");
-			}
-		}
-
-		public override void Generate (GenerationInfo gen_info)
-		{
-			gen_info.CurrentType = Name;
-
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ("\tusing System.Collections;");
-			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
-			sw.WriteLine ();
-
-			sw.WriteLine ("#region Autogenerated code");
-
-			SymbolTable table = SymbolTable.Table;
-
-			Method ref_, unref, dispose;
-			GetSpecialMethods (out ref_, out unref, out dispose);
-
-			if (IsDeprecated)
-				sw.WriteLine ("\t[Obsolete]");
-			sw.Write ("\t{0} class " + Name, IsInternal ? "internal" : "public");
-			string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));
-			if (cs_parent != "")
-				sw.Write (" : " + cs_parent);
-			else
-				sw.Write (" : GLib.Opaque");
-			sw.WriteLine (" {");
-			sw.WriteLine ();
-            
-			GenFields (gen_info);
-			GenMethods (gen_info, null, null);
-			GenCtors (gen_info);
-
-			if (ref_ != null) {
-				ref_.GenerateImport (sw);
-				sw.WriteLine ("\t\tprotected override void Ref (IntPtr raw)");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tif (!Owned) {");
-				sw.WriteLine ("\t\t\t\t" + ref_.CName + " (raw);");
-				sw.WriteLine ("\t\t\t\tOwned = true;");
-				sw.WriteLine ("\t\t\t}");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-
-				if (ref_.IsDeprecated) {
-					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
-					if (ref_.ReturnType == "void")
-						sw.WriteLine ("\t\tpublic void Ref () {}");
-					else
-						sw.WriteLine ("\t\tpublic " + Name + " Ref () { return this; }");
-					sw.WriteLine ();
-				}
-			}
-
-			bool finalizer_needed = false;
-
-			if (unref != null) {
-				unref.GenerateImport (sw);
-				sw.WriteLine ("\t\tprotected override void Unref (IntPtr raw)");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tif (Owned) {");
-				sw.WriteLine ("\t\t\t\t" + unref.CName + " (raw);");
-				sw.WriteLine ("\t\t\t\tOwned = false;");
-				sw.WriteLine ("\t\t\t}");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-
-				if (unref.IsDeprecated) {
-					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
-					sw.WriteLine ("\t\tpublic void Unref () {}");
-					sw.WriteLine ();
-				}	
-				finalizer_needed = true;
-			}
-
-			if (dispose != null) {
-				dispose.GenerateImport (sw);
-				sw.WriteLine ("\t\tprotected override void Free (IntPtr raw)");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\t" + dispose.CName + " (raw);");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-
-				if (dispose.IsDeprecated) {
-					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now freed automatically\")]");
-					sw.WriteLine ("\t\tpublic void " + dispose.Name + " () {}");
-					sw.WriteLine ();
-				}	
-				finalizer_needed = true;
-			}
-
-			if (finalizer_needed) {
-				sw.WriteLine ("\t\tclass FinalizerInfo {");
-				sw.WriteLine ("\t\t\tIntPtr handle;");
-				sw.WriteLine ();
-				sw.WriteLine ("\t\t\tpublic FinalizerInfo (IntPtr handle)");
-				sw.WriteLine ("\t\t\t{");
-				sw.WriteLine ("\t\t\t\tthis.handle = handle;");
-				sw.WriteLine ("\t\t\t}");
-				sw.WriteLine ();
-				sw.WriteLine ("\t\t\tpublic bool Handler ()");
-				sw.WriteLine ("\t\t\t{");
-				if (dispose != null)
-					sw.WriteLine ("\t\t\t\t{0} (handle);", dispose.CName);
-				else if (unref != null)
-					sw.WriteLine ("\t\t\t\t{0} (handle);", unref.CName);
-				sw.WriteLine ("\t\t\t\treturn false;");
-				sw.WriteLine ("\t\t\t}");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-				sw.WriteLine ("\t\t~{0} ()", Name);
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tif (!Owned)");
-				sw.WriteLine ("\t\t\t\treturn;");
-				sw.WriteLine ("\t\t\tFinalizerInfo info = new FinalizerInfo (Handle);");
-				sw.WriteLine ("\t\t\tGLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler));");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-			}
-
-#if false
-			Method copy = Methods ["Copy"] as Method;
-			if (copy != null && copy.Parameters.Count == 0) {
-				sw.WriteLine ("\t\tprotected override GLib.Opaque Copy (IntPtr raw)");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tGLib.Opaque result = new " + QualifiedName + " (" + copy.CName + " (raw));");
-				sw.WriteLine ("\t\t\tresult.Owned = true;");
-				sw.WriteLine ("\t\t\treturn result;");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-			}
-#endif
-			sw.WriteLine ("#endregion");
-			
-			AppendCustom(sw, gen_info.CustomDir);
-
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-
-			sw.Close ();
-			gen_info.Writer = null;
-			Statistics.OpaqueCount++;
-		}
-
-		void GetSpecialMethods (out Method ref_, out Method unref, out Method dispose)
-		{
-			ref_ = CheckSpecialMethod (GetMethod ("Ref"));
-			unref = CheckSpecialMethod (GetMethod ("Unref"));
-
-			dispose = GetMethod ("Free");
-			if (dispose == null) {
-				dispose = GetMethod ("Destroy");
-				if (dispose == null)
-					dispose = GetMethod ("Dispose");
-			}
-			dispose = CheckSpecialMethod (dispose);
-		}
-
-		Method CheckSpecialMethod (Method method)
-		{
-			if (method == null)
-				return null;
-			if (method.ReturnType != "void" &&
-			    method.ReturnType != QualifiedName)
-				return null;
-			if (method.Signature.ToString () != "")
-				return null;
-
-			methods.Remove (method.Name);
-			return method;
-		}
-
-		protected override void GenCtors (GenerationInfo gen_info)
-		{
-			if (!DisableRawCtor) {
-				gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}");
-				gen_info.Writer.WriteLine();
-			}
-
-			base.GenCtors (gen_info);
-		}
-
-	}
-}
-
+// GtkSharp.Generation.OpaqueGen.cs - The Opaque Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class OpaqueGen : HandleBase {
+
+		public OpaqueGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+	
+		public override string FromNative(string var, bool owned)
+		{
+			return var + " == IntPtr.Zero ? null : (" + QualifiedName + ") GLib.Opaque.GetOpaque (" + var + ", typeof (" + QualifiedName + "), " + (owned ? "true" : "false") + ")";
+		}
+
+		private bool DisableRawCtor {
+			get {
+				return Elem.HasAttribute ("disable_raw_ctor");
+			}
+		}
+
+		public override void Generate (GenerationInfo gen_info)
+		{
+			gen_info.CurrentType = Name;
+
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Collections;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+			sw.WriteLine ();
+
+			sw.WriteLine ("#region Autogenerated code");
+
+			SymbolTable table = SymbolTable.Table;
+
+			Method ref_, unref, dispose;
+			GetSpecialMethods (out ref_, out unref, out dispose);
+
+			if (IsDeprecated)
+				sw.WriteLine ("\t[Obsolete]");
+			sw.Write ("\t{0} class " + Name, IsInternal ? "internal" : "public");
+			string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));
+			if (cs_parent != "")
+				sw.Write (" : " + cs_parent);
+			else
+				sw.Write (" : GLib.Opaque");
+			sw.WriteLine (" {");
+			sw.WriteLine ();
+            
+			GenFields (gen_info);
+			GenMethods (gen_info, null, null);
+			GenCtors (gen_info);
+
+			if (ref_ != null) {
+				ref_.GenerateImport (sw);
+				sw.WriteLine ("\t\tprotected override void Ref (IntPtr raw)");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tif (!Owned) {");
+				sw.WriteLine ("\t\t\t\t" + ref_.CName + " (raw);");
+				sw.WriteLine ("\t\t\t\tOwned = true;");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+
+				if (ref_.IsDeprecated) {
+					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
+					if (ref_.ReturnType == "void")
+						sw.WriteLine ("\t\tpublic void Ref () {}");
+					else
+						sw.WriteLine ("\t\tpublic " + Name + " Ref () { return this; }");
+					sw.WriteLine ();
+				}
+			}
+
+			bool finalizer_needed = false;
+
+			if (unref != null) {
+				unref.GenerateImport (sw);
+				sw.WriteLine ("\t\tprotected override void Unref (IntPtr raw)");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tif (Owned) {");
+				sw.WriteLine ("\t\t\t\t" + unref.CName + " (raw);");
+				sw.WriteLine ("\t\t\t\tOwned = false;");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+
+				if (unref.IsDeprecated) {
+					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
+					sw.WriteLine ("\t\tpublic void Unref () {}");
+					sw.WriteLine ();
+				}	
+				finalizer_needed = true;
+			}
+
+			if (dispose != null) {
+				dispose.GenerateImport (sw);
+				sw.WriteLine ("\t\tprotected override void Free (IntPtr raw)");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\t" + dispose.CName + " (raw);");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+
+				if (dispose.IsDeprecated) {
+					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now freed automatically\")]");
+					sw.WriteLine ("\t\tpublic void " + dispose.Name + " () {}");
+					sw.WriteLine ();
+				}	
+				finalizer_needed = true;
+			}
+
+			if (finalizer_needed) {
+				sw.WriteLine ("\t\tclass FinalizerInfo {");
+				sw.WriteLine ("\t\t\tIntPtr handle;");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\t\tpublic FinalizerInfo (IntPtr handle)");
+				sw.WriteLine ("\t\t\t{");
+				sw.WriteLine ("\t\t\t\tthis.handle = handle;");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\t\tpublic bool Handler ()");
+				sw.WriteLine ("\t\t\t{");
+				if (dispose != null)
+					sw.WriteLine ("\t\t\t\t{0} (handle);", dispose.CName);
+				else if (unref != null)
+					sw.WriteLine ("\t\t\t\t{0} (handle);", unref.CName);
+				sw.WriteLine ("\t\t\t\treturn false;");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\t~{0} ()", Name);
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tif (!Owned)");
+				sw.WriteLine ("\t\t\t\treturn;");
+				sw.WriteLine ("\t\t\tFinalizerInfo info = new FinalizerInfo (Handle);");
+				sw.WriteLine ("\t\t\tGLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler));");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+			}
+
+#if false
+			Method copy = Methods ["Copy"] as Method;
+			if (copy != null && copy.Parameters.Count == 0) {
+				sw.WriteLine ("\t\tprotected override GLib.Opaque Copy (IntPtr raw)");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tGLib.Opaque result = new " + QualifiedName + " (" + copy.CName + " (raw));");
+				sw.WriteLine ("\t\t\tresult.Owned = true;");
+				sw.WriteLine ("\t\t\treturn result;");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+			}
+#endif
+			sw.WriteLine ("#endregion");
+			
+			AppendCustom(sw, gen_info.CustomDir);
+
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+
+			sw.Close ();
+			gen_info.Writer = null;
+			Statistics.OpaqueCount++;
+		}
+
+		void GetSpecialMethods (out Method ref_, out Method unref, out Method dispose)
+		{
+			ref_ = CheckSpecialMethod (GetMethod ("Ref"));
+			unref = CheckSpecialMethod (GetMethod ("Unref"));
+
+			dispose = GetMethod ("Free");
+			if (dispose == null) {
+				dispose = GetMethod ("Destroy");
+				if (dispose == null)
+					dispose = GetMethod ("Dispose");
+			}
+			dispose = CheckSpecialMethod (dispose);
+		}
+
+		Method CheckSpecialMethod (Method method)
+		{
+			if (method == null)
+				return null;
+			if (method.ReturnType != "void" &&
+			    method.ReturnType != QualifiedName)
+				return null;
+			if (method.Signature.ToString () != "")
+				return null;
+
+			methods.Remove (method.Name);
+			return method;
+		}
+
+		protected override void GenCtors (GenerationInfo gen_info)
+		{
+			if (!DisableRawCtor) {
+				gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}");
+				gen_info.Writer.WriteLine();
+			}
+
+			base.GenCtors (gen_info);
+		}
+
+	}
+}
+
diff --git a/lib/gio-sharp/generator/Parameters.cs b/lib/gio-sharp/generator/Parameters.cs
index c399c6e..75dd68f 100644
--- a/lib/gio-sharp/generator/Parameters.cs
+++ b/lib/gio-sharp/generator/Parameters.cs
@@ -1,728 +1,728 @@
-// GtkSharp.Generation.Parameters.cs - The Parameters Generation Class.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Parameter {
-
-		private XmlElement elem;
-
-		public Parameter (XmlElement e)
-		{
-			elem = e;
-		}
-
-		string call_name;
-		public string CallName {
-			get {
-				if (call_name == null)
-					return Name;
-				else
-					return call_name;
-			}
-			set {
-				call_name = value;
-			}
-		}
-
-		public string CType {
-			get {
-				string type = elem.GetAttribute("type");
-				if (type == "void*")
-					type = "gpointer";
-				return type;
-			}
-		}
-
-		public string CSType {
-			get {
-				string cstype = SymbolTable.Table.GetCSType( elem.GetAttribute("type"));
-				if (cstype == "void")
-					cstype = "System.IntPtr";
-				if (IsArray) {
-					if (IsParams)
-						cstype = "params " + cstype;
-					cstype += "[]";
-					cstype = cstype.Replace ("ref ", "");
-				}
-				return cstype;
-			}
-		}
-
-		public IGeneratable Generatable {
-			get {
-				return SymbolTable.Table[CType];
-			}
-		}
-
-		public bool IsArray {
-			get {
-				return elem.HasAttribute("array") || elem.HasAttribute("null_term_array");
-			}
-		}
-
-		public bool IsEllipsis {
-			get {
-				return elem.HasAttribute("ellipsis");
-			}
-		}
-
-		public bool IsCount {
-			get {
-				
-				if (Name.StartsWith("n_"))
-					switch (CSType) {
-					case "int":
-					case "uint":
-					case "long":
-					case "ulong":
-					case "short":
-					case "ushort": 
-						return true;
-					default:
-						return false;
-					}
-				else
-					return false;
-			}
-		}
-
-		public bool IsDestroyNotify {
-			get {
-				return CType == "GDestroyNotify";
-			}
-		}
-
-		public bool IsLength {
-			get {
-				
-				if (Name.EndsWith("len") || Name.EndsWith("length"))
-					switch (CSType) {
-					case "int":
-					case "uint":
-					case "long":
-					case "ulong":
-					case "short":
-					case "ushort": 
-						return true;
-					default:
-						return false;
-					}
-				else
-					return false;
-			}
-		}
-
-		public bool IsParams {
-			get {
-				return elem.HasAttribute("params");
-			}
-		}
-
-		public bool IsString {
-			get {
-				return (CSType == "string");
-			}
-		}
-
-		public bool IsUserData {
-			get {
-				return CSType == "IntPtr" && (Name.EndsWith ("data") || Name.EndsWith ("data_or_owner"));
-			}
-		}
-
-		public virtual string MarshalType {
-			get {
-				string type = SymbolTable.Table.GetMarshalType( elem.GetAttribute("type"));
-				if (type == "void" || Generatable is IManualMarshaler)
-					type = "IntPtr";
-				if (IsArray) {
-					type += "[]";
-					type = type.Replace ("ref ", "");
-				}
-				return type;
-			}
-		}
-
-		public string Name {
-			get {
-				return SymbolTable.Table.MangleName (elem.GetAttribute("name"));
-			}
-		}
-
-		public bool Owned {
-			get {
-				return elem.GetAttribute ("owned") == "true";
-			}
-		}
-
-		public virtual string NativeSignature {
-			get {
-				string sig = MarshalType + " " + Name;
-				if (PassAs != String.Empty)
-					sig = PassAs + " " + sig;
-				return sig;
-			}
-		}
-
-		public string PropertyName {
-			get {
-				return elem.GetAttribute("property_name");
-			}
-		}
-
-		string pass_as;
-
-		public string PassAs {
-			get {
-				if (pass_as != null)
-					return pass_as;
-
-				if (elem.HasAttribute ("pass_as"))
-					return elem.GetAttribute ("pass_as");
-
-				if (IsArray || CSType.EndsWith ("IntPtr"))
-					return "";
-
-				if (CType.EndsWith ("*") && (Generatable is SimpleGen || Generatable is EnumGen))
-					return "out";
-
-				return "";
-			}
-			set {
-				pass_as = value;
-			}
-		}
-
-		string scope;
-		public string Scope {
-			get {
-				if (scope == null)
-					scope = elem.GetAttribute ("scope");
-				return scope;
-			}
-			set {
-				scope = value;
-			}
-		}
-
-		public virtual string[] Prepare {
-			get {
-				IGeneratable gen = Generatable;
-				if (gen is IManualMarshaler) {
-					string result = "IntPtr native_" + CallName;
-					if (PassAs != "out")
-						result += " = " + (gen as IManualMarshaler).AllocNative (CallName);
-					return new string [] { result + ";" }; 
-				} else if (PassAs == "out" && CSType != MarshalType)
-					return new string [] { gen.MarshalType + " native_" + CallName + ";" };
-
-				return new string [0];
-			}
-		}
-
-		public virtual string CallString {
-			get {
-				string call_parm;
-
-				IGeneratable gen = Generatable;
-				if (gen is CallbackGen)
-					return SymbolTable.Table.CallByName (CType, CallName + "_wrapper");
-				else if (PassAs != String.Empty) {
-					call_parm = PassAs + " ";
-					if (CSType != MarshalType)
-						call_parm += "native_";
-					call_parm += CallName;
-				} else if (gen is IManualMarshaler)
-					call_parm = "native_" + CallName;
-				else
-					call_parm = SymbolTable.Table.CallByName(CType, CallName);
-			
-				return call_parm;
-			}
-		}
-
-		public virtual string[] Finish {
-			get {
-				IGeneratable gen = Generatable;
-				if (gen is IManualMarshaler) {
-					string[] result = new string [PassAs == "ref" ? 2 : 1];
-					int i = 0;
-					if (PassAs != String.Empty)
-						result [i++] = CallName + " = " + Generatable.FromNative ("native_" + CallName) + ";";
-					if (PassAs != "out")
-						result [i] = (gen as IManualMarshaler).ReleaseNative ("native_" + CallName) + ";";
-					return result;
-				} else if (PassAs != String.Empty && MarshalType != CSType)
-					return new string [] { CallName + " = " + gen.FromNative ("native_" + CallName) + ";" };
-				return new string [0];
-			}
-		}
-
-		public string FromNative (string var)
-		{
-			if (Generatable == null)
-				return String.Empty;
-			else if (Generatable is HandleBase)
-				return ((HandleBase)Generatable).FromNative (var, Owned);
-			else
-				return Generatable.FromNative (var);
-		}
-
-		public string StudlyName {
-			get {
-				string name = elem.GetAttribute("name");
-				string[] segs = name.Split('_');
-				string studly = "";
-				foreach (string s in segs) {
-					if (s.Trim () == "")
-						continue;
-					studly += (s.Substring(0,1).ToUpper() + s.Substring(1));
-				}
-				return studly;
-				
-			}
-		}
-	}
-
-	public class ArrayParameter : Parameter {
-
-		bool null_terminated;
-
-		public ArrayParameter (XmlElement elem) : base (elem) 
-		{
-			null_terminated = elem.HasAttribute ("null_term_array");
-		}
-
-		public override string MarshalType {
-			get {
-				if (Generatable is StructBase)
-					return CSType;
-				else
-					return base.MarshalType;
-			}
-		}
-
-		bool NullTerminated {
-			get {
-				return null_terminated;
-			}
-		}
-
-		public override string[] Prepare {
-			get {
-				if (CSType == MarshalType)
-					return new string [0];
-
-				ArrayList result = new ArrayList ();
-				result.Add (String.Format ("int cnt_{0} = {0} == null ? 0 : {0}.Length;", CallName));
-				result.Add (String.Format ("{0}[] native_{1} = new {0} [cnt_{1}" + (NullTerminated ? " + 1" : "") + "];", MarshalType.TrimEnd('[', ']'), CallName));
-				result.Add (String.Format ("for (int i = 0; i < cnt_{0}; i++)", CallName));
-				IGeneratable gen = Generatable;
-				if (gen is IManualMarshaler)
-					result.Add (String.Format ("\tnative_{0} [i] = {1};", CallName, (gen as IManualMarshaler).AllocNative (CallName + "[i]")));
-				else
-					result.Add (String.Format ("\tnative_{0} [i] = {1};", CallName, gen.CallByName (CallName + "[i]")));
-
-				if (NullTerminated)
-					result.Add (String.Format ("native_{0} [cnt_{0}] = IntPtr.Zero;", CallName));
-				return (string[]) result.ToArray (typeof (string));
-			}
-		}
-
-		public override string CallString {
-			get {
-				if (CSType != MarshalType)
-					return "native_" + CallName;
-				else
-					return CallName;
-			}
-		}
-
-		public override string[] Finish {
-			get {
-				if (CSType == MarshalType)
-					return new string [0];
-
-				IGeneratable gen = Generatable;
-				if (gen is IManualMarshaler) {
-					string [] result = new string [4];
-					result [0] = "for (int i = 0; i < native_" + CallName + ".Length" + (NullTerminated ? " - 1" : "") + "; i++) {";
-					result [1] = "\t" + CallName + " [i] = " + Generatable.FromNative ("native_" + CallName + "[i]") + ";";
-					result [2] = "\t" + (gen as IManualMarshaler).ReleaseNative ("native_" + CallName + "[i]") + ";";
-					result [3] = "}";
-					return result;
-				}
-
-				return new string [0];
-			}
-		}
-	}
-
-	public class ArrayCountPair : ArrayParameter {
-
-		XmlElement count_elem;
-		bool invert;
-
-		public ArrayCountPair (XmlElement array_elem, XmlElement count_elem, bool invert) : base (array_elem)
-		{
-			this.count_elem = count_elem;
-			this.invert = invert;
-		}
-
-		string CountNativeType {
-			get {
-				return SymbolTable.Table.GetMarshalType(count_elem.GetAttribute("type"));
-			}
-		}
-
-		string CountType {
-			get {
-				return SymbolTable.Table.GetCSType(count_elem.GetAttribute("type"));
-			}
-		}
-
-		string CountCast {
-			get {
-				if (CountType == "int")
-					return String.Empty;
-				else
-					return "(" + CountType + ") ";
-			}
-		}
-
-		string CountName {
-			get {
-				return SymbolTable.Table.MangleName (count_elem.GetAttribute("name"));
-			}
-		}
-
-		string CallCount (string name)
-		{
-			string result = CountCast + "(" + name + " == null ? 0 : " + name + ".Length)";
-			IGeneratable gen = SymbolTable.Table[count_elem.GetAttribute("type")];
-			return gen.CallByName (result);
-		}
-
-		public override string CallString {
-			get {
-				if (invert)
-					return CallCount (CallName) + ", " + base.CallString;
-				else
-					return base.CallString + ", " + CallCount (CallName);
-			}
-		}
-
-		public override string NativeSignature {
-			get {
-				if (invert)
-					return CountNativeType + " " + CountName + ", " + MarshalType + " " + Name;
-				else
-					return MarshalType + " " + Name + ", " + CountNativeType + " " + CountName;
-			}
-		}
-	}
-
-	public class ErrorParameter : Parameter {
-
-		public ErrorParameter (XmlElement elem) : base (elem) 
-		{
-			PassAs = "out";
-		}
-
-		public override string CallString {
-			get {
-				return "out error";
-			}
-		}
-	}
-
-	public class StructParameter : Parameter {
-
-		public StructParameter (XmlElement elem) : base (elem) {}
-
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-
-		public override string[] Prepare {
-			get {
-				if (PassAs == "out")
-					return new string [] { "IntPtr native_" + CallName + " = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + Generatable.QualifiedName + ")));"};
-				else
-					return new string [] { "IntPtr native_" + CallName + " = " + (Generatable as IManualMarshaler).AllocNative (CallName) + ";"};
-			}
-		}
-
-		public override string CallString {
-			get {
-				return "native_" + CallName;
-			}
-		}
-
-		public override string[] Finish {
-			get {
-				string[] result = new string [2];
-				result [0] = CallName + " = " + FromNative ("native_" + CallName) + ";";
-				result [1] = (Generatable as IManualMarshaler).ReleaseNative ("native_" + CallName) + ";";
-				return result;
-			}
-		}
-
-		public override string NativeSignature {
-			get {
-				return "IntPtr " + CallName;
-			}
-		}
-	}
-
-	public class Parameters : IEnumerable {
-		
-		ArrayList param_list = new ArrayList ();
-		XmlElement elem;
-
-		public Parameters (XmlElement elem) 
-		{
-			if (elem == null)
-				valid = true;
-			this.elem = elem;
-		}
-
-		public int Count {
-			get {
-				return param_list.Count;
-			}
-		}
-
-		public int VisibleCount {
-			get {
-				int visible = 0;
-				foreach (Parameter p in this) {
-					if (!IsHidden (p))
-						visible++;
-				}
-				return visible;
-			}
-		}
-
-		public Parameter this [int idx] {
-			get {
-				return param_list [idx] as Parameter;
-			}
-		}
-
-		public bool IsHidden (Parameter p)
-		{
-			int idx = param_list.IndexOf (p);
-
-			if (idx > 0 && p.IsLength && p.PassAs == String.Empty && this [idx - 1].IsString)
-				return true;
-
-			if (p.IsCount && ((idx > 0 && this [idx - 1].IsArray) ||
-					  (idx < Count - 1 && this [idx + 1].IsArray)))
-				return true;
-
-			if (p.CType == "GError**")
-				return true;
-
-			if (HasCB || HideData) {
-				if (p.IsUserData && (idx == Count - 1))
-                                        return true;
-				if (p.IsUserData && (idx == Count - 2) && this [Count - 1] is ErrorParameter)
-                                        return true;
-				if (p.IsUserData && idx > 0 &&
-				    this [idx - 1].Generatable is CallbackGen)
-					return true;
-				if (p.IsDestroyNotify && (idx == Count - 1) &&
-				    this [idx - 1].IsUserData)
-					return true;
-			}
-
-			return false;
-		}
-
-		bool has_cb;
-		public bool HasCB {
-			get { return has_cb; }
-			set { has_cb = value; }
-		}
-
-		public bool HasOutParam {
-			get {
-				foreach (Parameter p in this)
-					if (p.PassAs == "out")
-						return true;
-				return false;
-			}
-		}
-
-		bool hide_data;
-		public bool HideData {
-			get { return hide_data; }
-			set { hide_data = value; }
-		}
-
-		bool is_static;
-		public bool Static {
-			get { return is_static; }
-			set { is_static = value; }
-		}
-
-		void Clear ()
-		{
-			elem = null;
-			param_list.Clear ();
-			param_list = null;
-		}
-
-		public IEnumerator GetEnumerator ()
-		{
-			return param_list.GetEnumerator ();
-		}
-
-		bool valid = false;
-
-		public bool Validate ()
-		{
-			if (valid)
-				return true;
-
-			if (elem == null)
-				return false;
-
-			for (int i = 0; i < elem.ChildNodes.Count; i++) {
-				XmlElement parm = elem.ChildNodes [i] as XmlElement;
-				if (parm == null || parm.Name != "parameter")
-					continue;
-				Parameter p = new Parameter (parm);
-				
-				if (p.IsEllipsis) {
-					Console.Write("Ellipsis parameter ");
-					Clear ();
-					return false;
-				}
-
-				if ((p.CSType == "") || (p.Name == "") || 
-				    (p.MarshalType == "") || (SymbolTable.Table.CallByName(p.CType, p.Name) == "")) {
-					Console.Write("Name: " + p.Name + " Type: " + p.CType + " ");
-					Clear ();
-					return false;
-				}
-
-				IGeneratable gen = p.Generatable;
-
-				if (p.IsArray) {
-					p = new ArrayParameter (parm);
-					if (i < elem.ChildNodes.Count - 1) {
-						XmlElement next = elem.ChildNodes [i + 1] as XmlElement;
-						if (next != null || next.Name == "parameter") {
-							Parameter c = new Parameter (next);
-							if (c.IsCount) {
-								p = new ArrayCountPair (parm, next, false);
-								i++;
-							} 
-						}
-					}
-				} else if (p.IsCount && i < elem.ChildNodes.Count - 1) {
-					XmlElement next = elem.ChildNodes [i + 1] as XmlElement;
-					if (next != null || next.Name == "parameter") {
-						Parameter a = new Parameter (next);
-						if (a.IsArray) {
-							p = new ArrayCountPair (next, parm, true);
-							i++;
-						}
-					}
-				} else if (p.CType == "GError**")
-					p = new ErrorParameter (parm);
-				else if (gen is StructBase || gen is ByRefGen) {
-					p = new StructParameter (parm);
-				} else if (gen is CallbackGen) {
-					has_cb = true;
-				}
-				param_list.Add (p);
-			}
-			
-			if (has_cb && Count > 2 && this [Count - 3].Generatable is CallbackGen && this [Count - 2].IsUserData && this [Count - 1].IsDestroyNotify)
-				this [Count - 3].Scope = "notified";
-
-			valid = true;
-			return true;
-		}
-
-		public bool IsAccessor {
-			get {
-				return VisibleCount == 1 && AccessorParam.PassAs == "out";
-			}
-		}
-
-		public Parameter AccessorParam {
-			get {
-				foreach (Parameter p in this) {
-					if (!IsHidden (p))
-						return p;
-				}
-				return null;
-			}
-		}
-
-		public string AccessorReturnType {
-			get {
-				Parameter p = AccessorParam;
-				if (p != null)
-					return p.CSType;
-				else
-					return null;
-			}
-		}
-
-		public string AccessorName {
-			get {
-				Parameter p = AccessorParam;
-				if (p != null)
-					return p.Name;
-				else
-					return null;
-			}
-		}
-
-		public string ImportSignature {
-			get {
-				if (Count == 0)
-					return String.Empty;
-
-				string[] result = new string [Count];
-				for (int i = 0; i < Count; i++)
-					result [i] = this [i].NativeSignature;
-
-				return String.Join (", ", result);
-			}
-		}
-	}
-}
-
+// GtkSharp.Generation.Parameters.cs - The Parameters Generation Class.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Parameter {
+
+		private XmlElement elem;
+
+		public Parameter (XmlElement e)
+		{
+			elem = e;
+		}
+
+		string call_name;
+		public string CallName {
+			get {
+				if (call_name == null)
+					return Name;
+				else
+					return call_name;
+			}
+			set {
+				call_name = value;
+			}
+		}
+
+		public string CType {
+			get {
+				string type = elem.GetAttribute("type");
+				if (type == "void*")
+					type = "gpointer";
+				return type;
+			}
+		}
+
+		public string CSType {
+			get {
+				string cstype = SymbolTable.Table.GetCSType( elem.GetAttribute("type"));
+				if (cstype == "void")
+					cstype = "System.IntPtr";
+				if (IsArray) {
+					if (IsParams)
+						cstype = "params " + cstype;
+					cstype += "[]";
+					cstype = cstype.Replace ("ref ", "");
+				}
+				return cstype;
+			}
+		}
+
+		public IGeneratable Generatable {
+			get {
+				return SymbolTable.Table[CType];
+			}
+		}
+
+		public bool IsArray {
+			get {
+				return elem.HasAttribute("array") || elem.HasAttribute("null_term_array");
+			}
+		}
+
+		public bool IsEllipsis {
+			get {
+				return elem.HasAttribute("ellipsis");
+			}
+		}
+
+		public bool IsCount {
+			get {
+				
+				if (Name.StartsWith("n_"))
+					switch (CSType) {
+					case "int":
+					case "uint":
+					case "long":
+					case "ulong":
+					case "short":
+					case "ushort": 
+						return true;
+					default:
+						return false;
+					}
+				else
+					return false;
+			}
+		}
+
+		public bool IsDestroyNotify {
+			get {
+				return CType == "GDestroyNotify";
+			}
+		}
+
+		public bool IsLength {
+			get {
+				
+				if (Name.EndsWith("len") || Name.EndsWith("length"))
+					switch (CSType) {
+					case "int":
+					case "uint":
+					case "long":
+					case "ulong":
+					case "short":
+					case "ushort": 
+						return true;
+					default:
+						return false;
+					}
+				else
+					return false;
+			}
+		}
+
+		public bool IsParams {
+			get {
+				return elem.HasAttribute("params");
+			}
+		}
+
+		public bool IsString {
+			get {
+				return (CSType == "string");
+			}
+		}
+
+		public bool IsUserData {
+			get {
+				return CSType == "IntPtr" && (Name.EndsWith ("data") || Name.EndsWith ("data_or_owner"));
+			}
+		}
+
+		public virtual string MarshalType {
+			get {
+				string type = SymbolTable.Table.GetMarshalType( elem.GetAttribute("type"));
+				if (type == "void" || Generatable is IManualMarshaler)
+					type = "IntPtr";
+				if (IsArray) {
+					type += "[]";
+					type = type.Replace ("ref ", "");
+				}
+				return type;
+			}
+		}
+
+		public string Name {
+			get {
+				return SymbolTable.Table.MangleName (elem.GetAttribute("name"));
+			}
+		}
+
+		public bool Owned {
+			get {
+				return elem.GetAttribute ("owned") == "true";
+			}
+		}
+
+		public virtual string NativeSignature {
+			get {
+				string sig = MarshalType + " " + Name;
+				if (PassAs != String.Empty)
+					sig = PassAs + " " + sig;
+				return sig;
+			}
+		}
+
+		public string PropertyName {
+			get {
+				return elem.GetAttribute("property_name");
+			}
+		}
+
+		string pass_as;
+
+		public string PassAs {
+			get {
+				if (pass_as != null)
+					return pass_as;
+
+				if (elem.HasAttribute ("pass_as"))
+					return elem.GetAttribute ("pass_as");
+
+				if (IsArray || CSType.EndsWith ("IntPtr"))
+					return "";
+
+				if (CType.EndsWith ("*") && (Generatable is SimpleGen || Generatable is EnumGen))
+					return "out";
+
+				return "";
+			}
+			set {
+				pass_as = value;
+			}
+		}
+
+		string scope;
+		public string Scope {
+			get {
+				if (scope == null)
+					scope = elem.GetAttribute ("scope");
+				return scope;
+			}
+			set {
+				scope = value;
+			}
+		}
+
+		public virtual string[] Prepare {
+			get {
+				IGeneratable gen = Generatable;
+				if (gen is IManualMarshaler) {
+					string result = "IntPtr native_" + CallName;
+					if (PassAs != "out")
+						result += " = " + (gen as IManualMarshaler).AllocNative (CallName);
+					return new string [] { result + ";" }; 
+				} else if (PassAs == "out" && CSType != MarshalType)
+					return new string [] { gen.MarshalType + " native_" + CallName + ";" };
+
+				return new string [0];
+			}
+		}
+
+		public virtual string CallString {
+			get {
+				string call_parm;
+
+				IGeneratable gen = Generatable;
+				if (gen is CallbackGen)
+					return SymbolTable.Table.CallByName (CType, CallName + "_wrapper");
+				else if (PassAs != String.Empty) {
+					call_parm = PassAs + " ";
+					if (CSType != MarshalType)
+						call_parm += "native_";
+					call_parm += CallName;
+				} else if (gen is IManualMarshaler)
+					call_parm = "native_" + CallName;
+				else
+					call_parm = SymbolTable.Table.CallByName(CType, CallName);
+			
+				return call_parm;
+			}
+		}
+
+		public virtual string[] Finish {
+			get {
+				IGeneratable gen = Generatable;
+				if (gen is IManualMarshaler) {
+					string[] result = new string [PassAs == "ref" ? 2 : 1];
+					int i = 0;
+					if (PassAs != String.Empty)
+						result [i++] = CallName + " = " + Generatable.FromNative ("native_" + CallName) + ";";
+					if (PassAs != "out")
+						result [i] = (gen as IManualMarshaler).ReleaseNative ("native_" + CallName) + ";";
+					return result;
+				} else if (PassAs != String.Empty && MarshalType != CSType)
+					return new string [] { CallName + " = " + gen.FromNative ("native_" + CallName) + ";" };
+				return new string [0];
+			}
+		}
+
+		public string FromNative (string var)
+		{
+			if (Generatable == null)
+				return String.Empty;
+			else if (Generatable is HandleBase)
+				return ((HandleBase)Generatable).FromNative (var, Owned);
+			else
+				return Generatable.FromNative (var);
+		}
+
+		public string StudlyName {
+			get {
+				string name = elem.GetAttribute("name");
+				string[] segs = name.Split('_');
+				string studly = "";
+				foreach (string s in segs) {
+					if (s.Trim () == "")
+						continue;
+					studly += (s.Substring(0,1).ToUpper() + s.Substring(1));
+				}
+				return studly;
+				
+			}
+		}
+	}
+
+	public class ArrayParameter : Parameter {
+
+		bool null_terminated;
+
+		public ArrayParameter (XmlElement elem) : base (elem) 
+		{
+			null_terminated = elem.HasAttribute ("null_term_array");
+		}
+
+		public override string MarshalType {
+			get {
+				if (Generatable is StructBase)
+					return CSType;
+				else
+					return base.MarshalType;
+			}
+		}
+
+		bool NullTerminated {
+			get {
+				return null_terminated;
+			}
+		}
+
+		public override string[] Prepare {
+			get {
+				if (CSType == MarshalType)
+					return new string [0];
+
+				ArrayList result = new ArrayList ();
+				result.Add (String.Format ("int cnt_{0} = {0} == null ? 0 : {0}.Length;", CallName));
+				result.Add (String.Format ("{0}[] native_{1} = new {0} [cnt_{1}" + (NullTerminated ? " + 1" : "") + "];", MarshalType.TrimEnd('[', ']'), CallName));
+				result.Add (String.Format ("for (int i = 0; i < cnt_{0}; i++)", CallName));
+				IGeneratable gen = Generatable;
+				if (gen is IManualMarshaler)
+					result.Add (String.Format ("\tnative_{0} [i] = {1};", CallName, (gen as IManualMarshaler).AllocNative (CallName + "[i]")));
+				else
+					result.Add (String.Format ("\tnative_{0} [i] = {1};", CallName, gen.CallByName (CallName + "[i]")));
+
+				if (NullTerminated)
+					result.Add (String.Format ("native_{0} [cnt_{0}] = IntPtr.Zero;", CallName));
+				return (string[]) result.ToArray (typeof (string));
+			}
+		}
+
+		public override string CallString {
+			get {
+				if (CSType != MarshalType)
+					return "native_" + CallName;
+				else
+					return CallName;
+			}
+		}
+
+		public override string[] Finish {
+			get {
+				if (CSType == MarshalType)
+					return new string [0];
+
+				IGeneratable gen = Generatable;
+				if (gen is IManualMarshaler) {
+					string [] result = new string [4];
+					result [0] = "for (int i = 0; i < native_" + CallName + ".Length" + (NullTerminated ? " - 1" : "") + "; i++) {";
+					result [1] = "\t" + CallName + " [i] = " + Generatable.FromNative ("native_" + CallName + "[i]") + ";";
+					result [2] = "\t" + (gen as IManualMarshaler).ReleaseNative ("native_" + CallName + "[i]") + ";";
+					result [3] = "}";
+					return result;
+				}
+
+				return new string [0];
+			}
+		}
+	}
+
+	public class ArrayCountPair : ArrayParameter {
+
+		XmlElement count_elem;
+		bool invert;
+
+		public ArrayCountPair (XmlElement array_elem, XmlElement count_elem, bool invert) : base (array_elem)
+		{
+			this.count_elem = count_elem;
+			this.invert = invert;
+		}
+
+		string CountNativeType {
+			get {
+				return SymbolTable.Table.GetMarshalType(count_elem.GetAttribute("type"));
+			}
+		}
+
+		string CountType {
+			get {
+				return SymbolTable.Table.GetCSType(count_elem.GetAttribute("type"));
+			}
+		}
+
+		string CountCast {
+			get {
+				if (CountType == "int")
+					return String.Empty;
+				else
+					return "(" + CountType + ") ";
+			}
+		}
+
+		string CountName {
+			get {
+				return SymbolTable.Table.MangleName (count_elem.GetAttribute("name"));
+			}
+		}
+
+		string CallCount (string name)
+		{
+			string result = CountCast + "(" + name + " == null ? 0 : " + name + ".Length)";
+			IGeneratable gen = SymbolTable.Table[count_elem.GetAttribute("type")];
+			return gen.CallByName (result);
+		}
+
+		public override string CallString {
+			get {
+				if (invert)
+					return CallCount (CallName) + ", " + base.CallString;
+				else
+					return base.CallString + ", " + CallCount (CallName);
+			}
+		}
+
+		public override string NativeSignature {
+			get {
+				if (invert)
+					return CountNativeType + " " + CountName + ", " + MarshalType + " " + Name;
+				else
+					return MarshalType + " " + Name + ", " + CountNativeType + " " + CountName;
+			}
+		}
+	}
+
+	public class ErrorParameter : Parameter {
+
+		public ErrorParameter (XmlElement elem) : base (elem) 
+		{
+			PassAs = "out";
+		}
+
+		public override string CallString {
+			get {
+				return "out error";
+			}
+		}
+	}
+
+	public class StructParameter : Parameter {
+
+		public StructParameter (XmlElement elem) : base (elem) {}
+
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+
+		public override string[] Prepare {
+			get {
+				if (PassAs == "out")
+					return new string [] { "IntPtr native_" + CallName + " = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + Generatable.QualifiedName + ")));"};
+				else
+					return new string [] { "IntPtr native_" + CallName + " = " + (Generatable as IManualMarshaler).AllocNative (CallName) + ";"};
+			}
+		}
+
+		public override string CallString {
+			get {
+				return "native_" + CallName;
+			}
+		}
+
+		public override string[] Finish {
+			get {
+				string[] result = new string [2];
+				result [0] = CallName + " = " + FromNative ("native_" + CallName) + ";";
+				result [1] = (Generatable as IManualMarshaler).ReleaseNative ("native_" + CallName) + ";";
+				return result;
+			}
+		}
+
+		public override string NativeSignature {
+			get {
+				return "IntPtr " + CallName;
+			}
+		}
+	}
+
+	public class Parameters : IEnumerable {
+		
+		ArrayList param_list = new ArrayList ();
+		XmlElement elem;
+
+		public Parameters (XmlElement elem) 
+		{
+			if (elem == null)
+				valid = true;
+			this.elem = elem;
+		}
+
+		public int Count {
+			get {
+				return param_list.Count;
+			}
+		}
+
+		public int VisibleCount {
+			get {
+				int visible = 0;
+				foreach (Parameter p in this) {
+					if (!IsHidden (p))
+						visible++;
+				}
+				return visible;
+			}
+		}
+
+		public Parameter this [int idx] {
+			get {
+				return param_list [idx] as Parameter;
+			}
+		}
+
+		public bool IsHidden (Parameter p)
+		{
+			int idx = param_list.IndexOf (p);
+
+			if (idx > 0 && p.IsLength && p.PassAs == String.Empty && this [idx - 1].IsString)
+				return true;
+
+			if (p.IsCount && ((idx > 0 && this [idx - 1].IsArray) ||
+					  (idx < Count - 1 && this [idx + 1].IsArray)))
+				return true;
+
+			if (p.CType == "GError**")
+				return true;
+
+			if (HasCB || HideData) {
+				if (p.IsUserData && (idx == Count - 1))
+                                        return true;
+				if (p.IsUserData && (idx == Count - 2) && this [Count - 1] is ErrorParameter)
+                                        return true;
+				if (p.IsUserData && idx > 0 &&
+				    this [idx - 1].Generatable is CallbackGen)
+					return true;
+				if (p.IsDestroyNotify && (idx == Count - 1) &&
+				    this [idx - 1].IsUserData)
+					return true;
+			}
+
+			return false;
+		}
+
+		bool has_cb;
+		public bool HasCB {
+			get { return has_cb; }
+			set { has_cb = value; }
+		}
+
+		public bool HasOutParam {
+			get {
+				foreach (Parameter p in this)
+					if (p.PassAs == "out")
+						return true;
+				return false;
+			}
+		}
+
+		bool hide_data;
+		public bool HideData {
+			get { return hide_data; }
+			set { hide_data = value; }
+		}
+
+		bool is_static;
+		public bool Static {
+			get { return is_static; }
+			set { is_static = value; }
+		}
+
+		void Clear ()
+		{
+			elem = null;
+			param_list.Clear ();
+			param_list = null;
+		}
+
+		public IEnumerator GetEnumerator ()
+		{
+			return param_list.GetEnumerator ();
+		}
+
+		bool valid = false;
+
+		public bool Validate ()
+		{
+			if (valid)
+				return true;
+
+			if (elem == null)
+				return false;
+
+			for (int i = 0; i < elem.ChildNodes.Count; i++) {
+				XmlElement parm = elem.ChildNodes [i] as XmlElement;
+				if (parm == null || parm.Name != "parameter")
+					continue;
+				Parameter p = new Parameter (parm);
+				
+				if (p.IsEllipsis) {
+					Console.Write("Ellipsis parameter ");
+					Clear ();
+					return false;
+				}
+
+				if ((p.CSType == "") || (p.Name == "") || 
+				    (p.MarshalType == "") || (SymbolTable.Table.CallByName(p.CType, p.Name) == "")) {
+					Console.Write("Name: " + p.Name + " Type: " + p.CType + " ");
+					Clear ();
+					return false;
+				}
+
+				IGeneratable gen = p.Generatable;
+
+				if (p.IsArray) {
+					p = new ArrayParameter (parm);
+					if (i < elem.ChildNodes.Count - 1) {
+						XmlElement next = elem.ChildNodes [i + 1] as XmlElement;
+						if (next != null || next.Name == "parameter") {
+							Parameter c = new Parameter (next);
+							if (c.IsCount) {
+								p = new ArrayCountPair (parm, next, false);
+								i++;
+							} 
+						}
+					}
+				} else if (p.IsCount && i < elem.ChildNodes.Count - 1) {
+					XmlElement next = elem.ChildNodes [i + 1] as XmlElement;
+					if (next != null || next.Name == "parameter") {
+						Parameter a = new Parameter (next);
+						if (a.IsArray) {
+							p = new ArrayCountPair (next, parm, true);
+							i++;
+						}
+					}
+				} else if (p.CType == "GError**")
+					p = new ErrorParameter (parm);
+				else if (gen is StructBase || gen is ByRefGen) {
+					p = new StructParameter (parm);
+				} else if (gen is CallbackGen) {
+					has_cb = true;
+				}
+				param_list.Add (p);
+			}
+			
+			if (has_cb && Count > 2 && this [Count - 3].Generatable is CallbackGen && this [Count - 2].IsUserData && this [Count - 1].IsDestroyNotify)
+				this [Count - 3].Scope = "notified";
+
+			valid = true;
+			return true;
+		}
+
+		public bool IsAccessor {
+			get {
+				return VisibleCount == 1 && AccessorParam.PassAs == "out";
+			}
+		}
+
+		public Parameter AccessorParam {
+			get {
+				foreach (Parameter p in this) {
+					if (!IsHidden (p))
+						return p;
+				}
+				return null;
+			}
+		}
+
+		public string AccessorReturnType {
+			get {
+				Parameter p = AccessorParam;
+				if (p != null)
+					return p.CSType;
+				else
+					return null;
+			}
+		}
+
+		public string AccessorName {
+			get {
+				Parameter p = AccessorParam;
+				if (p != null)
+					return p.Name;
+				else
+					return null;
+			}
+		}
+
+		public string ImportSignature {
+			get {
+				if (Count == 0)
+					return String.Empty;
+
+				string[] result = new string [Count];
+				for (int i = 0; i < Count; i++)
+					result [i] = this [i].NativeSignature;
+
+				return String.Join (", ", result);
+			}
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/Parser.cs b/lib/gio-sharp/generator/Parser.cs
index 5d65890..61e3714 100644
--- a/lib/gio-sharp/generator/Parser.cs
+++ b/lib/gio-sharp/generator/Parser.cs
@@ -1,170 +1,170 @@
-// GtkSharp.Generation.Parser.cs - The XML Parsing engine.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2003 Ximian Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Parser  {
-		
-		private XmlDocument Load (string filename)
-		{
-			XmlDocument doc = new XmlDocument ();
-
-			try {
-				Stream stream = File.OpenRead (filename);
-				doc.Load (stream);
-				stream.Close ();
-			} catch (XmlException e) {
-				Console.WriteLine ("Invalid XML file.");
-				Console.WriteLine (e);
-				doc = null;
-			}
-
-			return doc;
-		}
-
-		public IGeneratable[] Parse (string filename)
-		{
-			XmlDocument doc = Load (filename);
-			if (doc == null)
-				return null;
-
-			XmlElement root = doc.DocumentElement;
-
-			if ((root == null) || !root.HasChildNodes) {
-				Console.WriteLine ("No Namespaces found.");
-				return null;
-			}
-
-			ArrayList gens = new ArrayList ();
-
-			foreach (XmlNode child in root.ChildNodes) {
-				XmlElement elem = child as XmlElement;
-				if (elem == null)
-					continue;
-
-				switch (child.Name) {
-				case "namespace":
-					gens.AddRange (ParseNamespace (elem));
-					break;
-				case "symbol":
-					gens.Add (ParseSymbol (elem));
-					break;
-				default:
-					Console.WriteLine ("Parser::Parse - Unexpected child node: " + child.Name);
-					break;
-				}
-			}
-
-			return (IGeneratable[]) gens.ToArray (typeof (IGeneratable));
-		}
-
-		private ArrayList ParseNamespace (XmlElement ns)
-		{
-			ArrayList result = new ArrayList ();
-
-			foreach (XmlNode def in ns.ChildNodes) {
-
-				XmlElement elem = def as XmlElement;
-				if (elem == null)
-					continue;
-
-				if (elem.HasAttribute("hidden"))
-					continue;
-
-				bool is_opaque = false;
-				if (elem.GetAttribute ("opaque") == "true" ||
-				    elem.GetAttribute ("opaque") == "1")
-					is_opaque = true;
-
-				switch (def.Name) {
-				case "alias":
-					string aname = elem.GetAttribute("cname");
-					string atype = elem.GetAttribute("type");
-					if ((aname == "") || (atype == ""))
-						continue;
-					result.Add (new AliasGen (aname, atype));
-					break;
-				case "boxed":
-					result.Add (is_opaque ? new OpaqueGen (ns, elem) as object : new BoxedGen (ns, elem) as object);
-					break;
-				case "callback":
-					result.Add (new CallbackGen (ns, elem));
-					break;
-				case "enum":
-					result.Add (new EnumGen (ns, elem));
-					break;
-				case "interface":
-					result.Add (new InterfaceGen (ns, elem));
-					break;
-				case "object":
-					result.Add (new ObjectGen (ns, elem));
-					break;
-				case "class":
-					result.Add (new ClassGen (ns, elem));
-					break;
-				case "struct":
-					result.Add (is_opaque ? new OpaqueGen (ns, elem) as object : new StructGen (ns, elem) as object);
-					break;
-				default:
-					Console.WriteLine ("Parser::ParseNamespace - Unexpected node: " + def.Name);
-					break;
-				}
-			}
-
-			return result;
-		}
-
-		private IGeneratable ParseSymbol (XmlElement symbol)
-		{
-			string type = symbol.GetAttribute ("type");
-			string cname = symbol.GetAttribute ("cname");
-			string name = symbol.GetAttribute ("name");
-			IGeneratable result = null;
-
-			if (type == "simple") {
-				if (symbol.HasAttribute ("default_value"))
-					result = new SimpleGen (cname, name, symbol.GetAttribute ("default_value"));
-				else {
-					Console.WriteLine ("Simple type element " + cname + " has no specified default value");
-					result = new SimpleGen (cname, name, String.Empty);
-				}
-			} else if (type == "manual")
-				result = new ManualGen (cname, name);
-			else if (type == "alias")
-				result = new AliasGen (cname, name);
-			else if (type == "marshal") {
-				string mtype = symbol.GetAttribute ("marshal_type");
-				string call = symbol.GetAttribute ("call_fmt");
-				string from = symbol.GetAttribute ("from_fmt");
-				result = new MarshalGen (cname, name, mtype, call, from);
-			} else
-				Console.WriteLine ("Parser::ParseSymbol - Unexpected symbol type " + type);
-
-			return result;
-		}
-	}
-}
+// GtkSharp.Generation.Parser.cs - The XML Parsing engine.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003 Ximian Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Parser  {
+		
+		private XmlDocument Load (string filename)
+		{
+			XmlDocument doc = new XmlDocument ();
+
+			try {
+				Stream stream = File.OpenRead (filename);
+				doc.Load (stream);
+				stream.Close ();
+			} catch (XmlException e) {
+				Console.WriteLine ("Invalid XML file.");
+				Console.WriteLine (e);
+				doc = null;
+			}
+
+			return doc;
+		}
+
+		public IGeneratable[] Parse (string filename)
+		{
+			XmlDocument doc = Load (filename);
+			if (doc == null)
+				return null;
+
+			XmlElement root = doc.DocumentElement;
+
+			if ((root == null) || !root.HasChildNodes) {
+				Console.WriteLine ("No Namespaces found.");
+				return null;
+			}
+
+			ArrayList gens = new ArrayList ();
+
+			foreach (XmlNode child in root.ChildNodes) {
+				XmlElement elem = child as XmlElement;
+				if (elem == null)
+					continue;
+
+				switch (child.Name) {
+				case "namespace":
+					gens.AddRange (ParseNamespace (elem));
+					break;
+				case "symbol":
+					gens.Add (ParseSymbol (elem));
+					break;
+				default:
+					Console.WriteLine ("Parser::Parse - Unexpected child node: " + child.Name);
+					break;
+				}
+			}
+
+			return (IGeneratable[]) gens.ToArray (typeof (IGeneratable));
+		}
+
+		private ArrayList ParseNamespace (XmlElement ns)
+		{
+			ArrayList result = new ArrayList ();
+
+			foreach (XmlNode def in ns.ChildNodes) {
+
+				XmlElement elem = def as XmlElement;
+				if (elem == null)
+					continue;
+
+				if (elem.HasAttribute("hidden"))
+					continue;
+
+				bool is_opaque = false;
+				if (elem.GetAttribute ("opaque") == "true" ||
+				    elem.GetAttribute ("opaque") == "1")
+					is_opaque = true;
+
+				switch (def.Name) {
+				case "alias":
+					string aname = elem.GetAttribute("cname");
+					string atype = elem.GetAttribute("type");
+					if ((aname == "") || (atype == ""))
+						continue;
+					result.Add (new AliasGen (aname, atype));
+					break;
+				case "boxed":
+					result.Add (is_opaque ? new OpaqueGen (ns, elem) as object : new BoxedGen (ns, elem) as object);
+					break;
+				case "callback":
+					result.Add (new CallbackGen (ns, elem));
+					break;
+				case "enum":
+					result.Add (new EnumGen (ns, elem));
+					break;
+				case "interface":
+					result.Add (new InterfaceGen (ns, elem));
+					break;
+				case "object":
+					result.Add (new ObjectGen (ns, elem));
+					break;
+				case "class":
+					result.Add (new ClassGen (ns, elem));
+					break;
+				case "struct":
+					result.Add (is_opaque ? new OpaqueGen (ns, elem) as object : new StructGen (ns, elem) as object);
+					break;
+				default:
+					Console.WriteLine ("Parser::ParseNamespace - Unexpected node: " + def.Name);
+					break;
+				}
+			}
+
+			return result;
+		}
+
+		private IGeneratable ParseSymbol (XmlElement symbol)
+		{
+			string type = symbol.GetAttribute ("type");
+			string cname = symbol.GetAttribute ("cname");
+			string name = symbol.GetAttribute ("name");
+			IGeneratable result = null;
+
+			if (type == "simple") {
+				if (symbol.HasAttribute ("default_value"))
+					result = new SimpleGen (cname, name, symbol.GetAttribute ("default_value"));
+				else {
+					Console.WriteLine ("Simple type element " + cname + " has no specified default value");
+					result = new SimpleGen (cname, name, String.Empty);
+				}
+			} else if (type == "manual")
+				result = new ManualGen (cname, name);
+			else if (type == "alias")
+				result = new AliasGen (cname, name);
+			else if (type == "marshal") {
+				string mtype = symbol.GetAttribute ("marshal_type");
+				string call = symbol.GetAttribute ("call_fmt");
+				string from = symbol.GetAttribute ("from_fmt");
+				result = new MarshalGen (cname, name, mtype, call, from);
+			} else
+				Console.WriteLine ("Parser::ParseSymbol - Unexpected symbol type " + type);
+
+			return result;
+		}
+	}
+}
diff --git a/lib/gio-sharp/generator/Property.cs b/lib/gio-sharp/generator/Property.cs
index 6920e3c..fbf940b 100644
--- a/lib/gio-sharp/generator/Property.cs
+++ b/lib/gio-sharp/generator/Property.cs
@@ -1,193 +1,193 @@
-// GtkSharp.Generation.Property.cs - The Property Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Property : PropertyBase {
-
-		public Property (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
-
-		public bool Validate ()
-		{
-			if (CSType == "" && !Hidden) {
-				Console.Write("Property has unknown Type {0} ", CType);
-				Statistics.ThrottledCount++;
-				return false;
-			}
-
-			return true;
-		}
-
-		bool Readable {
-			get {
-				return elem.GetAttribute ("readable") == "true";
-			}
-		}
-
-		bool Writable {
-			get {
-				return elem.GetAttribute ("writeable") == "true" &&
-					!elem.HasAttribute ("construct-only");
-			}
-		}
-
-		bool IsDeprecated {
-			get {
-				return !container_type.IsDeprecated &&
-					(elem.GetAttribute ("deprecated") == "1" ||
-					 elem.GetAttribute ("deprecated") == "true");
-			}
-		}
-
-		protected virtual string PropertyAttribute (string qpname) {
-			return "[GLib.Property (" + qpname + ")]";
-		}
-
-		protected virtual string RawGetter (string qpname) {
-			return "GetProperty (" + qpname + ")";
-		}
-
-		protected virtual string RawSetter (string qpname) {
-			return "SetProperty(" + qpname + ", val)";
-		}
-
-		public void GenerateDecl (StreamWriter sw, string indent)
-		{
-			if (Hidden || (!Readable && !Writable))
-				return;
-
-			string name = Name;
-			if (name == container_type.Name)
-				name += "Prop";
-
-			sw.WriteLine (indent + CSType + " " + name + " {");
-			sw.Write (indent + "\t");
-			if (Readable || Getter != null)
-				sw.Write ("get; ");
-			if (Writable || Setter != null)
-				sw.Write ("set;");
-			sw.WriteLine ();
-			sw.WriteLine (indent + "}");
-		}
-
-		public void Generate (GenerationInfo gen_info, string indent, ClassBase implementor)
-		{
-			SymbolTable table = SymbolTable.Table;
-			StreamWriter sw = gen_info.Writer;
-
-			if (Hidden || (!Readable && !Writable))
-				return;
-
-			string modifiers = "";
-
-			if (IsNew || (container_type.Parent != null && container_type.Parent.GetPropertyRecursively (Name) != null))
-				modifiers = "new ";
-			else if (implementor != null && implementor.Parent != null && implementor.Parent.GetPropertyRecursively (Name) != null)
-				modifiers = "new ";
-
-			string name = Name;
-			if (name == container_type.Name) {
-				name += "Prop";
-			}
-			string qpname = "\"" + CName + "\"";
-
-			string v_type = "";
-			if (table.IsInterface (CType)) {
-				v_type = "(GLib.Object)";
-			} else if (table.IsOpaque (CType)) {
-				v_type = "(GLib.Opaque)";
-			} else if (table.IsEnum (CType)) {
-				v_type = "(Enum)";
-			}
-
-			GenerateImports (gen_info, indent);
-
-			if (IsDeprecated ||
-			    (Getter != null && Getter.IsDeprecated) ||
-			    (Setter != null && Setter.IsDeprecated))
-				sw.WriteLine (indent + "[Obsolete]");
-			sw.WriteLine (indent + PropertyAttribute (qpname));
-			sw.WriteLine (indent + "public " + modifiers + CSType + " " + name + " {");
-			indent += "\t";
-
-			if (Getter != null) {
-				sw.Write(indent + "get ");
-				Getter.GenerateBody(gen_info, implementor, "\t");
-				sw.WriteLine();
-			} else if (Readable) {
-				sw.WriteLine(indent + "get {");
-				sw.WriteLine(indent + "\tGLib.Value val = " + RawGetter (qpname) + ";");
-				if (table.IsOpaque (CType) || table.IsBoxed (CType)) {
-					sw.WriteLine(indent + "\t" + CSType + " ret = (" + CSType + ") val;");
-				} else if (table.IsInterface (CType)) {
-					// Do we have to dispose the GLib.Object from the GLib.Value?
-					sw.WriteLine (indent + "\t{0} ret = {0}Adapter.GetObject ((GLib.Object) val);", CSType);
-				} else {
-					sw.Write(indent + "\t" + CSType + " ret = ");
-					sw.Write ("(" + CSType + ") ");
-					if (v_type != "") {
-						sw.Write(v_type + " ");
-					}
-					sw.WriteLine("val;");
-				}
-
-				sw.WriteLine(indent + "\tval.Dispose ();");
-				sw.WriteLine(indent + "\treturn ret;");
-				sw.WriteLine(indent + "}");
-			}
-
-			if (Setter != null) {
-				sw.Write(indent + "set ");
-				Setter.GenerateBody(gen_info, implementor, "\t");
-				sw.WriteLine();
-			} else if (Writable) {
-				sw.WriteLine(indent + "set {");
-				sw.Write(indent + "\tGLib.Value val = ");
-				if (table.IsBoxed (CType)) {
-					sw.WriteLine("(GLib.Value) value;");
-				} else if (table.IsOpaque (CType)) {
-					sw.WriteLine("new GLib.Value(value, \"{0}\");", CType);
-				} else {
-					sw.Write("new GLib.Value(");
-					if (v_type != "" && !(table.IsObject (CType) || table.IsInterface (CType) || table.IsOpaque (CType))) {
-						sw.Write(v_type + " ");
-					}
-					sw.WriteLine("value);");
-				}
-				sw.WriteLine(indent + "\t" + RawSetter (qpname) + ";");
-				sw.WriteLine(indent + "\tval.Dispose ();");
-				sw.WriteLine(indent + "}");
-			}
-
-			sw.WriteLine(indent.Substring (1) + "}");
-			sw.WriteLine();
-
-			Statistics.PropCount++;
-		}
-	}
-}
-
+// GtkSharp.Generation.Property.cs - The Property Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Property : PropertyBase {
+
+		public Property (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
+
+		public bool Validate ()
+		{
+			if (CSType == "" && !Hidden) {
+				Console.Write("Property has unknown Type {0} ", CType);
+				Statistics.ThrottledCount++;
+				return false;
+			}
+
+			return true;
+		}
+
+		bool Readable {
+			get {
+				return elem.GetAttribute ("readable") == "true";
+			}
+		}
+
+		bool Writable {
+			get {
+				return elem.GetAttribute ("writeable") == "true" &&
+					!elem.HasAttribute ("construct-only");
+			}
+		}
+
+		bool IsDeprecated {
+			get {
+				return !container_type.IsDeprecated &&
+					(elem.GetAttribute ("deprecated") == "1" ||
+					 elem.GetAttribute ("deprecated") == "true");
+			}
+		}
+
+		protected virtual string PropertyAttribute (string qpname) {
+			return "[GLib.Property (" + qpname + ")]";
+		}
+
+		protected virtual string RawGetter (string qpname) {
+			return "GetProperty (" + qpname + ")";
+		}
+
+		protected virtual string RawSetter (string qpname) {
+			return "SetProperty(" + qpname + ", val)";
+		}
+
+		public void GenerateDecl (StreamWriter sw, string indent)
+		{
+			if (Hidden || (!Readable && !Writable))
+				return;
+
+			string name = Name;
+			if (name == container_type.Name)
+				name += "Prop";
+
+			sw.WriteLine (indent + CSType + " " + name + " {");
+			sw.Write (indent + "\t");
+			if (Readable || Getter != null)
+				sw.Write ("get; ");
+			if (Writable || Setter != null)
+				sw.Write ("set;");
+			sw.WriteLine ();
+			sw.WriteLine (indent + "}");
+		}
+
+		public void Generate (GenerationInfo gen_info, string indent, ClassBase implementor)
+		{
+			SymbolTable table = SymbolTable.Table;
+			StreamWriter sw = gen_info.Writer;
+
+			if (Hidden || (!Readable && !Writable))
+				return;
+
+			string modifiers = "";
+
+			if (IsNew || (container_type.Parent != null && container_type.Parent.GetPropertyRecursively (Name) != null))
+				modifiers = "new ";
+			else if (implementor != null && implementor.Parent != null && implementor.Parent.GetPropertyRecursively (Name) != null)
+				modifiers = "new ";
+
+			string name = Name;
+			if (name == container_type.Name) {
+				name += "Prop";
+			}
+			string qpname = "\"" + CName + "\"";
+
+			string v_type = "";
+			if (table.IsInterface (CType)) {
+				v_type = "(GLib.Object)";
+			} else if (table.IsOpaque (CType)) {
+				v_type = "(GLib.Opaque)";
+			} else if (table.IsEnum (CType)) {
+				v_type = "(Enum)";
+			}
+
+			GenerateImports (gen_info, indent);
+
+			if (IsDeprecated ||
+			    (Getter != null && Getter.IsDeprecated) ||
+			    (Setter != null && Setter.IsDeprecated))
+				sw.WriteLine (indent + "[Obsolete]");
+			sw.WriteLine (indent + PropertyAttribute (qpname));
+			sw.WriteLine (indent + "public " + modifiers + CSType + " " + name + " {");
+			indent += "\t";
+
+			if (Getter != null) {
+				sw.Write(indent + "get ");
+				Getter.GenerateBody(gen_info, implementor, "\t");
+				sw.WriteLine();
+			} else if (Readable) {
+				sw.WriteLine(indent + "get {");
+				sw.WriteLine(indent + "\tGLib.Value val = " + RawGetter (qpname) + ";");
+				if (table.IsOpaque (CType) || table.IsBoxed (CType)) {
+					sw.WriteLine(indent + "\t" + CSType + " ret = (" + CSType + ") val;");
+				} else if (table.IsInterface (CType)) {
+					// Do we have to dispose the GLib.Object from the GLib.Value?
+					sw.WriteLine (indent + "\t{0} ret = {0}Adapter.GetObject ((GLib.Object) val);", CSType);
+				} else {
+					sw.Write(indent + "\t" + CSType + " ret = ");
+					sw.Write ("(" + CSType + ") ");
+					if (v_type != "") {
+						sw.Write(v_type + " ");
+					}
+					sw.WriteLine("val;");
+				}
+
+				sw.WriteLine(indent + "\tval.Dispose ();");
+				sw.WriteLine(indent + "\treturn ret;");
+				sw.WriteLine(indent + "}");
+			}
+
+			if (Setter != null) {
+				sw.Write(indent + "set ");
+				Setter.GenerateBody(gen_info, implementor, "\t");
+				sw.WriteLine();
+			} else if (Writable) {
+				sw.WriteLine(indent + "set {");
+				sw.Write(indent + "\tGLib.Value val = ");
+				if (table.IsBoxed (CType)) {
+					sw.WriteLine("(GLib.Value) value;");
+				} else if (table.IsOpaque (CType)) {
+					sw.WriteLine("new GLib.Value(value, \"{0}\");", CType);
+				} else {
+					sw.Write("new GLib.Value(");
+					if (v_type != "" && !(table.IsObject (CType) || table.IsInterface (CType) || table.IsOpaque (CType))) {
+						sw.Write(v_type + " ");
+					}
+					sw.WriteLine("value);");
+				}
+				sw.WriteLine(indent + "\t" + RawSetter (qpname) + ";");
+				sw.WriteLine(indent + "\tval.Dispose ();");
+				sw.WriteLine(indent + "}");
+			}
+
+			sw.WriteLine(indent.Substring (1) + "}");
+			sw.WriteLine();
+
+			Statistics.PropCount++;
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/ReturnValue.cs b/lib/gio-sharp/generator/ReturnValue.cs
index dce6a6c..4ace994 100644
--- a/lib/gio-sharp/generator/ReturnValue.cs
+++ b/lib/gio-sharp/generator/ReturnValue.cs
@@ -1,170 +1,170 @@
-// GtkSharp.Generation.ReturnValue.cs - The ReturnValue Generatable.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2004-2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Xml;
-
-	public class ReturnValue  {
-
-		
-		bool is_null_term;
-		bool is_array;
-		bool elements_owned;
-		bool owned;
-		string ctype = String.Empty;
-		string element_ctype = String.Empty;
-
-		public ReturnValue (XmlElement elem) 
-		{
-			if (elem != null) {
-				is_null_term = elem.HasAttribute ("null_term_array");
-				is_array = elem.HasAttribute ("array");
-				elements_owned = elem.GetAttribute ("elements_owned") == "true";
-				owned = elem.GetAttribute ("owned") == "true";
-				ctype = elem.GetAttribute("type");
-				element_ctype = elem.GetAttribute ("element_type");
-			}
-		}
-
-		public string CType {
-			get {
-				return ctype;
-			}
-		}
-
-		public string CSType {
-			get {
-				if (IGen == null)
-					return String.Empty;
-
-				if (ElementType != String.Empty)
-					return ElementType + "[]";
-
-				return IGen.QualifiedName + (is_array || is_null_term ? "[]" : String.Empty);
-			}
-		}
-
-		public string DefaultValue {
-			get {
-				if (IGen == null)
-					return String.Empty;
-				return IGen.DefaultValue;
-			}
-		}
-
-		string ElementType {
-			get {
-				if (element_ctype.Length > 0)
-					return SymbolTable.Table.GetCSType (element_ctype);
-
-				return String.Empty;
-			}
-		}
-
-		IGeneratable igen;
-		IGeneratable IGen {
-			get {
-				if (igen == null)
-					igen = SymbolTable.Table [CType];
-				return igen;
-			}
-		}
-
-		public bool IsVoid {
-			get {
-				return CSType == "void";
-			}
-		}
-
-		public string MarshalType {
-			get {
-				if (IGen == null)
-					return String.Empty;
-				else if (is_null_term)
-					return "IntPtr";
-				return IGen.MarshalReturnType + (is_array ? "[]" : String.Empty);
-			}
-		}
-
-		public string ToNativeType {
-			get {
-				if (IGen == null)
-					return String.Empty;
-				else if (is_null_term)
-					return "IntPtr"; //FIXME
-				return IGen.ToNativeReturnType + (is_array ? "[]" : String.Empty);
-			}
-		}
-
-		public string FromNative (string var)
-		{
-			if (IGen == null)
-				return String.Empty;
-
-			if (ElementType != String.Empty) {
-				string args = (owned ? "true" : "false") + ", " + (elements_owned ? "true" : "false");
-				if (IGen.QualifiedName == "GLib.PtrArray")
-					return String.Format ("({0}[]) GLib.Marshaller.PtrArrayToArray ({1}, {2}, typeof({0}))", ElementType, var, args);
-				else
-					return String.Format ("({0}[]) GLib.Marshaller.ListPtrToArray ({1}, typeof({2}), {3}, typeof({0}))", ElementType, var, IGen.QualifiedName, args);
-			} else if (IGen is HandleBase)
-				return ((HandleBase)IGen).FromNative (var, owned);
-			else if (is_null_term)
-				return String.Format ("GLib.Marshaller.NullTermPtrToStringArray ({0}, {1})", var, owned ? "true" : "false");
-			else
-				return IGen.FromNativeReturn (var);
-		}
-			
-		public string ToNative (string var)
-		{
-			if (IGen == null)
-				return String.Empty;
-
-			if (ElementType.Length > 0) {
-				string args = ", typeof (" + ElementType + "), " + (owned ? "true" : "false") + ", " + (elements_owned ? "true" : "false");
-				var = "new " + IGen.QualifiedName + "(" + var + args + ")";
-			} else if (is_null_term)
-				return String.Format ("GLib.Marshaller.StringArrayToNullTermPtr ({0})", var);
-
-			if (IGen is IManualMarshaler)
-				return (IGen as IManualMarshaler).AllocNative (var);
-			else if (IGen is ObjectGen && owned)
-				return var + " == null ? IntPtr.Zero : " + var + ".OwnedHandle";
-			else if (IGen is OpaqueGen && owned)
-				return var + " == null ? IntPtr.Zero : " + var + ".OwnedCopy";
-			else
-				return IGen.ToNativeReturn (var);
-		}
-
-		public bool Validate ()
-		{
-			if (MarshalType == "" || CSType == "") {
-				Console.Write("rettype: " + CType);
-				return false;
-			}
-
-			return true;
-		}
-	}
-}
-
+// GtkSharp.Generation.ReturnValue.cs - The ReturnValue Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Xml;
+
+	public class ReturnValue  {
+
+		
+		bool is_null_term;
+		bool is_array;
+		bool elements_owned;
+		bool owned;
+		string ctype = String.Empty;
+		string element_ctype = String.Empty;
+
+		public ReturnValue (XmlElement elem) 
+		{
+			if (elem != null) {
+				is_null_term = elem.HasAttribute ("null_term_array");
+				is_array = elem.HasAttribute ("array");
+				elements_owned = elem.GetAttribute ("elements_owned") == "true";
+				owned = elem.GetAttribute ("owned") == "true";
+				ctype = elem.GetAttribute("type");
+				element_ctype = elem.GetAttribute ("element_type");
+			}
+		}
+
+		public string CType {
+			get {
+				return ctype;
+			}
+		}
+
+		public string CSType {
+			get {
+				if (IGen == null)
+					return String.Empty;
+
+				if (ElementType != String.Empty)
+					return ElementType + "[]";
+
+				return IGen.QualifiedName + (is_array || is_null_term ? "[]" : String.Empty);
+			}
+		}
+
+		public string DefaultValue {
+			get {
+				if (IGen == null)
+					return String.Empty;
+				return IGen.DefaultValue;
+			}
+		}
+
+		string ElementType {
+			get {
+				if (element_ctype.Length > 0)
+					return SymbolTable.Table.GetCSType (element_ctype);
+
+				return String.Empty;
+			}
+		}
+
+		IGeneratable igen;
+		IGeneratable IGen {
+			get {
+				if (igen == null)
+					igen = SymbolTable.Table [CType];
+				return igen;
+			}
+		}
+
+		public bool IsVoid {
+			get {
+				return CSType == "void";
+			}
+		}
+
+		public string MarshalType {
+			get {
+				if (IGen == null)
+					return String.Empty;
+				else if (is_null_term)
+					return "IntPtr";
+				return IGen.MarshalReturnType + (is_array ? "[]" : String.Empty);
+			}
+		}
+
+		public string ToNativeType {
+			get {
+				if (IGen == null)
+					return String.Empty;
+				else if (is_null_term)
+					return "IntPtr"; //FIXME
+				return IGen.ToNativeReturnType + (is_array ? "[]" : String.Empty);
+			}
+		}
+
+		public string FromNative (string var)
+		{
+			if (IGen == null)
+				return String.Empty;
+
+			if (ElementType != String.Empty) {
+				string args = (owned ? "true" : "false") + ", " + (elements_owned ? "true" : "false");
+				if (IGen.QualifiedName == "GLib.PtrArray")
+					return String.Format ("({0}[]) GLib.Marshaller.PtrArrayToArray ({1}, {2}, typeof({0}))", ElementType, var, args);
+				else
+					return String.Format ("({0}[]) GLib.Marshaller.ListPtrToArray ({1}, typeof({2}), {3}, typeof({0}))", ElementType, var, IGen.QualifiedName, args);
+			} else if (IGen is HandleBase)
+				return ((HandleBase)IGen).FromNative (var, owned);
+			else if (is_null_term)
+				return String.Format ("GLib.Marshaller.NullTermPtrToStringArray ({0}, {1})", var, owned ? "true" : "false");
+			else
+				return IGen.FromNativeReturn (var);
+		}
+			
+		public string ToNative (string var)
+		{
+			if (IGen == null)
+				return String.Empty;
+
+			if (ElementType.Length > 0) {
+				string args = ", typeof (" + ElementType + "), " + (owned ? "true" : "false") + ", " + (elements_owned ? "true" : "false");
+				var = "new " + IGen.QualifiedName + "(" + var + args + ")";
+			} else if (is_null_term)
+				return String.Format ("GLib.Marshaller.StringArrayToNullTermPtr ({0})", var);
+
+			if (IGen is IManualMarshaler)
+				return (IGen as IManualMarshaler).AllocNative (var);
+			else if (IGen is ObjectGen && owned)
+				return var + " == null ? IntPtr.Zero : " + var + ".OwnedHandle";
+			else if (IGen is OpaqueGen && owned)
+				return var + " == null ? IntPtr.Zero : " + var + ".OwnedCopy";
+			else
+				return IGen.ToNativeReturn (var);
+		}
+
+		public bool Validate ()
+		{
+			if (MarshalType == "" || CSType == "") {
+				Console.Write("rettype: " + CType);
+				return false;
+			}
+
+			return true;
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/Signal.cs b/lib/gio-sharp/generator/Signal.cs
index 65c2087..c51c109 100644
--- a/lib/gio-sharp/generator/Signal.cs
+++ b/lib/gio-sharp/generator/Signal.cs
@@ -1,587 +1,587 @@
-// GtkSharp.Generation.Signal.cs - The Signal Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner 
-// Copyright (c) 2003-2005 Novell, Inc.
-// Copyright (c) 2007 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Signal {
-
-		bool marshaled;
-		string name;
-		XmlElement elem;
-		ReturnValue retval;
-		Parameters parms;
-		ClassBase container_type;
-
-		public Signal (XmlElement elem, ClassBase container_type)
-		{
-			this.elem = elem;
-			name = elem.GetAttribute ("name");
-			marshaled = elem.GetAttribute ("manual") == "true";
-			retval = new ReturnValue (elem ["return-type"]);
-			parms = new Parameters (elem["parameters"]);
-			this.container_type = container_type;
-		}
-
-		bool Marshaled {
-			get { return marshaled; }
-		}
-
-		public string Name {
-			get {
-				return name; 
-			}
-			set {
-				name = value;
-			}
-		}
-
-		public bool Validate ()
-		{
-			if (Name == "") {
-				Console.Write ("Nameless signal ");
-				Statistics.ThrottledCount++;
-				return false;
-			}
-			
-			if (!parms.Validate () || !retval.Validate ()) {
-				Console.Write (" in signal " + Name + " ");
-				Statistics.ThrottledCount++;
-				return false;
-			}
-
-			return true;
-		}
-
- 		public void GenerateDecl (StreamWriter sw)
- 		{
-			if (elem.HasAttribute("new_flag") || (container_type != null && container_type.GetSignalRecursively (Name) != null))
-				sw.Write("new ");
-
- 			sw.WriteLine ("\t\tevent " + EventHandlerQualifiedName + " " + Name + ";");
-		}
-
-		public string CName {
-			get {
-				return "\"" + elem.GetAttribute("cname") + "\"";
-			}
-		}
-
-		string CallbackSig {
-			get {
-				string result = "";
-				for (int i = 0; i < parms.Count; i++) {
-					if (i > 0)
-						result += ", ";
-
-					Parameter p = parms [i];
-					if (p.PassAs != "" && !(p.Generatable is StructBase))
-						result += p.PassAs + " ";
-					result += (p.MarshalType + " arg" + i);
-				}
-
-				return result;
-			}
-		}
-
-		string CallbackName {
-			get { return Name + "SignalCallback"; }
-		}
-
-		string DelegateName {
-			get { return Name + "SignalDelegate"; }
-		}
-
-                private string EventArgsName {
-                        get {
-                                if (IsEventHandler)
-                                        return "EventArgs";
-                                else
-                                        return Name + "Args";
-                        }
-                }
-                                                                                                                        
-                private string EventArgsQualifiedName {
-                        get {
-                                if (IsEventHandler)
-                                        return "System.EventArgs";
-                                else
-                                        return container_type.NS + "." + Name + "Args";
-                        }
-                }
-                                                                                                                        
-                private string EventHandlerName {
-                        get {
-                                if (IsEventHandler)
-                                        return "EventHandler";
-                                else if (SymbolTable.Table [container_type.NS + Name + "Handler"] != null)
-                                        return Name + "EventHandler";
-				else
-                                        return Name + "Handler";
-                        }
-                }
-                                                                                                                        
-                private string EventHandlerQualifiedName {
-                        get {
-                                if (IsEventHandler)
-                                        return "System.EventHandler";
-                                else
-                                        return container_type.NS + "." + EventHandlerName;
-                        }
-                }
-
-		string ClassFieldName {
-			get {
-				return elem.HasAttribute ("field_name") ? elem.GetAttribute("field_name") : String.Empty;
-			}
-		}
-
-		private bool HasOutParams {
-			get {
-				foreach (Parameter p in parms) {
-					if (p.PassAs == "out")
-						return true;
-				}
-				return false;
-			}
-		}
-
-		private bool IsEventHandler {
-			get {
-				return retval.CSType == "void" && parms.Count == 1 && (parms [0].Generatable is ObjectGen || parms [0].Generatable is InterfaceGen);
-			}
-		}
-
-		private bool IsVoid {
-			get {
-				return retval.CSType == "void";
-			}
-		}
-
-		private string ReturnGType {
-			get {
-				IGeneratable igen = SymbolTable.Table [retval.CType];
-
-				if (igen is ObjectGen)
-					return "GLib.GType.Object";
-				if (igen is BoxedGen)
-					return retval.CSType + ".GType";
-				if (igen is EnumGen)
-					return retval.CSType + "GType.GType";
-
-				switch (retval.CSType) {
-				case "bool":
-					return "GLib.GType.Boolean";
-				case "string":
-					return "GLib.GType.String";
-				case "int":
-					return "GLib.GType.Int";
-				default:
-					throw new Exception (retval.CSType);
-				}
-			}
-		}
-
-		public string GenArgsInitialization (StreamWriter sw)
-		{
-			if (parms.Count > 1)
-				sw.WriteLine("\t\t\t\targs.Args = new object[" + (parms.Count - 1) + "];");
-			string finish = "";
-			for (int idx = 1; idx < parms.Count; idx++) {
-				Parameter p = parms [idx];
-				IGeneratable igen = p.Generatable;
-				if (p.PassAs != "out") {
-					if (igen is ManualGen) {
-						sw.WriteLine("\t\t\t\tif (arg{0} == IntPtr.Zero)", idx);
-						sw.WriteLine("\t\t\t\t\targs.Args[{0}] = null;", idx - 1);
-						sw.WriteLine("\t\t\t\telse {");
-						sw.WriteLine("\t\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx)  + ";");
-						sw.WriteLine("\t\t\t\t}");
-					} else
-						sw.WriteLine("\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx)  + ";");
-				}
-				if (igen is StructBase && p.PassAs == "ref")
-					finish += "\t\t\t\tif (arg" + idx + " != IntPtr.Zero) System.Runtime.InteropServices.Marshal.StructureToPtr (args.Args[" + (idx-1) + "], arg" + idx + ", false);\n";
-				else if (p.PassAs != "")
-					finish += "\t\t\t\targ" + idx + " = " + igen.ToNativeReturn ("((" + p.CSType + ")args.Args[" + (idx - 1) + "])") + ";\n";
-			}
-			return finish;
-		}
-
-		public void GenArgsCleanup (StreamWriter sw, string finish)
-		{
-			if (IsVoid && finish.Length == 0)
-				return;
-
-			sw.WriteLine("\n\t\t\ttry {");
-			sw.Write (finish);
-			if (!IsVoid) {
-				if (retval.CSType == "bool") {
-					sw.WriteLine ("\t\t\t\tif (args.RetVal == null)");
-					sw.WriteLine ("\t\t\t\t\treturn false;");
-				}
-				sw.WriteLine("\t\t\t\treturn " + SymbolTable.Table.ToNativeReturn (retval.CType, "((" + retval.CSType + ")args.RetVal)") + ";");
-			}
-			sw.WriteLine("\t\t\t} catch (Exception) {");
-			sw.WriteLine ("\t\t\t\tException ex = new Exception (\"args.RetVal or 'out' property unset or set to incorrect type in " + EventHandlerQualifiedName + " callback\");");
-			sw.WriteLine("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (ex, true);");
-			
-			sw.WriteLine ("\t\t\t\t// NOTREACHED: above call doesn't return.");
-			sw.WriteLine ("\t\t\t\tthrow ex;");
-			sw.WriteLine("\t\t\t}");
-		}
-
-		public void GenCallback (StreamWriter sw)
-		{
-			if (IsEventHandler)
-				return;
-
-			sw.WriteLine ("\t\t[GLib.CDeclCallback]");
-			sw.WriteLine ("\t\tdelegate " + retval.ToNativeType + " " + DelegateName + " (" + CallbackSig + ", IntPtr gch);");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tstatic " + retval.ToNativeType + " " + CallbackName + " (" + CallbackSig + ", IntPtr gch)");
-			sw.WriteLine("\t\t{");
-			sw.WriteLine("\t\t\t{0} args = new {0} ();", EventArgsQualifiedName);
-			sw.WriteLine("\t\t\ttry {");
-			sw.WriteLine("\t\t\t\tGLib.Signal sig = ((GCHandle) gch).Target as GLib.Signal;");
-			sw.WriteLine("\t\t\t\tif (sig == null)");
-			sw.WriteLine("\t\t\t\t\tthrow new Exception(\"Unknown signal GC handle received \" + gch);");
-			sw.WriteLine();
-			string finish = GenArgsInitialization (sw);
-			sw.WriteLine("\t\t\t\t{0} handler = ({0}) sig.Handler;", EventHandlerQualifiedName);
-			sw.WriteLine("\t\t\t\thandler (GLib.Object.GetObject (arg0), args);");
-			sw.WriteLine("\t\t\t} catch (Exception e) {");
-			sw.WriteLine("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, false);");
-			sw.WriteLine("\t\t\t}");
-			GenArgsCleanup (sw, finish);
-			sw.WriteLine("\t\t}");
-			sw.WriteLine();
-		}
-
-		private bool NeedNew (ClassBase implementor)
-		{
-			return elem.HasAttribute ("new_flag") ||
-				(container_type != null && container_type.GetSignalRecursively (Name) != null) ||
-				(implementor != null && implementor.GetSignalRecursively (Name) != null);
-		}
-
-		public void GenEventHandler (GenerationInfo gen_info)
-		{
-			if (IsEventHandler)
-				return;
-
-			string ns = container_type.NS;
-
-			StreamWriter sw = gen_info.OpenStream (EventHandlerName);
-			
-			sw.WriteLine ("namespace " + ns + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-
-			sw.WriteLine ();
-			sw.WriteLine ("\tpublic delegate void " + EventHandlerName + "(object o, " + EventArgsName + " args);");
-			sw.WriteLine ();
-			sw.WriteLine ("\tpublic class " + EventArgsName + " : GLib.SignalArgs {");
-			for (int i = 1; i < parms.Count; i++) {
-				sw.WriteLine ("\t\tpublic " + parms[i].CSType + " " + parms[i].StudlyName + "{");
-				if (parms[i].PassAs != "out") {
-					sw.WriteLine ("\t\t\tget {");
-					sw.WriteLine ("\t\t\t\treturn (" + parms[i].CSType + ") Args[" + (i - 1) + "];");
-					sw.WriteLine ("\t\t\t}");
-				}
-				if (parms[i].PassAs != "") {
-					sw.WriteLine ("\t\t\tset {");
-					sw.WriteLine ("\t\t\t\tArgs[" + (i - 1) + "] = (" + parms[i].CSType + ")value;");
-					sw.WriteLine ("\t\t\t}");
-				}
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-			}
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-			sw.Close ();
-		}
-
-		private void GenVMDeclaration (StreamWriter sw, ClassBase implementor)
-		{
-			VMSignature vmsig = new VMSignature (parms);
-			sw.WriteLine ("\t\t[GLib.DefaultSignalHandler(Type=typeof(" + (implementor != null ? implementor.QualifiedName : container_type.QualifiedName) + "), ConnectionMethod=\"Override" + Name +"\")]");
-			sw.Write ("\t\tprotected ");
-			if (NeedNew (implementor))
-				sw.Write ("new ");
-			sw.WriteLine ("virtual {0} {1} ({2})", retval.CSType, "On" + Name, vmsig.ToString ());
-		}
-
-		private string CastFromInt (string type)
-		{
-			return type != "int" ? "(" + type + ") " : "";
-		}
-
-		private string GlueCallString {
-			get {
-				string result = "Handle";
-
-				for (int i = 1; i < parms.Count; i++) {
-					Parameter p = parms [i];
-					IGeneratable igen = p.Generatable;
-
-					if (i > 1 && parms [i - 1].IsString && p.IsLength && p.PassAs == String.Empty) {
-						string string_name = parms [i - 1].Name;
-						result += ", " + igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" +  string_name + ")");
-						continue;
-					}
-
-					p.CallName = p.Name;
-					string call_parm = p.CallString;
-
-					if (p.IsUserData && parms.IsHidden (p) && !parms.HideData && (i == 1 || parms [i - 1].Scope != "notified")) {
-						call_parm = "IntPtr.Zero"; 
-					}
-
-					result += ", " + call_parm;
-				}
-				return result;
-			}
-		}
-
-		private string GlueSignature {
-			get {
-				string result = String.Empty;
-				for (int i = 0; i < parms.Count; i++)
-					result += parms[i].CType.Replace ("const-", "const ") + " " + parms[i].Name + (i == parms.Count-1 ? "" : ", ");
-				return result;
-			}
-		}
-
-		private string DefaultGlueValue {
-			get {
-				string val = retval.DefaultValue;
-				switch (val) {
-				case "null":
-					return "NULL";
-				case "false":
-					return "FALSE";
-				case "true":
-					return "TRUE";
-				default:
-					return val;
-				}
-			}
-		}
-
-		private void GenGlueVirtualMethod (GenerationInfo gen_info)
-		{
-			StreamWriter glue = gen_info.GlueWriter;
-			string glue_name = String.Format ("{0}sharp_{1}_base_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
-			glue.WriteLine ("{0} {1} ({2});\n", retval.CType, glue_name, GlueSignature);
-			glue.WriteLine ("{0}\n{1} ({2})", retval.CType, glue_name, GlueSignature);
-			glue.WriteLine ("{");
-			glue.WriteLine ("\t{0}Class *klass = ({0}Class *) get_threshold_class (G_OBJECT ({1}));", container_type.CName, parms[0].Name);
-			glue.Write ("\tif (klass->{0})\n\t\t", ClassFieldName);
-			if (!IsVoid)
-				glue.Write ("return ");
-			glue.Write ("(* klass->{0}) (", ClassFieldName);
-			for (int i = 0; i < parms.Count; i++)
-				glue.Write (parms[i].Name + (i == parms.Count - 1 ? "" : ", "));
-			glue.WriteLine (");");
-			if (!IsVoid)
-				glue.WriteLine ("\treturn " + DefaultGlueValue + ";");
-			glue.WriteLine ("}");
-
-			StreamWriter sw = gen_info.Writer;
-			sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
-			sw.WriteLine ("\t\tstatic extern {0} {1} ({2});\n", retval.MarshalType, glue_name, parms.ImportSignature);
-			GenVMDeclaration (sw, null);
-			sw.WriteLine ("\t\t{");
-			MethodBody body = new MethodBody (parms);
-			body.Initialize (gen_info, false, false, String.Empty);
-			sw.WriteLine ("\t\t\t{0}{1} ({2});", IsVoid ? "" : retval.MarshalType + " __ret = ", glue_name, GlueCallString);
-			body.Finish (sw, "");
-			if (!IsVoid)
-				sw.WriteLine ("\t\t\treturn {0};", retval.FromNative ("__ret"));
-			sw.WriteLine ("\t\t}\n");
-		}
-
-		private void GenChainVirtualMethod (StreamWriter sw, ClassBase implementor)
-		{
-			GenVMDeclaration (sw, implementor);
-			sw.WriteLine ("\t\t{");
-			if (IsVoid)
-				sw.WriteLine ("\t\t\tGLib.Value ret = GLib.Value.Empty;");
-			else
-				sw.WriteLine ("\t\t\tGLib.Value ret = new GLib.Value (" + ReturnGType + ");");
-
-			sw.WriteLine ("\t\t\tGLib.ValueArray inst_and_params = new GLib.ValueArray (" + parms.Count + ");");
-			sw.WriteLine ("\t\t\tGLib.Value[] vals = new GLib.Value [" + parms.Count + "];");
-			sw.WriteLine ("\t\t\tvals [0] = new GLib.Value (this);");
-			sw.WriteLine ("\t\t\tinst_and_params.Append (vals [0]);");
-			string cleanup = "";
-			for (int i = 1; i < parms.Count; i++) {
-				Parameter p = parms [i];
-				if (p.PassAs != "") {
-					if (SymbolTable.Table.IsBoxed (p.CType)) {
-						if (p.PassAs == "ref")
-							sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + ");");
-						else
-							sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value ((GLib.GType)typeof (" + p.CSType + "));");
-						cleanup += "\t\t\t" + p.Name + " = (" + p.CSType + ") vals [" + i + "];\n";
-					} else {
-						if (p.PassAs == "ref")
-							sw.WriteLine ("\t\t\tIntPtr " + p.Name + "_ptr = GLib.Marshaller.StructureToPtrAlloc (" + p.Generatable.CallByName (p.Name) + ");");
-						else
-							sw.WriteLine ("\t\t\tIntPtr " + p.Name + "_ptr = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + p.MarshalType + ")));");
-
-						sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + "_ptr);");
-						cleanup += "\t\t\t" + p.Name + " = " + p.FromNative ("(" + p.MarshalType + ") Marshal.PtrToStructure (" + p.Name + "_ptr, typeof (" + p.MarshalType + "))") + ";\n";
-						cleanup += "\t\t\tMarshal.FreeHGlobal (" + p.Name + "_ptr);\n";
-					}
-				} else if (p.IsLength && parms [i - 1].IsString)
-					sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (System.Text.Encoding.UTF8.GetByteCount (" + parms [i-1].Name + "));");
-				else
-					sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + ");");
-
-				sw.WriteLine ("\t\t\tinst_and_params.Append (vals [" + i + "]);");
-			}
-
-			sw.WriteLine ("\t\t\tg_signal_chain_from_overridden (inst_and_params.ArrayPtr, ref ret);");
-			if (cleanup != "")
-				sw.WriteLine (cleanup);
-			sw.WriteLine ("\t\t\tforeach (GLib.Value v in vals)");
-			sw.WriteLine ("\t\t\t\tv.Dispose ();");
-			if (!IsVoid) {
-				IGeneratable igen = SymbolTable.Table [retval.CType];
-				sw.WriteLine ("\t\t\t" + retval.CSType + " result = (" + (igen is EnumGen ? retval.CSType + ") (Enum" : retval.CSType) + ") ret;");
-				sw.WriteLine ("\t\t\tret.Dispose ();");
-				sw.WriteLine ("\t\t\treturn result;");
-			}
-			sw.WriteLine ("\t\t}\n");
-		}
-
-		private void GenDefaultHandlerDelegate (GenerationInfo gen_info, ClassBase implementor)
-		{
-			StreamWriter sw = gen_info.Writer;
-			StreamWriter glue;
-			bool use_glue = gen_info.GlueEnabled && implementor == null && ClassFieldName.Length > 0;
-			string glue_name = String.Empty;
-			ManagedCallString call = new ManagedCallString (parms, true);
-			sw.WriteLine ("\t\t[GLib.CDeclCallback]");
-			sw.WriteLine ("\t\tdelegate " + retval.ToNativeType + " " + Name + "VMDelegate (" + parms.ImportSignature + ");\n");
-
-			if (use_glue) {
-				glue = gen_info.GlueWriter;
-				glue_name = String.Format ("{0}sharp_{1}_override_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
-				sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
-				sw.WriteLine ("\t\tstatic extern void {0} (IntPtr gtype, {1}VMDelegate cb);\n", glue_name, Name);
-				glue.WriteLine ("void {0} (GType gtype, gpointer cb);\n", glue_name);
-				glue.WriteLine ("void\n{0} (GType gtype, gpointer cb)", glue_name);
-				glue.WriteLine ("{");
-				glue.WriteLine ("\tGObjectClass *klass = g_type_class_peek (gtype);");
-				glue.WriteLine ("\tif (klass == NULL)");
-				glue.WriteLine ("\t\tklass = g_type_class_ref (gtype);");
-				glue.WriteLine ("\t(({0} *)klass)->{1} = cb;", container_type.CName + "Class", ClassFieldName);
-				glue.WriteLine ("}\n");
-			}
-
-			sw.WriteLine ("\t\tstatic {0} {1};\n", Name + "VMDelegate", Name + "VMCallback");
-			sw.WriteLine ("\t\tstatic " + retval.ToNativeType + " " + Name.ToLower() + "_cb (" + parms.ImportSignature + ")");
-			sw.WriteLine ("\t\t{");
-			string unconditional = call.Unconditional ("\t\t\t");
-			if (unconditional.Length > 0)
-				sw.WriteLine (unconditional);
-			sw.WriteLine ("\t\t\ttry {");
-			sw.WriteLine ("\t\t\t\t{0} {1}_managed = GLib.Object.GetObject ({1}, false) as {0};", implementor != null ? implementor.Name : container_type.Name, parms[0].Name);
-			sw.Write (call.Setup ("\t\t\t\t"));
-			sw.Write ("\t\t\t\t{0}", IsVoid ? "" : retval.CSType == retval.ToNativeType ? "return " : retval.CSType + " raw_ret = ");
-			sw.WriteLine ("{2}_managed.{0} ({1});", "On" + Name, call.ToString (), parms[0].Name);
-			sw.Write (call.Finish ("\t\t\t\t"));
-			if (!IsVoid && retval.CSType != retval.ToNativeType)
-				sw.WriteLine ("\t\t\t\treturn {0};", SymbolTable.Table.ToNativeReturn (retval.CType, "raw_ret"));
-			sw.WriteLine ("\t\t\t} catch (Exception e) {");
-			bool fatal = HasOutParams || !IsVoid;
-			sw.WriteLine ("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, " + (fatal ? "true" : "false") + ");");
-			if (fatal) {
-				sw.WriteLine ("\t\t\t\t// NOTREACHED: above call doesn't return");
-				sw.WriteLine ("\t\t\t\tthrow e;");
-			}
-			sw.WriteLine ("\t\t\t}");
-			sw.WriteLine ("\t\t}\n");
-			sw.WriteLine ("\t\tprivate static void Override" + Name + " (GLib.GType gtype)");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tif (" + Name + "VMCallback == null)");
-			sw.WriteLine ("\t\t\t\t" + Name + "VMCallback = new " + Name + "VMDelegate (" + Name.ToLower() + "_cb);");
-			if (use_glue)
-				sw.WriteLine ("\t\t\t{0} (gtype.Val, {1}VMCallback);", glue_name, Name);
-			else
-				sw.WriteLine ("\t\t\tOverrideVirtualMethod (gtype, " + CName + ", " + Name + "VMCallback);");
-			sw.WriteLine ("\t\t}\n");
-		}
-
-		public void GenEvent (StreamWriter sw, ClassBase implementor, string target)
-		{
-			string args_type = IsEventHandler ? "" : ", typeof (" + EventArgsQualifiedName + ")";
-			
-			if (Marshaled) {
-				GenCallback (sw);
-				args_type = ", new " + DelegateName + "(" + CallbackName + ")";
-			}
-
-			sw.WriteLine("\t\t[GLib.Signal("+ CName + ")]");
-			sw.Write("\t\tpublic ");
-			if (NeedNew (implementor))
-				sw.Write("new ");
-			sw.WriteLine("event " + EventHandlerQualifiedName + " " + Name + " {");
-			sw.WriteLine("\t\t\tadd {");
-			sw.WriteLine("\t\t\t\tGLib.Signal sig = GLib.Signal.Lookup (" + target + ", " + CName + args_type + ");");
-			sw.WriteLine("\t\t\t\tsig.AddDelegate (value);");
-			sw.WriteLine("\t\t\t}");
-			sw.WriteLine("\t\t\tremove {");
-			sw.WriteLine("\t\t\t\tGLib.Signal sig = GLib.Signal.Lookup (" + target + ", " + CName + args_type + ");");
-			sw.WriteLine("\t\t\t\tsig.RemoveDelegate (value);");
-			sw.WriteLine("\t\t\t}");
-			sw.WriteLine("\t\t}");
-			sw.WriteLine();
-		}
-
-		public void Generate (GenerationInfo gen_info, ClassBase implementor)
-		{
-			StreamWriter sw = gen_info.Writer;
-
-			if (implementor == null)
-				GenEventHandler (gen_info);
-
-			GenDefaultHandlerDelegate (gen_info, implementor);
-			if (gen_info.GlueEnabled && implementor == null && ClassFieldName.Length > 0)
-				GenGlueVirtualMethod (gen_info);
-			else
-				GenChainVirtualMethod (sw, implementor);
-			GenEvent (sw, implementor, "this");
-			
-			Statistics.SignalCount++;
-		}
-	}
-}
-
+// GtkSharp.Generation.Signal.cs - The Signal Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner 
+// Copyright (c) 2003-2005 Novell, Inc.
+// Copyright (c) 2007 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Signal {
+
+		bool marshaled;
+		string name;
+		XmlElement elem;
+		ReturnValue retval;
+		Parameters parms;
+		ClassBase container_type;
+
+		public Signal (XmlElement elem, ClassBase container_type)
+		{
+			this.elem = elem;
+			name = elem.GetAttribute ("name");
+			marshaled = elem.GetAttribute ("manual") == "true";
+			retval = new ReturnValue (elem ["return-type"]);
+			parms = new Parameters (elem["parameters"]);
+			this.container_type = container_type;
+		}
+
+		bool Marshaled {
+			get { return marshaled; }
+		}
+
+		public string Name {
+			get {
+				return name; 
+			}
+			set {
+				name = value;
+			}
+		}
+
+		public bool Validate ()
+		{
+			if (Name == "") {
+				Console.Write ("Nameless signal ");
+				Statistics.ThrottledCount++;
+				return false;
+			}
+			
+			if (!parms.Validate () || !retval.Validate ()) {
+				Console.Write (" in signal " + Name + " ");
+				Statistics.ThrottledCount++;
+				return false;
+			}
+
+			return true;
+		}
+
+ 		public void GenerateDecl (StreamWriter sw)
+ 		{
+			if (elem.HasAttribute("new_flag") || (container_type != null && container_type.GetSignalRecursively (Name) != null))
+				sw.Write("new ");
+
+ 			sw.WriteLine ("\t\tevent " + EventHandlerQualifiedName + " " + Name + ";");
+		}
+
+		public string CName {
+			get {
+				return "\"" + elem.GetAttribute("cname") + "\"";
+			}
+		}
+
+		string CallbackSig {
+			get {
+				string result = "";
+				for (int i = 0; i < parms.Count; i++) {
+					if (i > 0)
+						result += ", ";
+
+					Parameter p = parms [i];
+					if (p.PassAs != "" && !(p.Generatable is StructBase))
+						result += p.PassAs + " ";
+					result += (p.MarshalType + " arg" + i);
+				}
+
+				return result;
+			}
+		}
+
+		string CallbackName {
+			get { return Name + "SignalCallback"; }
+		}
+
+		string DelegateName {
+			get { return Name + "SignalDelegate"; }
+		}
+
+                private string EventArgsName {
+                        get {
+                                if (IsEventHandler)
+                                        return "EventArgs";
+                                else
+                                        return Name + "Args";
+                        }
+                }
+                                                                                                                        
+                private string EventArgsQualifiedName {
+                        get {
+                                if (IsEventHandler)
+                                        return "System.EventArgs";
+                                else
+                                        return container_type.NS + "." + Name + "Args";
+                        }
+                }
+                                                                                                                        
+                private string EventHandlerName {
+                        get {
+                                if (IsEventHandler)
+                                        return "EventHandler";
+                                else if (SymbolTable.Table [container_type.NS + Name + "Handler"] != null)
+                                        return Name + "EventHandler";
+				else
+                                        return Name + "Handler";
+                        }
+                }
+                                                                                                                        
+                private string EventHandlerQualifiedName {
+                        get {
+                                if (IsEventHandler)
+                                        return "System.EventHandler";
+                                else
+                                        return container_type.NS + "." + EventHandlerName;
+                        }
+                }
+
+		string ClassFieldName {
+			get {
+				return elem.HasAttribute ("field_name") ? elem.GetAttribute("field_name") : String.Empty;
+			}
+		}
+
+		private bool HasOutParams {
+			get {
+				foreach (Parameter p in parms) {
+					if (p.PassAs == "out")
+						return true;
+				}
+				return false;
+			}
+		}
+
+		private bool IsEventHandler {
+			get {
+				return retval.CSType == "void" && parms.Count == 1 && (parms [0].Generatable is ObjectGen || parms [0].Generatable is InterfaceGen);
+			}
+		}
+
+		private bool IsVoid {
+			get {
+				return retval.CSType == "void";
+			}
+		}
+
+		private string ReturnGType {
+			get {
+				IGeneratable igen = SymbolTable.Table [retval.CType];
+
+				if (igen is ObjectGen)
+					return "GLib.GType.Object";
+				if (igen is BoxedGen)
+					return retval.CSType + ".GType";
+				if (igen is EnumGen)
+					return retval.CSType + "GType.GType";
+
+				switch (retval.CSType) {
+				case "bool":
+					return "GLib.GType.Boolean";
+				case "string":
+					return "GLib.GType.String";
+				case "int":
+					return "GLib.GType.Int";
+				default:
+					throw new Exception (retval.CSType);
+				}
+			}
+		}
+
+		public string GenArgsInitialization (StreamWriter sw)
+		{
+			if (parms.Count > 1)
+				sw.WriteLine("\t\t\t\targs.Args = new object[" + (parms.Count - 1) + "];");
+			string finish = "";
+			for (int idx = 1; idx < parms.Count; idx++) {
+				Parameter p = parms [idx];
+				IGeneratable igen = p.Generatable;
+				if (p.PassAs != "out") {
+					if (igen is ManualGen) {
+						sw.WriteLine("\t\t\t\tif (arg{0} == IntPtr.Zero)", idx);
+						sw.WriteLine("\t\t\t\t\targs.Args[{0}] = null;", idx - 1);
+						sw.WriteLine("\t\t\t\telse {");
+						sw.WriteLine("\t\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx)  + ";");
+						sw.WriteLine("\t\t\t\t}");
+					} else
+						sw.WriteLine("\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx)  + ";");
+				}
+				if (igen is StructBase && p.PassAs == "ref")
+					finish += "\t\t\t\tif (arg" + idx + " != IntPtr.Zero) System.Runtime.InteropServices.Marshal.StructureToPtr (args.Args[" + (idx-1) + "], arg" + idx + ", false);\n";
+				else if (p.PassAs != "")
+					finish += "\t\t\t\targ" + idx + " = " + igen.ToNativeReturn ("((" + p.CSType + ")args.Args[" + (idx - 1) + "])") + ";\n";
+			}
+			return finish;
+		}
+
+		public void GenArgsCleanup (StreamWriter sw, string finish)
+		{
+			if (IsVoid && finish.Length == 0)
+				return;
+
+			sw.WriteLine("\n\t\t\ttry {");
+			sw.Write (finish);
+			if (!IsVoid) {
+				if (retval.CSType == "bool") {
+					sw.WriteLine ("\t\t\t\tif (args.RetVal == null)");
+					sw.WriteLine ("\t\t\t\t\treturn false;");
+				}
+				sw.WriteLine("\t\t\t\treturn " + SymbolTable.Table.ToNativeReturn (retval.CType, "((" + retval.CSType + ")args.RetVal)") + ";");
+			}
+			sw.WriteLine("\t\t\t} catch (Exception) {");
+			sw.WriteLine ("\t\t\t\tException ex = new Exception (\"args.RetVal or 'out' property unset or set to incorrect type in " + EventHandlerQualifiedName + " callback\");");
+			sw.WriteLine("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (ex, true);");
+			
+			sw.WriteLine ("\t\t\t\t// NOTREACHED: above call doesn't return.");
+			sw.WriteLine ("\t\t\t\tthrow ex;");
+			sw.WriteLine("\t\t\t}");
+		}
+
+		public void GenCallback (StreamWriter sw)
+		{
+			if (IsEventHandler)
+				return;
+
+			sw.WriteLine ("\t\t[GLib.CDeclCallback]");
+			sw.WriteLine ("\t\tdelegate " + retval.ToNativeType + " " + DelegateName + " (" + CallbackSig + ", IntPtr gch);");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tstatic " + retval.ToNativeType + " " + CallbackName + " (" + CallbackSig + ", IntPtr gch)");
+			sw.WriteLine("\t\t{");
+			sw.WriteLine("\t\t\t{0} args = new {0} ();", EventArgsQualifiedName);
+			sw.WriteLine("\t\t\ttry {");
+			sw.WriteLine("\t\t\t\tGLib.Signal sig = ((GCHandle) gch).Target as GLib.Signal;");
+			sw.WriteLine("\t\t\t\tif (sig == null)");
+			sw.WriteLine("\t\t\t\t\tthrow new Exception(\"Unknown signal GC handle received \" + gch);");
+			sw.WriteLine();
+			string finish = GenArgsInitialization (sw);
+			sw.WriteLine("\t\t\t\t{0} handler = ({0}) sig.Handler;", EventHandlerQualifiedName);
+			sw.WriteLine("\t\t\t\thandler (GLib.Object.GetObject (arg0), args);");
+			sw.WriteLine("\t\t\t} catch (Exception e) {");
+			sw.WriteLine("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, false);");
+			sw.WriteLine("\t\t\t}");
+			GenArgsCleanup (sw, finish);
+			sw.WriteLine("\t\t}");
+			sw.WriteLine();
+		}
+
+		private bool NeedNew (ClassBase implementor)
+		{
+			return elem.HasAttribute ("new_flag") ||
+				(container_type != null && container_type.GetSignalRecursively (Name) != null) ||
+				(implementor != null && implementor.GetSignalRecursively (Name) != null);
+		}
+
+		public void GenEventHandler (GenerationInfo gen_info)
+		{
+			if (IsEventHandler)
+				return;
+
+			string ns = container_type.NS;
+
+			StreamWriter sw = gen_info.OpenStream (EventHandlerName);
+			
+			sw.WriteLine ("namespace " + ns + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+
+			sw.WriteLine ();
+			sw.WriteLine ("\tpublic delegate void " + EventHandlerName + "(object o, " + EventArgsName + " args);");
+			sw.WriteLine ();
+			sw.WriteLine ("\tpublic class " + EventArgsName + " : GLib.SignalArgs {");
+			for (int i = 1; i < parms.Count; i++) {
+				sw.WriteLine ("\t\tpublic " + parms[i].CSType + " " + parms[i].StudlyName + "{");
+				if (parms[i].PassAs != "out") {
+					sw.WriteLine ("\t\t\tget {");
+					sw.WriteLine ("\t\t\t\treturn (" + parms[i].CSType + ") Args[" + (i - 1) + "];");
+					sw.WriteLine ("\t\t\t}");
+				}
+				if (parms[i].PassAs != "") {
+					sw.WriteLine ("\t\t\tset {");
+					sw.WriteLine ("\t\t\t\tArgs[" + (i - 1) + "] = (" + parms[i].CSType + ")value;");
+					sw.WriteLine ("\t\t\t}");
+				}
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+			}
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+			sw.Close ();
+		}
+
+		private void GenVMDeclaration (StreamWriter sw, ClassBase implementor)
+		{
+			VMSignature vmsig = new VMSignature (parms);
+			sw.WriteLine ("\t\t[GLib.DefaultSignalHandler(Type=typeof(" + (implementor != null ? implementor.QualifiedName : container_type.QualifiedName) + "), ConnectionMethod=\"Override" + Name +"\")]");
+			sw.Write ("\t\tprotected ");
+			if (NeedNew (implementor))
+				sw.Write ("new ");
+			sw.WriteLine ("virtual {0} {1} ({2})", retval.CSType, "On" + Name, vmsig.ToString ());
+		}
+
+		private string CastFromInt (string type)
+		{
+			return type != "int" ? "(" + type + ") " : "";
+		}
+
+		private string GlueCallString {
+			get {
+				string result = "Handle";
+
+				for (int i = 1; i < parms.Count; i++) {
+					Parameter p = parms [i];
+					IGeneratable igen = p.Generatable;
+
+					if (i > 1 && parms [i - 1].IsString && p.IsLength && p.PassAs == String.Empty) {
+						string string_name = parms [i - 1].Name;
+						result += ", " + igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" +  string_name + ")");
+						continue;
+					}
+
+					p.CallName = p.Name;
+					string call_parm = p.CallString;
+
+					if (p.IsUserData && parms.IsHidden (p) && !parms.HideData && (i == 1 || parms [i - 1].Scope != "notified")) {
+						call_parm = "IntPtr.Zero"; 
+					}
+
+					result += ", " + call_parm;
+				}
+				return result;
+			}
+		}
+
+		private string GlueSignature {
+			get {
+				string result = String.Empty;
+				for (int i = 0; i < parms.Count; i++)
+					result += parms[i].CType.Replace ("const-", "const ") + " " + parms[i].Name + (i == parms.Count-1 ? "" : ", ");
+				return result;
+			}
+		}
+
+		private string DefaultGlueValue {
+			get {
+				string val = retval.DefaultValue;
+				switch (val) {
+				case "null":
+					return "NULL";
+				case "false":
+					return "FALSE";
+				case "true":
+					return "TRUE";
+				default:
+					return val;
+				}
+			}
+		}
+
+		private void GenGlueVirtualMethod (GenerationInfo gen_info)
+		{
+			StreamWriter glue = gen_info.GlueWriter;
+			string glue_name = String.Format ("{0}sharp_{1}_base_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
+			glue.WriteLine ("{0} {1} ({2});\n", retval.CType, glue_name, GlueSignature);
+			glue.WriteLine ("{0}\n{1} ({2})", retval.CType, glue_name, GlueSignature);
+			glue.WriteLine ("{");
+			glue.WriteLine ("\t{0}Class *klass = ({0}Class *) get_threshold_class (G_OBJECT ({1}));", container_type.CName, parms[0].Name);
+			glue.Write ("\tif (klass->{0})\n\t\t", ClassFieldName);
+			if (!IsVoid)
+				glue.Write ("return ");
+			glue.Write ("(* klass->{0}) (", ClassFieldName);
+			for (int i = 0; i < parms.Count; i++)
+				glue.Write (parms[i].Name + (i == parms.Count - 1 ? "" : ", "));
+			glue.WriteLine (");");
+			if (!IsVoid)
+				glue.WriteLine ("\treturn " + DefaultGlueValue + ";");
+			glue.WriteLine ("}");
+
+			StreamWriter sw = gen_info.Writer;
+			sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
+			sw.WriteLine ("\t\tstatic extern {0} {1} ({2});\n", retval.MarshalType, glue_name, parms.ImportSignature);
+			GenVMDeclaration (sw, null);
+			sw.WriteLine ("\t\t{");
+			MethodBody body = new MethodBody (parms);
+			body.Initialize (gen_info, false, false, String.Empty);
+			sw.WriteLine ("\t\t\t{0}{1} ({2});", IsVoid ? "" : retval.MarshalType + " __ret = ", glue_name, GlueCallString);
+			body.Finish (sw, "");
+			if (!IsVoid)
+				sw.WriteLine ("\t\t\treturn {0};", retval.FromNative ("__ret"));
+			sw.WriteLine ("\t\t}\n");
+		}
+
+		private void GenChainVirtualMethod (StreamWriter sw, ClassBase implementor)
+		{
+			GenVMDeclaration (sw, implementor);
+			sw.WriteLine ("\t\t{");
+			if (IsVoid)
+				sw.WriteLine ("\t\t\tGLib.Value ret = GLib.Value.Empty;");
+			else
+				sw.WriteLine ("\t\t\tGLib.Value ret = new GLib.Value (" + ReturnGType + ");");
+
+			sw.WriteLine ("\t\t\tGLib.ValueArray inst_and_params = new GLib.ValueArray (" + parms.Count + ");");
+			sw.WriteLine ("\t\t\tGLib.Value[] vals = new GLib.Value [" + parms.Count + "];");
+			sw.WriteLine ("\t\t\tvals [0] = new GLib.Value (this);");
+			sw.WriteLine ("\t\t\tinst_and_params.Append (vals [0]);");
+			string cleanup = "";
+			for (int i = 1; i < parms.Count; i++) {
+				Parameter p = parms [i];
+				if (p.PassAs != "") {
+					if (SymbolTable.Table.IsBoxed (p.CType)) {
+						if (p.PassAs == "ref")
+							sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + ");");
+						else
+							sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value ((GLib.GType)typeof (" + p.CSType + "));");
+						cleanup += "\t\t\t" + p.Name + " = (" + p.CSType + ") vals [" + i + "];\n";
+					} else {
+						if (p.PassAs == "ref")
+							sw.WriteLine ("\t\t\tIntPtr " + p.Name + "_ptr = GLib.Marshaller.StructureToPtrAlloc (" + p.Generatable.CallByName (p.Name) + ");");
+						else
+							sw.WriteLine ("\t\t\tIntPtr " + p.Name + "_ptr = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + p.MarshalType + ")));");
+
+						sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + "_ptr);");
+						cleanup += "\t\t\t" + p.Name + " = " + p.FromNative ("(" + p.MarshalType + ") Marshal.PtrToStructure (" + p.Name + "_ptr, typeof (" + p.MarshalType + "))") + ";\n";
+						cleanup += "\t\t\tMarshal.FreeHGlobal (" + p.Name + "_ptr);\n";
+					}
+				} else if (p.IsLength && parms [i - 1].IsString)
+					sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (System.Text.Encoding.UTF8.GetByteCount (" + parms [i-1].Name + "));");
+				else
+					sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + ");");
+
+				sw.WriteLine ("\t\t\tinst_and_params.Append (vals [" + i + "]);");
+			}
+
+			sw.WriteLine ("\t\t\tg_signal_chain_from_overridden (inst_and_params.ArrayPtr, ref ret);");
+			if (cleanup != "")
+				sw.WriteLine (cleanup);
+			sw.WriteLine ("\t\t\tforeach (GLib.Value v in vals)");
+			sw.WriteLine ("\t\t\t\tv.Dispose ();");
+			if (!IsVoid) {
+				IGeneratable igen = SymbolTable.Table [retval.CType];
+				sw.WriteLine ("\t\t\t" + retval.CSType + " result = (" + (igen is EnumGen ? retval.CSType + ") (Enum" : retval.CSType) + ") ret;");
+				sw.WriteLine ("\t\t\tret.Dispose ();");
+				sw.WriteLine ("\t\t\treturn result;");
+			}
+			sw.WriteLine ("\t\t}\n");
+		}
+
+		private void GenDefaultHandlerDelegate (GenerationInfo gen_info, ClassBase implementor)
+		{
+			StreamWriter sw = gen_info.Writer;
+			StreamWriter glue;
+			bool use_glue = gen_info.GlueEnabled && implementor == null && ClassFieldName.Length > 0;
+			string glue_name = String.Empty;
+			ManagedCallString call = new ManagedCallString (parms, true);
+			sw.WriteLine ("\t\t[GLib.CDeclCallback]");
+			sw.WriteLine ("\t\tdelegate " + retval.ToNativeType + " " + Name + "VMDelegate (" + parms.ImportSignature + ");\n");
+
+			if (use_glue) {
+				glue = gen_info.GlueWriter;
+				glue_name = String.Format ("{0}sharp_{1}_override_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
+				sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
+				sw.WriteLine ("\t\tstatic extern void {0} (IntPtr gtype, {1}VMDelegate cb);\n", glue_name, Name);
+				glue.WriteLine ("void {0} (GType gtype, gpointer cb);\n", glue_name);
+				glue.WriteLine ("void\n{0} (GType gtype, gpointer cb)", glue_name);
+				glue.WriteLine ("{");
+				glue.WriteLine ("\tGObjectClass *klass = g_type_class_peek (gtype);");
+				glue.WriteLine ("\tif (klass == NULL)");
+				glue.WriteLine ("\t\tklass = g_type_class_ref (gtype);");
+				glue.WriteLine ("\t(({0} *)klass)->{1} = cb;", container_type.CName + "Class", ClassFieldName);
+				glue.WriteLine ("}\n");
+			}
+
+			sw.WriteLine ("\t\tstatic {0} {1};\n", Name + "VMDelegate", Name + "VMCallback");
+			sw.WriteLine ("\t\tstatic " + retval.ToNativeType + " " + Name.ToLower() + "_cb (" + parms.ImportSignature + ")");
+			sw.WriteLine ("\t\t{");
+			string unconditional = call.Unconditional ("\t\t\t");
+			if (unconditional.Length > 0)
+				sw.WriteLine (unconditional);
+			sw.WriteLine ("\t\t\ttry {");
+			sw.WriteLine ("\t\t\t\t{0} {1}_managed = GLib.Object.GetObject ({1}, false) as {0};", implementor != null ? implementor.Name : container_type.Name, parms[0].Name);
+			sw.Write (call.Setup ("\t\t\t\t"));
+			sw.Write ("\t\t\t\t{0}", IsVoid ? "" : retval.CSType == retval.ToNativeType ? "return " : retval.CSType + " raw_ret = ");
+			sw.WriteLine ("{2}_managed.{0} ({1});", "On" + Name, call.ToString (), parms[0].Name);
+			sw.Write (call.Finish ("\t\t\t\t"));
+			if (!IsVoid && retval.CSType != retval.ToNativeType)
+				sw.WriteLine ("\t\t\t\treturn {0};", SymbolTable.Table.ToNativeReturn (retval.CType, "raw_ret"));
+			sw.WriteLine ("\t\t\t} catch (Exception e) {");
+			bool fatal = HasOutParams || !IsVoid;
+			sw.WriteLine ("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, " + (fatal ? "true" : "false") + ");");
+			if (fatal) {
+				sw.WriteLine ("\t\t\t\t// NOTREACHED: above call doesn't return");
+				sw.WriteLine ("\t\t\t\tthrow e;");
+			}
+			sw.WriteLine ("\t\t\t}");
+			sw.WriteLine ("\t\t}\n");
+			sw.WriteLine ("\t\tprivate static void Override" + Name + " (GLib.GType gtype)");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tif (" + Name + "VMCallback == null)");
+			sw.WriteLine ("\t\t\t\t" + Name + "VMCallback = new " + Name + "VMDelegate (" + Name.ToLower() + "_cb);");
+			if (use_glue)
+				sw.WriteLine ("\t\t\t{0} (gtype.Val, {1}VMCallback);", glue_name, Name);
+			else
+				sw.WriteLine ("\t\t\tOverrideVirtualMethod (gtype, " + CName + ", " + Name + "VMCallback);");
+			sw.WriteLine ("\t\t}\n");
+		}
+
+		public void GenEvent (StreamWriter sw, ClassBase implementor, string target)
+		{
+			string args_type = IsEventHandler ? "" : ", typeof (" + EventArgsQualifiedName + ")";
+			
+			if (Marshaled) {
+				GenCallback (sw);
+				args_type = ", new " + DelegateName + "(" + CallbackName + ")";
+			}
+
+			sw.WriteLine("\t\t[GLib.Signal("+ CName + ")]");
+			sw.Write("\t\tpublic ");
+			if (NeedNew (implementor))
+				sw.Write("new ");
+			sw.WriteLine("event " + EventHandlerQualifiedName + " " + Name + " {");
+			sw.WriteLine("\t\t\tadd {");
+			sw.WriteLine("\t\t\t\tGLib.Signal sig = GLib.Signal.Lookup (" + target + ", " + CName + args_type + ");");
+			sw.WriteLine("\t\t\t\tsig.AddDelegate (value);");
+			sw.WriteLine("\t\t\t}");
+			sw.WriteLine("\t\t\tremove {");
+			sw.WriteLine("\t\t\t\tGLib.Signal sig = GLib.Signal.Lookup (" + target + ", " + CName + args_type + ");");
+			sw.WriteLine("\t\t\t\tsig.RemoveDelegate (value);");
+			sw.WriteLine("\t\t\t}");
+			sw.WriteLine("\t\t}");
+			sw.WriteLine();
+		}
+
+		public void Generate (GenerationInfo gen_info, ClassBase implementor)
+		{
+			StreamWriter sw = gen_info.Writer;
+
+			if (implementor == null)
+				GenEventHandler (gen_info);
+
+			GenDefaultHandlerDelegate (gen_info, implementor);
+			if (gen_info.GlueEnabled && implementor == null && ClassFieldName.Length > 0)
+				GenGlueVirtualMethod (gen_info);
+			else
+				GenChainVirtualMethod (sw, implementor);
+			GenEvent (sw, implementor, "this");
+			
+			Statistics.SignalCount++;
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/Signature.cs b/lib/gio-sharp/generator/Signature.cs
index ff9f4bd..1b01234 100644
--- a/lib/gio-sharp/generator/Signature.cs
+++ b/lib/gio-sharp/generator/Signature.cs
@@ -1,123 +1,123 @@
-// GtkSharp.Generation.Signature.cs - The Signature Generation Class.
-//
-// Author: Mike Kestner <mkestner ximian com>
-//
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.Xml;
-
-	public class Signature  {
-		
-		private ArrayList parms = new ArrayList ();
-
-		public Signature (Parameters parms) 
-		{
-			foreach (Parameter p in parms) {
-				if (!parms.IsHidden (p))
-					this.parms.Add (p);
-			}
-		}
-
-		public override string ToString ()
-		{
-			if (parms.Count == 0)
-				return "";
-
-			string[] result = new string [parms.Count];
-			int i = 0;
-
-			foreach (Parameter p in parms) {
-				result [i] = p.PassAs != "" ? p.PassAs + " " : "";
-				result [i++] += p.CSType + " " + p.Name;
-			}
-
-			return String.Join (", ", result);
-		}
-
-		public string Types {
-			get {
-				if (parms.Count == 0)
-					return "";
-
-				string[] result = new string [parms.Count];
-				int i = 0;
-
-				foreach (Parameter p in parms)
-					result [i++] = p.CSType;
-
-				return String.Join (":", result);
-			}
-		}
-
-		public bool IsAccessor {
-			get {
-				int count = 0;
-				foreach (Parameter p in parms) {
-					if (p.PassAs == "out")
-						count++;
-					
-					if (count > 1)
-						return false;
-				}
-				return count == 1;
-			}
-		}
-
-		public string AccessorType {
-			get {
-				foreach (Parameter p in parms) 
-					if (p.PassAs == "out")
-						return p.CSType;
-				
-				return null;
-			}
-		}
-
-		public string AccessorName {
-			get {
-				foreach (Parameter p in parms) 
-					if (p.PassAs == "out")
-						return p.Name;
-				
-				return null;
-			}
-		}
-
-		public string AsAccessor {
-			get {
-				string[] result = new string [parms.Count - 1];
-				int i = 0;
-
-				foreach (Parameter p in parms) {
-					if (p.PassAs == "out")
-						continue;
-
-					result [i] = p.PassAs != "" ? p.PassAs + " " : "";
-					result [i++] += p.CSType + " " + p.Name;
-				}
-				
-				return String.Join (", ", result);
-			}
-		}
-	}
-}
-
+// GtkSharp.Generation.Signature.cs - The Signature Generation Class.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.Xml;
+
+	public class Signature  {
+		
+		private ArrayList parms = new ArrayList ();
+
+		public Signature (Parameters parms) 
+		{
+			foreach (Parameter p in parms) {
+				if (!parms.IsHidden (p))
+					this.parms.Add (p);
+			}
+		}
+
+		public override string ToString ()
+		{
+			if (parms.Count == 0)
+				return "";
+
+			string[] result = new string [parms.Count];
+			int i = 0;
+
+			foreach (Parameter p in parms) {
+				result [i] = p.PassAs != "" ? p.PassAs + " " : "";
+				result [i++] += p.CSType + " " + p.Name;
+			}
+
+			return String.Join (", ", result);
+		}
+
+		public string Types {
+			get {
+				if (parms.Count == 0)
+					return "";
+
+				string[] result = new string [parms.Count];
+				int i = 0;
+
+				foreach (Parameter p in parms)
+					result [i++] = p.CSType;
+
+				return String.Join (":", result);
+			}
+		}
+
+		public bool IsAccessor {
+			get {
+				int count = 0;
+				foreach (Parameter p in parms) {
+					if (p.PassAs == "out")
+						count++;
+					
+					if (count > 1)
+						return false;
+				}
+				return count == 1;
+			}
+		}
+
+		public string AccessorType {
+			get {
+				foreach (Parameter p in parms) 
+					if (p.PassAs == "out")
+						return p.CSType;
+				
+				return null;
+			}
+		}
+
+		public string AccessorName {
+			get {
+				foreach (Parameter p in parms) 
+					if (p.PassAs == "out")
+						return p.Name;
+				
+				return null;
+			}
+		}
+
+		public string AsAccessor {
+			get {
+				string[] result = new string [parms.Count - 1];
+				int i = 0;
+
+				foreach (Parameter p in parms) {
+					if (p.PassAs == "out")
+						continue;
+
+					result [i] = p.PassAs != "" ? p.PassAs + " " : "";
+					result [i++] += p.CSType + " " + p.Name;
+				}
+				
+				return String.Join (", ", result);
+			}
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/SimpleBase.cs b/lib/gio-sharp/generator/SimpleBase.cs
index 2637b2b..38bfbe3 100644
--- a/lib/gio-sharp/generator/SimpleBase.cs
+++ b/lib/gio-sharp/generator/SimpleBase.cs
@@ -1,121 +1,121 @@
-// GtkSharp.Generation.SimpleBase.cs - base class for marshaling non-generated types.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public abstract class SimpleBase : IGeneratable  {
-		
-		string type;
-		string ctype;
-		string ns = String.Empty;
-		string default_value = String.Empty;
-
-		public SimpleBase (string ctype, string type, string default_value)
-		{
-			string[] toks = type.Split('.');
-			this.ctype = ctype;
-			this.type = toks[toks.Length - 1];
-			if (toks.Length > 2)
-				this.ns = String.Join (".", toks, 0, toks.Length - 1);
-			else if (toks.Length == 2)
-				this.ns = toks[0];
-			this.default_value = default_value;
-		}
-		
-		public string CName {
-			get {
-				return ctype;
-			}
-		}
-
-		public string Name {
-			get {
-				return type;
-			}
-		}
-
-		public string QualifiedName {
-			get {
-				return ns == String.Empty ? type : ns + "." + type;
-			}
-		}
-
-		public virtual string MarshalType {
-			get {
-				return QualifiedName;
-			}
-		}
-
-		public virtual string MarshalReturnType {
-			get {
-				return MarshalType;
-			}
-		}
-
-		public virtual string DefaultValue {
-			get {
-				return default_value;
-			}
-		}
-
-		public virtual string ToNativeReturnType {
-			get {
-				return MarshalType;
-			}
-		}
-
-		public virtual string CallByName (string var)
-		{
-			return var;
-		}
-		
-		public virtual string FromNative(string var)
-		{
-			return var;
-		}
-		
-		public virtual string FromNativeReturn(string var)
-		{
-			return FromNative (var);
-		}
-
-		public virtual string ToNativeReturn(string var)
-		{
-			return CallByName (var);
-		}
-
-		public bool Validate ()
-		{
-			return true;
-		}
-
-		public void Generate ()
-		{
-		}
-		
-		public void Generate (GenerationInfo gen_info)
-		{
-		}
-	}
-}
-
+// GtkSharp.Generation.SimpleBase.cs - base class for marshaling non-generated types.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public abstract class SimpleBase : IGeneratable  {
+		
+		string type;
+		string ctype;
+		string ns = String.Empty;
+		string default_value = String.Empty;
+
+		public SimpleBase (string ctype, string type, string default_value)
+		{
+			string[] toks = type.Split('.');
+			this.ctype = ctype;
+			this.type = toks[toks.Length - 1];
+			if (toks.Length > 2)
+				this.ns = String.Join (".", toks, 0, toks.Length - 1);
+			else if (toks.Length == 2)
+				this.ns = toks[0];
+			this.default_value = default_value;
+		}
+		
+		public string CName {
+			get {
+				return ctype;
+			}
+		}
+
+		public string Name {
+			get {
+				return type;
+			}
+		}
+
+		public string QualifiedName {
+			get {
+				return ns == String.Empty ? type : ns + "." + type;
+			}
+		}
+
+		public virtual string MarshalType {
+			get {
+				return QualifiedName;
+			}
+		}
+
+		public virtual string MarshalReturnType {
+			get {
+				return MarshalType;
+			}
+		}
+
+		public virtual string DefaultValue {
+			get {
+				return default_value;
+			}
+		}
+
+		public virtual string ToNativeReturnType {
+			get {
+				return MarshalType;
+			}
+		}
+
+		public virtual string CallByName (string var)
+		{
+			return var;
+		}
+		
+		public virtual string FromNative(string var)
+		{
+			return var;
+		}
+		
+		public virtual string FromNativeReturn(string var)
+		{
+			return FromNative (var);
+		}
+
+		public virtual string ToNativeReturn(string var)
+		{
+			return CallByName (var);
+		}
+
+		public bool Validate ()
+		{
+			return true;
+		}
+
+		public void Generate ()
+		{
+		}
+		
+		public void Generate (GenerationInfo gen_info)
+		{
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/SimpleGen.cs b/lib/gio-sharp/generator/SimpleGen.cs
index 14554ab..b382135 100644
--- a/lib/gio-sharp/generator/SimpleGen.cs
+++ b/lib/gio-sharp/generator/SimpleGen.cs
@@ -1,31 +1,31 @@
-// GtkSharp.Generation.SimpleGen.cs - The Simple type Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2003 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class SimpleGen : SimpleBase {
-		public SimpleGen (string ctype, string type, string default_value) : base (ctype, type, default_value) {}
-
-	}
-}
-
+// GtkSharp.Generation.SimpleGen.cs - The Simple type Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class SimpleGen : SimpleBase {
+		public SimpleGen (string ctype, string type, string default_value) : base (ctype, type, default_value) {}
+
+	}
+}
+
diff --git a/lib/gio-sharp/generator/Statistics.cs b/lib/gio-sharp/generator/Statistics.cs
index f634185..4545765 100644
--- a/lib/gio-sharp/generator/Statistics.cs
+++ b/lib/gio-sharp/generator/Statistics.cs
@@ -1,197 +1,197 @@
-// Statistics.cs : Generation statistics class implementation
-//
-// Author: Mike Kestner  <mkestner ximian com>
-//
-// Copyright (c) 2002 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-	
-	using System;
-	using System.Collections;
-	
-	public class Statistics {
-		
-		static int cbs = 0;
-		static int enums = 0;
-		static int objects = 0;
-		static int structs = 0;
-		static int boxed = 0;
-		static int opaques = 0;
-		static int interfaces = 0;
-		static int methods = 0;
-		static int ctors = 0;
-		static int props = 0;
-		static int sigs = 0;
-		static int throttled = 0;
-		static int ignored = 0;
-		static bool vm_ignored = false;
-		
-		public static int CBCount {
-			get {
-				return cbs;
-			}
-			set {
-				cbs = value;
-			}
-		}
-
-		public static int EnumCount {
-			get {
-				return enums;
-			}
-			set {
-				enums = value;
-			}
-		}
-
-		public static int ObjectCount {
-			get {
-				return objects;
-			}
-			set {
-				objects = value;
-			}
-		}
-
-		public static int StructCount {
-			get {
-				return structs;
-			}
-			set {
-				structs = value;
-			}
-		}
-
-		public static int BoxedCount {
-			get {
-				return boxed;
-			}
-			set {
-				boxed = value;
-			}
-		}
-
-		public static int OpaqueCount {
-			get {
-				return opaques;
-			}
-			set {
-				opaques = value;
-			}
-		}
-
-		public static int CtorCount {
-			get {
-				return ctors;
-			}
-			set {
-				ctors = value;
-			}
-		}
-		
-		public static int MethodCount {
-			get {
-				return methods;
-			}
-			set {
-				methods = value;
-			}
-		}
-
-		public static int PropCount {
-			get {
-				return props;
-			}
-			set {
-				props = value;
-			}
-		}
-
-		public static int SignalCount {
-			get {
-				return sigs;
-			}
-			set {
-				sigs = value;
-			}
-		}
-
-		public static int IFaceCount {
-			get {
-				return interfaces;
-			}
-			set {
-				interfaces = value;
-			}
-		}
-
-		public static int ThrottledCount {
-			get {
-				return throttled;
-			}
-			set {
-				throttled = value;
-			}
-		}
-		
-		public static int IgnoreCount {
-			get {
-				return ignored;
-			}
-			set {
-				ignored = value;
-			}
-		}
-		
-		public static bool VMIgnored {
-			get {
-				return vm_ignored;
-			}
-			set {
-				if (value)
-					vm_ignored = value;
-			}
-		}
-		
-		public static void Report()
-		{
-			if (VMIgnored) {
-				Console.WriteLine();
-				Console.WriteLine("Warning: Generation throttled for Virtual Methods.");
-				Console.WriteLine("  Consider regenerating with --gluelib-name and --glue-filename.");
-			}
-			Console.WriteLine();
-			Console.WriteLine("Generation Summary:");
-			Console.Write("  Enums: " + enums);
-			Console.Write("  Structs: " + structs);
-			Console.Write("  Boxed: " + boxed);
-			Console.Write("  Opaques: " + opaques);
-			Console.Write("  Interfaces: " + interfaces);
-			Console.Write("  Objects: " + objects);
-			Console.WriteLine("  Callbacks: " + cbs);
-			Console.Write("  Properties: " + props);
-			Console.Write("  Signals: " + sigs);
-			Console.Write("  Methods: " + methods);
-			Console.Write("  Constructors: " + ctors);
-			Console.WriteLine("  Throttled: " + throttled);
-			Console.WriteLine("Total Nodes: " + (enums+structs+boxed+opaques+interfaces+cbs+objects+props+sigs+methods+ctors+throttled));
-			Console.WriteLine();
-		}
-	}
-}
+// Statistics.cs : Generation statistics class implementation
+//
+// Author: Mike Kestner  <mkestner ximian com>
+//
+// Copyright (c) 2002 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+	
+	using System;
+	using System.Collections;
+	
+	public class Statistics {
+		
+		static int cbs = 0;
+		static int enums = 0;
+		static int objects = 0;
+		static int structs = 0;
+		static int boxed = 0;
+		static int opaques = 0;
+		static int interfaces = 0;
+		static int methods = 0;
+		static int ctors = 0;
+		static int props = 0;
+		static int sigs = 0;
+		static int throttled = 0;
+		static int ignored = 0;
+		static bool vm_ignored = false;
+		
+		public static int CBCount {
+			get {
+				return cbs;
+			}
+			set {
+				cbs = value;
+			}
+		}
+
+		public static int EnumCount {
+			get {
+				return enums;
+			}
+			set {
+				enums = value;
+			}
+		}
+
+		public static int ObjectCount {
+			get {
+				return objects;
+			}
+			set {
+				objects = value;
+			}
+		}
+
+		public static int StructCount {
+			get {
+				return structs;
+			}
+			set {
+				structs = value;
+			}
+		}
+
+		public static int BoxedCount {
+			get {
+				return boxed;
+			}
+			set {
+				boxed = value;
+			}
+		}
+
+		public static int OpaqueCount {
+			get {
+				return opaques;
+			}
+			set {
+				opaques = value;
+			}
+		}
+
+		public static int CtorCount {
+			get {
+				return ctors;
+			}
+			set {
+				ctors = value;
+			}
+		}
+		
+		public static int MethodCount {
+			get {
+				return methods;
+			}
+			set {
+				methods = value;
+			}
+		}
+
+		public static int PropCount {
+			get {
+				return props;
+			}
+			set {
+				props = value;
+			}
+		}
+
+		public static int SignalCount {
+			get {
+				return sigs;
+			}
+			set {
+				sigs = value;
+			}
+		}
+
+		public static int IFaceCount {
+			get {
+				return interfaces;
+			}
+			set {
+				interfaces = value;
+			}
+		}
+
+		public static int ThrottledCount {
+			get {
+				return throttled;
+			}
+			set {
+				throttled = value;
+			}
+		}
+		
+		public static int IgnoreCount {
+			get {
+				return ignored;
+			}
+			set {
+				ignored = value;
+			}
+		}
+		
+		public static bool VMIgnored {
+			get {
+				return vm_ignored;
+			}
+			set {
+				if (value)
+					vm_ignored = value;
+			}
+		}
+		
+		public static void Report()
+		{
+			if (VMIgnored) {
+				Console.WriteLine();
+				Console.WriteLine("Warning: Generation throttled for Virtual Methods.");
+				Console.WriteLine("  Consider regenerating with --gluelib-name and --glue-filename.");
+			}
+			Console.WriteLine();
+			Console.WriteLine("Generation Summary:");
+			Console.Write("  Enums: " + enums);
+			Console.Write("  Structs: " + structs);
+			Console.Write("  Boxed: " + boxed);
+			Console.Write("  Opaques: " + opaques);
+			Console.Write("  Interfaces: " + interfaces);
+			Console.Write("  Objects: " + objects);
+			Console.WriteLine("  Callbacks: " + cbs);
+			Console.Write("  Properties: " + props);
+			Console.Write("  Signals: " + sigs);
+			Console.Write("  Methods: " + methods);
+			Console.Write("  Constructors: " + ctors);
+			Console.WriteLine("  Throttled: " + throttled);
+			Console.WriteLine("Total Nodes: " + (enums+structs+boxed+opaques+interfaces+cbs+objects+props+sigs+methods+ctors+throttled));
+			Console.WriteLine();
+		}
+	}
+}
diff --git a/lib/gio-sharp/generator/StructGen.cs b/lib/gio-sharp/generator/StructGen.cs
index f759703..4d615ad 100644
--- a/lib/gio-sharp/generator/StructGen.cs
+++ b/lib/gio-sharp/generator/StructGen.cs
@@ -1,53 +1,53 @@
-// GtkSharp.Generation.StructGen.cs - The Structure Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.IO;
-	using System.Xml;
-
-	public class StructGen : StructBase {
-		
-		public StructGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
-		
-		public override void Generate (GenerationInfo gen_info)
-		{
-			gen_info.CurrentType = Name;
-
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
-			base.Generate (gen_info);
-			if (GetMethod ("GetType") == null && GetMethod ("GetGType") == null) {
-				sw.WriteLine ("\t\tprivate static GLib.GType GType {");
-				sw.WriteLine ("\t\t\tget { return GLib.GType.Pointer; }");
-				sw.WriteLine ("\t\t}");
-			}
-			sw.WriteLine ("#endregion");
-			AppendCustom (sw, gen_info.CustomDir);
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-			sw.Close ();
-			gen_info.Writer = null;
-			Statistics.StructCount++;
-		}
-	}
-}
-
+// GtkSharp.Generation.StructGen.cs - The Structure Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.IO;
+	using System.Xml;
+
+	public class StructGen : StructBase {
+		
+		public StructGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+		
+		public override void Generate (GenerationInfo gen_info)
+		{
+			gen_info.CurrentType = Name;
+
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+			base.Generate (gen_info);
+			if (GetMethod ("GetType") == null && GetMethod ("GetGType") == null) {
+				sw.WriteLine ("\t\tprivate static GLib.GType GType {");
+				sw.WriteLine ("\t\t\tget { return GLib.GType.Pointer; }");
+				sw.WriteLine ("\t\t}");
+			}
+			sw.WriteLine ("#endregion");
+			AppendCustom (sw, gen_info.CustomDir);
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+			sw.Close ();
+			gen_info.Writer = null;
+			Statistics.StructCount++;
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/generator/SymbolTable.cs b/lib/gio-sharp/generator/SymbolTable.cs
index 2d139fe..e10b51f 100644
--- a/lib/gio-sharp/generator/SymbolTable.cs
+++ b/lib/gio-sharp/generator/SymbolTable.cs
@@ -1,412 +1,412 @@
-// GtkSharp.Generation.SymbolTable.cs - The Symbol Table Class.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2004-2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-
-	public class SymbolTable {
-		
-		static SymbolTable table = null;
-
-		Hashtable types = new Hashtable ();
-		
-		public static SymbolTable Table {
-			get {
-				if (table == null)
-					table = new SymbolTable ();
-
-				return table;
-			}
-		}
-
-		public SymbolTable ()
-		{
-			// Simple easily mapped types
-			AddType (new SimpleGen ("void", "void", String.Empty));
-			AddType (new SimpleGen ("gpointer", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("gboolean", "bool", "false"));
-			AddType (new SimpleGen ("gint", "int", "0"));
-			AddType (new SimpleGen ("guint", "uint", "0"));
-			AddType (new SimpleGen ("int", "int", "0"));
-			AddType (new SimpleGen ("unsigned", "uint", "0"));
-			AddType (new SimpleGen ("unsigned int", "uint", "0"));
-			AddType (new SimpleGen ("unsigned-int", "uint", "0"));
-			AddType (new SimpleGen ("gshort", "short", "0"));
-			AddType (new SimpleGen ("gushort", "ushort", "0"));
-			AddType (new SimpleGen ("short", "short", "0"));
-			AddType (new SimpleGen ("guchar", "byte", "0"));
-			AddType (new SimpleGen ("unsigned char", "byte", "0"));
-			AddType (new SimpleGen ("unsigned-char", "byte", "0"));
-			AddType (new SimpleGen ("guint1", "bool", "false"));
-			AddType (new SimpleGen ("uint1", "bool", "false"));
-			AddType (new SimpleGen ("gint8", "sbyte", "0"));
-			AddType (new SimpleGen ("guint8", "byte", "0"));
-			AddType (new SimpleGen ("gint16", "short", "0"));
-			AddType (new SimpleGen ("guint16", "ushort", "0"));
-			AddType (new SimpleGen ("gint32", "int", "0"));
-			AddType (new SimpleGen ("guint32", "uint", "0"));
-			AddType (new SimpleGen ("gint64", "long", "0"));
-			AddType (new SimpleGen ("guint64", "ulong", "0"));
-			AddType (new SimpleGen ("long long", "long", "0"));
-			AddType (new SimpleGen ("gfloat", "float", "0.0"));
-			AddType (new SimpleGen ("float", "float", "0.0"));
-			AddType (new SimpleGen ("gdouble", "double", "0.0"));
-			AddType (new SimpleGen ("double", "double", "0.0"));
-			AddType (new SimpleGen ("goffset", "long", "0"));
-			AddType (new SimpleGen ("GQuark", "int", "0"));
-
-			// platform specific integer types.
-#if WIN64LONGS
-			AddType (new SimpleGen ("long", "int", "0"));
-			AddType (new SimpleGen ("glong", "int", "0"));
-			AddType (new SimpleGen ("ulong", "uint", "0"));
-			AddType (new SimpleGen ("gulong", "uint", "0"));
-			AddType (new SimpleGen ("unsigned long", "uint", "0"));
-#else
-			AddType (new LPGen ("long"));
-			AddType (new LPGen ("glong"));
-			AddType (new LPUGen ("ulong"));
-			AddType (new LPUGen ("gulong"));
-			AddType (new LPUGen ("unsigned long"));
-#endif
-
-			AddType (new LPGen ("ssize_t"));
-			AddType (new LPGen ("gssize"));
-			AddType (new LPUGen ("size_t"));
-			AddType (new LPUGen ("gsize"));
-
-#if OFF_T_8
-			AddType (new AliasGen ("off_t", "long"));
-#else
-			AddType (new LPGen ("off_t"));
-#endif
-
-			// string types
-			AddType (new ConstStringGen ("const-gchar"));
-			AddType (new ConstStringGen ("const-xmlChar"));
-			AddType (new ConstStringGen ("const-char"));
-			AddType (new ConstFilenameGen ("const-gfilename"));
-			AddType (new MarshalGen ("gfilename", "string", "IntPtr", "GLib.Marshaller.StringToFilenamePtr({0})", "GLib.Marshaller.FilenamePtrToStringGFree({0})"));
-			AddType (new MarshalGen ("gchar", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
-			AddType (new MarshalGen ("char", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
-			AddType (new SimpleGen ("GStrv", "string[]", "null"));
-
-			// manually wrapped types requiring more complex marshaling
-			AddType (new ManualGen ("GInitiallyUnowned", "GLib.InitiallyUnowned", "GLib.Object.GetObject ({0})"));
-			AddType (new ManualGen ("GObject", "GLib.Object", "GLib.Object.GetObject ({0})"));
-			AddType (new ManualGen ("GList", "GLib.List"));
-			AddType (new ManualGen ("GPtrArray", "GLib.PtrArray"));
-			AddType (new ManualGen ("GSList", "GLib.SList"));
-			AddType (new MarshalGen ("gunichar", "char", "uint", "GLib.Marshaller.CharToGUnichar ({0})", "GLib.Marshaller.GUnicharToChar ({0})"));
-			AddType (new MarshalGen ("time_t", "System.DateTime", "IntPtr", "GLib.Marshaller.DateTimeTotime_t ({0})", "GLib.Marshaller.time_tToDateTime ({0})"));
-			AddType (new MarshalGen ("GString", "string", "IntPtr", "new GLib.GString ({0}).Handle", "GLib.GString.PtrToString ({0})"));
-			AddType (new MarshalGen ("GType", "GLib.GType", "IntPtr", "{0}.Val", "new GLib.GType({0})"));
-			AddType (new ByRefGen ("GValue", "GLib.Value"));
-			AddType (new SimpleGen ("GDestroyNotify", "GLib.DestroyNotify", "null"));
-
-			// FIXME: These ought to be handled properly.
-			AddType (new SimpleGen ("GC", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GError", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GMemChunk", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GTimeVal", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GClosure", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GArray", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GByteArray", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GData", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GIOChannel", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GTypeModule", "GLib.Object", "null"));
-			AddType (new SimpleGen ("GHashTable", "System.IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("va_list", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GParamSpec", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("gconstpointer", "IntPtr", "IntPtr.Zero"));
-		}
-		
-		public void AddType (IGeneratable gen)
-		{
-			types [gen.CName] = gen;
-		}
-		
-		public void AddTypes (IGeneratable[] gens)
-		{
-			foreach (IGeneratable gen in gens)
-				types [gen.CName] = gen;
-		}
-		
-		public int Count {
-			get
-			{
-				return types.Count;
-			}
-		}
-		
-		public IEnumerable Generatables {
-			get {
-				return types.Values;
-			}
-		}
-		
-		public IGeneratable this [string ctype] {
-			get {
-				return DeAlias (ctype) as IGeneratable;
-			}
-		}
-
-		private bool IsConstString (string type)
-		{
-			switch (type) {
-			case "const-gchar":
-			case "const-char":
-			case "const-xmlChar":
-			case "const-gfilename":
-				return true;
-			default:
-				return false;
-			}
-		}
-
-		private string Trim(string type)
-		{
-			// HACK: If we don't detect this here, there is no
-			// way of indicating it in the symbol table
-			if (type == "void*" || type == "const-void*") return "gpointer";
-
-			string trim_type = type.TrimEnd('*');
-
-			if (IsConstString (trim_type))
-				return trim_type;
-			
-			if (trim_type.StartsWith("const-")) return trim_type.Substring(6);
-			return trim_type;
-		}
-
-		private object DeAlias (string type)
-		{
-			type = Trim (type);
-			while (types [type] is AliasGen) {
-				IGeneratable igen = types [type] as AliasGen;
-				types [type] = types [igen.Name];
-				type = igen.Name;
-			}
-
-			return types [type];
-		}
-
-		public string FromNativeReturn(string c_type, string val)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.FromNativeReturn (val);
-		}
-		
-		public string ToNativeReturn(string c_type, string val)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.ToNativeReturn (val);
-		}
-
-		public string FromNative(string c_type, string val)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.FromNative (val);
-		}
-
-		public string GetCSType(string c_type)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.QualifiedName;
-		}
-		
-		public string GetName(string c_type)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.Name;
-		}
-		
-		public string GetMarshalReturnType(string c_type)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.MarshalReturnType;
-		}
-		
-		public string GetToNativeReturnType(string c_type)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.ToNativeReturnType;
-		}
-		
-		public string GetMarshalType(string c_type)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.MarshalType;
-		}
-		
-		public string CallByName(string c_type, string var_name)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.CallByName(var_name);
-		}
-	
-		public bool IsOpaque(string c_type)
-		{
-			if (this[c_type] is OpaqueGen)
-				return true;
-
-			return false;
-		}
-	
-		public bool IsBoxed(string c_type)
-		{
-			if (this[c_type] is BoxedGen)
-				return true;
-
-			return false;
-		}
-		
-		public bool IsStruct(string c_type)
-		{
-			if (this[c_type] is StructGen)
-				return true;
-
-			return false;
-		}
-	
-		public bool IsEnum(string c_type)
-		{
-			if (this[c_type] is EnumGen)
-				return true;
-
-			return false;
-		}
-	
-		public bool IsEnumFlags(string c_type)
-		{
-			EnumGen gen = this [c_type] as EnumGen;
-			return (gen != null && gen.Elem.GetAttribute ("type") == "flags");
-		}
-	
-		public bool IsInterface(string c_type)
-		{
-			if (this[c_type] is InterfaceGen)
-				return true;
-
-			return false;
-		}
-		
-		public ClassBase GetClassGen(string c_type)
-		{
-			return this[c_type] as ClassBase;
-		}
-			
-		public bool IsObject(string c_type)
-		{
-			if (this[c_type] is ObjectGen)
-				return true;
-
-			return false;
-		}
-
-		public bool IsCallback(string c_type)
-		{
-			if (this[c_type] is CallbackGen)
-				return true;
-
-			return false;
-		}
-
-		public bool IsManuallyWrapped(string c_type)
-		{
-			if (this[c_type] is ManualGen)
-				return true;
-
-			return false;
-		}
-
-		public string MangleName(string name)
-		{
-			switch (name) {
-			case "string":
-				return "str1ng";
-			case "event":
-				return "evnt";
-			case "null":
-				return "is_null";
-			case "object":
-				return "objekt";
-			case "params":
-				return "parms";
-			case "ref":
-				return "reference";
-			case "in":
-				return "in_param";
-			case "out":
-				return "out_param";
-			case "fixed":
-				return "mfixed";
-			case "byte":
-				return "_byte";
-			case "new":
-				return "_new";
-			case "base":
-				return "_base";
-			case "lock":
-				return "_lock";
-			case "callback":
-				return "cb";
-			case "readonly":
-				return "read_only";
-			case "interface":
-				return "iface";
-			case "internal":
-				return "_internal";
-			case "where":
-				return "wh3r3";
-			case "foreach":
-				return "for_each";
-			case "remove":
-				return "_remove";
-			default:
-				break;
-			}
-
-			return name;
-		}
-	}
-}
+// GtkSharp.Generation.SymbolTable.cs - The Symbol Table Class.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+
+	public class SymbolTable {
+		
+		static SymbolTable table = null;
+
+		Hashtable types = new Hashtable ();
+		
+		public static SymbolTable Table {
+			get {
+				if (table == null)
+					table = new SymbolTable ();
+
+				return table;
+			}
+		}
+
+		public SymbolTable ()
+		{
+			// Simple easily mapped types
+			AddType (new SimpleGen ("void", "void", String.Empty));
+			AddType (new SimpleGen ("gpointer", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("gboolean", "bool", "false"));
+			AddType (new SimpleGen ("gint", "int", "0"));
+			AddType (new SimpleGen ("guint", "uint", "0"));
+			AddType (new SimpleGen ("int", "int", "0"));
+			AddType (new SimpleGen ("unsigned", "uint", "0"));
+			AddType (new SimpleGen ("unsigned int", "uint", "0"));
+			AddType (new SimpleGen ("unsigned-int", "uint", "0"));
+			AddType (new SimpleGen ("gshort", "short", "0"));
+			AddType (new SimpleGen ("gushort", "ushort", "0"));
+			AddType (new SimpleGen ("short", "short", "0"));
+			AddType (new SimpleGen ("guchar", "byte", "0"));
+			AddType (new SimpleGen ("unsigned char", "byte", "0"));
+			AddType (new SimpleGen ("unsigned-char", "byte", "0"));
+			AddType (new SimpleGen ("guint1", "bool", "false"));
+			AddType (new SimpleGen ("uint1", "bool", "false"));
+			AddType (new SimpleGen ("gint8", "sbyte", "0"));
+			AddType (new SimpleGen ("guint8", "byte", "0"));
+			AddType (new SimpleGen ("gint16", "short", "0"));
+			AddType (new SimpleGen ("guint16", "ushort", "0"));
+			AddType (new SimpleGen ("gint32", "int", "0"));
+			AddType (new SimpleGen ("guint32", "uint", "0"));
+			AddType (new SimpleGen ("gint64", "long", "0"));
+			AddType (new SimpleGen ("guint64", "ulong", "0"));
+			AddType (new SimpleGen ("long long", "long", "0"));
+			AddType (new SimpleGen ("gfloat", "float", "0.0"));
+			AddType (new SimpleGen ("float", "float", "0.0"));
+			AddType (new SimpleGen ("gdouble", "double", "0.0"));
+			AddType (new SimpleGen ("double", "double", "0.0"));
+			AddType (new SimpleGen ("goffset", "long", "0"));
+			AddType (new SimpleGen ("GQuark", "int", "0"));
+
+			// platform specific integer types.
+#if WIN64LONGS
+			AddType (new SimpleGen ("long", "int", "0"));
+			AddType (new SimpleGen ("glong", "int", "0"));
+			AddType (new SimpleGen ("ulong", "uint", "0"));
+			AddType (new SimpleGen ("gulong", "uint", "0"));
+			AddType (new SimpleGen ("unsigned long", "uint", "0"));
+#else
+			AddType (new LPGen ("long"));
+			AddType (new LPGen ("glong"));
+			AddType (new LPUGen ("ulong"));
+			AddType (new LPUGen ("gulong"));
+			AddType (new LPUGen ("unsigned long"));
+#endif
+
+			AddType (new LPGen ("ssize_t"));
+			AddType (new LPGen ("gssize"));
+			AddType (new LPUGen ("size_t"));
+			AddType (new LPUGen ("gsize"));
+
+#if OFF_T_8
+			AddType (new AliasGen ("off_t", "long"));
+#else
+			AddType (new LPGen ("off_t"));
+#endif
+
+			// string types
+			AddType (new ConstStringGen ("const-gchar"));
+			AddType (new ConstStringGen ("const-xmlChar"));
+			AddType (new ConstStringGen ("const-char"));
+			AddType (new ConstFilenameGen ("const-gfilename"));
+			AddType (new MarshalGen ("gfilename", "string", "IntPtr", "GLib.Marshaller.StringToFilenamePtr({0})", "GLib.Marshaller.FilenamePtrToStringGFree({0})"));
+			AddType (new MarshalGen ("gchar", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
+			AddType (new MarshalGen ("char", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
+			AddType (new SimpleGen ("GStrv", "string[]", "null"));
+
+			// manually wrapped types requiring more complex marshaling
+			AddType (new ManualGen ("GInitiallyUnowned", "GLib.InitiallyUnowned", "GLib.Object.GetObject ({0})"));
+			AddType (new ManualGen ("GObject", "GLib.Object", "GLib.Object.GetObject ({0})"));
+			AddType (new ManualGen ("GList", "GLib.List"));
+			AddType (new ManualGen ("GPtrArray", "GLib.PtrArray"));
+			AddType (new ManualGen ("GSList", "GLib.SList"));
+			AddType (new MarshalGen ("gunichar", "char", "uint", "GLib.Marshaller.CharToGUnichar ({0})", "GLib.Marshaller.GUnicharToChar ({0})"));
+			AddType (new MarshalGen ("time_t", "System.DateTime", "IntPtr", "GLib.Marshaller.DateTimeTotime_t ({0})", "GLib.Marshaller.time_tToDateTime ({0})"));
+			AddType (new MarshalGen ("GString", "string", "IntPtr", "new GLib.GString ({0}).Handle", "GLib.GString.PtrToString ({0})"));
+			AddType (new MarshalGen ("GType", "GLib.GType", "IntPtr", "{0}.Val", "new GLib.GType({0})"));
+			AddType (new ByRefGen ("GValue", "GLib.Value"));
+			AddType (new SimpleGen ("GDestroyNotify", "GLib.DestroyNotify", "null"));
+
+			// FIXME: These ought to be handled properly.
+			AddType (new SimpleGen ("GC", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GError", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GMemChunk", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GTimeVal", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GClosure", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GArray", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GByteArray", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GData", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GIOChannel", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GTypeModule", "GLib.Object", "null"));
+			AddType (new SimpleGen ("GHashTable", "System.IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("va_list", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GParamSpec", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("gconstpointer", "IntPtr", "IntPtr.Zero"));
+		}
+		
+		public void AddType (IGeneratable gen)
+		{
+			types [gen.CName] = gen;
+		}
+		
+		public void AddTypes (IGeneratable[] gens)
+		{
+			foreach (IGeneratable gen in gens)
+				types [gen.CName] = gen;
+		}
+		
+		public int Count {
+			get
+			{
+				return types.Count;
+			}
+		}
+		
+		public IEnumerable Generatables {
+			get {
+				return types.Values;
+			}
+		}
+		
+		public IGeneratable this [string ctype] {
+			get {
+				return DeAlias (ctype) as IGeneratable;
+			}
+		}
+
+		private bool IsConstString (string type)
+		{
+			switch (type) {
+			case "const-gchar":
+			case "const-char":
+			case "const-xmlChar":
+			case "const-gfilename":
+				return true;
+			default:
+				return false;
+			}
+		}
+
+		private string Trim(string type)
+		{
+			// HACK: If we don't detect this here, there is no
+			// way of indicating it in the symbol table
+			if (type == "void*" || type == "const-void*") return "gpointer";
+
+			string trim_type = type.TrimEnd('*');
+
+			if (IsConstString (trim_type))
+				return trim_type;
+			
+			if (trim_type.StartsWith("const-")) return trim_type.Substring(6);
+			return trim_type;
+		}
+
+		private object DeAlias (string type)
+		{
+			type = Trim (type);
+			while (types [type] is AliasGen) {
+				IGeneratable igen = types [type] as AliasGen;
+				types [type] = types [igen.Name];
+				type = igen.Name;
+			}
+
+			return types [type];
+		}
+
+		public string FromNativeReturn(string c_type, string val)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.FromNativeReturn (val);
+		}
+		
+		public string ToNativeReturn(string c_type, string val)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.ToNativeReturn (val);
+		}
+
+		public string FromNative(string c_type, string val)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.FromNative (val);
+		}
+
+		public string GetCSType(string c_type)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.QualifiedName;
+		}
+		
+		public string GetName(string c_type)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.Name;
+		}
+		
+		public string GetMarshalReturnType(string c_type)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.MarshalReturnType;
+		}
+		
+		public string GetToNativeReturnType(string c_type)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.ToNativeReturnType;
+		}
+		
+		public string GetMarshalType(string c_type)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.MarshalType;
+		}
+		
+		public string CallByName(string c_type, string var_name)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.CallByName(var_name);
+		}
+	
+		public bool IsOpaque(string c_type)
+		{
+			if (this[c_type] is OpaqueGen)
+				return true;
+
+			return false;
+		}
+	
+		public bool IsBoxed(string c_type)
+		{
+			if (this[c_type] is BoxedGen)
+				return true;
+
+			return false;
+		}
+		
+		public bool IsStruct(string c_type)
+		{
+			if (this[c_type] is StructGen)
+				return true;
+
+			return false;
+		}
+	
+		public bool IsEnum(string c_type)
+		{
+			if (this[c_type] is EnumGen)
+				return true;
+
+			return false;
+		}
+	
+		public bool IsEnumFlags(string c_type)
+		{
+			EnumGen gen = this [c_type] as EnumGen;
+			return (gen != null && gen.Elem.GetAttribute ("type") == "flags");
+		}
+	
+		public bool IsInterface(string c_type)
+		{
+			if (this[c_type] is InterfaceGen)
+				return true;
+
+			return false;
+		}
+		
+		public ClassBase GetClassGen(string c_type)
+		{
+			return this[c_type] as ClassBase;
+		}
+			
+		public bool IsObject(string c_type)
+		{
+			if (this[c_type] is ObjectGen)
+				return true;
+
+			return false;
+		}
+
+		public bool IsCallback(string c_type)
+		{
+			if (this[c_type] is CallbackGen)
+				return true;
+
+			return false;
+		}
+
+		public bool IsManuallyWrapped(string c_type)
+		{
+			if (this[c_type] is ManualGen)
+				return true;
+
+			return false;
+		}
+
+		public string MangleName(string name)
+		{
+			switch (name) {
+			case "string":
+				return "str1ng";
+			case "event":
+				return "evnt";
+			case "null":
+				return "is_null";
+			case "object":
+				return "objekt";
+			case "params":
+				return "parms";
+			case "ref":
+				return "reference";
+			case "in":
+				return "in_param";
+			case "out":
+				return "out_param";
+			case "fixed":
+				return "mfixed";
+			case "byte":
+				return "_byte";
+			case "new":
+				return "_new";
+			case "base":
+				return "_base";
+			case "lock":
+				return "_lock";
+			case "callback":
+				return "cb";
+			case "readonly":
+				return "read_only";
+			case "interface":
+				return "iface";
+			case "internal":
+				return "_internal";
+			case "where":
+				return "wh3r3";
+			case "foreach":
+				return "for_each";
+			case "remove":
+				return "_remove";
+			default:
+				break;
+			}
+
+			return name;
+		}
+	}
+}
diff --git a/lib/gio-sharp/generator/VMSignature.cs b/lib/gio-sharp/generator/VMSignature.cs
index 5937c0a..fe0ebf1 100644
--- a/lib/gio-sharp/generator/VMSignature.cs
+++ b/lib/gio-sharp/generator/VMSignature.cs
@@ -1,75 +1,75 @@
-// GtkSharp.Generation.VMSignature.cs - The Virtual Method Signature Generation Class.
-//
-// Author: Mike Kestner <mkestner ximian com>
-//
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.Xml;
-
-	public class VMSignature  {
-		
-		private ArrayList parms = new ArrayList ();
-
-		public VMSignature (Parameters parms) 
-		{
-			bool has_cb = parms.HideData;
-			for (int i = 1; i < parms.Count; i++) {
-				Parameter p = parms [i];
-
-				if (i > 1 && p.IsLength && parms [i - 1].IsString)
-					continue;
-
-				if (p.IsCount && ((i > 1 && parms [i - 1].IsArray) || (i < parms.Count - 1 && parms [i + 1].IsArray)))
-					continue;
-
-				has_cb = has_cb || p.Generatable is CallbackGen;
-				if (p.IsUserData && has_cb) 
-					continue;
-
-				if (p.CType == "GError**")
-					continue;
-
-				if (p.Scope == "notified")
-					i += 2;
-
-				this.parms.Add (p);
-			}
-		}
-
-		public override string ToString ()
-		{
-			if (parms.Count == 0)
-				return "";
-
-			string[] result = new string [parms.Count];
-			int i = 0;
-
-			foreach (Parameter p in parms) {
-				result [i] = p.PassAs != "" ? p.PassAs + " " : "";
-				result [i++] += p.CSType + " " + p.Name;
-			}
-
-			return String.Join (", ", result);
-		}
-	}
-}
-
+// GtkSharp.Generation.VMSignature.cs - The Virtual Method Signature Generation Class.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.Xml;
+
+	public class VMSignature  {
+		
+		private ArrayList parms = new ArrayList ();
+
+		public VMSignature (Parameters parms) 
+		{
+			bool has_cb = parms.HideData;
+			for (int i = 1; i < parms.Count; i++) {
+				Parameter p = parms [i];
+
+				if (i > 1 && p.IsLength && parms [i - 1].IsString)
+					continue;
+
+				if (p.IsCount && ((i > 1 && parms [i - 1].IsArray) || (i < parms.Count - 1 && parms [i + 1].IsArray)))
+					continue;
+
+				has_cb = has_cb || p.Generatable is CallbackGen;
+				if (p.IsUserData && has_cb) 
+					continue;
+
+				if (p.CType == "GError**")
+					continue;
+
+				if (p.Scope == "notified")
+					i += 2;
+
+				this.parms.Add (p);
+			}
+		}
+
+		public override string ToString ()
+		{
+			if (parms.Count == 0)
+				return "";
+
+			string[] result = new string [parms.Count];
+			int i = 0;
+
+			foreach (Parameter p in parms) {
+				result [i] = p.PassAs != "" ? p.PassAs + " " : "";
+				result [i++] += p.CSType + " " + p.Name;
+			}
+
+			return String.Join (", ", result);
+		}
+	}
+}
+
diff --git a/lib/gio-sharp/gio/snk b/lib/gio-sharp/gio/snk
old mode 100644
new mode 100755
diff --git a/lib/unique-sharp/generator/AliasGen.cs b/lib/unique-sharp/generator/AliasGen.cs
index 3134aa7..19911d6 100644
--- a/lib/unique-sharp/generator/AliasGen.cs
+++ b/lib/unique-sharp/generator/AliasGen.cs
@@ -1,30 +1,30 @@
-// GtkSharp.Generation.AliasGen.cs - The Alias type Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2003 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class AliasGen : SimpleBase {
-		
-		public AliasGen (string ctype, string type) : base (ctype, type, String.Empty) {}
-	}
-}
-
+// GtkSharp.Generation.AliasGen.cs - The Alias type Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class AliasGen : SimpleBase {
+		
+		public AliasGen (string ctype, string type) : base (ctype, type, String.Empty) {}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/BoxedGen.cs b/lib/unique-sharp/generator/BoxedGen.cs
index 6f0321d..759868c 100644
--- a/lib/unique-sharp/generator/BoxedGen.cs
+++ b/lib/unique-sharp/generator/BoxedGen.cs
@@ -1,82 +1,82 @@
-// GtkSharp.Generation.BoxedGen.cs - The Boxed Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.IO;
-	using System.Xml;
-
-	public class BoxedGen : StructBase {
-		
-		public BoxedGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
-		
-		public override void Generate (GenerationInfo gen_info)
-		{
-			Method copy = methods["Copy"] as Method;
-			methods.Remove ("Copy");
-			methods.Remove ("Free");
-
-			gen_info.CurrentType = Name;
-
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
-			base.Generate (gen_info);
-			sw.WriteLine ("\t\t[DllImport(\"glibsharpglue-2\")]");
-			sw.WriteLine ("\t\tstatic extern IntPtr glibsharp_value_get_boxed (ref GLib.Value val);");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\t[DllImport(\"glibsharpglue-2\")]");
-			sw.WriteLine ("\t\tstatic extern void glibsharp_value_set_boxed (ref GLib.Value val, ref " + QualifiedName + " boxed);");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tpublic static explicit operator GLib.Value (" + QualifiedName + " boxed)");
-			sw.WriteLine ("\t\t{");
-
-			sw.WriteLine ("\t\t\tGLib.Value val = GLib.Value.Empty;");
-			sw.WriteLine ("\t\t\tval.Init (" + QualifiedName + ".GType);");
-			sw.WriteLine ("\t\t\tglibsharp_value_set_boxed (ref val, ref boxed);");
-			sw.WriteLine ("\t\t\treturn val;");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tpublic static explicit operator " + QualifiedName + " (GLib.Value val)");
-			sw.WriteLine ("\t\t{");
-
-			sw.WriteLine ("\t\t\tIntPtr boxed_ptr = glibsharp_value_get_boxed (ref val);");
-			sw.WriteLine ("\t\t\treturn New (boxed_ptr);");
-			sw.WriteLine ("\t\t}");
-
-			if (copy != null && copy.IsDeprecated) {
-				sw.WriteLine ();
-				sw.WriteLine ("\t\t[Obsolete(\"This is a no-op\")]");
-				sw.WriteLine ("\t\tpublic " + QualifiedName + " Copy() {");
-				sw.WriteLine ("\t\t\treturn this;");
-				sw.WriteLine ("\t\t}");
-			}
-
-			sw.WriteLine ("#endregion");
-                        AppendCustom(sw, gen_info.CustomDir);
-                        sw.WriteLine ("\t}");
-                        sw.WriteLine ("}");
-			sw.Close ();
-			gen_info.Writer = null;
-			Statistics.BoxedCount++;
-		}		
-	}
-}
-
+// GtkSharp.Generation.BoxedGen.cs - The Boxed Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.IO;
+	using System.Xml;
+
+	public class BoxedGen : StructBase {
+		
+		public BoxedGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+		
+		public override void Generate (GenerationInfo gen_info)
+		{
+			Method copy = methods["Copy"] as Method;
+			methods.Remove ("Copy");
+			methods.Remove ("Free");
+
+			gen_info.CurrentType = Name;
+
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+			base.Generate (gen_info);
+			sw.WriteLine ("\t\t[DllImport(\"glibsharpglue-2\")]");
+			sw.WriteLine ("\t\tstatic extern IntPtr glibsharp_value_get_boxed (ref GLib.Value val);");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\t[DllImport(\"glibsharpglue-2\")]");
+			sw.WriteLine ("\t\tstatic extern void glibsharp_value_set_boxed (ref GLib.Value val, ref " + QualifiedName + " boxed);");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tpublic static explicit operator GLib.Value (" + QualifiedName + " boxed)");
+			sw.WriteLine ("\t\t{");
+
+			sw.WriteLine ("\t\t\tGLib.Value val = GLib.Value.Empty;");
+			sw.WriteLine ("\t\t\tval.Init (" + QualifiedName + ".GType);");
+			sw.WriteLine ("\t\t\tglibsharp_value_set_boxed (ref val, ref boxed);");
+			sw.WriteLine ("\t\t\treturn val;");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tpublic static explicit operator " + QualifiedName + " (GLib.Value val)");
+			sw.WriteLine ("\t\t{");
+
+			sw.WriteLine ("\t\t\tIntPtr boxed_ptr = glibsharp_value_get_boxed (ref val);");
+			sw.WriteLine ("\t\t\treturn New (boxed_ptr);");
+			sw.WriteLine ("\t\t}");
+
+			if (copy != null && copy.IsDeprecated) {
+				sw.WriteLine ();
+				sw.WriteLine ("\t\t[Obsolete(\"This is a no-op\")]");
+				sw.WriteLine ("\t\tpublic " + QualifiedName + " Copy() {");
+				sw.WriteLine ("\t\t\treturn this;");
+				sw.WriteLine ("\t\t}");
+			}
+
+			sw.WriteLine ("#endregion");
+                        AppendCustom(sw, gen_info.CustomDir);
+                        sw.WriteLine ("\t}");
+                        sw.WriteLine ("}");
+			sw.Close ();
+			gen_info.Writer = null;
+			Statistics.BoxedCount++;
+		}		
+	}
+}
+
diff --git a/lib/unique-sharp/generator/ByRefGen.cs b/lib/unique-sharp/generator/ByRefGen.cs
index 232c325..7a2641e 100644
--- a/lib/unique-sharp/generator/ByRefGen.cs
+++ b/lib/unique-sharp/generator/ByRefGen.cs
@@ -1,63 +1,63 @@
-// GtkSharp.Generation.ByRefGen.cs - The ByRef type Generatable.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2003 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class ByRefGen : SimpleBase, IManualMarshaler {
-		
-		public ByRefGen (string ctype, string type) : base (ctype, type, type + ".Empty") {}
-		
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-
-		public override string CallByName (string var_name)
-		{
-			return "native_" + var_name;
-		}
-		
-		public string AllocNative ()
-		{
-			return "Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + QualifiedName + ")))";
-		}
-
-		public string AllocNative (string var_name)
-		{
-			return "GLib.Marshaller.StructureToPtrAlloc (" + var_name + ")";
-		}
-
-		public override string FromNative (string var_name)
-		{
-			return String.Format ("({0}) Marshal.PtrToStructure ({1}, typeof ({0}))", QualifiedName, var_name);
-		}
-
-		public string ReleaseNative (string var_name)
-		{
-			return "Marshal.FreeHGlobal (" + var_name + ")";
-		}
-	}
-}
-
+// GtkSharp.Generation.ByRefGen.cs - The ByRef type Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class ByRefGen : SimpleBase, IManualMarshaler {
+		
+		public ByRefGen (string ctype, string type) : base (ctype, type, type + ".Empty") {}
+		
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+
+		public override string CallByName (string var_name)
+		{
+			return "native_" + var_name;
+		}
+		
+		public string AllocNative ()
+		{
+			return "Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + QualifiedName + ")))";
+		}
+
+		public string AllocNative (string var_name)
+		{
+			return "GLib.Marshaller.StructureToPtrAlloc (" + var_name + ")";
+		}
+
+		public override string FromNative (string var_name)
+		{
+			return String.Format ("({0}) Marshal.PtrToStructure ({1}, typeof ({0}))", QualifiedName, var_name);
+		}
+
+		public string ReleaseNative (string var_name)
+		{
+			return "Marshal.FreeHGlobal (" + var_name + ")";
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/ChildProperty.cs b/lib/unique-sharp/generator/ChildProperty.cs
index a3041d0..fe361ed 100644
--- a/lib/unique-sharp/generator/ChildProperty.cs
+++ b/lib/unique-sharp/generator/ChildProperty.cs
@@ -1,45 +1,45 @@
-// GtkSharp.Generation.ChildProperty.cs - GtkContainer child properties
-//
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class ChildProperty : Property {
-
-		public ChildProperty (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
-
-		protected override string PropertyAttribute (string qpname) {
-			return "[Gtk.ChildProperty (" + qpname + ")]";
-		}
-
-		protected override string RawGetter (string qpname) {
-			return "parent.ChildGetProperty (child, " + qpname + ")";
-		}
-
-		protected override string RawSetter (string qpname) {
-			return "parent.ChildSetProperty(child, " + qpname + ", val)";
-		}
-
-	}
-}
-
+// GtkSharp.Generation.ChildProperty.cs - GtkContainer child properties
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class ChildProperty : Property {
+
+		public ChildProperty (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
+
+		protected override string PropertyAttribute (string qpname) {
+			return "[Gtk.ChildProperty (" + qpname + ")]";
+		}
+
+		protected override string RawGetter (string qpname) {
+			return "parent.ChildGetProperty (child, " + qpname + ")";
+		}
+
+		protected override string RawSetter (string qpname) {
+			return "parent.ChildSetProperty(child, " + qpname + ", val)";
+		}
+
+	}
+}
+
diff --git a/lib/unique-sharp/generator/ClassGen.cs b/lib/unique-sharp/generator/ClassGen.cs
index 9f4a2f2..700a27a 100644
--- a/lib/unique-sharp/generator/ClassGen.cs
+++ b/lib/unique-sharp/generator/ClassGen.cs
@@ -1,94 +1,94 @@
-// GtkSharp.Generation.ClassGen.cs - The Class Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Text;
-	using System.Xml;
-
-	public class ClassGen : ClassBase  {
-
-		public ClassGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
-
-		public override string AssignToName {
-			get {
-				return String.Empty;
-			}
-		}
-
-		public override string MarshalType {
-			get {
-				return String.Empty;
-			}
-		}
-
-		public override string CallByName () 
-		{
-			return String.Empty;
-		}
-
-		public override string CallByName (string var) 
-		{
-			return String.Empty;
-		}
-
-		public override string FromNative (string var) 
-		{
-			return String.Empty;
-		}
-
-		public override void Generate (GenerationInfo gen_info)
-		{
-			gen_info.CurrentType = Name;
-
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream(Name);
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
-			sw.WriteLine ();
-
-			sw.WriteLine ("#region Autogenerated code");
-			if (IsDeprecated)
-				sw.WriteLine ("\t[Obsolete]");
-			sw.Write ("\t{0} class " + Name, IsInternal ? "internal" : "public");
-			sw.WriteLine (" {");
-			sw.WriteLine ();
-
-			GenProperties (gen_info, null);
-			GenMethods (gen_info, null, null);
-			
-			sw.WriteLine ("#endregion");
-			AppendCustom(sw, gen_info.CustomDir);
-
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-
-			sw.Close ();
-			gen_info.Writer = null;
-		}
-	}
-}
-
+// GtkSharp.Generation.ClassGen.cs - The Class Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Text;
+	using System.Xml;
+
+	public class ClassGen : ClassBase  {
+
+		public ClassGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+
+		public override string AssignToName {
+			get {
+				return String.Empty;
+			}
+		}
+
+		public override string MarshalType {
+			get {
+				return String.Empty;
+			}
+		}
+
+		public override string CallByName () 
+		{
+			return String.Empty;
+		}
+
+		public override string CallByName (string var) 
+		{
+			return String.Empty;
+		}
+
+		public override string FromNative (string var) 
+		{
+			return String.Empty;
+		}
+
+		public override void Generate (GenerationInfo gen_info)
+		{
+			gen_info.CurrentType = Name;
+
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream(Name);
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+			sw.WriteLine ();
+
+			sw.WriteLine ("#region Autogenerated code");
+			if (IsDeprecated)
+				sw.WriteLine ("\t[Obsolete]");
+			sw.Write ("\t{0} class " + Name, IsInternal ? "internal" : "public");
+			sw.WriteLine (" {");
+			sw.WriteLine ();
+
+			GenProperties (gen_info, null);
+			GenMethods (gen_info, null, null);
+			
+			sw.WriteLine ("#endregion");
+			AppendCustom(sw, gen_info.CustomDir);
+
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+
+			sw.Close ();
+			gen_info.Writer = null;
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/CodeGenerator.cs b/lib/unique-sharp/generator/CodeGenerator.cs
index dfb9526..f45c7a0 100644
--- a/lib/unique-sharp/generator/CodeGenerator.cs
+++ b/lib/unique-sharp/generator/CodeGenerator.cs
@@ -1,122 +1,122 @@
-// GtkSharp.Generation.CodeGenerator.cs - The main code generation engine.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner 
-// Copyright (c) 2003-2004 Novell Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.Xml;
-
-	public class CodeGenerator  {
-
-		public static int Main (string[] args)
-		{
-			if (args.Length < 2) {
-				Console.WriteLine ("Usage: codegen --generate <filename1...>");
-				return 0;
-			}
-
-			bool generate = false;
-			string dir = "";
-			string custom_dir = "";
-			string assembly_name = "";
-			string glue_filename = "";
-			string glue_includes = "";
-			string gluelib_name = "";
-
-			SymbolTable table = SymbolTable.Table;
-			ArrayList gens = new ArrayList ();
-			foreach (string arg in args) {
-				string filename = arg;
-				if (arg == "--generate") {
-					generate = true;
-					continue;
-				} else if (arg == "--include") {
-					generate = false;
-					continue;
-				} else if (arg.StartsWith ("-I:")) {
-					generate = false;
-					filename = filename.Substring (3);
-				} else if (arg.StartsWith ("--outdir=")) {
-					generate = false;
-					dir = arg.Substring (9);
-					continue;
-				} else if (arg.StartsWith ("--customdir=")) {
-					generate = false;
-					custom_dir = arg.Substring (12);
-					continue;
-				} else if (arg.StartsWith ("--assembly-name=")) {
-					generate = false;
-					assembly_name = arg.Substring (16);
-					continue;
-				} else if (arg.StartsWith ("--glue-filename=")) {
-					generate = false;
-					glue_filename = arg.Substring (16);
-					continue;
-				} else if (arg.StartsWith ("--glue-includes=")) {
-					generate = false;
-					glue_includes = arg.Substring (16);
-					continue;
-				} else if (arg.StartsWith ("--gluelib-name=")) {
-					generate = false;
-					gluelib_name = arg.Substring (15);
-					continue;
-				}
-
-				Parser p = new Parser ();
-				IGeneratable[] curr_gens = p.Parse (filename);
-				table.AddTypes (curr_gens);
-				if (generate)
-					gens.AddRange (curr_gens);
-			}
-
-			// Now that everything is loaded, validate all the to-be-
-			// generated generatables and then remove the invalid ones.
-			ArrayList invalids = new ArrayList ();
-			foreach (IGeneratable gen in gens) {
-				if (!gen.Validate ())
-					invalids.Add (gen);
-			}
-			foreach (IGeneratable gen in invalids)
-				gens.Remove (gen);
-
-			GenerationInfo gen_info = null;
-			if (dir != "" || assembly_name != "" || glue_filename != "" || glue_includes != "" || gluelib_name != "")
-				gen_info = new GenerationInfo (dir, custom_dir, assembly_name, glue_filename, glue_includes, gluelib_name);
-			
-			foreach (IGeneratable gen in gens) {
-				if (gen_info == null)
-					gen.Generate ();
-				else
-					gen.Generate (gen_info);
-			}
-
-			ObjectGen.GenerateMappers ();
-
-			if (gen_info != null)
-				gen_info.CloseGlueWriter ();
-
-			Statistics.Report();
-			return 0;
-		}
-	}
-}
+// GtkSharp.Generation.CodeGenerator.cs - The main code generation engine.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner 
+// Copyright (c) 2003-2004 Novell Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.Xml;
+
+	public class CodeGenerator  {
+
+		public static int Main (string[] args)
+		{
+			if (args.Length < 2) {
+				Console.WriteLine ("Usage: codegen --generate <filename1...>");
+				return 0;
+			}
+
+			bool generate = false;
+			string dir = "";
+			string custom_dir = "";
+			string assembly_name = "";
+			string glue_filename = "";
+			string glue_includes = "";
+			string gluelib_name = "";
+
+			SymbolTable table = SymbolTable.Table;
+			ArrayList gens = new ArrayList ();
+			foreach (string arg in args) {
+				string filename = arg;
+				if (arg == "--generate") {
+					generate = true;
+					continue;
+				} else if (arg == "--include") {
+					generate = false;
+					continue;
+				} else if (arg.StartsWith ("-I:")) {
+					generate = false;
+					filename = filename.Substring (3);
+				} else if (arg.StartsWith ("--outdir=")) {
+					generate = false;
+					dir = arg.Substring (9);
+					continue;
+				} else if (arg.StartsWith ("--customdir=")) {
+					generate = false;
+					custom_dir = arg.Substring (12);
+					continue;
+				} else if (arg.StartsWith ("--assembly-name=")) {
+					generate = false;
+					assembly_name = arg.Substring (16);
+					continue;
+				} else if (arg.StartsWith ("--glue-filename=")) {
+					generate = false;
+					glue_filename = arg.Substring (16);
+					continue;
+				} else if (arg.StartsWith ("--glue-includes=")) {
+					generate = false;
+					glue_includes = arg.Substring (16);
+					continue;
+				} else if (arg.StartsWith ("--gluelib-name=")) {
+					generate = false;
+					gluelib_name = arg.Substring (15);
+					continue;
+				}
+
+				Parser p = new Parser ();
+				IGeneratable[] curr_gens = p.Parse (filename);
+				table.AddTypes (curr_gens);
+				if (generate)
+					gens.AddRange (curr_gens);
+			}
+
+			// Now that everything is loaded, validate all the to-be-
+			// generated generatables and then remove the invalid ones.
+			ArrayList invalids = new ArrayList ();
+			foreach (IGeneratable gen in gens) {
+				if (!gen.Validate ())
+					invalids.Add (gen);
+			}
+			foreach (IGeneratable gen in invalids)
+				gens.Remove (gen);
+
+			GenerationInfo gen_info = null;
+			if (dir != "" || assembly_name != "" || glue_filename != "" || glue_includes != "" || gluelib_name != "")
+				gen_info = new GenerationInfo (dir, custom_dir, assembly_name, glue_filename, glue_includes, gluelib_name);
+			
+			foreach (IGeneratable gen in gens) {
+				if (gen_info == null)
+					gen.Generate ();
+				else
+					gen.Generate (gen_info);
+			}
+
+			ObjectGen.GenerateMappers ();
+
+			if (gen_info != null)
+				gen_info.CloseGlueWriter ();
+
+			Statistics.Report();
+			return 0;
+		}
+	}
+}
diff --git a/lib/unique-sharp/generator/ConstFilenameGen.cs b/lib/unique-sharp/generator/ConstFilenameGen.cs
index f094aa1..562ab9c 100644
--- a/lib/unique-sharp/generator/ConstFilenameGen.cs
+++ b/lib/unique-sharp/generator/ConstFilenameGen.cs
@@ -1,52 +1,52 @@
-// ConstFilenameGen.cs - The Const Filename type Generatable.
-//
-// Author:  Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class ConstFilenameGen : SimpleBase, IManualMarshaler {
-		
-		public ConstFilenameGen (string ctype) : base (ctype, "string", "null") {}
-
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-		
-		public override string FromNative (string var)
-		{
-			return "GLib.Marshaller.FilenamePtrToString (" + var + ")";
-		}
-
-		public string AllocNative (string managed_var)
-		{
-			return "GLib.Marshaller.StringToFilenamePtr (" + managed_var + ")";
-		}
-
-		public string ReleaseNative (string native_var)
-		{
-			return "GLib.Marshaller.Free (" + native_var + ")";
-		}
-	}
-}
-
+// ConstFilenameGen.cs - The Const Filename type Generatable.
+//
+// Author:  Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class ConstFilenameGen : SimpleBase, IManualMarshaler {
+		
+		public ConstFilenameGen (string ctype) : base (ctype, "string", "null") {}
+
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+		
+		public override string FromNative (string var)
+		{
+			return "GLib.Marshaller.FilenamePtrToString (" + var + ")";
+		}
+
+		public string AllocNative (string managed_var)
+		{
+			return "GLib.Marshaller.StringToFilenamePtr (" + managed_var + ")";
+		}
+
+		public string ReleaseNative (string native_var)
+		{
+			return "GLib.Marshaller.Free (" + native_var + ")";
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/ConstStringGen.cs b/lib/unique-sharp/generator/ConstStringGen.cs
index adef8d3..70f882e 100644
--- a/lib/unique-sharp/generator/ConstStringGen.cs
+++ b/lib/unique-sharp/generator/ConstStringGen.cs
@@ -1,59 +1,59 @@
-// GtkSharp.Generation.ConstStringGen.cs - The Const String type Generatable.
-//
-// Author: Rachel Hestilow <rachel nullenvoid com>
-//         Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2003 Rachel Hestilow
-// Copyright (c) 2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class ConstStringGen : SimpleBase, IManualMarshaler {
-		
-		public ConstStringGen (string ctype) : base (ctype, "string", "null") {}
-
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-		
-		public override string FromNative (string var)
-		{
-			return "GLib.Marshaller.Utf8PtrToString (" + var + ")";
-		}
-
-		public override string ToNativeReturn (string var)
-		{
-			return "GLib.Marshaller.StringToPtrGStrdup (" + var + ")";
-		}
-
-		public string AllocNative (string managed_var)
-		{
-			return "GLib.Marshaller.StringToPtrGStrdup (" + managed_var + ")";
-		}
-
-		public string ReleaseNative (string native_var)
-		{
-			return "GLib.Marshaller.Free (" + native_var + ")";
-		}
-	}
-}
-
+// GtkSharp.Generation.ConstStringGen.cs - The Const String type Generatable.
+//
+// Author: Rachel Hestilow <rachel nullenvoid com>
+//         Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2003 Rachel Hestilow
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class ConstStringGen : SimpleBase, IManualMarshaler {
+		
+		public ConstStringGen (string ctype) : base (ctype, "string", "null") {}
+
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+		
+		public override string FromNative (string var)
+		{
+			return "GLib.Marshaller.Utf8PtrToString (" + var + ")";
+		}
+
+		public override string ToNativeReturn (string var)
+		{
+			return "GLib.Marshaller.StringToPtrGStrdup (" + var + ")";
+		}
+
+		public string AllocNative (string managed_var)
+		{
+			return "GLib.Marshaller.StringToPtrGStrdup (" + managed_var + ")";
+		}
+
+		public string ReleaseNative (string native_var)
+		{
+			return "GLib.Marshaller.Free (" + native_var + ")";
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/Ctor.cs b/lib/unique-sharp/generator/Ctor.cs
index d6a427e..9d57043 100644
--- a/lib/unique-sharp/generator/Ctor.cs
+++ b/lib/unique-sharp/generator/Ctor.cs
@@ -1,165 +1,165 @@
-// GtkSharp.Generation.Ctor.cs - The Constructor Generation Class.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2004-2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Ctor : MethodBase  {
-
-		private bool preferred;
-		private string name;
-		private bool needs_chaining = false;
-
-		public Ctor (XmlElement elem, ClassBase implementor) : base (elem, implementor) 
-		{
-			if (elem.HasAttribute ("preferred"))
-				preferred = true;
-			if (implementor is ObjectGen)
-				needs_chaining = true;
-			name = implementor.Name;
-		}
-
-		public bool Preferred {
-			get { return preferred; }
-			set { preferred = value; }
-		}
-
-		public string StaticName {
-			get {
-				if (!IsStatic)
-					return String.Empty;
-
-				string[] toks = CName.Substring(CName.IndexOf("new")).Split ('_');
-				string result = String.Empty;
-
-				foreach (string tok in toks)
-					result += tok.Substring(0,1).ToUpper() + tok.Substring(1);
-				return result;
-			}
-		}
-
-		void GenerateImport (StreamWriter sw)
-		{
-			sw.WriteLine("\t\t[DllImport(\"" + LibraryName + "\")]");
-			sw.WriteLine("\t\tstatic extern " + Safety + "IntPtr " + CName + "(" + Parameters.ImportSignature + ");");
-			sw.WriteLine();
-		}
-
-		void GenerateStatic (GenerationInfo gen_info)
-		{
-			StreamWriter sw = gen_info.Writer;
+// GtkSharp.Generation.Ctor.cs - The Constructor Generation Class.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Ctor : MethodBase  {
+
+		private bool preferred;
+		private string name;
+		private bool needs_chaining = false;
+
+		public Ctor (XmlElement elem, ClassBase implementor) : base (elem, implementor) 
+		{
+			if (elem.HasAttribute ("preferred"))
+				preferred = true;
+			if (implementor is ObjectGen)
+				needs_chaining = true;
+			name = implementor.Name;
+		}
+
+		public bool Preferred {
+			get { return preferred; }
+			set { preferred = value; }
+		}
+
+		public string StaticName {
+			get {
+				if (!IsStatic)
+					return String.Empty;
+
+				string[] toks = CName.Substring(CName.IndexOf("new")).Split ('_');
+				string result = String.Empty;
+
+				foreach (string tok in toks)
+					result += tok.Substring(0,1).ToUpper() + tok.Substring(1);
+				return result;
+			}
+		}
+
+		void GenerateImport (StreamWriter sw)
+		{
+			sw.WriteLine("\t\t[DllImport(\"" + LibraryName + "\")]");
+			sw.WriteLine("\t\tstatic extern " + Safety + "IntPtr " + CName + "(" + Parameters.ImportSignature + ");");
+			sw.WriteLine();
+		}
+
+		void GenerateStatic (GenerationInfo gen_info)
+		{
+			StreamWriter sw = gen_info.Writer;
 			sw.WriteLine("\t\t" + Protection + " static " + Safety + Modifiers +  name + " " + StaticName + "(" + Signature + ")");
-			sw.WriteLine("\t\t{");
-
-			Body.Initialize(gen_info, false, false, ""); 
-
-			sw.Write("\t\t\t" + name + " result = ");
-			if (container_type is StructBase)
-				sw.Write ("{0}.New (", name);
-			else
-				sw.Write ("new {0} (", name);
-			sw.WriteLine (CName + "(" + Body.GetCallString (false) + "));");
-			Body.Finish (sw, ""); 
-			Body.HandleException (sw, ""); 
-			sw.WriteLine ("\t\t\treturn result;");
-		}
-
-		public void Generate (GenerationInfo gen_info)
-		{
-			if (!Validate ())
-				return;
-
-			StreamWriter sw = gen_info.Writer;
-			gen_info.CurrentMember = CName;
-
-			GenerateImport (sw);
-			
-			if (IsStatic)
-				GenerateStatic (gen_info);
-			else {
+			sw.WriteLine("\t\t{");
+
+			Body.Initialize(gen_info, false, false, ""); 
+
+			sw.Write("\t\t\t" + name + " result = ");
+			if (container_type is StructBase)
+				sw.Write ("{0}.New (", name);
+			else
+				sw.Write ("new {0} (", name);
+			sw.WriteLine (CName + "(" + Body.GetCallString (false) + "));");
+			Body.Finish (sw, ""); 
+			Body.HandleException (sw, ""); 
+			sw.WriteLine ("\t\t\treturn result;");
+		}
+
+		public void Generate (GenerationInfo gen_info)
+		{
+			if (!Validate ())
+				return;
+
+			StreamWriter sw = gen_info.Writer;
+			gen_info.CurrentMember = CName;
+
+			GenerateImport (sw);
+			
+			if (IsStatic)
+				GenerateStatic (gen_info);
+			else {
 				sw.WriteLine("\t\t{0} {1}{2} ({3}) {4}", Protection, Safety, name, Signature.ToString(), needs_chaining ? ": base (IntPtr.Zero)" : "");
-				sw.WriteLine("\t\t{");
-
-				if (needs_chaining) {
-					sw.WriteLine ("\t\t\tif (GetType () != typeof (" + name + ")) {");
-					
-					if (Parameters.Count == 0) {
-						sw.WriteLine ("\t\t\t\tCreateNativeObject (new string [0], new GLib.Value[0]);");
-						sw.WriteLine ("\t\t\t\treturn;");
-					} else {
-						ArrayList names = new ArrayList ();
-						ArrayList values = new ArrayList ();
-						for (int i = 0; i < Parameters.Count; i++) {
-							Parameter p = Parameters[i];
-							if (container_type.GetPropertyRecursively (p.StudlyName) != null) {
-								names.Add (p.Name);
-								values.Add (p.Name);
-							} else if (p.PropertyName != String.Empty) {
-								names.Add (p.PropertyName);
-								values.Add (p.Name);
-							}
-						}
-
-						if (names.Count == Parameters.Count) {
-							sw.WriteLine ("\t\t\t\tArrayList vals = new ArrayList();");
-							sw.WriteLine ("\t\t\t\tArrayList names = new ArrayList();");
-							for (int i = 0; i < names.Count; i++) {
-								Parameter p = Parameters [i];
-								string indent = "\t\t\t\t";
-								if (p.Generatable is ClassBase && !(p.Generatable is StructBase)) {
-									sw.WriteLine (indent + "if (" + p.Name + " != null) {");
-									indent += "\t";
-								}
-								sw.WriteLine (indent + "names.Add (\"" + names [i] + "\");");
-								sw.WriteLine (indent + "vals.Add (new GLib.Value (" + values[i] + "));");
-
-								if (p.Generatable is ClassBase && !(p.Generatable is StructBase))
-									sw.WriteLine ("\t\t\t\t}");
-							}
-
-							sw.WriteLine ("\t\t\t\tCreateNativeObject ((string[])names.ToArray (typeof (string)), (GLib.Value[])vals.ToArray (typeof (GLib.Value)));");
-							sw.WriteLine ("\t\t\t\treturn;");
-						} else
-							sw.WriteLine ("\t\t\t\tthrow new InvalidOperationException (\"Can't override this constructor.\");");
-					}
-					
-					sw.WriteLine ("\t\t\t}");
-				}
-	
-				Body.Initialize(gen_info, false, false, ""); 
-				sw.WriteLine("\t\t\t{0} = {1}({2});", container_type.AssignToName, CName, Body.GetCallString (false));
-				Body.Finish (sw, "");
-				Body.HandleException (sw, "");
-			}
-			
-			sw.WriteLine("\t\t}");
-			sw.WriteLine();
-			
-			Statistics.CtorCount++;
-		}
-	}
-}
-
+				sw.WriteLine("\t\t{");
+
+				if (needs_chaining) {
+					sw.WriteLine ("\t\t\tif (GetType () != typeof (" + name + ")) {");
+					
+					if (Parameters.Count == 0) {
+						sw.WriteLine ("\t\t\t\tCreateNativeObject (new string [0], new GLib.Value[0]);");
+						sw.WriteLine ("\t\t\t\treturn;");
+					} else {
+						ArrayList names = new ArrayList ();
+						ArrayList values = new ArrayList ();
+						for (int i = 0; i < Parameters.Count; i++) {
+							Parameter p = Parameters[i];
+							if (container_type.GetPropertyRecursively (p.StudlyName) != null) {
+								names.Add (p.Name);
+								values.Add (p.Name);
+							} else if (p.PropertyName != String.Empty) {
+								names.Add (p.PropertyName);
+								values.Add (p.Name);
+							}
+						}
+
+						if (names.Count == Parameters.Count) {
+							sw.WriteLine ("\t\t\t\tArrayList vals = new ArrayList();");
+							sw.WriteLine ("\t\t\t\tArrayList names = new ArrayList();");
+							for (int i = 0; i < names.Count; i++) {
+								Parameter p = Parameters [i];
+								string indent = "\t\t\t\t";
+								if (p.Generatable is ClassBase && !(p.Generatable is StructBase)) {
+									sw.WriteLine (indent + "if (" + p.Name + " != null) {");
+									indent += "\t";
+								}
+								sw.WriteLine (indent + "names.Add (\"" + names [i] + "\");");
+								sw.WriteLine (indent + "vals.Add (new GLib.Value (" + values[i] + "));");
+
+								if (p.Generatable is ClassBase && !(p.Generatable is StructBase))
+									sw.WriteLine ("\t\t\t\t}");
+							}
+
+							sw.WriteLine ("\t\t\t\tCreateNativeObject ((string[])names.ToArray (typeof (string)), (GLib.Value[])vals.ToArray (typeof (GLib.Value)));");
+							sw.WriteLine ("\t\t\t\treturn;");
+						} else
+							sw.WriteLine ("\t\t\t\tthrow new InvalidOperationException (\"Can't override this constructor.\");");
+					}
+					
+					sw.WriteLine ("\t\t\t}");
+				}
+	
+				Body.Initialize(gen_info, false, false, ""); 
+				sw.WriteLine("\t\t\t{0} = {1}({2});", container_type.AssignToName, CName, Body.GetCallString (false));
+				Body.Finish (sw, "");
+				Body.HandleException (sw, "");
+			}
+			
+			sw.WriteLine("\t\t}");
+			sw.WriteLine();
+			
+			Statistics.CtorCount++;
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/EnumGen.cs b/lib/unique-sharp/generator/EnumGen.cs
index 82091f6..fa66af5 100644
--- a/lib/unique-sharp/generator/EnumGen.cs
+++ b/lib/unique-sharp/generator/EnumGen.cs
@@ -1,127 +1,127 @@
-// GtkSharp.Generation.EnumGen.cs - The Enumeration Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class EnumGen : GenBase {
-		
-		string enum_type = String.Empty;
-		ArrayList members = new ArrayList ();
-
-		public EnumGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
-		{
-			foreach (XmlElement member in elem.ChildNodes) {
-				if (member.Name != "member")
-					continue;
-
-				string result = "\t\t" + member.GetAttribute("name");
-				if (member.HasAttribute("value")) {
-					string value = member.GetAttribute("value");
-					if (value.EndsWith("U")) {
-						enum_type = " : uint";
-						value = value.TrimEnd('U');
-					}
-					result += " = " + value;
-				}
-				members.Add (result + ",");
-			}
-		}
-
-		public override bool Validate ()
-		{
-			return true;
-		}
-
-		public override string DefaultValue {
-			get {
-				return "(" + QualifiedName + ") 0";
-			}
-		}
-
-		public override string MarshalType {
-			get {
-				return "int";
-			}
-		}
-
-		public override string CallByName (string var_name)
-		{
-			return "(int) " + var_name;
-		}
-		
-		public override string FromNative(string var)
-		{
-			return "(" + QualifiedName + ") " + var;
-		}
-		
-		public override void Generate (GenerationInfo gen_info)
-		{
-			StreamWriter sw = gen_info.OpenStream (Name);
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
-			sw.WriteLine ();
-
-			sw.WriteLine ("#region Autogenerated code");
-					
-			if (Elem.GetAttribute("type") == "flags")
-				sw.WriteLine ("\t[Flags]");
-			if (Elem.HasAttribute("gtype"))
-				sw.WriteLine ("\t[GLib.GType (typeof (" + NS + "." + Name + "GType))]");
-
-			string access = IsInternal ? "internal" : "public";
-			sw.WriteLine ("\t" + access + " enum " + Name + enum_type + " {");
-			sw.WriteLine ();
-				
-			foreach (string member in members)
-				sw.WriteLine (member);
-
-			sw.WriteLine ("\t}");
-
-			if (Elem.HasAttribute ("gtype")) {
-				sw.WriteLine ();
-				sw.WriteLine ("\tinternal class " + Name + "GType {");
-				sw.WriteLine ("\t\t[DllImport (\"" + LibraryName + "\")]");
-				sw.WriteLine ("\t\tstatic extern IntPtr " + Elem.GetAttribute ("gtype") + " ();");
-				sw.WriteLine ();
-				sw.WriteLine ("\t\tpublic static GLib.GType GType {");
-				sw.WriteLine ("\t\t\tget {");
-				sw.WriteLine ("\t\t\t\treturn new GLib.GType (" + Elem.GetAttribute ("gtype") + " ());");
-				sw.WriteLine ("\t\t\t}");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ("\t}");
-			}
-
-			sw.WriteLine ("#endregion");
-			sw.WriteLine ("}");
-			sw.Close ();
-			Statistics.EnumCount++;
-		}
-	}
-}
-
+// GtkSharp.Generation.EnumGen.cs - The Enumeration Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class EnumGen : GenBase {
+		
+		string enum_type = String.Empty;
+		ArrayList members = new ArrayList ();
+
+		public EnumGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
+		{
+			foreach (XmlElement member in elem.ChildNodes) {
+				if (member.Name != "member")
+					continue;
+
+				string result = "\t\t" + member.GetAttribute("name");
+				if (member.HasAttribute("value")) {
+					string value = member.GetAttribute("value");
+					if (value.EndsWith("U")) {
+						enum_type = " : uint";
+						value = value.TrimEnd('U');
+					}
+					result += " = " + value;
+				}
+				members.Add (result + ",");
+			}
+		}
+
+		public override bool Validate ()
+		{
+			return true;
+		}
+
+		public override string DefaultValue {
+			get {
+				return "(" + QualifiedName + ") 0";
+			}
+		}
+
+		public override string MarshalType {
+			get {
+				return "int";
+			}
+		}
+
+		public override string CallByName (string var_name)
+		{
+			return "(int) " + var_name;
+		}
+		
+		public override string FromNative(string var)
+		{
+			return "(" + QualifiedName + ") " + var;
+		}
+		
+		public override void Generate (GenerationInfo gen_info)
+		{
+			StreamWriter sw = gen_info.OpenStream (Name);
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+			sw.WriteLine ();
+
+			sw.WriteLine ("#region Autogenerated code");
+					
+			if (Elem.GetAttribute("type") == "flags")
+				sw.WriteLine ("\t[Flags]");
+			if (Elem.HasAttribute("gtype"))
+				sw.WriteLine ("\t[GLib.GType (typeof (" + NS + "." + Name + "GType))]");
+
+			string access = IsInternal ? "internal" : "public";
+			sw.WriteLine ("\t" + access + " enum " + Name + enum_type + " {");
+			sw.WriteLine ();
+				
+			foreach (string member in members)
+				sw.WriteLine (member);
+
+			sw.WriteLine ("\t}");
+
+			if (Elem.HasAttribute ("gtype")) {
+				sw.WriteLine ();
+				sw.WriteLine ("\tinternal class " + Name + "GType {");
+				sw.WriteLine ("\t\t[DllImport (\"" + LibraryName + "\")]");
+				sw.WriteLine ("\t\tstatic extern IntPtr " + Elem.GetAttribute ("gtype") + " ();");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\tpublic static GLib.GType GType {");
+				sw.WriteLine ("\t\t\tget {");
+				sw.WriteLine ("\t\t\t\treturn new GLib.GType (" + Elem.GetAttribute ("gtype") + " ());");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ("\t}");
+			}
+
+			sw.WriteLine ("#endregion");
+			sw.WriteLine ("}");
+			sw.Close ();
+			Statistics.EnumCount++;
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/GenBase.cs b/lib/unique-sharp/generator/GenBase.cs
index 5b9219a..db0a004 100644
--- a/lib/unique-sharp/generator/GenBase.cs
+++ b/lib/unique-sharp/generator/GenBase.cs
@@ -1,54 +1,54 @@
-// GtkSharp.Generation.GenBase.cs - The Generatable base class.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2001-2002 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.IO;
-	using System.Xml;
-
-	public abstract class GenBase : IGeneratable {
-		
-		private XmlElement ns;
-		private XmlElement elem;
-
-		protected GenBase (XmlElement ns, XmlElement elem)
-		{
-			this.ns = ns;
-			this.elem = elem;
-		}
-
-		public string CName {
-			get {
-				return elem.GetAttribute ("cname");
-			}
-		}
-
-		public XmlElement Elem {
-			get {
-				return elem;
-			}
-		}
-
+// GtkSharp.Generation.GenBase.cs - The Generatable base class.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001-2002 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.IO;
+	using System.Xml;
+
+	public abstract class GenBase : IGeneratable {
+		
+		private XmlElement ns;
+		private XmlElement elem;
+
+		protected GenBase (XmlElement ns, XmlElement elem)
+		{
+			this.ns = ns;
+			this.elem = elem;
+		}
+
+		public string CName {
+			get {
+				return elem.GetAttribute ("cname");
+			}
+		}
+
+		public XmlElement Elem {
+			get {
+				return elem;
+			}
+		}
+
 		public bool IsInternal {
 			get {
 				if (elem.HasAttribute ("internal")) {
@@ -59,84 +59,84 @@ namespace GtkSharp.Generation {
 			}
 		}
 
-		public string LibraryName {
-			get {
-				return ns.GetAttribute ("library");
-			}
-		}
-
-		public virtual string MarshalReturnType { 
-			get {
-				return MarshalType;
-			}
-		}
-
-		public abstract string MarshalType { get; }
-
-		public string Name {
-			get {
-				return elem.GetAttribute ("name");
-			}
-		}
-
-		public string NS {
-			get {
-				return ns.GetAttribute ("name");
-			}
-		}
-
-		public abstract string DefaultValue { get; }
-
-		public string QualifiedName {
-			get {
-				return NS + "." + Name;
-			}
-		}
-
-		public virtual string ToNativeReturnType { 
-			get {
-				return MarshalType;
-			}
-		}
-
-		protected void AppendCustom (StreamWriter sw, string custom_dir)
-		{
-			char sep = Path.DirectorySeparatorChar;
-			string custom = custom_dir + sep + Name + ".custom";
-			if (File.Exists(custom)) {
-				sw.WriteLine ("#region Customized extensions");
-				sw.WriteLine ("#line 1 \"" + Name + ".custom\"");
-				FileStream custstream = new FileStream(custom, FileMode.Open, FileAccess.Read);
-				StreamReader sr = new StreamReader(custstream);
-				sw.WriteLine (sr.ReadToEnd ());
-				sw.WriteLine ("#endregion");
-				sr.Close ();
-			}
-		}
-
-		public abstract string CallByName (string var);
-
-		public abstract string FromNative (string var);
-
-		public virtual string FromNativeReturn (string var)
-		{
-			return FromNative (var);
-		}
-
-		public virtual string ToNativeReturn (string var)
-		{
-			return CallByName (var);
-		}
-
-		public abstract bool Validate ();
-
-		public void Generate ()
-		{
-			GenerationInfo geninfo = new GenerationInfo (ns);
-			Generate (geninfo);
-		}
-
-		public abstract void Generate (GenerationInfo geninfo);
-	}
-}
-
+		public string LibraryName {
+			get {
+				return ns.GetAttribute ("library");
+			}
+		}
+
+		public virtual string MarshalReturnType { 
+			get {
+				return MarshalType;
+			}
+		}
+
+		public abstract string MarshalType { get; }
+
+		public string Name {
+			get {
+				return elem.GetAttribute ("name");
+			}
+		}
+
+		public string NS {
+			get {
+				return ns.GetAttribute ("name");
+			}
+		}
+
+		public abstract string DefaultValue { get; }
+
+		public string QualifiedName {
+			get {
+				return NS + "." + Name;
+			}
+		}
+
+		public virtual string ToNativeReturnType { 
+			get {
+				return MarshalType;
+			}
+		}
+
+		protected void AppendCustom (StreamWriter sw, string custom_dir)
+		{
+			char sep = Path.DirectorySeparatorChar;
+			string custom = custom_dir + sep + Name + ".custom";
+			if (File.Exists(custom)) {
+				sw.WriteLine ("#region Customized extensions");
+				sw.WriteLine ("#line 1 \"" + Name + ".custom\"");
+				FileStream custstream = new FileStream(custom, FileMode.Open, FileAccess.Read);
+				StreamReader sr = new StreamReader(custstream);
+				sw.WriteLine (sr.ReadToEnd ());
+				sw.WriteLine ("#endregion");
+				sr.Close ();
+			}
+		}
+
+		public abstract string CallByName (string var);
+
+		public abstract string FromNative (string var);
+
+		public virtual string FromNativeReturn (string var)
+		{
+			return FromNative (var);
+		}
+
+		public virtual string ToNativeReturn (string var)
+		{
+			return CallByName (var);
+		}
+
+		public abstract bool Validate ();
+
+		public void Generate ()
+		{
+			GenerationInfo geninfo = new GenerationInfo (ns);
+			Generate (geninfo);
+		}
+
+		public abstract void Generate (GenerationInfo geninfo);
+	}
+}
+
diff --git a/lib/unique-sharp/generator/GenerationInfo.cs b/lib/unique-sharp/generator/GenerationInfo.cs
index 3031c7c..7b7619a 100644
--- a/lib/unique-sharp/generator/GenerationInfo.cs
+++ b/lib/unique-sharp/generator/GenerationInfo.cs
@@ -1,188 +1,188 @@
-// GtkSharp.Generation.GenerationInfo.cs - Generation information class.
-//
-// Author: Mike Kestner <mkestner ximian com>
-//
-// Copyright (c) 2003-2008 Novell Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class GenerationInfo {
-		
-		string dir;
-		string custom_dir;
-		string assembly_name;
-		string gluelib_name;
-		bool glue_enabled;
-		StreamWriter sw;
-		StreamWriter glue_sw;
-
-		public GenerationInfo (XmlElement ns)
-		{
-			string ns_name = ns.GetAttribute ("name");
-			char sep = Path.DirectorySeparatorChar;
-			dir = ".." + sep + ns_name.ToLower () + sep + "generated";
-			custom_dir = ".." + sep + ns_name.ToLower ();
-			assembly_name = ns_name.ToLower () + "-sharp";
-		}
-
-		public GenerationInfo (string dir, string assembly_name) : this (dir, dir, assembly_name, "", "", "") {}
-
-		public GenerationInfo (string dir, string custom_dir, string assembly_name, string glue_filename, string glue_includes, string gluelib_name)
-		{
-			this.dir = dir;
-			this.custom_dir = custom_dir;
-			this.assembly_name = assembly_name;
-			this.gluelib_name = gluelib_name;
-			InitializeGlue (glue_filename, glue_includes, gluelib_name);
-		}
-
-		void InitializeGlue (string glue_filename, string glue_includes, string gluelib_name)
-		{
-			if (gluelib_name != String.Empty && glue_filename != String.Empty) {
-				FileStream stream;
-				try {
-					stream = new FileStream (glue_filename, FileMode.Create, FileAccess.Write);
-				} catch (Exception) {
-					Console.Error.WriteLine ("Unable to create specified glue file.  Glue will not be generated.");
-					return;
-				}
-
-				glue_sw = new StreamWriter (stream);
-			
-				glue_sw.WriteLine ("// This file was generated by the Gtk# code generator.");
-				glue_sw.WriteLine ("// Any changes made will be lost if regenerated.");
-				glue_sw.WriteLine ();
-
-				if (glue_includes != "") {
-					foreach (string header in glue_includes.Split (new char[] {',', ' '})) {
-						if (header != "")
-							glue_sw.WriteLine ("#include <{0}>", header);
-					}
-					glue_sw.WriteLine ("");
-				}
-				glue_sw.WriteLine ("const gchar *__prefix = \"__gtksharp_\";\n");
-				glue_sw.WriteLine ("#define HAS_PREFIX(a) (*((guint64 *)(a)) == *((guint64 *) __prefix))\n");
-				glue_sw.WriteLine ("static GObjectClass *");
-				glue_sw.WriteLine ("get_threshold_class (GObject *obj)");
-				glue_sw.WriteLine ("{");
-				glue_sw.WriteLine ("\tGType gtype = G_TYPE_FROM_INSTANCE (obj);");
-				glue_sw.WriteLine ("\twhile (HAS_PREFIX (g_type_name (gtype)))");
-				glue_sw.WriteLine ("\t\tgtype = g_type_parent (gtype);");
-				glue_sw.WriteLine ("\tGObjectClass *klass = g_type_class_peek (gtype);");
-				glue_sw.WriteLine ("\tif (klass == NULL) klass = g_type_class_ref (gtype);");
-				glue_sw.WriteLine ("\treturn klass;");
-				glue_sw.WriteLine ("}\n");
-				glue_enabled = true;
-			}
-		}
-
-		public string AssemblyName {
-			get {
-				return assembly_name;
-			}
-		}
-
-		public string CustomDir {
-			get {
-				return custom_dir;
-			}
-		}
-
-		public string Dir {
-			get {
-				return dir;
-			}
-		}
-
-		public string GluelibName {
-			get {
-				return gluelib_name;
-			}
-		}
-
-		public bool GlueEnabled {
-			get {
-				return glue_enabled;
-			}
-		}
-
-		public StreamWriter GlueWriter {
-			get {
-				return glue_sw;
-			}
-		}
-
-		public StreamWriter Writer {
-			get {
-				return sw;
-			}
-			set {
-				sw = value;
-			}
-		}
-
-		public void CloseGlueWriter ()
-		{
-			if (glue_sw != null)
-				glue_sw.Close ();
-		}
-
-		string member;
-		public string CurrentMember {
-			get {
-				return typename + "." + member;
-			}
-			set {
-				member = value;
-			}
-		}
-
-		string typename;
-		public string CurrentType {
-			get {
-				return typename;
-			}
-			set {
-				typename = value;
-			}
-		}
-
-		public StreamWriter OpenStream (string name) 
-		{
-			char sep = Path.DirectorySeparatorChar;
-			if (!Directory.Exists(dir))
-				Directory.CreateDirectory(dir);
-			string filename = dir + sep + name + ".cs";
-			
-			FileStream stream = new FileStream (filename, FileMode.Create, FileAccess.Write);
-			StreamWriter sw = new StreamWriter (stream);
-			
-			sw.WriteLine ("// This file was generated by the Gtk# code generator.");
-			sw.WriteLine ("// Any changes made will be lost if regenerated.");
-			sw.WriteLine ();
-
-			return sw;
-		}
-	}
-}
-
+// GtkSharp.Generation.GenerationInfo.cs - Generation information class.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2003-2008 Novell Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class GenerationInfo {
+		
+		string dir;
+		string custom_dir;
+		string assembly_name;
+		string gluelib_name;
+		bool glue_enabled;
+		StreamWriter sw;
+		StreamWriter glue_sw;
+
+		public GenerationInfo (XmlElement ns)
+		{
+			string ns_name = ns.GetAttribute ("name");
+			char sep = Path.DirectorySeparatorChar;
+			dir = ".." + sep + ns_name.ToLower () + sep + "generated";
+			custom_dir = ".." + sep + ns_name.ToLower ();
+			assembly_name = ns_name.ToLower () + "-sharp";
+		}
+
+		public GenerationInfo (string dir, string assembly_name) : this (dir, dir, assembly_name, "", "", "") {}
+
+		public GenerationInfo (string dir, string custom_dir, string assembly_name, string glue_filename, string glue_includes, string gluelib_name)
+		{
+			this.dir = dir;
+			this.custom_dir = custom_dir;
+			this.assembly_name = assembly_name;
+			this.gluelib_name = gluelib_name;
+			InitializeGlue (glue_filename, glue_includes, gluelib_name);
+		}
+
+		void InitializeGlue (string glue_filename, string glue_includes, string gluelib_name)
+		{
+			if (gluelib_name != String.Empty && glue_filename != String.Empty) {
+				FileStream stream;
+				try {
+					stream = new FileStream (glue_filename, FileMode.Create, FileAccess.Write);
+				} catch (Exception) {
+					Console.Error.WriteLine ("Unable to create specified glue file.  Glue will not be generated.");
+					return;
+				}
+
+				glue_sw = new StreamWriter (stream);
+			
+				glue_sw.WriteLine ("// This file was generated by the Gtk# code generator.");
+				glue_sw.WriteLine ("// Any changes made will be lost if regenerated.");
+				glue_sw.WriteLine ();
+
+				if (glue_includes != "") {
+					foreach (string header in glue_includes.Split (new char[] {',', ' '})) {
+						if (header != "")
+							glue_sw.WriteLine ("#include <{0}>", header);
+					}
+					glue_sw.WriteLine ("");
+				}
+				glue_sw.WriteLine ("const gchar *__prefix = \"__gtksharp_\";\n");
+				glue_sw.WriteLine ("#define HAS_PREFIX(a) (*((guint64 *)(a)) == *((guint64 *) __prefix))\n");
+				glue_sw.WriteLine ("static GObjectClass *");
+				glue_sw.WriteLine ("get_threshold_class (GObject *obj)");
+				glue_sw.WriteLine ("{");
+				glue_sw.WriteLine ("\tGType gtype = G_TYPE_FROM_INSTANCE (obj);");
+				glue_sw.WriteLine ("\twhile (HAS_PREFIX (g_type_name (gtype)))");
+				glue_sw.WriteLine ("\t\tgtype = g_type_parent (gtype);");
+				glue_sw.WriteLine ("\tGObjectClass *klass = g_type_class_peek (gtype);");
+				glue_sw.WriteLine ("\tif (klass == NULL) klass = g_type_class_ref (gtype);");
+				glue_sw.WriteLine ("\treturn klass;");
+				glue_sw.WriteLine ("}\n");
+				glue_enabled = true;
+			}
+		}
+
+		public string AssemblyName {
+			get {
+				return assembly_name;
+			}
+		}
+
+		public string CustomDir {
+			get {
+				return custom_dir;
+			}
+		}
+
+		public string Dir {
+			get {
+				return dir;
+			}
+		}
+
+		public string GluelibName {
+			get {
+				return gluelib_name;
+			}
+		}
+
+		public bool GlueEnabled {
+			get {
+				return glue_enabled;
+			}
+		}
+
+		public StreamWriter GlueWriter {
+			get {
+				return glue_sw;
+			}
+		}
+
+		public StreamWriter Writer {
+			get {
+				return sw;
+			}
+			set {
+				sw = value;
+			}
+		}
+
+		public void CloseGlueWriter ()
+		{
+			if (glue_sw != null)
+				glue_sw.Close ();
+		}
+
+		string member;
+		public string CurrentMember {
+			get {
+				return typename + "." + member;
+			}
+			set {
+				member = value;
+			}
+		}
+
+		string typename;
+		public string CurrentType {
+			get {
+				return typename;
+			}
+			set {
+				typename = value;
+			}
+		}
+
+		public StreamWriter OpenStream (string name) 
+		{
+			char sep = Path.DirectorySeparatorChar;
+			if (!Directory.Exists(dir))
+				Directory.CreateDirectory(dir);
+			string filename = dir + sep + name + ".cs";
+			
+			FileStream stream = new FileStream (filename, FileMode.Create, FileAccess.Write);
+			StreamWriter sw = new StreamWriter (stream);
+			
+			sw.WriteLine ("// This file was generated by the Gtk# code generator.");
+			sw.WriteLine ("// Any changes made will be lost if regenerated.");
+			sw.WriteLine ();
+
+			return sw;
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/IGeneratable.cs b/lib/unique-sharp/generator/IGeneratable.cs
index effb558..1608fd7 100644
--- a/lib/unique-sharp/generator/IGeneratable.cs
+++ b/lib/unique-sharp/generator/IGeneratable.cs
@@ -1,71 +1,71 @@
-// GtkSharp.Generation.IGeneratable.cs - Interface to generate code for a type.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2001 Mike Kestner
-// Copyright (c) 2007 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	public interface IGeneratable  {
-
-		// The C name of the generatable
-		string CName {get;}
-
-		// The (short) C# name of the generatable
-		string Name {get;}
-
-		// The fully-qualified C# name of the generatable
-		string QualifiedName {get;}
-
-		// The type (possibly including "ref" or "out") to use in the import
-		// signature when passing this generatable to unmanaged code
-		string MarshalType {get;}
-
-		// The type to use as the return type in an import signature when
-		// receiving this generatable back from unmanaged code
-		string MarshalReturnType {get;}
-
-		// The type to use in a managed callback signature when returning this
-		// generatable to unmanaged code
-		string ToNativeReturnType {get;}
-
-		// The value returned by callbacks that are interrupted prematurely
-		// by managed exceptions or other conditions where an appropriate
-		// value can't be otherwise obtained.
-		string DefaultValue {get;}
-
-		// Generates an expression to convert var_name to MarshalType
-		string CallByName (string var_name);
-
-		// Generates an expression to convert var from MarshalType
-		string FromNative (string var);
-
-		// Generates an expression to convert var from MarshalReturnType
-		string FromNativeReturn (string var);
-
-		// Generates an expression to convert var to ToNativeReturnType
-		string ToNativeReturn (string var);
-
-		bool Validate ();
-
-		void Generate ();
-
-		void Generate (GenerationInfo gen_info);
-	}
-}
+// GtkSharp.Generation.IGeneratable.cs - Interface to generate code for a type.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001 Mike Kestner
+// Copyright (c) 2007 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	public interface IGeneratable  {
+
+		// The C name of the generatable
+		string CName {get;}
+
+		// The (short) C# name of the generatable
+		string Name {get;}
+
+		// The fully-qualified C# name of the generatable
+		string QualifiedName {get;}
+
+		// The type (possibly including "ref" or "out") to use in the import
+		// signature when passing this generatable to unmanaged code
+		string MarshalType {get;}
+
+		// The type to use as the return type in an import signature when
+		// receiving this generatable back from unmanaged code
+		string MarshalReturnType {get;}
+
+		// The type to use in a managed callback signature when returning this
+		// generatable to unmanaged code
+		string ToNativeReturnType {get;}
+
+		// The value returned by callbacks that are interrupted prematurely
+		// by managed exceptions or other conditions where an appropriate
+		// value can't be otherwise obtained.
+		string DefaultValue {get;}
+
+		// Generates an expression to convert var_name to MarshalType
+		string CallByName (string var_name);
+
+		// Generates an expression to convert var from MarshalType
+		string FromNative (string var);
+
+		// Generates an expression to convert var from MarshalReturnType
+		string FromNativeReturn (string var);
+
+		// Generates an expression to convert var to ToNativeReturnType
+		string ToNativeReturn (string var);
+
+		bool Validate ();
+
+		void Generate ();
+
+		void Generate (GenerationInfo gen_info);
+	}
+}
diff --git a/lib/unique-sharp/generator/IManualMarshaler.cs b/lib/unique-sharp/generator/IManualMarshaler.cs
index 25633c5..e9e7eaf 100644
--- a/lib/unique-sharp/generator/IManualMarshaler.cs
+++ b/lib/unique-sharp/generator/IManualMarshaler.cs
@@ -1,32 +1,32 @@
-// GtkSharp.Generation.IManualMarshaler.cs - Interface for manual marshaling.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	public interface IManualMarshaler  {
-
-		string AllocNative (string managed_var);
-
-		string ReleaseNative (string native_var);
-
-	}
-}
-
+// GtkSharp.Generation.IManualMarshaler.cs - Interface for manual marshaling.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	public interface IManualMarshaler  {
+
+		string AllocNative (string managed_var);
+
+		string ReleaseNative (string native_var);
+
+	}
+}
+
diff --git a/lib/unique-sharp/generator/InterfaceGen.cs b/lib/unique-sharp/generator/InterfaceGen.cs
index f2b0f51..00cd892 100644
--- a/lib/unique-sharp/generator/InterfaceGen.cs
+++ b/lib/unique-sharp/generator/InterfaceGen.cs
@@ -1,384 +1,384 @@
-// GtkSharp.Generation.InterfaceGen.cs - The Interface Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2004, 2007 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class InterfaceGen : ObjectBase {
-
-		bool consume_only;
-		ArrayList vms = new ArrayList ();
-		ArrayList members = new ArrayList ();
-
-		public InterfaceGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
-		{
-			consume_only = elem.HasAttribute ("consume_only");
-			foreach (XmlNode node in elem.ChildNodes) {
-				switch (node.Name) {
-				case "virtual_method":
-					VirtualMethod vm = new VirtualMethod (node as XmlElement, this);
-					vms.Add (vm);
-					members.Add (vm);
-					break;
-				case "signal":
-					object sig = sigs [(node as XmlElement).GetAttribute ("name")];
-					if (sig == null)
-						sig = new Signal (node as XmlElement, this);
-					members.Add (sig);
-					break;
-				default:
-					if (!IsNodeNameHandled (node.Name))
-						Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
-					break;
-				}
-			}
-		}
-
-		public bool IsConsumeOnly {
-			get {
-				return consume_only;
-			}
-		}
-
-		public override string FromNative (string var, bool owned)
-		{
-			return QualifiedName + "Adapter.GetObject (" + var + ", " + (owned ? "true" : "false") + ")";
-		}
-
-		public override bool ValidateForSubclass ()
-		{
-			ArrayList invalids = new ArrayList ();
-
-			foreach (Method method in methods.Values) {
-				if (!method.Validate ()) {
-					Console.WriteLine ("in type " + QualifiedName);
-					invalids.Add (method);
-				}
-			}
-			foreach (Method method in invalids)
-				methods.Remove (method.Name);
-			invalids.Clear ();
-
-			return base.ValidateForSubclass ();
-		}
-
-		string IfaceName {
-			get {
-				return Name + "Iface";
-			}
-		}
-
-		void GenerateIfaceStruct (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tstatic " + IfaceName + " iface;");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tstruct " + IfaceName + " {");
-			sw.WriteLine ("\t\t\tpublic IntPtr gtype;");
-			sw.WriteLine ("\t\t\tpublic IntPtr itype;");
-			sw.WriteLine ();
-
-			foreach (object member in members) {
-				if (member is Signal) {
-					Signal sig = member as Signal;
-					sw.WriteLine ("\t\t\tpublic IntPtr {0};", sig.CName.Replace ("\"", "").Replace ("-", "_"));
-				} else if (member is VirtualMethod) {
-					VirtualMethod vm = member as VirtualMethod;
-					bool has_target = methods [vm.Name] != null;
-					if (!has_target)
-						Console.WriteLine ("Interface " + QualifiedName + " virtual method " + vm.Name + " has no matching method to invoke.");
-					string type = has_target && vm.IsValid ? vm.Name + "Delegate" : "IntPtr";
-					sw.WriteLine ("\t\t\tpublic " + type + " " + vm.CName + ";");
-				}
-			}
-
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateStaticCtor (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tstatic " + Name + "Adapter ()");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tGLib.GType.Register (_gtype, typeof({0}Adapter));", Name);
-			foreach (VirtualMethod vm in vms) {
-				bool has_target = methods [vm.Name] != null;
-				if (has_target && vm.IsValid)
-					sw.WriteLine ("\t\t\tiface.{0} = new {1}Delegate ({1}Callback);", vm.CName, vm.Name);
-			}
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateInitialize (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tstatic void Initialize (IntPtr ifaceptr, IntPtr data)");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\t" + IfaceName + " native_iface = (" + IfaceName + ") Marshal.PtrToStructure (ifaceptr, typeof (" + IfaceName + "));");
-			foreach (VirtualMethod vm in vms)
-				sw.WriteLine ("\t\t\tnative_iface." + vm.CName + " = iface." + vm.CName + ";");
-			sw.WriteLine ("\t\t\tMarshal.StructureToPtr (native_iface, ifaceptr, false);");
-			sw.WriteLine ("\t\t\tGCHandle gch = (GCHandle) data;");
-			sw.WriteLine ("\t\t\tgch.Free ();");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateCallbacks (StreamWriter sw)
-		{
-			foreach (VirtualMethod vm in vms) {
-				if (methods [vm.Name] != null) {
-					sw.WriteLine ();
-					vm.GenerateCallback (sw);
-				}
-			}
-		}
-
-		void GenerateCtors (StreamWriter sw)
-		{
-			if (!IsConsumeOnly) {
-				sw.WriteLine ("\t\tpublic " + Name + "Adapter ()");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tInitHandler = new GLib.GInterfaceInitHandler (Initialize);");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-				sw.WriteLine ("\t\t{0}Implementor implementor;", Name);
-				sw.WriteLine ();
-				sw.WriteLine ("\t\tpublic {0}Adapter ({0}Implementor implementor)", Name);
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tif (implementor == null)");
-				sw.WriteLine ("\t\t\t\tthrow new ArgumentNullException (\"implementor\");");
-				sw.WriteLine ("\t\t\tthis.implementor = implementor;");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-			}
-			sw.WriteLine ("\t\tpublic " + Name + "Adapter (IntPtr handle)");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tthis.handle = handle;");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateGType (StreamWriter sw)
-		{
-			Method m = GetMethod ("GetType");
-			m.GenerateImport (sw);
-			sw.WriteLine ("\t\tprivate static GLib.GType _gtype = new GLib.GType ({0} ());", m.CName);
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tpublic override GLib.GType GType {");
-			sw.WriteLine ("\t\t\tget {");
-			sw.WriteLine ("\t\t\t\treturn _gtype;");
-			sw.WriteLine ("\t\t\t}");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateHandleProp (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tIntPtr handle;");
-			sw.WriteLine ("\t\tpublic override IntPtr Handle {");
-			sw.WriteLine ("\t\t\tget {");
-			if (IsConsumeOnly) {
-				sw.WriteLine ("\t\t\t\treturn handle;");
-			} else {
-				sw.WriteLine ("\t\t\t\tif (handle != IntPtr.Zero)");
-				sw.WriteLine ("\t\t\t\t\treturn handle;");
-				sw.WriteLine ("\t\t\t\treturn implementor == null ? IntPtr.Zero : implementor.Handle;");
-			}
-			sw.WriteLine ("\t\t\t}");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateGetObject (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tpublic static " + Name + " GetObject (IntPtr handle, bool owned)");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tGLib.Object obj = GLib.Object.GetObject (handle, owned);");
-			sw.WriteLine ("\t\t\treturn GetObject (obj);");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tpublic static " + Name + " GetObject (GLib.Object obj)");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tif (obj == null)");
-			sw.WriteLine ("\t\t\t\treturn null;");
-			if (!IsConsumeOnly) {
-				sw.WriteLine ("\t\t\telse if (obj is " + Name + "Implementor)");
-				sw.WriteLine ("\t\t\t\treturn new {0}Adapter (obj as {0}Implementor);", Name);
-			}
-			sw.WriteLine ("\t\t\telse if (obj as " + Name + " == null)");
-			sw.WriteLine ("\t\t\t\treturn new {0}Adapter (obj.Handle);", Name);
-			sw.WriteLine ("\t\t\telse");
-			sw.WriteLine ("\t\t\t\treturn obj as {0};", Name);
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateImplementorProp (StreamWriter sw)
-		{
-			sw.WriteLine ("\t\tpublic " + Name + "Implementor Implementor {");
-			sw.WriteLine ("\t\t\tget {");
-			sw.WriteLine ("\t\t\t\treturn implementor;");
-			sw.WriteLine ("\t\t\t}");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ();
-		}
-
-		void GenerateAdapter (GenerationInfo gen_info)
-		{
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name + "Adapter");
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
-			sw.WriteLine ();
-			sw.WriteLine ("#region Autogenerated code");
-			sw.WriteLine ("\tpublic class " + Name + "Adapter : GLib.GInterfaceAdapter, " + QualifiedName + " {");
-			sw.WriteLine ();
-
-			if (!IsConsumeOnly) {
-				GenerateIfaceStruct (sw);
-				GenerateStaticCtor (sw);
-				GenerateCallbacks (sw);
-				GenerateInitialize (sw);
-			}
-			GenerateCtors (sw);
-			GenerateGType (sw);
-			GenerateHandleProp (sw);
-			GenerateGetObject (sw);
-			if (!IsConsumeOnly)
-				GenerateImplementorProp (sw);
-
-			GenProperties (gen_info, null);
-
-			foreach (Signal sig in sigs.Values)
-				sig.GenEvent (sw, null, "GLib.Object.GetObject (Handle)");
-
-			Method temp = methods ["GetType"] as Method;
-			if (temp != null)
-				methods.Remove ("GetType");
-			GenMethods (gen_info, new Hashtable (), this);
-			if (temp != null)
-				methods ["GetType"] = temp;
-
-			sw.WriteLine ("#endregion");
-
-			string custom = Path.Combine (gen_info.CustomDir, Name + "Adapter.custom");
-			if (File.Exists (custom)) {
-				sw.WriteLine ("#region Customized extensions");
-				sw.WriteLine ("#line 1 \"" + Name + "Adapter.custom\"");
-				using (StreamReader sr = new StreamReader(new FileStream (custom, FileMode.Open, FileAccess.Read)))
-					sw.WriteLine (sr.ReadToEnd ());
-				
-				sw.WriteLine ("#endregion");
-			}
-
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-			sw.Close ();
-			gen_info.Writer = null;
-		}
-
-		void GenerateImplementorIface (StreamWriter sw)
-		{
-			if (IsConsumeOnly)
-				return;
-
-			sw.WriteLine ();
-			sw.WriteLine ("\t[GLib.GInterface (typeof (" + Name + "Adapter))]");
-			string access = IsInternal ? "internal" : "public";
-			sw.WriteLine ("\t" + access + " interface " + Name + "Implementor : GLib.IWrapper {");
-			sw.WriteLine ();
-			Hashtable vm_table = new Hashtable ();
-			foreach (VirtualMethod vm in vms)
-				vm_table [vm.Name] = vm;
-			foreach (VirtualMethod vm in vms) {
-				if (vm_table [vm.Name] == null)
-					continue;
-				else if (!vm.IsValid) {
-					vm_table.Remove (vm.Name);
-					continue;
-				} else if (vm.IsGetter || vm.IsSetter) {
-					string cmp_name = (vm.IsGetter ? "Set" : "Get") + vm.Name.Substring (3);
-					VirtualMethod cmp = vm_table [cmp_name] as VirtualMethod;
-					if (cmp != null && (cmp.IsGetter || cmp.IsSetter)) {
-						if (vm.IsSetter)
-							cmp.GenerateDeclaration (sw, vm);
-						else
-							vm.GenerateDeclaration (sw, cmp);
-						vm_table.Remove (cmp.Name);
-					} else 
-						vm.GenerateDeclaration (sw, null);
-					vm_table.Remove (vm.Name);
-				} else {
-					vm.GenerateDeclaration (sw, null);
-					vm_table.Remove (vm.Name);
-				}
-			}
-			sw.WriteLine ("\t}");
-		}
-
-		public override void Generate (GenerationInfo gen_info)
-		{
-			GenerateAdapter (gen_info);
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ();
-			sw.WriteLine ("#region Autogenerated code");
-			string access = IsInternal ? "internal" : "public";
-			sw.WriteLine ("\t" + access + " interface " + Name + " : GLib.IWrapper {");
-			sw.WriteLine ();
-			
-			foreach (Signal sig in sigs.Values) {
-				sig.GenerateDecl (sw);
-				sig.GenEventHandler (gen_info);
-			}
-
-			foreach (Method method in methods.Values) {
-				if (IgnoreMethod (method, this))
-					continue;
-				method.GenerateDecl (sw);
-			}
-
-			foreach (Property prop in props.Values)
-				prop.GenerateDecl (sw, "\t\t");
-
-			AppendCustom (sw, gen_info.CustomDir);
-
-			sw.WriteLine ("\t}");
-			GenerateImplementorIface (sw);
-			sw.WriteLine ("#endregion");
-			sw.WriteLine ("}");
-			sw.Close ();
-			gen_info.Writer = null;
-			Statistics.IFaceCount++;
-		}
-	}
-}
-
+// GtkSharp.Generation.InterfaceGen.cs - The Interface Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004, 2007 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class InterfaceGen : ObjectBase {
+
+		bool consume_only;
+		ArrayList vms = new ArrayList ();
+		ArrayList members = new ArrayList ();
+
+		public InterfaceGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
+		{
+			consume_only = elem.HasAttribute ("consume_only");
+			foreach (XmlNode node in elem.ChildNodes) {
+				switch (node.Name) {
+				case "virtual_method":
+					VirtualMethod vm = new VirtualMethod (node as XmlElement, this);
+					vms.Add (vm);
+					members.Add (vm);
+					break;
+				case "signal":
+					object sig = sigs [(node as XmlElement).GetAttribute ("name")];
+					if (sig == null)
+						sig = new Signal (node as XmlElement, this);
+					members.Add (sig);
+					break;
+				default:
+					if (!IsNodeNameHandled (node.Name))
+						Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
+					break;
+				}
+			}
+		}
+
+		public bool IsConsumeOnly {
+			get {
+				return consume_only;
+			}
+		}
+
+		public override string FromNative (string var, bool owned)
+		{
+			return QualifiedName + "Adapter.GetObject (" + var + ", " + (owned ? "true" : "false") + ")";
+		}
+
+		public override bool ValidateForSubclass ()
+		{
+			ArrayList invalids = new ArrayList ();
+
+			foreach (Method method in methods.Values) {
+				if (!method.Validate ()) {
+					Console.WriteLine ("in type " + QualifiedName);
+					invalids.Add (method);
+				}
+			}
+			foreach (Method method in invalids)
+				methods.Remove (method.Name);
+			invalids.Clear ();
+
+			return base.ValidateForSubclass ();
+		}
+
+		string IfaceName {
+			get {
+				return Name + "Iface";
+			}
+		}
+
+		void GenerateIfaceStruct (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tstatic " + IfaceName + " iface;");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tstruct " + IfaceName + " {");
+			sw.WriteLine ("\t\t\tpublic IntPtr gtype;");
+			sw.WriteLine ("\t\t\tpublic IntPtr itype;");
+			sw.WriteLine ();
+
+			foreach (object member in members) {
+				if (member is Signal) {
+					Signal sig = member as Signal;
+					sw.WriteLine ("\t\t\tpublic IntPtr {0};", sig.CName.Replace ("\"", "").Replace ("-", "_"));
+				} else if (member is VirtualMethod) {
+					VirtualMethod vm = member as VirtualMethod;
+					bool has_target = methods [vm.Name] != null;
+					if (!has_target)
+						Console.WriteLine ("Interface " + QualifiedName + " virtual method " + vm.Name + " has no matching method to invoke.");
+					string type = has_target && vm.IsValid ? vm.Name + "Delegate" : "IntPtr";
+					sw.WriteLine ("\t\t\tpublic " + type + " " + vm.CName + ";");
+				}
+			}
+
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateStaticCtor (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tstatic " + Name + "Adapter ()");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tGLib.GType.Register (_gtype, typeof({0}Adapter));", Name);
+			foreach (VirtualMethod vm in vms) {
+				bool has_target = methods [vm.Name] != null;
+				if (has_target && vm.IsValid)
+					sw.WriteLine ("\t\t\tiface.{0} = new {1}Delegate ({1}Callback);", vm.CName, vm.Name);
+			}
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateInitialize (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tstatic void Initialize (IntPtr ifaceptr, IntPtr data)");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\t" + IfaceName + " native_iface = (" + IfaceName + ") Marshal.PtrToStructure (ifaceptr, typeof (" + IfaceName + "));");
+			foreach (VirtualMethod vm in vms)
+				sw.WriteLine ("\t\t\tnative_iface." + vm.CName + " = iface." + vm.CName + ";");
+			sw.WriteLine ("\t\t\tMarshal.StructureToPtr (native_iface, ifaceptr, false);");
+			sw.WriteLine ("\t\t\tGCHandle gch = (GCHandle) data;");
+			sw.WriteLine ("\t\t\tgch.Free ();");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateCallbacks (StreamWriter sw)
+		{
+			foreach (VirtualMethod vm in vms) {
+				if (methods [vm.Name] != null) {
+					sw.WriteLine ();
+					vm.GenerateCallback (sw);
+				}
+			}
+		}
+
+		void GenerateCtors (StreamWriter sw)
+		{
+			if (!IsConsumeOnly) {
+				sw.WriteLine ("\t\tpublic " + Name + "Adapter ()");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tInitHandler = new GLib.GInterfaceInitHandler (Initialize);");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\t{0}Implementor implementor;", Name);
+				sw.WriteLine ();
+				sw.WriteLine ("\t\tpublic {0}Adapter ({0}Implementor implementor)", Name);
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tif (implementor == null)");
+				sw.WriteLine ("\t\t\t\tthrow new ArgumentNullException (\"implementor\");");
+				sw.WriteLine ("\t\t\tthis.implementor = implementor;");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+			}
+			sw.WriteLine ("\t\tpublic " + Name + "Adapter (IntPtr handle)");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tthis.handle = handle;");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateGType (StreamWriter sw)
+		{
+			Method m = GetMethod ("GetType");
+			m.GenerateImport (sw);
+			sw.WriteLine ("\t\tprivate static GLib.GType _gtype = new GLib.GType ({0} ());", m.CName);
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tpublic override GLib.GType GType {");
+			sw.WriteLine ("\t\t\tget {");
+			sw.WriteLine ("\t\t\t\treturn _gtype;");
+			sw.WriteLine ("\t\t\t}");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateHandleProp (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tIntPtr handle;");
+			sw.WriteLine ("\t\tpublic override IntPtr Handle {");
+			sw.WriteLine ("\t\t\tget {");
+			if (IsConsumeOnly) {
+				sw.WriteLine ("\t\t\t\treturn handle;");
+			} else {
+				sw.WriteLine ("\t\t\t\tif (handle != IntPtr.Zero)");
+				sw.WriteLine ("\t\t\t\t\treturn handle;");
+				sw.WriteLine ("\t\t\t\treturn implementor == null ? IntPtr.Zero : implementor.Handle;");
+			}
+			sw.WriteLine ("\t\t\t}");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateGetObject (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tpublic static " + Name + " GetObject (IntPtr handle, bool owned)");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tGLib.Object obj = GLib.Object.GetObject (handle, owned);");
+			sw.WriteLine ("\t\t\treturn GetObject (obj);");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tpublic static " + Name + " GetObject (GLib.Object obj)");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tif (obj == null)");
+			sw.WriteLine ("\t\t\t\treturn null;");
+			if (!IsConsumeOnly) {
+				sw.WriteLine ("\t\t\telse if (obj is " + Name + "Implementor)");
+				sw.WriteLine ("\t\t\t\treturn new {0}Adapter (obj as {0}Implementor);", Name);
+			}
+			sw.WriteLine ("\t\t\telse if (obj as " + Name + " == null)");
+			sw.WriteLine ("\t\t\t\treturn new {0}Adapter (obj.Handle);", Name);
+			sw.WriteLine ("\t\t\telse");
+			sw.WriteLine ("\t\t\t\treturn obj as {0};", Name);
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateImplementorProp (StreamWriter sw)
+		{
+			sw.WriteLine ("\t\tpublic " + Name + "Implementor Implementor {");
+			sw.WriteLine ("\t\t\tget {");
+			sw.WriteLine ("\t\t\t\treturn implementor;");
+			sw.WriteLine ("\t\t\t}");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ();
+		}
+
+		void GenerateAdapter (GenerationInfo gen_info)
+		{
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name + "Adapter");
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+			sw.WriteLine ();
+			sw.WriteLine ("#region Autogenerated code");
+			sw.WriteLine ("\tpublic class " + Name + "Adapter : GLib.GInterfaceAdapter, " + QualifiedName + " {");
+			sw.WriteLine ();
+
+			if (!IsConsumeOnly) {
+				GenerateIfaceStruct (sw);
+				GenerateStaticCtor (sw);
+				GenerateCallbacks (sw);
+				GenerateInitialize (sw);
+			}
+			GenerateCtors (sw);
+			GenerateGType (sw);
+			GenerateHandleProp (sw);
+			GenerateGetObject (sw);
+			if (!IsConsumeOnly)
+				GenerateImplementorProp (sw);
+
+			GenProperties (gen_info, null);
+
+			foreach (Signal sig in sigs.Values)
+				sig.GenEvent (sw, null, "GLib.Object.GetObject (Handle)");
+
+			Method temp = methods ["GetType"] as Method;
+			if (temp != null)
+				methods.Remove ("GetType");
+			GenMethods (gen_info, new Hashtable (), this);
+			if (temp != null)
+				methods ["GetType"] = temp;
+
+			sw.WriteLine ("#endregion");
+
+			string custom = Path.Combine (gen_info.CustomDir, Name + "Adapter.custom");
+			if (File.Exists (custom)) {
+				sw.WriteLine ("#region Customized extensions");
+				sw.WriteLine ("#line 1 \"" + Name + "Adapter.custom\"");
+				using (StreamReader sr = new StreamReader(new FileStream (custom, FileMode.Open, FileAccess.Read)))
+					sw.WriteLine (sr.ReadToEnd ());
+				
+				sw.WriteLine ("#endregion");
+			}
+
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+			sw.Close ();
+			gen_info.Writer = null;
+		}
+
+		void GenerateImplementorIface (StreamWriter sw)
+		{
+			if (IsConsumeOnly)
+				return;
+
+			sw.WriteLine ();
+			sw.WriteLine ("\t[GLib.GInterface (typeof (" + Name + "Adapter))]");
+			string access = IsInternal ? "internal" : "public";
+			sw.WriteLine ("\t" + access + " interface " + Name + "Implementor : GLib.IWrapper {");
+			sw.WriteLine ();
+			Hashtable vm_table = new Hashtable ();
+			foreach (VirtualMethod vm in vms)
+				vm_table [vm.Name] = vm;
+			foreach (VirtualMethod vm in vms) {
+				if (vm_table [vm.Name] == null)
+					continue;
+				else if (!vm.IsValid) {
+					vm_table.Remove (vm.Name);
+					continue;
+				} else if (vm.IsGetter || vm.IsSetter) {
+					string cmp_name = (vm.IsGetter ? "Set" : "Get") + vm.Name.Substring (3);
+					VirtualMethod cmp = vm_table [cmp_name] as VirtualMethod;
+					if (cmp != null && (cmp.IsGetter || cmp.IsSetter)) {
+						if (vm.IsSetter)
+							cmp.GenerateDeclaration (sw, vm);
+						else
+							vm.GenerateDeclaration (sw, cmp);
+						vm_table.Remove (cmp.Name);
+					} else 
+						vm.GenerateDeclaration (sw, null);
+					vm_table.Remove (vm.Name);
+				} else {
+					vm.GenerateDeclaration (sw, null);
+					vm_table.Remove (vm.Name);
+				}
+			}
+			sw.WriteLine ("\t}");
+		}
+
+		public override void Generate (GenerationInfo gen_info)
+		{
+			GenerateAdapter (gen_info);
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ();
+			sw.WriteLine ("#region Autogenerated code");
+			string access = IsInternal ? "internal" : "public";
+			sw.WriteLine ("\t" + access + " interface " + Name + " : GLib.IWrapper {");
+			sw.WriteLine ();
+			
+			foreach (Signal sig in sigs.Values) {
+				sig.GenerateDecl (sw);
+				sig.GenEventHandler (gen_info);
+			}
+
+			foreach (Method method in methods.Values) {
+				if (IgnoreMethod (method, this))
+					continue;
+				method.GenerateDecl (sw);
+			}
+
+			foreach (Property prop in props.Values)
+				prop.GenerateDecl (sw, "\t\t");
+
+			AppendCustom (sw, gen_info.CustomDir);
+
+			sw.WriteLine ("\t}");
+			GenerateImplementorIface (sw);
+			sw.WriteLine ("#endregion");
+			sw.WriteLine ("}");
+			sw.Close ();
+			gen_info.Writer = null;
+			Statistics.IFaceCount++;
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/LPGen.cs b/lib/unique-sharp/generator/LPGen.cs
index 84940b5..3fb774e 100644
--- a/lib/unique-sharp/generator/LPGen.cs
+++ b/lib/unique-sharp/generator/LPGen.cs
@@ -1,58 +1,58 @@
-// GtkSharp.Generation.LPGen.cs - long/pointer Generatable.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.IO;
-
-	public class LPGen : SimpleGen, IAccessor {
-		
-		public LPGen (string ctype) : base (ctype, "long", "0L") {}
-
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-
-		public override string CallByName (string var_name)
-		{
-			return "new IntPtr (" + var_name + ")";
-		}
-		
-		public override string FromNative(string var)
-		{
-			return "(long) " + var;
-		}
-
-		public void WriteAccessors (StreamWriter sw, string indent, string var)
-		{
-			sw.WriteLine (indent + "get {");
-			sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
-			sw.WriteLine (indent + "}");
-			sw.WriteLine (indent + "set {");
-			sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
-			sw.WriteLine (indent + "}");
-		}
-	}
-}
-
+// GtkSharp.Generation.LPGen.cs - long/pointer Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.IO;
+
+	public class LPGen : SimpleGen, IAccessor {
+		
+		public LPGen (string ctype) : base (ctype, "long", "0L") {}
+
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+
+		public override string CallByName (string var_name)
+		{
+			return "new IntPtr (" + var_name + ")";
+		}
+		
+		public override string FromNative(string var)
+		{
+			return "(long) " + var;
+		}
+
+		public void WriteAccessors (StreamWriter sw, string indent, string var)
+		{
+			sw.WriteLine (indent + "get {");
+			sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
+			sw.WriteLine (indent + "}");
+			sw.WriteLine (indent + "set {");
+			sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
+			sw.WriteLine (indent + "}");
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/LPUGen.cs b/lib/unique-sharp/generator/LPUGen.cs
index f84cdd8..331b25f 100644
--- a/lib/unique-sharp/generator/LPUGen.cs
+++ b/lib/unique-sharp/generator/LPUGen.cs
@@ -1,58 +1,58 @@
-// GtkSharp.Generation.LPUGen.cs - unsugned long/pointer generatable.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.IO;
-
-	public class LPUGen : SimpleGen, IAccessor {
-		
-		public LPUGen (string ctype) : base (ctype, "ulong", "0") {}
-
-		public override string MarshalType {
-			get {
-				return "UIntPtr";
-			}
-		}
-
-		public override string CallByName (string var_name)
-		{
-			return "new UIntPtr (" + var_name + ")";
-		}
-		
-		public override string FromNative(string var)
-		{
-			return "(ulong) " + var;
-		}
-
-		public void WriteAccessors (StreamWriter sw, string indent, string var)
-		{
-			sw.WriteLine (indent + "get {");
-			sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
-			sw.WriteLine (indent + "}");
-			sw.WriteLine (indent + "set {");
-			sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
-			sw.WriteLine (indent + "}");
-		}
-	}
-}
-
+// GtkSharp.Generation.LPUGen.cs - unsugned long/pointer generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.IO;
+
+	public class LPUGen : SimpleGen, IAccessor {
+		
+		public LPUGen (string ctype) : base (ctype, "ulong", "0") {}
+
+		public override string MarshalType {
+			get {
+				return "UIntPtr";
+			}
+		}
+
+		public override string CallByName (string var_name)
+		{
+			return "new UIntPtr (" + var_name + ")";
+		}
+		
+		public override string FromNative(string var)
+		{
+			return "(ulong) " + var;
+		}
+
+		public void WriteAccessors (StreamWriter sw, string indent, string var)
+		{
+			sw.WriteLine (indent + "get {");
+			sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
+			sw.WriteLine (indent + "}");
+			sw.WriteLine (indent + "set {");
+			sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
+			sw.WriteLine (indent + "}");
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/ManualGen.cs b/lib/unique-sharp/generator/ManualGen.cs
index 8041905..1d94916 100644
--- a/lib/unique-sharp/generator/ManualGen.cs
+++ b/lib/unique-sharp/generator/ManualGen.cs
@@ -1,58 +1,58 @@
-// GtkSharp.Generation.ManualGen.cs - Ungenerated handle type Generatable.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2003 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class ManualGen : SimpleBase {
-		
-		string from_fmt;
-
-		public ManualGen (string ctype, string type) : base (ctype, type, "null") 
-		{
-			from_fmt = "new " + QualifiedName + "({0})";
-		}
-
-		public ManualGen (string ctype, string type, string from_fmt) : base (ctype, type, "null")
-		{
-			this.from_fmt = from_fmt;
-		}
-		
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-
-		public override string CallByName (string var_name)
-		{
-			return var_name + " == null ? IntPtr.Zero : " + var_name + ".Handle";
-		}
-		
-		public override string FromNative(string var)
-		{
-			return String.Format (from_fmt, var);
-		}
-	}
-}
-
+// GtkSharp.Generation.ManualGen.cs - Ungenerated handle type Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class ManualGen : SimpleBase {
+		
+		string from_fmt;
+
+		public ManualGen (string ctype, string type) : base (ctype, type, "null") 
+		{
+			from_fmt = "new " + QualifiedName + "({0})";
+		}
+
+		public ManualGen (string ctype, string type, string from_fmt) : base (ctype, type, "null")
+		{
+			this.from_fmt = from_fmt;
+		}
+		
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+
+		public override string CallByName (string var_name)
+		{
+			return var_name + " == null ? IntPtr.Zero : " + var_name + ".Handle";
+		}
+		
+		public override string FromNative(string var)
+		{
+			return String.Format (from_fmt, var);
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/Method.cs b/lib/unique-sharp/generator/Method.cs
index 7c1d179..76cd721 100644
--- a/lib/unique-sharp/generator/Method.cs
+++ b/lib/unique-sharp/generator/Method.cs
@@ -1,304 +1,304 @@
-// GtkSharp.Generation.Method.cs - The Method Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Method : MethodBase  {
-		
-		private ReturnValue retval;
-
-		private string call;
-		private bool is_get, is_set;
-		private bool deprecated = false;
-
-		public Method (XmlElement elem, ClassBase container_type) : base (elem, container_type)
-		{
-			this.retval = new ReturnValue (elem["return-type"]);
-			
-			if (!container_type.IsDeprecated && elem.HasAttribute ("deprecated")) {
-				string attr = elem.GetAttribute ("deprecated");
-				deprecated = attr == "1" || attr == "true";
-			}
-			
-			if (Name == "GetType")
-				Name = "GetGType";
-		}
-
-		public bool IsDeprecated {
-			get {
-				return deprecated;
-			}
-		}
-
-		public bool IsGetter {
-			get {
-				return is_get;
-			}
-		}
-
-		public bool IsSetter {
-			get {
-				return is_set;
-			}
-		}
-
-		public string ReturnType {
-			get {
-				return retval.CSType;
-			}
-		}
-
-		public override bool Validate ()
-		{
-			if (!retval.Validate () || !base.Validate ()) {
-				Console.Write(" in method " + Name + " ");
-				return false;
-			}
-
-			Parameters parms = Parameters;
-			is_get = ((((parms.IsAccessor && retval.IsVoid) || (parms.Count == 0 && !retval.IsVoid)) || (parms.Count == 0 && !retval.IsVoid)) && HasGetterName);
-			is_set = ((parms.IsAccessor || (parms.VisibleCount == 1 && retval.IsVoid)) && HasSetterName);
-
-			call = "(" + (IsStatic ? "" : container_type.CallByName () + (parms.Count > 0 ? ", " : "")) + Body.GetCallString (is_set) + ")";
-
-			return true;
-		}
-		
-		private Method GetComplement ()
-		{
-			char complement;
-			if (is_get)
-				complement = 'S';
-			else
-				complement = 'G';
-			
-			return container_type.GetMethod (complement + BaseName.Substring (1));
-		}
-		
-		public string Declaration {
-			get {
-				return retval.CSType + " " + Name + " (" + (Signature != null ? Signature.ToString() : "") + ");";
-			}
-		}
-
-		private void GenerateDeclCommon (StreamWriter sw, ClassBase implementor)
-		{
-			if (IsStatic)
-				sw.Write("static ");
-			sw.Write (Safety);
-			Method dup = null;
-			if (container_type != null)
-				dup = container_type.GetMethodRecursively (Name);
-			if (implementor != null)
-				dup = implementor.GetMethodRecursively (Name);
-
-			if (Name == "ToString" && Parameters.Count == 0)
-				sw.Write("override ");
-			else if (Name == "GetGType" && container_type is ObjectGen)
-				sw.Write("new ");
-			else if (Modifiers == "new " || (dup != null && ((dup.Signature != null && Signature != null && dup.Signature.ToString() == Signature.ToString()) || (dup.Signature == null && Signature == null))))
-				sw.Write("new ");
-
-			if (is_get || is_set) {
-				if (retval.IsVoid)
-					sw.Write (Parameters.AccessorReturnType);
-				else
-					sw.Write(retval.CSType);
-				sw.Write(" ");
-				if (Name.StartsWith ("Get") || Name.StartsWith ("Set"))
-					sw.Write (Name.Substring (3));
-				else {
-					int dot = Name.LastIndexOf ('.');
-					if (dot != -1 && (Name.Substring (dot + 1, 3) == "Get" || Name.Substring (dot + 1, 3) == "Set"))
-						sw.Write (Name.Substring (0, dot + 1) + Name.Substring (dot + 4));
-					else
-						sw.Write (Name);
-				}
-				sw.WriteLine(" { ");
-			} else if (IsAccessor) {
-				sw.Write (Signature.AccessorType + " " + Name + "(" + Signature.AsAccessor + ")");
-			} else {
-				sw.Write(retval.CSType + " " + Name + "(" + (Signature != null ? Signature.ToString() : "") + ")");
-			}
-		}
-
-		public void GenerateDecl (StreamWriter sw)
-		{
-			if (IsStatic)
-				return;
-
-			if (is_get || is_set)
-			{
-				Method comp = GetComplement ();
-				if (comp != null && is_set)
-					return;
-			
-				sw.Write("\t\t");
-				GenerateDeclCommon (sw, null);
-
-				sw.Write("\t\t\t");
-				sw.Write ((is_get) ? "get;" : "set;");
-
-				if (comp != null && comp.is_set)
-					sw.WriteLine (" set;");
-				else
-					sw.WriteLine ();
-
-				sw.WriteLine ("\t\t}");
-			}
-			else
-			{
-				sw.Write("\t\t");
-				GenerateDeclCommon (sw, null);
-				sw.WriteLine (";");
-			}
-
-			Statistics.MethodCount++;
-		}
-
-		public void GenerateImport (StreamWriter sw)
-		{
-			string import_sig = IsStatic ? "" : container_type.MarshalType + " raw";
-			import_sig += !IsStatic && Parameters.Count > 0 ? ", " : "";
-			import_sig += Parameters.ImportSignature.ToString();
-			sw.WriteLine("\t\t[DllImport(\"" + LibraryName + "\")]");
-			if (retval.MarshalType.StartsWith ("[return:"))
-				sw.WriteLine("\t\t" + retval.MarshalType + " static extern " + Safety + retval.CSType + " " + CName + "(" + import_sig + ");");
-			else
-				sw.WriteLine("\t\tstatic extern " + Safety + retval.MarshalType + " " + CName + "(" + import_sig + ");");
-			sw.WriteLine();
-		}
-
-		public void Generate (GenerationInfo gen_info, ClassBase implementor)
-		{
-			if (!Validate ())
-				return;
-
-			Method comp = null;
-
-			gen_info.CurrentMember = Name;
-
-			/* we are generated by the get Method, if there is one */
-			if (is_set || is_get)
-			{
-				if (Modifiers != "new " && container_type.GetPropertyRecursively (Name.Substring (3)) != null)
-					return;
-				comp = GetComplement ();
-				if (comp != null && is_set) {
-					if (Parameters.AccessorReturnType == comp.ReturnType)
-						return;
-					else {
-						is_set = false;
-						call = "(Handle, " + Body.GetCallString (false) + ")";
-						comp = null;
-					}
-				}
-				/* some setters take more than one arg */
-				if (comp != null && !comp.is_set)
-					comp = null;
-			}
-			
-			GenerateImport (gen_info.Writer);
-			if (comp != null && retval.CSType == comp.Parameters.AccessorReturnType)
-				comp.GenerateImport (gen_info.Writer);
-
-			if (IsDeprecated)
-				gen_info.Writer.WriteLine("\t\t[Obsolete]");
-			gen_info.Writer.Write("\t\t");
+// GtkSharp.Generation.Method.cs - The Method Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Method : MethodBase  {
+		
+		private ReturnValue retval;
+
+		private string call;
+		private bool is_get, is_set;
+		private bool deprecated = false;
+
+		public Method (XmlElement elem, ClassBase container_type) : base (elem, container_type)
+		{
+			this.retval = new ReturnValue (elem["return-type"]);
+			
+			if (!container_type.IsDeprecated && elem.HasAttribute ("deprecated")) {
+				string attr = elem.GetAttribute ("deprecated");
+				deprecated = attr == "1" || attr == "true";
+			}
+			
+			if (Name == "GetType")
+				Name = "GetGType";
+		}
+
+		public bool IsDeprecated {
+			get {
+				return deprecated;
+			}
+		}
+
+		public bool IsGetter {
+			get {
+				return is_get;
+			}
+		}
+
+		public bool IsSetter {
+			get {
+				return is_set;
+			}
+		}
+
+		public string ReturnType {
+			get {
+				return retval.CSType;
+			}
+		}
+
+		public override bool Validate ()
+		{
+			if (!retval.Validate () || !base.Validate ()) {
+				Console.Write(" in method " + Name + " ");
+				return false;
+			}
+
+			Parameters parms = Parameters;
+			is_get = ((((parms.IsAccessor && retval.IsVoid) || (parms.Count == 0 && !retval.IsVoid)) || (parms.Count == 0 && !retval.IsVoid)) && HasGetterName);
+			is_set = ((parms.IsAccessor || (parms.VisibleCount == 1 && retval.IsVoid)) && HasSetterName);
+
+			call = "(" + (IsStatic ? "" : container_type.CallByName () + (parms.Count > 0 ? ", " : "")) + Body.GetCallString (is_set) + ")";
+
+			return true;
+		}
+		
+		private Method GetComplement ()
+		{
+			char complement;
+			if (is_get)
+				complement = 'S';
+			else
+				complement = 'G';
+			
+			return container_type.GetMethod (complement + BaseName.Substring (1));
+		}
+		
+		public string Declaration {
+			get {
+				return retval.CSType + " " + Name + " (" + (Signature != null ? Signature.ToString() : "") + ");";
+			}
+		}
+
+		private void GenerateDeclCommon (StreamWriter sw, ClassBase implementor)
+		{
+			if (IsStatic)
+				sw.Write("static ");
+			sw.Write (Safety);
+			Method dup = null;
+			if (container_type != null)
+				dup = container_type.GetMethodRecursively (Name);
+			if (implementor != null)
+				dup = implementor.GetMethodRecursively (Name);
+
+			if (Name == "ToString" && Parameters.Count == 0)
+				sw.Write("override ");
+			else if (Name == "GetGType" && container_type is ObjectGen)
+				sw.Write("new ");
+			else if (Modifiers == "new " || (dup != null && ((dup.Signature != null && Signature != null && dup.Signature.ToString() == Signature.ToString()) || (dup.Signature == null && Signature == null))))
+				sw.Write("new ");
+
+			if (is_get || is_set) {
+				if (retval.IsVoid)
+					sw.Write (Parameters.AccessorReturnType);
+				else
+					sw.Write(retval.CSType);
+				sw.Write(" ");
+				if (Name.StartsWith ("Get") || Name.StartsWith ("Set"))
+					sw.Write (Name.Substring (3));
+				else {
+					int dot = Name.LastIndexOf ('.');
+					if (dot != -1 && (Name.Substring (dot + 1, 3) == "Get" || Name.Substring (dot + 1, 3) == "Set"))
+						sw.Write (Name.Substring (0, dot + 1) + Name.Substring (dot + 4));
+					else
+						sw.Write (Name);
+				}
+				sw.WriteLine(" { ");
+			} else if (IsAccessor) {
+				sw.Write (Signature.AccessorType + " " + Name + "(" + Signature.AsAccessor + ")");
+			} else {
+				sw.Write(retval.CSType + " " + Name + "(" + (Signature != null ? Signature.ToString() : "") + ")");
+			}
+		}
+
+		public void GenerateDecl (StreamWriter sw)
+		{
+			if (IsStatic)
+				return;
+
+			if (is_get || is_set)
+			{
+				Method comp = GetComplement ();
+				if (comp != null && is_set)
+					return;
+			
+				sw.Write("\t\t");
+				GenerateDeclCommon (sw, null);
+
+				sw.Write("\t\t\t");
+				sw.Write ((is_get) ? "get;" : "set;");
+
+				if (comp != null && comp.is_set)
+					sw.WriteLine (" set;");
+				else
+					sw.WriteLine ();
+
+				sw.WriteLine ("\t\t}");
+			}
+			else
+			{
+				sw.Write("\t\t");
+				GenerateDeclCommon (sw, null);
+				sw.WriteLine (";");
+			}
+
+			Statistics.MethodCount++;
+		}
+
+		public void GenerateImport (StreamWriter sw)
+		{
+			string import_sig = IsStatic ? "" : container_type.MarshalType + " raw";
+			import_sig += !IsStatic && Parameters.Count > 0 ? ", " : "";
+			import_sig += Parameters.ImportSignature.ToString();
+			sw.WriteLine("\t\t[DllImport(\"" + LibraryName + "\")]");
+			if (retval.MarshalType.StartsWith ("[return:"))
+				sw.WriteLine("\t\t" + retval.MarshalType + " static extern " + Safety + retval.CSType + " " + CName + "(" + import_sig + ");");
+			else
+				sw.WriteLine("\t\tstatic extern " + Safety + retval.MarshalType + " " + CName + "(" + import_sig + ");");
+			sw.WriteLine();
+		}
+
+		public void Generate (GenerationInfo gen_info, ClassBase implementor)
+		{
+			if (!Validate ())
+				return;
+
+			Method comp = null;
+
+			gen_info.CurrentMember = Name;
+
+			/* we are generated by the get Method, if there is one */
+			if (is_set || is_get)
+			{
+				if (Modifiers != "new " && container_type.GetPropertyRecursively (Name.Substring (3)) != null)
+					return;
+				comp = GetComplement ();
+				if (comp != null && is_set) {
+					if (Parameters.AccessorReturnType == comp.ReturnType)
+						return;
+					else {
+						is_set = false;
+						call = "(Handle, " + Body.GetCallString (false) + ")";
+						comp = null;
+					}
+				}
+				/* some setters take more than one arg */
+				if (comp != null && !comp.is_set)
+					comp = null;
+			}
+			
+			GenerateImport (gen_info.Writer);
+			if (comp != null && retval.CSType == comp.Parameters.AccessorReturnType)
+				comp.GenerateImport (gen_info.Writer);
+
+			if (IsDeprecated)
+				gen_info.Writer.WriteLine("\t\t[Obsolete]");
+			gen_info.Writer.Write("\t\t");
 			if (Protection != "")
-				gen_info.Writer.Write("{0} ", Protection);
-			GenerateDeclCommon (gen_info.Writer, implementor);
-
-			if (is_get || is_set)
-			{
-				gen_info.Writer.Write ("\t\t\t");
-				gen_info.Writer.Write ((is_get) ? "get" : "set");
-				GenerateBody (gen_info, implementor, "\t");
-			}
-			else
-				GenerateBody (gen_info, implementor, "");
-			
-			if (is_get || is_set)
-			{
-				if (comp != null && retval.CSType == comp.Parameters.AccessorReturnType)
-				{
-					gen_info.Writer.WriteLine ();
-					gen_info.Writer.Write ("\t\t\tset");
-					comp.GenerateBody (gen_info, implementor, "\t");
-				}
-				gen_info.Writer.WriteLine ();
-				gen_info.Writer.WriteLine ("\t\t}");
-			}
-			else
-				gen_info.Writer.WriteLine();
-			
-			gen_info.Writer.WriteLine();
-
-			Statistics.MethodCount++;
-		}
-
-		public void GenerateBody (GenerationInfo gen_info, ClassBase implementor, string indent)
-		{
-			StreamWriter sw = gen_info.Writer;
-			sw.WriteLine(" {");
-			if (!IsStatic && implementor != null)
-				implementor.Prepare (sw, indent + "\t\t\t");
-			if (IsAccessor)
-				Body.InitAccessor (sw, Signature, indent);
-			Body.Initialize(gen_info, is_get, is_set, indent);
-
-			sw.Write(indent + "\t\t\t");
-			if (retval.IsVoid)
-				sw.WriteLine(CName + call + ";");
-			else {
-				sw.WriteLine(retval.MarshalType + " raw_ret = " + CName + call + ";");
-				sw.WriteLine(indent + "\t\t\t" + retval.CSType + " ret = " + retval.FromNative ("raw_ret") + ";");
-			}
-
-			if (!IsStatic && implementor != null)
-				implementor.Finish (sw, indent + "\t\t\t");
-			Body.Finish (sw, indent);
-			Body.HandleException (sw, indent);
-
-			if (is_get && Parameters.Count > 0) 
-				sw.WriteLine (indent + "\t\t\treturn " + Parameters.AccessorName + ";");
-			else if (!retval.IsVoid)
-				sw.WriteLine (indent + "\t\t\treturn ret;");
-			else if (IsAccessor)
-				Body.FinishAccessor (sw, Signature, indent);
-
-			sw.Write(indent + "\t\t}");
-		}
-
-		bool IsAccessor { 
-			get { 
-				return retval.IsVoid && Signature.IsAccessor; 
-			} 
-		}
-	}
-}
-
+				gen_info.Writer.Write("{0} ", Protection);
+			GenerateDeclCommon (gen_info.Writer, implementor);
+
+			if (is_get || is_set)
+			{
+				gen_info.Writer.Write ("\t\t\t");
+				gen_info.Writer.Write ((is_get) ? "get" : "set");
+				GenerateBody (gen_info, implementor, "\t");
+			}
+			else
+				GenerateBody (gen_info, implementor, "");
+			
+			if (is_get || is_set)
+			{
+				if (comp != null && retval.CSType == comp.Parameters.AccessorReturnType)
+				{
+					gen_info.Writer.WriteLine ();
+					gen_info.Writer.Write ("\t\t\tset");
+					comp.GenerateBody (gen_info, implementor, "\t");
+				}
+				gen_info.Writer.WriteLine ();
+				gen_info.Writer.WriteLine ("\t\t}");
+			}
+			else
+				gen_info.Writer.WriteLine();
+			
+			gen_info.Writer.WriteLine();
+
+			Statistics.MethodCount++;
+		}
+
+		public void GenerateBody (GenerationInfo gen_info, ClassBase implementor, string indent)
+		{
+			StreamWriter sw = gen_info.Writer;
+			sw.WriteLine(" {");
+			if (!IsStatic && implementor != null)
+				implementor.Prepare (sw, indent + "\t\t\t");
+			if (IsAccessor)
+				Body.InitAccessor (sw, Signature, indent);
+			Body.Initialize(gen_info, is_get, is_set, indent);
+
+			sw.Write(indent + "\t\t\t");
+			if (retval.IsVoid)
+				sw.WriteLine(CName + call + ";");
+			else {
+				sw.WriteLine(retval.MarshalType + " raw_ret = " + CName + call + ";");
+				sw.WriteLine(indent + "\t\t\t" + retval.CSType + " ret = " + retval.FromNative ("raw_ret") + ";");
+			}
+
+			if (!IsStatic && implementor != null)
+				implementor.Finish (sw, indent + "\t\t\t");
+			Body.Finish (sw, indent);
+			Body.HandleException (sw, indent);
+
+			if (is_get && Parameters.Count > 0) 
+				sw.WriteLine (indent + "\t\t\treturn " + Parameters.AccessorName + ";");
+			else if (!retval.IsVoid)
+				sw.WriteLine (indent + "\t\t\treturn ret;");
+			else if (IsAccessor)
+				Body.FinishAccessor (sw, Signature, indent);
+
+			sw.Write(indent + "\t\t}");
+		}
+
+		bool IsAccessor { 
+			get { 
+				return retval.IsVoid && Signature.IsAccessor; 
+			} 
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/MethodBody.cs b/lib/unique-sharp/generator/MethodBody.cs
index 2f614d0..cee7079 100644
--- a/lib/unique-sharp/generator/MethodBody.cs
+++ b/lib/unique-sharp/generator/MethodBody.cs
@@ -1,177 +1,177 @@
-// GtkSharp.Generation.MethodBody.cs - The MethodBody Generation Class.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-
-	public class MethodBody  {
-		
-		Parameters parameters;
-
-		public MethodBody (Parameters parms) 
-		{
-			parameters = parms;
-		}
-
-		private string CastFromInt (string type)
-		{
-			return type != "int" ? "(" + type + ") " : "";
-		}
-
-		public string GetCallString (bool is_set)
-		{
-			if (parameters.Count == 0)
-				return String.Empty;
-
-			string[] result = new string [parameters.Count];
-			for (int i = 0; i < parameters.Count; i++) {
-				Parameter p = parameters [i];
-				IGeneratable igen = p.Generatable;
-
-				bool is_prop = is_set && i == 0;
-
-				if (i > 0 && parameters [i - 1].IsString && p.IsLength && p.PassAs == String.Empty) {
-					string string_name = (i == 1 && is_set) ? "value" : parameters [i - 1].Name;
-					result[i] = igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" +  string_name + ")");
-					continue;
-				}
-
-				if (is_prop)
-					p.CallName = "value";
-				else
-					p.CallName = p.Name;
-				string call_parm = p.CallString;
-
-				if (p.IsUserData && parameters.IsHidden (p) && !parameters.HideData &&
-					   (i == 0 || parameters [i - 1].Scope != "notified")) {
-					call_parm = "IntPtr.Zero"; 
-				}
-
-				result [i] += call_parm;
-			}
-
-			return String.Join (", ", result);
-		}
-
-		public void Initialize (GenerationInfo gen_info)
-		{
-			Initialize (gen_info, false, false, String.Empty);
-		}
-
-		public void Initialize (GenerationInfo gen_info, bool is_get, bool is_set, string indent)
-		{
-			if (parameters.Count == 0)
-				return;
-
-			StreamWriter sw = gen_info.Writer;
-			for (int i = 0; i < parameters.Count; i++) {
-				Parameter p = parameters [i];
-
-				IGeneratable gen = p.Generatable;
-				string name = p.Name;
-				if (is_set)
-					name = "value";
-
-				p.CallName = name;
-				foreach (string prep in p.Prepare)
-					sw.WriteLine (indent + "\t\t\t" + prep);
-
-				if (gen is CallbackGen) {
-					CallbackGen cbgen = gen as CallbackGen;
-					string wrapper = cbgen.GenWrapper(gen_info);
-					switch (p.Scope) {
-					case "notified":
-						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
-						sw.WriteLine (indent + "\t\t\tIntPtr {0};", parameters [i + 1].Name);
-						sw.WriteLine (indent + "\t\t\t{0} {1};", parameters [i + 2].CSType, parameters [i + 2].Name);
-						sw.WriteLine (indent + "\t\t\tif ({0} == null) {{", name);
-						sw.WriteLine (indent + "\t\t\t\t{0} = IntPtr.Zero;", parameters [i + 1].Name);
-						sw.WriteLine (indent + "\t\t\t\t{0} = null;", parameters [i + 2].Name);
-						sw.WriteLine (indent + "\t\t\t} else {");
-						sw.WriteLine (indent + "\t\t\t\t{0} = (IntPtr) GCHandle.Alloc ({1}_wrapper);", parameters [i + 1].Name, name);
-						sw.WriteLine (indent + "\t\t\t\t{0} = GLib.DestroyHelper.NotifyHandler;", parameters [i + 2].Name, parameters [i + 2].CSType);
-						sw.WriteLine (indent + "\t\t\t}");
-						break;
-
-					case "async":
-						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
-						sw.WriteLine (indent + "\t\t\t{0}_wrapper.PersistUntilCalled ();", name);
-						break;
-					case "call":
-					default:
-						if (p.Scope == String.Empty)
-							Console.WriteLine ("Defaulting " + gen.Name + " param to 'call' scope in method " + gen_info.CurrentMember);
-						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
-						break;
-					}
-				}
-			}
-
-			if (ThrowsException)
-				sw.WriteLine (indent + "\t\t\tIntPtr error = IntPtr.Zero;");
-		}
-
-		public void InitAccessor (StreamWriter sw, Signature sig, string indent)
-		{
-			sw.WriteLine (indent + "\t\t\t" + sig.AccessorType + " " + sig.AccessorName + ";");
-		}
-
-		public void Finish (StreamWriter sw, string indent)
-		{
-			foreach (Parameter p in parameters)
-				foreach (string s in p.Finish)
-					sw.WriteLine(indent + "\t\t\t" + s);
-		}
-
-		public void FinishAccessor (StreamWriter sw, Signature sig, string indent)
-		{
-			sw.WriteLine (indent + "\t\t\treturn " + sig.AccessorName + ";");
-		}
-
-		public void HandleException (StreamWriter sw, string indent)
-		{
-			if (!ThrowsException)
-				return;
-			sw.WriteLine (indent + "\t\t\tif (error != IntPtr.Zero) throw new GLib.GException (error);");
-		}
-		
-		public bool ThrowsException {
-			get {
-				int idx = parameters.Count - 1;
-
-				while (idx >= 0) {
-					if (parameters [idx].IsUserData)
-						idx--;
-					else if (parameters [idx].CType == "GError**")
-						return true;
-					else
-						break;
-				}
-				return false;
-			}
-		}
-	}
-}
-
+// GtkSharp.Generation.MethodBody.cs - The MethodBody Generation Class.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+
+	public class MethodBody  {
+		
+		Parameters parameters;
+
+		public MethodBody (Parameters parms) 
+		{
+			parameters = parms;
+		}
+
+		private string CastFromInt (string type)
+		{
+			return type != "int" ? "(" + type + ") " : "";
+		}
+
+		public string GetCallString (bool is_set)
+		{
+			if (parameters.Count == 0)
+				return String.Empty;
+
+			string[] result = new string [parameters.Count];
+			for (int i = 0; i < parameters.Count; i++) {
+				Parameter p = parameters [i];
+				IGeneratable igen = p.Generatable;
+
+				bool is_prop = is_set && i == 0;
+
+				if (i > 0 && parameters [i - 1].IsString && p.IsLength && p.PassAs == String.Empty) {
+					string string_name = (i == 1 && is_set) ? "value" : parameters [i - 1].Name;
+					result[i] = igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" +  string_name + ")");
+					continue;
+				}
+
+				if (is_prop)
+					p.CallName = "value";
+				else
+					p.CallName = p.Name;
+				string call_parm = p.CallString;
+
+				if (p.IsUserData && parameters.IsHidden (p) && !parameters.HideData &&
+					   (i == 0 || parameters [i - 1].Scope != "notified")) {
+					call_parm = "IntPtr.Zero"; 
+				}
+
+				result [i] += call_parm;
+			}
+
+			return String.Join (", ", result);
+		}
+
+		public void Initialize (GenerationInfo gen_info)
+		{
+			Initialize (gen_info, false, false, String.Empty);
+		}
+
+		public void Initialize (GenerationInfo gen_info, bool is_get, bool is_set, string indent)
+		{
+			if (parameters.Count == 0)
+				return;
+
+			StreamWriter sw = gen_info.Writer;
+			for (int i = 0; i < parameters.Count; i++) {
+				Parameter p = parameters [i];
+
+				IGeneratable gen = p.Generatable;
+				string name = p.Name;
+				if (is_set)
+					name = "value";
+
+				p.CallName = name;
+				foreach (string prep in p.Prepare)
+					sw.WriteLine (indent + "\t\t\t" + prep);
+
+				if (gen is CallbackGen) {
+					CallbackGen cbgen = gen as CallbackGen;
+					string wrapper = cbgen.GenWrapper(gen_info);
+					switch (p.Scope) {
+					case "notified":
+						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
+						sw.WriteLine (indent + "\t\t\tIntPtr {0};", parameters [i + 1].Name);
+						sw.WriteLine (indent + "\t\t\t{0} {1};", parameters [i + 2].CSType, parameters [i + 2].Name);
+						sw.WriteLine (indent + "\t\t\tif ({0} == null) {{", name);
+						sw.WriteLine (indent + "\t\t\t\t{0} = IntPtr.Zero;", parameters [i + 1].Name);
+						sw.WriteLine (indent + "\t\t\t\t{0} = null;", parameters [i + 2].Name);
+						sw.WriteLine (indent + "\t\t\t} else {");
+						sw.WriteLine (indent + "\t\t\t\t{0} = (IntPtr) GCHandle.Alloc ({1}_wrapper);", parameters [i + 1].Name, name);
+						sw.WriteLine (indent + "\t\t\t\t{0} = GLib.DestroyHelper.NotifyHandler;", parameters [i + 2].Name, parameters [i + 2].CSType);
+						sw.WriteLine (indent + "\t\t\t}");
+						break;
+
+					case "async":
+						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
+						sw.WriteLine (indent + "\t\t\t{0}_wrapper.PersistUntilCalled ();", name);
+						break;
+					case "call":
+					default:
+						if (p.Scope == String.Empty)
+							Console.WriteLine ("Defaulting " + gen.Name + " param to 'call' scope in method " + gen_info.CurrentMember);
+						sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
+						break;
+					}
+				}
+			}
+
+			if (ThrowsException)
+				sw.WriteLine (indent + "\t\t\tIntPtr error = IntPtr.Zero;");
+		}
+
+		public void InitAccessor (StreamWriter sw, Signature sig, string indent)
+		{
+			sw.WriteLine (indent + "\t\t\t" + sig.AccessorType + " " + sig.AccessorName + ";");
+		}
+
+		public void Finish (StreamWriter sw, string indent)
+		{
+			foreach (Parameter p in parameters)
+				foreach (string s in p.Finish)
+					sw.WriteLine(indent + "\t\t\t" + s);
+		}
+
+		public void FinishAccessor (StreamWriter sw, Signature sig, string indent)
+		{
+			sw.WriteLine (indent + "\t\t\treturn " + sig.AccessorName + ";");
+		}
+
+		public void HandleException (StreamWriter sw, string indent)
+		{
+			if (!ThrowsException)
+				return;
+			sw.WriteLine (indent + "\t\t\tif (error != IntPtr.Zero) throw new GLib.GException (error);");
+		}
+		
+		public bool ThrowsException {
+			get {
+				int idx = parameters.Count - 1;
+
+				while (idx >= 0) {
+					if (parameters [idx].IsUserData)
+						idx--;
+					else if (parameters [idx].CType == "GError**")
+						return true;
+					else
+						break;
+				}
+				return false;
+			}
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/ObjectGen.cs b/lib/unique-sharp/generator/ObjectGen.cs
index 2235a64..58d2c17 100644
--- a/lib/unique-sharp/generator/ObjectGen.cs
+++ b/lib/unique-sharp/generator/ObjectGen.cs
@@ -1,425 +1,425 @@
-// GtkSharp.Generation.ObjectGen.cs - The Object Generatable.
-//
-// Author: Mike Kestner <mkestner ximian com>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Text;
-	using System.Xml;
-
-	public class ObjectGen : ObjectBase  {
-
-		private ArrayList custom_attrs = new ArrayList();
-		private ArrayList strings = new ArrayList();
-		private ArrayList vm_nodes = new ArrayList();
-		private Hashtable childprops = new Hashtable();
-		private static Hashtable dirs = new Hashtable ();
-
-		public ObjectGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
-		{
-			foreach (XmlNode node in elem.ChildNodes) {
-				string name;
-
-				if (!(node is XmlElement)) continue;
-				XmlElement member = (XmlElement) node;
-
-				switch (node.Name) {
-				case "callback":
-					Statistics.IgnoreCount++;
-					break;
-
-				case "custom-attribute":
-					custom_attrs.Add (member.InnerXml);
-					break;
-
-				case "virtual_method":
-					Statistics.IgnoreCount++;
-					break;
-
-				case "static-string":
-					strings.Add (node);
-					break;
-
-				case "childprop":
-					name = member.GetAttribute ("name");
-					while (childprops.ContainsKey (name))
-						name += "mangled";
-					childprops.Add (name, new ChildProperty (member, this));
-					break;
-
-				default:
-					if (!IsNodeNameHandled (node.Name))
-						Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
-					break;
-				}
-			}
-		}
-
-		public override bool Validate ()
-		{
-			ArrayList invalids = new ArrayList ();
-
-			foreach (ChildProperty prop in childprops.Values) {
-				if (!prop.Validate ()) {
-					Console.WriteLine ("in Object " + QualifiedName);
-					invalids.Add (prop);
-				}
-			}
-			foreach (ChildProperty prop in invalids)
-				childprops.Remove (prop);
-
-			return base.Validate ();
-		}
-
-		private bool DisableVoidCtor {
-			get {
-				return Elem.HasAttribute ("disable_void_ctor");
-			}
-		}
-
-		private bool DisableGTypeCtor {
-			get {
-				return Elem.HasAttribute ("disable_gtype_ctor");
-			}
-		}
-
-		private class DirectoryInfo {
-			public string assembly_name;
-			public Hashtable objects;
-
-			public DirectoryInfo (string assembly_name) {
-				this.assembly_name = assembly_name;
-				objects = new Hashtable ();
-			}
-		}
-
-		private static DirectoryInfo GetDirectoryInfo (string dir, string assembly_name)
-		{
-			DirectoryInfo result;
-
-			if (dirs.ContainsKey (dir)) {
-				result = dirs [dir] as DirectoryInfo;
-				if  (result.assembly_name != assembly_name) {
-					Console.WriteLine ("Can't put multiple assemblies in one directory.");
-					return null;
-				}
-
-				return result;
-			}
-
-			result = new DirectoryInfo (assembly_name);
-			dirs.Add (dir, result);
-			
-			return result;
-		}
-
-		public override void Generate (GenerationInfo gen_info)
-		{
-			gen_info.CurrentType = Name;
-
-			string asm_name = gen_info.AssemblyName.Length == 0 ? NS.ToLower () + "-sharp" : gen_info.AssemblyName;
-			DirectoryInfo di = GetDirectoryInfo (gen_info.Dir, asm_name);
-
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ("\tusing System.Collections;");
-			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
-			sw.WriteLine ();
-
-			SymbolTable table = SymbolTable.Table;
-
-			sw.WriteLine ("#region Autogenerated code");
-			if (IsDeprecated)
-				sw.WriteLine ("\t[Obsolete]");
-			foreach (string attr in custom_attrs)
-				sw.WriteLine ("\t" + attr);
-			sw.Write ("\t{0} {1}class " + Name, IsInternal ? "internal" : "public", IsAbstract ? "abstract " : "");
-			string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));
-			if (cs_parent != "") {
-				di.objects.Add (CName, QualifiedName);
-				sw.Write (" : " + cs_parent);
-			}
-			foreach (string iface in interfaces) {
-				if (Parent != null && Parent.Implements (iface))
-					continue;
-				sw.Write (", " + table.GetCSType (iface));
-			}
-			foreach (string iface in managed_interfaces) {
-				if (Parent != null && Parent.Implements (iface))
-					continue;
-				sw.Write (", " + iface);
-			}
-			sw.WriteLine (" {");
-			sw.WriteLine ();
-
-			GenCtors (gen_info);
-			GenProperties (gen_info, null);
-			GenFields (gen_info);
-			GenChildProperties (gen_info);
-			
-			bool has_sigs = (sigs != null && sigs.Count > 0);
-			if (!has_sigs) {
-				foreach (string iface in interfaces) {
-					ClassBase igen = table.GetClassGen (iface);
-					if (igen != null && igen.Signals != null) {
-						has_sigs = true;
-						break;
-					}
-				}
-			}
-
-			if (has_sigs && Elem.HasAttribute("parent")) {
-				GenSignals (gen_info, null);
-			}
-
-			if (vm_nodes.Count > 0) {
-				if (gen_info.GlueEnabled) {
-					GenVirtualMethods (gen_info);
-				} else {
-					Statistics.VMIgnored = true;
-					Statistics.ThrottledCount += vm_nodes.Count;
-				}
-			}
-
-			GenMethods (gen_info, null, null);
-			
-			if (interfaces.Count != 0) {
-				Hashtable all_methods = new Hashtable ();
-				foreach (Method m in Methods.Values)
-					all_methods[m.Name] = m;
-				Hashtable collisions = new Hashtable ();
-				foreach (string iface in interfaces) {
-					ClassBase igen = table.GetClassGen (iface);
-					foreach (Method m in igen.Methods.Values) {
-						Method collision = all_methods[m.Name] as Method;
-						if (collision != null && collision.Signature.Types == m.Signature.Types)
-							collisions[m.Name] = true;
-						else
-							all_methods[m.Name] = m;
-					}
-				}
-					
-				foreach (string iface in interfaces) {
-					if (Parent != null && Parent.Implements (iface))
-						continue;
-					ClassBase igen = table.GetClassGen (iface);
-					igen.GenMethods (gen_info, collisions, this);
-					igen.GenProperties (gen_info, this);
-					igen.GenSignals (gen_info, this);
-				}
-			}
-
-			foreach (XmlElement str in strings) {
-				sw.Write ("\t\tpublic static string " + str.GetAttribute ("name"));
-				sw.WriteLine (" {\n\t\t\t get { return \"" + str.GetAttribute ("value") + "\"; }\n\t\t}");
-			}
-
-			if (cs_parent != String.Empty && GetExpected (CName) != QualifiedName) {
-				sw.WriteLine ();
-				sw.WriteLine ("\t\tstatic " + Name + " ()");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tGtkSharp." + Studlify (asm_name) + ".ObjectManager.Initialize ();");
-				sw.WriteLine ("\t\t}");
-			}
-
-			sw.WriteLine ("#endregion");
-			AppendCustom (sw, gen_info.CustomDir);
-
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-
-			sw.Close ();
-			gen_info.Writer = null;
-			Statistics.ObjectCount++;
-		}
-
-		protected override void GenCtors (GenerationInfo gen_info)
-		{
-			if (!Elem.HasAttribute("parent"))
-				return;
-
-			if (!DisableGTypeCtor) {
-				gen_info.Writer.WriteLine("\t\t[Obsolete]");
-				gen_info.Writer.WriteLine("\t\tprotected " + Name + "(GLib.GType gtype) : base(gtype) {}");
-			}
-			gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}");
-			if (ctors.Count == 0 && !DisableVoidCtor) {
-				gen_info.Writer.WriteLine();
-				gen_info.Writer.WriteLine("\t\tprotected " + Name + "() : base(IntPtr.Zero)");
-				gen_info.Writer.WriteLine("\t\t{");
-				gen_info.Writer.WriteLine("\t\t\tCreateNativeObject (new string [0], new GLib.Value [0]);");
-				gen_info.Writer.WriteLine("\t\t}");
-			}
-			gen_info.Writer.WriteLine();
-
-			base.GenCtors (gen_info);
-		}
-
-		protected void GenChildProperties (GenerationInfo gen_info)
-		{
-			if (childprops.Count == 0)
-				return;
-
-			StreamWriter sw = gen_info.Writer;
-
-			ObjectGen child_ancestor = Parent as ObjectGen;
-			while (child_ancestor.CName != "GtkContainer" &&
-			       child_ancestor.childprops.Count == 0)
-				child_ancestor = child_ancestor.Parent as ObjectGen;
-
-			sw.WriteLine ("\t\tpublic class " + Name + "Child : " + child_ancestor.NS + "." + child_ancestor.Name + "." + child_ancestor.Name + "Child {");
-			sw.WriteLine ("\t\t\tprotected internal " + Name + "Child (Gtk.Container parent, Gtk.Widget child) : base (parent, child) {}");
-			sw.WriteLine ("");
-
-			foreach (ChildProperty prop in childprops.Values)
-				prop.Generate (gen_info, "\t\t\t", null);
-
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ("");
-
-			sw.WriteLine ("\t\tpublic override Gtk.Container.ContainerChild this [Gtk.Widget child] {");
-			sw.WriteLine ("\t\t\tget {");
-			sw.WriteLine ("\t\t\t\treturn new " + Name + "Child (this, child);");
-			sw.WriteLine ("\t\t\t}");
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ("");
-			
-		}
-
-		private void GenVMGlue (GenerationInfo gen_info, XmlElement elem)
-		{
-			StreamWriter sw = gen_info.GlueWriter;
-
-			string vm_name = elem.GetAttribute ("cname");
-			string method = gen_info.GluelibName + "_" + NS + Name + "_override_" + vm_name;
-			sw.WriteLine ();
-			sw.WriteLine ("void " + method + " (GType type, gpointer cb);");
-			sw.WriteLine ();
-			sw.WriteLine ("void");
-			sw.WriteLine (method + " (GType type, gpointer cb)");
-			sw.WriteLine ("{");
-			sw.WriteLine ("\t{0} *klass = ({0} *) g_type_class_peek (type);", NS + Name + "Class");
-			sw.WriteLine ("\tklass->" + vm_name + " = cb;");
-			sw.WriteLine ("}");
-		}
-
-		static bool vmhdrs_needed = true;
-
-		private void GenVirtualMethods (GenerationInfo gen_info)
-		{
-			if (vmhdrs_needed) {
-				gen_info.GlueWriter.WriteLine ("#include <glib-object.h>");
-				gen_info.GlueWriter.WriteLine ("#include \"vmglueheaders.h\"");
-				gen_info.GlueWriter.WriteLine ();
-				vmhdrs_needed = false;
-			}
-
-			foreach (XmlElement elem in vm_nodes) {
-				GenVMGlue (gen_info, elem);
-			}
-		}
-
-		/* Keep this in sync with the one in glib/GType.cs */
-		private static string GetExpected (string cname)
-		{
-			for (int i = 1; i < cname.Length; i++) {
-				if (Char.IsUpper (cname[i])) {
-					if (i == 1 && cname[0] == 'G')
-						return "GLib." + cname.Substring (1);
-					else
-						return cname.Substring (0, i) + "." + cname.Substring (i);
-				}
-			}
-
-			throw new ArgumentException ("cname doesn't follow the NamespaceType capitalization style: " + cname);
-		}
-
-		private static bool NeedsMap (Hashtable objs, string assembly_name)
-		{
-			foreach (string key in objs.Keys)
-				if (GetExpected (key) != ((string) objs[key]))
-					return true;
-			
-			return false;
-		}
-
-		private static string Studlify (string name)
-		{
-			string result = "";
-
-			string[] subs = name.Split ('-');
-			foreach (string sub in subs)
-				result += Char.ToUpper (sub[0]) + sub.Substring (1);
-				
-			return result;
-		}
-				
-		public static void GenerateMappers ()
-		{
-			foreach (string dir in dirs.Keys) {
-
-				DirectoryInfo di = dirs[dir] as DirectoryInfo;
-
-				if (!NeedsMap (di.objects, di.assembly_name))
-					continue;
-	
-				GenerationInfo gen_info = new GenerationInfo (dir, di.assembly_name);
-
-				GenerateMapper (di, gen_info);
-			}
-		}
-
-		private static void GenerateMapper (DirectoryInfo dir_info, GenerationInfo gen_info)
-		{
-			StreamWriter sw = gen_info.OpenStream ("ObjectManager");
-
-			sw.WriteLine ("namespace GtkSharp." + Studlify (dir_info.assembly_name) + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tpublic class ObjectManager {");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tstatic bool initialized = false;");
-			sw.WriteLine ("\t\t// Call this method from the appropriate module init function.");
-			sw.WriteLine ("\t\tpublic static void Initialize ()");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tif (initialized)");
-			sw.WriteLine ("\t\t\t\treturn;");
-			sw.WriteLine ("");
-			sw.WriteLine ("\t\t\tinitialized = true;");
-	
-			foreach (string key in dir_info.objects.Keys) {
-				if (GetExpected(key) != ((string) dir_info.objects[key]))
-					sw.WriteLine ("\t\t\tGLib.GType.Register ({0}.GType, typeof ({0}));", dir_info.objects [key]);
-			}
-					
-			sw.WriteLine ("\t\t}");
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-			sw.Close ();
-		}
-	}
-}
-
+// GtkSharp.Generation.ObjectGen.cs - The Object Generatable.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Text;
+	using System.Xml;
+
+	public class ObjectGen : ObjectBase  {
+
+		private ArrayList custom_attrs = new ArrayList();
+		private ArrayList strings = new ArrayList();
+		private ArrayList vm_nodes = new ArrayList();
+		private Hashtable childprops = new Hashtable();
+		private static Hashtable dirs = new Hashtable ();
+
+		public ObjectGen (XmlElement ns, XmlElement elem) : base (ns, elem) 
+		{
+			foreach (XmlNode node in elem.ChildNodes) {
+				string name;
+
+				if (!(node is XmlElement)) continue;
+				XmlElement member = (XmlElement) node;
+
+				switch (node.Name) {
+				case "callback":
+					Statistics.IgnoreCount++;
+					break;
+
+				case "custom-attribute":
+					custom_attrs.Add (member.InnerXml);
+					break;
+
+				case "virtual_method":
+					Statistics.IgnoreCount++;
+					break;
+
+				case "static-string":
+					strings.Add (node);
+					break;
+
+				case "childprop":
+					name = member.GetAttribute ("name");
+					while (childprops.ContainsKey (name))
+						name += "mangled";
+					childprops.Add (name, new ChildProperty (member, this));
+					break;
+
+				default:
+					if (!IsNodeNameHandled (node.Name))
+						Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
+					break;
+				}
+			}
+		}
+
+		public override bool Validate ()
+		{
+			ArrayList invalids = new ArrayList ();
+
+			foreach (ChildProperty prop in childprops.Values) {
+				if (!prop.Validate ()) {
+					Console.WriteLine ("in Object " + QualifiedName);
+					invalids.Add (prop);
+				}
+			}
+			foreach (ChildProperty prop in invalids)
+				childprops.Remove (prop);
+
+			return base.Validate ();
+		}
+
+		private bool DisableVoidCtor {
+			get {
+				return Elem.HasAttribute ("disable_void_ctor");
+			}
+		}
+
+		private bool DisableGTypeCtor {
+			get {
+				return Elem.HasAttribute ("disable_gtype_ctor");
+			}
+		}
+
+		private class DirectoryInfo {
+			public string assembly_name;
+			public Hashtable objects;
+
+			public DirectoryInfo (string assembly_name) {
+				this.assembly_name = assembly_name;
+				objects = new Hashtable ();
+			}
+		}
+
+		private static DirectoryInfo GetDirectoryInfo (string dir, string assembly_name)
+		{
+			DirectoryInfo result;
+
+			if (dirs.ContainsKey (dir)) {
+				result = dirs [dir] as DirectoryInfo;
+				if  (result.assembly_name != assembly_name) {
+					Console.WriteLine ("Can't put multiple assemblies in one directory.");
+					return null;
+				}
+
+				return result;
+			}
+
+			result = new DirectoryInfo (assembly_name);
+			dirs.Add (dir, result);
+			
+			return result;
+		}
+
+		public override void Generate (GenerationInfo gen_info)
+		{
+			gen_info.CurrentType = Name;
+
+			string asm_name = gen_info.AssemblyName.Length == 0 ? NS.ToLower () + "-sharp" : gen_info.AssemblyName;
+			DirectoryInfo di = GetDirectoryInfo (gen_info.Dir, asm_name);
+
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Collections;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+			sw.WriteLine ();
+
+			SymbolTable table = SymbolTable.Table;
+
+			sw.WriteLine ("#region Autogenerated code");
+			if (IsDeprecated)
+				sw.WriteLine ("\t[Obsolete]");
+			foreach (string attr in custom_attrs)
+				sw.WriteLine ("\t" + attr);
+			sw.Write ("\t{0} {1}class " + Name, IsInternal ? "internal" : "public", IsAbstract ? "abstract " : "");
+			string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));
+			if (cs_parent != "") {
+				di.objects.Add (CName, QualifiedName);
+				sw.Write (" : " + cs_parent);
+			}
+			foreach (string iface in interfaces) {
+				if (Parent != null && Parent.Implements (iface))
+					continue;
+				sw.Write (", " + table.GetCSType (iface));
+			}
+			foreach (string iface in managed_interfaces) {
+				if (Parent != null && Parent.Implements (iface))
+					continue;
+				sw.Write (", " + iface);
+			}
+			sw.WriteLine (" {");
+			sw.WriteLine ();
+
+			GenCtors (gen_info);
+			GenProperties (gen_info, null);
+			GenFields (gen_info);
+			GenChildProperties (gen_info);
+			
+			bool has_sigs = (sigs != null && sigs.Count > 0);
+			if (!has_sigs) {
+				foreach (string iface in interfaces) {
+					ClassBase igen = table.GetClassGen (iface);
+					if (igen != null && igen.Signals != null) {
+						has_sigs = true;
+						break;
+					}
+				}
+			}
+
+			if (has_sigs && Elem.HasAttribute("parent")) {
+				GenSignals (gen_info, null);
+			}
+
+			if (vm_nodes.Count > 0) {
+				if (gen_info.GlueEnabled) {
+					GenVirtualMethods (gen_info);
+				} else {
+					Statistics.VMIgnored = true;
+					Statistics.ThrottledCount += vm_nodes.Count;
+				}
+			}
+
+			GenMethods (gen_info, null, null);
+			
+			if (interfaces.Count != 0) {
+				Hashtable all_methods = new Hashtable ();
+				foreach (Method m in Methods.Values)
+					all_methods[m.Name] = m;
+				Hashtable collisions = new Hashtable ();
+				foreach (string iface in interfaces) {
+					ClassBase igen = table.GetClassGen (iface);
+					foreach (Method m in igen.Methods.Values) {
+						Method collision = all_methods[m.Name] as Method;
+						if (collision != null && collision.Signature.Types == m.Signature.Types)
+							collisions[m.Name] = true;
+						else
+							all_methods[m.Name] = m;
+					}
+				}
+					
+				foreach (string iface in interfaces) {
+					if (Parent != null && Parent.Implements (iface))
+						continue;
+					ClassBase igen = table.GetClassGen (iface);
+					igen.GenMethods (gen_info, collisions, this);
+					igen.GenProperties (gen_info, this);
+					igen.GenSignals (gen_info, this);
+				}
+			}
+
+			foreach (XmlElement str in strings) {
+				sw.Write ("\t\tpublic static string " + str.GetAttribute ("name"));
+				sw.WriteLine (" {\n\t\t\t get { return \"" + str.GetAttribute ("value") + "\"; }\n\t\t}");
+			}
+
+			if (cs_parent != String.Empty && GetExpected (CName) != QualifiedName) {
+				sw.WriteLine ();
+				sw.WriteLine ("\t\tstatic " + Name + " ()");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tGtkSharp." + Studlify (asm_name) + ".ObjectManager.Initialize ();");
+				sw.WriteLine ("\t\t}");
+			}
+
+			sw.WriteLine ("#endregion");
+			AppendCustom (sw, gen_info.CustomDir);
+
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+
+			sw.Close ();
+			gen_info.Writer = null;
+			Statistics.ObjectCount++;
+		}
+
+		protected override void GenCtors (GenerationInfo gen_info)
+		{
+			if (!Elem.HasAttribute("parent"))
+				return;
+
+			if (!DisableGTypeCtor) {
+				gen_info.Writer.WriteLine("\t\t[Obsolete]");
+				gen_info.Writer.WriteLine("\t\tprotected " + Name + "(GLib.GType gtype) : base(gtype) {}");
+			}
+			gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}");
+			if (ctors.Count == 0 && !DisableVoidCtor) {
+				gen_info.Writer.WriteLine();
+				gen_info.Writer.WriteLine("\t\tprotected " + Name + "() : base(IntPtr.Zero)");
+				gen_info.Writer.WriteLine("\t\t{");
+				gen_info.Writer.WriteLine("\t\t\tCreateNativeObject (new string [0], new GLib.Value [0]);");
+				gen_info.Writer.WriteLine("\t\t}");
+			}
+			gen_info.Writer.WriteLine();
+
+			base.GenCtors (gen_info);
+		}
+
+		protected void GenChildProperties (GenerationInfo gen_info)
+		{
+			if (childprops.Count == 0)
+				return;
+
+			StreamWriter sw = gen_info.Writer;
+
+			ObjectGen child_ancestor = Parent as ObjectGen;
+			while (child_ancestor.CName != "GtkContainer" &&
+			       child_ancestor.childprops.Count == 0)
+				child_ancestor = child_ancestor.Parent as ObjectGen;
+
+			sw.WriteLine ("\t\tpublic class " + Name + "Child : " + child_ancestor.NS + "." + child_ancestor.Name + "." + child_ancestor.Name + "Child {");
+			sw.WriteLine ("\t\t\tprotected internal " + Name + "Child (Gtk.Container parent, Gtk.Widget child) : base (parent, child) {}");
+			sw.WriteLine ("");
+
+			foreach (ChildProperty prop in childprops.Values)
+				prop.Generate (gen_info, "\t\t\t", null);
+
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ("");
+
+			sw.WriteLine ("\t\tpublic override Gtk.Container.ContainerChild this [Gtk.Widget child] {");
+			sw.WriteLine ("\t\t\tget {");
+			sw.WriteLine ("\t\t\t\treturn new " + Name + "Child (this, child);");
+			sw.WriteLine ("\t\t\t}");
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ("");
+			
+		}
+
+		private void GenVMGlue (GenerationInfo gen_info, XmlElement elem)
+		{
+			StreamWriter sw = gen_info.GlueWriter;
+
+			string vm_name = elem.GetAttribute ("cname");
+			string method = gen_info.GluelibName + "_" + NS + Name + "_override_" + vm_name;
+			sw.WriteLine ();
+			sw.WriteLine ("void " + method + " (GType type, gpointer cb);");
+			sw.WriteLine ();
+			sw.WriteLine ("void");
+			sw.WriteLine (method + " (GType type, gpointer cb)");
+			sw.WriteLine ("{");
+			sw.WriteLine ("\t{0} *klass = ({0} *) g_type_class_peek (type);", NS + Name + "Class");
+			sw.WriteLine ("\tklass->" + vm_name + " = cb;");
+			sw.WriteLine ("}");
+		}
+
+		static bool vmhdrs_needed = true;
+
+		private void GenVirtualMethods (GenerationInfo gen_info)
+		{
+			if (vmhdrs_needed) {
+				gen_info.GlueWriter.WriteLine ("#include <glib-object.h>");
+				gen_info.GlueWriter.WriteLine ("#include \"vmglueheaders.h\"");
+				gen_info.GlueWriter.WriteLine ();
+				vmhdrs_needed = false;
+			}
+
+			foreach (XmlElement elem in vm_nodes) {
+				GenVMGlue (gen_info, elem);
+			}
+		}
+
+		/* Keep this in sync with the one in glib/GType.cs */
+		private static string GetExpected (string cname)
+		{
+			for (int i = 1; i < cname.Length; i++) {
+				if (Char.IsUpper (cname[i])) {
+					if (i == 1 && cname[0] == 'G')
+						return "GLib." + cname.Substring (1);
+					else
+						return cname.Substring (0, i) + "." + cname.Substring (i);
+				}
+			}
+
+			throw new ArgumentException ("cname doesn't follow the NamespaceType capitalization style: " + cname);
+		}
+
+		private static bool NeedsMap (Hashtable objs, string assembly_name)
+		{
+			foreach (string key in objs.Keys)
+				if (GetExpected (key) != ((string) objs[key]))
+					return true;
+			
+			return false;
+		}
+
+		private static string Studlify (string name)
+		{
+			string result = "";
+
+			string[] subs = name.Split ('-');
+			foreach (string sub in subs)
+				result += Char.ToUpper (sub[0]) + sub.Substring (1);
+				
+			return result;
+		}
+				
+		public static void GenerateMappers ()
+		{
+			foreach (string dir in dirs.Keys) {
+
+				DirectoryInfo di = dirs[dir] as DirectoryInfo;
+
+				if (!NeedsMap (di.objects, di.assembly_name))
+					continue;
+	
+				GenerationInfo gen_info = new GenerationInfo (dir, di.assembly_name);
+
+				GenerateMapper (di, gen_info);
+			}
+		}
+
+		private static void GenerateMapper (DirectoryInfo dir_info, GenerationInfo gen_info)
+		{
+			StreamWriter sw = gen_info.OpenStream ("ObjectManager");
+
+			sw.WriteLine ("namespace GtkSharp." + Studlify (dir_info.assembly_name) + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tpublic class ObjectManager {");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tstatic bool initialized = false;");
+			sw.WriteLine ("\t\t// Call this method from the appropriate module init function.");
+			sw.WriteLine ("\t\tpublic static void Initialize ()");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tif (initialized)");
+			sw.WriteLine ("\t\t\t\treturn;");
+			sw.WriteLine ("");
+			sw.WriteLine ("\t\t\tinitialized = true;");
+	
+			foreach (string key in dir_info.objects.Keys) {
+				if (GetExpected(key) != ((string) dir_info.objects[key]))
+					sw.WriteLine ("\t\t\tGLib.GType.Register ({0}.GType, typeof ({0}));", dir_info.objects [key]);
+			}
+					
+			sw.WriteLine ("\t\t}");
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+			sw.Close ();
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/OpaqueGen.cs b/lib/unique-sharp/generator/OpaqueGen.cs
index 89e6b1f..2f77e62 100644
--- a/lib/unique-sharp/generator/OpaqueGen.cs
+++ b/lib/unique-sharp/generator/OpaqueGen.cs
@@ -1,74 +1,74 @@
-// GtkSharp.Generation.OpaqueGen.cs - The Opaque Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class OpaqueGen : HandleBase {
-
-		public OpaqueGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
-	
-		public override string FromNative(string var, bool owned)
-		{
-			return var + " == IntPtr.Zero ? null : (" + QualifiedName + ") GLib.Opaque.GetOpaque (" + var + ", typeof (" + QualifiedName + "), " + (owned ? "true" : "false") + ")";
-		}
-
-		private bool DisableRawCtor {
-			get {
-				return Elem.HasAttribute ("disable_raw_ctor");
-			}
-		}
-
-		public override void Generate (GenerationInfo gen_info)
-		{
-			gen_info.CurrentType = Name;
-
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
-
-			sw.WriteLine ("namespace " + NS + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-			sw.WriteLine ("\tusing System.Collections;");
-			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
-			sw.WriteLine ();
-
-			sw.WriteLine ("#region Autogenerated code");
-
-			SymbolTable table = SymbolTable.Table;
-
-			Method ref_, unref, dispose;
-			GetSpecialMethods (out ref_, out unref, out dispose);
-
-			if (IsDeprecated)
-				sw.WriteLine ("\t[Obsolete]");
-			sw.Write ("\t{0} class " + Name, IsInternal ? "internal" : "public");
-			string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));
-			if (cs_parent != "")
-				sw.Write (" : " + cs_parent);
-			else
-				sw.Write (" : GLib.Opaque");
+// GtkSharp.Generation.OpaqueGen.cs - The Opaque Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class OpaqueGen : HandleBase {
+
+		public OpaqueGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+	
+		public override string FromNative(string var, bool owned)
+		{
+			return var + " == IntPtr.Zero ? null : (" + QualifiedName + ") GLib.Opaque.GetOpaque (" + var + ", typeof (" + QualifiedName + "), " + (owned ? "true" : "false") + ")";
+		}
+
+		private bool DisableRawCtor {
+			get {
+				return Elem.HasAttribute ("disable_raw_ctor");
+			}
+		}
+
+		public override void Generate (GenerationInfo gen_info)
+		{
+			gen_info.CurrentType = Name;
+
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+
+			sw.WriteLine ("namespace " + NS + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+			sw.WriteLine ("\tusing System.Collections;");
+			sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+			sw.WriteLine ();
+
+			sw.WriteLine ("#region Autogenerated code");
+
+			SymbolTable table = SymbolTable.Table;
+
+			Method ref_, unref, dispose;
+			GetSpecialMethods (out ref_, out unref, out dispose);
+
+			if (IsDeprecated)
+				sw.WriteLine ("\t[Obsolete]");
+			sw.Write ("\t{0} class " + Name, IsInternal ? "internal" : "public");
+			string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));
+			if (cs_parent != "")
+				sw.Write (" : " + cs_parent);
+			else
+				sw.Write (" : GLib.Opaque");
 
 			foreach (string iface in managed_interfaces) {
 				if (Parent != null && Parent.Implements (iface))
@@ -76,162 +76,162 @@ namespace GtkSharp.Generation {
 				sw.Write (", " + iface);
 			}
 
-			sw.WriteLine (" {");
-			sw.WriteLine ();
-            
-			GenFields (gen_info);
-			GenMethods (gen_info, null, null);
-			GenCtors (gen_info);
-
-			if (ref_ != null) {
-				ref_.GenerateImport (sw);
-				sw.WriteLine ("\t\tprotected override void Ref (IntPtr raw)");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tif (!Owned) {");
-				sw.WriteLine ("\t\t\t\t" + ref_.CName + " (raw);");
-				sw.WriteLine ("\t\t\t\tOwned = true;");
-				sw.WriteLine ("\t\t\t}");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-
-				if (ref_.IsDeprecated) {
-					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
-					if (ref_.ReturnType == "void")
-						sw.WriteLine ("\t\tpublic void Ref () {}");
-					else
-						sw.WriteLine ("\t\tpublic " + Name + " Ref () { return this; }");
-					sw.WriteLine ();
-				}
-			}
-
-			bool finalizer_needed = false;
-
-			if (unref != null) {
-				unref.GenerateImport (sw);
-				sw.WriteLine ("\t\tprotected override void Unref (IntPtr raw)");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tif (Owned) {");
-				sw.WriteLine ("\t\t\t\t" + unref.CName + " (raw);");
-				sw.WriteLine ("\t\t\t\tOwned = false;");
-				sw.WriteLine ("\t\t\t}");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-
-				if (unref.IsDeprecated) {
-					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
-					sw.WriteLine ("\t\tpublic void Unref () {}");
-					sw.WriteLine ();
-				}	
-				finalizer_needed = true;
-			}
-
-			if (dispose != null) {
-				dispose.GenerateImport (sw);
-				sw.WriteLine ("\t\tprotected override void Free (IntPtr raw)");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\t" + dispose.CName + " (raw);");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-
-				if (dispose.IsDeprecated) {
-					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now freed automatically\")]");
-					sw.WriteLine ("\t\tpublic void " + dispose.Name + " () {}");
-					sw.WriteLine ();
-				}	
-				finalizer_needed = true;
-			}
-
-			if (finalizer_needed) {
-				sw.WriteLine ("\t\tclass FinalizerInfo {");
-				sw.WriteLine ("\t\t\tIntPtr handle;");
-				sw.WriteLine ();
-				sw.WriteLine ("\t\t\tpublic FinalizerInfo (IntPtr handle)");
-				sw.WriteLine ("\t\t\t{");
-				sw.WriteLine ("\t\t\t\tthis.handle = handle;");
-				sw.WriteLine ("\t\t\t}");
-				sw.WriteLine ();
-				sw.WriteLine ("\t\t\tpublic bool Handler ()");
-				sw.WriteLine ("\t\t\t{");
-				if (dispose != null)
-					sw.WriteLine ("\t\t\t\t{0} (handle);", dispose.CName);
-				else if (unref != null)
-					sw.WriteLine ("\t\t\t\t{0} (handle);", unref.CName);
-				sw.WriteLine ("\t\t\t\treturn false;");
-				sw.WriteLine ("\t\t\t}");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-				sw.WriteLine ("\t\t~{0} ()", Name);
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tif (!Owned)");
-				sw.WriteLine ("\t\t\t\treturn;");
-				sw.WriteLine ("\t\t\tFinalizerInfo info = new FinalizerInfo (Handle);");
-				sw.WriteLine ("\t\t\tGLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler));");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-			}
-
-#if false
-			Method copy = Methods ["Copy"] as Method;
-			if (copy != null && copy.Parameters.Count == 0) {
-				sw.WriteLine ("\t\tprotected override GLib.Opaque Copy (IntPtr raw)");
-				sw.WriteLine ("\t\t{");
-				sw.WriteLine ("\t\t\tGLib.Opaque result = new " + QualifiedName + " (" + copy.CName + " (raw));");
-				sw.WriteLine ("\t\t\tresult.Owned = true;");
-				sw.WriteLine ("\t\t\treturn result;");
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-			}
-#endif
-			sw.WriteLine ("#endregion");
-			
-			AppendCustom(sw, gen_info.CustomDir);
-
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-
-			sw.Close ();
-			gen_info.Writer = null;
-			Statistics.OpaqueCount++;
-		}
-
-		void GetSpecialMethods (out Method ref_, out Method unref, out Method dispose)
-		{
-			ref_ = CheckSpecialMethod (GetMethod ("Ref"));
-			unref = CheckSpecialMethod (GetMethod ("Unref"));
-
-			dispose = GetMethod ("Free");
-			if (dispose == null) {
-				dispose = GetMethod ("Destroy");
-				if (dispose == null)
-					dispose = GetMethod ("Dispose");
-			}
-			dispose = CheckSpecialMethod (dispose);
-		}
-
-		Method CheckSpecialMethod (Method method)
-		{
-			if (method == null)
-				return null;
-			if (method.ReturnType != "void" &&
-			    method.ReturnType != QualifiedName)
-				return null;
-			if (method.Signature.ToString () != "")
-				return null;
-
-			methods.Remove (method.Name);
-			return method;
-		}
-
-		protected override void GenCtors (GenerationInfo gen_info)
-		{
-			if (!DisableRawCtor) {
-				gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}");
-				gen_info.Writer.WriteLine();
-			}
-
-			base.GenCtors (gen_info);
-		}
-
-	}
-}
-
+			sw.WriteLine (" {");
+			sw.WriteLine ();
+            
+			GenFields (gen_info);
+			GenMethods (gen_info, null, null);
+			GenCtors (gen_info);
+
+			if (ref_ != null) {
+				ref_.GenerateImport (sw);
+				sw.WriteLine ("\t\tprotected override void Ref (IntPtr raw)");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tif (!Owned) {");
+				sw.WriteLine ("\t\t\t\t" + ref_.CName + " (raw);");
+				sw.WriteLine ("\t\t\t\tOwned = true;");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+
+				if (ref_.IsDeprecated) {
+					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
+					if (ref_.ReturnType == "void")
+						sw.WriteLine ("\t\tpublic void Ref () {}");
+					else
+						sw.WriteLine ("\t\tpublic " + Name + " Ref () { return this; }");
+					sw.WriteLine ();
+				}
+			}
+
+			bool finalizer_needed = false;
+
+			if (unref != null) {
+				unref.GenerateImport (sw);
+				sw.WriteLine ("\t\tprotected override void Unref (IntPtr raw)");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tif (Owned) {");
+				sw.WriteLine ("\t\t\t\t" + unref.CName + " (raw);");
+				sw.WriteLine ("\t\t\t\tOwned = false;");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+
+				if (unref.IsDeprecated) {
+					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
+					sw.WriteLine ("\t\tpublic void Unref () {}");
+					sw.WriteLine ();
+				}	
+				finalizer_needed = true;
+			}
+
+			if (dispose != null) {
+				dispose.GenerateImport (sw);
+				sw.WriteLine ("\t\tprotected override void Free (IntPtr raw)");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\t" + dispose.CName + " (raw);");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+
+				if (dispose.IsDeprecated) {
+					sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now freed automatically\")]");
+					sw.WriteLine ("\t\tpublic void " + dispose.Name + " () {}");
+					sw.WriteLine ();
+				}	
+				finalizer_needed = true;
+			}
+
+			if (finalizer_needed) {
+				sw.WriteLine ("\t\tclass FinalizerInfo {");
+				sw.WriteLine ("\t\t\tIntPtr handle;");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\t\tpublic FinalizerInfo (IntPtr handle)");
+				sw.WriteLine ("\t\t\t{");
+				sw.WriteLine ("\t\t\t\tthis.handle = handle;");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\t\tpublic bool Handler ()");
+				sw.WriteLine ("\t\t\t{");
+				if (dispose != null)
+					sw.WriteLine ("\t\t\t\t{0} (handle);", dispose.CName);
+				else if (unref != null)
+					sw.WriteLine ("\t\t\t\t{0} (handle);", unref.CName);
+				sw.WriteLine ("\t\t\t\treturn false;");
+				sw.WriteLine ("\t\t\t}");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+				sw.WriteLine ("\t\t~{0} ()", Name);
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tif (!Owned)");
+				sw.WriteLine ("\t\t\t\treturn;");
+				sw.WriteLine ("\t\t\tFinalizerInfo info = new FinalizerInfo (Handle);");
+				sw.WriteLine ("\t\t\tGLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler));");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+			}
+
+#if false
+			Method copy = Methods ["Copy"] as Method;
+			if (copy != null && copy.Parameters.Count == 0) {
+				sw.WriteLine ("\t\tprotected override GLib.Opaque Copy (IntPtr raw)");
+				sw.WriteLine ("\t\t{");
+				sw.WriteLine ("\t\t\tGLib.Opaque result = new " + QualifiedName + " (" + copy.CName + " (raw));");
+				sw.WriteLine ("\t\t\tresult.Owned = true;");
+				sw.WriteLine ("\t\t\treturn result;");
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+			}
+#endif
+			sw.WriteLine ("#endregion");
+			
+			AppendCustom(sw, gen_info.CustomDir);
+
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+
+			sw.Close ();
+			gen_info.Writer = null;
+			Statistics.OpaqueCount++;
+		}
+
+		void GetSpecialMethods (out Method ref_, out Method unref, out Method dispose)
+		{
+			ref_ = CheckSpecialMethod (GetMethod ("Ref"));
+			unref = CheckSpecialMethod (GetMethod ("Unref"));
+
+			dispose = GetMethod ("Free");
+			if (dispose == null) {
+				dispose = GetMethod ("Destroy");
+				if (dispose == null)
+					dispose = GetMethod ("Dispose");
+			}
+			dispose = CheckSpecialMethod (dispose);
+		}
+
+		Method CheckSpecialMethod (Method method)
+		{
+			if (method == null)
+				return null;
+			if (method.ReturnType != "void" &&
+			    method.ReturnType != QualifiedName)
+				return null;
+			if (method.Signature.ToString () != "")
+				return null;
+
+			methods.Remove (method.Name);
+			return method;
+		}
+
+		protected override void GenCtors (GenerationInfo gen_info)
+		{
+			if (!DisableRawCtor) {
+				gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}");
+				gen_info.Writer.WriteLine();
+			}
+
+			base.GenCtors (gen_info);
+		}
+
+	}
+}
+
diff --git a/lib/unique-sharp/generator/Parameters.cs b/lib/unique-sharp/generator/Parameters.cs
index c399c6e..75dd68f 100644
--- a/lib/unique-sharp/generator/Parameters.cs
+++ b/lib/unique-sharp/generator/Parameters.cs
@@ -1,728 +1,728 @@
-// GtkSharp.Generation.Parameters.cs - The Parameters Generation Class.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Parameter {
-
-		private XmlElement elem;
-
-		public Parameter (XmlElement e)
-		{
-			elem = e;
-		}
-
-		string call_name;
-		public string CallName {
-			get {
-				if (call_name == null)
-					return Name;
-				else
-					return call_name;
-			}
-			set {
-				call_name = value;
-			}
-		}
-
-		public string CType {
-			get {
-				string type = elem.GetAttribute("type");
-				if (type == "void*")
-					type = "gpointer";
-				return type;
-			}
-		}
-
-		public string CSType {
-			get {
-				string cstype = SymbolTable.Table.GetCSType( elem.GetAttribute("type"));
-				if (cstype == "void")
-					cstype = "System.IntPtr";
-				if (IsArray) {
-					if (IsParams)
-						cstype = "params " + cstype;
-					cstype += "[]";
-					cstype = cstype.Replace ("ref ", "");
-				}
-				return cstype;
-			}
-		}
-
-		public IGeneratable Generatable {
-			get {
-				return SymbolTable.Table[CType];
-			}
-		}
-
-		public bool IsArray {
-			get {
-				return elem.HasAttribute("array") || elem.HasAttribute("null_term_array");
-			}
-		}
-
-		public bool IsEllipsis {
-			get {
-				return elem.HasAttribute("ellipsis");
-			}
-		}
-
-		public bool IsCount {
-			get {
-				
-				if (Name.StartsWith("n_"))
-					switch (CSType) {
-					case "int":
-					case "uint":
-					case "long":
-					case "ulong":
-					case "short":
-					case "ushort": 
-						return true;
-					default:
-						return false;
-					}
-				else
-					return false;
-			}
-		}
-
-		public bool IsDestroyNotify {
-			get {
-				return CType == "GDestroyNotify";
-			}
-		}
-
-		public bool IsLength {
-			get {
-				
-				if (Name.EndsWith("len") || Name.EndsWith("length"))
-					switch (CSType) {
-					case "int":
-					case "uint":
-					case "long":
-					case "ulong":
-					case "short":
-					case "ushort": 
-						return true;
-					default:
-						return false;
-					}
-				else
-					return false;
-			}
-		}
-
-		public bool IsParams {
-			get {
-				return elem.HasAttribute("params");
-			}
-		}
-
-		public bool IsString {
-			get {
-				return (CSType == "string");
-			}
-		}
-
-		public bool IsUserData {
-			get {
-				return CSType == "IntPtr" && (Name.EndsWith ("data") || Name.EndsWith ("data_or_owner"));
-			}
-		}
-
-		public virtual string MarshalType {
-			get {
-				string type = SymbolTable.Table.GetMarshalType( elem.GetAttribute("type"));
-				if (type == "void" || Generatable is IManualMarshaler)
-					type = "IntPtr";
-				if (IsArray) {
-					type += "[]";
-					type = type.Replace ("ref ", "");
-				}
-				return type;
-			}
-		}
-
-		public string Name {
-			get {
-				return SymbolTable.Table.MangleName (elem.GetAttribute("name"));
-			}
-		}
-
-		public bool Owned {
-			get {
-				return elem.GetAttribute ("owned") == "true";
-			}
-		}
-
-		public virtual string NativeSignature {
-			get {
-				string sig = MarshalType + " " + Name;
-				if (PassAs != String.Empty)
-					sig = PassAs + " " + sig;
-				return sig;
-			}
-		}
-
-		public string PropertyName {
-			get {
-				return elem.GetAttribute("property_name");
-			}
-		}
-
-		string pass_as;
-
-		public string PassAs {
-			get {
-				if (pass_as != null)
-					return pass_as;
-
-				if (elem.HasAttribute ("pass_as"))
-					return elem.GetAttribute ("pass_as");
-
-				if (IsArray || CSType.EndsWith ("IntPtr"))
-					return "";
-
-				if (CType.EndsWith ("*") && (Generatable is SimpleGen || Generatable is EnumGen))
-					return "out";
-
-				return "";
-			}
-			set {
-				pass_as = value;
-			}
-		}
-
-		string scope;
-		public string Scope {
-			get {
-				if (scope == null)
-					scope = elem.GetAttribute ("scope");
-				return scope;
-			}
-			set {
-				scope = value;
-			}
-		}
-
-		public virtual string[] Prepare {
-			get {
-				IGeneratable gen = Generatable;
-				if (gen is IManualMarshaler) {
-					string result = "IntPtr native_" + CallName;
-					if (PassAs != "out")
-						result += " = " + (gen as IManualMarshaler).AllocNative (CallName);
-					return new string [] { result + ";" }; 
-				} else if (PassAs == "out" && CSType != MarshalType)
-					return new string [] { gen.MarshalType + " native_" + CallName + ";" };
-
-				return new string [0];
-			}
-		}
-
-		public virtual string CallString {
-			get {
-				string call_parm;
-
-				IGeneratable gen = Generatable;
-				if (gen is CallbackGen)
-					return SymbolTable.Table.CallByName (CType, CallName + "_wrapper");
-				else if (PassAs != String.Empty) {
-					call_parm = PassAs + " ";
-					if (CSType != MarshalType)
-						call_parm += "native_";
-					call_parm += CallName;
-				} else if (gen is IManualMarshaler)
-					call_parm = "native_" + CallName;
-				else
-					call_parm = SymbolTable.Table.CallByName(CType, CallName);
-			
-				return call_parm;
-			}
-		}
-
-		public virtual string[] Finish {
-			get {
-				IGeneratable gen = Generatable;
-				if (gen is IManualMarshaler) {
-					string[] result = new string [PassAs == "ref" ? 2 : 1];
-					int i = 0;
-					if (PassAs != String.Empty)
-						result [i++] = CallName + " = " + Generatable.FromNative ("native_" + CallName) + ";";
-					if (PassAs != "out")
-						result [i] = (gen as IManualMarshaler).ReleaseNative ("native_" + CallName) + ";";
-					return result;
-				} else if (PassAs != String.Empty && MarshalType != CSType)
-					return new string [] { CallName + " = " + gen.FromNative ("native_" + CallName) + ";" };
-				return new string [0];
-			}
-		}
-
-		public string FromNative (string var)
-		{
-			if (Generatable == null)
-				return String.Empty;
-			else if (Generatable is HandleBase)
-				return ((HandleBase)Generatable).FromNative (var, Owned);
-			else
-				return Generatable.FromNative (var);
-		}
-
-		public string StudlyName {
-			get {
-				string name = elem.GetAttribute("name");
-				string[] segs = name.Split('_');
-				string studly = "";
-				foreach (string s in segs) {
-					if (s.Trim () == "")
-						continue;
-					studly += (s.Substring(0,1).ToUpper() + s.Substring(1));
-				}
-				return studly;
-				
-			}
-		}
-	}
-
-	public class ArrayParameter : Parameter {
-
-		bool null_terminated;
-
-		public ArrayParameter (XmlElement elem) : base (elem) 
-		{
-			null_terminated = elem.HasAttribute ("null_term_array");
-		}
-
-		public override string MarshalType {
-			get {
-				if (Generatable is StructBase)
-					return CSType;
-				else
-					return base.MarshalType;
-			}
-		}
-
-		bool NullTerminated {
-			get {
-				return null_terminated;
-			}
-		}
-
-		public override string[] Prepare {
-			get {
-				if (CSType == MarshalType)
-					return new string [0];
-
-				ArrayList result = new ArrayList ();
-				result.Add (String.Format ("int cnt_{0} = {0} == null ? 0 : {0}.Length;", CallName));
-				result.Add (String.Format ("{0}[] native_{1} = new {0} [cnt_{1}" + (NullTerminated ? " + 1" : "") + "];", MarshalType.TrimEnd('[', ']'), CallName));
-				result.Add (String.Format ("for (int i = 0; i < cnt_{0}; i++)", CallName));
-				IGeneratable gen = Generatable;
-				if (gen is IManualMarshaler)
-					result.Add (String.Format ("\tnative_{0} [i] = {1};", CallName, (gen as IManualMarshaler).AllocNative (CallName + "[i]")));
-				else
-					result.Add (String.Format ("\tnative_{0} [i] = {1};", CallName, gen.CallByName (CallName + "[i]")));
-
-				if (NullTerminated)
-					result.Add (String.Format ("native_{0} [cnt_{0}] = IntPtr.Zero;", CallName));
-				return (string[]) result.ToArray (typeof (string));
-			}
-		}
-
-		public override string CallString {
-			get {
-				if (CSType != MarshalType)
-					return "native_" + CallName;
-				else
-					return CallName;
-			}
-		}
-
-		public override string[] Finish {
-			get {
-				if (CSType == MarshalType)
-					return new string [0];
-
-				IGeneratable gen = Generatable;
-				if (gen is IManualMarshaler) {
-					string [] result = new string [4];
-					result [0] = "for (int i = 0; i < native_" + CallName + ".Length" + (NullTerminated ? " - 1" : "") + "; i++) {";
-					result [1] = "\t" + CallName + " [i] = " + Generatable.FromNative ("native_" + CallName + "[i]") + ";";
-					result [2] = "\t" + (gen as IManualMarshaler).ReleaseNative ("native_" + CallName + "[i]") + ";";
-					result [3] = "}";
-					return result;
-				}
-
-				return new string [0];
-			}
-		}
-	}
-
-	public class ArrayCountPair : ArrayParameter {
-
-		XmlElement count_elem;
-		bool invert;
-
-		public ArrayCountPair (XmlElement array_elem, XmlElement count_elem, bool invert) : base (array_elem)
-		{
-			this.count_elem = count_elem;
-			this.invert = invert;
-		}
-
-		string CountNativeType {
-			get {
-				return SymbolTable.Table.GetMarshalType(count_elem.GetAttribute("type"));
-			}
-		}
-
-		string CountType {
-			get {
-				return SymbolTable.Table.GetCSType(count_elem.GetAttribute("type"));
-			}
-		}
-
-		string CountCast {
-			get {
-				if (CountType == "int")
-					return String.Empty;
-				else
-					return "(" + CountType + ") ";
-			}
-		}
-
-		string CountName {
-			get {
-				return SymbolTable.Table.MangleName (count_elem.GetAttribute("name"));
-			}
-		}
-
-		string CallCount (string name)
-		{
-			string result = CountCast + "(" + name + " == null ? 0 : " + name + ".Length)";
-			IGeneratable gen = SymbolTable.Table[count_elem.GetAttribute("type")];
-			return gen.CallByName (result);
-		}
-
-		public override string CallString {
-			get {
-				if (invert)
-					return CallCount (CallName) + ", " + base.CallString;
-				else
-					return base.CallString + ", " + CallCount (CallName);
-			}
-		}
-
-		public override string NativeSignature {
-			get {
-				if (invert)
-					return CountNativeType + " " + CountName + ", " + MarshalType + " " + Name;
-				else
-					return MarshalType + " " + Name + ", " + CountNativeType + " " + CountName;
-			}
-		}
-	}
-
-	public class ErrorParameter : Parameter {
-
-		public ErrorParameter (XmlElement elem) : base (elem) 
-		{
-			PassAs = "out";
-		}
-
-		public override string CallString {
-			get {
-				return "out error";
-			}
-		}
-	}
-
-	public class StructParameter : Parameter {
-
-		public StructParameter (XmlElement elem) : base (elem) {}
-
-		public override string MarshalType {
-			get {
-				return "IntPtr";
-			}
-		}
-
-		public override string[] Prepare {
-			get {
-				if (PassAs == "out")
-					return new string [] { "IntPtr native_" + CallName + " = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + Generatable.QualifiedName + ")));"};
-				else
-					return new string [] { "IntPtr native_" + CallName + " = " + (Generatable as IManualMarshaler).AllocNative (CallName) + ";"};
-			}
-		}
-
-		public override string CallString {
-			get {
-				return "native_" + CallName;
-			}
-		}
-
-		public override string[] Finish {
-			get {
-				string[] result = new string [2];
-				result [0] = CallName + " = " + FromNative ("native_" + CallName) + ";";
-				result [1] = (Generatable as IManualMarshaler).ReleaseNative ("native_" + CallName) + ";";
-				return result;
-			}
-		}
-
-		public override string NativeSignature {
-			get {
-				return "IntPtr " + CallName;
-			}
-		}
-	}
-
-	public class Parameters : IEnumerable {
-		
-		ArrayList param_list = new ArrayList ();
-		XmlElement elem;
-
-		public Parameters (XmlElement elem) 
-		{
-			if (elem == null)
-				valid = true;
-			this.elem = elem;
-		}
-
-		public int Count {
-			get {
-				return param_list.Count;
-			}
-		}
-
-		public int VisibleCount {
-			get {
-				int visible = 0;
-				foreach (Parameter p in this) {
-					if (!IsHidden (p))
-						visible++;
-				}
-				return visible;
-			}
-		}
-
-		public Parameter this [int idx] {
-			get {
-				return param_list [idx] as Parameter;
-			}
-		}
-
-		public bool IsHidden (Parameter p)
-		{
-			int idx = param_list.IndexOf (p);
-
-			if (idx > 0 && p.IsLength && p.PassAs == String.Empty && this [idx - 1].IsString)
-				return true;
-
-			if (p.IsCount && ((idx > 0 && this [idx - 1].IsArray) ||
-					  (idx < Count - 1 && this [idx + 1].IsArray)))
-				return true;
-
-			if (p.CType == "GError**")
-				return true;
-
-			if (HasCB || HideData) {
-				if (p.IsUserData && (idx == Count - 1))
-                                        return true;
-				if (p.IsUserData && (idx == Count - 2) && this [Count - 1] is ErrorParameter)
-                                        return true;
-				if (p.IsUserData && idx > 0 &&
-				    this [idx - 1].Generatable is CallbackGen)
-					return true;
-				if (p.IsDestroyNotify && (idx == Count - 1) &&
-				    this [idx - 1].IsUserData)
-					return true;
-			}
-
-			return false;
-		}
-
-		bool has_cb;
-		public bool HasCB {
-			get { return has_cb; }
-			set { has_cb = value; }
-		}
-
-		public bool HasOutParam {
-			get {
-				foreach (Parameter p in this)
-					if (p.PassAs == "out")
-						return true;
-				return false;
-			}
-		}
-
-		bool hide_data;
-		public bool HideData {
-			get { return hide_data; }
-			set { hide_data = value; }
-		}
-
-		bool is_static;
-		public bool Static {
-			get { return is_static; }
-			set { is_static = value; }
-		}
-
-		void Clear ()
-		{
-			elem = null;
-			param_list.Clear ();
-			param_list = null;
-		}
-
-		public IEnumerator GetEnumerator ()
-		{
-			return param_list.GetEnumerator ();
-		}
-
-		bool valid = false;
-
-		public bool Validate ()
-		{
-			if (valid)
-				return true;
-
-			if (elem == null)
-				return false;
-
-			for (int i = 0; i < elem.ChildNodes.Count; i++) {
-				XmlElement parm = elem.ChildNodes [i] as XmlElement;
-				if (parm == null || parm.Name != "parameter")
-					continue;
-				Parameter p = new Parameter (parm);
-				
-				if (p.IsEllipsis) {
-					Console.Write("Ellipsis parameter ");
-					Clear ();
-					return false;
-				}
-
-				if ((p.CSType == "") || (p.Name == "") || 
-				    (p.MarshalType == "") || (SymbolTable.Table.CallByName(p.CType, p.Name) == "")) {
-					Console.Write("Name: " + p.Name + " Type: " + p.CType + " ");
-					Clear ();
-					return false;
-				}
-
-				IGeneratable gen = p.Generatable;
-
-				if (p.IsArray) {
-					p = new ArrayParameter (parm);
-					if (i < elem.ChildNodes.Count - 1) {
-						XmlElement next = elem.ChildNodes [i + 1] as XmlElement;
-						if (next != null || next.Name == "parameter") {
-							Parameter c = new Parameter (next);
-							if (c.IsCount) {
-								p = new ArrayCountPair (parm, next, false);
-								i++;
-							} 
-						}
-					}
-				} else if (p.IsCount && i < elem.ChildNodes.Count - 1) {
-					XmlElement next = elem.ChildNodes [i + 1] as XmlElement;
-					if (next != null || next.Name == "parameter") {
-						Parameter a = new Parameter (next);
-						if (a.IsArray) {
-							p = new ArrayCountPair (next, parm, true);
-							i++;
-						}
-					}
-				} else if (p.CType == "GError**")
-					p = new ErrorParameter (parm);
-				else if (gen is StructBase || gen is ByRefGen) {
-					p = new StructParameter (parm);
-				} else if (gen is CallbackGen) {
-					has_cb = true;
-				}
-				param_list.Add (p);
-			}
-			
-			if (has_cb && Count > 2 && this [Count - 3].Generatable is CallbackGen && this [Count - 2].IsUserData && this [Count - 1].IsDestroyNotify)
-				this [Count - 3].Scope = "notified";
-
-			valid = true;
-			return true;
-		}
-
-		public bool IsAccessor {
-			get {
-				return VisibleCount == 1 && AccessorParam.PassAs == "out";
-			}
-		}
-
-		public Parameter AccessorParam {
-			get {
-				foreach (Parameter p in this) {
-					if (!IsHidden (p))
-						return p;
-				}
-				return null;
-			}
-		}
-
-		public string AccessorReturnType {
-			get {
-				Parameter p = AccessorParam;
-				if (p != null)
-					return p.CSType;
-				else
-					return null;
-			}
-		}
-
-		public string AccessorName {
-			get {
-				Parameter p = AccessorParam;
-				if (p != null)
-					return p.Name;
-				else
-					return null;
-			}
-		}
-
-		public string ImportSignature {
-			get {
-				if (Count == 0)
-					return String.Empty;
-
-				string[] result = new string [Count];
-				for (int i = 0; i < Count; i++)
-					result [i] = this [i].NativeSignature;
-
-				return String.Join (", ", result);
-			}
-		}
-	}
-}
-
+// GtkSharp.Generation.Parameters.cs - The Parameters Generation Class.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Parameter {
+
+		private XmlElement elem;
+
+		public Parameter (XmlElement e)
+		{
+			elem = e;
+		}
+
+		string call_name;
+		public string CallName {
+			get {
+				if (call_name == null)
+					return Name;
+				else
+					return call_name;
+			}
+			set {
+				call_name = value;
+			}
+		}
+
+		public string CType {
+			get {
+				string type = elem.GetAttribute("type");
+				if (type == "void*")
+					type = "gpointer";
+				return type;
+			}
+		}
+
+		public string CSType {
+			get {
+				string cstype = SymbolTable.Table.GetCSType( elem.GetAttribute("type"));
+				if (cstype == "void")
+					cstype = "System.IntPtr";
+				if (IsArray) {
+					if (IsParams)
+						cstype = "params " + cstype;
+					cstype += "[]";
+					cstype = cstype.Replace ("ref ", "");
+				}
+				return cstype;
+			}
+		}
+
+		public IGeneratable Generatable {
+			get {
+				return SymbolTable.Table[CType];
+			}
+		}
+
+		public bool IsArray {
+			get {
+				return elem.HasAttribute("array") || elem.HasAttribute("null_term_array");
+			}
+		}
+
+		public bool IsEllipsis {
+			get {
+				return elem.HasAttribute("ellipsis");
+			}
+		}
+
+		public bool IsCount {
+			get {
+				
+				if (Name.StartsWith("n_"))
+					switch (CSType) {
+					case "int":
+					case "uint":
+					case "long":
+					case "ulong":
+					case "short":
+					case "ushort": 
+						return true;
+					default:
+						return false;
+					}
+				else
+					return false;
+			}
+		}
+
+		public bool IsDestroyNotify {
+			get {
+				return CType == "GDestroyNotify";
+			}
+		}
+
+		public bool IsLength {
+			get {
+				
+				if (Name.EndsWith("len") || Name.EndsWith("length"))
+					switch (CSType) {
+					case "int":
+					case "uint":
+					case "long":
+					case "ulong":
+					case "short":
+					case "ushort": 
+						return true;
+					default:
+						return false;
+					}
+				else
+					return false;
+			}
+		}
+
+		public bool IsParams {
+			get {
+				return elem.HasAttribute("params");
+			}
+		}
+
+		public bool IsString {
+			get {
+				return (CSType == "string");
+			}
+		}
+
+		public bool IsUserData {
+			get {
+				return CSType == "IntPtr" && (Name.EndsWith ("data") || Name.EndsWith ("data_or_owner"));
+			}
+		}
+
+		public virtual string MarshalType {
+			get {
+				string type = SymbolTable.Table.GetMarshalType( elem.GetAttribute("type"));
+				if (type == "void" || Generatable is IManualMarshaler)
+					type = "IntPtr";
+				if (IsArray) {
+					type += "[]";
+					type = type.Replace ("ref ", "");
+				}
+				return type;
+			}
+		}
+
+		public string Name {
+			get {
+				return SymbolTable.Table.MangleName (elem.GetAttribute("name"));
+			}
+		}
+
+		public bool Owned {
+			get {
+				return elem.GetAttribute ("owned") == "true";
+			}
+		}
+
+		public virtual string NativeSignature {
+			get {
+				string sig = MarshalType + " " + Name;
+				if (PassAs != String.Empty)
+					sig = PassAs + " " + sig;
+				return sig;
+			}
+		}
+
+		public string PropertyName {
+			get {
+				return elem.GetAttribute("property_name");
+			}
+		}
+
+		string pass_as;
+
+		public string PassAs {
+			get {
+				if (pass_as != null)
+					return pass_as;
+
+				if (elem.HasAttribute ("pass_as"))
+					return elem.GetAttribute ("pass_as");
+
+				if (IsArray || CSType.EndsWith ("IntPtr"))
+					return "";
+
+				if (CType.EndsWith ("*") && (Generatable is SimpleGen || Generatable is EnumGen))
+					return "out";
+
+				return "";
+			}
+			set {
+				pass_as = value;
+			}
+		}
+
+		string scope;
+		public string Scope {
+			get {
+				if (scope == null)
+					scope = elem.GetAttribute ("scope");
+				return scope;
+			}
+			set {
+				scope = value;
+			}
+		}
+
+		public virtual string[] Prepare {
+			get {
+				IGeneratable gen = Generatable;
+				if (gen is IManualMarshaler) {
+					string result = "IntPtr native_" + CallName;
+					if (PassAs != "out")
+						result += " = " + (gen as IManualMarshaler).AllocNative (CallName);
+					return new string [] { result + ";" }; 
+				} else if (PassAs == "out" && CSType != MarshalType)
+					return new string [] { gen.MarshalType + " native_" + CallName + ";" };
+
+				return new string [0];
+			}
+		}
+
+		public virtual string CallString {
+			get {
+				string call_parm;
+
+				IGeneratable gen = Generatable;
+				if (gen is CallbackGen)
+					return SymbolTable.Table.CallByName (CType, CallName + "_wrapper");
+				else if (PassAs != String.Empty) {
+					call_parm = PassAs + " ";
+					if (CSType != MarshalType)
+						call_parm += "native_";
+					call_parm += CallName;
+				} else if (gen is IManualMarshaler)
+					call_parm = "native_" + CallName;
+				else
+					call_parm = SymbolTable.Table.CallByName(CType, CallName);
+			
+				return call_parm;
+			}
+		}
+
+		public virtual string[] Finish {
+			get {
+				IGeneratable gen = Generatable;
+				if (gen is IManualMarshaler) {
+					string[] result = new string [PassAs == "ref" ? 2 : 1];
+					int i = 0;
+					if (PassAs != String.Empty)
+						result [i++] = CallName + " = " + Generatable.FromNative ("native_" + CallName) + ";";
+					if (PassAs != "out")
+						result [i] = (gen as IManualMarshaler).ReleaseNative ("native_" + CallName) + ";";
+					return result;
+				} else if (PassAs != String.Empty && MarshalType != CSType)
+					return new string [] { CallName + " = " + gen.FromNative ("native_" + CallName) + ";" };
+				return new string [0];
+			}
+		}
+
+		public string FromNative (string var)
+		{
+			if (Generatable == null)
+				return String.Empty;
+			else if (Generatable is HandleBase)
+				return ((HandleBase)Generatable).FromNative (var, Owned);
+			else
+				return Generatable.FromNative (var);
+		}
+
+		public string StudlyName {
+			get {
+				string name = elem.GetAttribute("name");
+				string[] segs = name.Split('_');
+				string studly = "";
+				foreach (string s in segs) {
+					if (s.Trim () == "")
+						continue;
+					studly += (s.Substring(0,1).ToUpper() + s.Substring(1));
+				}
+				return studly;
+				
+			}
+		}
+	}
+
+	public class ArrayParameter : Parameter {
+
+		bool null_terminated;
+
+		public ArrayParameter (XmlElement elem) : base (elem) 
+		{
+			null_terminated = elem.HasAttribute ("null_term_array");
+		}
+
+		public override string MarshalType {
+			get {
+				if (Generatable is StructBase)
+					return CSType;
+				else
+					return base.MarshalType;
+			}
+		}
+
+		bool NullTerminated {
+			get {
+				return null_terminated;
+			}
+		}
+
+		public override string[] Prepare {
+			get {
+				if (CSType == MarshalType)
+					return new string [0];
+
+				ArrayList result = new ArrayList ();
+				result.Add (String.Format ("int cnt_{0} = {0} == null ? 0 : {0}.Length;", CallName));
+				result.Add (String.Format ("{0}[] native_{1} = new {0} [cnt_{1}" + (NullTerminated ? " + 1" : "") + "];", MarshalType.TrimEnd('[', ']'), CallName));
+				result.Add (String.Format ("for (int i = 0; i < cnt_{0}; i++)", CallName));
+				IGeneratable gen = Generatable;
+				if (gen is IManualMarshaler)
+					result.Add (String.Format ("\tnative_{0} [i] = {1};", CallName, (gen as IManualMarshaler).AllocNative (CallName + "[i]")));
+				else
+					result.Add (String.Format ("\tnative_{0} [i] = {1};", CallName, gen.CallByName (CallName + "[i]")));
+
+				if (NullTerminated)
+					result.Add (String.Format ("native_{0} [cnt_{0}] = IntPtr.Zero;", CallName));
+				return (string[]) result.ToArray (typeof (string));
+			}
+		}
+
+		public override string CallString {
+			get {
+				if (CSType != MarshalType)
+					return "native_" + CallName;
+				else
+					return CallName;
+			}
+		}
+
+		public override string[] Finish {
+			get {
+				if (CSType == MarshalType)
+					return new string [0];
+
+				IGeneratable gen = Generatable;
+				if (gen is IManualMarshaler) {
+					string [] result = new string [4];
+					result [0] = "for (int i = 0; i < native_" + CallName + ".Length" + (NullTerminated ? " - 1" : "") + "; i++) {";
+					result [1] = "\t" + CallName + " [i] = " + Generatable.FromNative ("native_" + CallName + "[i]") + ";";
+					result [2] = "\t" + (gen as IManualMarshaler).ReleaseNative ("native_" + CallName + "[i]") + ";";
+					result [3] = "}";
+					return result;
+				}
+
+				return new string [0];
+			}
+		}
+	}
+
+	public class ArrayCountPair : ArrayParameter {
+
+		XmlElement count_elem;
+		bool invert;
+
+		public ArrayCountPair (XmlElement array_elem, XmlElement count_elem, bool invert) : base (array_elem)
+		{
+			this.count_elem = count_elem;
+			this.invert = invert;
+		}
+
+		string CountNativeType {
+			get {
+				return SymbolTable.Table.GetMarshalType(count_elem.GetAttribute("type"));
+			}
+		}
+
+		string CountType {
+			get {
+				return SymbolTable.Table.GetCSType(count_elem.GetAttribute("type"));
+			}
+		}
+
+		string CountCast {
+			get {
+				if (CountType == "int")
+					return String.Empty;
+				else
+					return "(" + CountType + ") ";
+			}
+		}
+
+		string CountName {
+			get {
+				return SymbolTable.Table.MangleName (count_elem.GetAttribute("name"));
+			}
+		}
+
+		string CallCount (string name)
+		{
+			string result = CountCast + "(" + name + " == null ? 0 : " + name + ".Length)";
+			IGeneratable gen = SymbolTable.Table[count_elem.GetAttribute("type")];
+			return gen.CallByName (result);
+		}
+
+		public override string CallString {
+			get {
+				if (invert)
+					return CallCount (CallName) + ", " + base.CallString;
+				else
+					return base.CallString + ", " + CallCount (CallName);
+			}
+		}
+
+		public override string NativeSignature {
+			get {
+				if (invert)
+					return CountNativeType + " " + CountName + ", " + MarshalType + " " + Name;
+				else
+					return MarshalType + " " + Name + ", " + CountNativeType + " " + CountName;
+			}
+		}
+	}
+
+	public class ErrorParameter : Parameter {
+
+		public ErrorParameter (XmlElement elem) : base (elem) 
+		{
+			PassAs = "out";
+		}
+
+		public override string CallString {
+			get {
+				return "out error";
+			}
+		}
+	}
+
+	public class StructParameter : Parameter {
+
+		public StructParameter (XmlElement elem) : base (elem) {}
+
+		public override string MarshalType {
+			get {
+				return "IntPtr";
+			}
+		}
+
+		public override string[] Prepare {
+			get {
+				if (PassAs == "out")
+					return new string [] { "IntPtr native_" + CallName + " = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + Generatable.QualifiedName + ")));"};
+				else
+					return new string [] { "IntPtr native_" + CallName + " = " + (Generatable as IManualMarshaler).AllocNative (CallName) + ";"};
+			}
+		}
+
+		public override string CallString {
+			get {
+				return "native_" + CallName;
+			}
+		}
+
+		public override string[] Finish {
+			get {
+				string[] result = new string [2];
+				result [0] = CallName + " = " + FromNative ("native_" + CallName) + ";";
+				result [1] = (Generatable as IManualMarshaler).ReleaseNative ("native_" + CallName) + ";";
+				return result;
+			}
+		}
+
+		public override string NativeSignature {
+			get {
+				return "IntPtr " + CallName;
+			}
+		}
+	}
+
+	public class Parameters : IEnumerable {
+		
+		ArrayList param_list = new ArrayList ();
+		XmlElement elem;
+
+		public Parameters (XmlElement elem) 
+		{
+			if (elem == null)
+				valid = true;
+			this.elem = elem;
+		}
+
+		public int Count {
+			get {
+				return param_list.Count;
+			}
+		}
+
+		public int VisibleCount {
+			get {
+				int visible = 0;
+				foreach (Parameter p in this) {
+					if (!IsHidden (p))
+						visible++;
+				}
+				return visible;
+			}
+		}
+
+		public Parameter this [int idx] {
+			get {
+				return param_list [idx] as Parameter;
+			}
+		}
+
+		public bool IsHidden (Parameter p)
+		{
+			int idx = param_list.IndexOf (p);
+
+			if (idx > 0 && p.IsLength && p.PassAs == String.Empty && this [idx - 1].IsString)
+				return true;
+
+			if (p.IsCount && ((idx > 0 && this [idx - 1].IsArray) ||
+					  (idx < Count - 1 && this [idx + 1].IsArray)))
+				return true;
+
+			if (p.CType == "GError**")
+				return true;
+
+			if (HasCB || HideData) {
+				if (p.IsUserData && (idx == Count - 1))
+                                        return true;
+				if (p.IsUserData && (idx == Count - 2) && this [Count - 1] is ErrorParameter)
+                                        return true;
+				if (p.IsUserData && idx > 0 &&
+				    this [idx - 1].Generatable is CallbackGen)
+					return true;
+				if (p.IsDestroyNotify && (idx == Count - 1) &&
+				    this [idx - 1].IsUserData)
+					return true;
+			}
+
+			return false;
+		}
+
+		bool has_cb;
+		public bool HasCB {
+			get { return has_cb; }
+			set { has_cb = value; }
+		}
+
+		public bool HasOutParam {
+			get {
+				foreach (Parameter p in this)
+					if (p.PassAs == "out")
+						return true;
+				return false;
+			}
+		}
+
+		bool hide_data;
+		public bool HideData {
+			get { return hide_data; }
+			set { hide_data = value; }
+		}
+
+		bool is_static;
+		public bool Static {
+			get { return is_static; }
+			set { is_static = value; }
+		}
+
+		void Clear ()
+		{
+			elem = null;
+			param_list.Clear ();
+			param_list = null;
+		}
+
+		public IEnumerator GetEnumerator ()
+		{
+			return param_list.GetEnumerator ();
+		}
+
+		bool valid = false;
+
+		public bool Validate ()
+		{
+			if (valid)
+				return true;
+
+			if (elem == null)
+				return false;
+
+			for (int i = 0; i < elem.ChildNodes.Count; i++) {
+				XmlElement parm = elem.ChildNodes [i] as XmlElement;
+				if (parm == null || parm.Name != "parameter")
+					continue;
+				Parameter p = new Parameter (parm);
+				
+				if (p.IsEllipsis) {
+					Console.Write("Ellipsis parameter ");
+					Clear ();
+					return false;
+				}
+
+				if ((p.CSType == "") || (p.Name == "") || 
+				    (p.MarshalType == "") || (SymbolTable.Table.CallByName(p.CType, p.Name) == "")) {
+					Console.Write("Name: " + p.Name + " Type: " + p.CType + " ");
+					Clear ();
+					return false;
+				}
+
+				IGeneratable gen = p.Generatable;
+
+				if (p.IsArray) {
+					p = new ArrayParameter (parm);
+					if (i < elem.ChildNodes.Count - 1) {
+						XmlElement next = elem.ChildNodes [i + 1] as XmlElement;
+						if (next != null || next.Name == "parameter") {
+							Parameter c = new Parameter (next);
+							if (c.IsCount) {
+								p = new ArrayCountPair (parm, next, false);
+								i++;
+							} 
+						}
+					}
+				} else if (p.IsCount && i < elem.ChildNodes.Count - 1) {
+					XmlElement next = elem.ChildNodes [i + 1] as XmlElement;
+					if (next != null || next.Name == "parameter") {
+						Parameter a = new Parameter (next);
+						if (a.IsArray) {
+							p = new ArrayCountPair (next, parm, true);
+							i++;
+						}
+					}
+				} else if (p.CType == "GError**")
+					p = new ErrorParameter (parm);
+				else if (gen is StructBase || gen is ByRefGen) {
+					p = new StructParameter (parm);
+				} else if (gen is CallbackGen) {
+					has_cb = true;
+				}
+				param_list.Add (p);
+			}
+			
+			if (has_cb && Count > 2 && this [Count - 3].Generatable is CallbackGen && this [Count - 2].IsUserData && this [Count - 1].IsDestroyNotify)
+				this [Count - 3].Scope = "notified";
+
+			valid = true;
+			return true;
+		}
+
+		public bool IsAccessor {
+			get {
+				return VisibleCount == 1 && AccessorParam.PassAs == "out";
+			}
+		}
+
+		public Parameter AccessorParam {
+			get {
+				foreach (Parameter p in this) {
+					if (!IsHidden (p))
+						return p;
+				}
+				return null;
+			}
+		}
+
+		public string AccessorReturnType {
+			get {
+				Parameter p = AccessorParam;
+				if (p != null)
+					return p.CSType;
+				else
+					return null;
+			}
+		}
+
+		public string AccessorName {
+			get {
+				Parameter p = AccessorParam;
+				if (p != null)
+					return p.Name;
+				else
+					return null;
+			}
+		}
+
+		public string ImportSignature {
+			get {
+				if (Count == 0)
+					return String.Empty;
+
+				string[] result = new string [Count];
+				for (int i = 0; i < Count; i++)
+					result [i] = this [i].NativeSignature;
+
+				return String.Join (", ", result);
+			}
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/Parser.cs b/lib/unique-sharp/generator/Parser.cs
index 5d65890..61e3714 100644
--- a/lib/unique-sharp/generator/Parser.cs
+++ b/lib/unique-sharp/generator/Parser.cs
@@ -1,170 +1,170 @@
-// GtkSharp.Generation.Parser.cs - The XML Parsing engine.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2003 Ximian Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Parser  {
-		
-		private XmlDocument Load (string filename)
-		{
-			XmlDocument doc = new XmlDocument ();
-
-			try {
-				Stream stream = File.OpenRead (filename);
-				doc.Load (stream);
-				stream.Close ();
-			} catch (XmlException e) {
-				Console.WriteLine ("Invalid XML file.");
-				Console.WriteLine (e);
-				doc = null;
-			}
-
-			return doc;
-		}
-
-		public IGeneratable[] Parse (string filename)
-		{
-			XmlDocument doc = Load (filename);
-			if (doc == null)
-				return null;
-
-			XmlElement root = doc.DocumentElement;
-
-			if ((root == null) || !root.HasChildNodes) {
-				Console.WriteLine ("No Namespaces found.");
-				return null;
-			}
-
-			ArrayList gens = new ArrayList ();
-
-			foreach (XmlNode child in root.ChildNodes) {
-				XmlElement elem = child as XmlElement;
-				if (elem == null)
-					continue;
-
-				switch (child.Name) {
-				case "namespace":
-					gens.AddRange (ParseNamespace (elem));
-					break;
-				case "symbol":
-					gens.Add (ParseSymbol (elem));
-					break;
-				default:
-					Console.WriteLine ("Parser::Parse - Unexpected child node: " + child.Name);
-					break;
-				}
-			}
-
-			return (IGeneratable[]) gens.ToArray (typeof (IGeneratable));
-		}
-
-		private ArrayList ParseNamespace (XmlElement ns)
-		{
-			ArrayList result = new ArrayList ();
-
-			foreach (XmlNode def in ns.ChildNodes) {
-
-				XmlElement elem = def as XmlElement;
-				if (elem == null)
-					continue;
-
-				if (elem.HasAttribute("hidden"))
-					continue;
-
-				bool is_opaque = false;
-				if (elem.GetAttribute ("opaque") == "true" ||
-				    elem.GetAttribute ("opaque") == "1")
-					is_opaque = true;
-
-				switch (def.Name) {
-				case "alias":
-					string aname = elem.GetAttribute("cname");
-					string atype = elem.GetAttribute("type");
-					if ((aname == "") || (atype == ""))
-						continue;
-					result.Add (new AliasGen (aname, atype));
-					break;
-				case "boxed":
-					result.Add (is_opaque ? new OpaqueGen (ns, elem) as object : new BoxedGen (ns, elem) as object);
-					break;
-				case "callback":
-					result.Add (new CallbackGen (ns, elem));
-					break;
-				case "enum":
-					result.Add (new EnumGen (ns, elem));
-					break;
-				case "interface":
-					result.Add (new InterfaceGen (ns, elem));
-					break;
-				case "object":
-					result.Add (new ObjectGen (ns, elem));
-					break;
-				case "class":
-					result.Add (new ClassGen (ns, elem));
-					break;
-				case "struct":
-					result.Add (is_opaque ? new OpaqueGen (ns, elem) as object : new StructGen (ns, elem) as object);
-					break;
-				default:
-					Console.WriteLine ("Parser::ParseNamespace - Unexpected node: " + def.Name);
-					break;
-				}
-			}
-
-			return result;
-		}
-
-		private IGeneratable ParseSymbol (XmlElement symbol)
-		{
-			string type = symbol.GetAttribute ("type");
-			string cname = symbol.GetAttribute ("cname");
-			string name = symbol.GetAttribute ("name");
-			IGeneratable result = null;
-
-			if (type == "simple") {
-				if (symbol.HasAttribute ("default_value"))
-					result = new SimpleGen (cname, name, symbol.GetAttribute ("default_value"));
-				else {
-					Console.WriteLine ("Simple type element " + cname + " has no specified default value");
-					result = new SimpleGen (cname, name, String.Empty);
-				}
-			} else if (type == "manual")
-				result = new ManualGen (cname, name);
-			else if (type == "alias")
-				result = new AliasGen (cname, name);
-			else if (type == "marshal") {
-				string mtype = symbol.GetAttribute ("marshal_type");
-				string call = symbol.GetAttribute ("call_fmt");
-				string from = symbol.GetAttribute ("from_fmt");
-				result = new MarshalGen (cname, name, mtype, call, from);
-			} else
-				Console.WriteLine ("Parser::ParseSymbol - Unexpected symbol type " + type);
-
-			return result;
-		}
-	}
-}
+// GtkSharp.Generation.Parser.cs - The XML Parsing engine.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003 Ximian Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Parser  {
+		
+		private XmlDocument Load (string filename)
+		{
+			XmlDocument doc = new XmlDocument ();
+
+			try {
+				Stream stream = File.OpenRead (filename);
+				doc.Load (stream);
+				stream.Close ();
+			} catch (XmlException e) {
+				Console.WriteLine ("Invalid XML file.");
+				Console.WriteLine (e);
+				doc = null;
+			}
+
+			return doc;
+		}
+
+		public IGeneratable[] Parse (string filename)
+		{
+			XmlDocument doc = Load (filename);
+			if (doc == null)
+				return null;
+
+			XmlElement root = doc.DocumentElement;
+
+			if ((root == null) || !root.HasChildNodes) {
+				Console.WriteLine ("No Namespaces found.");
+				return null;
+			}
+
+			ArrayList gens = new ArrayList ();
+
+			foreach (XmlNode child in root.ChildNodes) {
+				XmlElement elem = child as XmlElement;
+				if (elem == null)
+					continue;
+
+				switch (child.Name) {
+				case "namespace":
+					gens.AddRange (ParseNamespace (elem));
+					break;
+				case "symbol":
+					gens.Add (ParseSymbol (elem));
+					break;
+				default:
+					Console.WriteLine ("Parser::Parse - Unexpected child node: " + child.Name);
+					break;
+				}
+			}
+
+			return (IGeneratable[]) gens.ToArray (typeof (IGeneratable));
+		}
+
+		private ArrayList ParseNamespace (XmlElement ns)
+		{
+			ArrayList result = new ArrayList ();
+
+			foreach (XmlNode def in ns.ChildNodes) {
+
+				XmlElement elem = def as XmlElement;
+				if (elem == null)
+					continue;
+
+				if (elem.HasAttribute("hidden"))
+					continue;
+
+				bool is_opaque = false;
+				if (elem.GetAttribute ("opaque") == "true" ||
+				    elem.GetAttribute ("opaque") == "1")
+					is_opaque = true;
+
+				switch (def.Name) {
+				case "alias":
+					string aname = elem.GetAttribute("cname");
+					string atype = elem.GetAttribute("type");
+					if ((aname == "") || (atype == ""))
+						continue;
+					result.Add (new AliasGen (aname, atype));
+					break;
+				case "boxed":
+					result.Add (is_opaque ? new OpaqueGen (ns, elem) as object : new BoxedGen (ns, elem) as object);
+					break;
+				case "callback":
+					result.Add (new CallbackGen (ns, elem));
+					break;
+				case "enum":
+					result.Add (new EnumGen (ns, elem));
+					break;
+				case "interface":
+					result.Add (new InterfaceGen (ns, elem));
+					break;
+				case "object":
+					result.Add (new ObjectGen (ns, elem));
+					break;
+				case "class":
+					result.Add (new ClassGen (ns, elem));
+					break;
+				case "struct":
+					result.Add (is_opaque ? new OpaqueGen (ns, elem) as object : new StructGen (ns, elem) as object);
+					break;
+				default:
+					Console.WriteLine ("Parser::ParseNamespace - Unexpected node: " + def.Name);
+					break;
+				}
+			}
+
+			return result;
+		}
+
+		private IGeneratable ParseSymbol (XmlElement symbol)
+		{
+			string type = symbol.GetAttribute ("type");
+			string cname = symbol.GetAttribute ("cname");
+			string name = symbol.GetAttribute ("name");
+			IGeneratable result = null;
+
+			if (type == "simple") {
+				if (symbol.HasAttribute ("default_value"))
+					result = new SimpleGen (cname, name, symbol.GetAttribute ("default_value"));
+				else {
+					Console.WriteLine ("Simple type element " + cname + " has no specified default value");
+					result = new SimpleGen (cname, name, String.Empty);
+				}
+			} else if (type == "manual")
+				result = new ManualGen (cname, name);
+			else if (type == "alias")
+				result = new AliasGen (cname, name);
+			else if (type == "marshal") {
+				string mtype = symbol.GetAttribute ("marshal_type");
+				string call = symbol.GetAttribute ("call_fmt");
+				string from = symbol.GetAttribute ("from_fmt");
+				result = new MarshalGen (cname, name, mtype, call, from);
+			} else
+				Console.WriteLine ("Parser::ParseSymbol - Unexpected symbol type " + type);
+
+			return result;
+		}
+	}
+}
diff --git a/lib/unique-sharp/generator/Property.cs b/lib/unique-sharp/generator/Property.cs
index 6920e3c..fbf940b 100644
--- a/lib/unique-sharp/generator/Property.cs
+++ b/lib/unique-sharp/generator/Property.cs
@@ -1,193 +1,193 @@
-// GtkSharp.Generation.Property.cs - The Property Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Property : PropertyBase {
-
-		public Property (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
-
-		public bool Validate ()
-		{
-			if (CSType == "" && !Hidden) {
-				Console.Write("Property has unknown Type {0} ", CType);
-				Statistics.ThrottledCount++;
-				return false;
-			}
-
-			return true;
-		}
-
-		bool Readable {
-			get {
-				return elem.GetAttribute ("readable") == "true";
-			}
-		}
-
-		bool Writable {
-			get {
-				return elem.GetAttribute ("writeable") == "true" &&
-					!elem.HasAttribute ("construct-only");
-			}
-		}
-
-		bool IsDeprecated {
-			get {
-				return !container_type.IsDeprecated &&
-					(elem.GetAttribute ("deprecated") == "1" ||
-					 elem.GetAttribute ("deprecated") == "true");
-			}
-		}
-
-		protected virtual string PropertyAttribute (string qpname) {
-			return "[GLib.Property (" + qpname + ")]";
-		}
-
-		protected virtual string RawGetter (string qpname) {
-			return "GetProperty (" + qpname + ")";
-		}
-
-		protected virtual string RawSetter (string qpname) {
-			return "SetProperty(" + qpname + ", val)";
-		}
-
-		public void GenerateDecl (StreamWriter sw, string indent)
-		{
-			if (Hidden || (!Readable && !Writable))
-				return;
-
-			string name = Name;
-			if (name == container_type.Name)
-				name += "Prop";
-
-			sw.WriteLine (indent + CSType + " " + name + " {");
-			sw.Write (indent + "\t");
-			if (Readable || Getter != null)
-				sw.Write ("get; ");
-			if (Writable || Setter != null)
-				sw.Write ("set;");
-			sw.WriteLine ();
-			sw.WriteLine (indent + "}");
-		}
-
-		public void Generate (GenerationInfo gen_info, string indent, ClassBase implementor)
-		{
-			SymbolTable table = SymbolTable.Table;
-			StreamWriter sw = gen_info.Writer;
-
-			if (Hidden || (!Readable && !Writable))
-				return;
-
-			string modifiers = "";
-
-			if (IsNew || (container_type.Parent != null && container_type.Parent.GetPropertyRecursively (Name) != null))
-				modifiers = "new ";
-			else if (implementor != null && implementor.Parent != null && implementor.Parent.GetPropertyRecursively (Name) != null)
-				modifiers = "new ";
-
-			string name = Name;
-			if (name == container_type.Name) {
-				name += "Prop";
-			}
-			string qpname = "\"" + CName + "\"";
-
-			string v_type = "";
-			if (table.IsInterface (CType)) {
-				v_type = "(GLib.Object)";
-			} else if (table.IsOpaque (CType)) {
-				v_type = "(GLib.Opaque)";
-			} else if (table.IsEnum (CType)) {
-				v_type = "(Enum)";
-			}
-
-			GenerateImports (gen_info, indent);
-
-			if (IsDeprecated ||
-			    (Getter != null && Getter.IsDeprecated) ||
-			    (Setter != null && Setter.IsDeprecated))
-				sw.WriteLine (indent + "[Obsolete]");
-			sw.WriteLine (indent + PropertyAttribute (qpname));
-			sw.WriteLine (indent + "public " + modifiers + CSType + " " + name + " {");
-			indent += "\t";
-
-			if (Getter != null) {
-				sw.Write(indent + "get ");
-				Getter.GenerateBody(gen_info, implementor, "\t");
-				sw.WriteLine();
-			} else if (Readable) {
-				sw.WriteLine(indent + "get {");
-				sw.WriteLine(indent + "\tGLib.Value val = " + RawGetter (qpname) + ";");
-				if (table.IsOpaque (CType) || table.IsBoxed (CType)) {
-					sw.WriteLine(indent + "\t" + CSType + " ret = (" + CSType + ") val;");
-				} else if (table.IsInterface (CType)) {
-					// Do we have to dispose the GLib.Object from the GLib.Value?
-					sw.WriteLine (indent + "\t{0} ret = {0}Adapter.GetObject ((GLib.Object) val);", CSType);
-				} else {
-					sw.Write(indent + "\t" + CSType + " ret = ");
-					sw.Write ("(" + CSType + ") ");
-					if (v_type != "") {
-						sw.Write(v_type + " ");
-					}
-					sw.WriteLine("val;");
-				}
-
-				sw.WriteLine(indent + "\tval.Dispose ();");
-				sw.WriteLine(indent + "\treturn ret;");
-				sw.WriteLine(indent + "}");
-			}
-
-			if (Setter != null) {
-				sw.Write(indent + "set ");
-				Setter.GenerateBody(gen_info, implementor, "\t");
-				sw.WriteLine();
-			} else if (Writable) {
-				sw.WriteLine(indent + "set {");
-				sw.Write(indent + "\tGLib.Value val = ");
-				if (table.IsBoxed (CType)) {
-					sw.WriteLine("(GLib.Value) value;");
-				} else if (table.IsOpaque (CType)) {
-					sw.WriteLine("new GLib.Value(value, \"{0}\");", CType);
-				} else {
-					sw.Write("new GLib.Value(");
-					if (v_type != "" && !(table.IsObject (CType) || table.IsInterface (CType) || table.IsOpaque (CType))) {
-						sw.Write(v_type + " ");
-					}
-					sw.WriteLine("value);");
-				}
-				sw.WriteLine(indent + "\t" + RawSetter (qpname) + ";");
-				sw.WriteLine(indent + "\tval.Dispose ();");
-				sw.WriteLine(indent + "}");
-			}
-
-			sw.WriteLine(indent.Substring (1) + "}");
-			sw.WriteLine();
-
-			Statistics.PropCount++;
-		}
-	}
-}
-
+// GtkSharp.Generation.Property.cs - The Property Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Property : PropertyBase {
+
+		public Property (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
+
+		public bool Validate ()
+		{
+			if (CSType == "" && !Hidden) {
+				Console.Write("Property has unknown Type {0} ", CType);
+				Statistics.ThrottledCount++;
+				return false;
+			}
+
+			return true;
+		}
+
+		bool Readable {
+			get {
+				return elem.GetAttribute ("readable") == "true";
+			}
+		}
+
+		bool Writable {
+			get {
+				return elem.GetAttribute ("writeable") == "true" &&
+					!elem.HasAttribute ("construct-only");
+			}
+		}
+
+		bool IsDeprecated {
+			get {
+				return !container_type.IsDeprecated &&
+					(elem.GetAttribute ("deprecated") == "1" ||
+					 elem.GetAttribute ("deprecated") == "true");
+			}
+		}
+
+		protected virtual string PropertyAttribute (string qpname) {
+			return "[GLib.Property (" + qpname + ")]";
+		}
+
+		protected virtual string RawGetter (string qpname) {
+			return "GetProperty (" + qpname + ")";
+		}
+
+		protected virtual string RawSetter (string qpname) {
+			return "SetProperty(" + qpname + ", val)";
+		}
+
+		public void GenerateDecl (StreamWriter sw, string indent)
+		{
+			if (Hidden || (!Readable && !Writable))
+				return;
+
+			string name = Name;
+			if (name == container_type.Name)
+				name += "Prop";
+
+			sw.WriteLine (indent + CSType + " " + name + " {");
+			sw.Write (indent + "\t");
+			if (Readable || Getter != null)
+				sw.Write ("get; ");
+			if (Writable || Setter != null)
+				sw.Write ("set;");
+			sw.WriteLine ();
+			sw.WriteLine (indent + "}");
+		}
+
+		public void Generate (GenerationInfo gen_info, string indent, ClassBase implementor)
+		{
+			SymbolTable table = SymbolTable.Table;
+			StreamWriter sw = gen_info.Writer;
+
+			if (Hidden || (!Readable && !Writable))
+				return;
+
+			string modifiers = "";
+
+			if (IsNew || (container_type.Parent != null && container_type.Parent.GetPropertyRecursively (Name) != null))
+				modifiers = "new ";
+			else if (implementor != null && implementor.Parent != null && implementor.Parent.GetPropertyRecursively (Name) != null)
+				modifiers = "new ";
+
+			string name = Name;
+			if (name == container_type.Name) {
+				name += "Prop";
+			}
+			string qpname = "\"" + CName + "\"";
+
+			string v_type = "";
+			if (table.IsInterface (CType)) {
+				v_type = "(GLib.Object)";
+			} else if (table.IsOpaque (CType)) {
+				v_type = "(GLib.Opaque)";
+			} else if (table.IsEnum (CType)) {
+				v_type = "(Enum)";
+			}
+
+			GenerateImports (gen_info, indent);
+
+			if (IsDeprecated ||
+			    (Getter != null && Getter.IsDeprecated) ||
+			    (Setter != null && Setter.IsDeprecated))
+				sw.WriteLine (indent + "[Obsolete]");
+			sw.WriteLine (indent + PropertyAttribute (qpname));
+			sw.WriteLine (indent + "public " + modifiers + CSType + " " + name + " {");
+			indent += "\t";
+
+			if (Getter != null) {
+				sw.Write(indent + "get ");
+				Getter.GenerateBody(gen_info, implementor, "\t");
+				sw.WriteLine();
+			} else if (Readable) {
+				sw.WriteLine(indent + "get {");
+				sw.WriteLine(indent + "\tGLib.Value val = " + RawGetter (qpname) + ";");
+				if (table.IsOpaque (CType) || table.IsBoxed (CType)) {
+					sw.WriteLine(indent + "\t" + CSType + " ret = (" + CSType + ") val;");
+				} else if (table.IsInterface (CType)) {
+					// Do we have to dispose the GLib.Object from the GLib.Value?
+					sw.WriteLine (indent + "\t{0} ret = {0}Adapter.GetObject ((GLib.Object) val);", CSType);
+				} else {
+					sw.Write(indent + "\t" + CSType + " ret = ");
+					sw.Write ("(" + CSType + ") ");
+					if (v_type != "") {
+						sw.Write(v_type + " ");
+					}
+					sw.WriteLine("val;");
+				}
+
+				sw.WriteLine(indent + "\tval.Dispose ();");
+				sw.WriteLine(indent + "\treturn ret;");
+				sw.WriteLine(indent + "}");
+			}
+
+			if (Setter != null) {
+				sw.Write(indent + "set ");
+				Setter.GenerateBody(gen_info, implementor, "\t");
+				sw.WriteLine();
+			} else if (Writable) {
+				sw.WriteLine(indent + "set {");
+				sw.Write(indent + "\tGLib.Value val = ");
+				if (table.IsBoxed (CType)) {
+					sw.WriteLine("(GLib.Value) value;");
+				} else if (table.IsOpaque (CType)) {
+					sw.WriteLine("new GLib.Value(value, \"{0}\");", CType);
+				} else {
+					sw.Write("new GLib.Value(");
+					if (v_type != "" && !(table.IsObject (CType) || table.IsInterface (CType) || table.IsOpaque (CType))) {
+						sw.Write(v_type + " ");
+					}
+					sw.WriteLine("value);");
+				}
+				sw.WriteLine(indent + "\t" + RawSetter (qpname) + ";");
+				sw.WriteLine(indent + "\tval.Dispose ();");
+				sw.WriteLine(indent + "}");
+			}
+
+			sw.WriteLine(indent.Substring (1) + "}");
+			sw.WriteLine();
+
+			Statistics.PropCount++;
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/ReturnValue.cs b/lib/unique-sharp/generator/ReturnValue.cs
index dce6a6c..4ace994 100644
--- a/lib/unique-sharp/generator/ReturnValue.cs
+++ b/lib/unique-sharp/generator/ReturnValue.cs
@@ -1,170 +1,170 @@
-// GtkSharp.Generation.ReturnValue.cs - The ReturnValue Generatable.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2004-2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Xml;
-
-	public class ReturnValue  {
-
-		
-		bool is_null_term;
-		bool is_array;
-		bool elements_owned;
-		bool owned;
-		string ctype = String.Empty;
-		string element_ctype = String.Empty;
-
-		public ReturnValue (XmlElement elem) 
-		{
-			if (elem != null) {
-				is_null_term = elem.HasAttribute ("null_term_array");
-				is_array = elem.HasAttribute ("array");
-				elements_owned = elem.GetAttribute ("elements_owned") == "true";
-				owned = elem.GetAttribute ("owned") == "true";
-				ctype = elem.GetAttribute("type");
-				element_ctype = elem.GetAttribute ("element_type");
-			}
-		}
-
-		public string CType {
-			get {
-				return ctype;
-			}
-		}
-
-		public string CSType {
-			get {
-				if (IGen == null)
-					return String.Empty;
-
-				if (ElementType != String.Empty)
-					return ElementType + "[]";
-
-				return IGen.QualifiedName + (is_array || is_null_term ? "[]" : String.Empty);
-			}
-		}
-
-		public string DefaultValue {
-			get {
-				if (IGen == null)
-					return String.Empty;
-				return IGen.DefaultValue;
-			}
-		}
-
-		string ElementType {
-			get {
-				if (element_ctype.Length > 0)
-					return SymbolTable.Table.GetCSType (element_ctype);
-
-				return String.Empty;
-			}
-		}
-
-		IGeneratable igen;
-		IGeneratable IGen {
-			get {
-				if (igen == null)
-					igen = SymbolTable.Table [CType];
-				return igen;
-			}
-		}
-
-		public bool IsVoid {
-			get {
-				return CSType == "void";
-			}
-		}
-
-		public string MarshalType {
-			get {
-				if (IGen == null)
-					return String.Empty;
-				else if (is_null_term)
-					return "IntPtr";
-				return IGen.MarshalReturnType + (is_array ? "[]" : String.Empty);
-			}
-		}
-
-		public string ToNativeType {
-			get {
-				if (IGen == null)
-					return String.Empty;
-				else if (is_null_term)
-					return "IntPtr"; //FIXME
-				return IGen.ToNativeReturnType + (is_array ? "[]" : String.Empty);
-			}
-		}
-
-		public string FromNative (string var)
-		{
-			if (IGen == null)
-				return String.Empty;
-
-			if (ElementType != String.Empty) {
-				string args = (owned ? "true" : "false") + ", " + (elements_owned ? "true" : "false");
-				if (IGen.QualifiedName == "GLib.PtrArray")
-					return String.Format ("({0}[]) GLib.Marshaller.PtrArrayToArray ({1}, {2}, typeof({0}))", ElementType, var, args);
-				else
-					return String.Format ("({0}[]) GLib.Marshaller.ListPtrToArray ({1}, typeof({2}), {3}, typeof({0}))", ElementType, var, IGen.QualifiedName, args);
-			} else if (IGen is HandleBase)
-				return ((HandleBase)IGen).FromNative (var, owned);
-			else if (is_null_term)
-				return String.Format ("GLib.Marshaller.NullTermPtrToStringArray ({0}, {1})", var, owned ? "true" : "false");
-			else
-				return IGen.FromNativeReturn (var);
-		}
-			
-		public string ToNative (string var)
-		{
-			if (IGen == null)
-				return String.Empty;
-
-			if (ElementType.Length > 0) {
-				string args = ", typeof (" + ElementType + "), " + (owned ? "true" : "false") + ", " + (elements_owned ? "true" : "false");
-				var = "new " + IGen.QualifiedName + "(" + var + args + ")";
-			} else if (is_null_term)
-				return String.Format ("GLib.Marshaller.StringArrayToNullTermPtr ({0})", var);
-
-			if (IGen is IManualMarshaler)
-				return (IGen as IManualMarshaler).AllocNative (var);
-			else if (IGen is ObjectGen && owned)
-				return var + " == null ? IntPtr.Zero : " + var + ".OwnedHandle";
-			else if (IGen is OpaqueGen && owned)
-				return var + " == null ? IntPtr.Zero : " + var + ".OwnedCopy";
-			else
-				return IGen.ToNativeReturn (var);
-		}
-
-		public bool Validate ()
-		{
-			if (MarshalType == "" || CSType == "") {
-				Console.Write("rettype: " + CType);
-				return false;
-			}
-
-			return true;
-		}
-	}
-}
-
+// GtkSharp.Generation.ReturnValue.cs - The ReturnValue Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Xml;
+
+	public class ReturnValue  {
+
+		
+		bool is_null_term;
+		bool is_array;
+		bool elements_owned;
+		bool owned;
+		string ctype = String.Empty;
+		string element_ctype = String.Empty;
+
+		public ReturnValue (XmlElement elem) 
+		{
+			if (elem != null) {
+				is_null_term = elem.HasAttribute ("null_term_array");
+				is_array = elem.HasAttribute ("array");
+				elements_owned = elem.GetAttribute ("elements_owned") == "true";
+				owned = elem.GetAttribute ("owned") == "true";
+				ctype = elem.GetAttribute("type");
+				element_ctype = elem.GetAttribute ("element_type");
+			}
+		}
+
+		public string CType {
+			get {
+				return ctype;
+			}
+		}
+
+		public string CSType {
+			get {
+				if (IGen == null)
+					return String.Empty;
+
+				if (ElementType != String.Empty)
+					return ElementType + "[]";
+
+				return IGen.QualifiedName + (is_array || is_null_term ? "[]" : String.Empty);
+			}
+		}
+
+		public string DefaultValue {
+			get {
+				if (IGen == null)
+					return String.Empty;
+				return IGen.DefaultValue;
+			}
+		}
+
+		string ElementType {
+			get {
+				if (element_ctype.Length > 0)
+					return SymbolTable.Table.GetCSType (element_ctype);
+
+				return String.Empty;
+			}
+		}
+
+		IGeneratable igen;
+		IGeneratable IGen {
+			get {
+				if (igen == null)
+					igen = SymbolTable.Table [CType];
+				return igen;
+			}
+		}
+
+		public bool IsVoid {
+			get {
+				return CSType == "void";
+			}
+		}
+
+		public string MarshalType {
+			get {
+				if (IGen == null)
+					return String.Empty;
+				else if (is_null_term)
+					return "IntPtr";
+				return IGen.MarshalReturnType + (is_array ? "[]" : String.Empty);
+			}
+		}
+
+		public string ToNativeType {
+			get {
+				if (IGen == null)
+					return String.Empty;
+				else if (is_null_term)
+					return "IntPtr"; //FIXME
+				return IGen.ToNativeReturnType + (is_array ? "[]" : String.Empty);
+			}
+		}
+
+		public string FromNative (string var)
+		{
+			if (IGen == null)
+				return String.Empty;
+
+			if (ElementType != String.Empty) {
+				string args = (owned ? "true" : "false") + ", " + (elements_owned ? "true" : "false");
+				if (IGen.QualifiedName == "GLib.PtrArray")
+					return String.Format ("({0}[]) GLib.Marshaller.PtrArrayToArray ({1}, {2}, typeof({0}))", ElementType, var, args);
+				else
+					return String.Format ("({0}[]) GLib.Marshaller.ListPtrToArray ({1}, typeof({2}), {3}, typeof({0}))", ElementType, var, IGen.QualifiedName, args);
+			} else if (IGen is HandleBase)
+				return ((HandleBase)IGen).FromNative (var, owned);
+			else if (is_null_term)
+				return String.Format ("GLib.Marshaller.NullTermPtrToStringArray ({0}, {1})", var, owned ? "true" : "false");
+			else
+				return IGen.FromNativeReturn (var);
+		}
+			
+		public string ToNative (string var)
+		{
+			if (IGen == null)
+				return String.Empty;
+
+			if (ElementType.Length > 0) {
+				string args = ", typeof (" + ElementType + "), " + (owned ? "true" : "false") + ", " + (elements_owned ? "true" : "false");
+				var = "new " + IGen.QualifiedName + "(" + var + args + ")";
+			} else if (is_null_term)
+				return String.Format ("GLib.Marshaller.StringArrayToNullTermPtr ({0})", var);
+
+			if (IGen is IManualMarshaler)
+				return (IGen as IManualMarshaler).AllocNative (var);
+			else if (IGen is ObjectGen && owned)
+				return var + " == null ? IntPtr.Zero : " + var + ".OwnedHandle";
+			else if (IGen is OpaqueGen && owned)
+				return var + " == null ? IntPtr.Zero : " + var + ".OwnedCopy";
+			else
+				return IGen.ToNativeReturn (var);
+		}
+
+		public bool Validate ()
+		{
+			if (MarshalType == "" || CSType == "") {
+				Console.Write("rettype: " + CType);
+				return false;
+			}
+
+			return true;
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/Signal.cs b/lib/unique-sharp/generator/Signal.cs
index d01cfe6..32901c0 100644
--- a/lib/unique-sharp/generator/Signal.cs
+++ b/lib/unique-sharp/generator/Signal.cs
@@ -1,587 +1,587 @@
-// GtkSharp.Generation.Signal.cs - The Signal Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001-2003 Mike Kestner 
-// Copyright (c) 2003-2005 Novell, Inc.
-// Copyright (c) 2007 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.IO;
-	using System.Xml;
-
-	public class Signal {
-
-		bool marshaled;
-		string name;
-		XmlElement elem;
-		ReturnValue retval;
-		Parameters parms;
-		ClassBase container_type;
-
-		public Signal (XmlElement elem, ClassBase container_type)
-		{
-			this.elem = elem;
-			name = elem.GetAttribute ("name");
-			marshaled = elem.GetAttribute ("manual") == "true";
-			retval = new ReturnValue (elem ["return-type"]);
-			parms = new Parameters (elem["parameters"]);
-			this.container_type = container_type;
-		}
-
-		bool Marshaled {
-			get { return marshaled; }
-		}
-
-		public string Name {
-			get {
-				return name; 
-			}
-			set {
-				name = value;
-			}
-		}
-
-		public bool Validate ()
-		{
-			if (Name == "") {
-				Console.Write ("Nameless signal ");
-				Statistics.ThrottledCount++;
-				return false;
-			}
-			
-			if (!parms.Validate () || !retval.Validate ()) {
-				Console.Write (" in signal " + Name + " ");
-				Statistics.ThrottledCount++;
-				return false;
-			}
-
-			return true;
-		}
-
-		public void GenerateDecl (StreamWriter sw)
-		{
-			if (elem.HasAttribute("new_flag") || (container_type != null && container_type.GetSignalRecursively (Name) != null))
-				sw.Write("new ");
-
-			sw.WriteLine ("\t\tevent " + EventHandlerQualifiedName + " " + Name + ";");
-		}
-
-		public string CName {
-			get {
-				return "\"" + elem.GetAttribute("cname") + "\"";
-			}
-		}
-
-		string CallbackSig {
-			get {
-				string result = "";
-				for (int i = 0; i < parms.Count; i++) {
-					if (i > 0)
-						result += ", ";
-
-					Parameter p = parms [i];
-					if (p.PassAs != "" && !(p.Generatable is StructBase))
-						result += p.PassAs + " ";
-					result += (p.MarshalType + " arg" + i);
-				}
-
-				return result;
-			}
-		}
-
-		string CallbackName {
-			get { return Name + "SignalCallback"; }
-		}
-
-		string DelegateName {
-			get { return Name + "SignalDelegate"; }
-		}
-
-                private string EventArgsName {
-                        get {
-                                if (IsEventHandler)
-                                        return "EventArgs";
-                                else
-                                        return Name + "Args";
-                        }
-                }
-                                                                                                                        
-                private string EventArgsQualifiedName {
-                        get {
-                                if (IsEventHandler)
-                                        return "System.EventArgs";
-                                else
-                                        return container_type.NS + "." + Name + "Args";
-                        }
-                }
-                                                                                                                        
-                private string EventHandlerName {
-                        get {
-                                if (IsEventHandler)
-                                        return "EventHandler";
-                                else if (SymbolTable.Table [container_type.NS + Name + "Handler"] != null)
-                                        return Name + "EventHandler";
-				else
-                                        return Name + "Handler";
-                        }
-                }
-                                                                                                                        
-                private string EventHandlerQualifiedName {
-                        get {
-                                if (IsEventHandler)
-                                        return "System.EventHandler";
-                                else
-                                        return container_type.NS + "." + EventHandlerName;
-                        }
-                }
-
-		string ClassFieldName {
-			get {
-				return elem.HasAttribute ("field_name") ? elem.GetAttribute("field_name") : String.Empty;
-			}
-		}
-
-		private bool HasOutParams {
-			get {
-				foreach (Parameter p in parms) {
-					if (p.PassAs == "out")
-						return true;
-				}
-				return false;
-			}
-		}
-
-		private bool IsEventHandler {
-			get {
-				return retval.CSType == "void" && parms.Count == 1 && (parms [0].Generatable is ObjectGen || parms [0].Generatable is InterfaceGen);
-			}
-		}
-
-		private bool IsVoid {
-			get {
-				return retval.CSType == "void";
-			}
-		}
-
-		private string ReturnGType {
-			get {
-				IGeneratable igen = SymbolTable.Table [retval.CType];
-
-				if (igen is ObjectGen)
-					return "GLib.GType.Object";
-				if (igen is BoxedGen)
-					return retval.CSType + ".GType";
-				if (igen is EnumGen)
-					return retval.CSType + "GType.GType";
-
-				switch (retval.CSType) {
-				case "bool":
-					return "GLib.GType.Boolean";
-				case "string":
-					return "GLib.GType.String";
-				case "int":
-					return "GLib.GType.Int";
-				default:
-					throw new Exception (retval.CSType);
-				}
-			}
-		}
-
-		public string GenArgsInitialization (StreamWriter sw)
-		{
-			if (parms.Count > 1)
-				sw.WriteLine("\t\t\t\targs.Args = new object[" + (parms.Count - 1) + "];");
-			string finish = "";
-			for (int idx = 1; idx < parms.Count; idx++) {
-				Parameter p = parms [idx];
-				IGeneratable igen = p.Generatable;
-				if (p.PassAs != "out") {
-					if (igen is ManualGen) {
-						sw.WriteLine("\t\t\t\tif (arg{0} == IntPtr.Zero)", idx);
-						sw.WriteLine("\t\t\t\t\targs.Args[{0}] = null;", idx - 1);
-						sw.WriteLine("\t\t\t\telse {");
-						sw.WriteLine("\t\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx)  + ";");
-						sw.WriteLine("\t\t\t\t}");
-					} else
-						sw.WriteLine("\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx)  + ";");
-				}
-				if (igen is StructBase && p.PassAs == "ref")
-					finish += "\t\t\t\tif (arg" + idx + " != IntPtr.Zero) System.Runtime.InteropServices.Marshal.StructureToPtr (args.Args[" + (idx-1) + "], arg" + idx + ", false);\n";
-				else if (p.PassAs != "")
-					finish += "\t\t\t\targ" + idx + " = " + igen.ToNativeReturn ("((" + p.CSType + ")args.Args[" + (idx - 1) + "])") + ";\n";
-			}
-			return finish;
-		}
-
-		public void GenArgsCleanup (StreamWriter sw, string finish)
-		{
-			if (IsVoid && finish.Length == 0)
-				return;
-
-			sw.WriteLine("\n\t\t\ttry {");
-			sw.Write (finish);
-			if (!IsVoid) {
-				if (retval.CSType == "bool") {
-					sw.WriteLine ("\t\t\t\tif (args.RetVal == null)");
-					sw.WriteLine ("\t\t\t\t\treturn false;");
-				}
-				sw.WriteLine("\t\t\t\treturn " + SymbolTable.Table.ToNativeReturn (retval.CType, "((" + retval.CSType + ")args.RetVal)") + ";");
-			}
-			sw.WriteLine("\t\t\t} catch (Exception) {");
-			sw.WriteLine ("\t\t\t\tException ex = new Exception (\"args.RetVal or 'out' property unset or set to incorrect type in " + EventHandlerQualifiedName + " callback\");");
-			sw.WriteLine("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (ex, true);");
-			
-			sw.WriteLine ("\t\t\t\t// NOTREACHED: above call doesn't return.");
-			sw.WriteLine ("\t\t\t\tthrow ex;");
-			sw.WriteLine("\t\t\t}");
-		}
-
-		public void GenCallback (StreamWriter sw)
-		{
-			if (IsEventHandler)
-				return;
-
-			sw.WriteLine ("\t\t[GLib.CDeclCallback]");
-			sw.WriteLine ("\t\tdelegate " + retval.ToNativeType + " " + DelegateName + " (" + CallbackSig + ", IntPtr gch);");
-			sw.WriteLine ();
-			sw.WriteLine ("\t\tstatic " + retval.ToNativeType + " " + CallbackName + " (" + CallbackSig + ", IntPtr gch)");
-			sw.WriteLine("\t\t{");
-			sw.WriteLine("\t\t\t{0} args = new {0} ();", EventArgsQualifiedName);
-			sw.WriteLine("\t\t\ttry {");
-			sw.WriteLine("\t\t\t\tGLib.Signal sig = ((GCHandle) gch).Target as GLib.Signal;");
-			sw.WriteLine("\t\t\t\tif (sig == null)");
-			sw.WriteLine("\t\t\t\t\tthrow new Exception(\"Unknown signal GC handle received \" + gch);");
-			sw.WriteLine();
-			string finish = GenArgsInitialization (sw);
-			sw.WriteLine("\t\t\t\t{0} handler = ({0}) sig.Handler;", EventHandlerQualifiedName);
-			sw.WriteLine("\t\t\t\thandler (GLib.Object.GetObject (arg0), args);");
-			sw.WriteLine("\t\t\t} catch (Exception e) {");
-			sw.WriteLine("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, false);");
-			sw.WriteLine("\t\t\t}");
-			GenArgsCleanup (sw, finish);
-			sw.WriteLine("\t\t}");
-			sw.WriteLine();
-		}
-
-		private bool NeedNew (ClassBase implementor)
-		{
-			return elem.HasAttribute ("new_flag") ||
-				(container_type != null && container_type.GetSignalRecursively (Name) != null) ||
-				(implementor != null && implementor.GetSignalRecursively (Name) != null);
-		}
-
-		public void GenEventHandler (GenerationInfo gen_info)
-		{
-			if (IsEventHandler)
-				return;
-
-			string ns = container_type.NS;
-
-			StreamWriter sw = gen_info.OpenStream (EventHandlerName);
-			
-			sw.WriteLine ("namespace " + ns + " {");
-			sw.WriteLine ();
-			sw.WriteLine ("\tusing System;");
-
-			sw.WriteLine ();
-			sw.WriteLine ("\tpublic delegate void " + EventHandlerName + "(object o, " + EventArgsName + " args);");
-			sw.WriteLine ();
-			sw.WriteLine ("\tpublic class " + EventArgsName + " : GLib.SignalArgs {");
-			for (int i = 1; i < parms.Count; i++) {
-				sw.WriteLine ("\t\tpublic " + parms[i].CSType + " " + parms[i].StudlyName + "{");
-				if (parms[i].PassAs != "out") {
-					sw.WriteLine ("\t\t\tget {");
-					sw.WriteLine ("\t\t\t\treturn (" + parms[i].CSType + ") Args[" + (i - 1) + "];");
-					sw.WriteLine ("\t\t\t}");
-				}
-				if (parms[i].PassAs != "") {
-					sw.WriteLine ("\t\t\tset {");
-					sw.WriteLine ("\t\t\t\tArgs[" + (i - 1) + "] = (" + parms[i].CSType + ")value;");
-					sw.WriteLine ("\t\t\t}");
-				}
-				sw.WriteLine ("\t\t}");
-				sw.WriteLine ();
-			}
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-			sw.Close ();
-		}
-
-		private void GenVMDeclaration (StreamWriter sw, ClassBase implementor)
-		{
-			VMSignature vmsig = new VMSignature (parms);
-			sw.WriteLine ("\t\t[GLib.DefaultSignalHandler(Type=typeof(" + (implementor != null ? implementor.QualifiedName : container_type.QualifiedName) + "), ConnectionMethod=\"Override" + Name +"\")]");
-			sw.Write ("\t\tprotected ");
-			if (NeedNew (implementor))
-				sw.Write ("new ");
-			sw.WriteLine ("virtual {0} {1} ({2})", retval.CSType, "On" + Name, vmsig.ToString ());
-		}
-
-		private string CastFromInt (string type)
-		{
-			return type != "int" ? "(" + type + ") " : "";
-		}
-
-		private string GlueCallString {
-			get {
-				string result = "Handle";
-
-				for (int i = 1; i < parms.Count; i++) {
-					Parameter p = parms [i];
-					IGeneratable igen = p.Generatable;
-
-					if (i > 1 && parms [i - 1].IsString && p.IsLength && p.PassAs == String.Empty) {
-						string string_name = parms [i - 1].Name;
-						result += ", " + igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" +  string_name + ")");
-						continue;
-					}
-
-					p.CallName = p.Name;
-					string call_parm = p.CallString;
-
-					if (p.IsUserData && parms.IsHidden (p) && !parms.HideData && (i == 1 || parms [i - 1].Scope != "notified")) {
-						call_parm = "IntPtr.Zero"; 
-					}
-
-					result += ", " + call_parm;
-				}
-				return result;
-			}
-		}
-
-		private string GlueSignature {
-			get {
-				string result = String.Empty;
-				for (int i = 0; i < parms.Count; i++)
-					result += parms[i].CType.Replace ("const-", "const ") + " " + parms[i].Name + (i == parms.Count-1 ? "" : ", ");
-				return result;
-			}
-		}
-
-		private string DefaultGlueValue {
-			get {
-				string val = retval.DefaultValue;
-				switch (val) {
-				case "null":
-					return "NULL";
-				case "false":
-					return "FALSE";
-				case "true":
-					return "TRUE";
-				default:
-					return val;
-				}
-			}
-		}
-
-		private void GenGlueVirtualMethod (GenerationInfo gen_info)
-		{
-			StreamWriter glue = gen_info.GlueWriter;
-			string glue_name = String.Format ("{0}sharp_{1}_base_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
-			glue.WriteLine ("{0} {1} ({2});\n", retval.CType, glue_name, GlueSignature);
-			glue.WriteLine ("{0}\n{1} ({2})", retval.CType, glue_name, GlueSignature);
-			glue.WriteLine ("{");
-			glue.WriteLine ("\t{0}Class *klass = ({0}Class *) get_threshold_class (G_OBJECT ({1}));", container_type.CName, parms[0].Name);
-			glue.Write ("\tif (klass->{0})\n\t\t", ClassFieldName);
-			if (!IsVoid)
-				glue.Write ("return ");
-			glue.Write ("(* klass->{0}) (", ClassFieldName);
-			for (int i = 0; i < parms.Count; i++)
-				glue.Write (parms[i].Name + (i == parms.Count - 1 ? "" : ", "));
-			glue.WriteLine (");");
-			if (!IsVoid)
-				glue.WriteLine ("\treturn " + DefaultGlueValue + ";");
-			glue.WriteLine ("}");
-
-			StreamWriter sw = gen_info.Writer;
-			sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
-			sw.WriteLine ("\t\tstatic extern {0} {1} ({2});\n", retval.MarshalType, glue_name, parms.ImportSignature);
-			GenVMDeclaration (sw, null);
-			sw.WriteLine ("\t\t{");
-			MethodBody body = new MethodBody (parms);
-			body.Initialize (gen_info, false, false, String.Empty);
-			sw.WriteLine ("\t\t\t{0}{1} ({2});", IsVoid ? "" : retval.MarshalType + " __ret = ", glue_name, GlueCallString);
-			body.Finish (sw, "");
-			if (!IsVoid)
-				sw.WriteLine ("\t\t\treturn {0};", retval.FromNative ("__ret"));
-			sw.WriteLine ("\t\t}\n");
-		}
-
-		private void GenChainVirtualMethod (StreamWriter sw, ClassBase implementor)
-		{
-			GenVMDeclaration (sw, implementor);
-			sw.WriteLine ("\t\t{");
-			if (IsVoid)
-				sw.WriteLine ("\t\t\tGLib.Value ret = GLib.Value.Empty;");
-			else
-				sw.WriteLine ("\t\t\tGLib.Value ret = new GLib.Value (" + ReturnGType + ");");
-
-			sw.WriteLine ("\t\t\tGLib.ValueArray inst_and_params = new GLib.ValueArray (" + parms.Count + ");");
-			sw.WriteLine ("\t\t\tGLib.Value[] vals = new GLib.Value [" + parms.Count + "];");
-			sw.WriteLine ("\t\t\tvals [0] = new GLib.Value (this);");
-			sw.WriteLine ("\t\t\tinst_and_params.Append (vals [0]);");
-			string cleanup = "";
-			for (int i = 1; i < parms.Count; i++) {
-				Parameter p = parms [i];
-				if (p.PassAs != "") {
-					if (SymbolTable.Table.IsBoxed (p.CType)) {
-						if (p.PassAs == "ref")
-							sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + ");");
-						else
-							sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value ((GLib.GType)typeof (" + p.CSType + "));");
-						cleanup += "\t\t\t" + p.Name + " = (" + p.CSType + ") vals [" + i + "];\n";
-					} else {
-						if (p.PassAs == "ref")
-							sw.WriteLine ("\t\t\tIntPtr " + p.Name + "_ptr = GLib.Marshaller.StructureToPtrAlloc (" + p.Generatable.CallByName (p.Name) + ");");
-						else
-							sw.WriteLine ("\t\t\tIntPtr " + p.Name + "_ptr = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + p.MarshalType + ")));");
-
-						sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + "_ptr);");
-						cleanup += "\t\t\t" + p.Name + " = " + p.FromNative ("(" + p.MarshalType + ") Marshal.PtrToStructure (" + p.Name + "_ptr, typeof (" + p.MarshalType + "))") + ";\n";
-						cleanup += "\t\t\tMarshal.FreeHGlobal (" + p.Name + "_ptr);\n";
-					}
-				} else if (p.IsLength && parms [i - 1].IsString)
-					sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (System.Text.Encoding.UTF8.GetByteCount (" + parms [i-1].Name + "));");
-				else
-					sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + ");");
-
-				sw.WriteLine ("\t\t\tinst_and_params.Append (vals [" + i + "]);");
-			}
-
-			sw.WriteLine ("\t\t\tg_signal_chain_from_overridden (inst_and_params.ArrayPtr, ref ret);");
-			if (cleanup != "")
-				sw.WriteLine (cleanup);
-			sw.WriteLine ("\t\t\tforeach (GLib.Value v in vals)");
-			sw.WriteLine ("\t\t\t\tv.Dispose ();");
-			if (!IsVoid) {
-				IGeneratable igen = SymbolTable.Table [retval.CType];
-				sw.WriteLine ("\t\t\t" + retval.CSType + " result = (" + (igen is EnumGen ? retval.CSType + ") (Enum" : retval.CSType) + ") ret;");
-				sw.WriteLine ("\t\t\tret.Dispose ();");
-				sw.WriteLine ("\t\t\treturn result;");
-			}
-			sw.WriteLine ("\t\t}\n");
-		}
-
-		private void GenDefaultHandlerDelegate (GenerationInfo gen_info, ClassBase implementor)
-		{
-			StreamWriter sw = gen_info.Writer;
-			StreamWriter glue;
-			bool use_glue = gen_info.GlueEnabled && implementor == null && ClassFieldName.Length > 0;
-			string glue_name = String.Empty;
-			ManagedCallString call = new ManagedCallString (parms, true);
-			sw.WriteLine ("\t\t[GLib.CDeclCallback]");
-			sw.WriteLine ("\t\tdelegate " + retval.ToNativeType + " " + Name + "VMDelegate (" + parms.ImportSignature + ");\n");
-
-			if (use_glue) {
-				glue = gen_info.GlueWriter;
-				glue_name = String.Format ("{0}sharp_{1}_override_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
-				sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
-				sw.WriteLine ("\t\tstatic extern void {0} (IntPtr gtype, {1}VMDelegate cb);\n", glue_name, Name);
-				glue.WriteLine ("void {0} (GType gtype, gpointer cb);\n", glue_name);
-				glue.WriteLine ("void\n{0} (GType gtype, gpointer cb)", glue_name);
-				glue.WriteLine ("{");
-				glue.WriteLine ("\tGObjectClass *klass = g_type_class_peek (gtype);");
-				glue.WriteLine ("\tif (klass == NULL)");
-				glue.WriteLine ("\t\tklass = g_type_class_ref (gtype);");
-				glue.WriteLine ("\t(({0} *)klass)->{1} = cb;", container_type.CName + "Class", ClassFieldName);
-				glue.WriteLine ("}\n");
-			}
-
-			sw.WriteLine ("\t\tstatic {0} {1};\n", Name + "VMDelegate", Name + "VMCallback");
-			sw.WriteLine ("\t\tstatic " + retval.ToNativeType + " " + Name.ToLower() + "_cb (" + parms.ImportSignature + ")");
-			sw.WriteLine ("\t\t{");
-			string unconditional = call.Unconditional ("\t\t\t");
-			if (unconditional.Length > 0)
-				sw.WriteLine (unconditional);
-			sw.WriteLine ("\t\t\ttry {");
-			sw.WriteLine ("\t\t\t\t{0} {1}_managed = GLib.Object.GetObject ({1}, false) as {0};", implementor != null ? implementor.Name : container_type.Name, parms[0].Name);
-			sw.Write (call.Setup ("\t\t\t\t"));
-			sw.Write ("\t\t\t\t{0}", IsVoid ? "" : retval.CSType == retval.ToNativeType ? "return " : retval.CSType + " raw_ret = ");
-			sw.WriteLine ("{2}_managed.{0} ({1});", "On" + Name, call.ToString (), parms[0].Name);
-			sw.Write (call.Finish ("\t\t\t\t"));
-			if (!IsVoid && retval.CSType != retval.ToNativeType)
-				sw.WriteLine ("\t\t\t\treturn {0};", SymbolTable.Table.ToNativeReturn (retval.CType, "raw_ret"));
-			sw.WriteLine ("\t\t\t} catch (Exception e) {");
-			bool fatal = HasOutParams || !IsVoid;
-			sw.WriteLine ("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, " + (fatal ? "true" : "false") + ");");
-			if (fatal) {
-				sw.WriteLine ("\t\t\t\t// NOTREACHED: above call doesn't return");
-				sw.WriteLine ("\t\t\t\tthrow e;");
-			}
-			sw.WriteLine ("\t\t\t}");
-			sw.WriteLine ("\t\t}\n");
-			sw.WriteLine ("\t\tprivate static void Override" + Name + " (GLib.GType gtype)");
-			sw.WriteLine ("\t\t{");
-			sw.WriteLine ("\t\t\tif (" + Name + "VMCallback == null)");
-			sw.WriteLine ("\t\t\t\t" + Name + "VMCallback = new " + Name + "VMDelegate (" + Name.ToLower() + "_cb);");
-			if (use_glue)
-				sw.WriteLine ("\t\t\t{0} (gtype.Val, {1}VMCallback);", glue_name, Name);
-			else
-				sw.WriteLine ("\t\t\tOverrideVirtualMethod (gtype, " + CName + ", " + Name + "VMCallback);");
-			sw.WriteLine ("\t\t}\n");
-		}
-
-		public void GenEvent (StreamWriter sw, ClassBase implementor, string target)
-		{
-			string args_type = IsEventHandler ? "" : ", typeof (" + EventArgsQualifiedName + ")";
-			
-			if (Marshaled) {
-				GenCallback (sw);
-				args_type = ", new " + DelegateName + "(" + CallbackName + ")";
-			}
-
-			sw.WriteLine("\t\t[GLib.Signal("+ CName + ")]");
-			sw.Write("\t\tpublic ");
-			if (NeedNew (implementor))
-				sw.Write("new ");
-			sw.WriteLine("event " + EventHandlerQualifiedName + " " + Name + " {");
-			sw.WriteLine("\t\t\tadd {");
-			sw.WriteLine("\t\t\t\tGLib.Signal sig = GLib.Signal.Lookup (" + target + ", " + CName + args_type + ");");
-			sw.WriteLine("\t\t\t\tsig.AddDelegate (value);");
-			sw.WriteLine("\t\t\t}");
-			sw.WriteLine("\t\t\tremove {");
-			sw.WriteLine("\t\t\t\tGLib.Signal sig = GLib.Signal.Lookup (" + target + ", " + CName + args_type + ");");
-			sw.WriteLine("\t\t\t\tsig.RemoveDelegate (value);");
-			sw.WriteLine("\t\t\t}");
-			sw.WriteLine("\t\t}");
-			sw.WriteLine();
-		}
-
-		public void Generate (GenerationInfo gen_info, ClassBase implementor)
-		{
-			StreamWriter sw = gen_info.Writer;
-
-			if (implementor == null)
-				GenEventHandler (gen_info);
-
-			GenDefaultHandlerDelegate (gen_info, implementor);
-			if (gen_info.GlueEnabled && implementor == null && ClassFieldName.Length > 0)
-				GenGlueVirtualMethod (gen_info);
-			else
-				GenChainVirtualMethod (sw, implementor);
-			GenEvent (sw, implementor, "this");
-			
-			Statistics.SignalCount++;
-		}
-	}
-}
-
+// GtkSharp.Generation.Signal.cs - The Signal Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner 
+// Copyright (c) 2003-2005 Novell, Inc.
+// Copyright (c) 2007 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.IO;
+	using System.Xml;
+
+	public class Signal {
+
+		bool marshaled;
+		string name;
+		XmlElement elem;
+		ReturnValue retval;
+		Parameters parms;
+		ClassBase container_type;
+
+		public Signal (XmlElement elem, ClassBase container_type)
+		{
+			this.elem = elem;
+			name = elem.GetAttribute ("name");
+			marshaled = elem.GetAttribute ("manual") == "true";
+			retval = new ReturnValue (elem ["return-type"]);
+			parms = new Parameters (elem["parameters"]);
+			this.container_type = container_type;
+		}
+
+		bool Marshaled {
+			get { return marshaled; }
+		}
+
+		public string Name {
+			get {
+				return name; 
+			}
+			set {
+				name = value;
+			}
+		}
+
+		public bool Validate ()
+		{
+			if (Name == "") {
+				Console.Write ("Nameless signal ");
+				Statistics.ThrottledCount++;
+				return false;
+			}
+			
+			if (!parms.Validate () || !retval.Validate ()) {
+				Console.Write (" in signal " + Name + " ");
+				Statistics.ThrottledCount++;
+				return false;
+			}
+
+			return true;
+		}
+
+		public void GenerateDecl (StreamWriter sw)
+		{
+			if (elem.HasAttribute("new_flag") || (container_type != null && container_type.GetSignalRecursively (Name) != null))
+				sw.Write("new ");
+
+			sw.WriteLine ("\t\tevent " + EventHandlerQualifiedName + " " + Name + ";");
+		}
+
+		public string CName {
+			get {
+				return "\"" + elem.GetAttribute("cname") + "\"";
+			}
+		}
+
+		string CallbackSig {
+			get {
+				string result = "";
+				for (int i = 0; i < parms.Count; i++) {
+					if (i > 0)
+						result += ", ";
+
+					Parameter p = parms [i];
+					if (p.PassAs != "" && !(p.Generatable is StructBase))
+						result += p.PassAs + " ";
+					result += (p.MarshalType + " arg" + i);
+				}
+
+				return result;
+			}
+		}
+
+		string CallbackName {
+			get { return Name + "SignalCallback"; }
+		}
+
+		string DelegateName {
+			get { return Name + "SignalDelegate"; }
+		}
+
+                private string EventArgsName {
+                        get {
+                                if (IsEventHandler)
+                                        return "EventArgs";
+                                else
+                                        return Name + "Args";
+                        }
+                }
+                                                                                                                        
+                private string EventArgsQualifiedName {
+                        get {
+                                if (IsEventHandler)
+                                        return "System.EventArgs";
+                                else
+                                        return container_type.NS + "." + Name + "Args";
+                        }
+                }
+                                                                                                                        
+                private string EventHandlerName {
+                        get {
+                                if (IsEventHandler)
+                                        return "EventHandler";
+                                else if (SymbolTable.Table [container_type.NS + Name + "Handler"] != null)
+                                        return Name + "EventHandler";
+				else
+                                        return Name + "Handler";
+                        }
+                }
+                                                                                                                        
+                private string EventHandlerQualifiedName {
+                        get {
+                                if (IsEventHandler)
+                                        return "System.EventHandler";
+                                else
+                                        return container_type.NS + "." + EventHandlerName;
+                        }
+                }
+
+		string ClassFieldName {
+			get {
+				return elem.HasAttribute ("field_name") ? elem.GetAttribute("field_name") : String.Empty;
+			}
+		}
+
+		private bool HasOutParams {
+			get {
+				foreach (Parameter p in parms) {
+					if (p.PassAs == "out")
+						return true;
+				}
+				return false;
+			}
+		}
+
+		private bool IsEventHandler {
+			get {
+				return retval.CSType == "void" && parms.Count == 1 && (parms [0].Generatable is ObjectGen || parms [0].Generatable is InterfaceGen);
+			}
+		}
+
+		private bool IsVoid {
+			get {
+				return retval.CSType == "void";
+			}
+		}
+
+		private string ReturnGType {
+			get {
+				IGeneratable igen = SymbolTable.Table [retval.CType];
+
+				if (igen is ObjectGen)
+					return "GLib.GType.Object";
+				if (igen is BoxedGen)
+					return retval.CSType + ".GType";
+				if (igen is EnumGen)
+					return retval.CSType + "GType.GType";
+
+				switch (retval.CSType) {
+				case "bool":
+					return "GLib.GType.Boolean";
+				case "string":
+					return "GLib.GType.String";
+				case "int":
+					return "GLib.GType.Int";
+				default:
+					throw new Exception (retval.CSType);
+				}
+			}
+		}
+
+		public string GenArgsInitialization (StreamWriter sw)
+		{
+			if (parms.Count > 1)
+				sw.WriteLine("\t\t\t\targs.Args = new object[" + (parms.Count - 1) + "];");
+			string finish = "";
+			for (int idx = 1; idx < parms.Count; idx++) {
+				Parameter p = parms [idx];
+				IGeneratable igen = p.Generatable;
+				if (p.PassAs != "out") {
+					if (igen is ManualGen) {
+						sw.WriteLine("\t\t\t\tif (arg{0} == IntPtr.Zero)", idx);
+						sw.WriteLine("\t\t\t\t\targs.Args[{0}] = null;", idx - 1);
+						sw.WriteLine("\t\t\t\telse {");
+						sw.WriteLine("\t\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx)  + ";");
+						sw.WriteLine("\t\t\t\t}");
+					} else
+						sw.WriteLine("\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx)  + ";");
+				}
+				if (igen is StructBase && p.PassAs == "ref")
+					finish += "\t\t\t\tif (arg" + idx + " != IntPtr.Zero) System.Runtime.InteropServices.Marshal.StructureToPtr (args.Args[" + (idx-1) + "], arg" + idx + ", false);\n";
+				else if (p.PassAs != "")
+					finish += "\t\t\t\targ" + idx + " = " + igen.ToNativeReturn ("((" + p.CSType + ")args.Args[" + (idx - 1) + "])") + ";\n";
+			}
+			return finish;
+		}
+
+		public void GenArgsCleanup (StreamWriter sw, string finish)
+		{
+			if (IsVoid && finish.Length == 0)
+				return;
+
+			sw.WriteLine("\n\t\t\ttry {");
+			sw.Write (finish);
+			if (!IsVoid) {
+				if (retval.CSType == "bool") {
+					sw.WriteLine ("\t\t\t\tif (args.RetVal == null)");
+					sw.WriteLine ("\t\t\t\t\treturn false;");
+				}
+				sw.WriteLine("\t\t\t\treturn " + SymbolTable.Table.ToNativeReturn (retval.CType, "((" + retval.CSType + ")args.RetVal)") + ";");
+			}
+			sw.WriteLine("\t\t\t} catch (Exception) {");
+			sw.WriteLine ("\t\t\t\tException ex = new Exception (\"args.RetVal or 'out' property unset or set to incorrect type in " + EventHandlerQualifiedName + " callback\");");
+			sw.WriteLine("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (ex, true);");
+			
+			sw.WriteLine ("\t\t\t\t// NOTREACHED: above call doesn't return.");
+			sw.WriteLine ("\t\t\t\tthrow ex;");
+			sw.WriteLine("\t\t\t}");
+		}
+
+		public void GenCallback (StreamWriter sw)
+		{
+			if (IsEventHandler)
+				return;
+
+			sw.WriteLine ("\t\t[GLib.CDeclCallback]");
+			sw.WriteLine ("\t\tdelegate " + retval.ToNativeType + " " + DelegateName + " (" + CallbackSig + ", IntPtr gch);");
+			sw.WriteLine ();
+			sw.WriteLine ("\t\tstatic " + retval.ToNativeType + " " + CallbackName + " (" + CallbackSig + ", IntPtr gch)");
+			sw.WriteLine("\t\t{");
+			sw.WriteLine("\t\t\t{0} args = new {0} ();", EventArgsQualifiedName);
+			sw.WriteLine("\t\t\ttry {");
+			sw.WriteLine("\t\t\t\tGLib.Signal sig = ((GCHandle) gch).Target as GLib.Signal;");
+			sw.WriteLine("\t\t\t\tif (sig == null)");
+			sw.WriteLine("\t\t\t\t\tthrow new Exception(\"Unknown signal GC handle received \" + gch);");
+			sw.WriteLine();
+			string finish = GenArgsInitialization (sw);
+			sw.WriteLine("\t\t\t\t{0} handler = ({0}) sig.Handler;", EventHandlerQualifiedName);
+			sw.WriteLine("\t\t\t\thandler (GLib.Object.GetObject (arg0), args);");
+			sw.WriteLine("\t\t\t} catch (Exception e) {");
+			sw.WriteLine("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, false);");
+			sw.WriteLine("\t\t\t}");
+			GenArgsCleanup (sw, finish);
+			sw.WriteLine("\t\t}");
+			sw.WriteLine();
+		}
+
+		private bool NeedNew (ClassBase implementor)
+		{
+			return elem.HasAttribute ("new_flag") ||
+				(container_type != null && container_type.GetSignalRecursively (Name) != null) ||
+				(implementor != null && implementor.GetSignalRecursively (Name) != null);
+		}
+
+		public void GenEventHandler (GenerationInfo gen_info)
+		{
+			if (IsEventHandler)
+				return;
+
+			string ns = container_type.NS;
+
+			StreamWriter sw = gen_info.OpenStream (EventHandlerName);
+			
+			sw.WriteLine ("namespace " + ns + " {");
+			sw.WriteLine ();
+			sw.WriteLine ("\tusing System;");
+
+			sw.WriteLine ();
+			sw.WriteLine ("\tpublic delegate void " + EventHandlerName + "(object o, " + EventArgsName + " args);");
+			sw.WriteLine ();
+			sw.WriteLine ("\tpublic class " + EventArgsName + " : GLib.SignalArgs {");
+			for (int i = 1; i < parms.Count; i++) {
+				sw.WriteLine ("\t\tpublic " + parms[i].CSType + " " + parms[i].StudlyName + "{");
+				if (parms[i].PassAs != "out") {
+					sw.WriteLine ("\t\t\tget {");
+					sw.WriteLine ("\t\t\t\treturn (" + parms[i].CSType + ") Args[" + (i - 1) + "];");
+					sw.WriteLine ("\t\t\t}");
+				}
+				if (parms[i].PassAs != "") {
+					sw.WriteLine ("\t\t\tset {");
+					sw.WriteLine ("\t\t\t\tArgs[" + (i - 1) + "] = (" + parms[i].CSType + ")value;");
+					sw.WriteLine ("\t\t\t}");
+				}
+				sw.WriteLine ("\t\t}");
+				sw.WriteLine ();
+			}
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+			sw.Close ();
+		}
+
+		private void GenVMDeclaration (StreamWriter sw, ClassBase implementor)
+		{
+			VMSignature vmsig = new VMSignature (parms);
+			sw.WriteLine ("\t\t[GLib.DefaultSignalHandler(Type=typeof(" + (implementor != null ? implementor.QualifiedName : container_type.QualifiedName) + "), ConnectionMethod=\"Override" + Name +"\")]");
+			sw.Write ("\t\tprotected ");
+			if (NeedNew (implementor))
+				sw.Write ("new ");
+			sw.WriteLine ("virtual {0} {1} ({2})", retval.CSType, "On" + Name, vmsig.ToString ());
+		}
+
+		private string CastFromInt (string type)
+		{
+			return type != "int" ? "(" + type + ") " : "";
+		}
+
+		private string GlueCallString {
+			get {
+				string result = "Handle";
+
+				for (int i = 1; i < parms.Count; i++) {
+					Parameter p = parms [i];
+					IGeneratable igen = p.Generatable;
+
+					if (i > 1 && parms [i - 1].IsString && p.IsLength && p.PassAs == String.Empty) {
+						string string_name = parms [i - 1].Name;
+						result += ", " + igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" +  string_name + ")");
+						continue;
+					}
+
+					p.CallName = p.Name;
+					string call_parm = p.CallString;
+
+					if (p.IsUserData && parms.IsHidden (p) && !parms.HideData && (i == 1 || parms [i - 1].Scope != "notified")) {
+						call_parm = "IntPtr.Zero"; 
+					}
+
+					result += ", " + call_parm;
+				}
+				return result;
+			}
+		}
+
+		private string GlueSignature {
+			get {
+				string result = String.Empty;
+				for (int i = 0; i < parms.Count; i++)
+					result += parms[i].CType.Replace ("const-", "const ") + " " + parms[i].Name + (i == parms.Count-1 ? "" : ", ");
+				return result;
+			}
+		}
+
+		private string DefaultGlueValue {
+			get {
+				string val = retval.DefaultValue;
+				switch (val) {
+				case "null":
+					return "NULL";
+				case "false":
+					return "FALSE";
+				case "true":
+					return "TRUE";
+				default:
+					return val;
+				}
+			}
+		}
+
+		private void GenGlueVirtualMethod (GenerationInfo gen_info)
+		{
+			StreamWriter glue = gen_info.GlueWriter;
+			string glue_name = String.Format ("{0}sharp_{1}_base_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
+			glue.WriteLine ("{0} {1} ({2});\n", retval.CType, glue_name, GlueSignature);
+			glue.WriteLine ("{0}\n{1} ({2})", retval.CType, glue_name, GlueSignature);
+			glue.WriteLine ("{");
+			glue.WriteLine ("\t{0}Class *klass = ({0}Class *) get_threshold_class (G_OBJECT ({1}));", container_type.CName, parms[0].Name);
+			glue.Write ("\tif (klass->{0})\n\t\t", ClassFieldName);
+			if (!IsVoid)
+				glue.Write ("return ");
+			glue.Write ("(* klass->{0}) (", ClassFieldName);
+			for (int i = 0; i < parms.Count; i++)
+				glue.Write (parms[i].Name + (i == parms.Count - 1 ? "" : ", "));
+			glue.WriteLine (");");
+			if (!IsVoid)
+				glue.WriteLine ("\treturn " + DefaultGlueValue + ";");
+			glue.WriteLine ("}");
+
+			StreamWriter sw = gen_info.Writer;
+			sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
+			sw.WriteLine ("\t\tstatic extern {0} {1} ({2});\n", retval.MarshalType, glue_name, parms.ImportSignature);
+			GenVMDeclaration (sw, null);
+			sw.WriteLine ("\t\t{");
+			MethodBody body = new MethodBody (parms);
+			body.Initialize (gen_info, false, false, String.Empty);
+			sw.WriteLine ("\t\t\t{0}{1} ({2});", IsVoid ? "" : retval.MarshalType + " __ret = ", glue_name, GlueCallString);
+			body.Finish (sw, "");
+			if (!IsVoid)
+				sw.WriteLine ("\t\t\treturn {0};", retval.FromNative ("__ret"));
+			sw.WriteLine ("\t\t}\n");
+		}
+
+		private void GenChainVirtualMethod (StreamWriter sw, ClassBase implementor)
+		{
+			GenVMDeclaration (sw, implementor);
+			sw.WriteLine ("\t\t{");
+			if (IsVoid)
+				sw.WriteLine ("\t\t\tGLib.Value ret = GLib.Value.Empty;");
+			else
+				sw.WriteLine ("\t\t\tGLib.Value ret = new GLib.Value (" + ReturnGType + ");");
+
+			sw.WriteLine ("\t\t\tGLib.ValueArray inst_and_params = new GLib.ValueArray (" + parms.Count + ");");
+			sw.WriteLine ("\t\t\tGLib.Value[] vals = new GLib.Value [" + parms.Count + "];");
+			sw.WriteLine ("\t\t\tvals [0] = new GLib.Value (this);");
+			sw.WriteLine ("\t\t\tinst_and_params.Append (vals [0]);");
+			string cleanup = "";
+			for (int i = 1; i < parms.Count; i++) {
+				Parameter p = parms [i];
+				if (p.PassAs != "") {
+					if (SymbolTable.Table.IsBoxed (p.CType)) {
+						if (p.PassAs == "ref")
+							sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + ");");
+						else
+							sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value ((GLib.GType)typeof (" + p.CSType + "));");
+						cleanup += "\t\t\t" + p.Name + " = (" + p.CSType + ") vals [" + i + "];\n";
+					} else {
+						if (p.PassAs == "ref")
+							sw.WriteLine ("\t\t\tIntPtr " + p.Name + "_ptr = GLib.Marshaller.StructureToPtrAlloc (" + p.Generatable.CallByName (p.Name) + ");");
+						else
+							sw.WriteLine ("\t\t\tIntPtr " + p.Name + "_ptr = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + p.MarshalType + ")));");
+
+						sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + "_ptr);");
+						cleanup += "\t\t\t" + p.Name + " = " + p.FromNative ("(" + p.MarshalType + ") Marshal.PtrToStructure (" + p.Name + "_ptr, typeof (" + p.MarshalType + "))") + ";\n";
+						cleanup += "\t\t\tMarshal.FreeHGlobal (" + p.Name + "_ptr);\n";
+					}
+				} else if (p.IsLength && parms [i - 1].IsString)
+					sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (System.Text.Encoding.UTF8.GetByteCount (" + parms [i-1].Name + "));");
+				else
+					sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + ");");
+
+				sw.WriteLine ("\t\t\tinst_and_params.Append (vals [" + i + "]);");
+			}
+
+			sw.WriteLine ("\t\t\tg_signal_chain_from_overridden (inst_and_params.ArrayPtr, ref ret);");
+			if (cleanup != "")
+				sw.WriteLine (cleanup);
+			sw.WriteLine ("\t\t\tforeach (GLib.Value v in vals)");
+			sw.WriteLine ("\t\t\t\tv.Dispose ();");
+			if (!IsVoid) {
+				IGeneratable igen = SymbolTable.Table [retval.CType];
+				sw.WriteLine ("\t\t\t" + retval.CSType + " result = (" + (igen is EnumGen ? retval.CSType + ") (Enum" : retval.CSType) + ") ret;");
+				sw.WriteLine ("\t\t\tret.Dispose ();");
+				sw.WriteLine ("\t\t\treturn result;");
+			}
+			sw.WriteLine ("\t\t}\n");
+		}
+
+		private void GenDefaultHandlerDelegate (GenerationInfo gen_info, ClassBase implementor)
+		{
+			StreamWriter sw = gen_info.Writer;
+			StreamWriter glue;
+			bool use_glue = gen_info.GlueEnabled && implementor == null && ClassFieldName.Length > 0;
+			string glue_name = String.Empty;
+			ManagedCallString call = new ManagedCallString (parms, true);
+			sw.WriteLine ("\t\t[GLib.CDeclCallback]");
+			sw.WriteLine ("\t\tdelegate " + retval.ToNativeType + " " + Name + "VMDelegate (" + parms.ImportSignature + ");\n");
+
+			if (use_glue) {
+				glue = gen_info.GlueWriter;
+				glue_name = String.Format ("{0}sharp_{1}_override_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
+				sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
+				sw.WriteLine ("\t\tstatic extern void {0} (IntPtr gtype, {1}VMDelegate cb);\n", glue_name, Name);
+				glue.WriteLine ("void {0} (GType gtype, gpointer cb);\n", glue_name);
+				glue.WriteLine ("void\n{0} (GType gtype, gpointer cb)", glue_name);
+				glue.WriteLine ("{");
+				glue.WriteLine ("\tGObjectClass *klass = g_type_class_peek (gtype);");
+				glue.WriteLine ("\tif (klass == NULL)");
+				glue.WriteLine ("\t\tklass = g_type_class_ref (gtype);");
+				glue.WriteLine ("\t(({0} *)klass)->{1} = cb;", container_type.CName + "Class", ClassFieldName);
+				glue.WriteLine ("}\n");
+			}
+
+			sw.WriteLine ("\t\tstatic {0} {1};\n", Name + "VMDelegate", Name + "VMCallback");
+			sw.WriteLine ("\t\tstatic " + retval.ToNativeType + " " + Name.ToLower() + "_cb (" + parms.ImportSignature + ")");
+			sw.WriteLine ("\t\t{");
+			string unconditional = call.Unconditional ("\t\t\t");
+			if (unconditional.Length > 0)
+				sw.WriteLine (unconditional);
+			sw.WriteLine ("\t\t\ttry {");
+			sw.WriteLine ("\t\t\t\t{0} {1}_managed = GLib.Object.GetObject ({1}, false) as {0};", implementor != null ? implementor.Name : container_type.Name, parms[0].Name);
+			sw.Write (call.Setup ("\t\t\t\t"));
+			sw.Write ("\t\t\t\t{0}", IsVoid ? "" : retval.CSType == retval.ToNativeType ? "return " : retval.CSType + " raw_ret = ");
+			sw.WriteLine ("{2}_managed.{0} ({1});", "On" + Name, call.ToString (), parms[0].Name);
+			sw.Write (call.Finish ("\t\t\t\t"));
+			if (!IsVoid && retval.CSType != retval.ToNativeType)
+				sw.WriteLine ("\t\t\t\treturn {0};", SymbolTable.Table.ToNativeReturn (retval.CType, "raw_ret"));
+			sw.WriteLine ("\t\t\t} catch (Exception e) {");
+			bool fatal = HasOutParams || !IsVoid;
+			sw.WriteLine ("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, " + (fatal ? "true" : "false") + ");");
+			if (fatal) {
+				sw.WriteLine ("\t\t\t\t// NOTREACHED: above call doesn't return");
+				sw.WriteLine ("\t\t\t\tthrow e;");
+			}
+			sw.WriteLine ("\t\t\t}");
+			sw.WriteLine ("\t\t}\n");
+			sw.WriteLine ("\t\tprivate static void Override" + Name + " (GLib.GType gtype)");
+			sw.WriteLine ("\t\t{");
+			sw.WriteLine ("\t\t\tif (" + Name + "VMCallback == null)");
+			sw.WriteLine ("\t\t\t\t" + Name + "VMCallback = new " + Name + "VMDelegate (" + Name.ToLower() + "_cb);");
+			if (use_glue)
+				sw.WriteLine ("\t\t\t{0} (gtype.Val, {1}VMCallback);", glue_name, Name);
+			else
+				sw.WriteLine ("\t\t\tOverrideVirtualMethod (gtype, " + CName + ", " + Name + "VMCallback);");
+			sw.WriteLine ("\t\t}\n");
+		}
+
+		public void GenEvent (StreamWriter sw, ClassBase implementor, string target)
+		{
+			string args_type = IsEventHandler ? "" : ", typeof (" + EventArgsQualifiedName + ")";
+			
+			if (Marshaled) {
+				GenCallback (sw);
+				args_type = ", new " + DelegateName + "(" + CallbackName + ")";
+			}
+
+			sw.WriteLine("\t\t[GLib.Signal("+ CName + ")]");
+			sw.Write("\t\tpublic ");
+			if (NeedNew (implementor))
+				sw.Write("new ");
+			sw.WriteLine("event " + EventHandlerQualifiedName + " " + Name + " {");
+			sw.WriteLine("\t\t\tadd {");
+			sw.WriteLine("\t\t\t\tGLib.Signal sig = GLib.Signal.Lookup (" + target + ", " + CName + args_type + ");");
+			sw.WriteLine("\t\t\t\tsig.AddDelegate (value);");
+			sw.WriteLine("\t\t\t}");
+			sw.WriteLine("\t\t\tremove {");
+			sw.WriteLine("\t\t\t\tGLib.Signal sig = GLib.Signal.Lookup (" + target + ", " + CName + args_type + ");");
+			sw.WriteLine("\t\t\t\tsig.RemoveDelegate (value);");
+			sw.WriteLine("\t\t\t}");
+			sw.WriteLine("\t\t}");
+			sw.WriteLine();
+		}
+
+		public void Generate (GenerationInfo gen_info, ClassBase implementor)
+		{
+			StreamWriter sw = gen_info.Writer;
+
+			if (implementor == null)
+				GenEventHandler (gen_info);
+
+			GenDefaultHandlerDelegate (gen_info, implementor);
+			if (gen_info.GlueEnabled && implementor == null && ClassFieldName.Length > 0)
+				GenGlueVirtualMethod (gen_info);
+			else
+				GenChainVirtualMethod (sw, implementor);
+			GenEvent (sw, implementor, "this");
+			
+			Statistics.SignalCount++;
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/Signature.cs b/lib/unique-sharp/generator/Signature.cs
index ff9f4bd..1b01234 100644
--- a/lib/unique-sharp/generator/Signature.cs
+++ b/lib/unique-sharp/generator/Signature.cs
@@ -1,123 +1,123 @@
-// GtkSharp.Generation.Signature.cs - The Signature Generation Class.
-//
-// Author: Mike Kestner <mkestner ximian com>
-//
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.Xml;
-
-	public class Signature  {
-		
-		private ArrayList parms = new ArrayList ();
-
-		public Signature (Parameters parms) 
-		{
-			foreach (Parameter p in parms) {
-				if (!parms.IsHidden (p))
-					this.parms.Add (p);
-			}
-		}
-
-		public override string ToString ()
-		{
-			if (parms.Count == 0)
-				return "";
-
-			string[] result = new string [parms.Count];
-			int i = 0;
-
-			foreach (Parameter p in parms) {
-				result [i] = p.PassAs != "" ? p.PassAs + " " : "";
-				result [i++] += p.CSType + " " + p.Name;
-			}
-
-			return String.Join (", ", result);
-		}
-
-		public string Types {
-			get {
-				if (parms.Count == 0)
-					return "";
-
-				string[] result = new string [parms.Count];
-				int i = 0;
-
-				foreach (Parameter p in parms)
-					result [i++] = p.CSType;
-
-				return String.Join (":", result);
-			}
-		}
-
-		public bool IsAccessor {
-			get {
-				int count = 0;
-				foreach (Parameter p in parms) {
-					if (p.PassAs == "out")
-						count++;
-					
-					if (count > 1)
-						return false;
-				}
-				return count == 1;
-			}
-		}
-
-		public string AccessorType {
-			get {
-				foreach (Parameter p in parms) 
-					if (p.PassAs == "out")
-						return p.CSType;
-				
-				return null;
-			}
-		}
-
-		public string AccessorName {
-			get {
-				foreach (Parameter p in parms) 
-					if (p.PassAs == "out")
-						return p.Name;
-				
-				return null;
-			}
-		}
-
-		public string AsAccessor {
-			get {
-				string[] result = new string [parms.Count - 1];
-				int i = 0;
-
-				foreach (Parameter p in parms) {
-					if (p.PassAs == "out")
-						continue;
-
-					result [i] = p.PassAs != "" ? p.PassAs + " " : "";
-					result [i++] += p.CSType + " " + p.Name;
-				}
-				
-				return String.Join (", ", result);
-			}
-		}
-	}
-}
-
+// GtkSharp.Generation.Signature.cs - The Signature Generation Class.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.Xml;
+
+	public class Signature  {
+		
+		private ArrayList parms = new ArrayList ();
+
+		public Signature (Parameters parms) 
+		{
+			foreach (Parameter p in parms) {
+				if (!parms.IsHidden (p))
+					this.parms.Add (p);
+			}
+		}
+
+		public override string ToString ()
+		{
+			if (parms.Count == 0)
+				return "";
+
+			string[] result = new string [parms.Count];
+			int i = 0;
+
+			foreach (Parameter p in parms) {
+				result [i] = p.PassAs != "" ? p.PassAs + " " : "";
+				result [i++] += p.CSType + " " + p.Name;
+			}
+
+			return String.Join (", ", result);
+		}
+
+		public string Types {
+			get {
+				if (parms.Count == 0)
+					return "";
+
+				string[] result = new string [parms.Count];
+				int i = 0;
+
+				foreach (Parameter p in parms)
+					result [i++] = p.CSType;
+
+				return String.Join (":", result);
+			}
+		}
+
+		public bool IsAccessor {
+			get {
+				int count = 0;
+				foreach (Parameter p in parms) {
+					if (p.PassAs == "out")
+						count++;
+					
+					if (count > 1)
+						return false;
+				}
+				return count == 1;
+			}
+		}
+
+		public string AccessorType {
+			get {
+				foreach (Parameter p in parms) 
+					if (p.PassAs == "out")
+						return p.CSType;
+				
+				return null;
+			}
+		}
+
+		public string AccessorName {
+			get {
+				foreach (Parameter p in parms) 
+					if (p.PassAs == "out")
+						return p.Name;
+				
+				return null;
+			}
+		}
+
+		public string AsAccessor {
+			get {
+				string[] result = new string [parms.Count - 1];
+				int i = 0;
+
+				foreach (Parameter p in parms) {
+					if (p.PassAs == "out")
+						continue;
+
+					result [i] = p.PassAs != "" ? p.PassAs + " " : "";
+					result [i++] += p.CSType + " " + p.Name;
+				}
+				
+				return String.Join (", ", result);
+			}
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/SimpleBase.cs b/lib/unique-sharp/generator/SimpleBase.cs
index 2637b2b..38bfbe3 100644
--- a/lib/unique-sharp/generator/SimpleBase.cs
+++ b/lib/unique-sharp/generator/SimpleBase.cs
@@ -1,121 +1,121 @@
-// GtkSharp.Generation.SimpleBase.cs - base class for marshaling non-generated types.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public abstract class SimpleBase : IGeneratable  {
-		
-		string type;
-		string ctype;
-		string ns = String.Empty;
-		string default_value = String.Empty;
-
-		public SimpleBase (string ctype, string type, string default_value)
-		{
-			string[] toks = type.Split('.');
-			this.ctype = ctype;
-			this.type = toks[toks.Length - 1];
-			if (toks.Length > 2)
-				this.ns = String.Join (".", toks, 0, toks.Length - 1);
-			else if (toks.Length == 2)
-				this.ns = toks[0];
-			this.default_value = default_value;
-		}
-		
-		public string CName {
-			get {
-				return ctype;
-			}
-		}
-
-		public string Name {
-			get {
-				return type;
-			}
-		}
-
-		public string QualifiedName {
-			get {
-				return ns == String.Empty ? type : ns + "." + type;
-			}
-		}
-
-		public virtual string MarshalType {
-			get {
-				return QualifiedName;
-			}
-		}
-
-		public virtual string MarshalReturnType {
-			get {
-				return MarshalType;
-			}
-		}
-
-		public virtual string DefaultValue {
-			get {
-				return default_value;
-			}
-		}
-
-		public virtual string ToNativeReturnType {
-			get {
-				return MarshalType;
-			}
-		}
-
-		public virtual string CallByName (string var)
-		{
-			return var;
-		}
-		
-		public virtual string FromNative(string var)
-		{
-			return var;
-		}
-		
-		public virtual string FromNativeReturn(string var)
-		{
-			return FromNative (var);
-		}
-
-		public virtual string ToNativeReturn(string var)
-		{
-			return CallByName (var);
-		}
-
-		public bool Validate ()
-		{
-			return true;
-		}
-
-		public void Generate ()
-		{
-		}
-		
-		public void Generate (GenerationInfo gen_info)
-		{
-		}
-	}
-}
-
+// GtkSharp.Generation.SimpleBase.cs - base class for marshaling non-generated types.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public abstract class SimpleBase : IGeneratable  {
+		
+		string type;
+		string ctype;
+		string ns = String.Empty;
+		string default_value = String.Empty;
+
+		public SimpleBase (string ctype, string type, string default_value)
+		{
+			string[] toks = type.Split('.');
+			this.ctype = ctype;
+			this.type = toks[toks.Length - 1];
+			if (toks.Length > 2)
+				this.ns = String.Join (".", toks, 0, toks.Length - 1);
+			else if (toks.Length == 2)
+				this.ns = toks[0];
+			this.default_value = default_value;
+		}
+		
+		public string CName {
+			get {
+				return ctype;
+			}
+		}
+
+		public string Name {
+			get {
+				return type;
+			}
+		}
+
+		public string QualifiedName {
+			get {
+				return ns == String.Empty ? type : ns + "." + type;
+			}
+		}
+
+		public virtual string MarshalType {
+			get {
+				return QualifiedName;
+			}
+		}
+
+		public virtual string MarshalReturnType {
+			get {
+				return MarshalType;
+			}
+		}
+
+		public virtual string DefaultValue {
+			get {
+				return default_value;
+			}
+		}
+
+		public virtual string ToNativeReturnType {
+			get {
+				return MarshalType;
+			}
+		}
+
+		public virtual string CallByName (string var)
+		{
+			return var;
+		}
+		
+		public virtual string FromNative(string var)
+		{
+			return var;
+		}
+		
+		public virtual string FromNativeReturn(string var)
+		{
+			return FromNative (var);
+		}
+
+		public virtual string ToNativeReturn(string var)
+		{
+			return CallByName (var);
+		}
+
+		public bool Validate ()
+		{
+			return true;
+		}
+
+		public void Generate ()
+		{
+		}
+		
+		public void Generate (GenerationInfo gen_info)
+		{
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/SimpleGen.cs b/lib/unique-sharp/generator/SimpleGen.cs
index 14554ab..b382135 100644
--- a/lib/unique-sharp/generator/SimpleGen.cs
+++ b/lib/unique-sharp/generator/SimpleGen.cs
@@ -1,31 +1,31 @@
-// GtkSharp.Generation.SimpleGen.cs - The Simple type Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2003 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-
-	public class SimpleGen : SimpleBase {
-		public SimpleGen (string ctype, string type, string default_value) : base (ctype, type, default_value) {}
-
-	}
-}
-
+// GtkSharp.Generation.SimpleGen.cs - The Simple type Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+
+	public class SimpleGen : SimpleBase {
+		public SimpleGen (string ctype, string type, string default_value) : base (ctype, type, default_value) {}
+
+	}
+}
+
diff --git a/lib/unique-sharp/generator/Statistics.cs b/lib/unique-sharp/generator/Statistics.cs
index f634185..4545765 100644
--- a/lib/unique-sharp/generator/Statistics.cs
+++ b/lib/unique-sharp/generator/Statistics.cs
@@ -1,197 +1,197 @@
-// Statistics.cs : Generation statistics class implementation
-//
-// Author: Mike Kestner  <mkestner ximian com>
-//
-// Copyright (c) 2002 Mike Kestner
-// Copyright (c) 2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-	
-	using System;
-	using System.Collections;
-	
-	public class Statistics {
-		
-		static int cbs = 0;
-		static int enums = 0;
-		static int objects = 0;
-		static int structs = 0;
-		static int boxed = 0;
-		static int opaques = 0;
-		static int interfaces = 0;
-		static int methods = 0;
-		static int ctors = 0;
-		static int props = 0;
-		static int sigs = 0;
-		static int throttled = 0;
-		static int ignored = 0;
-		static bool vm_ignored = false;
-		
-		public static int CBCount {
-			get {
-				return cbs;
-			}
-			set {
-				cbs = value;
-			}
-		}
-
-		public static int EnumCount {
-			get {
-				return enums;
-			}
-			set {
-				enums = value;
-			}
-		}
-
-		public static int ObjectCount {
-			get {
-				return objects;
-			}
-			set {
-				objects = value;
-			}
-		}
-
-		public static int StructCount {
-			get {
-				return structs;
-			}
-			set {
-				structs = value;
-			}
-		}
-
-		public static int BoxedCount {
-			get {
-				return boxed;
-			}
-			set {
-				boxed = value;
-			}
-		}
-
-		public static int OpaqueCount {
-			get {
-				return opaques;
-			}
-			set {
-				opaques = value;
-			}
-		}
-
-		public static int CtorCount {
-			get {
-				return ctors;
-			}
-			set {
-				ctors = value;
-			}
-		}
-		
-		public static int MethodCount {
-			get {
-				return methods;
-			}
-			set {
-				methods = value;
-			}
-		}
-
-		public static int PropCount {
-			get {
-				return props;
-			}
-			set {
-				props = value;
-			}
-		}
-
-		public static int SignalCount {
-			get {
-				return sigs;
-			}
-			set {
-				sigs = value;
-			}
-		}
-
-		public static int IFaceCount {
-			get {
-				return interfaces;
-			}
-			set {
-				interfaces = value;
-			}
-		}
-
-		public static int ThrottledCount {
-			get {
-				return throttled;
-			}
-			set {
-				throttled = value;
-			}
-		}
-		
-		public static int IgnoreCount {
-			get {
-				return ignored;
-			}
-			set {
-				ignored = value;
-			}
-		}
-		
-		public static bool VMIgnored {
-			get {
-				return vm_ignored;
-			}
-			set {
-				if (value)
-					vm_ignored = value;
-			}
-		}
-		
-		public static void Report()
-		{
-			if (VMIgnored) {
-				Console.WriteLine();
-				Console.WriteLine("Warning: Generation throttled for Virtual Methods.");
-				Console.WriteLine("  Consider regenerating with --gluelib-name and --glue-filename.");
-			}
-			Console.WriteLine();
-			Console.WriteLine("Generation Summary:");
-			Console.Write("  Enums: " + enums);
-			Console.Write("  Structs: " + structs);
-			Console.Write("  Boxed: " + boxed);
-			Console.Write("  Opaques: " + opaques);
-			Console.Write("  Interfaces: " + interfaces);
-			Console.Write("  Objects: " + objects);
-			Console.WriteLine("  Callbacks: " + cbs);
-			Console.Write("  Properties: " + props);
-			Console.Write("  Signals: " + sigs);
-			Console.Write("  Methods: " + methods);
-			Console.Write("  Constructors: " + ctors);
-			Console.WriteLine("  Throttled: " + throttled);
-			Console.WriteLine("Total Nodes: " + (enums+structs+boxed+opaques+interfaces+cbs+objects+props+sigs+methods+ctors+throttled));
-			Console.WriteLine();
-		}
-	}
-}
+// Statistics.cs : Generation statistics class implementation
+//
+// Author: Mike Kestner  <mkestner ximian com>
+//
+// Copyright (c) 2002 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+	
+	using System;
+	using System.Collections;
+	
+	public class Statistics {
+		
+		static int cbs = 0;
+		static int enums = 0;
+		static int objects = 0;
+		static int structs = 0;
+		static int boxed = 0;
+		static int opaques = 0;
+		static int interfaces = 0;
+		static int methods = 0;
+		static int ctors = 0;
+		static int props = 0;
+		static int sigs = 0;
+		static int throttled = 0;
+		static int ignored = 0;
+		static bool vm_ignored = false;
+		
+		public static int CBCount {
+			get {
+				return cbs;
+			}
+			set {
+				cbs = value;
+			}
+		}
+
+		public static int EnumCount {
+			get {
+				return enums;
+			}
+			set {
+				enums = value;
+			}
+		}
+
+		public static int ObjectCount {
+			get {
+				return objects;
+			}
+			set {
+				objects = value;
+			}
+		}
+
+		public static int StructCount {
+			get {
+				return structs;
+			}
+			set {
+				structs = value;
+			}
+		}
+
+		public static int BoxedCount {
+			get {
+				return boxed;
+			}
+			set {
+				boxed = value;
+			}
+		}
+
+		public static int OpaqueCount {
+			get {
+				return opaques;
+			}
+			set {
+				opaques = value;
+			}
+		}
+
+		public static int CtorCount {
+			get {
+				return ctors;
+			}
+			set {
+				ctors = value;
+			}
+		}
+		
+		public static int MethodCount {
+			get {
+				return methods;
+			}
+			set {
+				methods = value;
+			}
+		}
+
+		public static int PropCount {
+			get {
+				return props;
+			}
+			set {
+				props = value;
+			}
+		}
+
+		public static int SignalCount {
+			get {
+				return sigs;
+			}
+			set {
+				sigs = value;
+			}
+		}
+
+		public static int IFaceCount {
+			get {
+				return interfaces;
+			}
+			set {
+				interfaces = value;
+			}
+		}
+
+		public static int ThrottledCount {
+			get {
+				return throttled;
+			}
+			set {
+				throttled = value;
+			}
+		}
+		
+		public static int IgnoreCount {
+			get {
+				return ignored;
+			}
+			set {
+				ignored = value;
+			}
+		}
+		
+		public static bool VMIgnored {
+			get {
+				return vm_ignored;
+			}
+			set {
+				if (value)
+					vm_ignored = value;
+			}
+		}
+		
+		public static void Report()
+		{
+			if (VMIgnored) {
+				Console.WriteLine();
+				Console.WriteLine("Warning: Generation throttled for Virtual Methods.");
+				Console.WriteLine("  Consider regenerating with --gluelib-name and --glue-filename.");
+			}
+			Console.WriteLine();
+			Console.WriteLine("Generation Summary:");
+			Console.Write("  Enums: " + enums);
+			Console.Write("  Structs: " + structs);
+			Console.Write("  Boxed: " + boxed);
+			Console.Write("  Opaques: " + opaques);
+			Console.Write("  Interfaces: " + interfaces);
+			Console.Write("  Objects: " + objects);
+			Console.WriteLine("  Callbacks: " + cbs);
+			Console.Write("  Properties: " + props);
+			Console.Write("  Signals: " + sigs);
+			Console.Write("  Methods: " + methods);
+			Console.Write("  Constructors: " + ctors);
+			Console.WriteLine("  Throttled: " + throttled);
+			Console.WriteLine("Total Nodes: " + (enums+structs+boxed+opaques+interfaces+cbs+objects+props+sigs+methods+ctors+throttled));
+			Console.WriteLine();
+		}
+	}
+}
diff --git a/lib/unique-sharp/generator/StructGen.cs b/lib/unique-sharp/generator/StructGen.cs
index f759703..4d615ad 100644
--- a/lib/unique-sharp/generator/StructGen.cs
+++ b/lib/unique-sharp/generator/StructGen.cs
@@ -1,53 +1,53 @@
-// GtkSharp.Generation.StructGen.cs - The Structure Generatable.
-//
-// Author: Mike Kestner <mkestner speakeasy net>
-//
-// Copyright (c) 2001 Mike Kestner
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.IO;
-	using System.Xml;
-
-	public class StructGen : StructBase {
-		
-		public StructGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
-		
-		public override void Generate (GenerationInfo gen_info)
-		{
-			gen_info.CurrentType = Name;
-
-			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
-			base.Generate (gen_info);
-			if (GetMethod ("GetType") == null && GetMethod ("GetGType") == null) {
-				sw.WriteLine ("\t\tprivate static GLib.GType GType {");
-				sw.WriteLine ("\t\t\tget { return GLib.GType.Pointer; }");
-				sw.WriteLine ("\t\t}");
-			}
-			sw.WriteLine ("#endregion");
-			AppendCustom (sw, gen_info.CustomDir);
-			sw.WriteLine ("\t}");
-			sw.WriteLine ("}");
-			sw.Close ();
-			gen_info.Writer = null;
-			Statistics.StructCount++;
-		}
-	}
-}
-
+// GtkSharp.Generation.StructGen.cs - The Structure Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.IO;
+	using System.Xml;
+
+	public class StructGen : StructBase {
+		
+		public StructGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+		
+		public override void Generate (GenerationInfo gen_info)
+		{
+			gen_info.CurrentType = Name;
+
+			StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+			base.Generate (gen_info);
+			if (GetMethod ("GetType") == null && GetMethod ("GetGType") == null) {
+				sw.WriteLine ("\t\tprivate static GLib.GType GType {");
+				sw.WriteLine ("\t\t\tget { return GLib.GType.Pointer; }");
+				sw.WriteLine ("\t\t}");
+			}
+			sw.WriteLine ("#endregion");
+			AppendCustom (sw, gen_info.CustomDir);
+			sw.WriteLine ("\t}");
+			sw.WriteLine ("}");
+			sw.Close ();
+			gen_info.Writer = null;
+			Statistics.StructCount++;
+		}
+	}
+}
+
diff --git a/lib/unique-sharp/generator/SymbolTable.cs b/lib/unique-sharp/generator/SymbolTable.cs
index 2d139fe..e10b51f 100644
--- a/lib/unique-sharp/generator/SymbolTable.cs
+++ b/lib/unique-sharp/generator/SymbolTable.cs
@@ -1,412 +1,412 @@
-// GtkSharp.Generation.SymbolTable.cs - The Symbol Table Class.
-//
-// Author: Mike Kestner <mkestner novell com>
-//
-// Copyright (c) 2001-2003 Mike Kestner
-// Copyright (c) 2004-2005 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-
-	public class SymbolTable {
-		
-		static SymbolTable table = null;
-
-		Hashtable types = new Hashtable ();
-		
-		public static SymbolTable Table {
-			get {
-				if (table == null)
-					table = new SymbolTable ();
-
-				return table;
-			}
-		}
-
-		public SymbolTable ()
-		{
-			// Simple easily mapped types
-			AddType (new SimpleGen ("void", "void", String.Empty));
-			AddType (new SimpleGen ("gpointer", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("gboolean", "bool", "false"));
-			AddType (new SimpleGen ("gint", "int", "0"));
-			AddType (new SimpleGen ("guint", "uint", "0"));
-			AddType (new SimpleGen ("int", "int", "0"));
-			AddType (new SimpleGen ("unsigned", "uint", "0"));
-			AddType (new SimpleGen ("unsigned int", "uint", "0"));
-			AddType (new SimpleGen ("unsigned-int", "uint", "0"));
-			AddType (new SimpleGen ("gshort", "short", "0"));
-			AddType (new SimpleGen ("gushort", "ushort", "0"));
-			AddType (new SimpleGen ("short", "short", "0"));
-			AddType (new SimpleGen ("guchar", "byte", "0"));
-			AddType (new SimpleGen ("unsigned char", "byte", "0"));
-			AddType (new SimpleGen ("unsigned-char", "byte", "0"));
-			AddType (new SimpleGen ("guint1", "bool", "false"));
-			AddType (new SimpleGen ("uint1", "bool", "false"));
-			AddType (new SimpleGen ("gint8", "sbyte", "0"));
-			AddType (new SimpleGen ("guint8", "byte", "0"));
-			AddType (new SimpleGen ("gint16", "short", "0"));
-			AddType (new SimpleGen ("guint16", "ushort", "0"));
-			AddType (new SimpleGen ("gint32", "int", "0"));
-			AddType (new SimpleGen ("guint32", "uint", "0"));
-			AddType (new SimpleGen ("gint64", "long", "0"));
-			AddType (new SimpleGen ("guint64", "ulong", "0"));
-			AddType (new SimpleGen ("long long", "long", "0"));
-			AddType (new SimpleGen ("gfloat", "float", "0.0"));
-			AddType (new SimpleGen ("float", "float", "0.0"));
-			AddType (new SimpleGen ("gdouble", "double", "0.0"));
-			AddType (new SimpleGen ("double", "double", "0.0"));
-			AddType (new SimpleGen ("goffset", "long", "0"));
-			AddType (new SimpleGen ("GQuark", "int", "0"));
-
-			// platform specific integer types.
-#if WIN64LONGS
-			AddType (new SimpleGen ("long", "int", "0"));
-			AddType (new SimpleGen ("glong", "int", "0"));
-			AddType (new SimpleGen ("ulong", "uint", "0"));
-			AddType (new SimpleGen ("gulong", "uint", "0"));
-			AddType (new SimpleGen ("unsigned long", "uint", "0"));
-#else
-			AddType (new LPGen ("long"));
-			AddType (new LPGen ("glong"));
-			AddType (new LPUGen ("ulong"));
-			AddType (new LPUGen ("gulong"));
-			AddType (new LPUGen ("unsigned long"));
-#endif
-
-			AddType (new LPGen ("ssize_t"));
-			AddType (new LPGen ("gssize"));
-			AddType (new LPUGen ("size_t"));
-			AddType (new LPUGen ("gsize"));
-
-#if OFF_T_8
-			AddType (new AliasGen ("off_t", "long"));
-#else
-			AddType (new LPGen ("off_t"));
-#endif
-
-			// string types
-			AddType (new ConstStringGen ("const-gchar"));
-			AddType (new ConstStringGen ("const-xmlChar"));
-			AddType (new ConstStringGen ("const-char"));
-			AddType (new ConstFilenameGen ("const-gfilename"));
-			AddType (new MarshalGen ("gfilename", "string", "IntPtr", "GLib.Marshaller.StringToFilenamePtr({0})", "GLib.Marshaller.FilenamePtrToStringGFree({0})"));
-			AddType (new MarshalGen ("gchar", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
-			AddType (new MarshalGen ("char", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
-			AddType (new SimpleGen ("GStrv", "string[]", "null"));
-
-			// manually wrapped types requiring more complex marshaling
-			AddType (new ManualGen ("GInitiallyUnowned", "GLib.InitiallyUnowned", "GLib.Object.GetObject ({0})"));
-			AddType (new ManualGen ("GObject", "GLib.Object", "GLib.Object.GetObject ({0})"));
-			AddType (new ManualGen ("GList", "GLib.List"));
-			AddType (new ManualGen ("GPtrArray", "GLib.PtrArray"));
-			AddType (new ManualGen ("GSList", "GLib.SList"));
-			AddType (new MarshalGen ("gunichar", "char", "uint", "GLib.Marshaller.CharToGUnichar ({0})", "GLib.Marshaller.GUnicharToChar ({0})"));
-			AddType (new MarshalGen ("time_t", "System.DateTime", "IntPtr", "GLib.Marshaller.DateTimeTotime_t ({0})", "GLib.Marshaller.time_tToDateTime ({0})"));
-			AddType (new MarshalGen ("GString", "string", "IntPtr", "new GLib.GString ({0}).Handle", "GLib.GString.PtrToString ({0})"));
-			AddType (new MarshalGen ("GType", "GLib.GType", "IntPtr", "{0}.Val", "new GLib.GType({0})"));
-			AddType (new ByRefGen ("GValue", "GLib.Value"));
-			AddType (new SimpleGen ("GDestroyNotify", "GLib.DestroyNotify", "null"));
-
-			// FIXME: These ought to be handled properly.
-			AddType (new SimpleGen ("GC", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GError", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GMemChunk", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GTimeVal", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GClosure", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GArray", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GByteArray", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GData", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GIOChannel", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GTypeModule", "GLib.Object", "null"));
-			AddType (new SimpleGen ("GHashTable", "System.IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("va_list", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("GParamSpec", "IntPtr", "IntPtr.Zero"));
-			AddType (new SimpleGen ("gconstpointer", "IntPtr", "IntPtr.Zero"));
-		}
-		
-		public void AddType (IGeneratable gen)
-		{
-			types [gen.CName] = gen;
-		}
-		
-		public void AddTypes (IGeneratable[] gens)
-		{
-			foreach (IGeneratable gen in gens)
-				types [gen.CName] = gen;
-		}
-		
-		public int Count {
-			get
-			{
-				return types.Count;
-			}
-		}
-		
-		public IEnumerable Generatables {
-			get {
-				return types.Values;
-			}
-		}
-		
-		public IGeneratable this [string ctype] {
-			get {
-				return DeAlias (ctype) as IGeneratable;
-			}
-		}
-
-		private bool IsConstString (string type)
-		{
-			switch (type) {
-			case "const-gchar":
-			case "const-char":
-			case "const-xmlChar":
-			case "const-gfilename":
-				return true;
-			default:
-				return false;
-			}
-		}
-
-		private string Trim(string type)
-		{
-			// HACK: If we don't detect this here, there is no
-			// way of indicating it in the symbol table
-			if (type == "void*" || type == "const-void*") return "gpointer";
-
-			string trim_type = type.TrimEnd('*');
-
-			if (IsConstString (trim_type))
-				return trim_type;
-			
-			if (trim_type.StartsWith("const-")) return trim_type.Substring(6);
-			return trim_type;
-		}
-
-		private object DeAlias (string type)
-		{
-			type = Trim (type);
-			while (types [type] is AliasGen) {
-				IGeneratable igen = types [type] as AliasGen;
-				types [type] = types [igen.Name];
-				type = igen.Name;
-			}
-
-			return types [type];
-		}
-
-		public string FromNativeReturn(string c_type, string val)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.FromNativeReturn (val);
-		}
-		
-		public string ToNativeReturn(string c_type, string val)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.ToNativeReturn (val);
-		}
-
-		public string FromNative(string c_type, string val)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.FromNative (val);
-		}
-
-		public string GetCSType(string c_type)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.QualifiedName;
-		}
-		
-		public string GetName(string c_type)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.Name;
-		}
-		
-		public string GetMarshalReturnType(string c_type)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.MarshalReturnType;
-		}
-		
-		public string GetToNativeReturnType(string c_type)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.ToNativeReturnType;
-		}
-		
-		public string GetMarshalType(string c_type)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.MarshalType;
-		}
-		
-		public string CallByName(string c_type, string var_name)
-		{
-			IGeneratable gen = this[c_type];
-			if (gen == null)
-				return "";
-			return gen.CallByName(var_name);
-		}
-	
-		public bool IsOpaque(string c_type)
-		{
-			if (this[c_type] is OpaqueGen)
-				return true;
-
-			return false;
-		}
-	
-		public bool IsBoxed(string c_type)
-		{
-			if (this[c_type] is BoxedGen)
-				return true;
-
-			return false;
-		}
-		
-		public bool IsStruct(string c_type)
-		{
-			if (this[c_type] is StructGen)
-				return true;
-
-			return false;
-		}
-	
-		public bool IsEnum(string c_type)
-		{
-			if (this[c_type] is EnumGen)
-				return true;
-
-			return false;
-		}
-	
-		public bool IsEnumFlags(string c_type)
-		{
-			EnumGen gen = this [c_type] as EnumGen;
-			return (gen != null && gen.Elem.GetAttribute ("type") == "flags");
-		}
-	
-		public bool IsInterface(string c_type)
-		{
-			if (this[c_type] is InterfaceGen)
-				return true;
-
-			return false;
-		}
-		
-		public ClassBase GetClassGen(string c_type)
-		{
-			return this[c_type] as ClassBase;
-		}
-			
-		public bool IsObject(string c_type)
-		{
-			if (this[c_type] is ObjectGen)
-				return true;
-
-			return false;
-		}
-
-		public bool IsCallback(string c_type)
-		{
-			if (this[c_type] is CallbackGen)
-				return true;
-
-			return false;
-		}
-
-		public bool IsManuallyWrapped(string c_type)
-		{
-			if (this[c_type] is ManualGen)
-				return true;
-
-			return false;
-		}
-
-		public string MangleName(string name)
-		{
-			switch (name) {
-			case "string":
-				return "str1ng";
-			case "event":
-				return "evnt";
-			case "null":
-				return "is_null";
-			case "object":
-				return "objekt";
-			case "params":
-				return "parms";
-			case "ref":
-				return "reference";
-			case "in":
-				return "in_param";
-			case "out":
-				return "out_param";
-			case "fixed":
-				return "mfixed";
-			case "byte":
-				return "_byte";
-			case "new":
-				return "_new";
-			case "base":
-				return "_base";
-			case "lock":
-				return "_lock";
-			case "callback":
-				return "cb";
-			case "readonly":
-				return "read_only";
-			case "interface":
-				return "iface";
-			case "internal":
-				return "_internal";
-			case "where":
-				return "wh3r3";
-			case "foreach":
-				return "for_each";
-			case "remove":
-				return "_remove";
-			default:
-				break;
-			}
-
-			return name;
-		}
-	}
-}
+// GtkSharp.Generation.SymbolTable.cs - The Symbol Table Class.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+
+	public class SymbolTable {
+		
+		static SymbolTable table = null;
+
+		Hashtable types = new Hashtable ();
+		
+		public static SymbolTable Table {
+			get {
+				if (table == null)
+					table = new SymbolTable ();
+
+				return table;
+			}
+		}
+
+		public SymbolTable ()
+		{
+			// Simple easily mapped types
+			AddType (new SimpleGen ("void", "void", String.Empty));
+			AddType (new SimpleGen ("gpointer", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("gboolean", "bool", "false"));
+			AddType (new SimpleGen ("gint", "int", "0"));
+			AddType (new SimpleGen ("guint", "uint", "0"));
+			AddType (new SimpleGen ("int", "int", "0"));
+			AddType (new SimpleGen ("unsigned", "uint", "0"));
+			AddType (new SimpleGen ("unsigned int", "uint", "0"));
+			AddType (new SimpleGen ("unsigned-int", "uint", "0"));
+			AddType (new SimpleGen ("gshort", "short", "0"));
+			AddType (new SimpleGen ("gushort", "ushort", "0"));
+			AddType (new SimpleGen ("short", "short", "0"));
+			AddType (new SimpleGen ("guchar", "byte", "0"));
+			AddType (new SimpleGen ("unsigned char", "byte", "0"));
+			AddType (new SimpleGen ("unsigned-char", "byte", "0"));
+			AddType (new SimpleGen ("guint1", "bool", "false"));
+			AddType (new SimpleGen ("uint1", "bool", "false"));
+			AddType (new SimpleGen ("gint8", "sbyte", "0"));
+			AddType (new SimpleGen ("guint8", "byte", "0"));
+			AddType (new SimpleGen ("gint16", "short", "0"));
+			AddType (new SimpleGen ("guint16", "ushort", "0"));
+			AddType (new SimpleGen ("gint32", "int", "0"));
+			AddType (new SimpleGen ("guint32", "uint", "0"));
+			AddType (new SimpleGen ("gint64", "long", "0"));
+			AddType (new SimpleGen ("guint64", "ulong", "0"));
+			AddType (new SimpleGen ("long long", "long", "0"));
+			AddType (new SimpleGen ("gfloat", "float", "0.0"));
+			AddType (new SimpleGen ("float", "float", "0.0"));
+			AddType (new SimpleGen ("gdouble", "double", "0.0"));
+			AddType (new SimpleGen ("double", "double", "0.0"));
+			AddType (new SimpleGen ("goffset", "long", "0"));
+			AddType (new SimpleGen ("GQuark", "int", "0"));
+
+			// platform specific integer types.
+#if WIN64LONGS
+			AddType (new SimpleGen ("long", "int", "0"));
+			AddType (new SimpleGen ("glong", "int", "0"));
+			AddType (new SimpleGen ("ulong", "uint", "0"));
+			AddType (new SimpleGen ("gulong", "uint", "0"));
+			AddType (new SimpleGen ("unsigned long", "uint", "0"));
+#else
+			AddType (new LPGen ("long"));
+			AddType (new LPGen ("glong"));
+			AddType (new LPUGen ("ulong"));
+			AddType (new LPUGen ("gulong"));
+			AddType (new LPUGen ("unsigned long"));
+#endif
+
+			AddType (new LPGen ("ssize_t"));
+			AddType (new LPGen ("gssize"));
+			AddType (new LPUGen ("size_t"));
+			AddType (new LPUGen ("gsize"));
+
+#if OFF_T_8
+			AddType (new AliasGen ("off_t", "long"));
+#else
+			AddType (new LPGen ("off_t"));
+#endif
+
+			// string types
+			AddType (new ConstStringGen ("const-gchar"));
+			AddType (new ConstStringGen ("const-xmlChar"));
+			AddType (new ConstStringGen ("const-char"));
+			AddType (new ConstFilenameGen ("const-gfilename"));
+			AddType (new MarshalGen ("gfilename", "string", "IntPtr", "GLib.Marshaller.StringToFilenamePtr({0})", "GLib.Marshaller.FilenamePtrToStringGFree({0})"));
+			AddType (new MarshalGen ("gchar", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
+			AddType (new MarshalGen ("char", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
+			AddType (new SimpleGen ("GStrv", "string[]", "null"));
+
+			// manually wrapped types requiring more complex marshaling
+			AddType (new ManualGen ("GInitiallyUnowned", "GLib.InitiallyUnowned", "GLib.Object.GetObject ({0})"));
+			AddType (new ManualGen ("GObject", "GLib.Object", "GLib.Object.GetObject ({0})"));
+			AddType (new ManualGen ("GList", "GLib.List"));
+			AddType (new ManualGen ("GPtrArray", "GLib.PtrArray"));
+			AddType (new ManualGen ("GSList", "GLib.SList"));
+			AddType (new MarshalGen ("gunichar", "char", "uint", "GLib.Marshaller.CharToGUnichar ({0})", "GLib.Marshaller.GUnicharToChar ({0})"));
+			AddType (new MarshalGen ("time_t", "System.DateTime", "IntPtr", "GLib.Marshaller.DateTimeTotime_t ({0})", "GLib.Marshaller.time_tToDateTime ({0})"));
+			AddType (new MarshalGen ("GString", "string", "IntPtr", "new GLib.GString ({0}).Handle", "GLib.GString.PtrToString ({0})"));
+			AddType (new MarshalGen ("GType", "GLib.GType", "IntPtr", "{0}.Val", "new GLib.GType({0})"));
+			AddType (new ByRefGen ("GValue", "GLib.Value"));
+			AddType (new SimpleGen ("GDestroyNotify", "GLib.DestroyNotify", "null"));
+
+			// FIXME: These ought to be handled properly.
+			AddType (new SimpleGen ("GC", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GError", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GMemChunk", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GTimeVal", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GClosure", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GArray", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GByteArray", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GData", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GIOChannel", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GTypeModule", "GLib.Object", "null"));
+			AddType (new SimpleGen ("GHashTable", "System.IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("va_list", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("GParamSpec", "IntPtr", "IntPtr.Zero"));
+			AddType (new SimpleGen ("gconstpointer", "IntPtr", "IntPtr.Zero"));
+		}
+		
+		public void AddType (IGeneratable gen)
+		{
+			types [gen.CName] = gen;
+		}
+		
+		public void AddTypes (IGeneratable[] gens)
+		{
+			foreach (IGeneratable gen in gens)
+				types [gen.CName] = gen;
+		}
+		
+		public int Count {
+			get
+			{
+				return types.Count;
+			}
+		}
+		
+		public IEnumerable Generatables {
+			get {
+				return types.Values;
+			}
+		}
+		
+		public IGeneratable this [string ctype] {
+			get {
+				return DeAlias (ctype) as IGeneratable;
+			}
+		}
+
+		private bool IsConstString (string type)
+		{
+			switch (type) {
+			case "const-gchar":
+			case "const-char":
+			case "const-xmlChar":
+			case "const-gfilename":
+				return true;
+			default:
+				return false;
+			}
+		}
+
+		private string Trim(string type)
+		{
+			// HACK: If we don't detect this here, there is no
+			// way of indicating it in the symbol table
+			if (type == "void*" || type == "const-void*") return "gpointer";
+
+			string trim_type = type.TrimEnd('*');
+
+			if (IsConstString (trim_type))
+				return trim_type;
+			
+			if (trim_type.StartsWith("const-")) return trim_type.Substring(6);
+			return trim_type;
+		}
+
+		private object DeAlias (string type)
+		{
+			type = Trim (type);
+			while (types [type] is AliasGen) {
+				IGeneratable igen = types [type] as AliasGen;
+				types [type] = types [igen.Name];
+				type = igen.Name;
+			}
+
+			return types [type];
+		}
+
+		public string FromNativeReturn(string c_type, string val)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.FromNativeReturn (val);
+		}
+		
+		public string ToNativeReturn(string c_type, string val)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.ToNativeReturn (val);
+		}
+
+		public string FromNative(string c_type, string val)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.FromNative (val);
+		}
+
+		public string GetCSType(string c_type)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.QualifiedName;
+		}
+		
+		public string GetName(string c_type)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.Name;
+		}
+		
+		public string GetMarshalReturnType(string c_type)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.MarshalReturnType;
+		}
+		
+		public string GetToNativeReturnType(string c_type)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.ToNativeReturnType;
+		}
+		
+		public string GetMarshalType(string c_type)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.MarshalType;
+		}
+		
+		public string CallByName(string c_type, string var_name)
+		{
+			IGeneratable gen = this[c_type];
+			if (gen == null)
+				return "";
+			return gen.CallByName(var_name);
+		}
+	
+		public bool IsOpaque(string c_type)
+		{
+			if (this[c_type] is OpaqueGen)
+				return true;
+
+			return false;
+		}
+	
+		public bool IsBoxed(string c_type)
+		{
+			if (this[c_type] is BoxedGen)
+				return true;
+
+			return false;
+		}
+		
+		public bool IsStruct(string c_type)
+		{
+			if (this[c_type] is StructGen)
+				return true;
+
+			return false;
+		}
+	
+		public bool IsEnum(string c_type)
+		{
+			if (this[c_type] is EnumGen)
+				return true;
+
+			return false;
+		}
+	
+		public bool IsEnumFlags(string c_type)
+		{
+			EnumGen gen = this [c_type] as EnumGen;
+			return (gen != null && gen.Elem.GetAttribute ("type") == "flags");
+		}
+	
+		public bool IsInterface(string c_type)
+		{
+			if (this[c_type] is InterfaceGen)
+				return true;
+
+			return false;
+		}
+		
+		public ClassBase GetClassGen(string c_type)
+		{
+			return this[c_type] as ClassBase;
+		}
+			
+		public bool IsObject(string c_type)
+		{
+			if (this[c_type] is ObjectGen)
+				return true;
+
+			return false;
+		}
+
+		public bool IsCallback(string c_type)
+		{
+			if (this[c_type] is CallbackGen)
+				return true;
+
+			return false;
+		}
+
+		public bool IsManuallyWrapped(string c_type)
+		{
+			if (this[c_type] is ManualGen)
+				return true;
+
+			return false;
+		}
+
+		public string MangleName(string name)
+		{
+			switch (name) {
+			case "string":
+				return "str1ng";
+			case "event":
+				return "evnt";
+			case "null":
+				return "is_null";
+			case "object":
+				return "objekt";
+			case "params":
+				return "parms";
+			case "ref":
+				return "reference";
+			case "in":
+				return "in_param";
+			case "out":
+				return "out_param";
+			case "fixed":
+				return "mfixed";
+			case "byte":
+				return "_byte";
+			case "new":
+				return "_new";
+			case "base":
+				return "_base";
+			case "lock":
+				return "_lock";
+			case "callback":
+				return "cb";
+			case "readonly":
+				return "read_only";
+			case "interface":
+				return "iface";
+			case "internal":
+				return "_internal";
+			case "where":
+				return "wh3r3";
+			case "foreach":
+				return "for_each";
+			case "remove":
+				return "_remove";
+			default:
+				break;
+			}
+
+			return name;
+		}
+	}
+}
diff --git a/lib/unique-sharp/generator/VMSignature.cs b/lib/unique-sharp/generator/VMSignature.cs
index 5937c0a..fe0ebf1 100644
--- a/lib/unique-sharp/generator/VMSignature.cs
+++ b/lib/unique-sharp/generator/VMSignature.cs
@@ -1,75 +1,75 @@
-// GtkSharp.Generation.VMSignature.cs - The Virtual Method Signature Generation Class.
-//
-// Author: Mike Kestner <mkestner ximian com>
-//
-// Copyright (c) 2003-2004 Novell, Inc.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the GNU General Public
-// License as published by the Free Software Foundation.
-//
-// This program 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
-// General Public License for more details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-
-
-namespace GtkSharp.Generation {
-
-	using System;
-	using System.Collections;
-	using System.Xml;
-
-	public class VMSignature  {
-		
-		private ArrayList parms = new ArrayList ();
-
-		public VMSignature (Parameters parms) 
-		{
-			bool has_cb = parms.HideData;
-			for (int i = 1; i < parms.Count; i++) {
-				Parameter p = parms [i];
-
-				if (i > 1 && p.IsLength && parms [i - 1].IsString)
-					continue;
-
-				if (p.IsCount && ((i > 1 && parms [i - 1].IsArray) || (i < parms.Count - 1 && parms [i + 1].IsArray)))
-					continue;
-
-				has_cb = has_cb || p.Generatable is CallbackGen;
-				if (p.IsUserData && has_cb) 
-					continue;
-
-				if (p.CType == "GError**")
-					continue;
-
-				if (p.Scope == "notified")
-					i += 2;
-
-				this.parms.Add (p);
-			}
-		}
-
-		public override string ToString ()
-		{
-			if (parms.Count == 0)
-				return "";
-
-			string[] result = new string [parms.Count];
-			int i = 0;
-
-			foreach (Parameter p in parms) {
-				result [i] = p.PassAs != "" ? p.PassAs + " " : "";
-				result [i++] += p.CSType + " " + p.Name;
-			}
-
-			return String.Join (", ", result);
-		}
-	}
-}
-
+// GtkSharp.Generation.VMSignature.cs - The Virtual Method Signature Generation Class.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program 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
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+	using System;
+	using System.Collections;
+	using System.Xml;
+
+	public class VMSignature  {
+		
+		private ArrayList parms = new ArrayList ();
+
+		public VMSignature (Parameters parms) 
+		{
+			bool has_cb = parms.HideData;
+			for (int i = 1; i < parms.Count; i++) {
+				Parameter p = parms [i];
+
+				if (i > 1 && p.IsLength && parms [i - 1].IsString)
+					continue;
+
+				if (p.IsCount && ((i > 1 && parms [i - 1].IsArray) || (i < parms.Count - 1 && parms [i + 1].IsArray)))
+					continue;
+
+				has_cb = has_cb || p.Generatable is CallbackGen;
+				if (p.IsUserData && has_cb) 
+					continue;
+
+				if (p.CType == "GError**")
+					continue;
+
+				if (p.Scope == "notified")
+					i += 2;
+
+				this.parms.Add (p);
+			}
+		}
+
+		public override string ToString ()
+		{
+			if (parms.Count == 0)
+				return "";
+
+			string[] result = new string [parms.Count];
+			int i = 0;
+
+			foreach (Parameter p in parms) {
+				result [i] = p.PassAs != "" ? p.PassAs + " " : "";
+				result [i++] += p.CSType + " " + p.Name;
+			}
+
+			return String.Join (", ", result);
+		}
+	}
+}
+
diff --git a/po/sl.po b/po/sl.po
index 88546fb..b098cce 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -1,4711 +1,4711 @@
-# Andrej ÅnidarÅiÄ <andrej znidarsic gmail com>, 2009"
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-spot&keywords=I18N+L10N&component=General\n";
-"POT-Creation-Date: 2011-11-25 17:02+0000\n"
-"PO-Revision-Date: \n"
-"Last-Translator: Andrej ÅnidarÅiÄ <andrej znidarsic gmail com>\n"
-"Language-Team: Slovenian GNOME Translation Team <gnome-si googlegroups com>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
-"X-Poedit-Country: SLOVENIA\n"
-"X-Poedit-Language: Slovenian\n"
-"X-Poedit-SourceCharset: utf-8\n"
-
-#. ../src/Clients/MainApp/FSpot.addin.xml
-#: ../data/addin-xml-strings.cs:8
-#: ../src/Clients/MainApp/FSpot.addin.xml.h:1
-msgid "Copy Photo"
-msgstr "Kopiranj fotografijo"
-
-#: ../data/addin-xml-strings.cs:9
-#: ../src/Clients/MainApp/FSpot.addin.xml.h:5
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:457
-#: ../src/Clients/MainApp/ui/main_window.ui.h:16
-msgid "Rotate _Left"
-msgstr "Zavrti _levo"
-
-#: ../data/addin-xml-strings.cs:10
-#: ../src/Clients/MainApp/FSpot.addin.xml.h:6
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:458
-#: ../src/Clients/MainApp/ui/main_window.ui.h:17
-msgid "Rotate _Right"
-msgstr "Zavrti _desno"
-
-#: ../data/addin-xml-strings.cs:11
-#: ../src/Clients/MainApp/FSpot.addin.xml.h:9
-#: ../src/Clients/MainApp/ui/main_window.ui.h:60
-msgid "_Remove From Catalog"
-msgstr "_Odstrani iz kataloga"
-
-#: ../data/addin-xml-strings.cs:12
-#: ../src/Clients/MainApp/FSpot.addin.xml.h:8
-#: ../src/Clients/MainApp/ui/main_window.ui.h:41
-msgid "_Delete From Drive"
-msgstr "Iz_briÅi z diska"
-
-#. ../src/Extensions/Editors/FSpot.Editors.Blackout/Resources/BlackoutEditor.addin.xml
-#: ../data/addin-xml-strings.cs:15
-msgid "BlackoutEditor"
-msgstr "Urejevalnik poÄrnenja"
-
-#: ../data/addin-xml-strings.cs:16
-msgid "Blacks out an area of the image."
-msgstr "PoÄrni podroÄje slike."
-
-#: ../data/addin-xml-strings.cs:17
-#: ../data/addin-xml-strings.cs:22
-#: ../data/addin-xml-strings.cs:27
-#: ../data/addin-xml-strings.cs:32
-#: ../data/addin-xml-strings.cs:37
-msgid "Editors"
-msgstr "Urejevalniki"
-
-#. ../src/Extensions/Editors/FSpot.Editors.BW/Resources/BWEditor.addin.xml
-#: ../data/addin-xml-strings.cs:20
-msgid "BWEditor"
-msgstr "BWUrejevalnik"
-
-#: ../data/addin-xml-strings.cs:21
-msgid "Convert to B/W with control. Require Mono 2.2."
-msgstr "Pretvori v ÄB z nadzorom. Zahteva Mono 2.2."
-
-#. ../src/Extensions/Editors/FSpot.Editors.Flip/Resources/FlipEditor.addin.xml
-#: ../data/addin-xml-strings.cs:25
-msgid "FlipEditor"
-msgstr "Urejevalnik zrcaljenja"
-
-#: ../data/addin-xml-strings.cs:26
-msgid "Flips the image horizontally."
-msgstr "Zrcali sliko vodoravno."
-
-#. ../src/Extensions/Editors/FSpot.Editors.Pixelate/Resources/PixelateEditor.addin.xml
-#: ../data/addin-xml-strings.cs:30
-msgid "PixelateEditor"
-msgstr "Urejevalnik pretvorbe v toÄke"
-
-#: ../data/addin-xml-strings.cs:31
-msgid "Pixelates an area of the image."
-msgstr "PodroÄje slike pretvori v toÄke"
-
-#. ../src/Extensions/Editors/FSpot.Editors.Resize/Resources/ResizeEditor.addin.xml
-#: ../data/addin-xml-strings.cs:35
-msgid "ResizeEditor"
-msgstr "Urejevalnik spremembe velikosti"
-
-#: ../data/addin-xml-strings.cs:36
-msgid "Resize the image"
-msgstr "Spremeni velikost slike"
-
-#. ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.addin.xml
-#: ../data/addin-xml-strings.cs:40
-msgid "CD Export"
-msgstr "Izvoz na CD"
-
-#: ../data/addin-xml-strings.cs:41
-msgid "This extension allows you to burn your photos to CD."
-msgstr "Ta razÅiritev vam omogoÄa zapisovanje vaÅih fotografij na CD."
-
-#: ../data/addin-xml-strings.cs:42
-#: ../data/addin-xml-strings.cs:48
-#: ../data/addin-xml-strings.cs:54
-#: ../data/addin-xml-strings.cs:62
-#: ../data/addin-xml-strings.cs:68
-#: ../data/addin-xml-strings.cs:74
-#: ../data/addin-xml-strings.cs:80
-#: ../data/addin-xml-strings.cs:86
-#: ../data/addin-xml-strings.cs:92
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:6
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:5
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:5
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:5
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:5
-msgid "Export"
-msgstr "Izvoz"
-
-#: ../data/addin-xml-strings.cs:43
-msgid "_CD..."
-msgstr "_CD ..."
-
-#. ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.addin.xml
-#: ../data/addin-xml-strings.cs:46
-msgid "FacebookExport"
-msgstr "Izvoz na Facebook"
-
-#: ../data/addin-xml-strings.cs:47
-msgid "Export pictures to facebook"
-msgstr "Izvoz fotografij na Facebook"
-
-#: ../data/addin-xml-strings.cs:49
-msgid "F_acebook..."
-msgstr "F_acebook ..."
-
-#. ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/FlickrExport.addin.xml
-#: ../data/addin-xml-strings.cs:52
-msgid "Flickr Export"
-msgstr "Izvoz na Flickr"
-
-#: ../data/addin-xml-strings.cs:53
-msgid "This extension allows you to export your photos to Flickr and 23hq."
-msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij na Flickr in 23hq."
-
-#: ../data/addin-xml-strings.cs:55
-msgid "_Flickr..."
-msgstr "_Flickr ..."
-
-#: ../data/addin-xml-strings.cs:56
-msgid "_23hq..."
-msgstr "_23hq ..."
-
-#: ../data/addin-xml-strings.cs:57
-msgid "_Zooomr..."
-msgstr "_Zooomr ..."
-
-#. ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/FolderExport.addin.xml
-#: ../data/addin-xml-strings.cs:60
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:10
-msgid "Folder Export"
-msgstr "Izvoz mape"
-
-#: ../data/addin-xml-strings.cs:61
-msgid "This extension allows you to export your photos to HTML galleries, Original galleries or just to a folder."
-msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij v galerije HTML, galerije Origional ali enostavno v mapo."
-
-#: ../data/addin-xml-strings.cs:63
-msgid "F_older..."
-msgstr "_Mapa ..."
-
-#. ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/GalleryExport.addin.xml
-#: ../data/addin-xml-strings.cs:66
-msgid "Gallery Export"
-msgstr "Izvoz v Gallery"
-
-#: ../data/addin-xml-strings.cs:67
-msgid "This extension allows you to export your photos to PHP Gallery (http://gallery.menalto.com)."
-msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij v PHP Gallery (http://gallery.menalto.com)."
-
-#: ../data/addin-xml-strings.cs:69
-msgid "Web _Gallery..."
-msgstr "Spletna _galerija ..."
-
-#. ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/PicasaWebExport.addin.xml
-#: ../data/addin-xml-strings.cs:72
-msgid "PicasaWeb Export"
-msgstr "Izvoz na PicasaWeb"
-
-#: ../data/addin-xml-strings.cs:73
-msgid "This extension allows you to export your photos to PicasaWeb."
-msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij v PicasaWeb."
-
-#: ../data/addin-xml-strings.cs:75
-msgid "_PicasaWeb..."
-msgstr "_PicasaWeb ..."
-
-#. ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/SmugMugExport.addin.xml
-#: ../data/addin-xml-strings.cs:78
-msgid "SmugMug Export"
-msgstr "Izvoz na SmugMug"
-
-#: ../data/addin-xml-strings.cs:79
-msgid "This extension allows you to export your photos to SmugMug."
-msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij v SmugMug."
-
-#: ../data/addin-xml-strings.cs:81
-msgid "_SmugMug..."
-msgstr "_SmugMug ..."
-
-#. ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/TabbloExport.addin.xml
-#: ../data/addin-xml-strings.cs:84
-msgid "Tabblo Export"
-msgstr "Izvoz v Tabblo"
-
-#: ../data/addin-xml-strings.cs:85
-msgid "This extension allows you to export your photos to Tabblo."
-msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij v Tabblo."
-
-#: ../data/addin-xml-strings.cs:87
-msgid "_Tabblo..."
-msgstr "_Tabblo ..."
-
-#. ../src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/ZipExport.addin.xml
-#: ../data/addin-xml-strings.cs:90
-msgid "Zip export"
-msgstr "Izvoz v Zip"
-
-#: ../data/addin-xml-strings.cs:91
-msgid "Simple export to Zip file"
-msgstr "Enostaven izvoz v datoteko Zip"
-
-#: ../data/addin-xml-strings.cs:93
-msgid "Compressed fil_e..."
-msgstr "Stisnjena datot_eka ..."
-
-#. ../src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.addin.xml
-#: ../data/addin-xml-strings.cs:96
-msgid "ChangePath"
-msgstr "Spremeni pot"
-
-#: ../data/addin-xml-strings.cs:97
-msgid "UNSTABLE - Please ensure you have a backup of your photos.db before you test this extension. This extension will allow you to change the base path to the your photos. It is very handy if you move your photos from ~/Photos to /OurPhotos for instance. Just ensure you let SqLite continue to process the changes for up to a few hours after f-spot reports finished. It will only change the path to photos which are located under the Photo directory."
-msgstr "NESTABILNO - pred preizkusom te razÅiritve se prepriÄajte, da imate varnostno kopijo photos.db. Ta razÅiritev vam bo dovolila spremembo osnovne poti do vaÅih fotografij.  To je zelo priroÄno, Äe svoje fotografije premikate na primer iz ~/Fotografije v /NaÅeFotografije. PrepriÄajte se, da pustite Sqlite obdelovati spremembe Åe do pol ure potem, ko f-spot sporoÄi, da je konÄal. Spremenjena bo samo pot do fotografij, ki so v mapi Fotografije. "
-
-#: ../data/addin-xml-strings.cs:98
-#: ../data/addin-xml-strings.cs:104
-#: ../data/addin-xml-strings.cs:110
-#: ../data/addin-xml-strings.cs:116
-#: ../data/addin-xml-strings.cs:122
-#: ../data/addin-xml-strings.cs:128
-#: ../data/addin-xml-strings.cs:134
-#: ../data/addin-xml-strings.cs:140
-#: ../data/addin-xml-strings.cs:146
-#: ../data/addin-xml-strings.cs:152
-#: ../src/Clients/MainApp/FSpot.addin.xml.h:7
-msgid "Tools"
-msgstr "Orodja"
-
-#: ../data/addin-xml-strings.cs:99
-msgid "Change path to photos"
-msgstr "Spremeni pot v slike"
-
-#. ../src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Resources/DevelopInUFRaw.addin.xml
-#: ../data/addin-xml-strings.cs:102
-msgid "DevelopInUFRaw"
-msgstr "RazvojVUFRaw"
-
-#: ../data/addin-xml-strings.cs:103
-msgid ""
-"Develop the image in UFRaw, saves the result as a new version\\n"
-"\\n"
-"Note: Require ufraw 0.13 or CVS version newer than 2007-09-06 !!!"
-msgstr ""
-"Razvije sliko v UFRaw, shrani rezultat kot novo razliÄico\\n"
-"\\n"
-"Zahteva ufraw 0.13 ali CVS razliÄico novejÅo kot 06.09.2007 !!!"
-
-#: ../data/addin-xml-strings.cs:105
-msgid "Develop in UFRaw"
-msgstr "Razvoj v UFRaw"
-
-#. ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/LiveWebGallery.addin.xml
-#: ../data/addin-xml-strings.cs:108
-msgid "LiveWebGallery"
-msgstr "Åiva spletna galerija"
-
-#: ../data/addin-xml-strings.cs:109
-msgid "Share photos with other people on the same network via Web Browser"
-msgstr "Souporaba fotografij z drugimi ljudmi na istem omreÅju preko spletnega brskalnika"
-
-#: ../data/addin-xml-strings.cs:111
-msgid "Live Web Gallery"
-msgstr "Åiva spletna galerija"
-
-#. ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/MergeDb.addin.xml
-#: ../data/addin-xml-strings.cs:114
-msgid "MergeDb"
-msgstr "ZdruÅi podatkovne zbirke"
-
-#: ../data/addin-xml-strings.cs:115
-msgid "Merge another db back to the main one"
-msgstr "ZdruÅi drugo podatkovno zbirko nazaj z glavno"
-
-#: ../data/addin-xml-strings.cs:117
-msgid "Merge Db"
-msgstr "ZdruÅi podatkovne zbirke"
-
-#. ../src/Extensions/Tools/FSpot.Tools.MetaPixel/MetaPixel.addin.xml
-#: ../data/addin-xml-strings.cs:120
-msgid "MetaPixel"
-msgstr "MetaPixel"
-
-#: ../data/addin-xml-strings.cs:121
-msgid "Create photomosaics using MetaPixel (http://www.complang.tuwien.ac.at/schani/metapixel/)"
-msgstr "Ustvari mozaike fotografij z uproabo MetaPixel (http://www.complang.tuwien.ac.at/schani/metapixel/)"
-
-#: ../data/addin-xml-strings.cs:123
-msgid "Create p_hotomosaic"
-msgstr "Ustvari foto-mozaik"
-
-#. ../src/Extensions/Tools/FSpot.Tools.PictureTile/PictureTile.addin.xml
-#: ../data/addin-xml-strings.cs:126
-msgid "PictureTile"
-msgstr "PictureTile"
-
-#: ../data/addin-xml-strings.cs:127
-msgid "Create photo wall using PictureTile by Jamie Zawinski (http://www.jwz.org/picturetile/)"
-msgstr "Ustvari slikovni zid s PictureTile Jamieja Zawinskija (http://www.jwz.org/picturetile/)"
-
-#: ../data/addin-xml-strings.cs:129
-msgid "Create photo_wall"
-msgstr "Ustvari slikovni _zid"
-
-#. ../src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Resources/RawPlusJpeg.addin.xml
-#: ../data/addin-xml-strings.cs:132
-msgid "RawPlusJpeg"
-msgstr "RawPlusJpeg"
-
-#: ../data/addin-xml-strings.cs:133
-msgid "Merge RAW+Jpeg as multiple versions of the same photo"
-msgstr "ZadruÅi RAW in jpeg kot veÄ razliÄic enake fotografije"
-
-#: ../data/addin-xml-strings.cs:135
-msgid "Merge Raw"
-msgstr "ZdruÅi surove"
-
-#. ../src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Resources/RetroactiveRoll.addin.xml
-#: ../data/addin-xml-strings.cs:138
-msgid "RetroactiveRoll"
-msgstr "Retroaktivni zvitki"
-
-#: ../data/addin-xml-strings.cs:139
-msgid "Retroactively assign old photos to import rolls"
-msgstr "Retroaktivno dodeli stare fotografije uvoznim zvitkom"
-
-#: ../data/addin-xml-strings.cs:141
-msgid "Reassign to new import roll"
-msgstr "Ponovno dodeli novemu uvoznemu zvitku"
-
-#. ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfig.addin.xml
-#: ../data/addin-xml-strings.cs:144
-#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:6
-msgid "Screensaver Configuration"
-msgstr "Nastavitve ohranjevalnika zaslona"
-
-#: ../data/addin-xml-strings.cs:145
-msgid "Screensaver options"
-msgstr "MoÅnosti ohranjevalnika zaslona"
-
-#: ../data/addin-xml-strings.cs:147
-msgid "Configure Screensaver"
-msgstr "Nastavi ohranjevalnik zaslona"
-
-#. ../src/Extensions/Tools/FSpot.Tools.SyncCatalog/SyncCatalog.addin.xml
-#: ../data/addin-xml-strings.cs:150
-msgid "SyncMetaData"
-msgstr "Metapodatki Usklajevanja"
-
-#: ../data/addin-xml-strings.cs:151
-msgid "Sync MetaData information of all catalog with Photos"
-msgstr "Uskladi podrobnosti metapodatkov za vse kataloge s fotografijami "
-
-#: ../data/addin-xml-strings.cs:153
-msgid "Sync Catalog with Photos"
-msgstr "Uskladi katalog s fotografijami"
-
-#. ../src/Extensions/Transitions/FSpot.Transitions.Cover/Resources/CoverTransition.addin.xml
-#: ../data/addin-xml-strings.cs:156
-msgid "Cover Transition"
-msgstr "Prehod prekrivanja"
-
-#: ../data/addin-xml-strings.cs:157
-msgid "A Slideshow transition that covers images"
-msgstr "Prehod diaprestavitve, ki pokrije slike"
-
-#: ../data/addin-xml-strings.cs:158
-#: ../data/addin-xml-strings.cs:163
-#: ../data/addin-xml-strings.cs:168
-msgid "Transitions"
-msgstr "Prehodi"
-
-#. ../src/Extensions/Transitions/FSpot.Transitions.Dissolve/Resources/DissolveTransition.addin.xml
-#: ../data/addin-xml-strings.cs:161
-msgid "Dissolve Transition"
-msgstr "Prehod raztapljanje"
-
-#: ../data/addin-xml-strings.cs:162
-msgid "A Slideshow transition that dissolves images"
-msgstr "Prehod predstavitve, ki raztopi slike"
-
-#. ../src/Extensions/Transitions/FSpot.Transitions.Push/Resources/PushTransition.addin.xml
-#: ../data/addin-xml-strings.cs:166
-msgid "Push Transition"
-msgstr "Prehod potisk"
-
-#: ../data/addin-xml-strings.cs:167
-msgid "A Slideshow transition that pushes images"
-msgstr "Prehod prestavitve, ki slike potisne"
-
-#: ../data/desktop-files/f-spot.desktop.in.in.h:1
-#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
-#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
-msgid "F-Spot"
-msgstr "F-Spot"
-
-#: ../data/desktop-files/f-spot.desktop.in.in.h:2
-#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "F-spot upravljalnik fotografij"
-
-#: ../data/desktop-files/f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Urejajte, uÅivajte in dajte svoje fotografije v souporabo."
-
-#: ../data/desktop-files/f-spot.desktop.in.in.h:4
-#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Upravljalnik fotografij"
-
-#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "Uvozi v F-Spot"
-
-#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "F-_Spot pregledovalnik fotografij"
-
-#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Pregledovalnik fotografij"
-
-#: ../f-spot.schemas.in.h:1
-msgid "Display of transparent parts."
-msgstr "PrikaÅi prozorne dele."
-
-#: ../f-spot.schemas.in.h:2
-msgid "Enable this to allow interpolation on zoomed images."
-msgstr "OmogoÄite to za interpolacijo pribliÅanih slik."
-
-#: ../f-spot.schemas.in.h:3
-msgid "Height of the import dialog."
-msgstr "ViÅina pogovornega okna uvoza."
-
-#: ../f-spot.schemas.in.h:4
-msgid "Height of the main window."
-msgstr "ViÅina glavnega okna."
-
-#: ../f-spot.schemas.in.h:5
-msgid "Height of the photo viewer window."
-msgstr "ViÅina okna pregledovalnika fotografij."
-
-#: ../f-spot.schemas.in.h:6
-msgid "If the 'transparency' option is set, the color specified in this option will be used as the transparent color when viewing images."
-msgstr "V primeru da je moÅnost 'prozornost' nastavljena, bo barva navedena v tej moÅnosti pri ogledu slik uporabljena kot prozorna barva."
-
-#: ../f-spot.schemas.in.h:7
-msgid "Interpolate image on zoom."
-msgstr "Interpolacija slike pri poveÄavi."
-
-#: ../f-spot.schemas.in.h:8
-msgid "Maximize the main window."
-msgstr "Razpne glavno okno."
-
-#: ../f-spot.schemas.in.h:9
-msgid "Maximize the photo viewer window."
-msgstr "Razpne okno pregledovalnika fotografij."
-
-#: ../f-spot.schemas.in.h:10
-msgid "Path to custom gtkrc for theming F-Spot."
-msgstr "Pot do gtkrc po meri za temo F-Spot."
-
-#: ../f-spot.schemas.in.h:11
-msgid "Show dates in the thumbnail view."
-msgstr "PokaÅi datume v pogledu sliÄic."
-
-#: ../f-spot.schemas.in.h:12
-msgid "Show ratings in the thumbnail view."
-msgstr "PokaÅi ocene v pogledu sliÄic."
-
-#: ../f-spot.schemas.in.h:13
-msgid "Show tags in the thumbnail view."
-msgstr "PokaÅi oznake v pogledu sliÄic."
-
-#: ../f-spot.schemas.in.h:14
-msgid "Show the filename in the viewer window."
-msgstr "PokaÅi ime datoteke v oknu pregledovalnika."
-
-#: ../f-spot.schemas.in.h:15
-msgid "Show the filmstrip in the main window."
-msgstr "PokaÅi filmski trak v glavnem oknu."
-
-#: ../f-spot.schemas.in.h:16
-msgid "Show the sidebar in the main window."
-msgstr "PokaÅi drsnik v glavnem oknu."
-
-#: ../f-spot.schemas.in.h:17
-msgid "Show the timeline in the main window."
-msgstr "PokaÅi Äasovnico v glavnem oknu."
-
-#: ../f-spot.schemas.in.h:18
-msgid "Show the toolbar in the main window."
-msgstr "PokaÅi orodno vrstico v glavnem oknu."
-
-#: ../f-spot.schemas.in.h:19
-msgid "Show the toolbar in the photo viewer window."
-msgstr "PokaÅi ali skrij orodno vrstico v oknu pregledovalnika fotografij."
-
-#: ../f-spot.schemas.in.h:20
-msgid "Size of the tag icons shown in the sidebar."
-msgstr "Velikost ikon oznak prikazanih v stranski vrstici."
-
-#: ../f-spot.schemas.in.h:21
-msgid "The X position to use for the main window."
-msgstr "X poloÅaj glavnega okna."
-
-#: ../f-spot.schemas.in.h:22
-msgid "The X position to use for the photo viewer window."
-msgstr "X poloÅaj okna pregledovalnika fotografij."
-
-#: ../f-spot.schemas.in.h:23
-msgid "The Y position to use for the main window."
-msgstr "Y poloÅaj glavnega okna."
-
-#: ../f-spot.schemas.in.h:24
-msgid "The Y position to use for the photo viewer window."
-msgstr "Y poloÅaj okna pregledovalnika fotografij."
-
-#: ../f-spot.schemas.in.h:25
-msgid "The color to use for transparent parts."
-msgstr "Barva za prozorne dele."
-
-#: ../f-spot.schemas.in.h:26
-msgid "The height dimension to use for the import dialog."
-msgstr "ViÅina pogovornega okna."
-
-#: ../f-spot.schemas.in.h:27
-msgid "The height dimension to use for the main window."
-msgstr "ViÅina glavnega okna."
-
-#: ../f-spot.schemas.in.h:28
-msgid "The height dimension to use for the photo viewer window."
-msgstr "ViÅina okna pregledovalnika fotografij."
-
-#: ../f-spot.schemas.in.h:29
-msgid "The orientation of the filmstrip, if shown."
-msgstr "Usmeritev filmskega traku, Äe je prikazan."
-
-#: ../f-spot.schemas.in.h:30
-msgid "The orientation of the filmstrip."
-msgstr "Usmeritev filmskega traku."
-
-#: ../f-spot.schemas.in.h:31
-msgid "The size (width) of the sidebar in the main window."
-msgstr "Velikost (Åirina) drsnika v glavnemu oknu."
-
-#: ../f-spot.schemas.in.h:32
-msgid "The size of the sidebar in the main window."
-msgstr "Velikost drsnika v glavnemu oknu."
-
-#: ../f-spot.schemas.in.h:33
-msgid "The width dimension to use for the import dialog."
-msgstr "Åirina pogovornega okna uvoza."
-
-#: ../f-spot.schemas.in.h:34
-msgid "The width dimension to use for the main window."
-msgstr "Åirina glavnega okna."
-
-#: ../f-spot.schemas.in.h:35
-msgid "The width dimension to use for the photo viewer window."
-msgstr "Åirina okna pregledovalnika fotografij."
-
-#: ../f-spot.schemas.in.h:36
-msgid "Use the current photo's filename as the viewer window's title."
-msgstr "Uporabi ime datoteke trenutne fotografije kot naslov okna pregledovalnika."
-
-#: ../f-spot.schemas.in.h:37
-msgid "Width of the import dialog."
-msgstr "Åirina pogovornega okna uvoza."
-
-#: ../f-spot.schemas.in.h:38
-msgid "Width of the main window."
-msgstr "Åirina glavnega okna."
-
-#: ../f-spot.schemas.in.h:39
-msgid "Width of the photo viewer window."
-msgstr "Åirina okna pregledovalnika fotografij."
-
-#: ../f-spot.schemas.in.h:40
-msgid "Width of the preview image pane in the import dialog."
-msgstr "Åirina pladnja predogleda slike v pogovornemu oknu uvoza."
-
-#: ../f-spot.schemas.in.h:41
-msgid "X position of the main window."
-msgstr "X poloÅaj glavnega okna"
-
-#: ../f-spot.schemas.in.h:42
-msgid "X position of the photo viewer window."
-msgstr "X poloÅaj okna pregledovalnika fotografij."
-
-#: ../f-spot.schemas.in.h:43
-msgid "Y position of the main window."
-msgstr "Y poloÅaj glavnega okna."
-
-#: ../f-spot.schemas.in.h:44
-msgid "Y position of the photo viewer window."
-msgstr "Y poloÅaj okna pregledovalnika fotografij."
-
-#: ../f-spot.schemas.in.h:45
-msgid "You can choose how to display transparent parts in images. This option has no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR could be useful when viewing icons or other artwork with transparent parts."
-msgstr "MogoÄe je izbrati naÄin prikaza prozornih delov slik. Ta moÅnost ne vpliva na fotografije, vendar je lahko nastavitev te vrednosti na vzorec Åahovnice ali barva po izbiri koristna pri ogledu ikon in ostalih grafiÄnih podobah s prozornimi deli."
-
-#: ../lib/Mono.Google/Mono.Google/CaptchaException.cs:58
-msgid "url"
-msgstr "url"
-
-#: ../lib/Mono.Google/Mono.Google/CaptchaException.cs:59
-msgid "token"
-msgstr "Åeton"
-
-#: ../lib/Mono.Google/Mono.Google/CaptchaException.cs:60
-msgid "captcha_url"
-msgstr "captcha_url"
-
-#: ../lib/Mono.Tabblo/Mono.Tabblo/Connection.cs:132
-#, csharp-format
-msgid "Uploading photo \"{0}\""
-msgstr "PoÅiljanje fotografije \"{0}\""
-
-#: ../lib/Mono.Tabblo/Mono.Tabblo/Connection.cs:206
-msgid "Logging into Tabblo"
-msgstr "Prijavljanje v Tabblo"
-
-#: ../lib/Mono.Tabblo/Mono.Tabblo/Connection.cs:267
-msgid "Obtaining URL for upload"
-msgstr "Pridobivanje URL-ja za nalaganje"
-
-#: ../src/Clients/MainApp/FSpot.addin.xml.h:2
-msgid "Export to"
-msgstr "Izvozi v"
-
-#: ../src/Clients/MainApp/FSpot.addin.xml.h:3
-msgid "Open _With"
-msgstr "Odpri _z"
-
-#: ../src/Clients/MainApp/FSpot.addin.xml.h:4
-#: ../src/Clients/MainApp/ui/main_window.ui.h:15
-msgid "Rem_ove Tag"
-msgstr "Ods_trani oznako"
-
-#: ../src/Clients/MainApp/FSpot/App.cs:319
-#, csharp-format
-msgid "No photos matching {0} found"
-msgstr "Fotografije, ki se sklada z {0}, ni bilo mogoÄe najti"
-
-#: ../src/Clients/MainApp/FSpot/App.cs:320
-#, csharp-format
-msgid ""
-"The tag \"{0}\" is not applied to any photos. Try adding\n"
-"the tag to some photos or selecting a different tag in the\n"
-"F-Spot preference dialog."
-msgstr ""
-"Oznaka \"{0}\" ni uveljavljena. Poskusite z dodajanjem\n"
-"oznake fotografijam ali izberite drugo oznako v\n"
-"pogovornem oknu moÅnosti F-Spot."
-
-#: ../src/Clients/MainApp/FSpot/App.cs:324
-msgid "Search returned no results"
-msgstr "Iskanje ni vrnilo rezultatov"
-
-#: ../src/Clients/MainApp/FSpot/App.cs:325
-msgid ""
-"The tag F-Spot is looking for does not exist. Try\n"
-"selecting a different tag in the F-Spot preference\n"
-"dialog."
-msgstr ""
-"Oznaka, ki jo iÅÄe F-Spot, ne obstaja. Poskusite\n"
-"z izborom druge oznake v pogovornem oknu \n"
-"moÅnosti F-Spot."
-
-#: ../src/Clients/MainApp/FSpot.Database/Updater.cs:768
-msgid "Updating F-Spot Database"
-msgstr "Posodabljanje podatkovne zbirke F-Spot"
-
-#: ../src/Clients/MainApp/FSpot.Database/Updater.cs:769
-msgid "Please wait while your F-Spot gallery's database is updated. This may take some time."
-msgstr "PoÄakati je treba, da se podatkovna zbirka galerije F-Spot do konca posodobi. Postopek lahko traja nekaj Äasa."
-
-#: ../src/Clients/MainApp/FSpot.Editors/AutoStretchEditor.cs:37
-msgid "Auto Color"
-msgstr "Samodejna barva"
-
-#: ../src/Clients/MainApp/FSpot.Editors/ColorEditor.cs:61
-msgid "Adjust Colors"
-msgstr "Prilagajanje barv"
-
-#: ../src/Clients/MainApp/FSpot.Editors/ColorEditor.cs:64
-msgid "Adjust"
-msgstr "Prilagodi"
-
-#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:56
-msgid "4 x 3 (Book)"
-msgstr "4 x 3 (knjiga)"
-
-#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:57
-msgid "4 x 6 (Postcard)"
-msgstr "4 x 6 (razglednica)"
-
-#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:58
-msgid "5 x 7 (L, 2L)"
-msgstr "5 x 7 (L, 2L)"
-
-#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:59
-msgid "8 x 10"
-msgstr "8 x 10"
-
-#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:60
-msgid "Square"
-msgstr "Kvadrat"
-
-#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:63
-msgid "Crop"
-msgstr "ObreÅi"
-
-#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:94
-msgid "Select the area that needs cropping."
-msgstr "Izbor obmoÄja za obrez."
-
-#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:119
-msgid "No Constraint"
-msgstr "Brez omejitev"
-
-#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:120
-msgid "Same as photo"
-msgstr "Enako kot fotografija"
-
-#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:125
-msgid "Custom Ratios..."
-msgstr "Razmerja velikosti po meri"
-
-#: ../src/Clients/MainApp/FSpot.Editors/DesaturateEditor.cs:37
-msgid "Desaturate"
-msgstr "ZmanjÅaj nasiÄenje"
-
-#: ../src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs:41
-msgid "Red-eye Reduction"
-msgstr "ZmanjÅanje rdeÄih oÄi"
-
-#: ../src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs:44
-msgid "Fix!"
-msgstr "Popravi"
-
-#: ../src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs:48
-msgid "Select the eyes you wish to fix."
-msgstr "Izberite oÄi za popravilo."
-
-#: ../src/Clients/MainApp/FSpot.Editors/SepiaEditor.cs:37
-msgid "Sepia Tone"
-msgstr "Sepia uÄinek staranja"
-
-#: ../src/Clients/MainApp/FSpot.Editors/SoftFocusEditor.cs:50
-msgid "Soft Focus"
-msgstr "Mehka izostritev"
-
-#: ../src/Clients/MainApp/FSpot.Editors/TiltEditor.cs:51
-msgid "Straighten"
-msgstr "Poravnava"
-
-#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:82
-msgid "Hide"
-msgstr "Skrij"
-
-#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:84
-msgid "Hide toolbar"
-msgstr "Skrij orodno vrstico"
-
-#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:90
-msgid "Info"
-msgstr "Podatki"
-
-#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:92
-msgid "Image information"
-msgstr "Podatki o sliki"
-
-#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:97
-msgid "Exit fullscreen"
-msgstr "Izhod iz celozaslonskega naÄina"
-
-#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:105
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:341
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:122
-msgid "Slideshow"
-msgstr "Diapredstavitev"
-
-#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:106
-msgid "Start slideshow"
-msgstr "Zagon diapredstavitve"
-
-#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:152
-msgid "Slide transition:"
-msgstr "Prehodi med diapozitivi:"
-
-#: ../src/Clients/MainApp/FSpot/GroupSelector.cs:90
-#: ../src/Clients/MainApp/FSpot/GroupSelector.cs:91
-msgid "More dates"
-msgstr "VeÄ datumov"
-
-#: ../src/Clients/MainApp/FSpot/GroupSelector.cs:93
-#: ../src/Clients/MainApp/FSpot/GroupSelector.cs:94
-msgid "More"
-msgstr "VeÄ"
-
-#: ../src/Clients/MainApp/FSpot/GroupSelector.cs:554
-#: ../src/Clients/MainApp/ui/main_window.ui.h:34
-msgid "_Clear Date Range"
-msgstr "_ÄiÅÄenje datumskega obmoÄja"
-
-#: ../src/Clients/MainApp/FSpot.Import/ImportController.cs:510
-#: ../src/Clients/MainApp/FSpot.Import/ImportController.cs:512
-#: ../src/Clients/MainApp/FSpot.Import/MetadataImporter.cs:72
-msgid "Imported Tags"
-msgstr "UvoÅene oznake"
-
-#: ../src/Clients/MainApp/FSpot/ItemAction.cs:102
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:308
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:105
-msgid "Rotate Left"
-msgstr "Zavrti levo"
-
-#: ../src/Clients/MainApp/FSpot/ItemAction.cs:103
-msgid "Rotate picture left"
-msgstr "Vrtenje slike levo"
-
-#: ../src/Clients/MainApp/FSpot/ItemAction.cs:114
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:312
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:110
-msgid "Rotate Right"
-msgstr "Zavrti desno"
-
-#: ../src/Clients/MainApp/FSpot/ItemAction.cs:115
-msgid "Rotate picture right"
-msgstr "Vrtenje slike desno"
-
-#: ../src/Clients/MainApp/FSpot/ItemAction.cs:125
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:938
-msgid "Next"
-msgstr "Naslednja"
-
-#: ../src/Clients/MainApp/FSpot/ItemAction.cs:126
-msgid "Next picture"
-msgstr "Naslednja slika"
-
-#: ../src/Clients/MainApp/FSpot/ItemAction.cs:146
-msgid "Previous"
-msgstr "Predhodni"
-
-#: ../src/Clients/MainApp/FSpot/ItemAction.cs:147
-msgid "Previous picture"
-msgstr "Predhodna slika"
-
-#: ../src/Clients/MainApp/FSpot/Literal.cs:225
-#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:182
-#, csharp-format
-msgid "Not {0}"
-msgstr "Ne {0}"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:301
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:229
-#: ../src/Clients/MainApp/ui/import.ui.h:3
-msgid "Import"
-msgstr "Uvozi"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:303
-msgid "Import new images"
-msgstr "Uvoz novih slik"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:319
-#: ../src/Clients/MainApp/ui/main_window.ui.h:3
-msgid "Browse"
-msgstr "Prebrskaj"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:323
-msgid "Browse many photos simultaneously"
-msgstr "Brskanje po veÄ fotografijah hkrati"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:327
-msgid "Edit Image"
-msgstr "Uredi sliko"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:331
-msgid "View and edit a photo"
-msgstr "Prikaz in urejanje fotografije"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:336
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:117
-msgid "Fullscreen"
-msgstr "Celozaslonski naÄin"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:338
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:119
-msgid "View photos fullscreen"
-msgstr "Celozaslonski ogled fotografij"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:343
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:124
-msgid "View photos in a slideshow"
-msgstr "Ogled fotografij v diapredstavitvi"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:358
-msgid "Previous photo"
-msgstr "Predhodna fotografija"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:363
-msgid "Next photo"
-msgstr "Naslednja fotografija"
-
-#. Don't care otherwise, Tags sounds reasonable
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:376
-#: ../src/Clients/MainApp/FSpot.Widgets/Sidebar.cs:75
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:935
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1107
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1147
-msgid "Tags"
-msgstr "Oznake"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:440
-msgid "Show _Find Bar"
-msgstr "PokaÅi is_kalno vrstico"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:443
-msgid "Hide _Find Bar"
-msgstr "Skrij _iskalno vrstico"
-
-#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:671
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs:154
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ProgressDialog.cs:111
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:134
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:391
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:242
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:214
-#, csharp-format
-msgid "{0} of {1}"
-msgstr "{0} od {1}"
-
-#. Translators, The singular case will never happen here.
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1745
-#, csharp-format
-msgid "Merge the selected tag"
-msgid_plural "Merge the {0} selected tags?"
-msgstr[0] "Ali naj bo zdruÅenih {0} izbranih oznak?"
-msgstr[1] "Ali naj bo zdruÅena {0} izbrana oznaka?"
-msgstr[2] "Ali naj bosta zdruÅeni {0} izbrani oznaki?"
-msgstr[3] "Ali naj bodo zdruÅene {0} izbrane oznake?"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1772
-msgid "This operation will merge the selected tags and any sub-tags into a single tag."
-msgstr "To dejanje bo zdruÅilo izbrane oznake in morebitne pod-oznake v eno samo oznako."
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1774
-msgid "_Merge Tags"
-msgstr "Z_druÅi oznake"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1979
-#, csharp-format
-msgid "{0} Photo out of {1}"
-msgid_plural "{0} Photos out of {1}"
-msgstr[0] "{0} fotografij od {1}"
-msgstr[1] "{0} fotografija od {1}"
-msgstr[2] "{0} fotografiji od {1}"
-msgstr[3] "{0} fotografije od {1}"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1981
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:499
-#, csharp-format
-msgid "{0} Photo"
-msgid_plural "{0} Photos"
-msgstr[0] "{0} Fotografij"
-msgstr[1] "{0} Fotografija"
-msgstr[2] "{0} Fotografiji"
-msgstr[3] "{0} Fotografije"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1984
-#, csharp-format
-msgid " ({0} selected)"
-msgid_plural " ({0} selected)"
-msgstr[0] " ({0} izbranih)"
-msgstr[1] " ({0} izbrana)"
-msgstr[2] " ({0} izbrani)"
-msgstr[3] " ({0} izbrane)"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2065
-msgid "_Ok"
-msgstr "_V redu"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2066
-msgid "Error Deleting Picture"
-msgstr "Napaka med brisanjem slike"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2071
-#, csharp-format
-msgid "No permission to delete the file:{1}{0}"
-msgstr "Ni dovoljenj za izbris datoteke:{1}{0}"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2075
-#, csharp-format
-msgid "An error of type {0} occurred while deleting the file:{2}{1}"
-msgstr "Med brisanjem datoteke {2} {1} je priÅlo do napake vrste {0}"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2107
-#, csharp-format
-msgid "Delete the selected photo permanently?"
-msgid_plural "Delete the {0} selected photos permanently?"
-msgstr[0] "Ali naj bo trajno izbrisanih {0} izbranih fotografij?"
-msgstr[1] "Ali naj bo trajno izbrisana {0} izbrana fotografija?"
-msgstr[2] "Ali naj bosta trajno izbrisani {0} izbrani fotografiji?"
-msgstr[3] "Ali naj bodo trajno izbrisane {0} izbrane fotografije?"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2111
-msgid "This deletes all versions of the selected photo from your drive."
-msgid_plural "This deletes all versions of the selected photos from your drive."
-msgstr[0] "To bo izbrisalo vse razliÄice izbranih fotografij z diska."
-msgstr[1] "To bo izbrisalo vse razliÄice izbrane fotografije z diska."
-msgstr[2] "To bo izbrisalo vse razliÄice izbranih fotografij z diska."
-msgstr[3] "To bo izbrisalo vse razliÄice izbranih fotografij z diska."
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2114
-msgid "_Delete photo"
-msgid_plural "_Delete photos"
-msgstr[0] "Izbri_Åi fotografije"
-msgstr[1] "Izbri_Åi fotografijo"
-msgstr[2] "Izbri_Åi fotografiji"
-msgstr[3] "Izbri_Åi fotografije"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2150
-#, csharp-format
-msgid "Remove the selected photo from F-Spot?"
-msgid_plural "Remove the {0} selected photos from F-Spot?"
-msgstr[0] "Ali naj se odstrani {0} izbranih fotografij iz F-Spot ?"
-msgstr[1] "Ali naj se odstrani {0} izbrano fotografijo iz F-Spot ?"
-msgstr[2] "Ali naj se odstranita {0} izbrani fotografij iz F-Spot ?"
-msgstr[3] "Ali naj se odstranijo {0} izbrane fotografije iz F-Spot ?"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2155
-msgid "If you remove photos from the F-Spot catalog all tag information will be lost. The photos remain on your computer and can be imported into F-Spot again."
-msgstr "Ob odstranjevanju fotografij iz kataloga F-Spot bodo vsi podatki o oznakah izgubljeni. Fotografije bodo ostale na vaÅem raÄunalniku in jih lahko ponovno uvozite v F-Spot."
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2156
-msgid "_Remove from Catalog"
-msgstr "_Odstrani iz kataloga"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2230
-#, csharp-format
-msgid "Delete tag \"{0}\"?"
-msgstr "Izbris oznake \"{0}\"?"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2232
-#, csharp-format
-msgid "Delete the {0} selected tags?"
-msgstr "Izbris {0} izbrane oznake ?"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2237
-msgid "photo"
-msgid_plural "photos"
-msgstr[0] "fotografije"
-msgstr[1] "fotografija"
-msgstr[2] "fotografiji"
-msgstr[3] "fotografije"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2239
-#, csharp-format
-msgid "If you delete this tag, the association with {0} {1} will be lost."
-msgid_plural "If you delete these tags, the association with {0} {1} will be lost."
-msgstr[0] "Ob izbrisu oznak, bo povezljivost z {0} {1} izgubljena."
-msgstr[1] "Ob izbrisu oznake, bo povezljivost z {0} {1} izgubljena."
-msgstr[2] "Ob izbrisu oznak, bo povezljivost z {0} {1} izgubljena."
-msgstr[3] "Ob izbrisu oznak, bo povezljivost z {0} {1} izgubljena."
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2244
-msgid "_Delete tag"
-msgid_plural "_Delete tags"
-msgstr[0] "Iz_briÅi oznake"
-msgstr[1] "Iz_briÅi oznako"
-msgstr[2] "Iz_briÅi oznaki"
-msgstr[3] "Iz_briÅi oznake"
-
-#. A Category is not empty. Can not delete it.
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2258
-msgid "Tag is not empty"
-msgstr "Oznaka ni prazna"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2259
-#, csharp-format
-msgid "Can not delete tags that have tags within them.  Please delete tags under \"{0}\" first"
-msgstr "Ni mogoÄe izbrisati oznak, ki imajo oznake znotraj njih. Najprej izbriÅite oznake pod \"{0}\""
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2711
-msgid "Rotate selected photo left"
-msgid_plural "Rotate selected photos left"
-msgstr[0] "Vrtenje izbranih fotografij levo"
-msgstr[1] "Vrtenje izbrane fotografije levo"
-msgstr[2] "Vrtenje izbranih fotografij levo"
-msgstr[3] "Vrtenje izbranih fotografij levo"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2724
-msgid "Rotate selected photo right"
-msgid_plural "Rotate selected photos right"
-msgstr[0] "Vrtenje izbranih fotografij desno"
-msgstr[1] "Vrtenje izbrane fotografije desno"
-msgstr[2] "Vrtenje izbranih fotografij desno"
-msgstr[3] "Vrtenje izbranih fotografij desno"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2735
-#, csharp-format
-msgid "Find _Selected Tag"
-msgid_plural "Find _Selected Tags"
-msgstr[0] "IÅÄi _izbrane oznake"
-msgstr[1] "IÅÄi _izbrano oznako "
-msgstr[2] "IÅÄi _izbrani oznaki"
-msgstr[3] "IÅÄi _izbrane oznake"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2739
-#, csharp-format
-msgid "Find Selected Tag _With"
-msgid_plural "Find Selected Tags _With"
-msgstr[0] "IÅÄi izbrane oznake _z"
-msgstr[1] "IÅÄi izbrano oznako _z"
-msgstr[2] "IÅÄi izbrani oznaki _z"
-msgstr[3] "IÅÄi izbrane oznake _z"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2780
-msgid "Create New Version?"
-msgid_plural "Create New Versions?"
-msgstr[0] "Ustvari nove razliÄice?"
-msgstr[1] "Ustvari novo razliÄico?"
-msgstr[2] "Ustvari novi razliÄici?"
-msgstr[3] "Ustvari nove razliÄice?"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2782
-#, csharp-format
-msgid "Before launching {1}, should F-Spot create a new version of the selected photo to preserve the original?"
-msgid_plural "Before launching {1}, should F-Spot create new versions of the selected photos to preserve the originals?"
-msgstr[0] "Ali naj pred zagonom {1} F-spot ustvari nove razliÄice izbranih fotografij, da ohrani izvirnike?"
-msgstr[1] "Ali naj pred zagonom {1} F-spot ustvari nove razliÄice izbrane fotografije, da ohrani izvirnik?"
-msgstr[2] "Ali naj pred zagonom {1} F-spot ustvari nove razliÄice izbranih fotografij, da ohrani izvirnika?"
-msgstr[3] "Ali naj pred zagonom {1} F-spot ustvari nove razliÄice izbranih fotografij, da ohrani izvirnike?"
-
-#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2804
-msgid "XCF version"
-msgstr "RazliÄica XCF"
-
-#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Clients/MainApp/FSpot/Photo.cs:430
-msgid "Reparented"
-msgstr "Lastnik je bil spremenjen"
-
-#: ../src/Clients/MainApp/FSpot/Photo.cs:448
-#, csharp-format
-msgid "Modified"
-msgid_plural "Modified ({0})"
-msgstr[0] "Spremenjenih ({0})"
-msgstr[1] "Spremenjena ({0})"
-msgstr[2] "Spremenjeni ({0})"
-msgstr[3] "Spremenjene ({0})"
-
-#: ../src/Clients/MainApp/FSpot/Photo.cs:471
-#, csharp-format
-msgid "Modified in {1}"
-msgstr "Spremenjena v {1}"
-
-#: ../src/Clients/MainApp/FSpot/Photo.cs:471
-#, csharp-format
-msgid "Modified in {1} ({0})"
-msgstr "Spremenjena v {1} ({0})"
-
-#: ../src/Clients/MainApp/FSpot/PhotoStore.cs:202
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:17
-msgid "Original"
-msgstr "Izvorno"
-
-#: ../src/Clients/MainApp/FSpot/PhotoView.cs:353
-msgid "Description:"
-msgstr "Opis:"
-
-#: ../src/Clients/MainApp/FSpot/Preferences.cs:191
-msgid "Photos"
-msgstr "Fotografije"
-
-#: ../src/Clients/MainApp/FSpot/PrintOperation.cs:54
-msgid "Image Settings"
-msgstr "Nastavitve slik"
-
-#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:84
-msgid "Find: "
-msgstr "Najdi: "
-
-#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:89
-msgid "Untagged photos"
-msgstr "NeoznaÄene fotografije"
-
-#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:97
-msgid "Rated photos"
-msgstr "Ocenjene fotografije"
-
-#. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:106
-msgid "Import roll"
-msgstr "Uvozni zvitek"
-
-#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:129
-msgid "Clear search"
-msgstr "ÄiÅÄenje iskanja"
-
-#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:136
-msgid "Refresh search"
-msgstr "OsveÅitev iskanja"
-
-#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:139
-msgid "No matching photos found"
-msgstr "Ni mogoÄe najti skladnih fotografij"
-
-#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:99
-msgid "Unable to rotate this type of photo"
-msgstr "Ni mogoÄe vrteti te vrste fotografij"
-
-#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:115
-msgid "Unable to rotate readonly file"
-msgstr "Ni mogoÄe vrteti datoteke le za branje"
-
-#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:173
-msgid "Rotating photos"
-msgstr "Vrtenje fotografij"
-
-#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:184
-#, csharp-format
-msgid "Rotating photo \"{0}\""
-msgstr "Vrtenje fotografije \"{0}\""
-
-#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:197
-msgid "Directory not found"
-msgstr "Mape ni mogoÄe najti"
-
-#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:199
-msgid "File not found"
-msgstr "Datoteke ni mogoÄe najti"
-
-#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:217
-#, csharp-format
-msgid "Unable to rotate photo"
-msgid_plural "Unable to rotate {0} photos"
-msgstr[0] "Ni mogoÄe zavrteti {0} fotografij"
-msgstr[1] "Ni mogoÄe zavrteti {0} fotografije"
-msgstr[2] "Ni mogoÄe zavrteti {0} fotografij"
-msgstr[3] "Ni mogoÄe zavrteti {0} fotografij"
-
-#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:219
-#, csharp-format
-msgid "The photo could not be rotated because it is on a read only file system or media such as a CDROM.  Please check the permissions and try again."
-msgid_plural "{0} photos could not be rotated because they are on a read only file system or media such as a CDROM.  Please check the permissions and try again."
-msgstr[0] "{0} fotografij ni bilo mogoÄe zavrteti, ker se nahajajo na datoteÄnem sistemu le za branje ali na mediju kot je CDROM. Preverite dovoljenja in poskusite znova."
-msgstr[1] "{0} fotografije ni bilo mogoÄe zavrteti, ker se nahaja na datoteÄnem sistemu le za branje ali na mediju kot je CDROM. Preverite dovoljenja in poskusite znova."
-msgstr[2] "{0} fotografij ni bilo mogoÄe zavrteti, ker se nahajati na datoteÄnem sistemu le za branje ali na mediju kot je CDROM. Preverite dovoljenja in poskusite znova."
-msgstr[3] "{0} fotografij ni bilo mogoÄe zavrteti, ker se nahajajo na datoteÄnem sistemu le za branje ali na mediju kot je CDROM. Preverite dovoljenja in poskusite znova."
-
-#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:246
-#, csharp-format
-msgid "Received error \"{0}\" while attempting to rotate {1}"
-msgstr "Med poskusom vrtenja {1} je priÅlo do napake \"{0}\""
-
-#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:251
-msgid "Error while rotating photo."
-msgstr "Napaka med vrtenjem fotografije."
-
-#: ../src/Clients/MainApp/FSpot/SendEmail.cs:233
-msgid "Preparing email"
-msgstr "Pripravljanje elektronske poÅte"
-
-#: ../src/Clients/MainApp/FSpot/SendEmail.cs:277
-#, csharp-format
-msgid "Exporting picture \"{0}\""
-msgstr "IzvaÅanje slike \"{0}\""
-
-#: ../src/Clients/MainApp/FSpot/SendEmail.cs:296
-msgid "Error processing image"
-msgstr "Napaka med obdelavo slike"
-
-#: ../src/Clients/MainApp/FSpot/SendEmail.cs:297
-#, csharp-format
-msgid "An error occured while processing \"{0}\": {1}"
-msgstr "Med obdelavo \"{0}\" je priÅlo do napake: {1}"
-
-#. Send the mail :)
-#: ../src/Clients/MainApp/FSpot/SendEmail.cs:310
-msgid "My Photos"
-msgstr "Moje fotografije"
-
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:107
-msgid "Rotate photo left"
-msgstr "Vrtenje fotografije v levo"
-
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:112
-msgid "Rotate photo right"
-msgstr "Vrtenje fotografije v desno"
-
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:148
-msgid "Folder"
-msgstr "Mapa"
-
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:373
-msgid "Open"
-msgstr "Odpri"
-
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:376
-msgid "Select Folder"
-msgstr "Izbor mape"
-
-#: ../src/Clients/MainApp/FSpot/SingleView.cs:460
-msgid "Set as Background"
-msgstr "Nastavi kot ozadje"
-
-#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:67
-#, csharp-format
-msgid "Include Photos Tagged \"{0}\""
-msgstr "VkljuÄi fotografije oznaÄene z \"{0}\""
-
-#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:72
-#, csharp-format
-msgid "Exclude Photos Tagged \"{0}\""
-msgstr "IzkljuÄi fotografije oznaÄene z \"{0}\""
-
-#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:77
-msgid "Remove From Search"
-msgstr "Odstrani iz iskanja"
-
-#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:121
-#, csharp-format
-msgid "Find _With"
-msgid_plural "Find _With"
-msgstr[0] "IÅÄi _z"
-msgstr[1] "IÅÄi _z"
-msgstr[2] "IÅÄi _z"
-msgstr[3] "IÅÄi _z"
-
-#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:147
-msgid "All"
-msgstr "Vse"
-
-#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:306
-msgid "Drag tags here to search for them"
-msgstr "Za iskanje po oznakah jih povlecite sem"
-
-#: ../src/Clients/MainApp/FSpot/TagSelectionWidget.cs:521
-msgid "Error renaming tag"
-msgstr "Napaka med preimenovanjem oznake"
-
-#: ../src/Clients/MainApp/FSpot/TagSelectionWidget.cs:522
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagDialog.cs:99
-#: ../src/Clients/MainApp/TagCommands.cs:139
-msgid "This name is already in use"
-msgstr "Ime je Åe v uporabi"
-
-#: ../src/Clients/MainApp/FSpot/TagStore.cs:222
-msgid "Favorites"
-msgstr "Priljubljeno"
-
-#: ../src/Clients/MainApp/FSpot/TagStore.cs:227
-msgid "Hidden"
-msgstr "Skrito"
-
-#: ../src/Clients/MainApp/FSpot/TagStore.cs:235
-msgid "People"
-msgstr "Ljudje"
-
-#: ../src/Clients/MainApp/FSpot/TagStore.cs:240
-msgid "Places"
-msgstr "Mesta"
-
-#: ../src/Clients/MainApp/FSpot/TagStore.cs:245
-msgid "Events"
-msgstr "Dogodki"
-
-#. The label for the root category is used in new and edit tag dialogs
-#: ../src/Clients/MainApp/FSpot/TagStore.cs:257
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:441
-msgid "(None)"
-msgstr "(Brez)"
-
-#: ../src/Clients/MainApp/FSpot/Term.cs:336
-msgid " and "
-msgstr " in "
-
-#. Operators.Add (Catalog.GetString (" && "));
-#: ../src/Clients/MainApp/FSpot/Term.cs:338
-msgid ", "
-msgstr ","
-
-#: ../src/Clients/MainApp/FSpot/Term.cs:394
-msgid " or "
-msgstr " ali "
-
-#. OPS The operators we support, case insensitive
-#. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
-#: ../src/Clients/MainApp/FSpot/Term.cs:415
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Clients/MainApp/FSpot.Widgets/FindBar.cs:202
-#: ../src/Clients/MainApp/FSpot.Widgets/FindBar.cs:557
-msgid "or"
-msgstr "ali"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs:123
-msgid "Photo management for GNOME"
-msgstr "Upravljanje fotografij za GNOME"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs:124
-msgid "Copyright  2003-2010 Novell Inc."
-msgstr "Avtorske pravice  2003-2010 Novell Inc."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs:148
-msgid "translator-credits"
-msgstr "Andrej ÅnidarÅiÄ <andrej znidarsic gmail com>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs:153
-msgid "F-Spot Website"
-msgstr "SpletiÅÄe F-Spot"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs:137
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:10
-#, csharp-format
-msgid "Shift all photos by {0}"
-msgstr "Premik vseh fotografij za {0}"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:109
-msgid "Today"
-msgstr "Danes"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:111
-msgid "Yesterday"
-msgstr "VÄeraj"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:113
-msgid "Last 7 days"
-msgstr "Zadnjih 7 dni"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:115
-msgid "Last 30 days"
-msgstr "Zadnjih 30 dni"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:117
-msgid "Last 90 days"
-msgstr "Zadnjih 90 dni"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:119
-msgid "Last 360 days"
-msgstr "Zadnjih 360 dni"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:121
-msgid "Current Week (Mon-Sun)"
-msgstr "Trenutni Teden (Pon-Ned)"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:123
-msgid "Previous Week (Mon-Sun)"
-msgstr "Predhodni Teden (Pon-Ned)"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:139
-#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:1
-msgid "All Images"
-msgstr "Vse slike"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:141
-msgid "Customized Range"
-msgstr "Obseg po meri"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs:50
-#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:107
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Prejeta je bila izjema \"{0}\". Ni mogoÄe shraniti fotografije {1}"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs:63
-msgid "Error editing photo"
-msgstr "Napaka med urejanjem fotografije"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:64
-#, csharp-format
-msgid "Edit Icon for Tag {0}"
-msgstr "Urejanje ikone za oznako {0}"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:86
-msgid "Select Photo from file"
-msgstr "Izberi fotografijo iz datoteke"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:108
-#, csharp-format
-msgid ""
-"\n"
-"<b>From Photo</b>\n"
-" You can use one of your library photos as an icon for this tag.\n"
-" However, first you must have at least one photo associated\n"
-" with this tag. Please tag a photo as '{0}' and return here\n"
-" to use it as an icon."
-msgstr ""
-"\n"
-"<b>S Fotografije</b>\n"
-" Kot ikono za to oznako lahko uporabite eno od fotografij iz vaÅe\n"
-" knjiÅnice. Najprej morate imeti vsaj eno fotografijo oznaÄeno\n"
-" s to oznako. OznaÄite fotografijo kot '{0}' in se vrnite sem,\n"
-"da jo lahko uporabite kot ikono."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:186
-msgid "Unable to load image"
-msgstr "Ni mogoÄe naloÅiti slike."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:187
-#, csharp-format
-msgid "Unable to load \"{0}\" as icon for the tag"
-msgstr "Ni mogoÄe naloÅiti \"{0}\" kot ikono za oznako"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:225
-#, csharp-format
-msgid "Photo {0} of {1}"
-msgstr "Fotografija {0} od {1}"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:45
-msgid "Choose Folder..."
-msgstr "Izbor mape ...."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:164
-msgid "Choose Import source..."
-msgstr "Izbor vira uvoza ..."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:176
-msgid "(No Cameras Detected)"
-msgstr "(Ni zaznanih fotoaparatov)"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:211
-msgid ""
-"Checking this box will remove the imported photos from the camera after the import finished successfully.\n"
-"\n"
-"It is generally recommended to backup your photos before removing them from the camera. <b>Use this option at your own risk!</b>"
-msgstr ""
-"Izbira tega polja bo po uspeÅnemu uvozu odstranila uvoÅene fotografije s fotoaparata.\n"
-"\n"
-"PriporoÄamo da pred odstranitvijo svojih fotografij z digitalnega fotoaparata napravite varnostno kopijo. <b>To moÅnost uporabljate na lastno odgovornost!</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:212
-msgid "Warning"
-msgstr "Opozorilo"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:331
-#, csharp-format
-msgid "Importing Photos: {0} of {1}..."
-msgstr "UvaÅanje fotografij: {0} od {1} ..."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:355
-msgid "Importing photos..."
-msgstr "UvaÅanje fotografij ..."
-
-#. TODO: Using a GtkSpinner would be nicer here.
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:362
-msgid "Searching for photos... (You can already click Import to continue)"
-msgstr "Iskanje fotografij ... (za nadaljevanje lahko Åe kliknite Uvozi)"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs:65
-msgid "Import failures"
-msgstr "Napake uvoza"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs:66
-msgid "Some files failed to import"
-msgstr "Uvoz nekaterih datotek je spodletel"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs:67
-msgid "Some files could not be imported, they might be corrupt or there might be something wrong with the storage on which they reside."
-msgstr "Nekaterih datotek ni bilo mogoÄe uvoziti. Morda so pokvarjene ali pa je morda nekaj narobe z njihovo shrambo."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs:130
-msgid "Details"
-msgstr "Podrobnosti"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs:77
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs:100
-msgid "None"
-msgstr "Brez"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs:79
-msgid "System profile"
-msgstr "Sistemski profil"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs:117
-msgid "Standard theme"
-msgstr "ObiÄajna tema"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs:44
-msgid "Error loading database."
-msgstr "Napaka med nalaganjem podatkovne zbirke."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs:45
-#, csharp-format
-msgid "F-Spot encountered an error while loading the photo database. The old database has be moved to {0} and a new database has been created."
-msgstr "PriÅlo je do napake med nalaganjem podatkovne zbirke fotografij. Stara podatkovna zbirka je bila premaknjena v {0}, zato je bila ustvarjena nova."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs:81
-msgid "Label"
-msgstr "Oznaka"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs:85
-msgid "Ratio"
-msgstr "Razmerje"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs:78
-msgid "Retry"
-msgstr "Poskusi znova"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs:80
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/pickfolder_dialog.ui.h:1
-msgid "Skip"
-msgstr "PreskoÄi"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:1
-msgid "0000:00:00 00:00:00"
-msgstr "0000:00:00 00:00:00"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:2
-msgid "00:00:00"
-msgstr "00:00:00"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:3
-msgid "5"
-msgstr "5"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:4
-msgid "<b>Action</b>"
-msgstr "<b>Dejanje</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:5
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:6
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:2
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:3
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:3
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:2
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:2
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:2
-msgid "<b>Photos</b>"
-msgstr "<b>Fotografije</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:6
-msgid "<b>Reference Photo</b>"
-msgstr "<b>ReferenÄna fotografija</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:7
-msgid "Adjust Time"
-msgstr "Prilagodi Äas"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:8
-msgid "Adjusted date: "
-msgstr "Prilagojen datum:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:9
-msgid "Current date:"
-msgstr "Trenutni datum:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:11
-msgid "Space all photos by"
-msgstr "Razmakni vse fotografije za"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:12
-msgid "difference:"
-msgstr "razlika:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:13
-msgid "min. Starting at {0}"
-msgstr "najmanjÅi zaÄetek pri {0}"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui.h:1
-msgid "C_reate"
-msgstr "Ustva_ri"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui.h:2
-msgid "Create _icon for this tag when first used"
-msgstr "Ustvari _ikono za to oznako ob prvi uporabi"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui.h:3
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui.h:3
-msgid "P_arent Tag:"
-msgstr "N_adrejena oznaka:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui.h:4
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui.h:5
-msgid "_Tag Name:"
-msgstr "Ime _oznake:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:1
-msgid "<b>End Date</b>"
-msgstr "<b>KonÄni datum</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:2
-msgid "<b>Select period</b>"
-msgstr "<b>Izberi obdobje</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:3
-msgid "<b>Start Date</b>"
-msgstr "<b>ZaÄetni datum</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:4
-msgid "Cancel, do not change the current timeline. "
-msgstr "PrekliÄi, ne spremeni trenutne Äasovnice."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:5
-msgid "Only photos taken within these dates will be displayed."
-msgstr "Prikazane bodo le fotografije znotraj teh datumov."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:6
-msgid "Set date range"
-msgstr "Nastavi obseg datumov"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui.h:1
-msgid "Edit Tag"
-msgstr "Urejanje oznake"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui.h:2
-msgid "Edit icon"
-msgstr "Urejanje ikone"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui.h:4
-msgid "_Icon:"
-msgstr "_Ikona:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:1
-msgid "<b>From External Photo</b>"
-msgstr "<b>Iz zunanje fotografije</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:2
-msgid "<b>From Photo</b>"
-msgstr "<b>Iz fotografije</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:3
-msgid "<b>Predefined icons</b>"
-msgstr "<b>Pred doloÄene ikone</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:4
-msgid "<b>Preview</b>"
-msgstr "<b>Predogled</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:5
-msgid "Design icon from"
-msgstr "Oblika ikone od "
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:6
-msgid "Edit Tag Icon"
-msgstr "Urejanje ikone oznake"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:7
-msgid "No _image"
-msgstr "_Brez slike"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:1
-msgid "<b>View all pictures imported</b>"
-msgstr "<b>Ogled vseh uvoÅenih slik</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:2
-msgid "Display only those photos that were imported in specified Rolls."
-msgstr "Prikaz le tistih fotografij, ki so bile uvoÅene v navedenih zvitkih."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
-msgid "Filter on selected rolls"
-msgstr "Filter na izbranih zvitkih"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
-msgid "Number of photos in selected rolls:"
-msgstr "Åtevilo fotografij v izbranih zvitkih:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
-msgid "Show all photos."
-msgstr "PokaÅi vse fotografije."
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
-msgid "after"
-msgstr "za"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:7
-#: ../src/Clients/MainApp/FSpot.Widgets/FindBar.cs:202
-#: ../src/Clients/MainApp/FSpot.Widgets/FindBar.cs:558
-msgid "and"
-msgstr "in"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:8
-msgid "at"
-msgstr "ob"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:9
-msgid "between"
-msgstr "med"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:1
-msgid "Color profile for display:"
-msgstr "Barvni profil za zaslon:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:2
-msgid "Color profile for printing:"
-msgstr "Barvni profil za tiskanje:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:3
-msgid "F-Spot Preferences"
-msgstr "MoÅnosti F-Spot"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:4
-msgid "F-Spot appearance:"
-msgstr "Videz F-spot:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:5
-msgid ""
-"Inside the image files when possible\n"
-"<small>Makes them accessible to other image-editing programs.</small>"
-msgstr ""
-"Znotraj slikovnih datotek, Äe je mogoÄe\n"
-"<small>To naredi slike dostopne ostalim programom za urejanje slik.</small>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:7
-msgid ""
-"Never modify image files.\n"
-"<small>Write XMP files next to the images instead.</small>"
-msgstr ""
-"Nikoli ne spreminjaj slikovnih datotek.\n"
-"<small>Namesto tega zapiÅi datoteke XMP poleg slik.</small>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:9
-msgid "Select A Folder"
-msgstr "Izbira mape"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:10
-msgid "Separately from the image files"
-msgstr "LoÄeno od slikovnih datotek"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:11
-msgid "Store tags and descriptions for photos:"
-msgstr "Shranjevanje oznak in opisov fotografij:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:12
-msgid "When importing photos, copy them to:"
-msgstr "Pri uvaÅanju fotografij jih kopiraj v:"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/RatingFilterDialog.ui.h:1
-msgid "<b>Max Rating</b>"
-msgstr "<b>NajviÅja Ocena</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/RatingFilterDialog.ui.h:2
-msgid "<b>Min Rating</b>"
-msgstr "<b>NajniÅja Ocena</b>"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/RatingFilterDialog.ui.h:3
-msgid "Set Rating Filter"
-msgstr "Nastavitev filtrov ocen"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/RepairDialog.ui.h:1
-msgid "Repair"
-msgstr "Popravi"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/SelectionRatioDialog.ui.h:1
-msgid "Manage your custom selection ratios"
-msgstr "Upravljanje razmerij za izbiranje po meri"
-
-#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/SelectionRatioDialog.ui.h:2
-msgid "Selection Constraints"
-msgstr "Izbira omejitev"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/EditorPage.cs:55
-#: ../src/Clients/MainApp/FSpot.Widgets/Sidebar.cs:73
-msgid "Edit"
-msgstr "Urejanje"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/EditorPage.cs:223
-#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs:66
-msgid "No selection available"
-msgstr "Na voljo ni nobene izbire"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/EditorPage.cs:224
-msgid "This tool requires an active selection. Please select a region of the photo and try the operation again"
-msgstr "Orodje zahteva dejavno izbiro. Izberite obmoÄje na fotografiji in poskusite znova"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/EditorPage.cs:242
-msgid "Error saving adjusted photo"
-msgid_plural "Error saving adjusted photos"
-msgstr[0] "Napaka med shranjevanjem prilagojenih fotografij"
-msgstr[1] "Napaka med shranjevanjem prilagojene fotografije"
-msgstr[2] "Napaka med shranjevanjem prilagojenih fotografij"
-msgstr[3] "Napaka med shranjevanjem prilagojenih fotografij"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/EditorPage.cs:244
-#, csharp-format
-msgid "Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."
-msgstr "Prejeta je bila izjema \"{0}\". Datoteke RAW je treba pred urejanjem razviti v JPEG."
-
-#: ../src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs:497
-msgid "_Horizontal"
-msgstr "_Vodoravno"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs:501
-msgid "_Vertical"
-msgstr "_NavpiÄno"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/FindBar.cs:83
-msgid "Find:"
-msgstr "Najdi:"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/FolderTreePage.cs:44
-msgid "Folders"
-msgstr "Mape"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/FolderTreeView.cs:159
-msgid "Filesystem"
-msgstr "DatoteÄni sistem"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:125
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:401
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:451
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:457
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:461
-msgid "(Unknown)"
-msgstr "(neznano)"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:305
-msgid "Histogram"
-msgstr "Histogram"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:324
-msgid "Image Information"
-msgstr "Podrobnosti o sliki"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:332
-#, csharp-format
-msgid "{0} Photos"
-msgstr "{0} fotografij"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:334
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:10
-msgid "Name"
-msgstr "Ime"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:346
-msgid "Version"
-msgstr "RazliÄica"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:361
-#: ../src/Clients/MainApp/PhotoVersionMenu.cs:86
-msgid "(No Edits)"
-msgstr "(Ni urejanj)"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:365
-#, csharp-format
-msgid "(One Edit)"
-msgid_plural "({0} Edits)"
-msgstr[0] "({0} urejanj)"
-msgstr[1] "({0} urejanje)"
-msgstr[2] "({0} urejanji)"
-msgstr[3] "({0} urejanja)"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:371
-msgid "Date"
-msgstr "Datum"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:371
-msgid "Show Date"
-msgstr "PokaÅi datum"
-
-#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:382
-#, csharp-format
-msgid ""
-"On {0} between \n"
-"{1} and {2}"
-msgstr ""
-"Na {0} med \n"
-"{1} in {2}"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:387
-#, csharp-format
-msgid ""
-"Between {0} \n"
-"and {1}"
-msgstr ""
-"Med {0} \n"
-"in {1}"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:393
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:4
-msgid "Size"
-msgstr "Velikost"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:393
-msgid "Show Size"
-msgstr "PokaÅi velikost"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:404
-msgid "Exposure"
-msgstr "Osvetljenost"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:404
-msgid "Show Exposure"
-msgstr "PokaÅi osvetlitev"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:434
-msgid "flash fired"
-msgstr "bliskavica se je sproÅila"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:436
-msgid "flash didn't fire"
-msgstr "bliskavica se ni sproÅila"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:446
-msgid "Focal Length"
-msgstr "GoriÅÄna razdalja"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:446
-msgid "Show Focal Length"
-msgstr "PokaÅi goriÅÄno razdaljo"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:456
-msgid "Camera"
-msgstr "Fotoaparat"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:456
-msgid "Show Camera"
-msgstr "PokaÅi fotoaparat"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:460
-msgid "Creator"
-msgstr "Ustvarjalec"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:460
-msgid "Show Creator"
-msgstr "PokaÅi ustvarjalca"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:464
-msgid "File Size"
-msgstr "Velikost datoteke"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:464
-msgid "Show File Size"
-msgstr "PokaÅi velikost datotek"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:472
-msgid "(File read error)"
-msgstr "(Napaka med branjem datoteke)"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:480
-msgid "Rating"
-msgstr "Ocena"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:480
-msgid "Show Rating"
-msgstr "PokaÅi oceno"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:484
-msgid "Show Tags"
-msgstr "PrikaÅi oznake"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs:46
-msgid "Metadata"
-msgstr "Metapodatki"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs:127
-msgid "Extended Metadata"
-msgstr "RazÅirjeni metapodatki"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs:380
-msgid "No active photo"
-msgstr "Ni dejavnih fotografij"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs:382
-#, csharp-format
-msgid "The photo \"{0}\" does not exist"
-msgstr "Fotografija \"{0}\" ne obstaja"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs:384
-msgid "No metadata available"
-msgstr "Metapodatki niso na voljo"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:106
-msgid "Error saving sharpened photo"
-msgstr "Napaka med shranjevanjem izostrene datoteke"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:152
-msgid "Sharpen"
-msgstr "Izostritev"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:162
-msgid "Amount:"
-msgstr "KoliÄina:"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:163
-msgid "Radius:"
-msgstr "Polmer:"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:164
-msgid "Threshold:"
-msgstr "Prag:"
-
-#: ../src/Clients/MainApp/FSpot.Widgets/TagMenu.cs:132
-#: ../src/Clients/MainApp/TagPopup.cs:61
-msgid "Create New Tag..."
-msgstr "Ustvari novo oznako ..."
-
-#. Fixme this should really set parent menu
-#. items insensitve
-#: ../src/Clients/MainApp/PhotoTagMenu.cs:68
-msgid "(No Tags)"
-msgstr "(Ni oznak)"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:91
-msgid "Create New Version"
-msgstr "Ustvari novo razliÄico"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:92
-msgid "Name:"
-msgstr "Ime:"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:96
-msgid "Rename Version"
-msgstr "Preimenuj razliÄico"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:97
-msgid "New name:"
-msgstr "Novo ime:"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:157
-msgid "Delete"
-msgstr "IzbriÅi"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:158
-#, csharp-format
-msgid "Really delete version \"{0}\"?"
-msgstr "Ali zares Åelite izbrisati razliÄico \"{0}\"?"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:159
-msgid "This removes the version and deletes the corresponding file from disk."
-msgstr "To odstrani razliÄico in izbriÅe ustrezno datoteko z diska."
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:204
-msgid "De_tach"
-msgstr "O_dpni"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:205
-#, csharp-format
-msgid "Really detach version \"{0}\" from \"{1}\"?"
-msgstr "ResniÄno odpni razliÄico \"{0}\" od \"{1}\"?"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:206
-msgid "This makes the version appear as a separate photo in the library. To undo, drag the new photo back to its parent."
-msgstr "RazliÄice fotografije se v knjiÅnici pojavijo kot razliÄne fotografije. Za razveljavitve povlecite novo fotografijo nazaj k starÅevski fotografiji. "
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:228
-msgid "Re_parent"
-msgstr "Pri_pni"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:229
-#, csharp-format
-msgid "Really reparent \"{0}\" as version of \"{1}\"?"
-msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
-msgstr[0] "Ali zares Åelite znova pripeti {2} fotografij kot razliÄice \"{1}\"?"
-msgstr[1] "Ali zares Åelite znova pripeti {2} fotografijo kot razliÄico \"{1}\"?"
-msgstr[2] "Ali zares Åelite znova pripeti {2} fotografiji kot razliÄici \"{1}\"?"
-msgstr[3] "Ali zares Åelite znova pripeti {2} fotografije kot razliÄice \"{1}\"?"
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:232
-msgid "This makes the photos appear as a single one in the library. The versions can be detached using the Photo menu."
-msgstr "Fotografije se v knjiÅnici pojavijo kot ena fotografija. RazliÄice je mogoÄe odpeti v meniju Fotografija."
-
-#: ../src/Clients/MainApp/PhotoVersionCommands.cs:272
-#, csharp-format
-msgid "Received exception \"{0}\"."
-msgstr "Prejeta je bila izjema \"{0}\"."
-
-#: ../src/Clients/MainApp/TagCommands.cs:189
-msgid "Create New Tag"
-msgstr "Ustvari novo oznako"
-
-#: ../src/Clients/MainApp/TagCommands.cs:190
-msgid "Name of New Tag:"
-msgstr "Ime nove oznake:"
-
-#: ../src/Clients/MainApp/TagPopup.cs:51
-#, csharp-format
-msgid "Find"
-msgid_plural "Find"
-msgstr[0] "Iskanje"
-msgstr[1] "Iskanje"
-msgstr[2] "Iskanje"
-msgstr[3] "Iskanje"
-
-#: ../src/Clients/MainApp/TagPopup.cs:67
-msgid "Edit Tag..."
-msgstr "Urejanje oznake ..."
-
-#: ../src/Clients/MainApp/TagPopup.cs:72
-msgid "Delete Tag"
-msgid_plural "Delete Tags"
-msgstr[0] "IzbriÅi oznake"
-msgstr[1] "IzbriÅi oznako"
-msgstr[2] "IzbriÅi oznaki"
-msgstr[3] "IzbriÅi oznake"
-
-#: ../src/Clients/MainApp/TagPopup.cs:78
-msgid "Attach Tag to Selection"
-msgid_plural "Attach Tags to Selection"
-msgstr[0] "Dodajanje oznak izboru"
-msgstr[1] "Dodajanje oznake izboru"
-msgstr[2] "Dodajanje oznak izboru"
-msgstr[3] "Dodajanje oznak izboru"
-
-#: ../src/Clients/MainApp/TagPopup.cs:82
-msgid "Remove Tag From Selection"
-msgid_plural "Remove Tags From Selection"
-msgstr[0] "Odstranitev oznak iz izbora"
-msgstr[1] "Odstranitev oznake iz izbora"
-msgstr[2] "Odstranitev oznak iz izbora"
-msgstr[3] "Odstranitev oznak iz izbora"
-
-#: ../src/Clients/MainApp/TagPopup.cs:88
-msgid "Merge Tags"
-msgstr "ZdruÅi oznake"
-
-#: ../src/Clients/MainApp/ThumbnailCommand.cs:54
-msgid "Updating Thumbnails"
-msgstr "Posodabljanje sliÄic"
-
-#: ../src/Clients/MainApp/ThumbnailCommand.cs:62
-#, csharp-format
-msgid "Updating picture \"{0}\""
-msgstr "Posodabljanje slike \"{0}\""
-
-#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:1
-msgid "<b>Co_rrections</b>"
-msgstr "<b>Pop_ravki</b>"
-
-#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:2
-msgid "<b>_White Balance</b>"
-msgstr "<b>_RavnoteÅje bele barve</b>"
-
-#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:3
-msgid "C_ontrast:"
-msgstr "K_ontrast:"
-
-#. Note for translators: meant as Temperature
-#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:5
-msgid "Te_mp:"
-msgstr "ZaÄ_asno:"
-
-#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:6
-msgid "_Brightness:"
-msgstr "Svet_lost:"
-
-#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:7
-msgid "_Exposure:"
-msgstr "Izpos_tavljenost:"
-
-#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:8
-msgid "_Hue:"
-msgstr "_Odtenek:"
-
-#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:9
-msgid "_Saturation:"
-msgstr "N_asiÄenost:"
-
-#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:10
-msgid "_Tint:"
-msgstr "_Ärnilo:"
-
-#: ../src/Clients/MainApp/ui/import.ui.h:1
-msgid "C_opy files to the Photos folder"
-msgstr "_Kopiranj datoteke v mapo fotografij"
-
-#: ../src/Clients/MainApp/ui/import.ui.h:2
-msgid "I_nclude subfolders"
-msgstr "_VkljuÄi podmape"
-
-#. Translators: this string means 'source of import'
-#: ../src/Clients/MainApp/ui/import.ui.h:5
-msgid "Import _from:"
-msgstr "Uvozi _iz:"
-
-#: ../src/Clients/MainApp/ui/import.ui.h:6
-msgid "_Attach tags:"
-msgstr "_Pripni oznake:"
-
-#: ../src/Clients/MainApp/ui/import.ui.h:7
-msgid "_Detect duplicates"
-msgstr "_Zaznaj dvojnike"
-
-#: ../src/Clients/MainApp/ui/import.ui.h:8
-msgid "_Import"
-msgstr "_Uvozi"
-
-#: ../src/Clients/MainApp/ui/import.ui.h:9
-msgid "_Remove original files after import"
-msgstr "_Odstrani izvorne datoteke po uvozu"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:1
-msgid "1024 px"
-msgstr "1024 px"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:2
-msgid "320 px"
-msgstr "320 px"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:3
-msgid "480 px"
-msgstr "480 px"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:4
-msgid "640 px"
-msgstr "640 px"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:5
-msgid "800 px"
-msgstr "800 px"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:7
-msgid "<b>Size</b>"
-msgstr "<b>Velikost</b>"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:8
-msgid "<b>Summary</b>"
-msgstr "<b>Povzetek</b>"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:9
-msgid "Create Mail"
-msgstr "Ustvari poÅto"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:10
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr "Ustvari poÅto s pripetimi fotografijami (po moÅnosti spremenjenih velikosti)"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:11
-msgid "Do not send a mail"
-msgstr "Ne poÅlji poÅte"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:12
-msgid "Estimated new size"
-msgstr "Ocenjena nova velikost"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:13
-msgid "Extra large"
-msgstr "Zelo velika"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:14
-msgid "Large"
-msgstr "Velika"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:15
-msgid "Medium"
-msgstr "Srednja"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:16
-msgid "Number of pictures"
-msgstr "Åtevilo slik"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:18
-msgid "Original size (possible very large file size)"
-msgstr "Izvorna velikost (morda zelo velika velikost datotek)"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:19
-msgid "Small"
-msgstr "Majhna"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:20
-msgid "Tiny"
-msgstr "Drobcena"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:21
-msgid "Total original size"
-msgstr "Skupna izvorna velikost"
-
-#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:22
-msgid "_Create Mail"
-msgstr "_Ustvari poÅto"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:1
-msgid "Adjust _Time..."
-msgstr "Prilagodi _Äas ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:2
-msgid "Arrange _by"
-msgstr "Uredi _po"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:4
-msgid "By _Date"
-msgstr "Po _datumu"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:5
-msgid "By _Import Roll"
-msgstr "Po _uvoznem zvitku"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:6
-msgid "By _Rating"
-msgstr "Po _oceni"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:7
-msgid "Copy"
-msgstr "Kopiraj"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:8
-msgid "Create New _Tag..."
-msgstr "Ustvari novo _oznako ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:9
-msgid "Create _New Version..."
-msgstr "Ustvari _novo razliÄico ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:10
-msgid "De_tach Version"
-msgstr "O_dpni razliÄico"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:11
-msgid "Fin_d"
-msgstr "Naj_di"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:12
-msgid "Manage _Extensions"
-msgstr "Upravljanje _razÅiritev"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:13
-msgid "Page Set_up..."
-msgstr "Nas_tavitve strani ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:14
-msgid "Re_fresh Thumbnail"
-msgstr "O_sveÅi sliÄico"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:18
-msgid "Select _All"
-msgstr "Izberi _vse"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:19
-msgid "Select _None"
-msgstr "Ne izberi _niÄesar"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:20
-msgid "Send by _Mail..."
-msgstr "PoÅlji po _poÅti ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:21
-#: ../src/Clients/MainApp/ui/single_view.ui.h:3
-msgid "Set as _Background"
-msgstr "Nastavi kot _ozadje"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:22
-msgid "Side_bar"
-msgstr "Stranska v_rstica"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:23
-msgid "T_ags"
-msgstr "Ozn_ake"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:24
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1118
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1119
-msgid "Tags: "
-msgstr "Oznake:"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:25
-msgid "Thumbnail _elements"
-msgstr "_Elementi sliÄic"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:26
-msgid "Too_lbar"
-msgstr "O_rodna vrstica"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:27
-msgid "View"
-msgstr "Pogled"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:28
-#: ../src/Clients/MainApp/ui/single_view.ui.h:7
-msgid "Zoom _in"
-msgstr "_PribliÅaj"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:29
-#: ../src/Clients/MainApp/ui/single_view.ui.h:8
-msgid "Zoom _out"
-msgstr "_Oddalji"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:30
-#: ../src/Clients/MainApp/ui/single_view.ui.h:9
-msgid "Zoom in"
-msgstr "PribliÅaj"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:31
-#: ../src/Clients/MainApp/ui/single_view.ui.h:10
-msgid "Zoom out"
-msgstr "Oddalji"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Pripni oznake"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:33
-msgid "_Attach Tag to Selection"
-msgstr "_Pripni oznako izboru"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:35
-msgid "_Clear Rating Filter"
-msgstr "_PoÄisti filter ocen"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:36
-msgid "_Clear Roll Filter"
-msgstr "_PoÄisti filter zvitkov"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:37
-msgid "_Close"
-msgstr "_Zapri"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:38
-msgid "_Components"
-msgstr "_Sestavni deli"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:39
-msgid "_Contents"
-msgstr "_Vsebina"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:40
-msgid "_Dates"
-msgstr "_Datumi"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:42
-msgid "_Delete Selected Tag"
-msgstr "_IzbriÅi izbrano oznako"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:43
-msgid "_Delete Version"
-msgstr "_IzbriÅi razliÄico"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:44
-#: ../src/Clients/MainApp/ui/single_view.ui.h:11
-msgid "_Edit"
-msgstr "_Uredi"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:45
-msgid "_Edit Tag..."
-msgstr "_Uredi oznako ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:46
-msgid "_Export to"
-msgstr "_Izvozi v"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:47
-msgid "_Filmstrip"
-msgstr "_Filmski trak"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:48
-#: ../src/Clients/MainApp/ui/single_view.ui.h:13
-msgid "_Fullscreen"
-msgstr "_Celozaslonski naÄin"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:49
-#: ../src/Clients/MainApp/ui/single_view.ui.h:14
-msgid "_Help"
-msgstr "Pomo_Ä"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:50
-msgid "_Hidden"
-msgstr "_Skrito"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:51
-msgid "_Import..."
-msgstr "_Uvozi ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:52
-msgid "_Invert Selection"
-msgstr "Obrni _izbor"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:53
-msgid "_Large"
-msgstr "_Velike"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:54
-msgid "_Last Import Roll"
-msgstr "_Zadnji uvozni zvitek"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:55
-msgid "_Loupe"
-msgstr "_LeÄa"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:56
-msgid "_Medium"
-msgstr "_Srednje"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:57
-#: ../src/Clients/MainApp/ui/single_view.ui.h:15
-msgid "_Photo"
-msgstr "_Fotografija"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:58
-msgid "_Quit"
-msgstr "_KonÄaj"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:59
-msgid "_Ratings"
-msgstr "_Ocene"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:61
-msgid "_Remove Tag From Selection"
-msgstr "_Odstrani oznako iz izbora"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:62
-msgid "_Rename Version"
-msgstr "_Preimenuj razliÄico"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:63
-msgid "_Reverse Order"
-msgstr "_Obrnjen vrstni red"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:64
-msgid "_Select Import Rolls..."
-msgstr "Izberi _uvozne zvitke ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:65
-msgid "_Set Date Range..."
-msgstr "Nastavi _obsega datumov ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:66
-msgid "_Set Rating filter..."
-msgstr "_Nastavi filter ocen ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:67
-msgid "_Sharpen..."
-msgstr "_Izostri ..."
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:68
-#: ../src/Clients/MainApp/ui/single_view.ui.h:16
-msgid "_Slideshow"
-msgstr "_Diapredstavitev"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:69
-msgid "_Small"
-msgstr "_Majhne"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:70
-msgid "_Tag Icons"
-msgstr "_Ikone oznak"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:71
-msgid "_Tags"
-msgstr "O_znake"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:72
-msgid "_Timeline"
-msgstr "_Äasovnica"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:73
-msgid "_Tools"
-msgstr "_Orodja"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:74
-msgid "_Untagged Photos"
-msgstr "_NeoznaÄene fotografije"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:75
-msgid "_Version"
-msgstr "_RazliÄica"
-
-#: ../src/Clients/MainApp/ui/main_window.ui.h:76
-#: ../src/Clients/MainApp/ui/single_view.ui.h:18
-msgid "_View"
-msgstr "_Pogled"
-
-#: ../src/Clients/MainApp/ui/single_view.ui.h:1
-msgid "Display File _Names"
-msgstr "Prikaz imen _datotek"
-
-#: ../src/Clients/MainApp/ui/single_view.ui.h:2
-msgid "F-Spot View"
-msgstr "F-Spot pogled"
-
-#: ../src/Clients/MainApp/ui/single_view.ui.h:4
-msgid "Show or hide the side pane"
-msgstr "PokaÅe ali skrije stranski pladenj"
-
-#: ../src/Clients/MainApp/ui/single_view.ui.h:5
-msgid "Show or hide the toolbar"
-msgstr "PokaÅe ali skrije orodno vrstico"
-
-#: ../src/Clients/MainApp/ui/single_view.ui.h:6
-msgid "Side _pane"
-msgstr "_Stranski pladenj"
-
-#: ../src/Clients/MainApp/ui/single_view.ui.h:12
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:7
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:14
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:13
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:8
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:7
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:8
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:9
-msgid "_Export"
-msgstr "_Izvozi"
-
-#: ../src/Clients/MainApp/ui/single_view.ui.h:17
-msgid "_Toolbar"
-msgstr "_Orodna vrstica"
-
-#: ../src/Clients/MainApp/ui/tag_selection_dialog.ui.h:1
-msgid "Select a Tag..."
-msgstr "Izbor oznake ..."
-
-#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:1
-msgid "<b>Image Interpolation</b>"
-msgstr "<b>Interpolacija slike</b>"
-
-#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:2
-msgid "<b>Transparent Parts</b>"
-msgstr "<b>Prozorni deli</b>"
-
-#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:3
-msgid "<small><i>Enable this to allow interpolation on zoomed images. You shouldn't disable this for viewing photos, but disabling the interpolation could be usefull in icon design.</i></small>"
-msgstr "<small><i>MoÅnost omogoÄa interpolacijo pribliÅanih slik. Ta moÅnost za ogled fotografij ni priporoÄena, toda njeno onemogoÄanje bi lahko bilo uporabno pri oblikovanju ikon.</i></small>"
-
-#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:4
-msgid "<small><i>You can choose how to display transparent parts in images. This option has no effect on photos, but setting this as check pattern or custom color could be usefull when viewing icons or other artworks with transparent parts.</i></small>"
-msgstr "<small><i>MogoÄe je izbrati naÄin prikaza prozornih delov slik. Ta moÅnost ne vpliva na fotografije, vendar je lahko koristna pri ogledu ikon in ostalih grafiÄnih podob s prozornimi deli.</i></small>"
-
-#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:5
-msgid "As _background"
-msgstr "Kot _ozadje"
-
-#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:6
-msgid "As _custom color: "
-msgstr "Kot barvo _po meri"
-
-#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:7
-msgid "As check _pattern"
-msgstr "Kot _vzorec Åahovnice"
-
-#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:8
-msgid "Preferences"
-msgstr "MoÅnosti"
-
-#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:9
-msgid "_Interpolate image on zoom"
-msgstr "_Interpolacija slike pri pribliÅanju"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:141
-msgid "Page Setup"
-msgstr "Nastavitve strani"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:145
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:149
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:155
-#, csharp-format
-msgid "Paper Size: {0} x {1} mm"
-msgstr "Velikost papirja: {0} x {1} mm"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:152
-msgid "Set Page Size and Orientation"
-msgstr "Nastavi velikost in usmerjenost strani"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:163
-msgid "Photos per page"
-msgstr "Fotografije na stran"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:173
-msgid "Repeat"
-msgstr "Ponavljanje"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:174
-msgid "Print cut marks"
-msgstr "Natisni oznake za izrez"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:180
-msgid "Photos layout"
-msgstr "Razporeditev fotografij"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:182
-msgid "Full Page (no margin)"
-msgstr "Polna stran (brez robov)"
-
-#. Note for translators: "Zoom" is a Fit Mode
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:185
-msgid "Zoom"
-msgstr "PribliÅevanje"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:186
-msgid "Fill"
-msgstr "Zapolni"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:187
-msgid "Scaled"
-msgstr "Prilagojena velikost"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:192
-msgid "White borders"
-msgstr "Bele obrobe"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:198
-msgid "Custom Text"
-msgstr "Besedilo po meri"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:202
-msgid "Photos infos"
-msgstr "Podrobnosti o fotografijah"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:204
-msgid "Print file name"
-msgstr "Natisni ime datoteke"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:205
-msgid "Print photo date"
-msgstr "Natisni datum posnetka fotografije"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:206
-msgid "Print photo time"
-msgstr "Natisni Äas posnetka fotografije"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:207
-msgid "Print photo tags"
-msgstr "Natisni oznake fotografij"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:208
-msgid "Print photo comment"
-msgstr "Natisni opombe fotografij"
-
-#: ../src/Core/FSpot.Gui/FSpot.Widgets/OpenWithMenu.cs:88
-msgid "No applications available"
-msgstr "Ni razpoloÅljivih programov"
-
-#: ../src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs:38
-msgid "Blackout"
-msgstr "PoÄrni"
-
-#: ../src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs:46
-msgid "Select the area that you want blacked out."
-msgstr "Izberite podroÄje, ki ga Åelite poÄrniti."
-
-#: ../src/Extensions/Editors/FSpot.Editors.BW/FSpot.Addins.Editors/BWEditor.cs:41
-msgid "Convert to B/W"
-msgstr "Pretvori v Ärno-blo"
-
-#: ../src/Extensions/Editors/FSpot.Editors.BW/FSpot.Addins.Editors/BWEditor.cs:44
-msgid "Apply"
-msgstr "Uveljavi"
-
-#: ../src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Addins.Editors/FlipEditor.cs:37
-msgid "Flip"
-msgstr "Zrcaljenje"
-
-#: ../src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs:40
-msgid "Pixelate"
-msgstr "Pretvori v toÄke"
-
-#: ../src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs:48
-msgid "Select the area that you want pixelated."
-msgstr "Izberite podroÄje, ki ga Åelite pretvoriti v toÄke."
-
-#: ../src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Addins.Editors/ResizeEditor.cs:42
-msgid "Resize"
-msgstr "Spremeni velikost"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:79
-msgid "Transferring Pictures"
-msgstr "PrenaÅanje slik"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:132
-#, csharp-format
-msgid "Transferring picture \"{0}\" To CD"
-msgstr "PrenaÅanje slike \"{0}\" na CD"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:147
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:392
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:421
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:237
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:288
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:255
-msgid "Done Sending Photos"
-msgstr "PoÅiljanje fotografij je konÄano"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:149
-msgid "Transfer Complete"
-msgstr "Prenos je konÄan"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:156
-msgid "Error While Transferring"
-msgstr "Napaka med prenosom"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:164
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:299
-msgid "Error Transferring"
-msgstr "Napaka prenosa"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:174
-msgid "copying..."
-msgstr "kopiranje ..."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:1
-msgid "<b><i>There are some previously scheduled items to write</i></b>"
-msgstr "<b><i>Obstaja nekaj predhodno razporejenih predmetov za zapis</i></b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:2
-msgid "<b>Photos to Burn</b>"
-msgstr "<b>Fotografije za zapis</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:3
-msgid "Create CD"
-msgstr "Ustvari CD"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:5
-msgid "Size of the exported selection:"
-msgstr "Velikost izvoÅenega izbora:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:6
-msgid "_Browse Previously Scheduled Files"
-msgstr "_Brskaj po predhodno razporejenih datotekah"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:8
-msgid "_Write only these photos to CD"
-msgstr "_ZapiÅi le te fotografije na CD"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:111
-msgid "Waiting for authorization"
-msgstr "Äakanje na overitev"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:112
-msgid ""
-"F-Spot will now launch your browser so that you can enable the permission you just selected.\n"
-"\n"
-"Once you are directed by Facebook to return to this application, click \"Ok\" below."
-msgstr ""
-"F-Spot bo sedaj zagnal vaÅ brskalnik, zato da lahko omogoÄite dovoljenja, ki ste jih izbrali.\n"
-"\n"
-"Ko bo Facebook zahteval vrnitev k programu, spodaj kliknite \"V redu\"."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:296
-msgid "Too many images to export"
-msgstr "DoloÄenih je preveÄ slik za izvoz"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:297
-#, csharp-format
-msgid "Facebook only permits {0} photographs per album.  Please refine your selection and try again."
-msgstr "Facebook omogoÄa le {0} fotografij na album. Treba je izpopolniti izbiro in poskusiti ponovno. "
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:312
-msgid "Album must have a name"
-msgstr "Album mora imeti ime"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:313
-msgid "Please name your album or choose an existing album."
-msgstr "Poimenujte album ali izberite obstojeÄi album."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:327
-msgid "Creating a new album failed"
-msgstr "Ustvarjanje novega albuma je spodletelo"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:328
-#, csharp-format
-msgid ""
-"An error occurred creating a new album.\n"
-"\n"
-"{0}"
-msgstr ""
-"Med ustvarjanjem novega albuma je priÅlo do napake.\n"
-"\n"
-"{0}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:341
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:516
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:168
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:184
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:174
-msgid "Uploading Pictures"
-msgstr "PoÅiljanje slik"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:369
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:243
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:213
-#, csharp-format
-msgid "Uploading picture \"{0}\" ({1} of {2})"
-msgstr "PoÅiljanje slike \"{0}\" ({1} od {2})"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:383
-#, csharp-format
-msgid "Error Uploading To Facebook: {0}"
-msgstr "Napaka med poÅiljanjem na Facebook: {0}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:384
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:412
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:248
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:229
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:277
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:244
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs:321
-msgid "Error"
-msgstr "Napaka"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:394
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:423
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:239
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:290
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:257
-msgid "Upload Complete"
-msgstr "PoÅiljanje je konÄano"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:397
-msgid "Visit F-Spot group on Facebook"
-msgstr "ObiÅÄi skupino F-Spot na Facebook"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:231
-msgid "Waiting for authentication"
-msgstr "Äakanje na overitev"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:232
-msgid ""
-"F-Spot will now launch your browser so that you can log into Facebook.\n"
-"\n"
-"Once you are directed by Facebook to return to this application, click \"Ok\" below.  F-Spot will cache your session in gnome-keyring, if possible, and re-use it on future Facebook exports."
-msgstr ""
-"Program F-Spot bo zagnal brskalnik za prijavo v Facebook.\n"
-"\n"
-"Ko vas Facebook usmeri v vrnitev v ta program, kliknite \"V redu\" spodaj. F-Spot bo, Äe bo mogoÄe, vaÅo sejo shranil v gnome-keyring in jo uporabil pri prihodnjih izvozih v Facebook."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:237
-msgid "Authenticating..."
-msgstr "Overjanje ..."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:247
-msgid "Error logging into Facebook"
-msgstr "Napaka med prijavljanjem v Facebook"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:248
-msgid "There was a problem logging into Facebook.  Check your credentials and try again."
-msgstr "PriÅlo je do teÅav med prijavljanjem v Facebook. Preverite svoje geslo in poskusite znova. "
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:257
-msgid "Authorizing Session"
-msgstr "PooblaÅÄanje seje"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:266
-msgid "Session established, fetching user info..."
-msgstr "Seja je zagnana, pridobivanje podrobnosti o uporabniku ..."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:272
-msgid "Session established, fetching friend list..."
-msgstr "Seja je zagnana, pridobivanje seznama prijateljev ..."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:282
-msgid "Session established, fetching friend details..."
-msgstr "Seja je zagnana, pridobivanje podrobnosti o prijateljih ..."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:294
-msgid "Session established, fetching photo albums..."
-msgstr "Seja je zagnana, pridobivanje albumov fotografij ..."
-
-#. Note for translators: {0} and {1} are respectively firstname and surname of the user
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:304
-#, csharp-format
-msgid "{0} {1} is logged into Facebook"
-msgstr "{0} {1} je prijavljen v Facebook"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:313
-msgid "Facebook Connection Error"
-msgstr "Napaka povezovanja s Facebook-om"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:314
-#, csharp-format
-msgid ""
-"There was an error when downloading your information from Facebook.\n"
-"\n"
-"Facebook said: {0}"
-msgstr ""
-"PriÅlo je do napake med nalaganjem vaÅih podrobnosti s Facebook-a.\n"
-"\n"
-"Javljena napaka: {0}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:343
-msgid "You are not logged in."
-msgstr "Niste prijavljeni."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:1
-msgid "Auto-confirm Photos"
-msgstr "Samodejno potrjevanje fotografij"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:2
-msgid "Caption"
-msgstr "Naslov"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:3
-msgid "Create a new album"
-msgstr "Ustvari nov album"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:4
-msgid "Description"
-msgstr "Opis"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:5
-msgid "Export to Facebook"
-msgstr "Izvozi v Facebook"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:6
-msgid "In this photo"
-msgstr "Na tej fotografiji"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:7
-msgid "Location"
-msgstr "Mesto"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:8
-msgid "Login"
-msgstr "Prijava"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:9
-msgid "Logout"
-msgstr "Odjava"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:11
-msgid "Not logged in"
-msgstr "Ni prijavljen"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:12
-msgid "Permissions:"
-msgstr "Dovoljenja:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:13
-msgid "Stay Connected"
-msgstr "Ostani povezan"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:14
-msgid "Use an existing album"
-msgstr "Uporabi obstojeÄi album"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:15
-msgid "Who is this?"
-msgstr "Kdo je to?"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:139
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:5
-msgid "Authorize"
-msgstr "Pooblasti"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:145
-#, csharp-format
-msgid "Return to this window after you have finished the authorization process on {0} and click the \"Complete Authorization\" button below"
-msgstr "Po konÄanem postopku pooblastitve na {0} se vrnite v to okno in kliknite gumb \"KonÄanj pooblastitev\" spodaj"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:146
-msgid "Complete Authorization"
-msgstr "KonÄaj pooblastitev"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:151
-#, csharp-format
-msgid "Logging into {0}"
-msgstr "Prijavljanje v {0}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:152
-msgid "Checking credentials..."
-msgstr "Preverjanje gesla ..."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:159
-#, csharp-format
-msgid "Welcome {0} you are connected to {1}"
-msgstr "DobrodoÅli {0}, povezani ste na {1}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:162
-#, csharp-format
-msgid "Sign in as a different user"
-msgstr "Prijava kot drug uporabnik"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:167
-#, csharp-format
-msgid "Used {0} of your allowed {1} monthly quota"
-msgstr "Uporabljene je {0} od dovoljene meseÄne kvote {1}."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:270
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:339
-msgid "Unable to log on"
-msgstr "Ni se mogoÄe prijaviti"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:359
-#, csharp-format
-msgid "Waiting for response {0} of {1}"
-msgstr "Äakanje na odziv {0} od {1}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:386
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:210
-#, csharp-format
-msgid "Uploading picture \"{0}\""
-msgstr "PoÅiljanje slike \"{0}\""
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:409
-#, csharp-format
-msgid "Error Uploading To {0}: {1}"
-msgstr "Napaka med poÅiljanjem na {0}: {1}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:496
-msgid "Unable to log on."
-msgstr "Ni se mogoÄe prijaviti."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:497
-#, csharp-format
-msgid "F-Spot was unable to log on to {0}.  Make sure you have given the authentication using {0} web browser interface."
-msgstr "Ni se mogoÄe prijaviti na {0}. PrepriÄajte se, da ste dali pooblastitev z uporabo vmesnika spletnega brskalnika {0}."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:1
-msgid "<b>Account</b>"
-msgstr "<b>RaÄun</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:3
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:4
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:4
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:4
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:4
-msgid "<b>Style</b>"
-msgstr "<b>Slog</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:4
-msgid "<b>Viewing permissions</b>"
-msgstr "<b>Dovoljenja za ogled</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:7
-msgid "Export tag _hierarchy"
-msgstr "Izvozi _hierarhijo oznak"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:8
-msgid "F-Spot needs your authorization in order to upload photos to your {0} account. Press the \"Authorize\" button to open a web browser and give F-Spot the authorization. "
-msgstr "F-Spot potrebuje pooblastitev za nalaganje fotografij na vaÅ raÄun {0}. Pritisnite gumb \"Pooblastitev\" za odprtje spletnega brskalnika in pooblastitev F-Spota."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:9
-msgid "Ignore _top level tags"
-msgstr "Prezri oznake _zgornjih ravni"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:10
-msgid "Private"
-msgstr "Zasebno"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:11
-msgid "Public"
-msgstr "Javno"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:12
-msgid "Visible to Family"
-msgstr "Vidno druÅini"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:13
-msgid "Visible to Friends"
-msgstr "Vidno prijateljem"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:15
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:8
-msgid "_Export tags"
-msgstr "Izvozi ozna_ke"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:16
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:15
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:11
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:11
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:10
-msgid "_Resize to: "
-msgstr "Sp_remeni velikost na:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:17
-msgid "_View photos in browser when done uploading"
-msgstr "Ogled fotografij _v brskalniku po konÄanem poÅiljanju"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:18
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:17
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:12
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:12
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:11
-msgid "pixels"
-msgstr "toÄke"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:150
-msgid "Select Export Folder"
-msgstr "Izbor mape za izvoz"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:202
-msgid "Building Gallery"
-msgstr "Gradnja galerije"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:239
-#, csharp-format
-msgid "Exporting \"{0}\"..."
-msgstr "IzvaÅanje \"{0}\" ..."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:246
-#, csharp-format
-msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
-msgstr "Napaka med kopiranjem \"{0}\" v galerijo: {2}{1}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:272
-#, csharp-format
-msgid "Transferring to \"{0}\""
-msgstr "PrenaÅanje na \"{0}\""
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:273
-msgid "Transferring..."
-msgstr "PrenaÅanje ..."
-
-#. No need to check result here as if result is not true, an Exception will be thrown before
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:278
-msgid "Export Complete."
-msgstr "Izvoz je konÄan."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:280
-msgid "Exporting Photos Completed."
-msgstr "IzvaÅanje fotografij je konÄano."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:345
-msgid "Exporting Photos"
-msgstr "IzvaÅanje fotografij"
-
-#. Note for translators: light as clear, opposite as dark
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:749
-msgid "Light"
-msgstr "Svetlo"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:750
-msgid "Dark"
-msgstr "Temno"
-
-#. Abbreviation of previous
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:930
-msgid "Prev"
-msgstr "Predhodna"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:932
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1173
-msgid "Index"
-msgstr "Kazalo"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1042
-msgid "Gallery generated by"
-msgstr "Galerijo je ustvaril"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1082
-msgid "Show Styles"
-msgstr "PokaÅi sloge"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1083
-msgid "Hide Styles"
-msgstr "Skrij sloge"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1250
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1383
-msgid "Page:"
-msgstr "Stran:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:1
-msgid "<b>Destination</b>"
-msgstr "<b>Cilj</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:2
-msgid "<b>Export Method</b>"
-msgstr "<b>NaÄin izvoza</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:5
-msgid "Create _gallery using \"Original\""
-msgstr "Ustvari galerijo z uporabo \"Izvirnika\""
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:6
-msgid "Create standalone _web gallery"
-msgstr "Ustvari samostojno spletno _galerijo"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:7
-msgid "D_escription:"
-msgstr "Op_is:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:8
-msgid "Export _tags"
-msgstr "Izvozi oz_nake"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:9
-msgid "Export tag _icons"
-msgstr "Izvozi _ikone oznak"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:11
-msgid "G_allery Name:"
-msgstr "Ime g_alerije:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:12
-msgid "Open _destination when done exporting"
-msgstr "_Odpiri cilj po konÄanem izvozu"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:14
-msgid "_Folder:"
-msgstr "_Mapa:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:16
-msgid "_Save the files only"
-msgstr "_Shrani le datoteke"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:132
-msgid "Invalid URL"
-msgstr "Neveljaven URL"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:133
-msgid "The gallery URL entry does not appear to be a valid URL"
-msgstr "URL galerije ni videti kot veljaven URL"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:143
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:170
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:181
-msgid "Error while connecting to Gallery"
-msgstr "Med povezovanjem z galerijo je priÅlo do napake"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:144
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:171
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:182
-#, csharp-format
-msgid "The following error was encountered while attempting to log in: {0}"
-msgstr "Med poskusom prijave je priÅlo do naslednje napake: {0}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:158
-msgid "A Gallery with this name already exists"
-msgstr "Galerija s tem imenom Åe obstaja"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:159
-#, csharp-format
-msgid "There is already a Gallery with the same name in your registered Galleries. Please choose a unique name."
-msgstr "Galerija s tem imenom Åe obstaja v vpisanih galerijah. Izberite edinstveno ime."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/FormClient.cs:327
-msgid "Unhandled exception"
-msgstr "Nesprejeta izjema"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAccount.cs:82
-msgid ""
-"Cannot connect to a Gallery for which the version is unknown.\n"
-"Please check that you have Remote plugin 1.0.8 or later"
-msgstr ""
-"Ni se mogoÄe povezati z galerijo neznane razliÄice.\n"
-"NaloÅiti je treba vstavek Remote razliÄice 1.0.8. ali kasnejÅe"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAddAlbum.cs:95
-msgid "(TopLevel)"
-msgstr "(Vrhnja raven)"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAddAlbum.cs:149
-msgid "Invalid Gallery name"
-msgstr "Neveljavno ime galerije"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAddAlbum.cs:150
-msgid ""
-"The gallery name contains invalid characters.\n"
-"Only letters, numbers, - and _ are allowed"
-msgstr ""
-"Ime galerije vsebuje neveljavne znake.\n"
-"Dovoljene so le Ärke, Åtevilke ter - in _"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:228
-#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery: {1}"
-msgstr "Napaka med poÅiljanjem slike \"{0}\" v galerijo: {1}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:253
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:312
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:272
-msgid "(No Gallery)"
-msgstr "(Ni galerije)"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:339
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:431
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:363
-msgid "(Not Connected)"
-msgstr "(Ni Povezave)"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:340
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:432
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:364
-msgid "(No Albums)"
-msgstr "(Ni Albumov)"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:381
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:490
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:401
-msgid "No account selected"
-msgstr "Noben raÄun ni bil izbran"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs:382
-msgid "Error reading server response"
-msgstr "Napaka med branjem odziva streÅnika"
-
-#. failed to find the response
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs:394
-msgid "Server returned response without Gallery content"
-msgstr "StreÅnik je vrnil odgovor brez vsebine Galerije"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs:717
-msgid "Error while creating new album"
-msgstr "Napaka med ustvarjanjem novega albuma"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs:718
-#, csharp-format
-msgid ""
-"The following error was encountered while attempting to perform the requested operation:\n"
-"{0} ({1})"
-msgstr ""
-"Med poskusom izvajanja zahtevanega opravila je priÅlo do napake:\n"
-"{0} ({1})"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_album_dialog.ui.h:1
-msgid "_Album Name:"
-msgstr "Ime _albuma:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_album_dialog.ui.h:2
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_album_dialog.ui.h:3
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_add_album_dialog.ui.h:3
-msgid "_Description:"
-msgstr "O_pis:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_album_dialog.ui.h:3
-msgid "_Parent Album:"
-msgstr "_Nadrejeni album:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_album_dialog.ui.h:4
-msgid "_Title:"
-msgstr "_Naslov:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:1
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:1
-msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
-msgstr "<span weight='bold' size='larger'>Napaka med povezovanjem z galerijo</span>\n"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:3
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:5
-msgid "Please verify that the settings for this gallery are correct."
-msgstr "Potrdite, da so nastavitve za to galerijo pravilne."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:4
-msgid "U_RL:"
-msgstr "U_RL:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:5
-msgid "_Gallery Name:"
-msgstr "Ime _galerije:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:6
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:10
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_add_dialog.ui.h:1
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:10
-msgid "_Password:"
-msgstr "_Geslo:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:7
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:11
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_add_dialog.ui.h:2
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:11
-msgid "_Username:"
-msgstr "_UporabniÅko ime:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:1
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:1
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:1
-msgid "<b>Album</b>"
-msgstr "<b>Album</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:2
-msgid "<b>Gallery</b>"
-msgstr "<b>Galerija</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:6
-msgid "Export _titles and comments"
-msgstr "Izvozi _naslove in opombe"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:7
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:6
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:6
-msgid "Open _album in browser when done uploading"
-msgstr "_Odpri album v brskalniku po konÄanem poÅiljanju"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:9
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:9
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:9
-msgid "_Export to Album:"
-msgstr "Iz_voz v album:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:10
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:10
-msgid "_Gallery:"
-msgstr "_Galerija:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAddAlbum.cs:111
-msgid "Error while creating Album"
-msgstr "Napaka med ustvarjanjem albuma"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAddAlbum.cs:112
-#, csharp-format
-msgid "The following error was encountered while attempting to create an album: {0}"
-msgstr "Med poskusom ustvarjanja albuma je priÅlo do naslednje napake: {0}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:206
-#, csharp-format
-msgid "{0} Sent"
-msgstr "{0} poslanih"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:208
-#, csharp-format
-msgid "{0} of approx. {1}"
-msgstr "{0} od pribliÅno {1}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:275
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:242
-#, csharp-format
-msgid "Error Uploading To Gallery: {0}"
-msgstr "Napaka med poÅiljanjem v Galerijo: {0}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:363
-#, csharp-format
-msgid "Available space: {0}, {1}% used out of {2}"
-msgstr "Prostor na voljo: {0}, uporabljenih {1}% od {2}"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:467
-#, csharp-format
-msgid ""
-"The selected album has a limit of {0} pictures,\n"
-"which would be passed with the current selection of {1} images"
-msgstr ""
-"Izbrani album ima mejo {0} slik,\n"
-"Äemur bi zadostovala trenutna izbira {1} slik"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_album_dialog.ui.h:1
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_add_album_dialog.ui.h:1
-msgid "Public Album"
-msgstr "Javni album"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_album_dialog.ui.h:2
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_add_album_dialog.ui.h:2
-msgid "_Album Title:"
-msgstr "Naslov _albuma:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:3
-msgid "<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
-msgstr "<span weight='bold' size='larger'>VaÅ raÄun Google je zaklenjen</span>\n"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:6
-msgid ""
-"Please verify that the settings for this gallery are correct.\n"
-"Enter the letters as they are shown in the image in\n"
-"the 'Captcha' field. <i>Letters are not case-sensitive</i>"
-msgstr ""
-"Potrdite, da so nastavitve za to galerijo pravilne.\n"
-"Vnesite Ärke, kot so prikazane na sliki v polju 'Captcha'.\n"
-"<i>Velikost Ärk ni pomembna</i>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:9
-msgid "_Captcha:"
-msgstr "_Captcha:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:3
-msgid "<b>PicasaWeb Export</b>"
-msgstr "<b>Izvoz PicasaWeb</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:3
-msgid "<b>SmugMug Export</b>"
-msgstr "<b>Izvoz SmugMug</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:7
-msgid "_Account:"
-msgstr "_RaÄun:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs:310
-msgid "Done sending photos"
-msgstr "PoÅiljanje fotografij je konÄano"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs:312
-msgid "Upload complete"
-msgstr "PoÅiljanje je konÄano"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs:318
-msgid "Error uploading to Tabblo: "
-msgstr "Napaka med poÅiljanjem v Tabblo:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:1
-msgid "<b>F-Spot tags</b>"
-msgstr "<b>Oznake F-Spot</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:3
-msgid "<b>Tabblo account</b>"
-msgstr "<b>RaÄun Tabblo</b>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:4
-msgid "<small><i>F-Spot tags can help you track the export status of photos. Example: Use one tag for the photos that you plan to export, and another one for those already exported. Here, you can tell F-Spot to automatically replace these tags as appropriate.</i></small>"
-msgstr "<small><i>F-Spot oznake lahko olajÅajo sledenje izvoznemu stanju fotografij. Primer: uporaba ene oznake za fotografije, pripravljene na izvoz in druge za fotografije, ki so bile Åe izvoÅene. Tukaj lahko nastavite samodejno zamenjavo oznak.</i></small>"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:6
-msgid "Rem_ove from exported photos:"
-msgstr "_Odstrani iz izvoÅenih fotografij:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:7
-msgid "Select..."
-msgstr "Izberi ..."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:8
-msgid "_Attach to exported photos:"
-msgstr "_Pripni izvoÅenim fotografijam:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:1
-msgid "A trust error occured while attempting to access"
-msgstr "Med poskusom dostopa je priÅlo do napake zaupanja"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:2
-msgid "Abort this session"
-msgstr "Prekini to sejo"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:3
-msgid "Always trust this site's certificate"
-msgstr "Vedno zaupaj potrdilu te strani"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:4
-msgid "Do you wish to:"
-msgstr "Ali Åelite: "
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:5
-msgid "Trust Error"
-msgstr "Napaka zaupanja"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:6
-msgid "Trust the site's certificate this once"
-msgstr "Zaupaj potrdilu te strani tokrat"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs:67
-msgid "This tool requires an active selection. Please select one or more pictures and try again"
-msgstr "To orodje zahteva dejavno izbiro. Izberite eno ali veÄ slik in poskusite znova."
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs:83
-msgid "Select export folder"
-msgstr "Izbor mape za izvoz"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs:121
-msgid "Exporting files"
-msgstr "Izvoz datotek"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs:127
-#, csharp-format
-msgid "Preparing photo \"{0}\""
-msgstr "Pripravljanje fotografije \"{0}\""
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/zip_export.ui.h:1
-msgid "_Create"
-msgstr "_Ustvari"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/zip_export.ui.h:2
-msgid "_File name:"
-msgstr "_Ime datoteke:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/zip_export.ui.h:3
-msgid "_Location:"
-msgstr "_Mesto:"
-
-#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/zip_export.ui.h:4
-msgid "_Scale:"
-msgstr "M_erilo:"
-
-#: ../src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.ui.h:1
-msgid "<b>Specify the toplevel Photos directories</b>"
-msgstr "<b>Navedite vrhnje mape fotografij</b>"
-
-#: ../src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.ui.h:2
-msgid "Change Photos directory"
-msgstr "Spremeni mapo fotograij"
-
-#: ../src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.ui.h:3
-msgid "Change base path (URI) to"
-msgstr "Spremeni osnovno pot (URI) v"
-
-#: ../src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.ui.h:4
-msgid "Old base path (URI) was"
-msgstr "Stara osnovna pot (URI) je bila"
-
-#: ../src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs:51
-msgid "Developing photos"
-msgstr "Razvijanje fotografij"
-
-#: ../src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs:58
-#, csharp-format
-msgid "Developing {0}"
-msgstr "Razvijanje {0}"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:128
-msgid "F-Spot Gallery"
-msgstr "Galerija F-Spot"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:129
-msgid "The web gallery seems to be offline now"
-msgstr "Videti je, da je spletna galerija trenutno nepovezana"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:130
-msgid "Show All"
-msgstr "PokaÅi vse"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:140
-#, csharp-format
-msgid "{0} photo"
-msgid_plural "{0} photos"
-msgstr[0] "{0} fotografij"
-msgstr[1] "{0} fotografija"
-msgstr[2] "{0} fotografiji"
-msgstr[3] "{0} fotografije"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:182
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:8
-msgid "Current View"
-msgstr "Trenutni pogled"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:185
-msgid "Selected"
-msgstr "Izbrano"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs:111
-msgid "none"
-msgstr "brez"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs:114
-#, csharp-format
-msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
-msgstr " Galerija: {0}, fotografij: {1}, zadnji odjemalec: {3}"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs:178
-msgid "Gallery is inactive"
-msgstr "Galerija je nedejavna"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:1
-msgid ""
-"<small><i>The gallery stays active until you either deactivate it or close\n"
-"F-Spot. Make sure local viewers access it bypassing HTTP proxy.</i></small>"
-msgstr ""
-"<small><i>Galerija ostane dejavna dokler je ne izkljuÄite ali zaprete F-spota.\n"
-"PrepriÄajte se, da lahko do dostopajo krajevni obiskovalci tako da obidejo posredniÅki streÅnik HTTP.</i></small>"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:3
-msgid ""
-"<small><i>When the gallery is active, above is the URL you need to open \n"
-"on another computer to access the shared photos.</i></small>"
-msgstr ""
-"<small><i>Ko je galerija dejavna, je mogoÄe do fotografij v souporabi\n"
-"dostopati preko zgornjega URL-ja.</i></small>"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:5
-msgid "Activates and deactivates the web gallery"
-msgstr "OmogoÄi in onemogoÄi spletno galerijo"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:6
-msgid "Allow viewers to add tags"
-msgstr "Obiskovalcem dovoli dodajanje oznak"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:7
-msgid "Copy URL to clipboard"
-msgstr "Kopiraj URL na odloÅiÅÄe"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:9
-msgid "F-Spot Live Web Gallery"
-msgstr "Åiva spletna galerija F-Spot"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:10
-msgid "Gallery URL:"
-msgstr "URL galerije:"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:11
-msgid "Limit number of shared photos to"
-msgstr "Omeji Åtevilo fotografij v souporabi na"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:12
-msgid "Options:"
-msgstr "MoÅnosti:"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:13
-msgid "Photos with a Tag"
-msgstr "Fotografije z oznako"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:14
-msgid "Selected Photos"
-msgstr "Izbrane fotografije"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:15
-msgid "Share:"
-msgstr "Souporaba:"
-
-#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:16
-msgid "Views:"
-msgstr "Ogledov:"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDb.cs:91
-msgid "Error opening the selected file"
-msgstr "Napaka med odpiranjem izbrane datoteke"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDb.cs:92
-#, csharp-format
-msgid ""
-"The file you selected is not a valid or supported database.\n"
-"\n"
-"Received exception \"{0}\"."
-msgstr ""
-"Izbrana datoteka ni veljavna ali podprta podatkovna zbirka.\n"
-"\n"
-"Prejeta je bila izjema \"{0}\"."
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/PickFolderDialog.cs:57
-#, csharp-format
-msgid ""
-"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
-" Please select that folder so I can do the mapping.</big>"
-msgstr ""
-"<big>Podatkovna zbirka se navezuje na datoteke v mapi <b>{0}</b>.\n"
-"Izbrati je treba mapo za preslikavo.</big>"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:1
-msgid "<small><i>Choose the location of the database you want to import from</i></small>"
-msgstr "<small><i>Izbira mesta podatkovne zbirke za uvaÅanje</i></small>"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:2
-msgid ""
-"<small><i>Choose what to import from the selected db.\n"
-"\"New Rolls Only\" is the smart option that will avoid re-importing photos you could have imported during a previous operation.\n"
-"\"A Single Import Roll\" let you choose which roll you want to merge back.\n"
-"\"Everything\" will import everything, creating duplicates if you already imported from that database.</i></small>"
-msgstr ""
-"<small><i>Izberite kaj Åelite uvoziti iz izbrane podatkovne zbirke.\n"
-"\"Samo novi zvitki\" je pametna moÅnost, ki se bo izognila ponovnemu uvaÅanju Åe uvoÅenih fotografij.\n"
-"\"Posamezni uvozni zvitek\" omogoÄa izbiro zvitka za zdruÅevanje.\n"
-"\"Vse\" uvozi vse in ustvari dvojnike, Äe so bile fotografije iz te podatkovne zbirke Åe uvoÅene.</i></small>"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:6
-msgid "<small><i>Copy the images locally or keep them where they are. If you chose the later, be sure that this location will stay accessible from f-spot.</i></small>"
-msgstr "<small><i>Krajevno kopiranje slik ali izbira njihovega trenutnega mesta. V slednjem primeru se je treba prepriÄati, da bo to mesto ostalo dostopno iz f-spot-a.</i></small>"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:7
-msgid "A Single Import Roll"
-msgstr "Posamezen uvozni zvitek"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:8
-msgid "Copy images to photos folder"
-msgstr "Kopiranje slik v mapo fotografij"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:9
-msgid "Database Location:"
-msgstr "Mesto podatkovne zbirke:"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:10
-msgid "Everything"
-msgstr "Vse"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:11
-msgid "Import:"
-msgstr "Uvozi:"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:12
-msgid "Keep the images at their original location"
-msgstr "ObdrÅi slike na njihovem izvirnem mestu"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:13
-msgid "Merge another F-Spot collection"
-msgstr "ZdruÅitev druge zbirke F-Spot"
-
-#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:14
-msgid "New Rolls Only"
-msgstr "Samo novi zvitki"
-
-#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:2
-msgid "Delay:"
-msgstr "Zamik:"
-
-#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:3
-msgid "Display:"
-msgstr "Zaslon:"
-
-#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:4
-msgid "Images tagged with:"
-msgstr "Slike oznaÄene z:"
-
-#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:5
-msgid "Make F-Spot my screensaver"
-msgstr "Naredi F-spot moj ohranjevalnik zaslona"
-
-#: ../src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Addins.Transitions/Cover.cs:45
-msgid "Cover"
-msgstr "Naslovnica"
-
-#: ../src/Extensions/Transitions/FSpot.Transitions.Dissolve/FSpot.Addins.Transitions/Dissolve.cs:45
-msgid "Dissolve"
-msgstr "Raztapljanje"
-
-#: ../src/Extensions/Transitions/FSpot.Transitions.Push/FSpot.Addins.Transitions/Push.cs:45
-msgid "Push"
-msgstr "Potisk"
-
-#: ../tools/f-spot-screensaver.desktop.in.h:1
-msgid "Display a slideshow from F-Spot"
-msgstr "PrikaÅe F-Spotovo diapredstavitev"
-
-#: ../tools/f-spot-screensaver.desktop.in.h:2
-msgid "F-Spot photos"
-msgstr "F-Spot fotografije"
-
-#~ msgid "(wrong format)"
-#~ msgstr "(napaÄen zapis)"
-
-#~ msgid "(At least one File not found)"
-#~ msgstr "(vsaj ene datoteke ni mogoÄe najti)"
-
-#~ msgid "Show Photo Name"
-#~ msgstr "PokaÅi ime fotografije"
-
-#~ msgid ""
-#~ "Metadata of file {0} may be corrupt, refusing to write to it, falling "
-#~ "back to XMP sidecar."
-#~ msgstr ""
-#~ "Metapodatki datoteke {0} so morda pokvarjeni, zato ne bodo zapisani. "
-#~ "Uporabljena bo dodatna datoteka XMP."
-
-#~ msgid "Rating:"
-#~ msgstr "Ocena:"
-
-#~ msgid ""
-#~ "In order to detect duplicates on pictures you imported before 0.5.0, F-"
-#~ "Spot needs to analyze your image collection. This is not done by default "
-#~ "as it's time consuming. You can Start or Pause this update process using "
-#~ "this dialog."
-#~ msgstr ""
-#~ "Za zaznavanje dvojnikov slik, ki so bile uvoÅene pred 0.5.0, mora F-spot "
-#~ "preuÄiti zbirko slik. To ni storjeno samodejno, ker vzame veliko Äasa. V "
-#~ "temu pogovornemu oknu lahko postopek posodabljanja zaÅenete ali zaÄasno "
-#~ "zaustavite."
-
-#~ msgid ""
-#~ "You currently have {0} photos needing md5 calculation, and {1} pending "
-#~ "jobs"
-#~ msgstr ""
-#~ "Trenutno imate {0} fotografij, ki potrebujejo izraÄun md5 in {1} "
-#~ "ÄakajoÄih poslov"
-
-#~ msgid "Processing images..."
-#~ msgstr "Obdelavanje slik ..."
-
-#~ msgid "Stopped"
-#~ msgstr "Zaustavljeno"
-
-#~ msgid "Strip _metadata"
-#~ msgstr "Odstrani _metapodatke"
-
-#~ msgid "Check for Duplicates..."
-#~ msgstr "Zaznaj dvojnike ..."
-
-#~ msgid "F-Spot Encountered a Fatal Error"
-#~ msgstr "PriÅlo je do usodne napake"
-
-#~ msgid "Error Details"
-#~ msgstr "Podrobnosti napake"
-
-#~ msgid "An unhandled exception was thrown: "
-#~ msgstr "Nesprejeto izjemno dejanje:"
-
-#~ msgid "Attach Tags:"
-#~ msgstr "Pripenjanje oznak:"
-
-#~ msgid "Autorotate"
-#~ msgstr "Samodejno vrtenje"
-
-#~ msgid "_Autorotate"
-#~ msgstr "S_amodejno vrtenje"
-
-#~ msgid "Unknown transform type %d"
-#~ msgstr "Neznana vrsta pretvorbe %d"
-
-#~ msgid "Operation failed"
-#~ msgstr "Dejanje ni uspelo"
-
-#~ msgid "No way to save files of type \"{0}\""
-#~ msgstr "Ni naÄina za shranjevanje datotek vrste \"{0}\""
-
-#~ msgid "Thumbnail Directory"
-#~ msgstr "Mapa sliÄic"
-
-#~ msgid "Exif Directory"
-#~ msgstr "Exif mapa"
-
-#~ msgid "GPS Directory"
-#~ msgstr "GPS mapa"
-
-#~ msgid "InterOperability Directory"
-#~ msgstr "Mapa vzajemnega delovanja"
-
-#~ msgid "Unknown Directory"
-#~ msgstr "Neznana mapa"
-
-#~ msgid "Writing to this file format is not supported"
-#~ msgstr "Pisanje v to vrsto datoteke ni podprto"
-
-#~ msgid "IPTC Information Interchange Model (IIM) Version number"
-#~ msgstr "Åtevilka razliÄice IPTC Informacijsko Izmenjalnega Modela (IIM) "
-
-#~ msgid "OSI Destination routing information"
-#~ msgstr "OSI podrobnosti o potovanju do cilja"
-
-#~ msgid "IPTC file format"
-#~ msgstr "IPTC vrsta datoteke"
-
-#~ msgid "Identifies the provider and product"
-#~ msgstr "DoloÄa ponudnika in izdelek"
-
-#~ msgid "A unique number identifying the envelope"
-#~ msgstr "Edinstveno Åtevilo za doloÄevanje ovojnice"
-
-#~ msgid "A unique number"
-#~ msgstr "Edinstveno Åtevilo"
-
-#~ msgid ""
-#~ "The envelope handling priority between 1 (most urgent) and 9 (least "
-#~ "urgent)"
-#~ msgstr ""
-#~ "Prednost upravljanja ovojnice med 1 (najbolj nujno) in 9 (najmanj nujno)"
-
-#~ msgid "The year, month and day (CCYYMMDD) the service sent the material"
-#~ msgstr "Leto, mesec in dan (LLLLMMDD), ko je storitev poslala material"
-
-#~ msgid "The hour, minute and second (HHMMSS) the service sent the material"
-#~ msgstr "Ura, minuta in sekunda (UUMMSS), ko je storitev poslala material."
-
-#~ msgid "The character set designation"
-#~ msgstr "Imenovanje niza znakov"
-
-#~ msgid "External globally unique object identifier"
-#~ msgstr "Zunanje edinstveno doloÄilo predmeta"
-
-#~ msgid "Abstract Relationship Method (ARM) identifier"
-#~ msgstr "DoloÄilo metode abstraktnega razmerja (ARM)"
-
-#~ msgid "Abstract Relationship Method (ARM) version number."
-#~ msgstr "Åtevilka razliÄice metode abstraktnega razmerja (ARM)"
-
-#~ msgid "Number identifying the IIM version this application record uses"
-#~ msgstr "Åtevilka razliÄice IIM, ki jo uporablja programski zapis"
-
-#~ msgid "Object type reference"
-#~ msgstr "Sklic vrste predmeta"
-
-#~ msgid "Object attribute reference"
-#~ msgstr "Sklic atributov predmeta"
-
-#~ msgid "Object name"
-#~ msgstr "Ime predmeta"
-
-#~ msgid "Status of the objectdata according to the provider"
-#~ msgstr "Stanje podatkov predmeta glede na ponudnika"
-
-#~ msgid "Location within a city or area where the object originates"
-#~ msgstr "Kraj znotraj mesta ali obmoÄja od koder izvira vsebina"
-
-#~ msgid "Name of the city the content is focussing on"
-#~ msgstr "Ime mesta na katerega se osredotoÄa vsebina"
-
-#~ msgid "Copyright information for"
-#~ msgstr "Podrobnosti avtorskih pravic za "
-
-#~ msgid "Full name of the country of the focus of the content"
-#~ msgstr "Polno ime drÅave in osredotoÄenost vsebine"
-
-#~ msgid ""
-#~ "Two or three letter ISO3166 code of the country of the focus of the "
-#~ "content"
-#~ msgstr "Dvo ali tri Ärkovna ISO3166 koda drÅave in osredotoÄenost vsebine"
-
-#~ msgid "Creator of the content"
-#~ msgstr "Ustvarjalec vsebine"
-
-#~ msgid "Provider of the object"
-#~ msgstr "Ponudnik predmeta"
-
-#~ msgid "The title of the author or creator"
-#~ msgstr "Naslov avtorja ali ustvarjalca"
-
-#~ msgid ""
-#~ "The person involved in writing, editing or correcting the object data or "
-#~ "caption/abstract"
-#~ msgstr ""
-#~ "Oseba vkljuÄena v pisanje, urejanje ali popravljanje podatkov o predmetu "
-#~ "ali obnove"
-
-#~ msgid "Headline of the content"
-#~ msgstr "Naslovnica vsebine"
-
-#~ msgid ""
-#~ "Instructions from the creator to the receiver not covered by other fields"
-#~ msgstr ""
-#~ "Navodila od ustvarjalca za uporabnika, ki niso opredeljena z drugimi polji"
-
-#~ msgid "Intellectual genre of the object"
-#~ msgstr "Intelektualna zvrst predmeta"
-
-#~ msgid "Unknown IIM DataSet"
-#~ msgstr "Neznan IIM niz podatkov"
-
-#~ msgid "Title"
-#~ msgstr "Naslov"
-
-#~ msgid "Copyright"
-#~ msgstr "Avtorske pravice"
-
-#~ msgid "Subject and Keywords"
-#~ msgstr "Predmet in kljuÄne besede"
-
-#~ msgid "Compression"
-#~ msgstr "Stiskanje"
-
-#~ msgid "Planar Configuration"
-#~ msgstr "Nastavitev ravnine"
-
-#~ msgid "Orientation"
-#~ msgstr "Usmerjenost"
-
-#~ msgid "Photometric Interpretation"
-#~ msgstr "FotometriÄno tolmaÄenje"
-
-#~ msgid "Resolution Unit"
-#~ msgstr "Enota loÄljivosti"
-
-#~ msgid "Exposure Program"
-#~ msgstr "Program osvetlitve"
-
-#~ msgid "Metering Mode"
-#~ msgstr "NaÄin umerjanja"
-
-#~ msgid "Exposure Mode"
-#~ msgstr "NaÄin osvetlitve"
-
-#~ msgid "Custom Rendered"
-#~ msgstr "Izris po meri"
-
-#~ msgid "Components Configuration"
-#~ msgstr "Nastavitve enot"
-
-#~ msgid "Light Source"
-#~ msgstr "Vir svetlobe"
-
-#~ msgid "Sensing Method"
-#~ msgstr "Metoda zaznavanja"
-
-#~ msgid "Color Space"
-#~ msgstr "Barvni prostor"
-
-#~ msgid "White Balance"
-#~ msgstr "UravnoteÅenje beline"
-
-#~ msgid "Focal Plane Resolution Unit"
-#~ msgstr "Enota ploskovne loÄljivosti ÅariÅÄa."
-
-#~ msgid "File Source Type"
-#~ msgstr "Vrsta izvorne datoteke"
-
-#~ msgid "Scene Capture Type"
-#~ msgstr "Vrsta zajema scene"
-
-#~ msgid "Gain Control"
-#~ msgstr "Nadzor ojaÄitve"
-
-#~ msgid "Contrast"
-#~ msgstr "Kontrast"
-
-#~ msgid "Saturation"
-#~ msgstr "NasiÄenost"
-
-#~ msgid "Sharpness"
-#~ msgstr "Ostrina"
-
-#~ msgid "Scene Type"
-#~ msgstr "Vrsta scene"
-
-#~ msgid ""
-#~ "Specify if an original size picture should be rotated or not. Smaller "
-#~ "sizes are automatically rotated."
-#~ msgstr ""
-#~ "DoloÄa ali naj bo originalna slika zavrtena ali ne. ManjÅe velikosti so "
-#~ "samodejno zavrtene."
-
-#~ msgid "Unable to create temporary file"
-#~ msgstr "Ni mogoÄe ustvariti zaÄasne datoteke "
-
-#~ msgid "No Extended Metadata Available"
-#~ msgstr "RazÅirjeni metapodatki niso na voljo"
-
-#~ msgid "Country"
-#~ msgstr "DrÅava"
-
-#~ msgid "City"
-#~ msgstr "Mesto"
-
-#~ msgid "State"
-#~ msgstr "Regija"
-
-#~ msgid "Comment:"
-#~ msgstr "Opomba:"
-
-#~ msgid "Open _Folder..."
-#~ msgstr "Odpri _Mapo ..."
-
-#~ msgid "_New Window"
-#~ msgstr "_Novo Okno"
-
-#~ msgid "\n"
-#~ msgstr "\n"
-
-#~ msgid "<b>{0}</b>."
-#~ msgstr "<b>{0}</b>."
-
-#~ msgid "<small></small>"
-#~ msgstr "<small></small>"
-
-#~ msgid "Photo 0 of 0"
-#~ msgstr "Fotografija 0 od 0"
-
-#~ msgid "Preview"
-#~ msgstr "Predogled"
-
-#~ msgid "Path"
-#~ msgstr "Pot"
-
-#~ msgid "File"
-#~ msgstr "Datoteka"
-
-#~ msgid "Select Tag"
-#~ msgstr "Izbor oznake"
-
-#~ msgid "Downloading Previews"
-#~ msgstr "Nalaganje predogledov"
-
-#~ msgid "Downloading Preview of {0}"
-#~ msgstr "Nalaganje predogleda {0}"
-
-#~ msgid "Copying file {0} of {1}"
-#~ msgstr "Kopiranje datoteke {0} od {1}"
-
-#~ msgid "Error transferring file"
-#~ msgstr "Napaka med prenosom datoteke"
-
-#~ msgid "Download Complete"
-#~ msgstr "Prenos konÄan"
-
-#~ msgid "Done Copying Files"
-#~ msgstr "Kopiranje datotek konÄano"
-
-#~ msgid "Transferring \"{0}\" from camera"
-#~ msgstr "PrenaÅanje \"{0}\" s fotoaparata"
-
-#~ msgid "Port"
-#~ msgstr "Vrata"
-
-#~ msgid "Import error"
-#~ msgstr "Napaka uvaÅanja"
-
-#~ msgid "Error importing {0}{2}{2}{1}"
-#~ msgstr "Napaka med uvaÅanjem {0}{2}{2}{1}"
-
-#~ msgid " "
-#~ msgstr " "
-
-#~ msgid "<b></b>"
-#~ msgstr "<b></b>"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Camera Selection"
-#~ msgstr "Izbira fotoaparata"
-
-#~ msgid "E-_Mail:"
-#~ msgstr "_E-poÅta:"
-
-#~ msgid "E_xport titles and comments"
-#~ msgstr "Izvozi _naslove in opombe"
-
-#~ msgid "G_allery:"
-#~ msgstr "G_alerija:"
-
-#~ msgid "Gallery"
-#~ msgstr "Galerija"
-
-#~ msgid "Pause"
-#~ msgstr "Premor"
-
-#~ msgid "Select Photos to Copy From Camera..."
-#~ msgstr "Izbor fotografij za kopiranje s fotoaparata"
-
-#~ msgid "Select the camera from which you want to transfer files"
-#~ msgstr "Izbor fotoaparata za prenos datotek"
-
-#~ msgid "Selected Camera: "
-#~ msgstr "Izbran fotoaparat:"
-
-#~ msgid "Strip image _metadata"
-#~ msgstr "Odstrani _metapodatke slike"
-
-#~ msgid "_Flickr"
-#~ msgstr "_Flickr"
-
-#~ msgid "_Gallery"
-#~ msgstr "_Galerija"
-
-#~ msgid "_Open album in browser when done uploading"
-#~ msgstr "_Odpri album v brskalniku po konÄanem nalaganju"
-
-#~ msgid "_Open destination when done exporting"
-#~ msgstr "_Odpiri cilj po konÄanem izvozu"
-
-#~ msgid "_Scale photos to no larger than: "
-#~ msgstr "_Spreminjanje velikosti fotografij na ne veÄ kot: "
-
-#~ msgid "_Strip metadata"
-#~ msgstr "O_dstrani metapodatke"
-
-#~ msgid "_URI:"
-#~ msgstr "_URI:"
-
-#~ msgid "_Virtual Filesystem"
-#~ msgstr "_Navidezni datoteÄni sistem"
-
-#~ msgid "x"
-#~ msgstr "x"
-
-#~ msgid "Done Loading"
-#~ msgstr "Nalaganje konÄano"
-
-#~ msgid "Directory does not exist."
-#~ msgstr "Mapa ne obstaja"
-
-#~ msgid ""
-#~ "The directory you selected \"{0}\" does not exist.  Please choose a "
-#~ "different directory"
-#~ msgstr "Mapa \"{0}\", ki ste jo izbrali, ne obstaja. Izberite drugo mapo."
-
-#~ msgid "No cameras detected."
-#~ msgstr "Noben fotoaparat ni bil zaznan."
-
-#~ msgid ""
-#~ "F-Spot was unable to find any cameras attached to this system.  Double "
-#~ "check that the camera is connected and has power"
-#~ msgstr ""
-#~ "Program F-spot ni zaznal v sistem povezanih fotoaparatov. Dvakrat "
-#~ "preverite, ali je fotoaparat povezan in priÅgan."
-
-#~ msgid "Error connecting to camera"
-#~ msgstr "Napaka med povezovanjem s fotoaparatom"
-
-#~ msgid "Received error \"{0}\" while connecting to camera"
-#~ msgstr "Med povezovanjem s fotoaparatom je bila prejeta napaka \"{0}\""
-
-#~ msgid "Reparented ({0})"
-#~ msgstr "RazliÄica slike ({0})"
-
-#~ msgid "Could not create a new version"
-#~ msgstr "Ni mogoÄe ustvariti nove razliÄice"
-
-#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-#~ msgstr ""
-#~ "Prejeta je bila napaka \"{0}\". Ni mogoÄe ustvariti razliÄice \"{1}\""
-
-#~ msgid "Really Delete?"
-#~ msgstr "ResniÄen izbris?"
-
-#~ msgid "Cancel"
-#~ msgstr "PrekliÄi"
-
-#~ msgid "Could not delete a version"
-#~ msgstr "Ni mogoÄe izbrisati razliÄice"
-
-#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-#~ msgstr ""
-#~ "Prejeta je bila napaka \"{0}\". Ni mogoÄe izbrisati razliÄice \"{1}\""
-
-#~ msgid "Could not rename a version"
-#~ msgstr "Ni mogoÄe preimenovati razliÄice"
-
-#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-#~ msgstr ""
-#~ "Prejeta je bila napaka \"{0}\". Ni mogoÄe preimenovati razliÄice v \"{1}\""
-
-#~ msgid "Error: Error while transferring; Aborting"
-#~ msgstr "Napaka: napaka med prenosom; preklicano"
-
-#~ msgid "Error: File Already Exists; Aborting"
-#~ msgstr "Napaka: datoteka Åe obstaja; preklicano"
-
-#~ msgid "Edit Selected Tag..."
-#~ msgstr "Uredi izbrane oznake ..."
-
-#~ msgid "_Edit Selected Tag..."
-#~ msgstr "_Uredi izbrane oznake ..."
-
-#~ msgid "Package"
-#~ msgstr "Paket"
-
-#~ msgid "Extension Installation"
-#~ msgstr "Namestitev razÅiritev"
-
-#~ msgid "<b>Select the extensions to install and click on Next</b>"
-#~ msgstr "<b>Izberite razÅiritve za namestitev in kliknite Naprej</b> "
-
-#~ msgid "Install from:"
-#~ msgstr "NameÅÄanje iz: "
-
-#~ msgid "_Repositories..."
-#~ msgstr "Sk_ladiÅÄa ..."
-
-#~ msgid "Show all packages"
-#~ msgstr "PokaÅi vse pakete"
-
-#~ msgid "Show new versions only"
-#~ msgstr "PokaÅi le nove razliÄice"
-
-#~ msgid "Show updates only"
-#~ msgstr "PokaÅi le posodobitve"
-
-#~ msgid "_Unselect All"
-#~ msgstr "_PoÄisti ves izbor"
-
-#~ msgid "label124"
-#~ msgstr "oznaka123"
-
-#~ msgid "Overall Progress:"
-#~ msgstr "Skupni napredek:"
-
-#~ msgid "Downloading extensions..."
-#~ msgstr "PrenaÅanje razÅiritev ..."
-
-#~ msgid "Extension Manager"
-#~ msgstr "Upravljalnik razÅiritev"
-
-#~ msgid "Additional extensions are required to perform this operation."
-#~ msgstr "Za izvajanje dejanja so obvezne dodatne razÅiritve."
-
-#~ msgid "The following extensions will be installed:"
-#~ msgstr "NameÅÄene bodo sledeÄe razÅiritve:"
-
-#~ msgid "<big><b>Extension Manager</b></big>"
-#~ msgstr "<big><b>Upravljalnik razÅiritev</b></big> "
-
-#~ msgid "The following extensions are currently installed:"
-#~ msgstr "Trenutno so nameÅÄene sledeÄe razÅiritve:"
-
-#~ msgid "_Install Extensions..."
-#~ msgstr "_Namesti razÅiritve ..."
-
-#~ msgid "_Uninstall..."
-#~ msgstr "_Odstrani ..."
-
-#~ msgid "Enable"
-#~ msgstr "OmogoÄi"
-
-#~ msgid "Disable"
-#~ msgstr "OnemogoÄi"
-
-#~ msgid "Extension Repository Management"
-#~ msgstr "Upravljanje skladiÅÄa razÅiritev"
-
-#~ msgid "Add New Repository"
-#~ msgstr "Dodajanje novega skladiÅÄa"
-
-#~ msgid "Select the location of the repository you want to register:"
-#~ msgstr "Izbor mesta skladiÅÄa za registracijo:"
-
-#~ msgid "Register an on-line repository"
-#~ msgstr "Registracija spletnega skladiÅÄa"
-
-#~ msgid "Url:"
-#~ msgstr "URL:"
-
-#~ msgid "Register a local repository"
-#~ msgstr "Registracija krajevnega skladiÅÄa."
-
-#~ msgid "Path:"
-#~ msgstr "Pot:"
-
-#~ msgid "Browse..."
-#~ msgstr "Prebrskaj ..."
-
-#~ msgid "Version:"
-#~ msgstr "RazliÄica:"
-
-#~ msgid "Author:"
-#~ msgstr "Avtor:"
-
-#~ msgid "Copyright:"
-#~ msgstr "Avtorske pravice:"
-
-#~ msgid "Extension Dependencies:"
-#~ msgstr "Odvisnosti razÅiritve:"
-
-#~ msgid "All registered repositories"
-#~ msgstr "Vsa registrirana skladiÅÄa"
-
-#~ msgid "Are you sure you want to cancel the installation?"
-#~ msgstr "Ali ste prepriÄani, da Åelite preklicati namestitev?"
-
-#~ msgid "The following packages will be uninstalled:"
-#~ msgstr "SledeÄi paketi bodo odstranjeni:"
-
-#~ msgid ""
-#~ "There are other extensions that depend on the previous ones which will "
-#~ "also be uninstalled:"
-#~ msgstr "Druge razÅiritve so odvisne od prejÅnjih in bodo tudi odstranjene:"
-
-#~ msgid ""
-#~ "The selected extensions can't be installed because there are dependency "
-#~ "conflicts."
-#~ msgstr ""
-#~ "Izbrane razÅiritve ne morejo biti nameÅÄene zaradi spora odvisnosti."
-
-#~ msgid "The following packages will be installed:"
-#~ msgstr "NameÅÄeni bodo sledeÄi paketi:"
-
-#~ msgid " (in user directory)"
-#~ msgstr "(v uporabnikovi mapi)"
-
-#~ msgid "The following packages need to be uninstalled:"
-#~ msgstr "Odstranjeni bodo sledeÄi paketi:"
-
-#~ msgid "The following dependencies could not be resolved:"
-#~ msgstr "Ni bilo zadoÅÄeno sledeÄim odvisnostim:"
-
-#~ msgid "The installation has been successfully completed."
-#~ msgstr "Namestitev je uspeÅno konÄana."
-
-#~ msgid "The installation failed!"
-#~ msgstr "Namestitev je spodletela!"
-
-#~ msgid "The installation has completed with warnings."
-#~ msgstr "Namestitev je zakljuÄena z opozorili."
-
-#~ msgid "The uninstallation has been successfully completed."
-#~ msgstr "Odstranjevanje namestitve je bilo uspeÅno zakljuÄeno."
-
-#~ msgid "The uninstallation failed!"
-#~ msgstr "Odstranjevanje namestitve je spodletelo!"
-
-#~ msgid "The uninstallation has completed with warnings."
-#~ msgstr "Odstranjevanje namestitve je bilo zakljuÄeno z opozorili."
-
-#~ msgid "Repository"
-#~ msgstr "SkladiÅÄe"
-
-#~ msgid "Installation cancelled"
-#~ msgstr "Namestitev je bila preklicana"
-
-#~ msgid "Some of the required extensions were not found"
-#~ msgstr "Nekaj zahtevanih razÅiritev ni bilo najdenih"
-
-#~ msgid "Installation failed"
-#~ msgstr "Namestitev ni uspela"
-
-#~ msgid "Extension"
-#~ msgstr "RazÅiritev"
-
-#~ msgid "Other"
-#~ msgstr "Ostalo"
-
-#~ msgid "Exception occurred: {0}"
-#~ msgstr "PriÅlo je do izjemne napake: {0}"
-
-#~ msgid "Disabled extensions can't be loaded."
-#~ msgstr "OnemogoÄene razÅiritve ne morejo biti naloÅene."
-
-#~ msgid "Loading {0} extension"
-#~ msgstr "Nalaganje razÅiritve {0}"
-
-#~ msgid "The required extension '{0}' is disabled."
-#~ msgstr "Zahtevana razÅiritev '{0}' je onemogoÄena."
-
-#~ msgid "The required extension '{0}' is not installed."
-#~ msgstr "Zahtevana razÅiritev '{0}' ni nameÅÄena."
-
-#~ msgid "(provided by {0})"
-#~ msgstr "(ponudnik {0})"
-
-#~ msgid "my photos"
-#~ msgstr "moje fotografije"
-
-#~ msgid "Copy Locat_ion"
-#~ msgstr "Kopiraj _mesto"
-
-#~ msgid "Reveal"
-#~ msgstr "Razodeni"
-
-#~ msgid "Wipe"
-#~ msgstr "DokonÄno poÄisti"
-
-#~ msgid "Split"
-#~ msgstr "Razdelitev"
+# Andrej ÅnidarÅiÄ <andrej znidarsic gmail com>, 2009"
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: f-spot\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-spot&keywords=I18N+L10N&component=General\n";
+"POT-Creation-Date: 2011-11-25 17:02+0000\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Andrej ÅnidarÅiÄ <andrej znidarsic gmail com>\n"
+"Language-Team: Slovenian GNOME Translation Team <gnome-si googlegroups com>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#. ../src/Clients/MainApp/FSpot.addin.xml
+#: ../data/addin-xml-strings.cs:8
+#: ../src/Clients/MainApp/FSpot.addin.xml.h:1
+msgid "Copy Photo"
+msgstr "Kopiranj fotografijo"
+
+#: ../data/addin-xml-strings.cs:9
+#: ../src/Clients/MainApp/FSpot.addin.xml.h:5
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:457
+#: ../src/Clients/MainApp/ui/main_window.ui.h:16
+msgid "Rotate _Left"
+msgstr "Zavrti _levo"
+
+#: ../data/addin-xml-strings.cs:10
+#: ../src/Clients/MainApp/FSpot.addin.xml.h:6
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:458
+#: ../src/Clients/MainApp/ui/main_window.ui.h:17
+msgid "Rotate _Right"
+msgstr "Zavrti _desno"
+
+#: ../data/addin-xml-strings.cs:11
+#: ../src/Clients/MainApp/FSpot.addin.xml.h:9
+#: ../src/Clients/MainApp/ui/main_window.ui.h:60
+msgid "_Remove From Catalog"
+msgstr "_Odstrani iz kataloga"
+
+#: ../data/addin-xml-strings.cs:12
+#: ../src/Clients/MainApp/FSpot.addin.xml.h:8
+#: ../src/Clients/MainApp/ui/main_window.ui.h:41
+msgid "_Delete From Drive"
+msgstr "Iz_briÅi z diska"
+
+#. ../src/Extensions/Editors/FSpot.Editors.Blackout/Resources/BlackoutEditor.addin.xml
+#: ../data/addin-xml-strings.cs:15
+msgid "BlackoutEditor"
+msgstr "Urejevalnik poÄrnenja"
+
+#: ../data/addin-xml-strings.cs:16
+msgid "Blacks out an area of the image."
+msgstr "PoÄrni podroÄje slike."
+
+#: ../data/addin-xml-strings.cs:17
+#: ../data/addin-xml-strings.cs:22
+#: ../data/addin-xml-strings.cs:27
+#: ../data/addin-xml-strings.cs:32
+#: ../data/addin-xml-strings.cs:37
+msgid "Editors"
+msgstr "Urejevalniki"
+
+#. ../src/Extensions/Editors/FSpot.Editors.BW/Resources/BWEditor.addin.xml
+#: ../data/addin-xml-strings.cs:20
+msgid "BWEditor"
+msgstr "BWUrejevalnik"
+
+#: ../data/addin-xml-strings.cs:21
+msgid "Convert to B/W with control. Require Mono 2.2."
+msgstr "Pretvori v ÄB z nadzorom. Zahteva Mono 2.2."
+
+#. ../src/Extensions/Editors/FSpot.Editors.Flip/Resources/FlipEditor.addin.xml
+#: ../data/addin-xml-strings.cs:25
+msgid "FlipEditor"
+msgstr "Urejevalnik zrcaljenja"
+
+#: ../data/addin-xml-strings.cs:26
+msgid "Flips the image horizontally."
+msgstr "Zrcali sliko vodoravno."
+
+#. ../src/Extensions/Editors/FSpot.Editors.Pixelate/Resources/PixelateEditor.addin.xml
+#: ../data/addin-xml-strings.cs:30
+msgid "PixelateEditor"
+msgstr "Urejevalnik pretvorbe v toÄke"
+
+#: ../data/addin-xml-strings.cs:31
+msgid "Pixelates an area of the image."
+msgstr "PodroÄje slike pretvori v toÄke"
+
+#. ../src/Extensions/Editors/FSpot.Editors.Resize/Resources/ResizeEditor.addin.xml
+#: ../data/addin-xml-strings.cs:35
+msgid "ResizeEditor"
+msgstr "Urejevalnik spremembe velikosti"
+
+#: ../data/addin-xml-strings.cs:36
+msgid "Resize the image"
+msgstr "Spremeni velikost slike"
+
+#. ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.addin.xml
+#: ../data/addin-xml-strings.cs:40
+msgid "CD Export"
+msgstr "Izvoz na CD"
+
+#: ../data/addin-xml-strings.cs:41
+msgid "This extension allows you to burn your photos to CD."
+msgstr "Ta razÅiritev vam omogoÄa zapisovanje vaÅih fotografij na CD."
+
+#: ../data/addin-xml-strings.cs:42
+#: ../data/addin-xml-strings.cs:48
+#: ../data/addin-xml-strings.cs:54
+#: ../data/addin-xml-strings.cs:62
+#: ../data/addin-xml-strings.cs:68
+#: ../data/addin-xml-strings.cs:74
+#: ../data/addin-xml-strings.cs:80
+#: ../data/addin-xml-strings.cs:86
+#: ../data/addin-xml-strings.cs:92
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:6
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:5
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:5
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:5
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:5
+msgid "Export"
+msgstr "Izvoz"
+
+#: ../data/addin-xml-strings.cs:43
+msgid "_CD..."
+msgstr "_CD ..."
+
+#. ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.addin.xml
+#: ../data/addin-xml-strings.cs:46
+msgid "FacebookExport"
+msgstr "Izvoz na Facebook"
+
+#: ../data/addin-xml-strings.cs:47
+msgid "Export pictures to facebook"
+msgstr "Izvoz fotografij na Facebook"
+
+#: ../data/addin-xml-strings.cs:49
+msgid "F_acebook..."
+msgstr "F_acebook ..."
+
+#. ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/FlickrExport.addin.xml
+#: ../data/addin-xml-strings.cs:52
+msgid "Flickr Export"
+msgstr "Izvoz na Flickr"
+
+#: ../data/addin-xml-strings.cs:53
+msgid "This extension allows you to export your photos to Flickr and 23hq."
+msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij na Flickr in 23hq."
+
+#: ../data/addin-xml-strings.cs:55
+msgid "_Flickr..."
+msgstr "_Flickr ..."
+
+#: ../data/addin-xml-strings.cs:56
+msgid "_23hq..."
+msgstr "_23hq ..."
+
+#: ../data/addin-xml-strings.cs:57
+msgid "_Zooomr..."
+msgstr "_Zooomr ..."
+
+#. ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/FolderExport.addin.xml
+#: ../data/addin-xml-strings.cs:60
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:10
+msgid "Folder Export"
+msgstr "Izvoz mape"
+
+#: ../data/addin-xml-strings.cs:61
+msgid "This extension allows you to export your photos to HTML galleries, Original galleries or just to a folder."
+msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij v galerije HTML, galerije Origional ali enostavno v mapo."
+
+#: ../data/addin-xml-strings.cs:63
+msgid "F_older..."
+msgstr "_Mapa ..."
+
+#. ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/GalleryExport.addin.xml
+#: ../data/addin-xml-strings.cs:66
+msgid "Gallery Export"
+msgstr "Izvoz v Gallery"
+
+#: ../data/addin-xml-strings.cs:67
+msgid "This extension allows you to export your photos to PHP Gallery (http://gallery.menalto.com)."
+msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij v PHP Gallery (http://gallery.menalto.com)."
+
+#: ../data/addin-xml-strings.cs:69
+msgid "Web _Gallery..."
+msgstr "Spletna _galerija ..."
+
+#. ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/PicasaWebExport.addin.xml
+#: ../data/addin-xml-strings.cs:72
+msgid "PicasaWeb Export"
+msgstr "Izvoz na PicasaWeb"
+
+#: ../data/addin-xml-strings.cs:73
+msgid "This extension allows you to export your photos to PicasaWeb."
+msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij v PicasaWeb."
+
+#: ../data/addin-xml-strings.cs:75
+msgid "_PicasaWeb..."
+msgstr "_PicasaWeb ..."
+
+#. ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/SmugMugExport.addin.xml
+#: ../data/addin-xml-strings.cs:78
+msgid "SmugMug Export"
+msgstr "Izvoz na SmugMug"
+
+#: ../data/addin-xml-strings.cs:79
+msgid "This extension allows you to export your photos to SmugMug."
+msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij v SmugMug."
+
+#: ../data/addin-xml-strings.cs:81
+msgid "_SmugMug..."
+msgstr "_SmugMug ..."
+
+#. ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/TabbloExport.addin.xml
+#: ../data/addin-xml-strings.cs:84
+msgid "Tabblo Export"
+msgstr "Izvoz v Tabblo"
+
+#: ../data/addin-xml-strings.cs:85
+msgid "This extension allows you to export your photos to Tabblo."
+msgstr "Ta razÅiritev vam omogoÄa izvoz vaÅih fotografij v Tabblo."
+
+#: ../data/addin-xml-strings.cs:87
+msgid "_Tabblo..."
+msgstr "_Tabblo ..."
+
+#. ../src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/ZipExport.addin.xml
+#: ../data/addin-xml-strings.cs:90
+msgid "Zip export"
+msgstr "Izvoz v Zip"
+
+#: ../data/addin-xml-strings.cs:91
+msgid "Simple export to Zip file"
+msgstr "Enostaven izvoz v datoteko Zip"
+
+#: ../data/addin-xml-strings.cs:93
+msgid "Compressed fil_e..."
+msgstr "Stisnjena datot_eka ..."
+
+#. ../src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.addin.xml
+#: ../data/addin-xml-strings.cs:96
+msgid "ChangePath"
+msgstr "Spremeni pot"
+
+#: ../data/addin-xml-strings.cs:97
+msgid "UNSTABLE - Please ensure you have a backup of your photos.db before you test this extension. This extension will allow you to change the base path to the your photos. It is very handy if you move your photos from ~/Photos to /OurPhotos for instance. Just ensure you let SqLite continue to process the changes for up to a few hours after f-spot reports finished. It will only change the path to photos which are located under the Photo directory."
+msgstr "NESTABILNO - pred preizkusom te razÅiritve se prepriÄajte, da imate varnostno kopijo photos.db. Ta razÅiritev vam bo dovolila spremembo osnovne poti do vaÅih fotografij.  To je zelo priroÄno, Äe svoje fotografije premikate na primer iz ~/Fotografije v /NaÅeFotografije. PrepriÄajte se, da pustite Sqlite obdelovati spremembe Åe do pol ure potem, ko f-spot sporoÄi, da je konÄal. Spremenjena bo samo pot do fotografij, ki so v mapi Fotografije. "
+
+#: ../data/addin-xml-strings.cs:98
+#: ../data/addin-xml-strings.cs:104
+#: ../data/addin-xml-strings.cs:110
+#: ../data/addin-xml-strings.cs:116
+#: ../data/addin-xml-strings.cs:122
+#: ../data/addin-xml-strings.cs:128
+#: ../data/addin-xml-strings.cs:134
+#: ../data/addin-xml-strings.cs:140
+#: ../data/addin-xml-strings.cs:146
+#: ../data/addin-xml-strings.cs:152
+#: ../src/Clients/MainApp/FSpot.addin.xml.h:7
+msgid "Tools"
+msgstr "Orodja"
+
+#: ../data/addin-xml-strings.cs:99
+msgid "Change path to photos"
+msgstr "Spremeni pot v slike"
+
+#. ../src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Resources/DevelopInUFRaw.addin.xml
+#: ../data/addin-xml-strings.cs:102
+msgid "DevelopInUFRaw"
+msgstr "RazvojVUFRaw"
+
+#: ../data/addin-xml-strings.cs:103
+msgid ""
+"Develop the image in UFRaw, saves the result as a new version\\n"
+"\\n"
+"Note: Require ufraw 0.13 or CVS version newer than 2007-09-06 !!!"
+msgstr ""
+"Razvije sliko v UFRaw, shrani rezultat kot novo razliÄico\\n"
+"\\n"
+"Zahteva ufraw 0.13 ali CVS razliÄico novejÅo kot 06.09.2007 !!!"
+
+#: ../data/addin-xml-strings.cs:105
+msgid "Develop in UFRaw"
+msgstr "Razvoj v UFRaw"
+
+#. ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/LiveWebGallery.addin.xml
+#: ../data/addin-xml-strings.cs:108
+msgid "LiveWebGallery"
+msgstr "Åiva spletna galerija"
+
+#: ../data/addin-xml-strings.cs:109
+msgid "Share photos with other people on the same network via Web Browser"
+msgstr "Souporaba fotografij z drugimi ljudmi na istem omreÅju preko spletnega brskalnika"
+
+#: ../data/addin-xml-strings.cs:111
+msgid "Live Web Gallery"
+msgstr "Åiva spletna galerija"
+
+#. ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/MergeDb.addin.xml
+#: ../data/addin-xml-strings.cs:114
+msgid "MergeDb"
+msgstr "ZdruÅi podatkovne zbirke"
+
+#: ../data/addin-xml-strings.cs:115
+msgid "Merge another db back to the main one"
+msgstr "ZdruÅi drugo podatkovno zbirko nazaj z glavno"
+
+#: ../data/addin-xml-strings.cs:117
+msgid "Merge Db"
+msgstr "ZdruÅi podatkovne zbirke"
+
+#. ../src/Extensions/Tools/FSpot.Tools.MetaPixel/MetaPixel.addin.xml
+#: ../data/addin-xml-strings.cs:120
+msgid "MetaPixel"
+msgstr "MetaPixel"
+
+#: ../data/addin-xml-strings.cs:121
+msgid "Create photomosaics using MetaPixel (http://www.complang.tuwien.ac.at/schani/metapixel/)"
+msgstr "Ustvari mozaike fotografij z uproabo MetaPixel (http://www.complang.tuwien.ac.at/schani/metapixel/)"
+
+#: ../data/addin-xml-strings.cs:123
+msgid "Create p_hotomosaic"
+msgstr "Ustvari foto-mozaik"
+
+#. ../src/Extensions/Tools/FSpot.Tools.PictureTile/PictureTile.addin.xml
+#: ../data/addin-xml-strings.cs:126
+msgid "PictureTile"
+msgstr "PictureTile"
+
+#: ../data/addin-xml-strings.cs:127
+msgid "Create photo wall using PictureTile by Jamie Zawinski (http://www.jwz.org/picturetile/)"
+msgstr "Ustvari slikovni zid s PictureTile Jamieja Zawinskija (http://www.jwz.org/picturetile/)"
+
+#: ../data/addin-xml-strings.cs:129
+msgid "Create photo_wall"
+msgstr "Ustvari slikovni _zid"
+
+#. ../src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Resources/RawPlusJpeg.addin.xml
+#: ../data/addin-xml-strings.cs:132
+msgid "RawPlusJpeg"
+msgstr "RawPlusJpeg"
+
+#: ../data/addin-xml-strings.cs:133
+msgid "Merge RAW+Jpeg as multiple versions of the same photo"
+msgstr "ZadruÅi RAW in jpeg kot veÄ razliÄic enake fotografije"
+
+#: ../data/addin-xml-strings.cs:135
+msgid "Merge Raw"
+msgstr "ZdruÅi surove"
+
+#. ../src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Resources/RetroactiveRoll.addin.xml
+#: ../data/addin-xml-strings.cs:138
+msgid "RetroactiveRoll"
+msgstr "Retroaktivni zvitki"
+
+#: ../data/addin-xml-strings.cs:139
+msgid "Retroactively assign old photos to import rolls"
+msgstr "Retroaktivno dodeli stare fotografije uvoznim zvitkom"
+
+#: ../data/addin-xml-strings.cs:141
+msgid "Reassign to new import roll"
+msgstr "Ponovno dodeli novemu uvoznemu zvitku"
+
+#. ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfig.addin.xml
+#: ../data/addin-xml-strings.cs:144
+#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:6
+msgid "Screensaver Configuration"
+msgstr "Nastavitve ohranjevalnika zaslona"
+
+#: ../data/addin-xml-strings.cs:145
+msgid "Screensaver options"
+msgstr "MoÅnosti ohranjevalnika zaslona"
+
+#: ../data/addin-xml-strings.cs:147
+msgid "Configure Screensaver"
+msgstr "Nastavi ohranjevalnik zaslona"
+
+#. ../src/Extensions/Tools/FSpot.Tools.SyncCatalog/SyncCatalog.addin.xml
+#: ../data/addin-xml-strings.cs:150
+msgid "SyncMetaData"
+msgstr "Metapodatki Usklajevanja"
+
+#: ../data/addin-xml-strings.cs:151
+msgid "Sync MetaData information of all catalog with Photos"
+msgstr "Uskladi podrobnosti metapodatkov za vse kataloge s fotografijami "
+
+#: ../data/addin-xml-strings.cs:153
+msgid "Sync Catalog with Photos"
+msgstr "Uskladi katalog s fotografijami"
+
+#. ../src/Extensions/Transitions/FSpot.Transitions.Cover/Resources/CoverTransition.addin.xml
+#: ../data/addin-xml-strings.cs:156
+msgid "Cover Transition"
+msgstr "Prehod prekrivanja"
+
+#: ../data/addin-xml-strings.cs:157
+msgid "A Slideshow transition that covers images"
+msgstr "Prehod diaprestavitve, ki pokrije slike"
+
+#: ../data/addin-xml-strings.cs:158
+#: ../data/addin-xml-strings.cs:163
+#: ../data/addin-xml-strings.cs:168
+msgid "Transitions"
+msgstr "Prehodi"
+
+#. ../src/Extensions/Transitions/FSpot.Transitions.Dissolve/Resources/DissolveTransition.addin.xml
+#: ../data/addin-xml-strings.cs:161
+msgid "Dissolve Transition"
+msgstr "Prehod raztapljanje"
+
+#: ../data/addin-xml-strings.cs:162
+msgid "A Slideshow transition that dissolves images"
+msgstr "Prehod predstavitve, ki raztopi slike"
+
+#. ../src/Extensions/Transitions/FSpot.Transitions.Push/Resources/PushTransition.addin.xml
+#: ../data/addin-xml-strings.cs:166
+msgid "Push Transition"
+msgstr "Prehod potisk"
+
+#: ../data/addin-xml-strings.cs:167
+msgid "A Slideshow transition that pushes images"
+msgstr "Prehod prestavitve, ki slike potisne"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "F-spot upravljalnik fotografij"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Urejajte, uÅivajte in dajte svoje fotografije v souporabo."
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Upravljalnik fotografij"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Uvozi v F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-_Spot pregledovalnik fotografij"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Pregledovalnik fotografij"
+
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "PrikaÅi prozorne dele."
+
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "OmogoÄite to za interpolacijo pribliÅanih slik."
+
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "ViÅina pogovornega okna uvoza."
+
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "ViÅina glavnega okna."
+
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "ViÅina okna pregledovalnika fotografij."
+
+#: ../f-spot.schemas.in.h:6
+msgid "If the 'transparency' option is set, the color specified in this option will be used as the transparent color when viewing images."
+msgstr "V primeru da je moÅnost 'prozornost' nastavljena, bo barva navedena v tej moÅnosti pri ogledu slik uporabljena kot prozorna barva."
+
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "Interpolacija slike pri poveÄavi."
+
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Razpne glavno okno."
+
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Razpne okno pregledovalnika fotografij."
+
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "Pot do gtkrc po meri za temo F-Spot."
+
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "PokaÅi datume v pogledu sliÄic."
+
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "PokaÅi ocene v pogledu sliÄic."
+
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "PokaÅi oznake v pogledu sliÄic."
+
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "PokaÅi ime datoteke v oknu pregledovalnika."
+
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "PokaÅi filmski trak v glavnem oknu."
+
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "PokaÅi drsnik v glavnem oknu."
+
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "PokaÅi Äasovnico v glavnem oknu."
+
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "PokaÅi orodno vrstico v glavnem oknu."
+
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "PokaÅi ali skrij orodno vrstico v oknu pregledovalnika fotografij."
+
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Velikost ikon oznak prikazanih v stranski vrstici."
+
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "X poloÅaj glavnega okna."
+
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "X poloÅaj okna pregledovalnika fotografij."
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "Y poloÅaj glavnega okna."
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "Y poloÅaj okna pregledovalnika fotografij."
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "Barva za prozorne dele."
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "ViÅina pogovornega okna."
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "ViÅina glavnega okna."
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "ViÅina okna pregledovalnika fotografij."
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "Usmeritev filmskega traku, Äe je prikazan."
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "Usmeritev filmskega traku."
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "Velikost (Åirina) drsnika v glavnemu oknu."
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "Velikost drsnika v glavnemu oknu."
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "Åirina pogovornega okna uvoza."
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "Åirina glavnega okna."
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "Åirina okna pregledovalnika fotografij."
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "Uporabi ime datoteke trenutne fotografije kot naslov okna pregledovalnika."
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Åirina pogovornega okna uvoza."
+
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Åirina glavnega okna."
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Åirina okna pregledovalnika fotografij."
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "Åirina pladnja predogleda slike v pogovornemu oknu uvoza."
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "X poloÅaj glavnega okna"
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "X poloÅaj okna pregledovalnika fotografij."
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Y poloÅaj glavnega okna."
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Y poloÅaj okna pregledovalnika fotografij."
+
+#: ../f-spot.schemas.in.h:45
+msgid "You can choose how to display transparent parts in images. This option has no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR could be useful when viewing icons or other artwork with transparent parts."
+msgstr "MogoÄe je izbrati naÄin prikaza prozornih delov slik. Ta moÅnost ne vpliva na fotografije, vendar je lahko nastavitev te vrednosti na vzorec Åahovnice ali barva po izbiri koristna pri ogledu ikon in ostalih grafiÄnih podobah s prozornimi deli."
+
+#: ../lib/Mono.Google/Mono.Google/CaptchaException.cs:58
+msgid "url"
+msgstr "url"
+
+#: ../lib/Mono.Google/Mono.Google/CaptchaException.cs:59
+msgid "token"
+msgstr "Åeton"
+
+#: ../lib/Mono.Google/Mono.Google/CaptchaException.cs:60
+msgid "captcha_url"
+msgstr "captcha_url"
+
+#: ../lib/Mono.Tabblo/Mono.Tabblo/Connection.cs:132
+#, csharp-format
+msgid "Uploading photo \"{0}\""
+msgstr "PoÅiljanje fotografije \"{0}\""
+
+#: ../lib/Mono.Tabblo/Mono.Tabblo/Connection.cs:206
+msgid "Logging into Tabblo"
+msgstr "Prijavljanje v Tabblo"
+
+#: ../lib/Mono.Tabblo/Mono.Tabblo/Connection.cs:267
+msgid "Obtaining URL for upload"
+msgstr "Pridobivanje URL-ja za nalaganje"
+
+#: ../src/Clients/MainApp/FSpot.addin.xml.h:2
+msgid "Export to"
+msgstr "Izvozi v"
+
+#: ../src/Clients/MainApp/FSpot.addin.xml.h:3
+msgid "Open _With"
+msgstr "Odpri _z"
+
+#: ../src/Clients/MainApp/FSpot.addin.xml.h:4
+#: ../src/Clients/MainApp/ui/main_window.ui.h:15
+msgid "Rem_ove Tag"
+msgstr "Ods_trani oznako"
+
+#: ../src/Clients/MainApp/FSpot/App.cs:319
+#, csharp-format
+msgid "No photos matching {0} found"
+msgstr "Fotografije, ki se sklada z {0}, ni bilo mogoÄe najti"
+
+#: ../src/Clients/MainApp/FSpot/App.cs:320
+#, csharp-format
+msgid ""
+"The tag \"{0}\" is not applied to any photos. Try adding\n"
+"the tag to some photos or selecting a different tag in the\n"
+"F-Spot preference dialog."
+msgstr ""
+"Oznaka \"{0}\" ni uveljavljena. Poskusite z dodajanjem\n"
+"oznake fotografijam ali izberite drugo oznako v\n"
+"pogovornem oknu moÅnosti F-Spot."
+
+#: ../src/Clients/MainApp/FSpot/App.cs:324
+msgid "Search returned no results"
+msgstr "Iskanje ni vrnilo rezultatov"
+
+#: ../src/Clients/MainApp/FSpot/App.cs:325
+msgid ""
+"The tag F-Spot is looking for does not exist. Try\n"
+"selecting a different tag in the F-Spot preference\n"
+"dialog."
+msgstr ""
+"Oznaka, ki jo iÅÄe F-Spot, ne obstaja. Poskusite\n"
+"z izborom druge oznake v pogovornem oknu \n"
+"moÅnosti F-Spot."
+
+#: ../src/Clients/MainApp/FSpot.Database/Updater.cs:768
+msgid "Updating F-Spot Database"
+msgstr "Posodabljanje podatkovne zbirke F-Spot"
+
+#: ../src/Clients/MainApp/FSpot.Database/Updater.cs:769
+msgid "Please wait while your F-Spot gallery's database is updated. This may take some time."
+msgstr "PoÄakati je treba, da se podatkovna zbirka galerije F-Spot do konca posodobi. Postopek lahko traja nekaj Äasa."
+
+#: ../src/Clients/MainApp/FSpot.Editors/AutoStretchEditor.cs:37
+msgid "Auto Color"
+msgstr "Samodejna barva"
+
+#: ../src/Clients/MainApp/FSpot.Editors/ColorEditor.cs:61
+msgid "Adjust Colors"
+msgstr "Prilagajanje barv"
+
+#: ../src/Clients/MainApp/FSpot.Editors/ColorEditor.cs:64
+msgid "Adjust"
+msgstr "Prilagodi"
+
+#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:56
+msgid "4 x 3 (Book)"
+msgstr "4 x 3 (knjiga)"
+
+#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:57
+msgid "4 x 6 (Postcard)"
+msgstr "4 x 6 (razglednica)"
+
+#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:58
+msgid "5 x 7 (L, 2L)"
+msgstr "5 x 7 (L, 2L)"
+
+#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:59
+msgid "8 x 10"
+msgstr "8 x 10"
+
+#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:60
+msgid "Square"
+msgstr "Kvadrat"
+
+#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:63
+msgid "Crop"
+msgstr "ObreÅi"
+
+#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:94
+msgid "Select the area that needs cropping."
+msgstr "Izbor obmoÄja za obrez."
+
+#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:119
+msgid "No Constraint"
+msgstr "Brez omejitev"
+
+#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:120
+msgid "Same as photo"
+msgstr "Enako kot fotografija"
+
+#: ../src/Clients/MainApp/FSpot.Editors/CropEditor.cs:125
+msgid "Custom Ratios..."
+msgstr "Razmerja velikosti po meri"
+
+#: ../src/Clients/MainApp/FSpot.Editors/DesaturateEditor.cs:37
+msgid "Desaturate"
+msgstr "ZmanjÅaj nasiÄenje"
+
+#: ../src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs:41
+msgid "Red-eye Reduction"
+msgstr "ZmanjÅanje rdeÄih oÄi"
+
+#: ../src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs:44
+msgid "Fix!"
+msgstr "Popravi"
+
+#: ../src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs:48
+msgid "Select the eyes you wish to fix."
+msgstr "Izberite oÄi za popravilo."
+
+#: ../src/Clients/MainApp/FSpot.Editors/SepiaEditor.cs:37
+msgid "Sepia Tone"
+msgstr "Sepia uÄinek staranja"
+
+#: ../src/Clients/MainApp/FSpot.Editors/SoftFocusEditor.cs:50
+msgid "Soft Focus"
+msgstr "Mehka izostritev"
+
+#: ../src/Clients/MainApp/FSpot.Editors/TiltEditor.cs:51
+msgid "Straighten"
+msgstr "Poravnava"
+
+#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:82
+msgid "Hide"
+msgstr "Skrij"
+
+#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:84
+msgid "Hide toolbar"
+msgstr "Skrij orodno vrstico"
+
+#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:90
+msgid "Info"
+msgstr "Podatki"
+
+#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:92
+msgid "Image information"
+msgstr "Podatki o sliki"
+
+#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:97
+msgid "Exit fullscreen"
+msgstr "Izhod iz celozaslonskega naÄina"
+
+#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:105
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:341
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:122
+msgid "Slideshow"
+msgstr "Diapredstavitev"
+
+#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:106
+msgid "Start slideshow"
+msgstr "Zagon diapredstavitve"
+
+#: ../src/Clients/MainApp/FSpot/FullScreenView.cs:152
+msgid "Slide transition:"
+msgstr "Prehodi med diapozitivi:"
+
+#: ../src/Clients/MainApp/FSpot/GroupSelector.cs:90
+#: ../src/Clients/MainApp/FSpot/GroupSelector.cs:91
+msgid "More dates"
+msgstr "VeÄ datumov"
+
+#: ../src/Clients/MainApp/FSpot/GroupSelector.cs:93
+#: ../src/Clients/MainApp/FSpot/GroupSelector.cs:94
+msgid "More"
+msgstr "VeÄ"
+
+#: ../src/Clients/MainApp/FSpot/GroupSelector.cs:554
+#: ../src/Clients/MainApp/ui/main_window.ui.h:34
+msgid "_Clear Date Range"
+msgstr "_ÄiÅÄenje datumskega obmoÄja"
+
+#: ../src/Clients/MainApp/FSpot.Import/ImportController.cs:510
+#: ../src/Clients/MainApp/FSpot.Import/ImportController.cs:512
+#: ../src/Clients/MainApp/FSpot.Import/MetadataImporter.cs:72
+msgid "Imported Tags"
+msgstr "UvoÅene oznake"
+
+#: ../src/Clients/MainApp/FSpot/ItemAction.cs:102
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:308
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:105
+msgid "Rotate Left"
+msgstr "Zavrti levo"
+
+#: ../src/Clients/MainApp/FSpot/ItemAction.cs:103
+msgid "Rotate picture left"
+msgstr "Vrtenje slike levo"
+
+#: ../src/Clients/MainApp/FSpot/ItemAction.cs:114
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:312
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:110
+msgid "Rotate Right"
+msgstr "Zavrti desno"
+
+#: ../src/Clients/MainApp/FSpot/ItemAction.cs:115
+msgid "Rotate picture right"
+msgstr "Vrtenje slike desno"
+
+#: ../src/Clients/MainApp/FSpot/ItemAction.cs:125
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:938
+msgid "Next"
+msgstr "Naslednja"
+
+#: ../src/Clients/MainApp/FSpot/ItemAction.cs:126
+msgid "Next picture"
+msgstr "Naslednja slika"
+
+#: ../src/Clients/MainApp/FSpot/ItemAction.cs:146
+msgid "Previous"
+msgstr "Predhodni"
+
+#: ../src/Clients/MainApp/FSpot/ItemAction.cs:147
+msgid "Previous picture"
+msgstr "Predhodna slika"
+
+#: ../src/Clients/MainApp/FSpot/Literal.cs:225
+#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:182
+#, csharp-format
+msgid "Not {0}"
+msgstr "Ne {0}"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:301
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:229
+#: ../src/Clients/MainApp/ui/import.ui.h:3
+msgid "Import"
+msgstr "Uvozi"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:303
+msgid "Import new images"
+msgstr "Uvoz novih slik"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:319
+#: ../src/Clients/MainApp/ui/main_window.ui.h:3
+msgid "Browse"
+msgstr "Prebrskaj"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:323
+msgid "Browse many photos simultaneously"
+msgstr "Brskanje po veÄ fotografijah hkrati"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:327
+msgid "Edit Image"
+msgstr "Uredi sliko"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:331
+msgid "View and edit a photo"
+msgstr "Prikaz in urejanje fotografije"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:336
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:117
+msgid "Fullscreen"
+msgstr "Celozaslonski naÄin"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:338
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:119
+msgid "View photos fullscreen"
+msgstr "Celozaslonski ogled fotografij"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:343
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:124
+msgid "View photos in a slideshow"
+msgstr "Ogled fotografij v diapredstavitvi"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:358
+msgid "Previous photo"
+msgstr "Predhodna fotografija"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:363
+msgid "Next photo"
+msgstr "Naslednja fotografija"
+
+#. Don't care otherwise, Tags sounds reasonable
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:376
+#: ../src/Clients/MainApp/FSpot.Widgets/Sidebar.cs:75
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:935
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1107
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1147
+msgid "Tags"
+msgstr "Oznake"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:440
+msgid "Show _Find Bar"
+msgstr "PokaÅi is_kalno vrstico"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:443
+msgid "Hide _Find Bar"
+msgstr "Skrij _iskalno vrstico"
+
+#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:671
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs:154
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ProgressDialog.cs:111
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:134
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:391
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:242
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:214
+#, csharp-format
+msgid "{0} of {1}"
+msgstr "{0} od {1}"
+
+#. Translators, The singular case will never happen here.
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1745
+#, csharp-format
+msgid "Merge the selected tag"
+msgid_plural "Merge the {0} selected tags?"
+msgstr[0] "Ali naj bo zdruÅenih {0} izbranih oznak?"
+msgstr[1] "Ali naj bo zdruÅena {0} izbrana oznaka?"
+msgstr[2] "Ali naj bosta zdruÅeni {0} izbrani oznaki?"
+msgstr[3] "Ali naj bodo zdruÅene {0} izbrane oznake?"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1772
+msgid "This operation will merge the selected tags and any sub-tags into a single tag."
+msgstr "To dejanje bo zdruÅilo izbrane oznake in morebitne pod-oznake v eno samo oznako."
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1774
+msgid "_Merge Tags"
+msgstr "Z_druÅi oznake"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1979
+#, csharp-format
+msgid "{0} Photo out of {1}"
+msgid_plural "{0} Photos out of {1}"
+msgstr[0] "{0} fotografij od {1}"
+msgstr[1] "{0} fotografija od {1}"
+msgstr[2] "{0} fotografiji od {1}"
+msgstr[3] "{0} fotografije od {1}"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1981
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:499
+#, csharp-format
+msgid "{0} Photo"
+msgid_plural "{0} Photos"
+msgstr[0] "{0} Fotografij"
+msgstr[1] "{0} Fotografija"
+msgstr[2] "{0} Fotografiji"
+msgstr[3] "{0} Fotografije"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:1984
+#, csharp-format
+msgid " ({0} selected)"
+msgid_plural " ({0} selected)"
+msgstr[0] " ({0} izbranih)"
+msgstr[1] " ({0} izbrana)"
+msgstr[2] " ({0} izbrani)"
+msgstr[3] " ({0} izbrane)"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2065
+msgid "_Ok"
+msgstr "_V redu"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2066
+msgid "Error Deleting Picture"
+msgstr "Napaka med brisanjem slike"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2071
+#, csharp-format
+msgid "No permission to delete the file:{1}{0}"
+msgstr "Ni dovoljenj za izbris datoteke:{1}{0}"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2075
+#, csharp-format
+msgid "An error of type {0} occurred while deleting the file:{2}{1}"
+msgstr "Med brisanjem datoteke {2} {1} je priÅlo do napake vrste {0}"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2107
+#, csharp-format
+msgid "Delete the selected photo permanently?"
+msgid_plural "Delete the {0} selected photos permanently?"
+msgstr[0] "Ali naj bo trajno izbrisanih {0} izbranih fotografij?"
+msgstr[1] "Ali naj bo trajno izbrisana {0} izbrana fotografija?"
+msgstr[2] "Ali naj bosta trajno izbrisani {0} izbrani fotografiji?"
+msgstr[3] "Ali naj bodo trajno izbrisane {0} izbrane fotografije?"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2111
+msgid "This deletes all versions of the selected photo from your drive."
+msgid_plural "This deletes all versions of the selected photos from your drive."
+msgstr[0] "To bo izbrisalo vse razliÄice izbranih fotografij z diska."
+msgstr[1] "To bo izbrisalo vse razliÄice izbrane fotografije z diska."
+msgstr[2] "To bo izbrisalo vse razliÄice izbranih fotografij z diska."
+msgstr[3] "To bo izbrisalo vse razliÄice izbranih fotografij z diska."
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2114
+msgid "_Delete photo"
+msgid_plural "_Delete photos"
+msgstr[0] "Izbri_Åi fotografije"
+msgstr[1] "Izbri_Åi fotografijo"
+msgstr[2] "Izbri_Åi fotografiji"
+msgstr[3] "Izbri_Åi fotografije"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2150
+#, csharp-format
+msgid "Remove the selected photo from F-Spot?"
+msgid_plural "Remove the {0} selected photos from F-Spot?"
+msgstr[0] "Ali naj se odstrani {0} izbranih fotografij iz F-Spot ?"
+msgstr[1] "Ali naj se odstrani {0} izbrano fotografijo iz F-Spot ?"
+msgstr[2] "Ali naj se odstranita {0} izbrani fotografij iz F-Spot ?"
+msgstr[3] "Ali naj se odstranijo {0} izbrane fotografije iz F-Spot ?"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2155
+msgid "If you remove photos from the F-Spot catalog all tag information will be lost. The photos remain on your computer and can be imported into F-Spot again."
+msgstr "Ob odstranjevanju fotografij iz kataloga F-Spot bodo vsi podatki o oznakah izgubljeni. Fotografije bodo ostale na vaÅem raÄunalniku in jih lahko ponovno uvozite v F-Spot."
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2156
+msgid "_Remove from Catalog"
+msgstr "_Odstrani iz kataloga"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2230
+#, csharp-format
+msgid "Delete tag \"{0}\"?"
+msgstr "Izbris oznake \"{0}\"?"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2232
+#, csharp-format
+msgid "Delete the {0} selected tags?"
+msgstr "Izbris {0} izbrane oznake ?"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2237
+msgid "photo"
+msgid_plural "photos"
+msgstr[0] "fotografije"
+msgstr[1] "fotografija"
+msgstr[2] "fotografiji"
+msgstr[3] "fotografije"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2239
+#, csharp-format
+msgid "If you delete this tag, the association with {0} {1} will be lost."
+msgid_plural "If you delete these tags, the association with {0} {1} will be lost."
+msgstr[0] "Ob izbrisu oznak, bo povezljivost z {0} {1} izgubljena."
+msgstr[1] "Ob izbrisu oznake, bo povezljivost z {0} {1} izgubljena."
+msgstr[2] "Ob izbrisu oznak, bo povezljivost z {0} {1} izgubljena."
+msgstr[3] "Ob izbrisu oznak, bo povezljivost z {0} {1} izgubljena."
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2244
+msgid "_Delete tag"
+msgid_plural "_Delete tags"
+msgstr[0] "Iz_briÅi oznake"
+msgstr[1] "Iz_briÅi oznako"
+msgstr[2] "Iz_briÅi oznaki"
+msgstr[3] "Iz_briÅi oznake"
+
+#. A Category is not empty. Can not delete it.
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2258
+msgid "Tag is not empty"
+msgstr "Oznaka ni prazna"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2259
+#, csharp-format
+msgid "Can not delete tags that have tags within them.  Please delete tags under \"{0}\" first"
+msgstr "Ni mogoÄe izbrisati oznak, ki imajo oznake znotraj njih. Najprej izbriÅite oznake pod \"{0}\""
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2711
+msgid "Rotate selected photo left"
+msgid_plural "Rotate selected photos left"
+msgstr[0] "Vrtenje izbranih fotografij levo"
+msgstr[1] "Vrtenje izbrane fotografije levo"
+msgstr[2] "Vrtenje izbranih fotografij levo"
+msgstr[3] "Vrtenje izbranih fotografij levo"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2724
+msgid "Rotate selected photo right"
+msgid_plural "Rotate selected photos right"
+msgstr[0] "Vrtenje izbranih fotografij desno"
+msgstr[1] "Vrtenje izbrane fotografije desno"
+msgstr[2] "Vrtenje izbranih fotografij desno"
+msgstr[3] "Vrtenje izbranih fotografij desno"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2735
+#, csharp-format
+msgid "Find _Selected Tag"
+msgid_plural "Find _Selected Tags"
+msgstr[0] "IÅÄi _izbrane oznake"
+msgstr[1] "IÅÄi _izbrano oznako "
+msgstr[2] "IÅÄi _izbrani oznaki"
+msgstr[3] "IÅÄi _izbrane oznake"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2739
+#, csharp-format
+msgid "Find Selected Tag _With"
+msgid_plural "Find Selected Tags _With"
+msgstr[0] "IÅÄi izbrane oznake _z"
+msgstr[1] "IÅÄi izbrano oznako _z"
+msgstr[2] "IÅÄi izbrani oznaki _z"
+msgstr[3] "IÅÄi izbrane oznake _z"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2780
+msgid "Create New Version?"
+msgid_plural "Create New Versions?"
+msgstr[0] "Ustvari nove razliÄice?"
+msgstr[1] "Ustvari novo razliÄico?"
+msgstr[2] "Ustvari novi razliÄici?"
+msgstr[3] "Ustvari nove razliÄice?"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2782
+#, csharp-format
+msgid "Before launching {1}, should F-Spot create a new version of the selected photo to preserve the original?"
+msgid_plural "Before launching {1}, should F-Spot create new versions of the selected photos to preserve the originals?"
+msgstr[0] "Ali naj pred zagonom {1} F-spot ustvari nove razliÄice izbranih fotografij, da ohrani izvirnike?"
+msgstr[1] "Ali naj pred zagonom {1} F-spot ustvari nove razliÄice izbrane fotografije, da ohrani izvirnik?"
+msgstr[2] "Ali naj pred zagonom {1} F-spot ustvari nove razliÄice izbranih fotografij, da ohrani izvirnika?"
+msgstr[3] "Ali naj pred zagonom {1} F-spot ustvari nove razliÄice izbranih fotografij, da ohrani izvirnike?"
+
+#: ../src/Clients/MainApp/FSpot/MainWindow.cs:2804
+msgid "XCF version"
+msgstr "RazliÄica XCF"
+
+#. Note for translators: Reparented is a picture becoming a version of another one
+#: ../src/Clients/MainApp/FSpot/Photo.cs:430
+msgid "Reparented"
+msgstr "Lastnik je bil spremenjen"
+
+#: ../src/Clients/MainApp/FSpot/Photo.cs:448
+#, csharp-format
+msgid "Modified"
+msgid_plural "Modified ({0})"
+msgstr[0] "Spremenjenih ({0})"
+msgstr[1] "Spremenjena ({0})"
+msgstr[2] "Spremenjeni ({0})"
+msgstr[3] "Spremenjene ({0})"
+
+#: ../src/Clients/MainApp/FSpot/Photo.cs:471
+#, csharp-format
+msgid "Modified in {1}"
+msgstr "Spremenjena v {1}"
+
+#: ../src/Clients/MainApp/FSpot/Photo.cs:471
+#, csharp-format
+msgid "Modified in {1} ({0})"
+msgstr "Spremenjena v {1} ({0})"
+
+#: ../src/Clients/MainApp/FSpot/PhotoStore.cs:202
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:17
+msgid "Original"
+msgstr "Izvorno"
+
+#: ../src/Clients/MainApp/FSpot/PhotoView.cs:353
+msgid "Description:"
+msgstr "Opis:"
+
+#: ../src/Clients/MainApp/FSpot/Preferences.cs:191
+msgid "Photos"
+msgstr "Fotografije"
+
+#: ../src/Clients/MainApp/FSpot/PrintOperation.cs:54
+msgid "Image Settings"
+msgstr "Nastavitve slik"
+
+#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:84
+msgid "Find: "
+msgstr "Najdi: "
+
+#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:89
+msgid "Untagged photos"
+msgstr "NeoznaÄene fotografije"
+
+#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:97
+msgid "Rated photos"
+msgstr "Ocenjene fotografije"
+
+#. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
+#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:106
+msgid "Import roll"
+msgstr "Uvozni zvitek"
+
+#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:129
+msgid "Clear search"
+msgstr "ÄiÅÄenje iskanja"
+
+#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:136
+msgid "Refresh search"
+msgstr "OsveÅitev iskanja"
+
+#: ../src/Clients/MainApp/FSpot/QueryWidget.cs:139
+msgid "No matching photos found"
+msgstr "Ni mogoÄe najti skladnih fotografij"
+
+#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:99
+msgid "Unable to rotate this type of photo"
+msgstr "Ni mogoÄe vrteti te vrste fotografij"
+
+#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:115
+msgid "Unable to rotate readonly file"
+msgstr "Ni mogoÄe vrteti datoteke le za branje"
+
+#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:173
+msgid "Rotating photos"
+msgstr "Vrtenje fotografij"
+
+#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:184
+#, csharp-format
+msgid "Rotating photo \"{0}\""
+msgstr "Vrtenje fotografije \"{0}\""
+
+#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:197
+msgid "Directory not found"
+msgstr "Mape ni mogoÄe najti"
+
+#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:199
+msgid "File not found"
+msgstr "Datoteke ni mogoÄe najti"
+
+#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:217
+#, csharp-format
+msgid "Unable to rotate photo"
+msgid_plural "Unable to rotate {0} photos"
+msgstr[0] "Ni mogoÄe zavrteti {0} fotografij"
+msgstr[1] "Ni mogoÄe zavrteti {0} fotografije"
+msgstr[2] "Ni mogoÄe zavrteti {0} fotografij"
+msgstr[3] "Ni mogoÄe zavrteti {0} fotografij"
+
+#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:219
+#, csharp-format
+msgid "The photo could not be rotated because it is on a read only file system or media such as a CDROM.  Please check the permissions and try again."
+msgid_plural "{0} photos could not be rotated because they are on a read only file system or media such as a CDROM.  Please check the permissions and try again."
+msgstr[0] "{0} fotografij ni bilo mogoÄe zavrteti, ker se nahajajo na datoteÄnem sistemu le za branje ali na mediju kot je CDROM. Preverite dovoljenja in poskusite znova."
+msgstr[1] "{0} fotografije ni bilo mogoÄe zavrteti, ker se nahaja na datoteÄnem sistemu le za branje ali na mediju kot je CDROM. Preverite dovoljenja in poskusite znova."
+msgstr[2] "{0} fotografij ni bilo mogoÄe zavrteti, ker se nahajati na datoteÄnem sistemu le za branje ali na mediju kot je CDROM. Preverite dovoljenja in poskusite znova."
+msgstr[3] "{0} fotografij ni bilo mogoÄe zavrteti, ker se nahajajo na datoteÄnem sistemu le za branje ali na mediju kot je CDROM. Preverite dovoljenja in poskusite znova."
+
+#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:246
+#, csharp-format
+msgid "Received error \"{0}\" while attempting to rotate {1}"
+msgstr "Med poskusom vrtenja {1} je priÅlo do napake \"{0}\""
+
+#: ../src/Clients/MainApp/FSpot/RotateCommand.cs:251
+msgid "Error while rotating photo."
+msgstr "Napaka med vrtenjem fotografije."
+
+#: ../src/Clients/MainApp/FSpot/SendEmail.cs:233
+msgid "Preparing email"
+msgstr "Pripravljanje elektronske poÅte"
+
+#: ../src/Clients/MainApp/FSpot/SendEmail.cs:277
+#, csharp-format
+msgid "Exporting picture \"{0}\""
+msgstr "IzvaÅanje slike \"{0}\""
+
+#: ../src/Clients/MainApp/FSpot/SendEmail.cs:296
+msgid "Error processing image"
+msgstr "Napaka med obdelavo slike"
+
+#: ../src/Clients/MainApp/FSpot/SendEmail.cs:297
+#, csharp-format
+msgid "An error occured while processing \"{0}\": {1}"
+msgstr "Med obdelavo \"{0}\" je priÅlo do napake: {1}"
+
+#. Send the mail :)
+#: ../src/Clients/MainApp/FSpot/SendEmail.cs:310
+msgid "My Photos"
+msgstr "Moje fotografije"
+
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:107
+msgid "Rotate photo left"
+msgstr "Vrtenje fotografije v levo"
+
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:112
+msgid "Rotate photo right"
+msgstr "Vrtenje fotografije v desno"
+
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:148
+msgid "Folder"
+msgstr "Mapa"
+
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:373
+msgid "Open"
+msgstr "Odpri"
+
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:376
+msgid "Select Folder"
+msgstr "Izbor mape"
+
+#: ../src/Clients/MainApp/FSpot/SingleView.cs:460
+msgid "Set as Background"
+msgstr "Nastavi kot ozadje"
+
+#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:67
+#, csharp-format
+msgid "Include Photos Tagged \"{0}\""
+msgstr "VkljuÄi fotografije oznaÄene z \"{0}\""
+
+#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:72
+#, csharp-format
+msgid "Exclude Photos Tagged \"{0}\""
+msgstr "IzkljuÄi fotografije oznaÄene z \"{0}\""
+
+#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:77
+msgid "Remove From Search"
+msgstr "Odstrani iz iskanja"
+
+#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:121
+#, csharp-format
+msgid "Find _With"
+msgid_plural "Find _With"
+msgstr[0] "IÅÄi _z"
+msgstr[1] "IÅÄi _z"
+msgstr[2] "IÅÄi _z"
+msgstr[3] "IÅÄi _z"
+
+#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:147
+msgid "All"
+msgstr "Vse"
+
+#: ../src/Clients/MainApp/FSpot/TagQueryWidget.cs:306
+msgid "Drag tags here to search for them"
+msgstr "Za iskanje po oznakah jih povlecite sem"
+
+#: ../src/Clients/MainApp/FSpot/TagSelectionWidget.cs:521
+msgid "Error renaming tag"
+msgstr "Napaka med preimenovanjem oznake"
+
+#: ../src/Clients/MainApp/FSpot/TagSelectionWidget.cs:522
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagDialog.cs:99
+#: ../src/Clients/MainApp/TagCommands.cs:139
+msgid "This name is already in use"
+msgstr "Ime je Åe v uporabi"
+
+#: ../src/Clients/MainApp/FSpot/TagStore.cs:222
+msgid "Favorites"
+msgstr "Priljubljeno"
+
+#: ../src/Clients/MainApp/FSpot/TagStore.cs:227
+msgid "Hidden"
+msgstr "Skrito"
+
+#: ../src/Clients/MainApp/FSpot/TagStore.cs:235
+msgid "People"
+msgstr "Ljudje"
+
+#: ../src/Clients/MainApp/FSpot/TagStore.cs:240
+msgid "Places"
+msgstr "Mesta"
+
+#: ../src/Clients/MainApp/FSpot/TagStore.cs:245
+msgid "Events"
+msgstr "Dogodki"
+
+#. The label for the root category is used in new and edit tag dialogs
+#: ../src/Clients/MainApp/FSpot/TagStore.cs:257
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:441
+msgid "(None)"
+msgstr "(Brez)"
+
+#: ../src/Clients/MainApp/FSpot/Term.cs:336
+msgid " and "
+msgstr " in "
+
+#. Operators.Add (Catalog.GetString (" && "));
+#: ../src/Clients/MainApp/FSpot/Term.cs:338
+msgid ", "
+msgstr ","
+
+#: ../src/Clients/MainApp/FSpot/Term.cs:394
+msgid " or "
+msgstr " ali "
+
+#. OPS The operators we support, case insensitive
+#. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
+#: ../src/Clients/MainApp/FSpot/Term.cs:415
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:7
+#: ../src/Clients/MainApp/FSpot.Widgets/FindBar.cs:202
+#: ../src/Clients/MainApp/FSpot.Widgets/FindBar.cs:557
+msgid "or"
+msgstr "ali"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs:123
+msgid "Photo management for GNOME"
+msgstr "Upravljanje fotografij za GNOME"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs:124
+msgid "Copyright  2003-2010 Novell Inc."
+msgstr "Avtorske pravice  2003-2010 Novell Inc."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs:148
+msgid "translator-credits"
+msgstr "Andrej ÅnidarÅiÄ <andrej znidarsic gmail com>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs:153
+msgid "F-Spot Website"
+msgstr "SpletiÅÄe F-Spot"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs:137
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:10
+#, csharp-format
+msgid "Shift all photos by {0}"
+msgstr "Premik vseh fotografij za {0}"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:109
+msgid "Today"
+msgstr "Danes"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:111
+msgid "Yesterday"
+msgstr "VÄeraj"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:113
+msgid "Last 7 days"
+msgstr "Zadnjih 7 dni"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:115
+msgid "Last 30 days"
+msgstr "Zadnjih 30 dni"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:117
+msgid "Last 90 days"
+msgstr "Zadnjih 90 dni"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:119
+msgid "Last 360 days"
+msgstr "Zadnjih 360 dni"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:121
+msgid "Current Week (Mon-Sun)"
+msgstr "Trenutni Teden (Pon-Ned)"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:123
+msgid "Previous Week (Mon-Sun)"
+msgstr "Predhodni Teden (Pon-Ned)"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:139
+#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:1
+msgid "All Images"
+msgstr "Vse slike"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs:141
+msgid "Customized Range"
+msgstr "Obseg po meri"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs:50
+#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:107
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Prejeta je bila izjema \"{0}\". Ni mogoÄe shraniti fotografije {1}"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs:63
+msgid "Error editing photo"
+msgstr "Napaka med urejanjem fotografije"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:64
+#, csharp-format
+msgid "Edit Icon for Tag {0}"
+msgstr "Urejanje ikone za oznako {0}"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:86
+msgid "Select Photo from file"
+msgstr "Izberi fotografijo iz datoteke"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:108
+#, csharp-format
+msgid ""
+"\n"
+"<b>From Photo</b>\n"
+" You can use one of your library photos as an icon for this tag.\n"
+" However, first you must have at least one photo associated\n"
+" with this tag. Please tag a photo as '{0}' and return here\n"
+" to use it as an icon."
+msgstr ""
+"\n"
+"<b>S Fotografije</b>\n"
+" Kot ikono za to oznako lahko uporabite eno od fotografij iz vaÅe\n"
+" knjiÅnice. Najprej morate imeti vsaj eno fotografijo oznaÄeno\n"
+" s to oznako. OznaÄite fotografijo kot '{0}' in se vrnite sem,\n"
+"da jo lahko uporabite kot ikono."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:186
+msgid "Unable to load image"
+msgstr "Ni mogoÄe naloÅiti slike."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:187
+#, csharp-format
+msgid "Unable to load \"{0}\" as icon for the tag"
+msgstr "Ni mogoÄe naloÅiti \"{0}\" kot ikono za oznako"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs:225
+#, csharp-format
+msgid "Photo {0} of {1}"
+msgstr "Fotografija {0} od {1}"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:45
+msgid "Choose Folder..."
+msgstr "Izbor mape ...."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:164
+msgid "Choose Import source..."
+msgstr "Izbor vira uvoza ..."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:176
+msgid "(No Cameras Detected)"
+msgstr "(Ni zaznanih fotoaparatov)"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:211
+msgid ""
+"Checking this box will remove the imported photos from the camera after the import finished successfully.\n"
+"\n"
+"It is generally recommended to backup your photos before removing them from the camera. <b>Use this option at your own risk!</b>"
+msgstr ""
+"Izbira tega polja bo po uspeÅnemu uvozu odstranila uvoÅene fotografije s fotoaparata.\n"
+"\n"
+"PriporoÄamo da pred odstranitvijo svojih fotografij z digitalnega fotoaparata napravite varnostno kopijo. <b>To moÅnost uporabljate na lastno odgovornost!</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:212
+msgid "Warning"
+msgstr "Opozorilo"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:331
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "UvaÅanje fotografij: {0} od {1} ..."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:355
+msgid "Importing photos..."
+msgstr "UvaÅanje fotografij ..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs:362
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "Iskanje fotografij ... (za nadaljevanje lahko Åe kliknite Uvozi)"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs:65
+msgid "Import failures"
+msgstr "Napake uvoza"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs:66
+msgid "Some files failed to import"
+msgstr "Uvoz nekaterih datotek je spodletel"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs:67
+msgid "Some files could not be imported, they might be corrupt or there might be something wrong with the storage on which they reside."
+msgstr "Nekaterih datotek ni bilo mogoÄe uvoziti. Morda so pokvarjene ali pa je morda nekaj narobe z njihovo shrambo."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs:130
+msgid "Details"
+msgstr "Podrobnosti"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs:77
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs:100
+msgid "None"
+msgstr "Brez"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs:79
+msgid "System profile"
+msgstr "Sistemski profil"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs:117
+msgid "Standard theme"
+msgstr "ObiÄajna tema"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs:44
+msgid "Error loading database."
+msgstr "Napaka med nalaganjem podatkovne zbirke."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs:45
+#, csharp-format
+msgid "F-Spot encountered an error while loading the photo database. The old database has be moved to {0} and a new database has been created."
+msgstr "PriÅlo je do napake med nalaganjem podatkovne zbirke fotografij. Stara podatkovna zbirka je bila premaknjena v {0}, zato je bila ustvarjena nova."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs:81
+msgid "Label"
+msgstr "Oznaka"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs:85
+msgid "Ratio"
+msgstr "Razmerje"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs:78
+msgid "Retry"
+msgstr "Poskusi znova"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs:80
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/pickfolder_dialog.ui.h:1
+msgid "Skip"
+msgstr "PreskoÄi"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:1
+msgid "0000:00:00 00:00:00"
+msgstr "0000:00:00 00:00:00"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:2
+msgid "00:00:00"
+msgstr "00:00:00"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:3
+msgid "5"
+msgstr "5"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:4
+msgid "<b>Action</b>"
+msgstr "<b>Dejanje</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:6
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:2
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:3
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:3
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:2
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:2
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:2
+msgid "<b>Photos</b>"
+msgstr "<b>Fotografije</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:6
+msgid "<b>Reference Photo</b>"
+msgstr "<b>ReferenÄna fotografija</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:7
+msgid "Adjust Time"
+msgstr "Prilagodi Äas"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:8
+msgid "Adjusted date: "
+msgstr "Prilagojen datum:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:9
+msgid "Current date:"
+msgstr "Trenutni datum:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:11
+msgid "Space all photos by"
+msgstr "Razmakni vse fotografije za"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:12
+msgid "difference:"
+msgstr "razlika:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui.h:13
+msgid "min. Starting at {0}"
+msgstr "najmanjÅi zaÄetek pri {0}"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui.h:1
+msgid "C_reate"
+msgstr "Ustva_ri"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui.h:2
+msgid "Create _icon for this tag when first used"
+msgstr "Ustvari _ikono za to oznako ob prvi uporabi"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr "N_adrejena oznaka:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "Ime _oznake:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:1
+msgid "<b>End Date</b>"
+msgstr "<b>KonÄni datum</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:2
+msgid "<b>Select period</b>"
+msgstr "<b>Izberi obdobje</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:3
+msgid "<b>Start Date</b>"
+msgstr "<b>ZaÄetni datum</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:4
+msgid "Cancel, do not change the current timeline. "
+msgstr "PrekliÄi, ne spremeni trenutne Äasovnice."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:5
+msgid "Only photos taken within these dates will be displayed."
+msgstr "Prikazane bodo le fotografije znotraj teh datumov."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui.h:6
+msgid "Set date range"
+msgstr "Nastavi obseg datumov"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui.h:1
+msgid "Edit Tag"
+msgstr "Urejanje oznake"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui.h:2
+msgid "Edit icon"
+msgstr "Urejanje ikone"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui.h:4
+msgid "_Icon:"
+msgstr "_Ikona:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:1
+msgid "<b>From External Photo</b>"
+msgstr "<b>Iz zunanje fotografije</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:2
+msgid "<b>From Photo</b>"
+msgstr "<b>Iz fotografije</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:3
+msgid "<b>Predefined icons</b>"
+msgstr "<b>Pred doloÄene ikone</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:4
+msgid "<b>Preview</b>"
+msgstr "<b>Predogled</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:5
+msgid "Design icon from"
+msgstr "Oblika ikone od "
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:6
+msgid "Edit Tag Icon"
+msgstr "Urejanje ikone oznake"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui.h:7
+msgid "No _image"
+msgstr "_Brez slike"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:1
+msgid "<b>View all pictures imported</b>"
+msgstr "<b>Ogled vseh uvoÅenih slik</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:2
+msgid "Display only those photos that were imported in specified Rolls."
+msgstr "Prikaz le tistih fotografij, ki so bile uvoÅene v navedenih zvitkih."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
+msgid "Filter on selected rolls"
+msgstr "Filter na izbranih zvitkih"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
+msgid "Number of photos in selected rolls:"
+msgstr "Åtevilo fotografij v izbranih zvitkih:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
+msgid "Show all photos."
+msgstr "PokaÅi vse fotografije."
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
+msgid "after"
+msgstr "za"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:7
+#: ../src/Clients/MainApp/FSpot.Widgets/FindBar.cs:202
+#: ../src/Clients/MainApp/FSpot.Widgets/FindBar.cs:558
+msgid "and"
+msgstr "in"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:8
+msgid "at"
+msgstr "ob"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui.h:9
+msgid "between"
+msgstr "med"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:1
+msgid "Color profile for display:"
+msgstr "Barvni profil za zaslon:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:2
+msgid "Color profile for printing:"
+msgstr "Barvni profil za tiskanje:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:3
+msgid "F-Spot Preferences"
+msgstr "MoÅnosti F-Spot"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:4
+msgid "F-Spot appearance:"
+msgstr "Videz F-spot:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:5
+msgid ""
+"Inside the image files when possible\n"
+"<small>Makes them accessible to other image-editing programs.</small>"
+msgstr ""
+"Znotraj slikovnih datotek, Äe je mogoÄe\n"
+"<small>To naredi slike dostopne ostalim programom za urejanje slik.</small>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:7
+msgid ""
+"Never modify image files.\n"
+"<small>Write XMP files next to the images instead.</small>"
+msgstr ""
+"Nikoli ne spreminjaj slikovnih datotek.\n"
+"<small>Namesto tega zapiÅi datoteke XMP poleg slik.</small>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:9
+msgid "Select A Folder"
+msgstr "Izbira mape"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:10
+msgid "Separately from the image files"
+msgstr "LoÄeno od slikovnih datotek"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:11
+msgid "Store tags and descriptions for photos:"
+msgstr "Shranjevanje oznak in opisov fotografij:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui.h:12
+msgid "When importing photos, copy them to:"
+msgstr "Pri uvaÅanju fotografij jih kopiraj v:"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/RatingFilterDialog.ui.h:1
+msgid "<b>Max Rating</b>"
+msgstr "<b>NajviÅja Ocena</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/RatingFilterDialog.ui.h:2
+msgid "<b>Min Rating</b>"
+msgstr "<b>NajniÅja Ocena</b>"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/RatingFilterDialog.ui.h:3
+msgid "Set Rating Filter"
+msgstr "Nastavitev filtrov ocen"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/RepairDialog.ui.h:1
+msgid "Repair"
+msgstr "Popravi"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/SelectionRatioDialog.ui.h:1
+msgid "Manage your custom selection ratios"
+msgstr "Upravljanje razmerij za izbiranje po meri"
+
+#: ../src/Clients/MainApp/FSpot.UI.Dialog/ui/SelectionRatioDialog.ui.h:2
+msgid "Selection Constraints"
+msgstr "Izbira omejitev"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/EditorPage.cs:55
+#: ../src/Clients/MainApp/FSpot.Widgets/Sidebar.cs:73
+msgid "Edit"
+msgstr "Urejanje"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/EditorPage.cs:223
+#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs:66
+msgid "No selection available"
+msgstr "Na voljo ni nobene izbire"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/EditorPage.cs:224
+msgid "This tool requires an active selection. Please select a region of the photo and try the operation again"
+msgstr "Orodje zahteva dejavno izbiro. Izberite obmoÄje na fotografiji in poskusite znova"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/EditorPage.cs:242
+msgid "Error saving adjusted photo"
+msgid_plural "Error saving adjusted photos"
+msgstr[0] "Napaka med shranjevanjem prilagojenih fotografij"
+msgstr[1] "Napaka med shranjevanjem prilagojene fotografije"
+msgstr[2] "Napaka med shranjevanjem prilagojenih fotografij"
+msgstr[3] "Napaka med shranjevanjem prilagojenih fotografij"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/EditorPage.cs:244
+#, csharp-format
+msgid "Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."
+msgstr "Prejeta je bila izjema \"{0}\". Datoteke RAW je treba pred urejanjem razviti v JPEG."
+
+#: ../src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs:497
+msgid "_Horizontal"
+msgstr "_Vodoravno"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs:501
+msgid "_Vertical"
+msgstr "_NavpiÄno"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/FindBar.cs:83
+msgid "Find:"
+msgstr "Najdi:"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/FolderTreePage.cs:44
+msgid "Folders"
+msgstr "Mape"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/FolderTreeView.cs:159
+msgid "Filesystem"
+msgstr "DatoteÄni sistem"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:125
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:401
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:451
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:457
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:461
+msgid "(Unknown)"
+msgstr "(neznano)"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:305
+msgid "Histogram"
+msgstr "Histogram"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:324
+msgid "Image Information"
+msgstr "Podrobnosti o sliki"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:332
+#, csharp-format
+msgid "{0} Photos"
+msgstr "{0} fotografij"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:334
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:10
+msgid "Name"
+msgstr "Ime"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:346
+msgid "Version"
+msgstr "RazliÄica"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:361
+#: ../src/Clients/MainApp/PhotoVersionMenu.cs:86
+msgid "(No Edits)"
+msgstr "(Ni urejanj)"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:365
+#, csharp-format
+msgid "(One Edit)"
+msgid_plural "({0} Edits)"
+msgstr[0] "({0} urejanj)"
+msgstr[1] "({0} urejanje)"
+msgstr[2] "({0} urejanji)"
+msgstr[3] "({0} urejanja)"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:371
+msgid "Date"
+msgstr "Datum"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:371
+msgid "Show Date"
+msgstr "PokaÅi datum"
+
+#. Note for translators: {0} is a date, {1} and {2} are times.
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:382
+#, csharp-format
+msgid ""
+"On {0} between \n"
+"{1} and {2}"
+msgstr ""
+"Na {0} med \n"
+"{1} in {2}"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:387
+#, csharp-format
+msgid ""
+"Between {0} \n"
+"and {1}"
+msgstr ""
+"Med {0} \n"
+"in {1}"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:393
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:4
+msgid "Size"
+msgstr "Velikost"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:393
+msgid "Show Size"
+msgstr "PokaÅi velikost"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:404
+msgid "Exposure"
+msgstr "Osvetljenost"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:404
+msgid "Show Exposure"
+msgstr "PokaÅi osvetlitev"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:434
+msgid "flash fired"
+msgstr "bliskavica se je sproÅila"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:436
+msgid "flash didn't fire"
+msgstr "bliskavica se ni sproÅila"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:446
+msgid "Focal Length"
+msgstr "GoriÅÄna razdalja"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:446
+msgid "Show Focal Length"
+msgstr "PokaÅi goriÅÄno razdaljo"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:456
+msgid "Camera"
+msgstr "Fotoaparat"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:456
+msgid "Show Camera"
+msgstr "PokaÅi fotoaparat"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:460
+msgid "Creator"
+msgstr "Ustvarjalec"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:460
+msgid "Show Creator"
+msgstr "PokaÅi ustvarjalca"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:464
+msgid "File Size"
+msgstr "Velikost datoteke"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:464
+msgid "Show File Size"
+msgstr "PokaÅi velikost datotek"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:472
+msgid "(File read error)"
+msgstr "(Napaka med branjem datoteke)"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:480
+msgid "Rating"
+msgstr "Ocena"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:480
+msgid "Show Rating"
+msgstr "PokaÅi oceno"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/InfoBox.cs:484
+msgid "Show Tags"
+msgstr "PrikaÅi oznake"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs:46
+msgid "Metadata"
+msgstr "Metapodatki"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs:127
+msgid "Extended Metadata"
+msgstr "RazÅirjeni metapodatki"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs:380
+msgid "No active photo"
+msgstr "Ni dejavnih fotografij"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs:382
+#, csharp-format
+msgid "The photo \"{0}\" does not exist"
+msgstr "Fotografija \"{0}\" ne obstaja"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs:384
+msgid "No metadata available"
+msgstr "Metapodatki niso na voljo"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:106
+msgid "Error saving sharpened photo"
+msgstr "Napaka med shranjevanjem izostrene datoteke"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:152
+msgid "Sharpen"
+msgstr "Izostritev"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:162
+msgid "Amount:"
+msgstr "KoliÄina:"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:163
+msgid "Radius:"
+msgstr "Polmer:"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/Sharpener.cs:164
+msgid "Threshold:"
+msgstr "Prag:"
+
+#: ../src/Clients/MainApp/FSpot.Widgets/TagMenu.cs:132
+#: ../src/Clients/MainApp/TagPopup.cs:61
+msgid "Create New Tag..."
+msgstr "Ustvari novo oznako ..."
+
+#. Fixme this should really set parent menu
+#. items insensitve
+#: ../src/Clients/MainApp/PhotoTagMenu.cs:68
+msgid "(No Tags)"
+msgstr "(Ni oznak)"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:91
+msgid "Create New Version"
+msgstr "Ustvari novo razliÄico"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:92
+msgid "Name:"
+msgstr "Ime:"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:96
+msgid "Rename Version"
+msgstr "Preimenuj razliÄico"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:97
+msgid "New name:"
+msgstr "Novo ime:"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:157
+msgid "Delete"
+msgstr "IzbriÅi"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:158
+#, csharp-format
+msgid "Really delete version \"{0}\"?"
+msgstr "Ali zares Åelite izbrisati razliÄico \"{0}\"?"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:159
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "To odstrani razliÄico in izbriÅe ustrezno datoteko z diska."
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:204
+msgid "De_tach"
+msgstr "O_dpni"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:205
+#, csharp-format
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "ResniÄno odpni razliÄico \"{0}\" od \"{1}\"?"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:206
+msgid "This makes the version appear as a separate photo in the library. To undo, drag the new photo back to its parent."
+msgstr "RazliÄice fotografije se v knjiÅnici pojavijo kot razliÄne fotografije. Za razveljavitve povlecite novo fotografijo nazaj k starÅevski fotografiji. "
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:228
+msgid "Re_parent"
+msgstr "Pri_pni"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:229
+#, csharp-format
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Ali zares Åelite znova pripeti {2} fotografij kot razliÄice \"{1}\"?"
+msgstr[1] "Ali zares Åelite znova pripeti {2} fotografijo kot razliÄico \"{1}\"?"
+msgstr[2] "Ali zares Åelite znova pripeti {2} fotografiji kot razliÄici \"{1}\"?"
+msgstr[3] "Ali zares Åelite znova pripeti {2} fotografije kot razliÄice \"{1}\"?"
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:232
+msgid "This makes the photos appear as a single one in the library. The versions can be detached using the Photo menu."
+msgstr "Fotografije se v knjiÅnici pojavijo kot ena fotografija. RazliÄice je mogoÄe odpeti v meniju Fotografija."
+
+#: ../src/Clients/MainApp/PhotoVersionCommands.cs:272
+#, csharp-format
+msgid "Received exception \"{0}\"."
+msgstr "Prejeta je bila izjema \"{0}\"."
+
+#: ../src/Clients/MainApp/TagCommands.cs:189
+msgid "Create New Tag"
+msgstr "Ustvari novo oznako"
+
+#: ../src/Clients/MainApp/TagCommands.cs:190
+msgid "Name of New Tag:"
+msgstr "Ime nove oznake:"
+
+#: ../src/Clients/MainApp/TagPopup.cs:51
+#, csharp-format
+msgid "Find"
+msgid_plural "Find"
+msgstr[0] "Iskanje"
+msgstr[1] "Iskanje"
+msgstr[2] "Iskanje"
+msgstr[3] "Iskanje"
+
+#: ../src/Clients/MainApp/TagPopup.cs:67
+msgid "Edit Tag..."
+msgstr "Urejanje oznake ..."
+
+#: ../src/Clients/MainApp/TagPopup.cs:72
+msgid "Delete Tag"
+msgid_plural "Delete Tags"
+msgstr[0] "IzbriÅi oznake"
+msgstr[1] "IzbriÅi oznako"
+msgstr[2] "IzbriÅi oznaki"
+msgstr[3] "IzbriÅi oznake"
+
+#: ../src/Clients/MainApp/TagPopup.cs:78
+msgid "Attach Tag to Selection"
+msgid_plural "Attach Tags to Selection"
+msgstr[0] "Dodajanje oznak izboru"
+msgstr[1] "Dodajanje oznake izboru"
+msgstr[2] "Dodajanje oznak izboru"
+msgstr[3] "Dodajanje oznak izboru"
+
+#: ../src/Clients/MainApp/TagPopup.cs:82
+msgid "Remove Tag From Selection"
+msgid_plural "Remove Tags From Selection"
+msgstr[0] "Odstranitev oznak iz izbora"
+msgstr[1] "Odstranitev oznake iz izbora"
+msgstr[2] "Odstranitev oznak iz izbora"
+msgstr[3] "Odstranitev oznak iz izbora"
+
+#: ../src/Clients/MainApp/TagPopup.cs:88
+msgid "Merge Tags"
+msgstr "ZdruÅi oznake"
+
+#: ../src/Clients/MainApp/ThumbnailCommand.cs:54
+msgid "Updating Thumbnails"
+msgstr "Posodabljanje sliÄic"
+
+#: ../src/Clients/MainApp/ThumbnailCommand.cs:62
+#, csharp-format
+msgid "Updating picture \"{0}\""
+msgstr "Posodabljanje slike \"{0}\""
+
+#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:1
+msgid "<b>Co_rrections</b>"
+msgstr "<b>Pop_ravki</b>"
+
+#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:2
+msgid "<b>_White Balance</b>"
+msgstr "<b>_RavnoteÅje bele barve</b>"
+
+#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:3
+msgid "C_ontrast:"
+msgstr "K_ontrast:"
+
+#. Note for translators: meant as Temperature
+#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:5
+msgid "Te_mp:"
+msgstr "ZaÄ_asno:"
+
+#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:6
+msgid "_Brightness:"
+msgstr "Svet_lost:"
+
+#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:7
+msgid "_Exposure:"
+msgstr "Izpos_tavljenost:"
+
+#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:8
+msgid "_Hue:"
+msgstr "_Odtenek:"
+
+#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:9
+msgid "_Saturation:"
+msgstr "N_asiÄenost:"
+
+#: ../src/Clients/MainApp/ui/color_editor_prefs_window.ui.h:10
+msgid "_Tint:"
+msgstr "_Ärnilo:"
+
+#: ../src/Clients/MainApp/ui/import.ui.h:1
+msgid "C_opy files to the Photos folder"
+msgstr "_Kopiranj datoteke v mapo fotografij"
+
+#: ../src/Clients/MainApp/ui/import.ui.h:2
+msgid "I_nclude subfolders"
+msgstr "_VkljuÄi podmape"
+
+#. Translators: this string means 'source of import'
+#: ../src/Clients/MainApp/ui/import.ui.h:5
+msgid "Import _from:"
+msgstr "Uvozi _iz:"
+
+#: ../src/Clients/MainApp/ui/import.ui.h:6
+msgid "_Attach tags:"
+msgstr "_Pripni oznake:"
+
+#: ../src/Clients/MainApp/ui/import.ui.h:7
+msgid "_Detect duplicates"
+msgstr "_Zaznaj dvojnike"
+
+#: ../src/Clients/MainApp/ui/import.ui.h:8
+msgid "_Import"
+msgstr "_Uvozi"
+
+#: ../src/Clients/MainApp/ui/import.ui.h:9
+msgid "_Remove original files after import"
+msgstr "_Odstrani izvorne datoteke po uvozu"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 px"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 px"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 px"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 px"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 px"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>Velikost</b>"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:8
+msgid "<b>Summary</b>"
+msgstr "<b>Povzetek</b>"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:9
+msgid "Create Mail"
+msgstr "Ustvari poÅto"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:10
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr "Ustvari poÅto s pripetimi fotografijami (po moÅnosti spremenjenih velikosti)"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:11
+msgid "Do not send a mail"
+msgstr "Ne poÅlji poÅte"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:12
+msgid "Estimated new size"
+msgstr "Ocenjena nova velikost"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:13
+msgid "Extra large"
+msgstr "Zelo velika"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:14
+msgid "Large"
+msgstr "Velika"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:15
+msgid "Medium"
+msgstr "Srednja"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:16
+msgid "Number of pictures"
+msgstr "Åtevilo slik"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:18
+msgid "Original size (possible very large file size)"
+msgstr "Izvorna velikost (morda zelo velika velikost datotek)"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:19
+msgid "Small"
+msgstr "Majhna"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:20
+msgid "Tiny"
+msgstr "Drobcena"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:21
+msgid "Total original size"
+msgstr "Skupna izvorna velikost"
+
+#: ../src/Clients/MainApp/ui/mail_dialog.ui.h:22
+msgid "_Create Mail"
+msgstr "_Ustvari poÅto"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:1
+msgid "Adjust _Time..."
+msgstr "Prilagodi _Äas ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:2
+msgid "Arrange _by"
+msgstr "Uredi _po"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:4
+msgid "By _Date"
+msgstr "Po _datumu"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:5
+msgid "By _Import Roll"
+msgstr "Po _uvoznem zvitku"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:6
+msgid "By _Rating"
+msgstr "Po _oceni"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:7
+msgid "Copy"
+msgstr "Kopiraj"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:8
+msgid "Create New _Tag..."
+msgstr "Ustvari novo _oznako ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:9
+msgid "Create _New Version..."
+msgstr "Ustvari _novo razliÄico ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "O_dpni razliÄico"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:11
+msgid "Fin_d"
+msgstr "Naj_di"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:12
+msgid "Manage _Extensions"
+msgstr "Upravljanje _razÅiritev"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:13
+msgid "Page Set_up..."
+msgstr "Nas_tavitve strani ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:14
+msgid "Re_fresh Thumbnail"
+msgstr "O_sveÅi sliÄico"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:18
+msgid "Select _All"
+msgstr "Izberi _vse"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:19
+msgid "Select _None"
+msgstr "Ne izberi _niÄesar"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:20
+msgid "Send by _Mail..."
+msgstr "PoÅlji po _poÅti ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:21
+#: ../src/Clients/MainApp/ui/single_view.ui.h:3
+msgid "Set as _Background"
+msgstr "Nastavi kot _ozadje"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:22
+msgid "Side_bar"
+msgstr "Stranska v_rstica"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:23
+msgid "T_ags"
+msgstr "Ozn_ake"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:24
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1118
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1119
+msgid "Tags: "
+msgstr "Oznake:"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:25
+msgid "Thumbnail _elements"
+msgstr "_Elementi sliÄic"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:26
+msgid "Too_lbar"
+msgstr "O_rodna vrstica"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:27
+msgid "View"
+msgstr "Pogled"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:28
+#: ../src/Clients/MainApp/ui/single_view.ui.h:7
+msgid "Zoom _in"
+msgstr "_PribliÅaj"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:29
+#: ../src/Clients/MainApp/ui/single_view.ui.h:8
+msgid "Zoom _out"
+msgstr "_Oddalji"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:30
+#: ../src/Clients/MainApp/ui/single_view.ui.h:9
+msgid "Zoom in"
+msgstr "PribliÅaj"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:31
+#: ../src/Clients/MainApp/ui/single_view.ui.h:10
+msgid "Zoom out"
+msgstr "Oddalji"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:32
+msgid "_Attach Tag"
+msgstr "_Pripni oznake"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:33
+msgid "_Attach Tag to Selection"
+msgstr "_Pripni oznako izboru"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:35
+msgid "_Clear Rating Filter"
+msgstr "_PoÄisti filter ocen"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:36
+msgid "_Clear Roll Filter"
+msgstr "_PoÄisti filter zvitkov"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:37
+msgid "_Close"
+msgstr "_Zapri"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:38
+msgid "_Components"
+msgstr "_Sestavni deli"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:39
+msgid "_Contents"
+msgstr "_Vsebina"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:40
+msgid "_Dates"
+msgstr "_Datumi"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:42
+msgid "_Delete Selected Tag"
+msgstr "_IzbriÅi izbrano oznako"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:43
+msgid "_Delete Version"
+msgstr "_IzbriÅi razliÄico"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:44
+#: ../src/Clients/MainApp/ui/single_view.ui.h:11
+msgid "_Edit"
+msgstr "_Uredi"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:45
+msgid "_Edit Tag..."
+msgstr "_Uredi oznako ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:46
+msgid "_Export to"
+msgstr "_Izvozi v"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:47
+msgid "_Filmstrip"
+msgstr "_Filmski trak"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:48
+#: ../src/Clients/MainApp/ui/single_view.ui.h:13
+msgid "_Fullscreen"
+msgstr "_Celozaslonski naÄin"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:49
+#: ../src/Clients/MainApp/ui/single_view.ui.h:14
+msgid "_Help"
+msgstr "Pomo_Ä"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:50
+msgid "_Hidden"
+msgstr "_Skrito"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:51
+msgid "_Import..."
+msgstr "_Uvozi ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:52
+msgid "_Invert Selection"
+msgstr "Obrni _izbor"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:53
+msgid "_Large"
+msgstr "_Velike"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:54
+msgid "_Last Import Roll"
+msgstr "_Zadnji uvozni zvitek"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:55
+msgid "_Loupe"
+msgstr "_LeÄa"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:56
+msgid "_Medium"
+msgstr "_Srednje"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:57
+#: ../src/Clients/MainApp/ui/single_view.ui.h:15
+msgid "_Photo"
+msgstr "_Fotografija"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:58
+msgid "_Quit"
+msgstr "_KonÄaj"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:59
+msgid "_Ratings"
+msgstr "_Ocene"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:61
+msgid "_Remove Tag From Selection"
+msgstr "_Odstrani oznako iz izbora"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:62
+msgid "_Rename Version"
+msgstr "_Preimenuj razliÄico"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:63
+msgid "_Reverse Order"
+msgstr "_Obrnjen vrstni red"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:64
+msgid "_Select Import Rolls..."
+msgstr "Izberi _uvozne zvitke ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:65
+msgid "_Set Date Range..."
+msgstr "Nastavi _obsega datumov ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:66
+msgid "_Set Rating filter..."
+msgstr "_Nastavi filter ocen ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:67
+msgid "_Sharpen..."
+msgstr "_Izostri ..."
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:68
+#: ../src/Clients/MainApp/ui/single_view.ui.h:16
+msgid "_Slideshow"
+msgstr "_Diapredstavitev"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:69
+msgid "_Small"
+msgstr "_Majhne"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:70
+msgid "_Tag Icons"
+msgstr "_Ikone oznak"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:71
+msgid "_Tags"
+msgstr "O_znake"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:72
+msgid "_Timeline"
+msgstr "_Äasovnica"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:73
+msgid "_Tools"
+msgstr "_Orodja"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:74
+msgid "_Untagged Photos"
+msgstr "_NeoznaÄene fotografije"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:75
+msgid "_Version"
+msgstr "_RazliÄica"
+
+#: ../src/Clients/MainApp/ui/main_window.ui.h:76
+#: ../src/Clients/MainApp/ui/single_view.ui.h:18
+msgid "_View"
+msgstr "_Pogled"
+
+#: ../src/Clients/MainApp/ui/single_view.ui.h:1
+msgid "Display File _Names"
+msgstr "Prikaz imen _datotek"
+
+#: ../src/Clients/MainApp/ui/single_view.ui.h:2
+msgid "F-Spot View"
+msgstr "F-Spot pogled"
+
+#: ../src/Clients/MainApp/ui/single_view.ui.h:4
+msgid "Show or hide the side pane"
+msgstr "PokaÅe ali skrije stranski pladenj"
+
+#: ../src/Clients/MainApp/ui/single_view.ui.h:5
+msgid "Show or hide the toolbar"
+msgstr "PokaÅe ali skrije orodno vrstico"
+
+#: ../src/Clients/MainApp/ui/single_view.ui.h:6
+msgid "Side _pane"
+msgstr "_Stranski pladenj"
+
+#: ../src/Clients/MainApp/ui/single_view.ui.h:12
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:7
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:14
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:13
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:8
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:7
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:8
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:9
+msgid "_Export"
+msgstr "_Izvozi"
+
+#: ../src/Clients/MainApp/ui/single_view.ui.h:17
+msgid "_Toolbar"
+msgstr "_Orodna vrstica"
+
+#: ../src/Clients/MainApp/ui/tag_selection_dialog.ui.h:1
+msgid "Select a Tag..."
+msgstr "Izbor oznake ..."
+
+#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:1
+msgid "<b>Image Interpolation</b>"
+msgstr "<b>Interpolacija slike</b>"
+
+#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:2
+msgid "<b>Transparent Parts</b>"
+msgstr "<b>Prozorni deli</b>"
+
+#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:3
+msgid "<small><i>Enable this to allow interpolation on zoomed images. You shouldn't disable this for viewing photos, but disabling the interpolation could be usefull in icon design.</i></small>"
+msgstr "<small><i>MoÅnost omogoÄa interpolacijo pribliÅanih slik. Ta moÅnost za ogled fotografij ni priporoÄena, toda njeno onemogoÄanje bi lahko bilo uporabno pri oblikovanju ikon.</i></small>"
+
+#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:4
+msgid "<small><i>You can choose how to display transparent parts in images. This option has no effect on photos, but setting this as check pattern or custom color could be usefull when viewing icons or other artworks with transparent parts.</i></small>"
+msgstr "<small><i>MogoÄe je izbrati naÄin prikaza prozornih delov slik. Ta moÅnost ne vpliva na fotografije, vendar je lahko koristna pri ogledu ikon in ostalih grafiÄnih podob s prozornimi deli.</i></small>"
+
+#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:5
+msgid "As _background"
+msgstr "Kot _ozadje"
+
+#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:6
+msgid "As _custom color: "
+msgstr "Kot barvo _po meri"
+
+#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:7
+msgid "As check _pattern"
+msgstr "Kot _vzorec Åahovnice"
+
+#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:8
+msgid "Preferences"
+msgstr "MoÅnosti"
+
+#: ../src/Clients/MainApp/ui/viewer_preferences.ui.h:9
+msgid "_Interpolate image on zoom"
+msgstr "_Interpolacija slike pri pribliÅanju"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:141
+msgid "Page Setup"
+msgstr "Nastavitve strani"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:145
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:149
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:155
+#, csharp-format
+msgid "Paper Size: {0} x {1} mm"
+msgstr "Velikost papirja: {0} x {1} mm"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:152
+msgid "Set Page Size and Orientation"
+msgstr "Nastavi velikost in usmerjenost strani"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:163
+msgid "Photos per page"
+msgstr "Fotografije na stran"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:173
+msgid "Repeat"
+msgstr "Ponavljanje"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:174
+msgid "Print cut marks"
+msgstr "Natisni oznake za izrez"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:180
+msgid "Photos layout"
+msgstr "Razporeditev fotografij"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:182
+msgid "Full Page (no margin)"
+msgstr "Polna stran (brez robov)"
+
+#. Note for translators: "Zoom" is a Fit Mode
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:185
+msgid "Zoom"
+msgstr "PribliÅevanje"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:186
+msgid "Fill"
+msgstr "Zapolni"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:187
+msgid "Scaled"
+msgstr "Prilagojena velikost"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:192
+msgid "White borders"
+msgstr "Bele obrobe"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:198
+msgid "Custom Text"
+msgstr "Besedilo po meri"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:202
+msgid "Photos infos"
+msgstr "Podrobnosti o fotografijah"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:204
+msgid "Print file name"
+msgstr "Natisni ime datoteke"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:205
+msgid "Print photo date"
+msgstr "Natisni datum posnetka fotografije"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:206
+msgid "Print photo time"
+msgstr "Natisni Äas posnetka fotografije"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:207
+msgid "Print photo tags"
+msgstr "Natisni oznake fotografij"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs:208
+msgid "Print photo comment"
+msgstr "Natisni opombe fotografij"
+
+#: ../src/Core/FSpot.Gui/FSpot.Widgets/OpenWithMenu.cs:88
+msgid "No applications available"
+msgstr "Ni razpoloÅljivih programov"
+
+#: ../src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs:38
+msgid "Blackout"
+msgstr "PoÄrni"
+
+#: ../src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs:46
+msgid "Select the area that you want blacked out."
+msgstr "Izberite podroÄje, ki ga Åelite poÄrniti."
+
+#: ../src/Extensions/Editors/FSpot.Editors.BW/FSpot.Addins.Editors/BWEditor.cs:41
+msgid "Convert to B/W"
+msgstr "Pretvori v Ärno-blo"
+
+#: ../src/Extensions/Editors/FSpot.Editors.BW/FSpot.Addins.Editors/BWEditor.cs:44
+msgid "Apply"
+msgstr "Uveljavi"
+
+#: ../src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Addins.Editors/FlipEditor.cs:37
+msgid "Flip"
+msgstr "Zrcaljenje"
+
+#: ../src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs:40
+msgid "Pixelate"
+msgstr "Pretvori v toÄke"
+
+#: ../src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs:48
+msgid "Select the area that you want pixelated."
+msgstr "Izberite podroÄje, ki ga Åelite pretvoriti v toÄke."
+
+#: ../src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Addins.Editors/ResizeEditor.cs:42
+msgid "Resize"
+msgstr "Spremeni velikost"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:79
+msgid "Transferring Pictures"
+msgstr "PrenaÅanje slik"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:132
+#, csharp-format
+msgid "Transferring picture \"{0}\" To CD"
+msgstr "PrenaÅanje slike \"{0}\" na CD"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:147
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:392
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:421
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:237
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:288
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:255
+msgid "Done Sending Photos"
+msgstr "PoÅiljanje fotografij je konÄano"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:149
+msgid "Transfer Complete"
+msgstr "Prenos je konÄan"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:156
+msgid "Error While Transferring"
+msgstr "Napaka med prenosom"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:164
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:299
+msgid "Error Transferring"
+msgstr "Napaka prenosa"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs:174
+msgid "copying..."
+msgstr "kopiranje ..."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:1
+msgid "<b><i>There are some previously scheduled items to write</i></b>"
+msgstr "<b><i>Obstaja nekaj predhodno razporejenih predmetov za zapis</i></b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:2
+msgid "<b>Photos to Burn</b>"
+msgstr "<b>Fotografije za zapis</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:3
+msgid "Create CD"
+msgstr "Ustvari CD"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:5
+msgid "Size of the exported selection:"
+msgstr "Velikost izvoÅenega izbora:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:6
+msgid "_Browse Previously Scheduled Files"
+msgstr "_Brskaj po predhodno razporejenih datotekah"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui.h:8
+msgid "_Write only these photos to CD"
+msgstr "_ZapiÅi le te fotografije na CD"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:111
+msgid "Waiting for authorization"
+msgstr "Äakanje na overitev"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:112
+msgid ""
+"F-Spot will now launch your browser so that you can enable the permission you just selected.\n"
+"\n"
+"Once you are directed by Facebook to return to this application, click \"Ok\" below."
+msgstr ""
+"F-Spot bo sedaj zagnal vaÅ brskalnik, zato da lahko omogoÄite dovoljenja, ki ste jih izbrali.\n"
+"\n"
+"Ko bo Facebook zahteval vrnitev k programu, spodaj kliknite \"V redu\"."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:296
+msgid "Too many images to export"
+msgstr "DoloÄenih je preveÄ slik za izvoz"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:297
+#, csharp-format
+msgid "Facebook only permits {0} photographs per album.  Please refine your selection and try again."
+msgstr "Facebook omogoÄa le {0} fotografij na album. Treba je izpopolniti izbiro in poskusiti ponovno. "
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:312
+msgid "Album must have a name"
+msgstr "Album mora imeti ime"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:313
+msgid "Please name your album or choose an existing album."
+msgstr "Poimenujte album ali izberite obstojeÄi album."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:327
+msgid "Creating a new album failed"
+msgstr "Ustvarjanje novega albuma je spodletelo"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:328
+#, csharp-format
+msgid ""
+"An error occurred creating a new album.\n"
+"\n"
+"{0}"
+msgstr ""
+"Med ustvarjanjem novega albuma je priÅlo do napake.\n"
+"\n"
+"{0}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:341
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:516
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:168
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:184
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:174
+msgid "Uploading Pictures"
+msgstr "PoÅiljanje slik"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:369
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:243
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:213
+#, csharp-format
+msgid "Uploading picture \"{0}\" ({1} of {2})"
+msgstr "PoÅiljanje slike \"{0}\" ({1} od {2})"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:383
+#, csharp-format
+msgid "Error Uploading To Facebook: {0}"
+msgstr "Napaka med poÅiljanjem na Facebook: {0}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:384
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:412
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:248
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:229
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:277
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:244
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs:321
+msgid "Error"
+msgstr "Napaka"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:394
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:423
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:239
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:290
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:257
+msgid "Upload Complete"
+msgstr "PoÅiljanje je konÄano"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs:397
+msgid "Visit F-Spot group on Facebook"
+msgstr "ObiÅÄi skupino F-Spot na Facebook"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:231
+msgid "Waiting for authentication"
+msgstr "Äakanje na overitev"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:232
+msgid ""
+"F-Spot will now launch your browser so that you can log into Facebook.\n"
+"\n"
+"Once you are directed by Facebook to return to this application, click \"Ok\" below.  F-Spot will cache your session in gnome-keyring, if possible, and re-use it on future Facebook exports."
+msgstr ""
+"Program F-Spot bo zagnal brskalnik za prijavo v Facebook.\n"
+"\n"
+"Ko vas Facebook usmeri v vrnitev v ta program, kliknite \"V redu\" spodaj. F-Spot bo, Äe bo mogoÄe, vaÅo sejo shranil v gnome-keyring in jo uporabil pri prihodnjih izvozih v Facebook."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:237
+msgid "Authenticating..."
+msgstr "Overjanje ..."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:247
+msgid "Error logging into Facebook"
+msgstr "Napaka med prijavljanjem v Facebook"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:248
+msgid "There was a problem logging into Facebook.  Check your credentials and try again."
+msgstr "PriÅlo je do teÅav med prijavljanjem v Facebook. Preverite svoje geslo in poskusite znova. "
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:257
+msgid "Authorizing Session"
+msgstr "PooblaÅÄanje seje"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:266
+msgid "Session established, fetching user info..."
+msgstr "Seja je zagnana, pridobivanje podrobnosti o uporabniku ..."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:272
+msgid "Session established, fetching friend list..."
+msgstr "Seja je zagnana, pridobivanje seznama prijateljev ..."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:282
+msgid "Session established, fetching friend details..."
+msgstr "Seja je zagnana, pridobivanje podrobnosti o prijateljih ..."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:294
+msgid "Session established, fetching photo albums..."
+msgstr "Seja je zagnana, pridobivanje albumov fotografij ..."
+
+#. Note for translators: {0} and {1} are respectively firstname and surname of the user
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:304
+#, csharp-format
+msgid "{0} {1} is logged into Facebook"
+msgstr "{0} {1} je prijavljen v Facebook"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:313
+msgid "Facebook Connection Error"
+msgstr "Napaka povezovanja s Facebook-om"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:314
+#, csharp-format
+msgid ""
+"There was an error when downloading your information from Facebook.\n"
+"\n"
+"Facebook said: {0}"
+msgstr ""
+"PriÅlo je do napake med nalaganjem vaÅih podrobnosti s Facebook-a.\n"
+"\n"
+"Javljena napaka: {0}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs:343
+msgid "You are not logged in."
+msgstr "Niste prijavljeni."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:1
+msgid "Auto-confirm Photos"
+msgstr "Samodejno potrjevanje fotografij"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:2
+msgid "Caption"
+msgstr "Naslov"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:3
+msgid "Create a new album"
+msgstr "Ustvari nov album"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:4
+msgid "Description"
+msgstr "Opis"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:5
+msgid "Export to Facebook"
+msgstr "Izvozi v Facebook"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:6
+msgid "In this photo"
+msgstr "Na tej fotografiji"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:7
+msgid "Location"
+msgstr "Mesto"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:8
+msgid "Login"
+msgstr "Prijava"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:9
+msgid "Logout"
+msgstr "Odjava"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:11
+msgid "Not logged in"
+msgstr "Ni prijavljen"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:12
+msgid "Permissions:"
+msgstr "Dovoljenja:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:13
+msgid "Stay Connected"
+msgstr "Ostani povezan"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:14
+msgid "Use an existing album"
+msgstr "Uporabi obstojeÄi album"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui.h:15
+msgid "Who is this?"
+msgstr "Kdo je to?"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:139
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:5
+msgid "Authorize"
+msgstr "Pooblasti"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:145
+#, csharp-format
+msgid "Return to this window after you have finished the authorization process on {0} and click the \"Complete Authorization\" button below"
+msgstr "Po konÄanem postopku pooblastitve na {0} se vrnite v to okno in kliknite gumb \"KonÄanj pooblastitev\" spodaj"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:146
+msgid "Complete Authorization"
+msgstr "KonÄaj pooblastitev"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:151
+#, csharp-format
+msgid "Logging into {0}"
+msgstr "Prijavljanje v {0}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:152
+msgid "Checking credentials..."
+msgstr "Preverjanje gesla ..."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:159
+#, csharp-format
+msgid "Welcome {0} you are connected to {1}"
+msgstr "DobrodoÅli {0}, povezani ste na {1}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:162
+#, csharp-format
+msgid "Sign in as a different user"
+msgstr "Prijava kot drug uporabnik"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:167
+#, csharp-format
+msgid "Used {0} of your allowed {1} monthly quota"
+msgstr "Uporabljene je {0} od dovoljene meseÄne kvote {1}."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:270
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:339
+msgid "Unable to log on"
+msgstr "Ni se mogoÄe prijaviti"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:359
+#, csharp-format
+msgid "Waiting for response {0} of {1}"
+msgstr "Äakanje na odziv {0} od {1}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:386
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:210
+#, csharp-format
+msgid "Uploading picture \"{0}\""
+msgstr "PoÅiljanje slike \"{0}\""
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:409
+#, csharp-format
+msgid "Error Uploading To {0}: {1}"
+msgstr "Napaka med poÅiljanjem na {0}: {1}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:496
+msgid "Unable to log on."
+msgstr "Ni se mogoÄe prijaviti."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs:497
+#, csharp-format
+msgid "F-Spot was unable to log on to {0}.  Make sure you have given the authentication using {0} web browser interface."
+msgstr "Ni se mogoÄe prijaviti na {0}. PrepriÄajte se, da ste dali pooblastitev z uporabo vmesnika spletnega brskalnika {0}."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:1
+msgid "<b>Account</b>"
+msgstr "<b>RaÄun</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:3
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:4
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:4
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:4
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:4
+msgid "<b>Style</b>"
+msgstr "<b>Slog</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:4
+msgid "<b>Viewing permissions</b>"
+msgstr "<b>Dovoljenja za ogled</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:7
+msgid "Export tag _hierarchy"
+msgstr "Izvozi _hierarhijo oznak"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:8
+msgid "F-Spot needs your authorization in order to upload photos to your {0} account. Press the \"Authorize\" button to open a web browser and give F-Spot the authorization. "
+msgstr "F-Spot potrebuje pooblastitev za nalaganje fotografij na vaÅ raÄun {0}. Pritisnite gumb \"Pooblastitev\" za odprtje spletnega brskalnika in pooblastitev F-Spota."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:9
+msgid "Ignore _top level tags"
+msgstr "Prezri oznake _zgornjih ravni"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:10
+msgid "Private"
+msgstr "Zasebno"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:11
+msgid "Public"
+msgstr "Javno"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:12
+msgid "Visible to Family"
+msgstr "Vidno druÅini"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:13
+msgid "Visible to Friends"
+msgstr "Vidno prijateljem"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:15
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:8
+msgid "_Export tags"
+msgstr "Izvozi ozna_ke"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:16
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:15
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:11
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:11
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:10
+msgid "_Resize to: "
+msgstr "Sp_remeni velikost na:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:17
+msgid "_View photos in browser when done uploading"
+msgstr "Ogled fotografij _v brskalniku po konÄanem poÅiljanju"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/flickr_export.ui.h:18
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:17
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:12
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:12
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:11
+msgid "pixels"
+msgstr "toÄke"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:150
+msgid "Select Export Folder"
+msgstr "Izbor mape za izvoz"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:202
+msgid "Building Gallery"
+msgstr "Gradnja galerije"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:239
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "IzvaÅanje \"{0}\" ..."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:246
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Napaka med kopiranjem \"{0}\" v galerijo: {2}{1}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:272
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "PrenaÅanje na \"{0}\""
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:273
+msgid "Transferring..."
+msgstr "PrenaÅanje ..."
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:278
+msgid "Export Complete."
+msgstr "Izvoz je konÄan."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:280
+msgid "Exporting Photos Completed."
+msgstr "IzvaÅanje fotografij je konÄano."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:345
+msgid "Exporting Photos"
+msgstr "IzvaÅanje fotografij"
+
+#. Note for translators: light as clear, opposite as dark
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:749
+msgid "Light"
+msgstr "Svetlo"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:750
+msgid "Dark"
+msgstr "Temno"
+
+#. Abbreviation of previous
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:930
+msgid "Prev"
+msgstr "Predhodna"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:932
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1173
+msgid "Index"
+msgstr "Kazalo"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1042
+msgid "Gallery generated by"
+msgstr "Galerijo je ustvaril"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1082
+msgid "Show Styles"
+msgstr "PokaÅi sloge"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1083
+msgid "Hide Styles"
+msgstr "Skrij sloge"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1250
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs:1383
+msgid "Page:"
+msgstr "Stran:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:1
+msgid "<b>Destination</b>"
+msgstr "<b>Cilj</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:2
+msgid "<b>Export Method</b>"
+msgstr "<b>NaÄin izvoza</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:5
+msgid "Create _gallery using \"Original\""
+msgstr "Ustvari galerijo z uporabo \"Izvirnika\""
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:6
+msgid "Create standalone _web gallery"
+msgstr "Ustvari samostojno spletno _galerijo"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:7
+msgid "D_escription:"
+msgstr "Op_is:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:8
+msgid "Export _tags"
+msgstr "Izvozi oz_nake"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:9
+msgid "Export tag _icons"
+msgstr "Izvozi _ikone oznak"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:11
+msgid "G_allery Name:"
+msgstr "Ime g_alerije:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:12
+msgid "Open _destination when done exporting"
+msgstr "_Odpiri cilj po konÄanem izvozu"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:14
+msgid "_Folder:"
+msgstr "_Mapa:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/folder_export.ui.h:16
+msgid "_Save the files only"
+msgstr "_Shrani le datoteke"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:132
+msgid "Invalid URL"
+msgstr "Neveljaven URL"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:133
+msgid "The gallery URL entry does not appear to be a valid URL"
+msgstr "URL galerije ni videti kot veljaven URL"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:143
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:170
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:181
+msgid "Error while connecting to Gallery"
+msgstr "Med povezovanjem z galerijo je priÅlo do napake"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:144
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:171
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:182
+#, csharp-format
+msgid "The following error was encountered while attempting to log in: {0}"
+msgstr "Med poskusom prijave je priÅlo do naslednje napake: {0}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:158
+msgid "A Gallery with this name already exists"
+msgstr "Galerija s tem imenom Åe obstaja"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs:159
+#, csharp-format
+msgid "There is already a Gallery with the same name in your registered Galleries. Please choose a unique name."
+msgstr "Galerija s tem imenom Åe obstaja v vpisanih galerijah. Izberite edinstveno ime."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/FormClient.cs:327
+msgid "Unhandled exception"
+msgstr "Nesprejeta izjema"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAccount.cs:82
+msgid ""
+"Cannot connect to a Gallery for which the version is unknown.\n"
+"Please check that you have Remote plugin 1.0.8 or later"
+msgstr ""
+"Ni se mogoÄe povezati z galerijo neznane razliÄice.\n"
+"NaloÅiti je treba vstavek Remote razliÄice 1.0.8. ali kasnejÅe"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAddAlbum.cs:95
+msgid "(TopLevel)"
+msgstr "(Vrhnja raven)"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAddAlbum.cs:149
+msgid "Invalid Gallery name"
+msgstr "Neveljavno ime galerije"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAddAlbum.cs:150
+msgid ""
+"The gallery name contains invalid characters.\n"
+"Only letters, numbers, - and _ are allowed"
+msgstr ""
+"Ime galerije vsebuje neveljavne znake.\n"
+"Dovoljene so le Ärke, Åtevilke ter - in _"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:228
+#, csharp-format
+msgid "Error uploading picture \"{0}\" to Gallery: {1}"
+msgstr "Napaka med poÅiljanjem slike \"{0}\" v galerijo: {1}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:253
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:312
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:272
+msgid "(No Gallery)"
+msgstr "(Ni galerije)"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:339
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:431
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:363
+msgid "(Not Connected)"
+msgstr "(Ni Povezave)"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:340
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:432
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:364
+msgid "(No Albums)"
+msgstr "(Ni Albumov)"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs:381
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:490
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:401
+msgid "No account selected"
+msgstr "Noben raÄun ni bil izbran"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs:382
+msgid "Error reading server response"
+msgstr "Napaka med branjem odziva streÅnika"
+
+#. failed to find the response
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs:394
+msgid "Server returned response without Gallery content"
+msgstr "StreÅnik je vrnil odgovor brez vsebine Galerije"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs:717
+msgid "Error while creating new album"
+msgstr "Napaka med ustvarjanjem novega albuma"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs:718
+#, csharp-format
+msgid ""
+"The following error was encountered while attempting to perform the requested operation:\n"
+"{0} ({1})"
+msgstr ""
+"Med poskusom izvajanja zahtevanega opravila je priÅlo do napake:\n"
+"{0} ({1})"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_album_dialog.ui.h:1
+msgid "_Album Name:"
+msgstr "Ime _albuma:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_album_dialog.ui.h:2
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_album_dialog.ui.h:3
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_add_album_dialog.ui.h:3
+msgid "_Description:"
+msgstr "O_pis:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_album_dialog.ui.h:3
+msgid "_Parent Album:"
+msgstr "_Nadrejeni album:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_album_dialog.ui.h:4
+msgid "_Title:"
+msgstr "_Naslov:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:1
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:1
+msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
+msgstr "<span weight='bold' size='larger'>Napaka med povezovanjem z galerijo</span>\n"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:3
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:5
+msgid "Please verify that the settings for this gallery are correct."
+msgstr "Potrdite, da so nastavitve za to galerijo pravilne."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:4
+msgid "U_RL:"
+msgstr "U_RL:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:5
+msgid "_Gallery Name:"
+msgstr "Ime _galerije:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:6
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:10
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_add_dialog.ui.h:1
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:10
+msgid "_Password:"
+msgstr "_Geslo:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_add_dialog.ui.h:7
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:11
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_add_dialog.ui.h:2
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:11
+msgid "_Username:"
+msgstr "_UporabniÅko ime:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:1
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:1
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:1
+msgid "<b>Album</b>"
+msgstr "<b>Album</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:2
+msgid "<b>Gallery</b>"
+msgstr "<b>Galerija</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:6
+msgid "Export _titles and comments"
+msgstr "Izvozi _naslove in opombe"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:7
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:6
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:6
+msgid "Open _album in browser when done uploading"
+msgstr "_Odpri album v brskalniku po konÄanem poÅiljanju"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:9
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:9
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:9
+msgid "_Export to Album:"
+msgstr "Iz_voz v album:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/gallery_export_dialog.ui.h:10
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:10
+msgid "_Gallery:"
+msgstr "_Galerija:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAddAlbum.cs:111
+msgid "Error while creating Album"
+msgstr "Napaka med ustvarjanjem albuma"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAddAlbum.cs:112
+#, csharp-format
+msgid "The following error was encountered while attempting to create an album: {0}"
+msgstr "Med poskusom ustvarjanja albuma je priÅlo do naslednje napake: {0}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:206
+#, csharp-format
+msgid "{0} Sent"
+msgstr "{0} poslanih"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:208
+#, csharp-format
+msgid "{0} of approx. {1}"
+msgstr "{0} od pribliÅno {1}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:275
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs:242
+#, csharp-format
+msgid "Error Uploading To Gallery: {0}"
+msgstr "Napaka med poÅiljanjem v Galerijo: {0}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:363
+#, csharp-format
+msgid "Available space: {0}, {1}% used out of {2}"
+msgstr "Prostor na voljo: {0}, uporabljenih {1}% od {2}"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs:467
+#, csharp-format
+msgid ""
+"The selected album has a limit of {0} pictures,\n"
+"which would be passed with the current selection of {1} images"
+msgstr ""
+"Izbrani album ima mejo {0} slik,\n"
+"Äemur bi zadostovala trenutna izbira {1} slik"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_album_dialog.ui.h:1
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_add_album_dialog.ui.h:1
+msgid "Public Album"
+msgstr "Javni album"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_album_dialog.ui.h:2
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_add_album_dialog.ui.h:2
+msgid "_Album Title:"
+msgstr "Naslov _albuma:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:3
+msgid "<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
+msgstr "<span weight='bold' size='larger'>VaÅ raÄun Google je zaklenjen</span>\n"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:6
+msgid ""
+"Please verify that the settings for this gallery are correct.\n"
+"Enter the letters as they are shown in the image in\n"
+"the 'Captcha' field. <i>Letters are not case-sensitive</i>"
+msgstr ""
+"Potrdite, da so nastavitve za to galerijo pravilne.\n"
+"Vnesite Ärke, kot so prikazane na sliki v polju 'Captcha'.\n"
+"<i>Velikost Ärk ni pomembna</i>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_add_dialog.ui.h:9
+msgid "_Captcha:"
+msgstr "_Captcha:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/google_export_dialog.ui.h:3
+msgid "<b>PicasaWeb Export</b>"
+msgstr "<b>Izvoz PicasaWeb</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:3
+msgid "<b>SmugMug Export</b>"
+msgstr "<b>Izvoz SmugMug</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/smugmug_export_dialog.ui.h:7
+msgid "_Account:"
+msgstr "_RaÄun:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs:310
+msgid "Done sending photos"
+msgstr "PoÅiljanje fotografij je konÄano"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs:312
+msgid "Upload complete"
+msgstr "PoÅiljanje je konÄano"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs:318
+msgid "Error uploading to Tabblo: "
+msgstr "Napaka med poÅiljanjem v Tabblo:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:1
+msgid "<b>F-Spot tags</b>"
+msgstr "<b>Oznake F-Spot</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:3
+msgid "<b>Tabblo account</b>"
+msgstr "<b>RaÄun Tabblo</b>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:4
+msgid "<small><i>F-Spot tags can help you track the export status of photos. Example: Use one tag for the photos that you plan to export, and another one for those already exported. Here, you can tell F-Spot to automatically replace these tags as appropriate.</i></small>"
+msgstr "<small><i>F-Spot oznake lahko olajÅajo sledenje izvoznemu stanju fotografij. Primer: uporaba ene oznake za fotografije, pripravljene na izvoz in druge za fotografije, ki so bile Åe izvoÅene. Tukaj lahko nastavite samodejno zamenjavo oznak.</i></small>"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:6
+msgid "Rem_ove from exported photos:"
+msgstr "_Odstrani iz izvoÅenih fotografij:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:7
+msgid "Select..."
+msgstr "Izberi ..."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui.h:8
+msgid "_Attach to exported photos:"
+msgstr "_Pripni izvoÅenim fotografijam:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:1
+msgid "A trust error occured while attempting to access"
+msgstr "Med poskusom dostopa je priÅlo do napake zaupanja"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:2
+msgid "Abort this session"
+msgstr "Prekini to sejo"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:3
+msgid "Always trust this site's certificate"
+msgstr "Vedno zaupaj potrdilu te strani"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:4
+msgid "Do you wish to:"
+msgstr "Ali Åelite: "
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:5
+msgid "Trust Error"
+msgstr "Napaka zaupanja"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui.h:6
+msgid "Trust the site's certificate this once"
+msgstr "Zaupaj potrdilu te strani tokrat"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs:67
+msgid "This tool requires an active selection. Please select one or more pictures and try again"
+msgstr "To orodje zahteva dejavno izbiro. Izberite eno ali veÄ slik in poskusite znova."
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs:83
+msgid "Select export folder"
+msgstr "Izbor mape za izvoz"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs:121
+msgid "Exporting files"
+msgstr "Izvoz datotek"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs:127
+#, csharp-format
+msgid "Preparing photo \"{0}\""
+msgstr "Pripravljanje fotografije \"{0}\""
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/zip_export.ui.h:1
+msgid "_Create"
+msgstr "_Ustvari"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/zip_export.ui.h:2
+msgid "_File name:"
+msgstr "_Ime datoteke:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/zip_export.ui.h:3
+msgid "_Location:"
+msgstr "_Mesto:"
+
+#: ../src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/zip_export.ui.h:4
+msgid "_Scale:"
+msgstr "M_erilo:"
+
+#: ../src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.ui.h:1
+msgid "<b>Specify the toplevel Photos directories</b>"
+msgstr "<b>Navedite vrhnje mape fotografij</b>"
+
+#: ../src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.ui.h:2
+msgid "Change Photos directory"
+msgstr "Spremeni mapo fotograij"
+
+#: ../src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.ui.h:3
+msgid "Change base path (URI) to"
+msgstr "Spremeni osnovno pot (URI) v"
+
+#: ../src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.ui.h:4
+msgid "Old base path (URI) was"
+msgstr "Stara osnovna pot (URI) je bila"
+
+#: ../src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs:51
+msgid "Developing photos"
+msgstr "Razvijanje fotografij"
+
+#: ../src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs:58
+#, csharp-format
+msgid "Developing {0}"
+msgstr "Razvijanje {0}"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:128
+msgid "F-Spot Gallery"
+msgstr "Galerija F-Spot"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:129
+msgid "The web gallery seems to be offline now"
+msgstr "Videti je, da je spletna galerija trenutno nepovezana"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:130
+msgid "Show All"
+msgstr "PokaÅi vse"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:140
+#, csharp-format
+msgid "{0} photo"
+msgid_plural "{0} photos"
+msgstr[0] "{0} fotografij"
+msgstr[1] "{0} fotografija"
+msgstr[2] "{0} fotografiji"
+msgstr[3] "{0} fotografije"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:182
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:8
+msgid "Current View"
+msgstr "Trenutni pogled"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs:185
+msgid "Selected"
+msgstr "Izbrano"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs:111
+msgid "none"
+msgstr "brez"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs:114
+#, csharp-format
+msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
+msgstr " Galerija: {0}, fotografij: {1}, zadnji odjemalec: {3}"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs:178
+msgid "Gallery is inactive"
+msgstr "Galerija je nedejavna"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:1
+msgid ""
+"<small><i>The gallery stays active until you either deactivate it or close\n"
+"F-Spot. Make sure local viewers access it bypassing HTTP proxy.</i></small>"
+msgstr ""
+"<small><i>Galerija ostane dejavna dokler je ne izkljuÄite ali zaprete F-spota.\n"
+"PrepriÄajte se, da lahko do dostopajo krajevni obiskovalci tako da obidejo posredniÅki streÅnik HTTP.</i></small>"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:3
+msgid ""
+"<small><i>When the gallery is active, above is the URL you need to open \n"
+"on another computer to access the shared photos.</i></small>"
+msgstr ""
+"<small><i>Ko je galerija dejavna, je mogoÄe do fotografij v souporabi\n"
+"dostopati preko zgornjega URL-ja.</i></small>"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:5
+msgid "Activates and deactivates the web gallery"
+msgstr "OmogoÄi in onemogoÄi spletno galerijo"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:6
+msgid "Allow viewers to add tags"
+msgstr "Obiskovalcem dovoli dodajanje oznak"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:7
+msgid "Copy URL to clipboard"
+msgstr "Kopiraj URL na odloÅiÅÄe"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:9
+msgid "F-Spot Live Web Gallery"
+msgstr "Åiva spletna galerija F-Spot"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:10
+msgid "Gallery URL:"
+msgstr "URL galerije:"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:11
+msgid "Limit number of shared photos to"
+msgstr "Omeji Åtevilo fotografij v souporabi na"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:12
+msgid "Options:"
+msgstr "MoÅnosti:"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:13
+msgid "Photos with a Tag"
+msgstr "Fotografije z oznako"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:14
+msgid "Selected Photos"
+msgstr "Izbrane fotografije"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:15
+msgid "Share:"
+msgstr "Souporaba:"
+
+#: ../src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui.h:16
+msgid "Views:"
+msgstr "Ogledov:"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDb.cs:91
+msgid "Error opening the selected file"
+msgstr "Napaka med odpiranjem izbrane datoteke"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDb.cs:92
+#, csharp-format
+msgid ""
+"The file you selected is not a valid or supported database.\n"
+"\n"
+"Received exception \"{0}\"."
+msgstr ""
+"Izbrana datoteka ni veljavna ali podprta podatkovna zbirka.\n"
+"\n"
+"Prejeta je bila izjema \"{0}\"."
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/PickFolderDialog.cs:57
+#, csharp-format
+msgid ""
+"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
+" Please select that folder so I can do the mapping.</big>"
+msgstr ""
+"<big>Podatkovna zbirka se navezuje na datoteke v mapi <b>{0}</b>.\n"
+"Izbrati je treba mapo za preslikavo.</big>"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:1
+msgid "<small><i>Choose the location of the database you want to import from</i></small>"
+msgstr "<small><i>Izbira mesta podatkovne zbirke za uvaÅanje</i></small>"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:2
+msgid ""
+"<small><i>Choose what to import from the selected db.\n"
+"\"New Rolls Only\" is the smart option that will avoid re-importing photos you could have imported during a previous operation.\n"
+"\"A Single Import Roll\" let you choose which roll you want to merge back.\n"
+"\"Everything\" will import everything, creating duplicates if you already imported from that database.</i></small>"
+msgstr ""
+"<small><i>Izberite kaj Åelite uvoziti iz izbrane podatkovne zbirke.\n"
+"\"Samo novi zvitki\" je pametna moÅnost, ki se bo izognila ponovnemu uvaÅanju Åe uvoÅenih fotografij.\n"
+"\"Posamezni uvozni zvitek\" omogoÄa izbiro zvitka za zdruÅevanje.\n"
+"\"Vse\" uvozi vse in ustvari dvojnike, Äe so bile fotografije iz te podatkovne zbirke Åe uvoÅene.</i></small>"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:6
+msgid "<small><i>Copy the images locally or keep them where they are. If you chose the later, be sure that this location will stay accessible from f-spot.</i></small>"
+msgstr "<small><i>Krajevno kopiranje slik ali izbira njihovega trenutnega mesta. V slednjem primeru se je treba prepriÄati, da bo to mesto ostalo dostopno iz f-spot-a.</i></small>"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:7
+msgid "A Single Import Roll"
+msgstr "Posamezen uvozni zvitek"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:8
+msgid "Copy images to photos folder"
+msgstr "Kopiranje slik v mapo fotografij"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:9
+msgid "Database Location:"
+msgstr "Mesto podatkovne zbirke:"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:10
+msgid "Everything"
+msgstr "Vse"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:11
+msgid "Import:"
+msgstr "Uvozi:"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:12
+msgid "Keep the images at their original location"
+msgstr "ObdrÅi slike na njihovem izvirnem mestu"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:13
+msgid "Merge another F-Spot collection"
+msgstr "ZdruÅitev druge zbirke F-Spot"
+
+#: ../src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/mergedb_dialog.ui.h:14
+msgid "New Rolls Only"
+msgstr "Samo novi zvitki"
+
+#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:2
+msgid "Delay:"
+msgstr "Zamik:"
+
+#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:3
+msgid "Display:"
+msgstr "Zaslon:"
+
+#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:4
+msgid "Images tagged with:"
+msgstr "Slike oznaÄene z:"
+
+#: ../src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui.h:5
+msgid "Make F-Spot my screensaver"
+msgstr "Naredi F-spot moj ohranjevalnik zaslona"
+
+#: ../src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Addins.Transitions/Cover.cs:45
+msgid "Cover"
+msgstr "Naslovnica"
+
+#: ../src/Extensions/Transitions/FSpot.Transitions.Dissolve/FSpot.Addins.Transitions/Dissolve.cs:45
+msgid "Dissolve"
+msgstr "Raztapljanje"
+
+#: ../src/Extensions/Transitions/FSpot.Transitions.Push/FSpot.Addins.Transitions/Push.cs:45
+msgid "Push"
+msgstr "Potisk"
+
+#: ../tools/f-spot-screensaver.desktop.in.h:1
+msgid "Display a slideshow from F-Spot"
+msgstr "PrikaÅe F-Spotovo diapredstavitev"
+
+#: ../tools/f-spot-screensaver.desktop.in.h:2
+msgid "F-Spot photos"
+msgstr "F-Spot fotografije"
+
+#~ msgid "(wrong format)"
+#~ msgstr "(napaÄen zapis)"
+
+#~ msgid "(At least one File not found)"
+#~ msgstr "(vsaj ene datoteke ni mogoÄe najti)"
+
+#~ msgid "Show Photo Name"
+#~ msgstr "PokaÅi ime fotografije"
+
+#~ msgid ""
+#~ "Metadata of file {0} may be corrupt, refusing to write to it, falling "
+#~ "back to XMP sidecar."
+#~ msgstr ""
+#~ "Metapodatki datoteke {0} so morda pokvarjeni, zato ne bodo zapisani. "
+#~ "Uporabljena bo dodatna datoteka XMP."
+
+#~ msgid "Rating:"
+#~ msgstr "Ocena:"
+
+#~ msgid ""
+#~ "In order to detect duplicates on pictures you imported before 0.5.0, F-"
+#~ "Spot needs to analyze your image collection. This is not done by default "
+#~ "as it's time consuming. You can Start or Pause this update process using "
+#~ "this dialog."
+#~ msgstr ""
+#~ "Za zaznavanje dvojnikov slik, ki so bile uvoÅene pred 0.5.0, mora F-spot "
+#~ "preuÄiti zbirko slik. To ni storjeno samodejno, ker vzame veliko Äasa. V "
+#~ "temu pogovornemu oknu lahko postopek posodabljanja zaÅenete ali zaÄasno "
+#~ "zaustavite."
+
+#~ msgid ""
+#~ "You currently have {0} photos needing md5 calculation, and {1} pending "
+#~ "jobs"
+#~ msgstr ""
+#~ "Trenutno imate {0} fotografij, ki potrebujejo izraÄun md5 in {1} "
+#~ "ÄakajoÄih poslov"
+
+#~ msgid "Processing images..."
+#~ msgstr "Obdelavanje slik ..."
+
+#~ msgid "Stopped"
+#~ msgstr "Zaustavljeno"
+
+#~ msgid "Strip _metadata"
+#~ msgstr "Odstrani _metapodatke"
+
+#~ msgid "Check for Duplicates..."
+#~ msgstr "Zaznaj dvojnike ..."
+
+#~ msgid "F-Spot Encountered a Fatal Error"
+#~ msgstr "PriÅlo je do usodne napake"
+
+#~ msgid "Error Details"
+#~ msgstr "Podrobnosti napake"
+
+#~ msgid "An unhandled exception was thrown: "
+#~ msgstr "Nesprejeto izjemno dejanje:"
+
+#~ msgid "Attach Tags:"
+#~ msgstr "Pripenjanje oznak:"
+
+#~ msgid "Autorotate"
+#~ msgstr "Samodejno vrtenje"
+
+#~ msgid "_Autorotate"
+#~ msgstr "S_amodejno vrtenje"
+
+#~ msgid "Unknown transform type %d"
+#~ msgstr "Neznana vrsta pretvorbe %d"
+
+#~ msgid "Operation failed"
+#~ msgstr "Dejanje ni uspelo"
+
+#~ msgid "No way to save files of type \"{0}\""
+#~ msgstr "Ni naÄina za shranjevanje datotek vrste \"{0}\""
+
+#~ msgid "Thumbnail Directory"
+#~ msgstr "Mapa sliÄic"
+
+#~ msgid "Exif Directory"
+#~ msgstr "Exif mapa"
+
+#~ msgid "GPS Directory"
+#~ msgstr "GPS mapa"
+
+#~ msgid "InterOperability Directory"
+#~ msgstr "Mapa vzajemnega delovanja"
+
+#~ msgid "Unknown Directory"
+#~ msgstr "Neznana mapa"
+
+#~ msgid "Writing to this file format is not supported"
+#~ msgstr "Pisanje v to vrsto datoteke ni podprto"
+
+#~ msgid "IPTC Information Interchange Model (IIM) Version number"
+#~ msgstr "Åtevilka razliÄice IPTC Informacijsko Izmenjalnega Modela (IIM) "
+
+#~ msgid "OSI Destination routing information"
+#~ msgstr "OSI podrobnosti o potovanju do cilja"
+
+#~ msgid "IPTC file format"
+#~ msgstr "IPTC vrsta datoteke"
+
+#~ msgid "Identifies the provider and product"
+#~ msgstr "DoloÄa ponudnika in izdelek"
+
+#~ msgid "A unique number identifying the envelope"
+#~ msgstr "Edinstveno Åtevilo za doloÄevanje ovojnice"
+
+#~ msgid "A unique number"
+#~ msgstr "Edinstveno Åtevilo"
+
+#~ msgid ""
+#~ "The envelope handling priority between 1 (most urgent) and 9 (least "
+#~ "urgent)"
+#~ msgstr ""
+#~ "Prednost upravljanja ovojnice med 1 (najbolj nujno) in 9 (najmanj nujno)"
+
+#~ msgid "The year, month and day (CCYYMMDD) the service sent the material"
+#~ msgstr "Leto, mesec in dan (LLLLMMDD), ko je storitev poslala material"
+
+#~ msgid "The hour, minute and second (HHMMSS) the service sent the material"
+#~ msgstr "Ura, minuta in sekunda (UUMMSS), ko je storitev poslala material."
+
+#~ msgid "The character set designation"
+#~ msgstr "Imenovanje niza znakov"
+
+#~ msgid "External globally unique object identifier"
+#~ msgstr "Zunanje edinstveno doloÄilo predmeta"
+
+#~ msgid "Abstract Relationship Method (ARM) identifier"
+#~ msgstr "DoloÄilo metode abstraktnega razmerja (ARM)"
+
+#~ msgid "Abstract Relationship Method (ARM) version number."
+#~ msgstr "Åtevilka razliÄice metode abstraktnega razmerja (ARM)"
+
+#~ msgid "Number identifying the IIM version this application record uses"
+#~ msgstr "Åtevilka razliÄice IIM, ki jo uporablja programski zapis"
+
+#~ msgid "Object type reference"
+#~ msgstr "Sklic vrste predmeta"
+
+#~ msgid "Object attribute reference"
+#~ msgstr "Sklic atributov predmeta"
+
+#~ msgid "Object name"
+#~ msgstr "Ime predmeta"
+
+#~ msgid "Status of the objectdata according to the provider"
+#~ msgstr "Stanje podatkov predmeta glede na ponudnika"
+
+#~ msgid "Location within a city or area where the object originates"
+#~ msgstr "Kraj znotraj mesta ali obmoÄja od koder izvira vsebina"
+
+#~ msgid "Name of the city the content is focussing on"
+#~ msgstr "Ime mesta na katerega se osredotoÄa vsebina"
+
+#~ msgid "Copyright information for"
+#~ msgstr "Podrobnosti avtorskih pravic za "
+
+#~ msgid "Full name of the country of the focus of the content"
+#~ msgstr "Polno ime drÅave in osredotoÄenost vsebine"
+
+#~ msgid ""
+#~ "Two or three letter ISO3166 code of the country of the focus of the "
+#~ "content"
+#~ msgstr "Dvo ali tri Ärkovna ISO3166 koda drÅave in osredotoÄenost vsebine"
+
+#~ msgid "Creator of the content"
+#~ msgstr "Ustvarjalec vsebine"
+
+#~ msgid "Provider of the object"
+#~ msgstr "Ponudnik predmeta"
+
+#~ msgid "The title of the author or creator"
+#~ msgstr "Naslov avtorja ali ustvarjalca"
+
+#~ msgid ""
+#~ "The person involved in writing, editing or correcting the object data or "
+#~ "caption/abstract"
+#~ msgstr ""
+#~ "Oseba vkljuÄena v pisanje, urejanje ali popravljanje podatkov o predmetu "
+#~ "ali obnove"
+
+#~ msgid "Headline of the content"
+#~ msgstr "Naslovnica vsebine"
+
+#~ msgid ""
+#~ "Instructions from the creator to the receiver not covered by other fields"
+#~ msgstr ""
+#~ "Navodila od ustvarjalca za uporabnika, ki niso opredeljena z drugimi polji"
+
+#~ msgid "Intellectual genre of the object"
+#~ msgstr "Intelektualna zvrst predmeta"
+
+#~ msgid "Unknown IIM DataSet"
+#~ msgstr "Neznan IIM niz podatkov"
+
+#~ msgid "Title"
+#~ msgstr "Naslov"
+
+#~ msgid "Copyright"
+#~ msgstr "Avtorske pravice"
+
+#~ msgid "Subject and Keywords"
+#~ msgstr "Predmet in kljuÄne besede"
+
+#~ msgid "Compression"
+#~ msgstr "Stiskanje"
+
+#~ msgid "Planar Configuration"
+#~ msgstr "Nastavitev ravnine"
+
+#~ msgid "Orientation"
+#~ msgstr "Usmerjenost"
+
+#~ msgid "Photometric Interpretation"
+#~ msgstr "FotometriÄno tolmaÄenje"
+
+#~ msgid "Resolution Unit"
+#~ msgstr "Enota loÄljivosti"
+
+#~ msgid "Exposure Program"
+#~ msgstr "Program osvetlitve"
+
+#~ msgid "Metering Mode"
+#~ msgstr "NaÄin umerjanja"
+
+#~ msgid "Exposure Mode"
+#~ msgstr "NaÄin osvetlitve"
+
+#~ msgid "Custom Rendered"
+#~ msgstr "Izris po meri"
+
+#~ msgid "Components Configuration"
+#~ msgstr "Nastavitve enot"
+
+#~ msgid "Light Source"
+#~ msgstr "Vir svetlobe"
+
+#~ msgid "Sensing Method"
+#~ msgstr "Metoda zaznavanja"
+
+#~ msgid "Color Space"
+#~ msgstr "Barvni prostor"
+
+#~ msgid "White Balance"
+#~ msgstr "UravnoteÅenje beline"
+
+#~ msgid "Focal Plane Resolution Unit"
+#~ msgstr "Enota ploskovne loÄljivosti ÅariÅÄa."
+
+#~ msgid "File Source Type"
+#~ msgstr "Vrsta izvorne datoteke"
+
+#~ msgid "Scene Capture Type"
+#~ msgstr "Vrsta zajema scene"
+
+#~ msgid "Gain Control"
+#~ msgstr "Nadzor ojaÄitve"
+
+#~ msgid "Contrast"
+#~ msgstr "Kontrast"
+
+#~ msgid "Saturation"
+#~ msgstr "NasiÄenost"
+
+#~ msgid "Sharpness"
+#~ msgstr "Ostrina"
+
+#~ msgid "Scene Type"
+#~ msgstr "Vrsta scene"
+
+#~ msgid ""
+#~ "Specify if an original size picture should be rotated or not. Smaller "
+#~ "sizes are automatically rotated."
+#~ msgstr ""
+#~ "DoloÄa ali naj bo originalna slika zavrtena ali ne. ManjÅe velikosti so "
+#~ "samodejno zavrtene."
+
+#~ msgid "Unable to create temporary file"
+#~ msgstr "Ni mogoÄe ustvariti zaÄasne datoteke "
+
+#~ msgid "No Extended Metadata Available"
+#~ msgstr "RazÅirjeni metapodatki niso na voljo"
+
+#~ msgid "Country"
+#~ msgstr "DrÅava"
+
+#~ msgid "City"
+#~ msgstr "Mesto"
+
+#~ msgid "State"
+#~ msgstr "Regija"
+
+#~ msgid "Comment:"
+#~ msgstr "Opomba:"
+
+#~ msgid "Open _Folder..."
+#~ msgstr "Odpri _Mapo ..."
+
+#~ msgid "_New Window"
+#~ msgstr "_Novo Okno"
+
+#~ msgid "\n"
+#~ msgstr "\n"
+
+#~ msgid "<b>{0}</b>."
+#~ msgstr "<b>{0}</b>."
+
+#~ msgid "<small></small>"
+#~ msgstr "<small></small>"
+
+#~ msgid "Photo 0 of 0"
+#~ msgstr "Fotografija 0 od 0"
+
+#~ msgid "Preview"
+#~ msgstr "Predogled"
+
+#~ msgid "Path"
+#~ msgstr "Pot"
+
+#~ msgid "File"
+#~ msgstr "Datoteka"
+
+#~ msgid "Select Tag"
+#~ msgstr "Izbor oznake"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "Nalaganje predogledov"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Nalaganje predogleda {0}"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Kopiranje datoteke {0} od {1}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "Napaka med prenosom datoteke"
+
+#~ msgid "Download Complete"
+#~ msgstr "Prenos konÄan"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "Kopiranje datotek konÄano"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "PrenaÅanje \"{0}\" s fotoaparata"
+
+#~ msgid "Port"
+#~ msgstr "Vrata"
+
+#~ msgid "Import error"
+#~ msgstr "Napaka uvaÅanja"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Napaka med uvaÅanjem {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Camera Selection"
+#~ msgstr "Izbira fotoaparata"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "_E-poÅta:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "Izvozi _naslove in opombe"
+
+#~ msgid "G_allery:"
+#~ msgstr "G_alerija:"
+
+#~ msgid "Gallery"
+#~ msgstr "Galerija"
+
+#~ msgid "Pause"
+#~ msgstr "Premor"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Izbor fotografij za kopiranje s fotoaparata"
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Izbor fotoaparata za prenos datotek"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "Izbran fotoaparat:"
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "Odstrani _metapodatke slike"
+
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Galerija"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "_Odpri album v brskalniku po konÄanem nalaganju"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "_Odpiri cilj po konÄanem izvozu"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "_Spreminjanje velikosti fotografij na ne veÄ kot: "
+
+#~ msgid "_Strip metadata"
+#~ msgstr "O_dstrani metapodatke"
+
+#~ msgid "_URI:"
+#~ msgstr "_URI:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "_Navidezni datoteÄni sistem"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Done Loading"
+#~ msgstr "Nalaganje konÄano"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "Mapa ne obstaja"
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist.  Please choose a "
+#~ "different directory"
+#~ msgstr "Mapa \"{0}\", ki ste jo izbrali, ne obstaja. Izberite drugo mapo."
+
+#~ msgid "No cameras detected."
+#~ msgstr "Noben fotoaparat ni bil zaznan."
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system.  Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "Program F-spot ni zaznal v sistem povezanih fotoaparatov. Dvakrat "
+#~ "preverite, ali je fotoaparat povezan in priÅgan."
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "Napaka med povezovanjem s fotoaparatom"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Med povezovanjem s fotoaparatom je bila prejeta napaka \"{0}\""
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "RazliÄica slike ({0})"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "Ni mogoÄe ustvariti nove razliÄice"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr ""
+#~ "Prejeta je bila napaka \"{0}\". Ni mogoÄe ustvariti razliÄice \"{1}\""
+
+#~ msgid "Really Delete?"
+#~ msgstr "ResniÄen izbris?"
+
+#~ msgid "Cancel"
+#~ msgstr "PrekliÄi"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "Ni mogoÄe izbrisati razliÄice"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr ""
+#~ "Prejeta je bila napaka \"{0}\". Ni mogoÄe izbrisati razliÄice \"{1}\""
+
+#~ msgid "Could not rename a version"
+#~ msgstr "Ni mogoÄe preimenovati razliÄice"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr ""
+#~ "Prejeta je bila napaka \"{0}\". Ni mogoÄe preimenovati razliÄice v \"{1}\""
+
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Napaka: napaka med prenosom; preklicano"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Napaka: datoteka Åe obstaja; preklicano"
+
+#~ msgid "Edit Selected Tag..."
+#~ msgstr "Uredi izbrane oznake ..."
+
+#~ msgid "_Edit Selected Tag..."
+#~ msgstr "_Uredi izbrane oznake ..."
+
+#~ msgid "Package"
+#~ msgstr "Paket"
+
+#~ msgid "Extension Installation"
+#~ msgstr "Namestitev razÅiritev"
+
+#~ msgid "<b>Select the extensions to install and click on Next</b>"
+#~ msgstr "<b>Izberite razÅiritve za namestitev in kliknite Naprej</b> "
+
+#~ msgid "Install from:"
+#~ msgstr "NameÅÄanje iz: "
+
+#~ msgid "_Repositories..."
+#~ msgstr "Sk_ladiÅÄa ..."
+
+#~ msgid "Show all packages"
+#~ msgstr "PokaÅi vse pakete"
+
+#~ msgid "Show new versions only"
+#~ msgstr "PokaÅi le nove razliÄice"
+
+#~ msgid "Show updates only"
+#~ msgstr "PokaÅi le posodobitve"
+
+#~ msgid "_Unselect All"
+#~ msgstr "_PoÄisti ves izbor"
+
+#~ msgid "label124"
+#~ msgstr "oznaka123"
+
+#~ msgid "Overall Progress:"
+#~ msgstr "Skupni napredek:"
+
+#~ msgid "Downloading extensions..."
+#~ msgstr "PrenaÅanje razÅiritev ..."
+
+#~ msgid "Extension Manager"
+#~ msgstr "Upravljalnik razÅiritev"
+
+#~ msgid "Additional extensions are required to perform this operation."
+#~ msgstr "Za izvajanje dejanja so obvezne dodatne razÅiritve."
+
+#~ msgid "The following extensions will be installed:"
+#~ msgstr "NameÅÄene bodo sledeÄe razÅiritve:"
+
+#~ msgid "<big><b>Extension Manager</b></big>"
+#~ msgstr "<big><b>Upravljalnik razÅiritev</b></big> "
+
+#~ msgid "The following extensions are currently installed:"
+#~ msgstr "Trenutno so nameÅÄene sledeÄe razÅiritve:"
+
+#~ msgid "_Install Extensions..."
+#~ msgstr "_Namesti razÅiritve ..."
+
+#~ msgid "_Uninstall..."
+#~ msgstr "_Odstrani ..."
+
+#~ msgid "Enable"
+#~ msgstr "OmogoÄi"
+
+#~ msgid "Disable"
+#~ msgstr "OnemogoÄi"
+
+#~ msgid "Extension Repository Management"
+#~ msgstr "Upravljanje skladiÅÄa razÅiritev"
+
+#~ msgid "Add New Repository"
+#~ msgstr "Dodajanje novega skladiÅÄa"
+
+#~ msgid "Select the location of the repository you want to register:"
+#~ msgstr "Izbor mesta skladiÅÄa za registracijo:"
+
+#~ msgid "Register an on-line repository"
+#~ msgstr "Registracija spletnega skladiÅÄa"
+
+#~ msgid "Url:"
+#~ msgstr "URL:"
+
+#~ msgid "Register a local repository"
+#~ msgstr "Registracija krajevnega skladiÅÄa."
+
+#~ msgid "Path:"
+#~ msgstr "Pot:"
+
+#~ msgid "Browse..."
+#~ msgstr "Prebrskaj ..."
+
+#~ msgid "Version:"
+#~ msgstr "RazliÄica:"
+
+#~ msgid "Author:"
+#~ msgstr "Avtor:"
+
+#~ msgid "Copyright:"
+#~ msgstr "Avtorske pravice:"
+
+#~ msgid "Extension Dependencies:"
+#~ msgstr "Odvisnosti razÅiritve:"
+
+#~ msgid "All registered repositories"
+#~ msgstr "Vsa registrirana skladiÅÄa"
+
+#~ msgid "Are you sure you want to cancel the installation?"
+#~ msgstr "Ali ste prepriÄani, da Åelite preklicati namestitev?"
+
+#~ msgid "The following packages will be uninstalled:"
+#~ msgstr "SledeÄi paketi bodo odstranjeni:"
+
+#~ msgid ""
+#~ "There are other extensions that depend on the previous ones which will "
+#~ "also be uninstalled:"
+#~ msgstr "Druge razÅiritve so odvisne od prejÅnjih in bodo tudi odstranjene:"
+
+#~ msgid ""
+#~ "The selected extensions can't be installed because there are dependency "
+#~ "conflicts."
+#~ msgstr ""
+#~ "Izbrane razÅiritve ne morejo biti nameÅÄene zaradi spora odvisnosti."
+
+#~ msgid "The following packages will be installed:"
+#~ msgstr "NameÅÄeni bodo sledeÄi paketi:"
+
+#~ msgid " (in user directory)"
+#~ msgstr "(v uporabnikovi mapi)"
+
+#~ msgid "The following packages need to be uninstalled:"
+#~ msgstr "Odstranjeni bodo sledeÄi paketi:"
+
+#~ msgid "The following dependencies could not be resolved:"
+#~ msgstr "Ni bilo zadoÅÄeno sledeÄim odvisnostim:"
+
+#~ msgid "The installation has been successfully completed."
+#~ msgstr "Namestitev je uspeÅno konÄana."
+
+#~ msgid "The installation failed!"
+#~ msgstr "Namestitev je spodletela!"
+
+#~ msgid "The installation has completed with warnings."
+#~ msgstr "Namestitev je zakljuÄena z opozorili."
+
+#~ msgid "The uninstallation has been successfully completed."
+#~ msgstr "Odstranjevanje namestitve je bilo uspeÅno zakljuÄeno."
+
+#~ msgid "The uninstallation failed!"
+#~ msgstr "Odstranjevanje namestitve je spodletelo!"
+
+#~ msgid "The uninstallation has completed with warnings."
+#~ msgstr "Odstranjevanje namestitve je bilo zakljuÄeno z opozorili."
+
+#~ msgid "Repository"
+#~ msgstr "SkladiÅÄe"
+
+#~ msgid "Installation cancelled"
+#~ msgstr "Namestitev je bila preklicana"
+
+#~ msgid "Some of the required extensions were not found"
+#~ msgstr "Nekaj zahtevanih razÅiritev ni bilo najdenih"
+
+#~ msgid "Installation failed"
+#~ msgstr "Namestitev ni uspela"
+
+#~ msgid "Extension"
+#~ msgstr "RazÅiritev"
+
+#~ msgid "Other"
+#~ msgstr "Ostalo"
+
+#~ msgid "Exception occurred: {0}"
+#~ msgstr "PriÅlo je do izjemne napake: {0}"
+
+#~ msgid "Disabled extensions can't be loaded."
+#~ msgstr "OnemogoÄene razÅiritve ne morejo biti naloÅene."
+
+#~ msgid "Loading {0} extension"
+#~ msgstr "Nalaganje razÅiritve {0}"
+
+#~ msgid "The required extension '{0}' is disabled."
+#~ msgstr "Zahtevana razÅiritev '{0}' je onemogoÄena."
+
+#~ msgid "The required extension '{0}' is not installed."
+#~ msgstr "Zahtevana razÅiritev '{0}' ni nameÅÄena."
+
+#~ msgid "(provided by {0})"
+#~ msgstr "(ponudnik {0})"
+
+#~ msgid "my photos"
+#~ msgstr "moje fotografije"
+
+#~ msgid "Copy Locat_ion"
+#~ msgstr "Kopiraj _mesto"
+
+#~ msgid "Reveal"
+#~ msgstr "Razodeni"
+
+#~ msgid "Wipe"
+#~ msgstr "DokonÄno poÄisti"
+
+#~ msgid "Split"
+#~ msgstr "Razdelitev"
diff --git a/po/sort-potfiles b/po/sort-potfiles
old mode 100644
new mode 100755
diff --git a/src/Clients/MainApp.UnitTest/MainApp.UnitTest.csproj b/src/Clients/MainApp.UnitTest/MainApp.UnitTest.csproj
index f5e1fa1..0e81c3a 100644
--- a/src/Clients/MainApp.UnitTest/MainApp.UnitTest.csproj
+++ b/src/Clients/MainApp.UnitTest/MainApp.UnitTest.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>MainApp.UnitTest</RootNamespace>
     <AssemblyName>MainApp.UnitTest</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="nunit.core, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77" />
@@ -60,21 +40,7 @@
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot\" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\MainApp\MainApp.csproj">
diff --git a/src/Clients/MainApp/DependentListStore.cs b/src/Clients/MainApp/DependentListStore.cs
index 29d807a..1c1161f 100644
--- a/src/Clients/MainApp/DependentListStore.cs
+++ b/src/Clients/MainApp/DependentListStore.cs
@@ -28,6 +28,8 @@
 //
 
 using Gtk;
+using Gdk;
+using System;
 
 public class DependentListStore : ListStore {
         private TreeModel parent = null;
diff --git a/src/Clients/MainApp/FSpot.ColorAdjustment/Adjustment.cs b/src/Clients/MainApp/FSpot.ColorAdjustment/Adjustment.cs
index a3917d7..e85da0a 100644
--- a/src/Clients/MainApp/FSpot.ColorAdjustment/Adjustment.cs
+++ b/src/Clients/MainApp/FSpot.ColorAdjustment/Adjustment.cs
@@ -29,11 +29,10 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System.Collections.Generic;
-
+using FSpot.Utils;
 using Cms;
-
 using Gdk;
+using System.Collections.Generic;
 
 namespace FSpot.ColorAdjustment {
 	public abstract class Adjustment {
diff --git a/src/Clients/MainApp/FSpot.ColorAdjustment/AutoStretch.cs b/src/Clients/MainApp/FSpot.ColorAdjustment/AutoStretch.cs
index 9c3bc36..e4181ac 100644
--- a/src/Clients/MainApp/FSpot.ColorAdjustment/AutoStretch.cs
+++ b/src/Clients/MainApp/FSpot.ColorAdjustment/AutoStretch.cs
@@ -27,13 +27,10 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-using System.Collections.Generic;
-
 using Cms;
-
 using Gdk;
-
+using System;
+using System.Collections.Generic;
 using Hyena;
 
 namespace FSpot.ColorAdjustment {
diff --git a/src/Clients/MainApp/FSpot.ColorAdjustment/Desaturate.cs b/src/Clients/MainApp/FSpot.ColorAdjustment/Desaturate.cs
index 6e77e65..9c13282 100644
--- a/src/Clients/MainApp/FSpot.ColorAdjustment/Desaturate.cs
+++ b/src/Clients/MainApp/FSpot.ColorAdjustment/Desaturate.cs
@@ -27,11 +27,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System.Collections.Generic;
-
 using Cms;
-
 using Gdk;
+using System.Collections.Generic;
 
 namespace FSpot.ColorAdjustment {
 	public class Desaturate : Adjustment {
diff --git a/src/Clients/MainApp/FSpot.ColorAdjustment/FullColorAdjustment.cs b/src/Clients/MainApp/FSpot.ColorAdjustment/FullColorAdjustment.cs
index 9bfac37..22f39fd 100644
--- a/src/Clients/MainApp/FSpot.ColorAdjustment/FullColorAdjustment.cs
+++ b/src/Clients/MainApp/FSpot.ColorAdjustment/FullColorAdjustment.cs
@@ -27,11 +27,11 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Cms;
+using Gdk;
 using System;
 using System.Collections.Generic;
 
-using Gdk;
-
 namespace FSpot.ColorAdjustment {
 	public class FullColorAdjustment : Adjustment {
 		private double exposure;
diff --git a/src/Clients/MainApp/FSpot.ColorAdjustment/SepiaTone.cs b/src/Clients/MainApp/FSpot.ColorAdjustment/SepiaTone.cs
index 532432c..2a84f96 100644
--- a/src/Clients/MainApp/FSpot.ColorAdjustment/SepiaTone.cs
+++ b/src/Clients/MainApp/FSpot.ColorAdjustment/SepiaTone.cs
@@ -27,11 +27,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System.Collections.Generic;
-
 using Cms;
-
 using Gdk;
+using System.Collections.Generic;
 
 namespace FSpot.ColorAdjustment {
 	public class SepiaTone : Adjustment {
diff --git a/src/Clients/MainApp/FSpot.Editors/AutoStretchEditor.cs b/src/Clients/MainApp/FSpot.Editors/AutoStretchEditor.cs
index a773f36..a0ff4dc 100644
--- a/src/Clients/MainApp/FSpot.Editors/AutoStretchEditor.cs
+++ b/src/Clients/MainApp/FSpot.Editors/AutoStretchEditor.cs
@@ -27,23 +27,21 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FSpot;
 using FSpot.ColorAdjustment;
-
 using Gdk;
-
 using Mono.Unix;
 
 namespace FSpot.Editors {
-	// FIXME: This class is never used
-	class AutoStretchEditor : Editor {
-		public AutoStretchEditor () : base (Catalog.GetString ("Auto Color"), "autocolor") {
+    class AutoStretchEditor : Editor {
+        public AutoStretchEditor () : base (Catalog.GetString ("Auto Color"), "autocolor") {
 			// FIXME: need tooltip Catalog.GetString ("Automatically adjust the colors")
 			CanHandleMultiple = true;
-		}
+        }
 
-		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
-			AutoStretch autostretch = new AutoStretch (input, input_profile);
-			return autostretch.Adjust ();
-		}
-	}
+        protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
+            AutoStretch autostretch = new AutoStretch (input, input_profile);
+            return autostretch.Adjust ();
+        }
+    }
 }
diff --git a/src/Clients/MainApp/FSpot.Editors/ColorEditor.cs b/src/Clients/MainApp/FSpot.Editors/ColorEditor.cs
index 5ddd90a..41b3e12 100644
--- a/src/Clients/MainApp/FSpot.Editors/ColorEditor.cs
+++ b/src/Clients/MainApp/FSpot.Editors/ColorEditor.cs
@@ -29,18 +29,16 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
+using FSpot;
 using FSpot.ColorAdjustment;
-
 using Gdk;
 using Gtk;
-using GtkBeans;
-
 using Mono.Unix;
+using System;
+
+using GtkBeans;
 
 namespace FSpot.Editors {
-	// FIXME: This class is never used
 	class ColorEditor : Editor {
 		GtkBeans.Builder builder;
 
diff --git a/src/Clients/MainApp/FSpot.Editors/CropEditor.cs b/src/Clients/MainApp/FSpot.Editors/CropEditor.cs
index 80f24c0..0dc4d4c 100644
--- a/src/Clients/MainApp/FSpot.Editors/CropEditor.cs
+++ b/src/Clients/MainApp/FSpot.Editors/CropEditor.cs
@@ -27,23 +27,19 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Xml.Serialization;
-
+using FSpot;
 using FSpot.UI.Dialog;
 using FSpot.Utils;
-
+using Hyena;
 using Gdk;
 using Gtk;
-
-using Hyena;
-
 using Mono.Unix;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Xml.Serialization;
 
 namespace FSpot.Editors {
-	// FIXME: This is never used
 	class CropEditor : Editor {
 		private TreeStore constraints_store;
 		private ComboBox constraints_combo;
diff --git a/src/Clients/MainApp/FSpot.Editors/DesaturateEditor.cs b/src/Clients/MainApp/FSpot.Editors/DesaturateEditor.cs
index 86074f6..d8ad3b4 100644
--- a/src/Clients/MainApp/FSpot.Editors/DesaturateEditor.cs
+++ b/src/Clients/MainApp/FSpot.Editors/DesaturateEditor.cs
@@ -27,23 +27,21 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FSpot;
 using FSpot.ColorAdjustment;
-
 using Gdk;
-
 using Mono.Unix;
 
 namespace FSpot.Editors {
-	// FIXME: This is never used
-	class DesaturateEditor : Editor {
-		public DesaturateEditor () : base (Catalog.GetString ("Desaturate"), "color-desaturate") {
+    class DesaturateEditor : Editor {
+        public DesaturateEditor () : base (Catalog.GetString ("Desaturate"), "color-desaturate") {
 			// FIXME: need tooltip Catalog.GetString ("Convert the photo to black and white")
 			CanHandleMultiple = true;
-		}
+        }
 
-		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
-			Desaturate desaturate = new Desaturate (input, input_profile);
-			return desaturate.Adjust ();
-		}
-	}
+        protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
+            Desaturate desaturate = new Desaturate (input, input_profile);
+            return desaturate.Adjust ();
+        }
+    }
 }
diff --git a/src/Clients/MainApp/FSpot.Editors/Editor.cs b/src/Clients/MainApp/FSpot.Editors/Editor.cs
index 8502298..3d9051b 100644
--- a/src/Clients/MainApp/FSpot.Editors/Editor.cs
+++ b/src/Clients/MainApp/FSpot.Editors/Editor.cs
@@ -37,13 +37,13 @@ using Gdk;
 using Gtk;
 
 using Mono.Addins;
+using Mono.Unix;
 
 using System;
 
 namespace FSpot.Editors {
 
 	// TODO: Move EditorNode to FSpot.Extionsions?
-	// FIXME: EditorNode is never instantiated
 	[ExtensionNode ("Editor")]
 	public class EditorNode : ExtensionNode {
 		[NodeAttribute (Required=true)]
@@ -195,7 +195,11 @@ namespace FSpot.Editors {
 			return Process (input, input_profile);
 		}
 
-		public bool HasSettings { get; protected set; }
+		private bool has_settings;
+		public bool HasSettings {
+			get { return has_settings; }
+			protected set { has_settings = value; }
+		}
 
 		private Pixbuf original;
 		private Pixbuf preview;
@@ -265,8 +269,9 @@ namespace FSpot.Editors {
 		}
 
 		private void Reset () {
-			if (preview != null) 
+			if (preview != null) {
 				preview.Dispose ();
+			}
 
 			preview = null;
 			original = null;
diff --git a/src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs b/src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs
index 411fa12..72224fc 100644
--- a/src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs
+++ b/src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs
@@ -29,13 +29,14 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FSpot;
+using FSpot.Utils;
 using Gdk;
 using Gtk;
-
 using Mono.Unix;
+using System;
 
 namespace FSpot.Editors {
-	// FIXME: This is never used
 	class RedEyeEditor : Editor {
 		public RedEyeEditor () : base (Catalog.GetString ("Red-eye Reduction"), "red-eye-remove") {
 			// FIXME: ??? need tooltip Catalog.GetString ("Remove red-eye form the photo")
diff --git a/src/Clients/MainApp/FSpot.Editors/SepiaEditor.cs b/src/Clients/MainApp/FSpot.Editors/SepiaEditor.cs
index ff57f84..29b3cf1 100644
--- a/src/Clients/MainApp/FSpot.Editors/SepiaEditor.cs
+++ b/src/Clients/MainApp/FSpot.Editors/SepiaEditor.cs
@@ -27,23 +27,21 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FSpot;
 using FSpot.ColorAdjustment;
-
 using Gdk;
-
 using Mono.Unix;
 
 namespace FSpot.Editors {
-	// FIXME: This is never used
-	class SepiaEditor : Editor {
-		public SepiaEditor () : base (Catalog.GetString ("Sepia Tone"), "color-sepia") {
+    class SepiaEditor : Editor {
+        public SepiaEditor () : base (Catalog.GetString ("Sepia Tone"), "color-sepia") {
 			// FIXME: need tooltip Catalog.GetString ("Convert the photo to sepia tones")
 			CanHandleMultiple = true;
-		}
+        }
 
-		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
-			SepiaTone sepia = new SepiaTone (input, input_profile);
-			return sepia.Adjust ();
-		}
-	}
+        protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
+            SepiaTone sepia = new SepiaTone (input, input_profile);
+            return sepia.Adjust ();
+        }
+    }
 }
diff --git a/src/Clients/MainApp/FSpot.Editors/SoftFocusEditor.cs b/src/Clients/MainApp/FSpot.Editors/SoftFocusEditor.cs
index 8170a96..3d0f995 100644
--- a/src/Clients/MainApp/FSpot.Editors/SoftFocusEditor.cs
+++ b/src/Clients/MainApp/FSpot.Editors/SoftFocusEditor.cs
@@ -29,21 +29,19 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+using Mono.Unix;
 using Cairo;
-
-using FSpot.Widgets;
-
 using Gdk;
 using Gtk;
 
-using Mono.Unix;
+using FSpot.Widgets;
 
 using Pinta.Core;
 
 namespace FSpot.Editors
 {
 	// TODO: This had a keybinding e. Maybe we should add it back, but did people even knew it?
-	// FIXME: This class is never used
 	class SoftFocusEditor : Editor
 	{
 		double radius;
@@ -88,7 +86,7 @@ namespace FSpot.Editors
 							soft.Apply (ctx, info.Bounds);
 						}
 
-						result = surface.ToPixbuf();
+                        result = surface.ToPixbuf();
 						surface.Flush ();
 					}
 				}
diff --git a/src/Clients/MainApp/FSpot.Editors/TiltEditor.cs b/src/Clients/MainApp/FSpot.Editors/TiltEditor.cs
index 75b9da1..8d68283 100644
--- a/src/Clients/MainApp/FSpot.Editors/TiltEditor.cs
+++ b/src/Clients/MainApp/FSpot.Editors/TiltEditor.cs
@@ -30,22 +30,19 @@
 //
 
 using System;
-
-using Cairo;
-
-using FSpot.Widgets;
+using Mono.Unix;
 
 using Gdk;
 using Gtk;
+using Cairo;
 
-using Mono.Unix;
+using FSpot.Widgets;
 
 using Pinta.Core;
 
 namespace FSpot.Editors
 {
 	// TODO: there were keybindings (left/right) to adjust tilt, maybe they should be added back.
-	// FIXME: This is never used
 	class TiltEditor : Editor
 	{
 		double angle;
@@ -54,7 +51,7 @@ namespace FSpot.Editors
 		public TiltEditor () : base (Catalog.GetString ("Straighten"), "align-horizon") {
 			// FIXME: need tooltip Catalog.GetString ("Adjust the angle of the image to straighten the horizon")
 			HasSettings = true;
-		}
+        }
 
 		public override Widget ConfigurationWidget ()
 		{
@@ -90,7 +87,7 @@ namespace FSpot.Editors
 							ctx.Paint ();
 						}
 						result = surface.ToPixbuf();
-						surface.Flush ();
+                        surface.Flush ();
 					}
 				}
 			}
diff --git a/src/Clients/MainApp/FSpot.Extensions/CommandMenuItemNode.cs b/src/Clients/MainApp/FSpot.Extensions/CommandMenuItemNode.cs
index 9259d21..5ecd94f 100644
--- a/src/Clients/MainApp/FSpot.Extensions/CommandMenuItemNode.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/CommandMenuItemNode.cs
@@ -27,9 +27,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
 using Mono.Addins;
+using System;
 
 namespace FSpot.Extensions
 {
@@ -42,7 +41,7 @@ namespace FSpot.Extensions
 
 		protected override void OnActivated (object o, EventArgs e)
 		{
-			ICommand cmd = Addin.CreateInstance (command_type) as ICommand;
+			ICommand cmd = (ICommand) Addin.CreateInstance (command_type);
 			cmd.Run (o, e);
 		}
 	}
diff --git a/src/Clients/MainApp/FSpot.Extensions/ComplexMenuItemNode.cs b/src/Clients/MainApp/FSpot.Extensions/ComplexMenuItemNode.cs
index f748d75..eeeb7d1 100644
--- a/src/Clients/MainApp/FSpot.Extensions/ComplexMenuItemNode.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/ComplexMenuItemNode.cs
@@ -29,12 +29,12 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Mono.Addins;
+using FSpot.Widgets;
 using System;
 
 using Hyena.Widgets;
 
-using Mono.Addins;
-
 namespace FSpot.Extensions
 {
 	[ExtensionNode ("ComplexMenuItem")]
@@ -53,16 +53,16 @@ namespace FSpot.Extensions
 			ComplexMenuItem item = System.Activator.CreateInstance (Type.GetType (widget_type), parent) as ComplexMenuItem;
 			cmd = (ICommand) Addin.CreateInstance (command_type);
 
-			if (item != null)
-				item.Activated += OnActivated;
-			return item;
-		}
+            if (item != null)
+                item.Activated += OnActivated;
+            return item;
+        }
 
-		private void OnActivated (object o, EventArgs e)
-		{
-			if (cmd != null)
-				cmd.Run (o, e);
-		}
+        private void OnActivated (object o, EventArgs e)
+        {
+            if (cmd != null)
+                cmd.Run (o, e);
+        }
 	}
 
 }
diff --git a/src/Clients/MainApp/FSpot.Extensions/ExportMenuItemNode.cs b/src/Clients/MainApp/FSpot.Extensions/ExportMenuItemNode.cs
index f768fd7..3b430bd 100644
--- a/src/Clients/MainApp/FSpot.Extensions/ExportMenuItemNode.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/ExportMenuItemNode.cs
@@ -27,12 +27,11 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Mono.Addins;
 using System;
 
 using FSpot.Core;
 
-using Mono.Addins;
-
 namespace FSpot.Extensions
 {
 	public delegate PhotoList SelectedImages ();
@@ -48,7 +47,7 @@ namespace FSpot.Extensions
 
 		protected override void OnActivated (object o, EventArgs e)
 		{
-			IExporter exporter = Addin.CreateInstance (class_name) as IExporter;
+			IExporter exporter = (IExporter) Addin.CreateInstance (class_name);
 			exporter.Run (SelectedImages ());
 		}
 	}
diff --git a/src/Clients/MainApp/FSpot.Extensions/IExporter.cs b/src/Clients/MainApp/FSpot.Extensions/IExporter.cs
index a7f5da8..838a672 100644
--- a/src/Clients/MainApp/FSpot.Extensions/IExporter.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/IExporter.cs
@@ -29,6 +29,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Mono.Addins;
+using System;
+
 using FSpot.Core;
 
 namespace FSpot.Extensions
diff --git a/src/Clients/MainApp/FSpot.Extensions/MenuNode.cs b/src/Clients/MainApp/FSpot.Extensions/MenuNode.cs
index 110784b..8b81c61 100644
--- a/src/Clients/MainApp/FSpot.Extensions/MenuNode.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/MenuNode.cs
@@ -28,7 +28,6 @@
 //
 
 using System;
-
 using Mono.Addins;
 using Mono.Unix;
 
diff --git a/src/Clients/MainApp/FSpot.Extensions/PhotoSelectionCondition.cs b/src/Clients/MainApp/FSpot.Extensions/PhotoSelectionCondition.cs
index e659bd7..77a69e5 100644
--- a/src/Clients/MainApp/FSpot.Extensions/PhotoSelectionCondition.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/PhotoSelectionCondition.cs
@@ -38,7 +38,6 @@ namespace FSpot.Extensions
 	// should be added to the Condition tag.
 	//   - single: One photo is selected
 	//   - multiple: Multiple photos are selected
-	// FIXME: This is never used
 	public class PhotoSelectionCondition : ConditionType
 	{
 		public PhotoSelectionCondition()
@@ -51,12 +50,10 @@ namespace FSpot.Extensions
 			int count = App.Instance.Organizer.Selection.Count;
 			string val = conditionNode.GetAttribute ("selection");
 			if (val.Length > 0) {
-				foreach (string selection in val.Split(','))
-				{
+				foreach (string selection in val.Split(',')) {
 					if (selection == "multiple" && count > 1) {
 						return true;
-					}
-					if (selection == "single" && count == 1) {
+					} else if (selection == "single" && count == 1) {
 						return true;
 					}
 				}
diff --git a/src/Clients/MainApp/FSpot.Extensions/PopupCommands.cs b/src/Clients/MainApp/FSpot.Extensions/PopupCommands.cs
index dfe93e8..dccbdf9 100644
--- a/src/Clients/MainApp/FSpot.Extensions/PopupCommands.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/PopupCommands.cs
@@ -30,10 +30,11 @@
 //
 
 using System;
+using GLib;
+using FSpot.Widgets;
 
 namespace FSpot.Extensions
 {
-	// FIXME: Nothing in here is called
 	public class Copy : ICommand
 	{
 		public void Run (object o, EventArgs e)
diff --git a/src/Clients/MainApp/FSpot.Extensions/ServiceNode.cs b/src/Clients/MainApp/FSpot.Extensions/ServiceNode.cs
index 1f9ddcb..e83b4cc 100644
--- a/src/Clients/MainApp/FSpot.Extensions/ServiceNode.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/ServiceNode.cs
@@ -28,12 +28,10 @@
 //
 
 using System;
-
 using Mono.Addins;
 
 namespace FSpot.Extensions
 {
-	// FIXME: This is never instantiated
 	public class ServiceNode : ExtensionNode
 	{
 		[NodeAttribute ("class", true)]
diff --git a/src/Clients/MainApp/FSpot.Extensions/SidebarPage.cs b/src/Clients/MainApp/FSpot.Extensions/SidebarPage.cs
index 83a86a6..93f88e3 100644
--- a/src/Clients/MainApp/FSpot.Extensions/SidebarPage.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/SidebarPage.cs
@@ -27,17 +27,22 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
+using FSpot.Extensions;
+using FSpot.Utils;
 using Gtk;
-
 using Mono.Addins;
+using Mono.Unix;
+using System;
+using System.Collections.Generic;
 
 namespace FSpot.Extensions
 {
 	public class SidebarPage {
 		// The widget shown on the sidebar page.
-		public Widget SidebarWidget { get; private set; }
+		private readonly Widget widget;
+		public Widget SidebarWidget {
+			get { return widget; }
+		}
 
 		// Whether this page can be selected
 		private bool can_select;
@@ -53,10 +58,16 @@ namespace FSpot.Extensions
 		public event EventHandler CanSelectChanged;
 
 		// The label of the sidebar page.
-		public string Label { get; private set; }
+		private readonly string label;
+		public string Label {
+			get { return label; }
+		}
 
 		// The icon name, used for the selector
-		public string IconName { get; private set; }
+		private readonly string icon_name;
+		public string IconName {
+			get { return icon_name; }
+		}
 
 		// The sidebar onto which this page is attached
 		private Gtk.Widget sidebar;
@@ -77,9 +88,9 @@ namespace FSpot.Extensions
 //		}
 
 		public SidebarPage (Widget widget, string label, string icon_name) {
-			SidebarWidget = widget;
-			Label = label;
-			IconName = icon_name;
+			this.widget = widget;
+			this.label = label;
+			this.icon_name = icon_name;
 		}
 	}
 }
diff --git a/src/Clients/MainApp/FSpot.Extensions/SidebarPageNode.cs b/src/Clients/MainApp/FSpot.Extensions/SidebarPageNode.cs
index 471e4d4..12e43a9 100644
--- a/src/Clients/MainApp/FSpot.Extensions/SidebarPageNode.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/SidebarPageNode.cs
@@ -27,17 +27,17 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using Mono.Addins;
 
 namespace FSpot.Extensions
 {
-	// FIXME: This is never instantiated
 	public class SidebarPageNode : ExtensionNode {
 		[NodeAttribute (Required=true)]
 		protected string sidebar_page_type;
 
 		public SidebarPage GetPage () {
-			return Addin.CreateInstance (sidebar_page_type) as SidebarPage;
+			return (SidebarPage) Addin.CreateInstance (sidebar_page_type);
 		}
 	}
 }
diff --git a/src/Clients/MainApp/FSpot.Extensions/TransitionNode.cs b/src/Clients/MainApp/FSpot.Extensions/TransitionNode.cs
index d1aa998..dc7aecd 100644
--- a/src/Clients/MainApp/FSpot.Extensions/TransitionNode.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/TransitionNode.cs
@@ -27,13 +27,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Transitions;
-
+using System;
 using Mono.Addins;
+using Gdk;
+using FSpot.Transitions;
 
 namespace FSpot.Extensions
 {
-	// FIXME: This is never instantiated
 	public class TransitionNode : ExtensionNode
 	{
 		[NodeAttribute ("transition_type", true)]
@@ -41,7 +41,11 @@ namespace FSpot.Extensions
 
 		SlideShowTransition transition = null;
 		public SlideShowTransition Transition {
-			get { return transition ?? (transition = Addin.CreateInstance(class_name) as SlideShowTransition); }
+			get {
+				if (transition == null)
+					transition = Addin.CreateInstance (class_name) as SlideShowTransition;
+				return transition;
+			}
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/Clients/MainApp/FSpot.Extensions/ViewModeCondition.cs b/src/Clients/MainApp/FSpot.Extensions/ViewModeCondition.cs
index f19d321..2b38ddc 100644
--- a/src/Clients/MainApp/FSpot.Extensions/ViewModeCondition.cs
+++ b/src/Clients/MainApp/FSpot.Extensions/ViewModeCondition.cs
@@ -47,7 +47,6 @@ namespace FSpot.Extensions
 	// This class contains a very nasty hack using a static initialization method
 	// to keep track of the current view mode. This is (unfortunately) needed
 	// because there is no way to get hold of a reference to the current window.
-	// FIXME: This class is never instantiated
 	public class ViewModeCondition : ConditionType
 	{
 		private delegate void ViewModeChangedHandler ();
@@ -66,19 +65,17 @@ namespace FSpot.Extensions
 
 		public ViewModeCondition ()
 		{
-			ViewModeChanged += () => NotifyChanged();
+			ViewModeChanged += delegate { NotifyChanged (); };
 		}
 
 		public override bool Evaluate (NodeElement conditionNode)
 		{
 			string val = conditionNode.GetAttribute ("mode");
 			if (val.Length > 0) {
-				foreach (string mode in val.Split(','))
-				{
+				foreach (string mode in val.Split(',')) {
 					if (mode == "single" && Mode == ViewMode.Single) {
 						return true;
-					}
-					if (mode == "library" && Mode == ViewMode.Library) {
+					} else if (mode == "library" && Mode == ViewMode.Library) {
 						return true;
 					}
 				}
diff --git a/src/Clients/MainApp/FSpot.Filters/FilterRequest.cs b/src/Clients/MainApp/FSpot.Filters/FilterRequest.cs
index ba17caa..e110fab 100644
--- a/src/Clients/MainApp/FSpot.Filters/FilterRequest.cs
+++ b/src/Clients/MainApp/FSpot.Filters/FilterRequest.cs
@@ -32,9 +32,11 @@
 //
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
 
 using Hyena;
+using FSpot.Utils;
 
 namespace FSpot.Filters {
 
@@ -47,7 +49,7 @@ namespace FSpot.Filters {
 		public FilterRequest (SafeUri source)
 		{
 			Source = source;
-			current = source;
+			this.current = source;
 			temp_uris = new List<SafeUri> ();
 		}
 
diff --git a/src/Clients/MainApp/FSpot.Filters/JpegFilter.cs b/src/Clients/MainApp/FSpot.Filters/JpegFilter.cs
index 93271d1..4a0e50c 100644
--- a/src/Clients/MainApp/FSpot.Filters/JpegFilter.cs
+++ b/src/Clients/MainApp/FSpot.Filters/JpegFilter.cs
@@ -29,26 +29,33 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+using FSpot.Utils;
+using FSpot.Imaging;
+
 namespace FSpot.Filters {
     public class JpegFilter : IFilter {
-    	public uint Quality { get; set; }
+        private uint quality = 95;
+        public uint Quality {
+            get { return quality; }
+            set { quality = value; }
+        }
 
-    	public JpegFilter (uint quality)
+        public JpegFilter (uint quality)
         {
-            Quality = quality;
+            this.quality = quality;
         }
 
         public JpegFilter()
         {
-        	Quality = 95;
         }
 
-    	public bool Convert (FilterRequest req)
+        public bool Convert (FilterRequest req)
         {
             var source = req.Current;
             req.Current = req.TempUri ("jpg");
 
-            PixbufUtils.CreateDerivedVersion (source, req.Current, Quality);
+            PixbufUtils.CreateDerivedVersion (source, req.Current, quality);
 
             return true;
         }
diff --git a/src/Clients/MainApp/FSpot.Filters/ResizeFilter.cs b/src/Clients/MainApp/FSpot.Filters/ResizeFilter.cs
index 9567ad5..5e6f397 100644
--- a/src/Clients/MainApp/FSpot.Filters/ResizeFilter.cs
+++ b/src/Clients/MainApp/FSpot.Filters/ResizeFilter.cs
@@ -29,21 +29,36 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+using System.IO;
+
+using FSpot.Utils;
 using FSpot.Imaging;
 
+using Mono.Unix;
+
 using Gdk;
 
 namespace FSpot.Filters {
     public class ResizeFilter : IFilter
     {
-    	public ResizeFilter (uint size)
+        public ResizeFilter ()
         {
-            Size = size;
         }
 
-    	public uint Size { get; set; }
+        public ResizeFilter (uint size)
+        {
+            this.size = size;
+        }
+
+        private uint size = 600;
+
+        public uint Size {
+            get { return size; }
+            set { size = value; }
+        }
 
-    	public bool Convert (FilterRequest req)
+        public bool Convert (FilterRequest req)
         {
             string source = req.Current.LocalPath;
             var dest_uri = req.TempUri (System.IO.Path.GetExtension (source));
@@ -51,11 +66,11 @@ namespace FSpot.Filters {
             using (var img = ImageFile.Create (req.Current)) {
 
                 using (Pixbuf pixbuf = img.Load ()) {
-                    if (pixbuf.Width < Size && pixbuf.Height < Size)
+                    if (pixbuf.Width < size && pixbuf.Height < size)
                         return false;
                 }
 
-                using (Pixbuf pixbuf = img.Load ((int)Size, (int)Size)) {
+                using (Pixbuf pixbuf = img.Load ((int)size, (int)size)) {
                     PixbufUtils.CreateDerivedVersion (req.Current, dest_uri, 95, pixbuf);
                 }
             }
diff --git a/src/Clients/MainApp/FSpot.Filters/SharpFilter.cs b/src/Clients/MainApp/FSpot.Filters/SharpFilter.cs
index 4c980f0..a4e3b6a 100644
--- a/src/Clients/MainApp/FSpot.Filters/SharpFilter.cs
+++ b/src/Clients/MainApp/FSpot.Filters/SharpFilter.cs
@@ -29,10 +29,15 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Imaging;
-
+using System;
+using System.IO;
 using Gdk;
 
+using Mono.Unix;
+
+using FSpot.Utils;
+using FSpot.Imaging;
+
 namespace FSpot.Filters {
     public class SharpFilter : IFilter
     {
diff --git a/src/Clients/MainApp/FSpot.Filters/UniqueNameFilter.cs b/src/Clients/MainApp/FSpot.Filters/UniqueNameFilter.cs
index abda7a0..cc90f1d 100644
--- a/src/Clients/MainApp/FSpot.Filters/UniqueNameFilter.cs
+++ b/src/Clients/MainApp/FSpot.Filters/UniqueNameFilter.cs
@@ -30,7 +30,7 @@
 //
 
 using System;
-
+using FSpot.Utils;
 using Hyena;
 
 namespace FSpot.Filters {
diff --git a/src/Clients/MainApp/FSpot.Filters/WhiteListFilter.cs b/src/Clients/MainApp/FSpot.Filters/WhiteListFilter.cs
index 38c7ac8..b29fbda 100644
--- a/src/Clients/MainApp/FSpot.Filters/WhiteListFilter.cs
+++ b/src/Clients/MainApp/FSpot.Filters/WhiteListFilter.cs
@@ -35,7 +35,7 @@ namespace FSpot.Filters {
 	{
 		List<string> valid_extensions;
 
-		public WhiteListFilter (IEnumerable<string> valid_extensions)
+		public WhiteListFilter (string [] valid_extensions)
 		{
 			this.valid_extensions = new List<string> ();
 			foreach (string extension in valid_extensions)
diff --git a/src/Clients/MainApp/FSpot.Imaging/Ciff.cs b/src/Clients/MainApp/FSpot.Imaging/Ciff.cs
index ea62699..55e1724 100644
--- a/src/Clients/MainApp/FSpot.Imaging/Ciff.cs
+++ b/src/Clients/MainApp/FSpot.Imaging/Ciff.cs
@@ -30,10 +30,10 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.Collections.Generic;
-
+using FSpot.Utils;
 using Hyena;
-
 using TagLib.Image;
 
 namespace FSpot.Imaging.Ciff {
@@ -119,7 +119,7 @@ namespace FSpot.Imaging.Ciff {
 
 		public byte [] ReadEntry (int pos)
 		{
-			Entry e = entry_list [pos];
+			Entry e = (Entry) entry_list [pos];
 
 			stream.Position = this.start + e.Offset;
 
@@ -186,7 +186,8 @@ namespace FSpot.Imaging.Ciff {
 
 			if (data != null)
 				return new System.IO.MemoryStream (data);
-			return DCRawFile.RawPixbufStream (Uri);
+			else
+				return DCRawFile.RawPixbufStream (Uri);
 		}
 
 		private byte [] GetEmbeddedJpeg ()
@@ -196,11 +197,10 @@ namespace FSpot.Imaging.Ciff {
 
 		protected override void Close ()
 		{
-			if (stream == null)
-				return;
-
-			stream.Close ();
-			stream = null;
+			if (stream != null) {
+				stream.Close ();
+				stream = null;
+			}
 		}
 	}
 }
diff --git a/src/Clients/MainApp/FSpot.Imaging/DCRawFile.cs b/src/Clients/MainApp/FSpot.Imaging/DCRawFile.cs
index 809d400..08ecc49 100644
--- a/src/Clients/MainApp/FSpot.Imaging/DCRawFile.cs
+++ b/src/Clients/MainApp/FSpot.Imaging/DCRawFile.cs
@@ -29,6 +29,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System.Diagnostics;
+using System.IO;
+using System;
 using Hyena;
 
 namespace FSpot.Imaging {
diff --git a/src/Clients/MainApp/FSpot.Imaging/IImageFile.cs b/src/Clients/MainApp/FSpot.Imaging/IImageFile.cs
index ac6d972..5d3ee55 100644
--- a/src/Clients/MainApp/FSpot.Imaging/IImageFile.cs
+++ b/src/Clients/MainApp/FSpot.Imaging/IImageFile.cs
@@ -33,9 +33,14 @@ using Hyena;
 
 using System;
 using System.IO;
+using System.Collections.Generic;
 
 using FSpot.Utils;
+using Mono.Unix;
+using Mono.Unix.Native;
+using Gdk;
 
+using GLib;
 using TagLib.Image;
 
 using GFileInfo = GLib.FileInfo;
diff --git a/src/Clients/MainApp/FSpot.Imaging/IOChannel.cs b/src/Clients/MainApp/FSpot.Imaging/IOChannel.cs
index 22cac15..043ccff 100644
--- a/src/Clients/MainApp/FSpot.Imaging/IOChannel.cs
+++ b/src/Clients/MainApp/FSpot.Imaging/IOChannel.cs
@@ -30,8 +30,8 @@
 using System;
 using System.IO;
 using System.Runtime.InteropServices;
-
 using GLib;
+using Hyena;
 
 namespace FSpot.Imaging {
 
@@ -210,7 +210,7 @@ namespace FSpot.Imaging {
 			if (error != IntPtr.Zero)
 				throw new GException (error);
 
-			return read;
+			return (int)read;
 		}
 
 		[DllImport("libglib-2.0-0.dll")]
@@ -261,7 +261,7 @@ namespace FSpot.Imaging {
 
 		public override long Seek (long position, SeekOrigin origin)
 		{
-				  throw new NotSupportedException ();
+      		      throw new NotSupportedException ();
 		}
 
 		[DllImport("libglib-2.0-0.dll")]
diff --git a/src/Clients/MainApp/FSpot.Imaging/ImageFile.cs b/src/Clients/MainApp/FSpot.Imaging/ImageFile.cs
index 43a1594..78a9358 100644
--- a/src/Clients/MainApp/FSpot.Imaging/ImageFile.cs
+++ b/src/Clients/MainApp/FSpot.Imaging/ImageFile.cs
@@ -30,11 +30,18 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Hyena;
+
 using System;
+using System.IO;
 using System.Collections.Generic;
-using System.Linq;
-using Hyena;
 
+using FSpot.Utils;
+using Mono.Unix;
+using Mono.Unix.Native;
+using Gdk;
+
+using GLib;
 using TagLib.Image;
 
 using GFileInfo = GLib.FileInfo;
@@ -121,13 +128,13 @@ namespace FSpot.Imaging
 			// with filenames with invalid encoding
 			var file = GLib.FileFactory.NewForUri (uri);
 			if (!file.Exists)
-					   return null;
+             		   return null;
 
 			string extension = uri.GetExtension ().ToLower ();
 
 			// Ignore video thumbnails
 			if (extension == ".thm")
-						return null;
+		                return null;
 
 			// Detect mime-type
 			var info = file.QueryInfo ("standard::content-type,standard::size", FileQueryInfoFlags.None, null);
@@ -136,14 +143,13 @@ namespace FSpot.Imaging
 
 			// Empty file
 			if (size == 0)
-						return null;
+		                return null;
 
 			Type t = null;
 
 			if (NameTable.TryGetValue (mime, out t))
 				return t;
-
-			if (NameTable.TryGetValue (extension, out t))
+			else if (NameTable.TryGetValue (extension, out t))
 				return t;
 
 			return null;
@@ -178,24 +184,23 @@ namespace FSpot.Imaging
 				".raf",
 				".rw2",
 			};
-
 			var extension = uri.GetExtension ().ToLower ();
-			return raw_extensions.Any(ext => ext == extension);
+			foreach (string ext in raw_extensions) {
+				if (ext == extension)
+					return true;
+			}
+			return false;
 		}
 
 		public static bool IsJpeg (SafeUri uri)
 		{
-			string [] jpg_extensions = {
-			    ".jpg",
-				".jpeg",
-				".jpe",
-				".jfi",
-				".jfif",
-				".jif"
-			    };
-
+			string [] jpg_extensions = {".jpg", ".jpeg", ".jpe", ".jfi", ".jfif", ".jif"};
 			var extension = uri.GetExtension ().ToLower ();
-			return jpg_extensions.Any(ext => ext == extension);
+			foreach (string ext in jpg_extensions) {
+				if (ext == extension)
+					return true;
+			}
+			return false;
 		}
 		#endregion
 	}
diff --git a/src/Clients/MainApp/FSpot.Imaging/InternalProcess.cs b/src/Clients/MainApp/FSpot.Imaging/InternalProcess.cs
index 20d48cd..852ada3 100644
--- a/src/Clients/MainApp/FSpot.Imaging/InternalProcess.cs
+++ b/src/Clients/MainApp/FSpot.Imaging/InternalProcess.cs
@@ -28,8 +28,8 @@
 //
 
 using System;
+using System.IO;
 using System.Runtime.InteropServices;
-
 using GLib;
 
 namespace FSpot.Imaging {
@@ -47,9 +47,14 @@ namespace FSpot.Imaging {
 	internal class InternalProcess {
 		int stdin;
 		int stdout;
+		IOChannel input;
 		IOChannel output;
 
-		public IOChannel StandardInput { get; private set; }
+		public IOChannel StandardInput {
+			get {
+				return input;
+			}
+		}
 
 		public IOChannel StandardOutput {
 			get {
@@ -88,7 +93,7 @@ namespace FSpot.Imaging {
 			if (error != IntPtr.Zero)
 				throw new GException (error);
 
-			StandardInput = new IOChannel (stdin);
+			input = new IOChannel (stdin);
 			output = new IOChannel (stdout);
 			//errorput = new IOChannel (stderr);
 		}
diff --git a/src/Clients/MainApp/FSpot.Imaging/RafFile.cs b/src/Clients/MainApp/FSpot.Imaging/RafFile.cs
index 96f57e9..422d8cc 100644
--- a/src/Clients/MainApp/FSpot.Imaging/RafFile.cs
+++ b/src/Clients/MainApp/FSpot.Imaging/RafFile.cs
@@ -29,8 +29,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FSpot.Utils;
 using Hyena;
-
 using TagLib.Image;
 
 namespace FSpot.Imaging {
@@ -57,7 +57,8 @@ namespace FSpot.Imaging {
 
 			if (data != null)
 				return new System.IO.MemoryStream (data);
-			return DCRawFile.RawPixbufStream (Uri);
+			else
+				return DCRawFile.RawPixbufStream (Uri);
 		}
 
 		private byte [] GetEmbeddedJpeg ()
diff --git a/src/Clients/MainApp/FSpot.Imaging/Tiff.cs b/src/Clients/MainApp/FSpot.Imaging/Tiff.cs
index dfe226c..5f026c5 100644
--- a/src/Clients/MainApp/FSpot.Imaging/Tiff.cs
+++ b/src/Clients/MainApp/FSpot.Imaging/Tiff.cs
@@ -28,11 +28,12 @@
 // 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 FSpot;
+using FSpot.Utils;
 using System;
 using System.IO;
-
+using System.Collections.Generic;
 using Hyena;
-
 using TagLib;
 using TagLib.Image;
 using TagLib.IFD;
@@ -199,7 +200,8 @@ namespace FSpot.Imaging
 		{
 			if (jpeg_data != null)
 				return new MemoryStream (jpeg_data);
-			return DCRawFile.RawPixbufStream (Uri);
+			else
+				return DCRawFile.RawPixbufStream (Uri);
 		}
 	}
 
diff --git a/src/Clients/MainApp/FSpot.Import/FileImportSource.cs b/src/Clients/MainApp/FSpot.Import/FileImportSource.cs
index 282aa07..337abfe 100644
--- a/src/Clients/MainApp/FSpot.Import/FileImportSource.cs
+++ b/src/Clients/MainApp/FSpot.Import/FileImportSource.cs
@@ -26,18 +26,15 @@
 // 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 Hyena;
 using System;
-using System.Collections.Generic;
 using System.Threading;
-
+using System.Collections.Generic;
 using FSpot.Core;
-using FSpot.Imaging;
 using FSpot.Utils;
-
+using FSpot.Imaging;
 using Gtk;
-
-using Hyena;
+using Mono.Unix.Native;
 
 namespace FSpot.Import
 {
@@ -57,15 +54,14 @@ namespace FSpot.Import
 			Root = root;
 			Name = name;
 
-			if (root == null)
-				return;
-
-			if (IsIPodPhoto) {
-				IconName = "multimedia-player";
-			} else if (IsCamera) {
-				IconName = "media-flash";
-			} else {
-				IconName = icon_name;
+			if (root != null) {
+				if (IsIPodPhoto) {
+					IconName = "multimedia-player";
+				} else if (IsCamera) {
+					IconName = "media-flash";
+				} else {
+					IconName = icon_name;
+				}
 			}
 		}
 
diff --git a/src/Clients/MainApp/FSpot.Import/IImportSource.cs b/src/Clients/MainApp/FSpot.Import/IImportSource.cs
index e2926c9..0790486 100644
--- a/src/Clients/MainApp/FSpot.Import/IImportSource.cs
+++ b/src/Clients/MainApp/FSpot.Import/IImportSource.cs
@@ -29,8 +29,12 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Hyena;
+using System;
+
 using FSpot.Core;
 
+
 namespace FSpot.Import
 {
     public interface IImportSource {
diff --git a/src/Clients/MainApp/FSpot.Import/ImportController.cs b/src/Clients/MainApp/FSpot.Import/ImportController.cs
index 24741d1..292878f 100644
--- a/src/Clients/MainApp/FSpot.Import/ImportController.cs
+++ b/src/Clients/MainApp/FSpot.Import/ImportController.cs
@@ -27,15 +27,12 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Hyena;
+using FSpot.Core;
+using FSpot.Utils;
 using System;
 using System.Collections.Generic;
 using System.Threading;
-
-using FSpot.Core;
-using FSpot.Utils;
-
-using Hyena;
-
 using Mono.Unix;
 
 namespace FSpot.Import
@@ -131,8 +128,12 @@ namespace FSpot.Import
 #region Source Scanning
 
         private List<IImportSource> sources;
-        public IEnumerable<IImportSource> Sources {
-            get { return sources ?? (sources = ScanSources()); }
+        public List<IImportSource> Sources {
+            get {
+                if (sources == null)
+                    sources = ScanSources ();
+                return sources;
+            }
         }
 
         List<IImportSource> ScanSources ()
@@ -472,13 +473,12 @@ namespace FSpot.Import
         {
             var parts = uri.AbsolutePath.Split('/');
             SafeUri current = new SafeUri (uri.Scheme + ":///", true);
-            foreach (string t in parts)
-            {
-            	current = current.Append (t);
-            	var file = GLib.FileFactory.NewForUri (current);
-            	if (!file.Exists) {
-            		file.MakeDirectory (null);
-            	}
+            for (int i = 0; i < parts.Length; i++) {
+                current = current.Append (parts [i]);
+                var file = GLib.FileFactory.NewForUri (current);
+                if (!file.Exists) {
+                    file.MakeDirectory (null);
+                }
             }
         }
 
@@ -486,8 +486,8 @@ namespace FSpot.Import
 
 #region Tagging
 
-    	readonly List<Tag> attach_tags = new List<Tag> ();
-    	readonly TagStore tag_store = App.Instance.Database.Tags;
+        List<Tag> attach_tags = new List<Tag> ();
+        TagStore tag_store = App.Instance.Database.Tags;
 
         // Set the tags that will be added on import.
         public void AttachTags (IEnumerable<string> tags)
@@ -497,7 +497,7 @@ namespace FSpot.Import
             foreach (var tagname in tags) {
                 var tag = tag_store.GetTagByName (tagname);
                 if (tag == null) {
-                    tag = tag_store.CreateCategory (import_category, tagname, false);
+                    tag = tag_store.CreateCategory (import_category, tagname, false) as Tag;
                     tag_store.Commit (tag);
                 }
                 attach_tags.Add (tag);
diff --git a/src/Clients/MainApp/FSpot.Import/MetadataImporter.cs b/src/Clients/MainApp/FSpot.Import/MetadataImporter.cs
index bc853be..b170f91 100644
--- a/src/Clients/MainApp/FSpot.Import/MetadataImporter.cs
+++ b/src/Clients/MainApp/FSpot.Import/MetadataImporter.cs
@@ -28,13 +28,11 @@
 //
 
 using System;
+using Mono.Unix;
 using System.Collections.Generic;
-
 using FSpot.Core;
 using FSpot.Utils;
 
-using Mono.Unix;
-
 namespace FSpot.Import {
     internal class MetadataImporter {
         private TagStore tag_store;
@@ -68,7 +66,7 @@ namespace FSpot.Import {
 
         public MetadataImporter ()
         {
-            tag_store = App.Instance.Database.Tags;
+            this.tag_store = App.Instance.Database.Tags;
             tags_created = new Stack<Tag> ();
 
             li_root_tag = new TagInfo (Catalog.GetString ("Imported Tags"), LastImportIcon);
@@ -96,7 +94,7 @@ namespace FSpot.Import {
 
         private void AddTagToPhoto (Photo photo, string new_tag_name)
         {
-            if (string.IsNullOrEmpty(new_tag_name))
+            if (new_tag_name == null || new_tag_name.Length == 0)
                 return;
 
             Tag parent = EnsureTag (li_root_tag, tag_store.RootCategory);
diff --git a/src/Clients/MainApp/FSpot.Jobs/CalculateHashJob.cs b/src/Clients/MainApp/FSpot.Jobs/CalculateHashJob.cs
index 79770c0..94836ad 100644
--- a/src/Clients/MainApp/FSpot.Jobs/CalculateHashJob.cs
+++ b/src/Clients/MainApp/FSpot.Jobs/CalculateHashJob.cs
@@ -30,9 +30,7 @@
 //
 
 using System;
-
 using Banshee.Kernel;
-
 using Hyena;
 
 namespace FSpot.Jobs {
@@ -62,7 +60,7 @@ namespace FSpot.Jobs {
 			Log.DebugFormat ("Calculating Hash {0}...", photo_id);
 
 			try {
-				Photo photo = FSpot.App.Instance.Database.Photos.Get (Convert.ToUInt32 (photo_id));
+				Photo photo = FSpot.App.Instance.Database.Photos.Get (Convert.ToUInt32 (photo_id)) as Photo;
 				FSpot.App.Instance.Database.Photos.CalculateMD5Sum (photo);
 				return true;
 			} catch (System.Exception e) {
diff --git a/src/Clients/MainApp/FSpot.Jobs/SyncMetadataJob.cs b/src/Clients/MainApp/FSpot.Jobs/SyncMetadataJob.cs
index ea59113..9818f4a 100644
--- a/src/Clients/MainApp/FSpot.Jobs/SyncMetadataJob.cs
+++ b/src/Clients/MainApp/FSpot.Jobs/SyncMetadataJob.cs
@@ -30,13 +30,11 @@
 //
 
 using System;
-
 using Banshee.Kernel;
-
+using Hyena;
 using FSpot.Core;
 using FSpot.Utils;
-
-using Hyena;
+using Mono.Unix;
 
 namespace FSpot.Jobs {
     public class SyncMetadataJob : Job
@@ -61,7 +59,7 @@ namespace FSpot.Jobs {
             System.Threading.Thread.Sleep (500);
 
             try {
-                Photo photo = FSpot.App.Instance.Database.Photos.Get (Convert.ToUInt32 (JobOptions));
+                Photo photo = FSpot.App.Instance.Database.Photos.Get (Convert.ToUInt32 (JobOptions)) as Photo;
                 if (photo == null)
                     return false;
 
diff --git a/src/Clients/MainApp/FSpot.Loaders/AreaPreparedEventArgs.cs b/src/Clients/MainApp/FSpot.Loaders/AreaPreparedEventArgs.cs
index 8798c54..31d4a1b 100644
--- a/src/Clients/MainApp/FSpot.Loaders/AreaPreparedEventArgs.cs
+++ b/src/Clients/MainApp/FSpot.Loaders/AreaPreparedEventArgs.cs
@@ -28,13 +28,14 @@
 //
 
 using System;
+using Gdk;
 
 namespace FSpot.Loaders {
 	public class AreaPreparedEventArgs : EventArgs
 	{
 		public bool ReducedResolution { get; private set; }
 
-		public AreaPreparedEventArgs (bool reduced_resolution)
+		public AreaPreparedEventArgs (bool reduced_resolution) : base ()
 		{
 			ReducedResolution = reduced_resolution;
 		}
diff --git a/src/Clients/MainApp/FSpot.Loaders/AreaUpdatedEventArgs.cs b/src/Clients/MainApp/FSpot.Loaders/AreaUpdatedEventArgs.cs
index 93b0d62..cb48789 100644
--- a/src/Clients/MainApp/FSpot.Loaders/AreaUpdatedEventArgs.cs
+++ b/src/Clients/MainApp/FSpot.Loaders/AreaUpdatedEventArgs.cs
@@ -28,13 +28,14 @@
 //
 
 using System;
+using Gdk;
 
 namespace FSpot.Loaders {
 	public class AreaUpdatedEventArgs : EventArgs
 	{
 		public Gdk.Rectangle Area { get; private set; }
 
-		public AreaUpdatedEventArgs (Gdk.Rectangle area)
+		public AreaUpdatedEventArgs (Gdk.Rectangle area) : base ()
 		{
 			Area = area;
 		}
diff --git a/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs b/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs
index 9e2b581..ab5300b 100644
--- a/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs
+++ b/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs
@@ -30,14 +30,11 @@
 //
 using System;
 using System.Threading;
-
-using FSpot.Imaging;
-using FSpot.Utils;
-
 using Gdk;
-
+using FSpot.Utils;
+using FSpot.Platform;
+using FSpot.Imaging;
 using Hyena;
-
 using TagLib.Image;
 
 namespace FSpot.Loaders
@@ -45,6 +42,9 @@ namespace FSpot.Loaders
 	public class GdkImageLoader : Gdk.PixbufLoader, IImageLoader
 	{
 #region public api
+		public GdkImageLoader () : base ()
+		{
+		}
 
 		~GdkImageLoader ()
 		{
@@ -76,7 +76,7 @@ namespace FSpot.Loaders
 				pixbuf_orientation = image_file.Orientation;
 			}
 
-			Loading = true;
+			loading = true;
 			// The ThreadPool.QueueUserWorkItem hack is there cause, as the bytes to read are present in the stream,
 			// the Read is CompletedAsynchronously, blocking the mainloop
 			image_stream.BeginRead (buffer, 0, count, delegate (IAsyncResult r) {
@@ -92,14 +92,26 @@ namespace FSpot.Loaders
 		Pixbuf thumb;
 
 		new public Pixbuf Pixbuf {
-			get { return thumb != null ? thumb : base.Pixbuf; }
+			get {
+				if (thumb != null) {
+					return thumb;
+				}
+				return base.Pixbuf;
+			}
 		}
 
-		public bool Loading { get; private set; }
+		bool loading = false;
+
+		public bool Loading {
+			get { return loading; }
+		}
 
 		bool notify_prepared = false;
+		bool prepared = false;
 
-		public bool Prepared { get; private set; }
+		public bool Prepared {
+			get { return prepared; }
+		}
 
 		ImageOrientation pixbuf_orientation = ImageOrientation.TopLeft;
 
@@ -140,7 +152,7 @@ namespace FSpot.Loaders
 			if (is_disposed)
 				return;
 
-			Prepared = notify_prepared = true;
+			prepared = notify_prepared = true;
 			damage = Rectangle.Zero;
 			base.OnAreaPrepared ();
 		}
@@ -176,12 +188,6 @@ namespace FSpot.Loaders
 		Rectangle damage;
 		object sync_handle = new object ();
 
-		public GdkImageLoader()
-		{
-			Prepared = false;
-			Loading = false;
-		}
-
 		void HandleReadDone (IAsyncResult ar)
 		{
 			if (is_disposed)
@@ -192,7 +198,7 @@ namespace FSpot.Loaders
 				if (byte_read == 0) {
 					image_stream.Close ();
 					Close ();
-					Loading = false;
+					loading = false;
 					notify_completed = true;
 				} else {
 					try {
diff --git a/src/Clients/MainApp/FSpot.Loaders/IImageLoader.cs b/src/Clients/MainApp/FSpot.Loaders/IImageLoader.cs
index 90c3758..d477977 100644
--- a/src/Clients/MainApp/FSpot.Loaders/IImageLoader.cs
+++ b/src/Clients/MainApp/FSpot.Loaders/IImageLoader.cs
@@ -27,12 +27,10 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FSpot.Utils;
 using System;
-
 using Gdk;
-
 using Hyena;
-
 using TagLib.Image;
 
 namespace FSpot.Loaders {
diff --git a/src/Clients/MainApp/FSpot.Loaders/ImageLoader.cs b/src/Clients/MainApp/FSpot.Loaders/ImageLoader.cs
index c052229..51a355c 100644
--- a/src/Clients/MainApp/FSpot.Loaders/ImageLoader.cs
+++ b/src/Clients/MainApp/FSpot.Loaders/ImageLoader.cs
@@ -29,16 +29,16 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FSpot.Utils;
+using FSpot.Imaging;
 using System;
 using System.Collections.Generic;
-
-using FSpot.Imaging;
-
+using Gdk;
 using Hyena;
 
 namespace FSpot.Loaders {
 	public static class ImageLoader {
-		static readonly Dictionary<string, System.Type> name_table;
+		static Dictionary<string, System.Type> name_table;
 
 		static ImageLoader ()
 		{
@@ -71,7 +71,7 @@ namespace FSpot.Loaders {
 					throw new Exception ("Loader requested for unknown file type: "+extension);
 			}
 
-			loader = System.Activator.CreateInstance (t) as IImageLoader;
+			loader = (IImageLoader) System.Activator.CreateInstance (t);
 
 			return loader;
 		}
diff --git a/src/Clients/MainApp/FSpot.Query/HiddenTag.cs b/src/Clients/MainApp/FSpot.Query/HiddenTag.cs
index f7ab572..aa5e7db 100644
--- a/src/Clients/MainApp/FSpot.Query/HiddenTag.cs
+++ b/src/Clients/MainApp/FSpot.Query/HiddenTag.cs
@@ -31,8 +31,10 @@
 
 using System;
 
+using FSpot;
 using FSpot.Core;
 
+
 namespace FSpot.Query
 {
 
@@ -42,11 +44,21 @@ namespace FSpot.Query
 		private static HiddenTag hide_hidden_tag;
 
 		public static HiddenTag ShowHiddenTag {
-			get { return show_hidden_tag ?? (show_hidden_tag = new HiddenTag(true)); }
+			get {
+				if (show_hidden_tag == null)
+					show_hidden_tag = new HiddenTag (true);
+
+				return show_hidden_tag;
+			}
 		}
 
 		public static HiddenTag HideHiddenTag {
-			get { return hide_hidden_tag ?? (hide_hidden_tag = new HiddenTag(false)); }
+			get {
+				if (hide_hidden_tag == null)
+					hide_hidden_tag = new HiddenTag (false);
+
+				return hide_hidden_tag;
+			}
 		}
 
 
@@ -64,7 +76,8 @@ namespace FSpot.Query
 			if ( ! show_hidden && hidden != null)
 				return String.Format (" photos.id NOT IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0}) ",
 				                      hidden.Id);
-			return null;
+			else
+				return null;
 		}
 	}
 }
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs
index f176fad..da370cf 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs
@@ -29,141 +29,139 @@
 
 using System;
 using System.IO;
-
-using Hyena;
-
 using Mono.Unix;
+using Hyena;
 
 namespace FSpot.UI.Dialog
 {
-	public class AboutDialog : Gtk.AboutDialog
-	{
-		private static AboutDialog about = null;
+    public class AboutDialog : Gtk.AboutDialog
+    {
+        private static AboutDialog about = null;
 
-		private AboutDialog () {
-			Artists = new string [] {
-					"Jakub Steiner",
-					"Matthew Paul Thomas",
-			};
-			Authors = new string [] {
-				"Primary Development",
-					"\tLawrence Ewing",
-					"\tStephane Delcroix",
-					"\tRuben Vermeersch",
-					"\tStephen  Shaw",
-					"",
-					"Active Contributors to this release",
-					"\tAdemir Mendoza",
-					"\tAlex Launi",
-					"\tAnton Keks",
-					"\tBertrand Lorentz",
-					"\tChristian Krause",
-					"\tChristopher Halse Rogers",
-					"\tDaniel KÃb",
-					"\tEric Faehnrich",
-					"\tEvan Briones",
-					"\tGabriel Burt",
-					"\tIain Churcher",
-					"\tIain Lane",
-					"\tLorenzo Milesi",
-					"\tÅukasz JernaÅ",
-					"\tMike Gem\x00fcnde",
-					"\tMike Wallick",
-					"\tNick Van Eeckhout",
-					"\tPaul Lange",
-					"\tPaul Wellner Bou",
-					"\tPeter Goetz",
-					"\tRuben Vermeersch",
-					"\tTim Retout",
-					"\tTomas Kovacik",
-					"\tTrevor Buchanan",
-					"\tVincent Pomey",
-					"\tWojciech DzierÅanowski",
-					"",
-					"Contributors",
-					"\tAaron Bockover",
-					"\tAlessandro Gervaso",
-					"\tAlex Graveley",
-					"\tAlvaro del Castillo",
-					"\tBengt Thuree",
-					"\tBen Monnahan",
-					"\tChad Files",
-					"\tEttore Perazzoli",
-					"\tEwen Cheslack-Postava",
-					"\tGrahm Orr",
-					"\tJeffrey Finkelstein",
-					"\tJeffrey Stedfast",
-					"\tJoerg Buesse",
-					"\tJoe Shaw",
-					"\tJon Trowbridge",
-					"\tJoshua Tauberer",
-					"\tKarl Mikaelsson",
-					"\tLaurence Hygate",
-					"\tLee Willis",
-					"\tMartin Willemoes Hansen",
-					"\tMatt Jones",
-					"\tMatt Perry",
-					"\tMichal NÃnÃsi",
-					"\tMiguel de Icaza",
-					"\tNat Friedman",
-					"\tPascal de Bruijn",
-					"\tPatanjali Somayaji",
-					"\tPeter Johanson",
-					"\tTambet Ingo",
-					"\tThomas Van Machelen",
-					"\tTodd Berman",
-					"\tVasily Kirilichev",
-					"\tVincent Moreau",
-					"\tVladimir Vukicevic",
-					"\tXavier Bouchoux",
-					"\tYann Leprince",
-					"\tYves Kurz",
-					"",
-					"In memory Of",
-					"\tEttore Perazzoli",
-			};
-			Comments = Catalog.GetString ("Photo management for GNOME");
-			Copyright = Catalog.GetString ("Copyright \x00a9 2003-2010 Novell Inc.");
-			Documenters = new string[] {
-					"Aaron Bockover",
-					"Alexandre Prokoudine",
-					"Bengt Thuree",
-					"Gabriel Burt",
-					"Harold Schreckengost",
-					"Miguel de Icaza",
-					"Stephane Delcroix",
-			};
-			//Read license from COPYING
-			try {
-				System.Reflection.Assembly assembly = System.Reflection.Assembly.GetCallingAssembly ();
-				using (Stream s = assembly.GetManifestResourceStream ("COPYING")) {
-					StreamReader reader = new StreamReader (s);
-					License = reader.ReadToEnd ();
-					s.Close ();
-				}
-			} catch (Exception e) {
-				Log.DebugException (e);
-				License = "GPL v2";
-			}
-			Logo = new Gdk.Pixbuf (System.Reflection.Assembly.GetEntryAssembly (), "f-spot-128.png");
-			ProgramName = "F-Spot";
-			TranslatorCredits = Catalog.GetString ("translator-credits");
-			if (System.String.Compare (TranslatorCredits, "translator-credits") == 0)
-				TranslatorCredits = null;
-			Version = FSpot.Core.Defines.VERSION;
-			Website = "http://f-spot.org";;
-			WebsiteLabel = Catalog.GetString ("F-Spot Website");
-			WrapLicense = true;
-		}
+        private AboutDialog () {
+            Artists = new string [] {
+                    "Jakub Steiner",
+                    "Matthew Paul Thomas",
+            };
+            Authors = new string [] {
+                "Primary Development",
+                    "\tLawrence Ewing",
+                    "\tStephane Delcroix",
+                    "\tRuben Vermeersch",
+		    "\tStephen  Shaw",
+                    "",
+                    "Active Contributors to this release",
+                    "\tAdemir Mendoza",
+                    "\tAlex Launi",
+                    "\tAnton Keks",
+                    "\tBertrand Lorentz",
+                    "\tChristian Krause",
+                    "\tChristopher Halse Rogers",
+                    "\tDaniel KÃb",
+                    "\tEric Faehnrich",
+                    "\tEvan Briones",
+                    "\tGabriel Burt",
+                    "\tIain Churcher",
+                    "\tIain Lane",
+                    "\tLorenzo Milesi",
+                    "\tÅukasz JernaÅ",
+                    "\tMike Gem\x00fcnde",
+                    "\tMike Wallick",
+                    "\tNick Van Eeckhout",
+                    "\tPaul Lange",
+                    "\tPaul Wellner Bou",
+                    "\tPeter Goetz",
+                    "\tRuben Vermeersch",
+                    "\tTim Retout",
+                    "\tTomas Kovacik",
+                    "\tTrevor Buchanan",
+                    "\tVincent Pomey",
+                    "\tWojciech DzierÅanowski",
+                    "",
+                    "Contributors",
+                    "\tAaron Bockover",
+                    "\tAlessandro Gervaso",
+                    "\tAlex Graveley",
+                    "\tAlvaro del Castillo",
+                    "\tBengt Thuree",
+                    "\tBen Monnahan",
+                    "\tChad Files",
+                    "\tEttore Perazzoli",
+                    "\tEwen Cheslack-Postava",
+                    "\tGrahm Orr",
+                    "\tJeffrey Finkelstein",
+                    "\tJeffrey Stedfast",
+                    "\tJoerg Buesse",
+                    "\tJoe Shaw",
+                    "\tJon Trowbridge",
+                    "\tJoshua Tauberer",
+                    "\tKarl Mikaelsson",
+                    "\tLaurence Hygate",
+                    "\tLee Willis",
+                    "\tMartin Willemoes Hansen",
+                    "\tMatt Jones",
+                    "\tMatt Perry",
+                    "\tMichal NÃnÃsi",
+                    "\tMiguel de Icaza",
+                    "\tNat Friedman",
+                    "\tPascal de Bruijn",
+                    "\tPatanjali Somayaji",
+                    "\tPeter Johanson",
+                    "\tTambet Ingo",
+                    "\tThomas Van Machelen",
+                    "\tTodd Berman",
+                    "\tVasily Kirilichev",
+                    "\tVincent Moreau",
+                    "\tVladimir Vukicevic",
+                    "\tXavier Bouchoux",
+                    "\tYann Leprince",
+                    "\tYves Kurz",
+                    "",
+                    "In memory Of",
+                    "\tEttore Perazzoli",
+            };
+            Comments = Catalog.GetString ("Photo management for GNOME");
+            Copyright = Catalog.GetString ("Copyright \x00a9 2003-2010 Novell Inc.");
+            Documenters = new string[] {
+                    "Aaron Bockover",
+                    "Alexandre Prokoudine",
+                    "Bengt Thuree",
+                    "Gabriel Burt",
+                    "Harold Schreckengost",
+                    "Miguel de Icaza",
+                    "Stephane Delcroix",
+            };
+            //Read license from COPYING
+            try {
+                System.Reflection.Assembly assembly = System.Reflection.Assembly.GetCallingAssembly ();
+                using (Stream s = assembly.GetManifestResourceStream ("COPYING")) {
+                    StreamReader reader = new StreamReader (s);
+                    License = reader.ReadToEnd ();
+                    s.Close ();
+                }
+            } catch (Exception e) {
+                Log.DebugException (e);
+                License = "GPL v2";
+            }
+            Logo = new Gdk.Pixbuf (System.Reflection.Assembly.GetEntryAssembly (), "f-spot-128.png");
+            ProgramName = "F-Spot";
+            TranslatorCredits = Catalog.GetString ("translator-credits");
+            if (System.String.Compare (TranslatorCredits, "translator-credits") == 0)
+                TranslatorCredits = null;
+            Version = FSpot.Core.Defines.VERSION;
+            Website = "http://f-spot.org";;
+            WebsiteLabel = Catalog.GetString ("F-Spot Website");
+            WrapLicense = true;
+        }
 
-		public static void ShowUp ()
-		{
-			if (about == null) {
-				about = new AboutDialog ();
-				about.Destroyed += delegate (object o, EventArgs e) {about = null;};
-				about.Response += delegate (object o, Gtk.ResponseArgs e) {if (about != null) about.Destroy ();};
-			}
-			about.Show ();
-		}
-	}
+        public static void ShowUp ()
+        {
+            if (about == null) {
+                about = new AboutDialog ();
+                about.Destroyed += delegate (object o, EventArgs e) {about = null;};
+                about.Response += delegate (object o, Gtk.ResponseArgs e) {if (about != null) about.Destroy ();};
+            }
+            about.Show ();
+        }
+    }
 }
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs
index 254ab1a..b6e4e8a 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs
@@ -32,17 +32,14 @@
 //
 
 using System;
-
+using Gtk;
+using System.Collections;
+using Mono.Unix;
 using FSpot.Core;
 using FSpot.Database;
 using FSpot.Widgets;
-
-using Gtk;
-
 using Hyena;
 
-using Mono.Unix;
-
 namespace FSpot.UI.Dialog {
 	public class AdjustTimeDialog : BuilderDialog
 	{
@@ -80,13 +77,13 @@ namespace FSpot.UI.Dialog {
 			item.Changed += HandleItemChanged;
 			item.MoveFirst ();
 
-			tray = new BrowseablePointerGridView (view.Item) {
-				MaxColumns = 1,
-				DisplayRatings = false,
-				DisplayTags = false,
-				DisplayDates = true
-			};
-			tray_scrolled.Add (tray);
+            tray = new BrowseablePointerGridView (view.Item) {
+                MaxColumns = 1,
+                DisplayRatings = false,
+                DisplayTags = false,
+                DisplayDates = true
+            };
+            tray_scrolled.Add (tray);
 
 			//forward_button.Clicked += HandleForwardClicked;
 			//back_button.Clicked += HandleBackClicked;
@@ -138,7 +135,7 @@ namespace FSpot.UI.Dialog {
 
 			starting_label.Text = "min.";
 			difference_check.Label = String.Format (Catalog.GetString ("Shift all photos by {0}"),
-								  Offset);
+							      Offset);
 		}
 
 		void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs args)
@@ -184,7 +181,7 @@ namespace FSpot.UI.Dialog {
 		private void SpaceByInterval ()
 		{
 			DateTime date = EditTime;
-			long ticks = (long) (double.Parse (spacing_entry.Text) * TimeSpan.TicksPerMinute);
+		        long ticks = (long) (double.Parse (spacing_entry.Text) * TimeSpan.TicksPerMinute);
 			TimeSpan span = new TimeSpan (ticks);
 			Photo [] photos = new Photo [collection.Count];
 
@@ -197,9 +194,8 @@ namespace FSpot.UI.Dialog {
 				date -= span;
 			}
 
-			foreach (Photo t in photos)
-			{
-				t.Time = date + accum;
+			for (int i = 0; i < photos.Length; i++) {
+				photos [i].Time = date + accum;
 				accum += span;
 			}
 
@@ -223,6 +219,7 @@ namespace FSpot.UI.Dialog {
 			else
 				SpaceByInterval ();
 
+
 			Destroy ();
 		}
 
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/BuilderDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/BuilderDialog.cs
index fe99e24..f29b8b9 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/BuilderDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/BuilderDialog.cs
@@ -27,6 +27,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using GtkBeans;
 
 namespace FSpot.UI.Dialog
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs
index 42711d5..8f811a7 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs
@@ -29,15 +29,12 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gtk;
 using System;
-
+using Mono.Unix;
 using FSpot.Query;
 using FSpot.Widgets;
 
-using Gtk;
-
-using Mono.Unix;
-
 namespace FSpot.UI.Dialog
 {
 	public class DateRangeDialog : BuilderDialog {
@@ -127,11 +124,13 @@ namespace FSpot.UI.Dialog
 			case "thismonth":
 				if (today.Year == (today.AddMonths(-1)).Year) // Same year for current and previous month. Present only MONTH
 					return today.ToString("MMMM");
-				return today.ToString("MMMM, yyyy");
+				else // Different year for current and previous month. Present both MONTH, and YEAR
+					return today.ToString("MMMM, yyyy");
 			case "previousmonth":
 				if (today.Year == (today.AddMonths(-1)).Year) // Same year for current and previous month. Present only MONTH
 					return (today.AddMonths(-1)).ToString("MMMM");
-				return (today.AddMonths(-1)).ToString("MMMM, yyyy");
+				else // Different year for current and previous month. Present both MONTH, and YEAR
+					return (today.AddMonths(-1)).ToString("MMMM, yyyy");
 			case "thisyear":
 				return today.ToString("yyyy");
 			case "previousyear":
@@ -224,7 +223,10 @@ namespace FSpot.UI.Dialog
 				clear = true;
 				break;
 			}
-			return clear ? null : new DateRange (startdate, enddate.Add (new System.TimeSpan(23,59,59)));
+			if (!clear)
+				return new DateRange (startdate, enddate.Add (new System.TimeSpan(23,59,59)));
+			else
+				return null;
 		}
 
 		void HandleDateEditChanged (object o, EventArgs args)
@@ -255,9 +257,9 @@ namespace FSpot.UI.Dialog
 			}
 
 			start_dateedit.DateChanged += HandleDateEditChanged;
-			((Gtk.Entry) start_dateedit.Children [0]).Changed += HandleDateEditChanged;
+			((Gtk.Entry) start_dateedit.Children [0] as Gtk.Entry).Changed += HandleDateEditChanged;
 			end_dateedit.DateChanged += HandleDateEditChanged;
-			((Gtk.Entry) end_dateedit.Children [0]).Changed += HandleDateEditChanged;
+			((Gtk.Entry) end_dateedit.Children [0] as Gtk.Entry).Changed += HandleDateEditChanged;
 		}
 	}
 }
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs
index 6946cbd..ab1fd17 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs
@@ -30,27 +30,27 @@
 //
 
 using System;
-
-using FSpot.Core;
-
+using Mono.Unix;
 using Gtk;
-
 using Hyena;
 using Hyena.Widgets;
-
-using Mono.Unix;
+using FSpot.Core;
 
 namespace FSpot.UI.Dialog
 {
 	public class EditException : Exception
 	{
-		public IPhoto Item { get; private set; }
+		IPhoto item;
+
+		public IPhoto Item {
+			get { return item; }
+		}
 
 		public EditException (IPhoto item, Exception e) : base (
-						String.Format (Catalog.GetString ("Received exception \"{0}\". Unable to save photo {1}"),
-					   e.Message, item.Name), e)
+                        String.Format (Catalog.GetString ("Received exception \"{0}\". Unable to save photo {1}"),
+				       e.Message, item.Name), e)
 		{
-			this.Item = item;
+			this.item = item;
 		}
 	}
 
@@ -59,9 +59,9 @@ namespace FSpot.UI.Dialog
 		private const int MaxErrors = 10;
 
 		public EditExceptionDialog (Gtk.Window parent, Exception [] errors) : base (parent, DialogFlags.DestroyWithParent,
-												Gtk.MessageType.Error, ButtonsType.Ok,
-												Catalog.GetString ("Error editing photo"),
-												GenerateMessage (errors))
+											    Gtk.MessageType.Error, ButtonsType.Ok,
+											    Catalog.GetString ("Error editing photo"),
+											    GenerateMessage (errors))
 		{
 			foreach (Exception e in errors)
 				Log.Exception (e);
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/EditTagDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/EditTagDialog.cs
index cd6f436..57fc7f7 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/EditTagDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/EditTagDialog.cs
@@ -27,15 +27,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 using System;
+using System.Collections;
 using System.Collections.Generic;
-
+using Mono.Unix;
+using Gtk;
 using FSpot.Core;
 using FSpot.Database;
 
-using Gtk;
-
-using Mono.Unix;
-
 namespace FSpot.UI.Dialog
 {
 	public class EditTagDialog : BuilderDialog
@@ -119,7 +117,7 @@ namespace FSpot.UI.Dialog
 			return false;
 		}
 
-		void PopulateCategories (ICollection<Tag> categories, Category parent)
+		void PopulateCategories (List<Tag> categories, Category parent)
 		{
 			foreach (Tag tag in parent.Children) {
 				if (tag is Category && tag != this.tag && !this.tag.IsAncestorOf (tag)) {
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs
index ba0f3ae..094dfa2 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs
@@ -30,20 +30,16 @@
 //
 
 using System;
-
+using Mono.Unix;
+using Gtk;
 using FSpot.Core;
 using FSpot.Database;
-using FSpot.Imaging;
-using FSpot.Utils;
 using FSpot.Widgets;
-
-using Gtk;
-
+using FSpot.Utils;
+using FSpot.Imaging;
 using Hyena;
 using Hyena.Widgets;
 
-using Mono.Unix;
-
 namespace FSpot.UI.Dialog
 {
 	public class EditTagIconDialog : BuilderDialog
@@ -93,7 +89,7 @@ namespace FSpot.UI.Dialog
 
 			external_photo_chooser.Filter = new FileFilter();
 			external_photo_chooser.Filter.AddPixbufFormats();
-						external_photo_chooser.LocalOnly = false;
+                        external_photo_chooser.LocalOnly = false;
 			external_photo_chooser_hbox.PackStart (external_photo_chooser);
 			external_photo_chooser.Show ();
 			external_photo_chooser.SelectionChanged += HandleExternalFileSelectionChanged;
@@ -192,11 +188,11 @@ namespace FSpot.UI.Dialog
 				string message = String.Format (Catalog.GetString ("Unable to load \"{0}\" as icon for the tag"),
 									external_photo_chooser.Uri.ToString ());
 				HigMessageDialog md = new HigMessageDialog (this,
-										DialogFlags.DestroyWithParent,
-										MessageType.Error,
-										ButtonsType.Close,
-										caption,
-										message);
+									    DialogFlags.DestroyWithParent,
+									    MessageType.Error,
+									    ButtonsType.Close,
+									    caption,
+									    message);
 				md.Run();
 				md.Destroy();
 			}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs
index caec53c..e5f2104 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs
@@ -27,17 +27,15 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-using System.Collections.Generic;
-
-using FSpot.Import;
-using FSpot.Utils;
+using FSpot.Core;
+using FSpot.UI.Dialog;
 using FSpot.Widgets;
-
+using FSpot.Utils;
+using FSpot.Import;
 using Gtk;
-
 using Hyena;
-
+using System;
+using System.Collections.Generic;
 using Mono.Unix;
 
 namespace FSpot.UI.Dialog
@@ -265,10 +263,11 @@ namespace FSpot.UI.Dialog
             if (sources_combo.Active == current_index) {
                 Log.Debug ("Skipping double fire!");
                 return;
+            } else {
+                current_index = sources_combo.Active;
             }
-        	current_index = sources_combo.Active;
 
-        	TreeIter iter;
+            TreeIter iter;
             sources_combo.GetActiveIter (out iter);
             var source = Sources.GetValue (iter, 0) as IImportSource;
             if (source == null) {
@@ -276,9 +275,10 @@ namespace FSpot.UI.Dialog
                 if (label == select_folder_label) {
                     ShowFolderSelector ();
                     return;
+                } else {
+                    sources_combo.Active = 0;
+                    return;
                 }
-            	sources_combo.Active = 0;
-            	return;
             }
             Controller.ActiveSource = source;
         }
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs
index 707d39e..ad7b4db 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs
@@ -29,12 +29,9 @@
 
 using System;
 using System.Collections.Generic;
-
 using Gtk;
-
-using Hyena;
-
 using Mono.Unix;
+using Hyena;
 
 namespace FSpot.UI.Dialog
 {
@@ -42,24 +39,28 @@ namespace FSpot.UI.Dialog
 	{
 		// FIXME: Replace with ErrorListDialog from Banshee when possible
 
-		private VBox inner_vbox;
+        private VBox inner_vbox;
 
-		private Label header_label;
-		private Hyena.Widgets.WrapLabel message_label;
-		private TreeView list_view;
-		private Expander details_expander;
+        private Label header_label;
+        private Hyena.Widgets.WrapLabel message_label;
+        private TreeView list_view;
+        private Expander details_expander;
 
-		protected AccelGroup AccelGroup { get; private set; }
+        private AccelGroup accel_group;
+        protected AccelGroup AccelGroup {
+            get { return accel_group; }
+        }
 
 
-		public ImportFailureDialog (IEnumerable<SafeUri> files)
+
+		public ImportFailureDialog (List<SafeUri> files) : base ()
 		{
 			BuildUI ();
 
-			ListView.Model = new ListStore (typeof (string), typeof (string));
-			ListView.AppendColumn ("Filename", new CellRendererText (), "text", 0);
-			ListView.AppendColumn ("Path", new CellRendererText (), "text", 1);
-			ListView.HeadersVisible = false;
+            ListView.Model = new ListStore (typeof (string), typeof (string));
+            ListView.AppendColumn ("Filename", new CellRendererText (), "text", 0);
+            ListView.AppendColumn ("Path", new CellRendererText (), "text", 1);
+            ListView.HeadersVisible = false;
 
 			Title = Catalog.GetString ("Import failures");
 			Header = Catalog.GetString ("Some files failed to import");
@@ -73,100 +74,100 @@ namespace FSpot.UI.Dialog
 
 		private void BuildUI ()
 		{
-			// The BorderWidth situation here is a bit nuts b/c the
-			// ActionArea's is set to 5.  So we work everything else out
-			// so it all totals to 12.
-			//
-			// WIDGET           BorderWidth
-			// Dialog           5
-			//   VBox           2
-			//     inner_vbox   5 => total = 12
-			//     ActionArea   5 => total = 12
-			BorderWidth = 5;
-			base.VBox.BorderWidth = 0;
-
-			// This spacing is 2 b/c the inner_vbox and ActionArea should be
-			// 12 apart, and they already have BorderWidth 5 each
-			base.VBox.Spacing = 2;
-
-			inner_vbox = new VBox () { Spacing = 12, BorderWidth = 5, Visible = true };
-			base.VBox.PackStart (inner_vbox, true, true, 0);
-
-			Visible = false;
-			HasSeparator = false;
-
-			var table = new Table (3, 2, false) {
-				RowSpacing = 12,
-				ColumnSpacing = 16
-			};
-
-			table.Attach (new Image () {
-					IconName = "dialog-error",
-					IconSize = (int)IconSize.Dialog,
-					Yalign = 0.0f
-				}, 0, 1, 0, 3, AttachOptions.Shrink, AttachOptions.Fill | AttachOptions.Expand, 0, 0);
-
-			table.Attach (header_label = new Label () { Xalign = 0.0f }, 1, 2, 0, 1,
-				AttachOptions.Fill | AttachOptions.Expand,
-				AttachOptions.Shrink, 0, 0);
-
-			table.Attach (message_label = new Hyena.Widgets.WrapLabel (), 1, 2, 1, 2,
-				AttachOptions.Fill | AttachOptions.Expand,
-				AttachOptions.Shrink, 0, 0);
-
-			var scrolled_window = new ScrolledWindow () {
-				HscrollbarPolicy = PolicyType.Automatic,
-				VscrollbarPolicy = PolicyType.Automatic,
-				ShadowType = ShadowType.In
-			};
-
-			list_view = new TreeView () {
-				HeightRequest = 120,
-				WidthRequest = 200
-			};
-			scrolled_window.Add (list_view);
-
-			table.Attach (details_expander = new Expander (Catalog.GetString ("Details")),
-				1, 2, 2, 3,
-				AttachOptions.Fill | AttachOptions.Expand,
-				AttachOptions.Fill | AttachOptions.Expand,
-				0, 0);
-			details_expander.Add (scrolled_window);
-
-			VBox.PackStart (table, true, true, 0);
-			VBox.Spacing = 12;
-			VBox.ShowAll ();
-
-			AccelGroup = new AccelGroup ();
-			AddAccelGroup (AccelGroup);
-
-			Button button = new Button (Stock.Close);
-			button.CanDefault = true;
-			button.UseStock = true;
-			button.Show ();
+            // The BorderWidth situation here is a bit nuts b/c the
+            // ActionArea's is set to 5.  So we work everything else out
+            // so it all totals to 12.
+            //
+            // WIDGET           BorderWidth
+            // Dialog           5
+            //   VBox           2
+            //     inner_vbox   5 => total = 12
+            //     ActionArea   5 => total = 12
+            BorderWidth = 5;
+            base.VBox.BorderWidth = 0;
+
+            // This spacing is 2 b/c the inner_vbox and ActionArea should be
+            // 12 apart, and they already have BorderWidth 5 each
+            base.VBox.Spacing = 2;
+
+            inner_vbox = new VBox () { Spacing = 12, BorderWidth = 5, Visible = true };
+            base.VBox.PackStart (inner_vbox, true, true, 0);
+
+            Visible = false;
+            HasSeparator = false;
+
+            var table = new Table (3, 2, false) {
+                RowSpacing = 12,
+                ColumnSpacing = 16
+            };
+
+            table.Attach (new Image () {
+                    IconName = "dialog-error",
+                    IconSize = (int)IconSize.Dialog,
+                    Yalign = 0.0f
+                }, 0, 1, 0, 3, AttachOptions.Shrink, AttachOptions.Fill | AttachOptions.Expand, 0, 0);
+
+            table.Attach (header_label = new Label () { Xalign = 0.0f }, 1, 2, 0, 1,
+                AttachOptions.Fill | AttachOptions.Expand,
+                AttachOptions.Shrink, 0, 0);
+
+            table.Attach (message_label = new Hyena.Widgets.WrapLabel (), 1, 2, 1, 2,
+                AttachOptions.Fill | AttachOptions.Expand,
+                AttachOptions.Shrink, 0, 0);
+
+            var scrolled_window = new ScrolledWindow () {
+                HscrollbarPolicy = PolicyType.Automatic,
+                VscrollbarPolicy = PolicyType.Automatic,
+                ShadowType = ShadowType.In
+            };
+
+            list_view = new TreeView () {
+                HeightRequest = 120,
+                WidthRequest = 200
+            };
+            scrolled_window.Add (list_view);
+
+            table.Attach (details_expander = new Expander (Catalog.GetString ("Details")),
+                1, 2, 2, 3,
+                AttachOptions.Fill | AttachOptions.Expand,
+                AttachOptions.Fill | AttachOptions.Expand,
+                0, 0);
+            details_expander.Add (scrolled_window);
+
+            VBox.PackStart (table, true, true, 0);
+            VBox.Spacing = 12;
+            VBox.ShowAll ();
+
+            accel_group = new AccelGroup ();
+            AddAccelGroup (accel_group);
+
+            Button button = new Button (Stock.Close);
+            button.CanDefault = true;
+            button.UseStock = true;
+            button.Show ();
 			button.Clicked += (o, a) => {
 				Destroy ();
 			};
 
-			AddActionWidget (button, ResponseType.Close);
+            AddActionWidget (button, ResponseType.Close);
 
 			DefaultResponse = ResponseType.Close;
-			button.AddAccelerator ("activate", AccelGroup, (uint)Gdk.Key.Return, 0, AccelFlags.Visible);
+			button.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.Return, 0, AccelFlags.Visible);
 		}
 
-		public string Header {
-			set {
-				header_label.Markup = String.Format("<b><big>{0}</big></b>",
-					GLib.Markup.EscapeText(value));
-			}
-		}
+        public string Header {
+            set {
+                header_label.Markup = String.Format("<b><big>{0}</big></b>",
+                    GLib.Markup.EscapeText(value));
+            }
+        }
 
-		public string Message {
-			set { message_label.Text = value; }
-		}
+        public string Message {
+            set { message_label.Text = value; }
+        }
 
-		public TreeView ListView {
-			get { return list_view; }
-		}
+        public TreeView ListView {
+            get { return list_view; }
+        }
 	}
 }
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/LastRollDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/LastRollDialog.cs
index cbec65d..2a31caa 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/LastRollDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/LastRollDialog.cs
@@ -31,11 +31,11 @@
 //
 using System;
 using System.Collections.Generic;
-using System.Linq;
-using FSpot.Core;
-using FSpot.Query;
 
 using Gtk;
+using FSpot.Core;
+using FSpot.Query;
+using FSpot.UI.Dialog;
 
 namespace FSpot.UI.Dialog
 {
@@ -99,7 +99,9 @@ namespace FSpot.UI.Dialog
 			Roll [] selected_rolls = SelectedRolls ();
 			uint sum = 0;
 			if (selected_rolls != null)
-				sum = selected_rolls.Aggregate(sum, (current, roll) => current + rollstore.PhotosInRoll(roll));
+				foreach (Roll roll in selected_rolls) {
+					sum = sum + rollstore.PhotosInRoll (roll);
+				}
 			photos_in_selected_rolls.Text = sum.ToString ();
 		}
 
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs
index 2087e3c..39c48d5 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs
@@ -31,13 +31,13 @@
 
 using System;
 using System.IO;
+using System.Collections.Generic;
 using System.Linq;
-
 using Gtk;
-
+using Mono.Unix;
 using Hyena;
 
-using Mono.Unix;
+using FSpot.Widgets;
 
 namespace FSpot.UI.Dialog {
 	public class PreferenceDialog : BuilderDialog
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/ProgressDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/ProgressDialog.cs
index c9b130e..9a1a6f3 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/ProgressDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/ProgressDialog.cs
@@ -29,9 +29,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
+using GLib;
 using Gtk;
+using System;
 
 using Mono.Unix;
 
@@ -53,11 +53,22 @@ namespace FSpot.UI.Dialog {
 
 		private int total_count;
 
-		public ProgressBar Bar { get; private set; }
+		private ProgressBar progress_bar;
+		public ProgressBar Bar {
+			get { return progress_bar; }
+		}
 
-		public Label Message { get; private set; }
+		private Label message_label;
+		public Label Message {
+			get { return message_label; }
+		}
 
-		public Button Button { get; private set; }
+		private Gtk.Button button;
+		public Gtk.Button Button {
+			get {
+				return button;
+			}
+		}
 
 		public ProgressDialog (string title, CancelButtonType cancel_button_type, int total_count, Gtk.Window parent_window)
 		{
@@ -71,18 +82,18 @@ namespace FSpot.UI.Dialog {
 			BorderWidth = 6;
 			SetDefaultSize (300, -1);
 
-			Message = new Label (String.Empty);
-			VBox.PackStart (Message, true, true, 12);
+			message_label = new Label (String.Empty);
+			VBox.PackStart (message_label, true, true, 12);
 
-			Bar = new ProgressBar ();
-			VBox.PackStart (Bar, true, true, 6);
+			progress_bar = new ProgressBar ();
+			VBox.PackStart (progress_bar, true, true, 6);
 
 			switch (cancel_button_type) {
 			case CancelButtonType.Cancel:
-				Button = (Gtk.Button)AddButton (Gtk.Stock.Cancel, (int) ResponseType.Cancel);
+				button = (Gtk.Button)AddButton (Gtk.Stock.Cancel, (int) ResponseType.Cancel);
 				break;
 			case CancelButtonType.Stop:
-				Button = (Gtk.Button)AddButton (Gtk.Stock.Stop, (int) ResponseType.Cancel);
+				button = (Gtk.Button)AddButton (Gtk.Stock.Stop, (int) ResponseType.Cancel);
 				break;
 			}
 
@@ -96,9 +107,9 @@ namespace FSpot.UI.Dialog {
 		{
 			current_count ++;
 
-			Message.Text = message;
-			Bar.Text = String.Format (Catalog.GetString ("{0} of {1}"), current_count, total_count);
-			Bar.Fraction = (double) current_count / total_count;
+			message_label.Text = message;
+			progress_bar.Text = String.Format (Catalog.GetString ("{0} of {1}"), current_count, total_count);
+			progress_bar.Fraction = (double) current_count / total_count;
 
 			ShowAll ();
 
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/RatingFilterDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/RatingFilterDialog.cs
index 822908b..4e80982 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/RatingFilterDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/RatingFilterDialog.cs
@@ -31,10 +31,11 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gtk;
+using FSpot;
 using FSpot.Query;
 using FSpot.Widgets;
-
-using Gtk;
+using FSpot.UI.Dialog;
 
 namespace FSpot.UI.Dialog
 {
@@ -49,7 +50,7 @@ namespace FSpot.UI.Dialog
 		private RatingEntry maxrating;
 
 		public RatingFilterDialog (FSpot.PhotoQuery query, Gtk.Window parent_window)
-			: base ("RatingFilterDialog.ui", "rating_filter_dialog")
+            : base ("RatingFilterDialog.ui", "rating_filter_dialog")
 		{
 			TransientFor = parent_window;
 			DefaultResponse = ResponseType.Ok;
@@ -64,11 +65,11 @@ namespace FSpot.UI.Dialog
 			minrating_hbox.PackStart (minrating, false, false, 0);
 			maxrating_hbox.PackStart (maxrating, false, false, 0);
 
-			minrating.Show ();
-			maxrating.Show ();
+            minrating.Show ();
+            maxrating.Show ();
 
-			minrating.Changed += HandleMinratingChanged;
-			maxrating.Changed += HandleMaxratingChanged;
+            minrating.Changed += HandleMinratingChanged;
+            maxrating.Changed += HandleMaxratingChanged;
 
 			ResponseType response = (ResponseType) Run ();
 
@@ -79,22 +80,22 @@ namespace FSpot.UI.Dialog
 			Destroy ();
 		}
 
-		void HandleMinratingChanged (object sender, System.EventArgs e)
-		{
-			if (minrating.Value > maxrating.Value) {
-				maxrating.Changed -= HandleMaxratingChanged;
-				maxrating.Value = minrating.Value;
-				maxrating.Changed += HandleMaxratingChanged;
-			}
-		}
+        void HandleMinratingChanged (object sender, System.EventArgs e)
+        {
+            if (minrating.Value > maxrating.Value) {
+                maxrating.Changed -= HandleMaxratingChanged;
+                maxrating.Value = minrating.Value;
+                maxrating.Changed += HandleMaxratingChanged;
+            }
+        }
 
-		void HandleMaxratingChanged (object sender, System.EventArgs e)
-		{
-			if (maxrating.Value < minrating.Value) {
-				minrating.Changed -= HandleMinratingChanged;
-				minrating.Value = maxrating.Value;
-				minrating.Changed += HandleMinratingChanged;
-			}
-		}
+        void HandleMaxratingChanged (object sender, System.EventArgs e)
+        {
+            if (maxrating.Value < minrating.Value) {
+                minrating.Changed -= HandleMinratingChanged;
+                minrating.Value = maxrating.Value;
+                minrating.Changed += HandleMinratingChanged;
+            }
+        }
 	}
 }
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs
index 29e686b..b38f9f5 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs
@@ -30,14 +30,11 @@
 //
 
 using System;
-
 using Gtk;
-
+using Mono.Unix;
 using Hyena;
 using Hyena.Widgets;
 
-using Mono.Unix;
-
 namespace FSpot.UI.Dialog
 {
 	public class RepairDbDialog : HigMessageDialog
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/RepairDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/RepairDialog.cs
index 54fc74d..e62a223 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/RepairDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/RepairDialog.cs
@@ -29,16 +29,15 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gtk;
+using System;
 using System.IO;
-
-using FSpot.Core;
 using FSpot.Widgets;
 
-using Gtk;
+using FSpot.Core;
 
 namespace FSpot. UI.Dialog
 {
-	// FIXME: This is never used
 	public class RepairDialog : BuilderDialog
 	{
 		[GtkBeans.Builder.Object] ScrolledWindow view_scrolled;
@@ -55,7 +54,7 @@ namespace FSpot. UI.Dialog
 			TrayView view = new TrayView (missing);
 			view_scrolled.Add (view);
 
-			ShowAll ();
+			this.ShowAll ();
 		}
 
 		public void FindMissing ()
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs
index 787bc61..4135f6d 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs
@@ -28,15 +28,14 @@
 //
 
 using System;
-using System.Collections.Generic;
 using System.IO;
 using System.Xml.Serialization;
+using System.Collections.Generic;
 
 using Gtk;
 
-using Hyena;
-
 using Mono.Unix;
+using Hyena;
 
 namespace FSpot.UI.Dialog {
 	public class SelectionRatioDialog : BuilderDialog
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/TagSelectionDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/TagSelectionDialog.cs
index 1d9638c..cae51bf 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/TagSelectionDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/TagSelectionDialog.cs
@@ -31,9 +31,10 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Core;
-
+using System;
+using Gdk;
 using Gtk;
+using FSpot.Core;
 
 namespace FSpot.UI.Dialog {
 	public class TagSelectionDialog : BuilderDialog
@@ -52,7 +53,10 @@ namespace FSpot.UI.Dialog {
 		public new Tag[] Run ()
 		{
 			int response = base.Run ();
-			return (ResponseType) response == ResponseType.Ok ? tag_selection_widget.TagHighlight : null;
+			if ((ResponseType) response == ResponseType.Ok)
+				return tag_selection_widget.TagHighlight;
+
+			return null;
 		}
 
 		public new void Hide ()
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs
index df62de5..c728af9 100644
--- a/src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs
@@ -32,13 +32,13 @@
 //
 
 using System;
-using System.Collections.Generic;
 using System.Threading;
-
-using FSpot.Utils;
+using System.Collections.Generic;
 
 using Gtk;
 
+using FSpot.Utils;
+
 namespace FSpot.UI.Dialog {
 	public class ThreadProgressDialog : Gtk.Dialog {
 		DelayedOperation delay;
diff --git a/src/Clients/MainApp/FSpot.Widgets/BrowseablePointerGridView.cs b/src/Clients/MainApp/FSpot.Widgets/BrowseablePointerGridView.cs
index 734956d..c9b0f4a 100644
--- a/src/Clients/MainApp/FSpot.Widgets/BrowseablePointerGridView.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/BrowseablePointerGridView.cs
@@ -29,9 +29,10 @@
 
 using System;
 
-using FSpot.Core;
-
 using Gdk;
+using Gtk;
+
+using FSpot.Core;
 
 
 namespace FSpot.Widgets
@@ -44,7 +45,10 @@ namespace FSpot.Widgets
     {
 
 #region Public Properties
-        public BrowsablePointer Pointer { get; private set; }
+
+        public BrowsablePointer Pointer {
+            get; private set;
+        }
 
 #endregion
 
diff --git a/src/Clients/MainApp/FSpot.Widgets/CellRendererTextProgress.cs b/src/Clients/MainApp/FSpot.Widgets/CellRendererTextProgress.cs
index e1900fc..2d1c7fc 100644
--- a/src/Clients/MainApp/FSpot.Widgets/CellRendererTextProgress.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/CellRendererTextProgress.cs
@@ -30,8 +30,15 @@
 //
 
 using System;
+using System.Collections.Generic;
 
 using Gtk;
+using GLib;
+
+using FSpot;
+using FSpot.Utils;
+
+using Mono.Unix;
 
 namespace FSpot.Widgets
 {
diff --git a/src/Clients/MainApp/FSpot.Widgets/CollectionCellGridView.cs b/src/Clients/MainApp/FSpot.Widgets/CollectionCellGridView.cs
index 1300462..bc1a825 100644
--- a/src/Clients/MainApp/FSpot.Widgets/CollectionCellGridView.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/CollectionCellGridView.cs
@@ -29,12 +29,12 @@
 
 using System;
 
+using Gtk;
+using Gdk;
+
 using FSpot.Core;
 using FSpot.Utils;
 
-using Gdk;
-using Gtk;
-
 
 namespace FSpot.Widgets
 {
@@ -47,17 +47,23 @@ namespace FSpot.Widgets
 
 #region Private Fields
 
-        private readonly ThumbnailDecorationRenderer rating_renderer = new ThumbnailRatingDecorationRenderer ();
+        private ThumbnailDecorationRenderer rating_renderer = new ThumbnailRatingDecorationRenderer ();
 
-        private readonly ThumbnailCaptionRenderer tag_renderer = new ThumbnailTagsCaptionRenderer ();
-        private readonly ThumbnailCaptionRenderer date_renderer = new ThumbnailDateCaptionRenderer ();
-        private readonly ThumbnailCaptionRenderer filename_renderer = new ThumbnailFilenameCaptionRenderer ();
+        private ThumbnailCaptionRenderer tag_renderer = new ThumbnailTagsCaptionRenderer ();
+        private ThumbnailCaptionRenderer date_renderer = new ThumbnailDateCaptionRenderer ();
+        private ThumbnailCaptionRenderer filename_renderer = new ThumbnailFilenameCaptionRenderer ();
 
 #endregion
 
 #region Public Properties
-        public IBrowsableCollection Collection { get; private set; }
-        public FSpot.PixbufCache Cache { get; private set; }
+
+        public IBrowsableCollection Collection {
+            get; private set;
+        }
+
+        public FSpot.PixbufCache Cache {
+            get; private set;
+        }
 
 #endregion
 
@@ -67,11 +73,13 @@ namespace FSpot.Widgets
         {
         }
 
-        public CollectionGridView (IBrowsableCollection collection)
+        public CollectionGridView (IBrowsableCollection collection) : base ()
         {
             Collection = collection;
 
-            Collection.Changed += (obj) => QueueResize ();
+            Collection.Changed += (obj) => {
+                QueueResize ();
+            };
 
             Collection.ItemsChanged += (obj, args) => {
                 foreach (int item in args.Items) {
@@ -188,9 +196,11 @@ namespace FSpot.Widgets
         }
 
         protected override int CellCount {
-            get
-            {
-            	return Collection == null ? 0 : Collection.Count;
+            get {
+                if (Collection == null)
+                    return 0;
+
+                return Collection.Count;
             }
         }
 
@@ -212,12 +222,14 @@ namespace FSpot.Widgets
 
         private bool display_dates = true;
         public bool DisplayDates {
-            get
-            {
-            	return MinCellWidth > 100 && display_dates;
+            get {
+                if (MinCellWidth > 100)
+                    return display_dates;
+                else
+                    return false;
             }
 
-        	set {
+            set {
                 display_dates = value;
                 QueueResize ();
             }
@@ -237,10 +249,13 @@ namespace FSpot.Widgets
         private bool display_ratings = true;
         public bool DisplayRatings {
             get {
-            	return MinCellWidth > 100 && display_ratings;
+                if (MinCellWidth > 100)
+                    return display_ratings;
+                else
+                    return false;
             }
 
-        	set {
+            set {
                 display_ratings  = value;
                 QueueResize ();
             }
@@ -506,11 +521,11 @@ namespace FSpot.Widgets
             InvalidateCell (throb_cell);
             if (throb_state++ < throb_state_max) {
                 return true;
+            } else {
+                throb_cell = -1;
+                throb_timer_id = 0;
+                return false;
             }
-
-        	throb_cell = -1;
-        	throb_timer_id = 0;
-        	return false;
         }
 
         private int ThrobExpansion (int cell, bool selected)
diff --git a/src/Clients/MainApp/FSpot.Widgets/EditorPage.cs b/src/Clients/MainApp/FSpot.Widgets/EditorPage.cs
index a2a7dc8..c9576a5 100644
--- a/src/Clients/MainApp/FSpot.Widgets/EditorPage.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/EditorPage.cs
@@ -29,23 +29,23 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-using System.Collections.Generic;
-
-using FSpot.Core;
-using FSpot.Editors;
+using FSpot;
 using FSpot.Extensions;
+using FSpot.Editors;
 using FSpot.UI.Dialog;
 using FSpot.Utils;
+using FSpot.Core;
 
 using Gtk;
 
-using Hyena;
-using Hyena.Widgets;
-
 using Mono.Addins;
 using Mono.Unix;
 
+using System;
+using System.Collections.Generic;
+using Hyena;
+using Hyena.Widgets;
+
 namespace FSpot.Widgets {
 	public class EditorPage : SidebarPage {
 		internal bool InPhotoView;
@@ -61,7 +61,7 @@ namespace FSpot.Widgets {
 		}
 
 		protected override void AddedToSidebar () {
-			(Sidebar as Sidebar).SelectionChanged += collection => EditorPageWidget.ShowTools();
+			(Sidebar as Sidebar).SelectionChanged += delegate (IBrowsableCollection collection) { EditorPageWidget.ShowTools (); };
 			(Sidebar as Sidebar).ContextChanged += HandleContextChanged;
 		}
 
@@ -141,7 +141,7 @@ namespace FSpot.Widgets {
 			Button button = new Button (editor.Label);
 			if (editor.IconName != null)
 				button.Image = new Image (GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, editor.IconName, 22, (Gtk.IconLookupFlags)0));
-			button.Clicked += (o, e) => ChooseEditor(editor);
+			button.Clicked += delegate (object o, EventArgs e) { ChooseEditor (editor); };
 			button.Show ();
 			buttons.Add (button);
 			editor_buttons.Add (editor, button);
diff --git a/src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs b/src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs
index 10182fb..7b33096 100644
--- a/src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs
@@ -37,20 +37,21 @@
 //	* Handle orientation changes (low) (require gtk# changes, so I can trigger an OrientationChanged event)
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
 
-using FSpot.Bling;
-using FSpot.Core;
-using FSpot.Utils;
-
-using Gdk;
 using Gtk;
+using Gdk;
 
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Platform;
+using FSpot.Bling;
 using Hyena;
 
 namespace FSpot.Widgets
 {
-	public class Filmstrip : EventBox
+	public class Filmstrip : EventBox, IDisposable
 	{
 
 //		public event OrientationChangedHandler OrientationChanged;
@@ -111,7 +112,11 @@ namespace FSpot.Widgets
 			}
 		}
 
-		public bool SquaredThumbs { get; set; }
+		bool squared_thumbs = false;
+		public bool SquaredThumbs {
+			get { return squared_thumbs; }
+			set { squared_thumbs = value; }
+		}
 
 		Pixbuf background_tile;
 		public Pixbuf BackgroundTile {
@@ -213,14 +218,18 @@ namespace FSpot.Widgets
 		BrowsablePointer selection;
 		DisposableCache<SafeUri, Pixbuf> thumb_cache;
 
-		public Filmstrip (BrowsablePointer selection, bool squared_thumbs = true)
+		public Filmstrip (BrowsablePointer selection) : this (selection, true)
+		{
+		}
+
+		public Filmstrip (BrowsablePointer selection, bool squared_thumbs) : base ()
 		{
 			CanFocus = true;
 			this.selection = selection;
 			this.selection.Changed += HandlePointerChanged;
 			this.selection.Collection.Changed += HandleCollectionChanged;
 			this.selection.Collection.ItemsChanged += HandleCollectionItemsChanged;
-			this.SquaredThumbs = squared_thumbs;
+			this.squared_thumbs = squared_thumbs;
 			thumb_cache = new DisposableCache<SafeUri, Pixbuf> (30);
 			ThumbnailLoader.Default.OnPixbufLoaded += HandlePixbufLoaded;
 
@@ -520,7 +529,12 @@ namespace FSpot.Widgets
 			return true;
 		}
 
-		protected virtual Pixbuf GetPixbuf (int i, bool highlighted = false)
+		protected Pixbuf GetPixbuf (int i)
+		{
+			return GetPixbuf (i, false);
+		}
+
+		protected virtual Pixbuf GetPixbuf (int i, bool highlighted)
 		{
 			Pixbuf current = null;
 			SafeUri uri = (selection.Collection [i]).DefaultVersion.Uri;
@@ -533,19 +547,19 @@ namespace FSpot.Widgets
 			}
 
 			if (current == null) {
-				var pixbuf = XdgThumbnailSpec.LoadThumbnail (uri, ThumbnailSize.Large, null);
-				if (pixbuf == null) {
+                var pixbuf = XdgThumbnailSpec.LoadThumbnail (uri, ThumbnailSize.Large, null);
+                if (pixbuf == null) {
 					ThumbnailLoader.Default.Request (uri, ThumbnailSize.Large, 0);
-					current = FSpot.Core.Global.IconTheme.LoadIcon ("gtk-missing-image", ThumbSize, (Gtk.IconLookupFlags)0);
-				} else {
+                    current = FSpot.Core.Global.IconTheme.LoadIcon ("gtk-missing-image", ThumbSize, (Gtk.IconLookupFlags)0);
+                } else {
 					if (SquaredThumbs) {
-						current = PixbufUtils.IconFromPixbuf (pixbuf, ThumbSize);
-					} else {
-						current = pixbuf.ScaleSimple (ThumbSize, ThumbSize, InterpType.Nearest);
-					}
-					pixbuf.Dispose ();
+                        current = PixbufUtils.IconFromPixbuf (pixbuf, ThumbSize);
+                    } else {
+                        current = pixbuf.ScaleSimple (ThumbSize, ThumbSize, InterpType.Nearest);
+                    }
+                    pixbuf.Dispose ();
 					thumb_cache.Add (uri, current);
-				}
+                }
 			}
 
 			//FIXME: we might end up leaking a pixbuf here
diff --git a/src/Clients/MainApp/FSpot.Widgets/FindBar.cs b/src/Clients/MainApp/FSpot.Widgets/FindBar.cs
index 732364e..75ee91d 100644
--- a/src/Clients/MainApp/FSpot.Widgets/FindBar.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/FindBar.cs
@@ -32,23 +32,24 @@
 //
 
 using System;
+using System.Collections;
 using System.Text;
 using System.Text.RegularExpressions;
+using Gtk;
+using Gdk;
+using Mono.Unix;
 
 using FSpot.Core;
 using FSpot.Query;
-
-using Gtk;
-
 using Hyena;
 
-using Mono.Unix;
-
 namespace FSpot.Widgets {
 	public class FindBar : HighlightedBox {
+		private Entry entry;
 		private string last_entry_text = String.Empty;
 		private int open_parens = 0, close_parens = 0;
 		private PhotoQuery query;
+		private Term root_term = null;
 		private HBox box;
 
 		/*
@@ -56,20 +57,23 @@ namespace FSpot.Widgets {
 		 */
 		public bool Completing {
 			get {
-				return (Entry.Completion as LogicEntryCompletion).Completing;
+				return (entry.Completion as LogicEntryCompletion).Completing;
 			}
 		}
 
-		public Entry Entry { get; private set; }
+		public Gtk.Entry Entry {
+			get { return entry; }
+		}
 
-		public Term RootTerm { get; private set; }
+		public Term RootTerm  {
+			get { return root_term; }
+		}
 
 		/*
 		 * Constructor
 		 */
 		public FindBar (PhotoQuery query, TreeModel model) : base(new HBox())
 		{
-			RootTerm = null;
 			this.query = query;
 			box = Child as HBox;
 
@@ -78,14 +82,14 @@ namespace FSpot.Widgets {
 
 			box.PackStart (new Label (Catalog.GetString ("Find:")), false, false, 0);
 
-			Entry = new Entry ();
-			Entry.Completion = new LogicEntryCompletion (Entry, model);
+			entry = new Entry ();
+			entry.Completion = new LogicEntryCompletion (entry, model);
 
-			Entry.TextInserted  += HandleEntryTextInserted;
-			Entry.TextDeleted   += HandleEntryTextDeleted;
-			Entry.KeyPressEvent += HandleEntryKeyPress;
+			entry.TextInserted  += HandleEntryTextInserted;
+			entry.TextDeleted   += HandleEntryTextDeleted;
+			entry.KeyPressEvent += HandleEntryKeyPress;
 
-			box.PackStart (Entry, true, true, 0);
+			box.PackStart (entry, true, true, 0);
 
 			Button clear_button = new Gtk.Button ();
 			clear_button.Add (new Gtk.Image ("gtk-close", Gtk.IconSize.Button));
@@ -109,25 +113,25 @@ namespace FSpot.Widgets {
 
 			//int start = args.Position - args.Length;
 
-			foreach (char c in args.Text)
-			{
+			for (int i = 0; i < args.Text.Length; i++) {
+				char c = args.Text [i];
 				if (c == '(')
 					open_parens++;
 				else if (c == ')')
 					close_parens++;
 			}
 
-			int pos = Entry.Position + 1;
+			int pos = entry.Position + 1;
 			int close_parens_needed = open_parens - close_parens;
 			for (int i = 0; i < close_parens_needed; i++) {
-				Entry.TextInserted -= HandleEntryTextInserted;
-				Entry.InsertText (")", ref pos);
+				entry.TextInserted -= HandleEntryTextInserted;
+				entry.InsertText (")", ref pos);
 				close_parens++;
-				Entry.TextInserted += HandleEntryTextInserted;
+				entry.TextInserted += HandleEntryTextInserted;
 				pos++;
 			}
 			//Log.DebugFormat ("done w/ insert, {0}, ( = {1}  ) = {2}", args.Text, open_parens, close_parens);
-			last_entry_text = Entry.Text;
+			last_entry_text = entry.Text;
 
 			QueueUpdate ();
 		}
@@ -138,15 +142,14 @@ namespace FSpot.Widgets {
 			//Log.DebugFormat ("start {0} end {1} len {2} last {3}", args.StartPos, args.EndPos, length, last_entry_text);
 			string txt = length < 0 ? last_entry_text : last_entry_text.Substring (args.StartPos, length);
 
-			foreach (char t in txt)
-			{
-				if (t == '(')
+			for (int i = 0; i < txt.Length; i++) {
+				if (txt [i] == '(')
 					open_parens--;
-				else if (t == ')')
+				else if (txt [i] == ')')
 					close_parens--;
 			}
 
-			last_entry_text = Entry.Text;
+			last_entry_text = entry.Text;
 
 			QueueUpdate ();
 		}
@@ -163,17 +166,17 @@ namespace FSpot.Widgets {
 
 			case (Gdk.Key.Tab):
 				// If we are at the end of the entry box, let the normal Tab handler do its job
-				if (Entry.Position == Entry.Text.Length) {
+				if (entry.Position == entry.Text.Length) {
 					args.RetVal = false;
 					return;
 				}
 
 				// Go until the current character is an open paren
-				while (Entry.Position < Entry.Text.Length && Entry.Text [Entry.Position] != '(')
-					Entry.Position++;
+				while (entry.Position < entry.Text.Length && entry.Text [entry.Position] != '(')
+					entry.Position++;
 
 				// Put the cursor right after the open paren
-				Entry.Position++;
+				entry.Position++;
 
 				args.RetVal = true;
 				break;
@@ -190,7 +193,7 @@ namespace FSpot.Widgets {
 
 		private void Clear ()
 		{
-			Entry.Text = String.Empty;
+			entry.Text = String.Empty;
 			Hide ();
 		}
 
@@ -230,7 +233,7 @@ namespace FSpot.Widgets {
 
 		private bool ConstructQuery (Term parent, int depth, string txt, bool negated)
 		{
-			if (string.IsNullOrEmpty(txt))
+			if (txt == null || txt.Length == 0)
 				return true;
 
 			string indent = String.Format ("{0," + depth*2 + "}", " ");
@@ -301,62 +304,62 @@ namespace FSpot.Widgets {
 				}
 
 				if (RootTerm == null)
-					RootTerm = parent;
+					root_term = parent;
 
 				return true;
-			}
+			} else {
+				Term us = null;
+				if (op != null && op != String.Empty) {
+					us = Term.TermFromOperator (op, parent, null);
+					if (RootTerm == null)
+						root_term = us;
+				}
 
-			Term us = null;
-			if (op != null && op != String.Empty) {
-				us = Term.TermFromOperator (op, parent, null);
-				if (RootTerm == null)
-					RootTerm = us;
-			}
+				foreach (Capture capture in match.Groups ["Term"].Captures) {
+					string subterm = capture.Value.Trim ();
+
+					if (subterm == null || subterm.Length == 0)
+						continue;
 
-			foreach (Capture capture in match.Groups ["Term"].Captures) {
-				string subterm = capture.Value.Trim ();
+					// Strip leading/trailing parens
+					if (subterm [0] == '(' && subterm [subterm.Length - 1] == ')') {
+						subterm = subterm.Remove (subterm.Length - 1, 1);
+						subterm = subterm.Remove (0, 1);
+					}
 
-				if (subterm == null || subterm.Length == 0)
-					continue;
+					//Log.DebugFormat (indent + "Breaking subterm apart: {0}", subterm);
 
-				// Strip leading/trailing parens
-				if (subterm [0] == '(' && subterm [subterm.Length - 1] == ')') {
-					subterm = subterm.Remove (subterm.Length - 1, 1);
-					subterm = subterm.Remove (0, 1);
+					if (!ConstructQuery (us, depth + 1, subterm, negated))
+						return false;
 				}
 
-				//Log.DebugFormat (indent + "Breaking subterm apart: {0}", subterm);
+				foreach (Capture capture in match.Groups ["NotTerm"].Captures) {
+					string subterm = capture.Value.Trim ();
 
-				if (!ConstructQuery (us, depth + 1, subterm, negated))
-					return false;
-			}
+					if (subterm == null || subterm.Length == 0)
+						continue;
 
-			foreach (Capture capture in match.Groups ["NotTerm"].Captures) {
-				string subterm = capture.Value.Trim ();
+					// Strip leading/trailing parens
+					if (subterm [0] == '(' && subterm [subterm.Length - 1] == ')') {
+						subterm = subterm.Remove (subterm.Length - 1, 1);
+						subterm = subterm.Remove (0, 1);
+					}
 
-				if (subterm == null || subterm.Length == 0)
-					continue;
+					//Log.DebugFormat (indent + "Breaking not subterm apart: {0}", subterm);
 
-				// Strip leading/trailing parens
-				if (subterm [0] == '(' && subterm [subterm.Length - 1] == ')') {
-					subterm = subterm.Remove (subterm.Length - 1, 1);
-					subterm = subterm.Remove (0, 1);
+					if (!ConstructQuery (us, depth + 1, subterm, true))
+						return false;
 				}
 
-				//Log.DebugFormat (indent + "Breaking not subterm apart: {0}", subterm);
-
-				if (!ConstructQuery (us, depth + 1, subterm, true))
-					return false;
-			}
+				if (negated && us != null) {
+					if (us == RootTerm)
+						root_term = us.Invert(false);
+					else
+						us.Invert(false);
+				}
 
-			if (negated && us != null) {
-				if (us == RootTerm)
-					RootTerm = us.Invert(false);
-				else
-					us.Invert(false);
+				return true;
 			}
-
-			return true;
 		}
 
 		private bool updating = false;
@@ -400,9 +403,9 @@ namespace FSpot.Widgets {
 		private void Update ()
 		{
 			// Clear the last root term
-			RootTerm = null;
+			root_term = null;
 
-			if (ParensValid () && ConstructQuery (null, 0, Entry.Text)) {
+			if (ParensValid () && ConstructQuery (null, 0, entry.Text)) {
 				if (RootTerm != null) {
 					//Log.DebugFormat("rootTerm = {0}", RootTerm);
 					if (!(RootTerm is AndTerm)) {
@@ -410,7 +413,7 @@ namespace FSpot.Widgets {
 						// ensure we handle the Hidden tag properly
 						AndTerm root_parent = new AndTerm(null, null);
 						RootTerm.Parent = root_parent;
-						RootTerm = root_parent;
+						root_term = root_parent;
 					}
 
 					//Log.DebugFormat("rootTerm = {0}", RootTerm);
@@ -419,7 +422,7 @@ namespace FSpot.Widgets {
 						// ensure we handle the Hidden tag properly
 						AndTerm root_parent = new AndTerm(null, null);
 						RootTerm.Parent = root_parent;
-						RootTerm = root_parent;
+						root_term = root_parent;
 					}
 					//Log.DebugFormat ("condition = {0}", RootTerm.SqlCondition ());
 					query.TagTerm = new ConditionWrapper (RootTerm.SqlCondition ());
@@ -432,9 +435,9 @@ namespace FSpot.Widgets {
 
 		private bool ParensValid ()
 		{
-			for (int i = 0; i < Entry.Text.Length; i++) {
-				if (Entry.Text [i] == '(' || Entry.Text [i] == ')') {
-					int pair_pos = ParenPairPosition (Entry.Text, i);
+			for (int i = 0; i < entry.Text.Length; i++) {
+				if (entry.Text [i] == '(' || entry.Text [i] == ')') {
+					int pair_pos = ParenPairPosition (entry.Text, i);
 
 					if (pair_pos == -1)
 						return false;
@@ -468,11 +471,11 @@ namespace FSpot.Widgets {
 
 				if (txt [pos] == one)
 					sames++;
-				else if (txt [pos] == two)
-				{
+				else if (txt [pos] == two) {
 					if (sames == 0)
 						return pos;
-					sames--;
+					else
+						sames--;
 				}
 			}
 
@@ -490,11 +493,13 @@ namespace FSpot.Widgets {
 	public class LogicEntryCompletion : EntryCompletion {
 		private Entry entry;
 
-		public bool Completing { get; private set; }
+		private bool completing = false;
+		public bool Completing {
+			get { return completing; }
+		}
 
 		public LogicEntryCompletion (Entry entry, TreeModel tree_model)
 		{
-			Completing = false;
 			this.entry = entry;
 
 			Model = new DependentListStore(tree_model);
@@ -521,10 +526,10 @@ namespace FSpot.Widgets {
 			int pos = entry.Position;
 			string updated_text = completion_logic.ReplaceKey (entry.Text, name, ref pos);
 
-			Completing = true;
+			completing = true;
 			entry.Text = updated_text;
 			entry.Position = pos;
-			Completing = false;
+			completing = false;
 
 			args.RetVal = true;
 			//Log.Debug ("done w/ match selected");
@@ -562,7 +567,7 @@ namespace FSpot.Widgets {
 			if (key != last_key) {
 				last_key = key;
 
-				if (string.IsNullOrEmpty(key) || pos < 0 || pos > key.Length - 1)
+				if (key == null || key.Length == 0 || pos < 0 || pos > key.Length - 1)
 					transformed_key = String.Empty;
 				else if (key [pos] == '(' || key [pos] == ')' || key [pos] == ',')
 					transformed_key = String.Empty;
diff --git a/src/Clients/MainApp/FSpot.Widgets/FolderTreeModel.cs b/src/Clients/MainApp/FSpot.Widgets/FolderTreeModel.cs
index 5dc9145..9c047c7 100644
--- a/src/Clients/MainApp/FSpot.Widgets/FolderTreeModel.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/FolderTreeModel.cs
@@ -30,15 +30,19 @@
 //
 
 using System;
-
-using FSpot.Core;
-using FSpot.Database;
+using System.Collections.Generic;
 
 using Gtk;
+using GLib;
 
+using FSpot;
+using FSpot.Database;
+using FSpot.Core;
 using Hyena;
 using Hyena.Data.Sqlite;
 
+using Mono.Unix;
+
 namespace FSpot.Widgets
 {
 	public class FolderTreeModel : TreeStore
@@ -199,7 +203,7 @@ namespace FSpot.Widgets
 					last_count += (int)GetValue (iter, 1);
 					SetValue (iter, 1, last_count);
 				}
-				count_all += last_count;
+				count_all += (int)last_count;
 			}
 		}
 	}
diff --git a/src/Clients/MainApp/FSpot.Widgets/FolderTreePage.cs b/src/Clients/MainApp/FSpot.Widgets/FolderTreePage.cs
index 0542ac4..aba8bc8 100644
--- a/src/Clients/MainApp/FSpot.Widgets/FolderTreePage.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/FolderTreePage.cs
@@ -29,15 +29,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Extensions;
-
+using System;
 using Gtk;
-
 using Mono.Unix;
+using FSpot.Extensions;
 
 namespace FSpot.Widgets
 {
-	// FIXME: This is never used
 	public class FolderTreePage : SidebarPage
 	{
 		readonly FolderTreeView folder_tree_widget;
diff --git a/src/Clients/MainApp/FSpot.Widgets/FolderTreeView.cs b/src/Clients/MainApp/FSpot.Widgets/FolderTreeView.cs
index 523f010..c760a5a 100644
--- a/src/Clients/MainApp/FSpot.Widgets/FolderTreeView.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/FolderTreeView.cs
@@ -30,12 +30,15 @@
 //
 
 using System;
-using FSpot.Utils;
+using System.Collections.Generic;
 
 using Gtk;
+using GLib;
 
-using Hyena;
+using FSpot;
+using FSpot.Utils;
 
+using Hyena;
 using Mono.Unix;
 
 namespace FSpot.Widgets
@@ -46,14 +49,14 @@ namespace FSpot.Widgets
 
 		protected FolderTreeView (IntPtr raw) : base (raw) {}
 
-		private static readonly TargetList folderTreeSourceTargetList = new TargetList();
+        private static TargetList folderTreeSourceTargetList = new TargetList();
 
-		static FolderTreeView()
-		{
-			folderTreeSourceTargetList.AddTextTargets((uint)DragDropTargets.TargetType.PlainText);
-			folderTreeSourceTargetList.AddUriTargets((uint)DragDropTargets.TargetType.UriList);
-			folderTreeSourceTargetList.AddTargetEntry(DragDropTargets.UriQueryEntry);
-		}
+        static FolderTreeView()
+        {
+            folderTreeSourceTargetList.AddTextTargets((uint)DragDropTargets.TargetType.PlainText);
+            folderTreeSourceTargetList.AddUriTargets((uint)DragDropTargets.TargetType.UriList);
+            folderTreeSourceTargetList.AddTargetEntry(DragDropTargets.UriQueryEntry);
+        }
 
 		public FolderTreeView () : this (new FolderTreeModel ())
 		{
@@ -78,7 +81,7 @@ namespace FSpot.Widgets
 			AppendColumn (column);
 
 			Gtk.Drag.SourceSet (this, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
-					(TargetEntry[])folderTreeSourceTargetList, Gdk.DragAction.Copy | Gdk.DragAction.Move);
+				    (TargetEntry[])folderTreeSourceTargetList, Gdk.DragAction.Copy | Gdk.DragAction.Move);
 		}
 
 		public UriList SelectedUris {
@@ -164,10 +167,11 @@ namespace FSpot.Widgets
 		protected override void OnDragDataGet (Gdk.DragContext context, Gtk.SelectionData selection_data, uint info, uint time_)
 		{
 			if (info == DragDropTargets.UriQueryEntry.Info
-				|| info == (uint)DragDropTargets.TargetType.UriList
-				|| info == (uint)DragDropTargets.TargetType.PlainText) {
+			    || info == (uint)DragDropTargets.TargetType.UriList
+			    || info == (uint)DragDropTargets.TargetType.PlainText) {
 
 				selection_data.SetUriListData (SelectedUris, context.Targets[0]);
+				return;
 			}
 		}
 
diff --git a/src/Clients/MainApp/FSpot.Widgets/ImageInfo.cs b/src/Clients/MainApp/FSpot.Widgets/ImageInfo.cs
index 76de59c..55dbacd 100644
--- a/src/Clients/MainApp/FSpot.Widgets/ImageInfo.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/ImageInfo.cs
@@ -30,15 +30,11 @@
 //
 
 using System;
-
 using Cairo;
-
-using FSpot.Imaging;
-using FSpot.Utils;
-
 using Gdk;
 using Gtk;
-
+using FSpot.Utils;
+using FSpot.Imaging;
 using Hyena;
 
 namespace FSpot.Widgets {
diff --git a/src/Clients/MainApp/FSpot.Widgets/InfoBox.cs b/src/Clients/MainApp/FSpot.Widgets/InfoBox.cs
index 75348bc..7ea7307 100644
--- a/src/Clients/MainApp/FSpot.Widgets/InfoBox.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/InfoBox.cs
@@ -31,752 +31,761 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gtk;
 using System;
 using System.Collections.Generic;
-using Cairo;
+using System.IO;
 using FSpot.Core;
 using FSpot.Imaging;
-using FSpot.Utils;
-
-using Gtk;
-
 using Mono.Unix;
-
+using FSpot.Utils;
+using GLib;
 using GFile = GLib.File;
 using GFileInfo = GLib.FileInfo;
+using Hyena;
 
 // FIXME TODO: We want to use something like EClippedLabel here throughout so it handles small sizes
 // gracefully using ellipsis.
 
 namespace FSpot.Widgets
 {
-	public class InfoBox : VBox
-	{
-		DelayedOperation update_delay;
-
-		public struct InfoEntry
-		{
-			public bool TwoColumns;
-			public bool AlwaysVisible;
-			public bool DefaultVisibility;
-			public string Id;
-			public string Description;
-			public Widget LabelWidget;
-			public Widget InfoWidget;
-			public Action<Widget, IPhoto, TagLib.Image.File> SetSingle;
-			public Action<Widget, IPhoto[]> SetMultiple;
-		}
-
-		private readonly List<InfoEntry> entries = new List<InfoEntry> ();
-
-		private void AddEntry (string id, string name, string description, Widget info_widget, float label_y_align,
-							   bool default_visibility,
-							   Action<Widget, IPhoto, TagLib.Image.File> set_single,
-							   Action<Widget, IPhoto[]> set_multiple)
-		{
-			entries.Add (new InfoEntry {
-				TwoColumns = (name == null),
-				AlwaysVisible = (id == null) || (description == null),
-				DefaultVisibility = default_visibility,
-				Id = id,
-				Description = description,
-				LabelWidget = CreateRightAlignedLabel (String.Format ("<b>{0}</b>", name), label_y_align),
-				InfoWidget = info_widget,
-				SetSingle = set_single,
-				SetMultiple = set_multiple
-			});
-		}
-
-		private void AddEntry (string id, string name, string description, Widget info_widget, float label_y_align,
-							   Action<Widget, IPhoto, TagLib.Image.File> set_single,
-							   Action<Widget, IPhoto[]> set_multiple)
-		{
-			AddEntry (id, name, description, info_widget, label_y_align, true, set_single, set_multiple);
-		}
-
-		private void AddEntry (string id, string name, string description, Widget info_widget, bool default_visibility,
-							   Action<Widget, IPhoto, TagLib.Image.File> set_single,
-							   Action<Widget, IPhoto[]> set_multiple)
-		{
-			AddEntry (id, name, description, info_widget, 0.0f, default_visibility, set_single, set_multiple);
-		}
-
-		private void AddEntry (string id, string name, string description, Widget info_widget,
-							   Action<Widget, IPhoto, TagLib.Image.File> set_single,
-							   Action<Widget, IPhoto[]> set_multiple)
-		{
-			AddEntry (id, name, description, info_widget, 0.0f, set_single, set_multiple);
-		}
-
-		private void AddLabelEntry (string id, string name, string description,
-									Func<IPhoto, TagLib.Image.File, string> single_string,
-									Func<IPhoto[], string> multiple_string)
-		{
-			AddLabelEntry (id, name, description, true, single_string, multiple_string);
-		}
-
-		private void AddLabelEntry (string id, string name, string description, bool default_visibility,
-									Func<IPhoto, TagLib.Image.File, string> single_string,
-									Func<IPhoto[], string> multiple_string)
-		{
-			Action<Widget, IPhoto, TagLib.Image.File> set_single = (widget, photo, metadata) => {
-				if (metadata != null)
-					(widget as Label).Text = single_string (photo, metadata);
-				else
-					(widget as Label).Text = Catalog.GetString ("(Unknown)");
-			};
-			
-			Action<Widget, IPhoto[]> set_multiple = (widget, photos) => {
-				(widget as Label).Text = multiple_string (photos);
-			};
-			
-			AddEntry (id, name, description, CreateLeftAlignedLabel (String.Empty), default_visibility,
-					  single_string == null ? null : set_single,
-					  multiple_string == null ? null : set_multiple);
-		}
-
-
-		private IPhoto[] photos = new IPhoto[0];
-		public IPhoto[] Photos {
-			private get { return photos; }
-			set {
-				photos = value;
-				update_delay.Start ();
-			}
-		}
-
-		public IPhoto Photo {
-			set {
-				if (value != null) {
-					Photos = new IPhoto[] { value };
-				}
-			}
-		}
-
-		private bool show_tags = false;
-		public bool ShowTags {
-			get { return show_tags; }
-			set {
-				if (show_tags == value)
-					return;
-				
-				show_tags = value;
-				//      tag_view.Visible = show_tags;
-			}
-		}
-
-		private bool show_rating = false;
-		public bool ShowRating {
-			get { return show_rating; }
-			set {
-				if (show_rating == value)
-					return;
-				
-				show_rating = value;
-				//      rating_label.Visible = show_rating;
-				//      rating_view.Visible = show_rating;
-			}
-		}
-
-		public delegate void VersionChangedHandler (InfoBox info_box, IPhotoVersion version);
-		public event VersionChangedHandler VersionChanged;
-
-		private Expander info_expander;
-		private Expander histogram_expander;
-
-		private Gtk.Image histogram_image;
-		private Histogram histogram;
-
-		private DelayedOperation histogram_delay;
-
-		// Context switching (toggles visibility).
-		public event EventHandler ContextChanged;
-
-		private ViewContext view_context = ViewContext.Unknown;
-		public ViewContext Context {
-			get { return view_context; }
-			set {
-				view_context = value;
-				if (ContextChanged != null)
-					ContextChanged (this, null);
-			}
-		}
-
-		private readonly InfoBoxContextSwitchStrategy ContextSwitchStrategy;
-
-		// Widgetry.
-		private ListStore version_list;
-		private ComboBox version_combo;
-
-
-		private void HandleRatingChanged (object o, EventArgs e)
-		{
-			App.Instance.Organizer.HandleRatingMenuSelected ((o as Widgets.RatingEntry).Value);
-		}
-
-		private Label CreateRightAlignedLabel (string text, float yalign)
-		{
-			Label label = new Label ();
-			label.UseMarkup = true;
-			label.Markup = text;
-			label.Xalign = 1.0f;
-			label.Yalign = yalign;
-			
-			return label;
-		}
-
-		private Label CreateLeftAlignedLabel (string text)
-		{
-			Label label = new Label ();
-			label.UseMarkup = true;
-			label.Markup = text;
-			label.Xalign = 0.0f;
-			label.Yalign = 0.0f;
-			label.Selectable = true;
-			label.Ellipsize = Pango.EllipsizeMode.End;
-			
-			return label;
-		}
-
-		private Table info_table;
-
-		private void AttachRow (int row, InfoEntry entry)
-		{
-			if (!entry.TwoColumns) {
-				info_table.Attach (entry.LabelWidget, 0, 1, (uint)row, (uint)row + 1, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-			}
-			
-			info_table.Attach (entry.InfoWidget, entry.TwoColumns ? 0u : 1u, 2, (uint)row, (uint)row + 1, AttachOptions.Expand | AttachOptions.Fill, AttachOptions.Expand | AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-			
-			var info_label = entry.InfoWidget as Label;
-			if (info_label != null)
-				info_label.PopulatePopup += HandlePopulatePopup;
-			
-			var info_entry = entry.InfoWidget as Entry;
-			if (info_entry != null)
-				info_entry.PopulatePopup += HandlePopulatePopup;
-			;
-		}
-
-		private void UpdateTable ()
-		{
-			info_table.Resize ((uint)(head_rows + entries.Count), 2);
-			int i = 0;
-			foreach (var entry in entries) {
-				AttachRow (head_rows + i, entry);
-				i++;
-			}
-		}
-
-
-		private void SetEntryWidgetVisibility (InfoEntry entry, bool def)
-		{
-			entry.InfoWidget.Visible = ContextSwitchStrategy.InfoEntryVisible (Context, entry) && def;
-			entry.LabelWidget.Visible = ContextSwitchStrategy.InfoEntryVisible (Context, entry) && def;
-			
-		}
-
-		private void UpdateEntries ()
-		{
-			// FIXME: Pretty sure this does nothing :)
-			// not to mention its never called
-		}
-
-		const int TABLE_XPADDING = 3;
-		const int TABLE_YPADDING = 3;
-		private Label AttachLabel (Table table, int row_num, Widget entry)
-		{
-			Label label = new Label (String.Empty);
-			label.Xalign = 0;
-			label.Selectable = true;
-			label.Ellipsize = Pango.EllipsizeMode.End;
-			label.Show ();
-			
-			label.PopulatePopup += HandlePopulatePopup;
-			
-			table.Attach (label, 1, 2, (uint)row_num, (uint)row_num + 1, AttachOptions.Expand | AttachOptions.Fill, AttachOptions.Expand | AttachOptions.Fill, (uint)entry.Style.XThickness + TABLE_XPADDING, (uint)entry.Style.YThickness);
-			
-			return label;
-		}
-
-		private const int head_rows = 0;
-
-		private void SetupWidgets ()
-		{
-			
-			histogram_expander = new Expander (Catalog.GetString ("Histogram"));
-			histogram_expander.Activated += delegate(object sender, EventArgs e) {
-				ContextSwitchStrategy.SetHistogramVisible (Context, histogram_expander.Expanded);
-				UpdateHistogram ();
-			};
-			histogram_expander.StyleSet += delegate(object sender, StyleSetArgs args) {
-				Gdk.Color c = this.Toplevel.Style.Backgrounds[(int)Gtk.StateType.Active];
-				histogram.RedColorHint = (byte)(c.Red / 0xff);
-				histogram.GreenColorHint = (byte)(c.Green / 0xff);
-				histogram.BlueColorHint = (byte)(c.Blue / 0xff);
-				histogram.BackgroundColorHint = 0xff;
-				UpdateHistogram ();
-			};
-			histogram_image = new Gtk.Image ();
-			histogram = new Histogram ();
-			histogram_expander.Add (histogram_image);
-			
-			Add (histogram_expander);
-			
-			info_expander = new Expander (Catalog.GetString ("Image Information"));
-			info_expander.Activated += (sender, e) => ContextSwitchStrategy.SetInfoBoxVisible (Context, info_expander.Expanded);
-
-			info_table = new Table (head_rows, 2, false) { BorderWidth = 0 };
-			
-			AddLabelEntry (null, null, null, null,
-						   photos => String.Format (Catalog.GetString ("{0} Photos"), photos.Length));
-			
-			AddLabelEntry (null, Catalog.GetString ("Name"), null,
-						   (photo, file) => photo.Name ?? String.Empty, null);
-			
-			version_list = new ListStore (typeof(IPhotoVersion), typeof(string), typeof(bool));
-			version_combo = new ComboBox ();
-			CellRendererText version_name_cell = new CellRendererText ();
-			version_name_cell.Ellipsize = Pango.EllipsizeMode.End;
-			version_combo.PackStart (version_name_cell, true);
-			version_combo.SetCellDataFunc (version_name_cell, new CellLayoutDataFunc (VersionNameCellFunc));
-			version_combo.Model = version_list;
-			version_combo.Changed += OnVersionComboChanged;
-			
-			AddEntry (null, Catalog.GetString ("Version"), null, version_combo, 0.5f,
-					  (widget, photo, file) => {
-							version_list.Clear ();
-							version_combo.Changed -= OnVersionComboChanged;
-			
-							int count = 0;
-							foreach (IPhotoVersion version in photo.Versions) {
-								version_list.AppendValues (version, version.Name, true);
-								if (version == photo.DefaultVersion)
-									version_combo.Active = count;
-								count++;
-							}
-			
-							if (count <= 1) {
-								version_combo.Sensitive = false;
-								version_combo.TooltipText = Catalog.GetString ("(No Edits)");
-							} else {
-								version_combo.Sensitive = true;
-								version_combo.TooltipText =
-									String.Format (Catalog.GetPluralString ("(One Edit)", "({0} Edits)", count - 1),
-												   count - 1);
-							}
-							version_combo.Changed += OnVersionComboChanged;
-					   }, null);
-			
-			AddLabelEntry ("date", Catalog.GetString ("Date"), Catalog.GetString ("Show Date"),
-						   (photo, file) => {
-							   return String.Format ("{0}{2}{1}",
-													 photo.Time.ToShortDateString (),
-													 photo.Time.ToShortTimeString (),
-													 Environment.NewLine); },
-						   photos => {
-								IPhoto first = photos[photos.Length - 1];
-								IPhoto last = photos[0];
-								if (first.Time.Date == last.Time.Date) {
-									//Note for translators: {0} is a date, {1} and {2} are times.
-									return String.Format (Catalog.GetString ("On {0} between \n{1} and {2}"),
-														  first.Time.ToShortDateString (),
-														  first.Time.ToShortTimeString (),
-														  last.Time.ToShortTimeString ());
-								}
-						        return String.Format (Catalog.GetString ("Between {0} \nand {1}"),
-						             	                first.Time.ToShortDateString (),
-						             	                last.Time.ToShortDateString ());
-						   });
-
-			AddLabelEntry ("size", Catalog.GetString ("Size"), Catalog.GetString ("Show Size"),
-						   (photo, metadata) => {
+    public class InfoBox : VBox
+    {
+        DelayedOperation update_delay;
+
+        public struct InfoEntry
+        {
+            public bool TwoColumns;
+            public bool AlwaysVisible;
+            public bool DefaultVisibility;
+            public string Id;
+            public string Description;
+            public Widget LabelWidget;
+            public Widget InfoWidget;
+            public Action<Widget, IPhoto, TagLib.Image.File> SetSingle;
+            public Action<Widget, IPhoto[]> SetMultiple;
+        }
+
+        private List<InfoEntry> entries = new List<InfoEntry> ();
+
+        private void AddEntry (string id, string name, string description, Widget info_widget, float label_y_align,
+                               bool default_visibility,
+                               Action<Widget, IPhoto, TagLib.Image.File> set_single,
+                               Action<Widget, IPhoto[]> set_multiple)
+        {
+            entries.Add (new InfoEntry {
+                TwoColumns = (name == null),
+                AlwaysVisible = (id == null) || (description == null),
+                DefaultVisibility = default_visibility,
+                Id = id,
+                Description = description,
+                LabelWidget = CreateRightAlignedLabel (String.Format ("<b>{0}</b>", name), label_y_align),
+                InfoWidget = info_widget,
+                SetSingle = set_single,
+                SetMultiple = set_multiple
+            });
+        }
+
+        private void AddEntry (string id, string name, string description, Widget info_widget, float label_y_align,
+                               Action<Widget, IPhoto, TagLib.Image.File> set_single,
+                               Action<Widget, IPhoto[]> set_multiple)
+        {
+            AddEntry (id, name, description, info_widget, label_y_align, true, set_single, set_multiple);
+        }
+
+        private void AddEntry (string id, string name, string description, Widget info_widget, bool default_visibility,
+                               Action<Widget, IPhoto, TagLib.Image.File> set_single,
+                               Action<Widget, IPhoto[]> set_multiple)
+        {
+            AddEntry (id, name, description, info_widget, 0.0f, default_visibility, set_single, set_multiple);
+        }
+
+        private void AddEntry (string id, string name, string description, Widget info_widget,
+                               Action<Widget, IPhoto, TagLib.Image.File> set_single,
+                               Action<Widget, IPhoto[]> set_multiple)
+        {
+            AddEntry (id, name, description, info_widget, 0.0f, set_single, set_multiple);
+        }
+
+        private void AddLabelEntry (string id, string name, string description,
+                                    Func<IPhoto, TagLib.Image.File, string> single_string,
+                                    Func<IPhoto[], string> multiple_string)
+        {
+            AddLabelEntry (id, name, description, true, single_string, multiple_string);
+        }
+
+        private void AddLabelEntry (string id, string name, string description, bool default_visibility,
+                                    Func<IPhoto, TagLib.Image.File, string> single_string,
+                                    Func<IPhoto[], string> multiple_string)
+        {
+            Action<Widget, IPhoto, TagLib.Image.File> set_single = (widget, photo, metadata) => {
+                if (metadata != null)
+                    (widget as Label).Text = single_string (photo, metadata);
+                else
+                    (widget as Label).Text = Catalog.GetString ("(Unknown)");
+            };
+            
+            Action<Widget, IPhoto[]> set_multiple = (widget, photos) => {
+                (widget as Label).Text = multiple_string (photos);
+            };
+            
+            AddEntry (id, name, description, CreateLeftAlignedLabel (String.Empty), default_visibility,
+                      single_string == null ? null : set_single,
+                      multiple_string == null ? null : set_multiple);
+        }
+
+
+        private IPhoto[] photos = new IPhoto[0];
+        public IPhoto[] Photos {
+            private get { return photos; }
+            set {
+                photos = value;
+                update_delay.Start ();
+            }
+        }
+
+        public IPhoto Photo {
+            set {
+                if (value != null) {
+                    Photos = new IPhoto[] { value };
+                }
+            }
+        }
+
+        private bool show_tags = false;
+        public bool ShowTags {
+            get { return show_tags; }
+            set {
+                if (show_tags == value)
+                    return;
+                
+                show_tags = value;
+                //      tag_view.Visible = show_tags;
+            }
+        }
+
+        private bool show_rating = false;
+        public bool ShowRating {
+            get { return show_rating; }
+            set {
+                if (show_rating == value)
+                    return;
+                
+                show_rating = value;
+                //      rating_label.Visible = show_rating;
+                //      rating_view.Visible = show_rating;
+            }
+        }
+
+        public delegate void VersionChangedHandler (InfoBox info_box, IPhotoVersion version);
+        public event VersionChangedHandler VersionChanged;
+
+        private Expander info_expander;
+        private Expander histogram_expander;
+
+        private Gtk.Image histogram_image;
+        private Histogram histogram;
+
+        private DelayedOperation histogram_delay;
+
+        // Context switching (toggles visibility).
+        public event EventHandler ContextChanged;
+
+        private ViewContext view_context = ViewContext.Unknown;
+        public ViewContext Context {
+            get { return view_context; }
+            set {
+                view_context = value;
+                if (ContextChanged != null)
+                    ContextChanged (this, null);
+            }
+        }
+
+        private readonly InfoBoxContextSwitchStrategy ContextSwitchStrategy;
+
+        // Widgetry.
+        private ListStore version_list;
+        private ComboBox version_combo;
+
+
+        private void HandleRatingChanged (object o, EventArgs e)
+        {
+            App.Instance.Organizer.HandleRatingMenuSelected ((o as Widgets.RatingEntry).Value);
+        }
+
+        private Label CreateRightAlignedLabel (string text, float yalign)
+        {
+            Label label = new Label ();
+            label.UseMarkup = true;
+            label.Markup = text;
+            label.Xalign = 1.0f;
+            label.Yalign = yalign;
+            
+            return label;
+        }
+
+        private Label CreateLeftAlignedLabel (string text)
+        {
+            Label label = new Label ();
+            label.UseMarkup = true;
+            label.Markup = text;
+            label.Xalign = 0.0f;
+            label.Yalign = 0.0f;
+            label.Selectable = true;
+            label.Ellipsize = Pango.EllipsizeMode.End;
+            
+            return label;
+        }
+
+        private Table info_table;
+
+        private void AttachRow (int row, InfoEntry entry)
+        {
+            if (!entry.TwoColumns) {
+                info_table.Attach (entry.LabelWidget, 0, 1, (uint)row, (uint)row + 1, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+            }
+            
+            info_table.Attach (entry.InfoWidget, entry.TwoColumns ? 0u : 1u, 2, (uint)row, (uint)row + 1, AttachOptions.Expand | AttachOptions.Fill, AttachOptions.Expand | AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+            
+            var info_label = entry.InfoWidget as Label;
+            if (info_label != null)
+                info_label.PopulatePopup += HandlePopulatePopup;
+            
+            var info_entry = entry.InfoWidget as Entry;
+            if (info_entry != null)
+                info_entry.PopulatePopup += HandlePopulatePopup;
+            ;
+        }
+
+        private void UpdateTable ()
+        {
+            info_table.Resize ((uint)(head_rows + entries.Count), 2);
+            int i = 0;
+            foreach (var entry in entries) {
+                AttachRow (head_rows + i, entry);
+                i++;
+            }
+        }
+
+
+        private void SetEntryWidgetVisibility (InfoEntry entry, bool def)
+        {
+            entry.InfoWidget.Visible = ContextSwitchStrategy.InfoEntryVisible (Context, entry) && def;
+            entry.LabelWidget.Visible = ContextSwitchStrategy.InfoEntryVisible (Context, entry) && def;
+            
+        }
+
+        private void UpdateEntries ()
+        {
+            
+        }
+
+        const int TABLE_XPADDING = 3;
+        const int TABLE_YPADDING = 3;
+        private Label AttachLabel (Table table, int row_num, Widget entry)
+        {
+            Label label = new Label (String.Empty);
+            label.Xalign = 0;
+            label.Selectable = true;
+            label.Ellipsize = Pango.EllipsizeMode.End;
+            label.Show ();
+            
+            label.PopulatePopup += HandlePopulatePopup;
+            
+            table.Attach (label, 1, 2, (uint)row_num, (uint)row_num + 1, AttachOptions.Expand | AttachOptions.Fill, AttachOptions.Expand | AttachOptions.Fill, (uint)entry.Style.XThickness + TABLE_XPADDING, (uint)entry.Style.YThickness);
+            
+            return label;
+        }
+
+        private const int head_rows = 0;
+
+        private void SetupWidgets ()
+        {
+            
+            histogram_expander = new Expander (Catalog.GetString ("Histogram"));
+            histogram_expander.Activated += delegate(object sender, EventArgs e) {
+                ContextSwitchStrategy.SetHistogramVisible (Context, histogram_expander.Expanded);
+                UpdateHistogram ();
+            };
+            histogram_expander.StyleSet += delegate(object sender, StyleSetArgs args) {
+                Gdk.Color c = this.Toplevel.Style.Backgrounds[(int)Gtk.StateType.Active];
+                histogram.RedColorHint = (byte)(c.Red / 0xff);
+                histogram.GreenColorHint = (byte)(c.Green / 0xff);
+                histogram.BlueColorHint = (byte)(c.Blue / 0xff);
+                histogram.BackgroundColorHint = 0xff;
+                UpdateHistogram ();
+            };
+            histogram_image = new Gtk.Image ();
+            histogram = new Histogram ();
+            histogram_expander.Add (histogram_image);
+            
+            Add (histogram_expander);
+            
+            info_expander = new Expander (Catalog.GetString ("Image Information"));
+            info_expander.Activated += (sender, e) => {
+                ContextSwitchStrategy.SetInfoBoxVisible (Context, info_expander.Expanded);
+            };
+
+            info_table = new Table (head_rows, 2, false) { BorderWidth = 0 };
+            
+            AddLabelEntry (null, null, null, null,
+                           photos => { return String.Format (Catalog.GetString ("{0} Photos"), photos.Length); });
+            
+            AddLabelEntry (null, Catalog.GetString ("Name"), null,
+                           (photo, file) => { return photo.Name ?? String.Empty; }, null);
+            
+            version_list = new ListStore (typeof(IPhotoVersion), typeof(string), typeof(bool));
+            version_combo = new ComboBox ();
+            CellRendererText version_name_cell = new CellRendererText ();
+            version_name_cell.Ellipsize = Pango.EllipsizeMode.End;
+            version_combo.PackStart (version_name_cell, true);
+            version_combo.SetCellDataFunc (version_name_cell, new CellLayoutDataFunc (VersionNameCellFunc));
+            version_combo.Model = version_list;
+            version_combo.Changed += OnVersionComboChanged;
+            
+            AddEntry (null, Catalog.GetString ("Version"), null, version_combo, 0.5f,
+                      (widget, photo, file) => {
+                            version_list.Clear ();
+                            version_combo.Changed -= OnVersionComboChanged;
+            
+                            int count = 0;
+                            foreach (IPhotoVersion version in photo.Versions) {
+                                version_list.AppendValues (version, version.Name, true);
+                                if (version == photo.DefaultVersion)
+                                    version_combo.Active = count;
+                                count++;
+                            }
+            
+                            if (count <= 1) {
+                                version_combo.Sensitive = false;
+                                version_combo.TooltipText = Catalog.GetString ("(No Edits)");
+                            } else {
+                                version_combo.Sensitive = true;
+                                version_combo.TooltipText =
+                                    String.Format (Catalog.GetPluralString ("(One Edit)", "({0} Edits)", count - 1),
+                                                   count - 1);
+                            }
+                            version_combo.Changed += OnVersionComboChanged;
+                       }, null);
+            
+            AddLabelEntry ("date", Catalog.GetString ("Date"), Catalog.GetString ("Show Date"),
+                           (photo, file) => {
+                               return String.Format ("{0}{2}{1}",
+                                                     photo.Time.ToShortDateString (),
+                                                     photo.Time.ToShortTimeString (),
+                                                     Environment.NewLine); },
+                           photos => {
+                                IPhoto first = photos[photos.Length - 1];
+                                IPhoto last = photos[0];
+                                if (first.Time.Date == last.Time.Date) {
+                                    //Note for translators: {0} is a date, {1} and {2} are times.
+                                    return String.Format (Catalog.GetString ("On {0} between \n{1} and {2}"),
+                                                          first.Time.ToShortDateString (),
+                                                          first.Time.ToShortTimeString (),
+                                                          last.Time.ToShortTimeString ());
+                                } else {
+                                    return String.Format (Catalog.GetString ("Between {0} \nand {1}"),
+                                                          first.Time.ToShortDateString (),
+                                                          last.Time.ToShortDateString ());
+                                }
+                           });
+
+            AddLabelEntry ("size", Catalog.GetString ("Size"), Catalog.GetString ("Show Size"),
+                           (photo, metadata) => {
 				int width = 0;
 				int height = 0;
 				if (null != metadata.Properties) {
-								 width = metadata.Properties.PhotoWidth;
-								 height = metadata.Properties.PhotoHeight;
+   	                             width = metadata.Properties.PhotoWidth;
+   	                             height = metadata.Properties.PhotoHeight;
 				}
 
-								if (width != 0 && height != 0)
-									return String.Format ("{0}x{1}", width, height);
-								return Catalog.GetString ("(Unknown)");
-						   }, null);
-
-			AddLabelEntry ("exposure", Catalog.GetString ("Exposure"), Catalog.GetString ("Show Exposure"),
-						   (photo, metadata) => {
-								var fnumber = metadata.ImageTag.FNumber;
-								var exposure_time = metadata.ImageTag.ExposureTime;
-								var iso_speed = metadata.ImageTag.ISOSpeedRatings;
-
-								string info = String.Empty;
-
-								if (fnumber.HasValue && fnumber.Value != 0.0) {
-									info += String.Format ("f/{0:.0} ", fnumber.Value);
-								}
-
-								if (exposure_time.HasValue) {
-									if (Math.Abs (exposure_time.Value) >= 1.0) {
-										info += String.Format ("{0} sec ", exposure_time.Value);
-									} else {
-										info += String.Format ("1/{0} sec ", (int)(1 / exposure_time.Value));
-									}
-								}
-
-								if (iso_speed.HasValue) {
-									info += String.Format ("{0}ISO {1}", Environment.NewLine, iso_speed.Value);
-								}
-
-								var exif = metadata.ImageTag.Exif;
-								if (exif != null) {
-									var flash = exif.ExifIFD.GetLongValue (0, (ushort)TagLib.IFD.Tags.ExifEntryTag.Flash);
-
-									if (flash.HasValue) {
-										if ((flash.Value & 0x01) == 0x01)
-											info += String.Format (", {0}", Catalog.GetString ("flash fired"));
-										else
-											info += String.Format (", {0}", Catalog.GetString ("flash didn't fire"));
-									}
-								}
-
-								if (info == String.Empty)
-									return Catalog.GetString ("(None)");
-
-								return info;
-						   }, null);
-			
-			AddLabelEntry ("focal_length", Catalog.GetString ("Focal Length"), Catalog.GetString ("Show Focal Length"),
-						   false, (photo, metadata) => {
-								var focal_length = metadata.ImageTag.FocalLength;
-				
-								if (focal_length == null)
-									return Catalog.GetString ("(Unknown)");
-								return String.Format ("{0} mm", focal_length.Value);
-						   }, null);
-
-			AddLabelEntry ("camera", Catalog.GetString ("Camera"), Catalog.GetString ("Show Camera"), false,
-						   (photo, metadata) => metadata.ImageTag.Model ?? Catalog.GetString ("(Unknown)"),
-						   null);
-			
-			AddLabelEntry ("creator", Catalog.GetString ("Creator"), Catalog.GetString ("Show Creator"),
-						   (photo, metadata) => metadata.ImageTag.Creator ?? Catalog.GetString ("(Unknown)"),
-						   null);
-
-			AddLabelEntry ("file_size", Catalog.GetString ("File Size"), Catalog.GetString ("Show File Size"), false,
-						   (photo, metadata) => {
-								try {
-									GFile file = FileFactory.NewForUri (photo.DefaultVersion.Uri);
-									GFileInfo file_info = file.QueryInfo ("standard::size", FileQueryInfoFlags.None, null);
-									return Format.SizeForDisplay (file_info.Size);
-								} catch (GLib.GException e) {
-									Hyena.Log.DebugException (e);
-									return Catalog.GetString ("(File read error)");
-								}
-							}, null);
-			
-			var rating_entry = new RatingEntry { HasFrame = false, AlwaysShowEmptyStars = true };
-			rating_entry.Changed += HandleRatingChanged;
-			var rating_align = new Gtk.Alignment (0, 0, 0, 0);
-			rating_align.Add (rating_entry);
-			AddEntry ("rating", Catalog.GetString ("Rating"), Catalog.GetString ("Show Rating"), rating_align, false,
-					  (widget, photo, metadata) => { ((widget as Alignment).Child as RatingEntry).Value = (int) photo.Rating; },
-					  null);
-			
-			AddEntry ("tag", null, Catalog.GetString ("Show Tags"), new TagView (), false,
-					  (widget, photo, metadata) => { (widget as TagView).Current = photo; }, null);
-
-			UpdateTable ();
-
-			EventBox eb = new EventBox ();
-			eb.Add (info_table);
-			info_expander.Add (eb);
-			eb.ButtonPressEvent += HandleButtonPressEvent;
-
-			Add (info_expander);
-		}
-
-		public bool Update ()
-		{
-			if (Photos == null || Photos.Length == 0) {
-				Hide ();
-			} else if (Photos.Length == 1) {
-				var photo = Photos[0];
-
-				histogram_expander.Visible = true;
-				UpdateHistogram();
-
-				using (var metadata = Metadata.Parse (photo.DefaultVersion.Uri)) {
-					foreach (var entry in entries) {
-						bool is_single = (entry.SetSingle != null);
-						
-						if (is_single)
-							entry.SetSingle (entry.InfoWidget, photo, metadata);
-
-						SetEntryWidgetVisibility (entry, is_single);
-					}
-				}
-				Show ();
-			} else if (Photos.Length > 1) {
-				foreach (var entry in entries) {
-					bool is_multiple = (entry.SetMultiple != null);
-					
-					if (is_multiple)
-						entry.SetMultiple (entry.InfoWidget, Photos);
-					
-					SetEntryWidgetVisibility (entry, is_multiple);
-				}
-				histogram_expander.Visible = false;
-				Show ();
-			}
-			return false;
-		}
-
-		void VersionNameCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
-		{
-			string name = (string)tree_model.GetValue (iter, 1);
-			(cell as CellRendererText).Text = name;
-			
-			cell.Sensitive = (bool)tree_model.GetValue (iter, 2);
-		}
-
-		void OnVersionComboChanged (object o, EventArgs e)
-		{
-			ComboBox combo = o as ComboBox;
-			if (combo == null)
-				return;
-			
-			TreeIter iter;
-			
-			if (combo.GetActiveIter (out iter))
-				VersionChanged (this, (IPhotoVersion)version_list.GetValue (iter, 0));
-		}
-
-		private Gdk.Pixbuf histogram_hint;
-
-		private void UpdateHistogram ()
-		{
-			if (histogram_expander.Expanded)
-				histogram_delay.Start ();
-		}
-
-		public void UpdateHistogram (Gdk.Pixbuf pixbuf)
-		{
-			histogram_hint = pixbuf;
-			UpdateHistogram ();
-		}
-
-		private bool DelayedUpdateHistogram ()
-		{
-			if (Photos.Length == 0)
-				return false;
-
-			IPhoto photo = Photos[0];
-			
-			Gdk.Pixbuf hint = histogram_hint;
-			histogram_hint = null;
-			int max = histogram_expander.Allocation.Width;
-			
-			try {
-				if (hint == null)
-					using (var img = ImageFile.Create (photo.DefaultVersion.Uri)) {
-						hint = img.Load (256, 256);
-					}
-				
-				histogram_image.Pixbuf = histogram.Generate (hint, max);
-				
-				hint.Dispose ();
-			} catch (System.Exception e) {
-				Hyena.Log.Debug (e.StackTrace);
-				using (Gdk.Pixbuf empty = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, 256, 256)) {
-					empty.Fill (0x0);
-					histogram_image.Pixbuf = histogram.Generate (empty, max);
-				}
-			}
-			
-			return false;
-		}
-
-		// Context switching
-
-		private void HandleContextChanged (object sender, EventArgs args)
-		{
-			bool infobox_visible = ContextSwitchStrategy.InfoBoxVisible (Context);
-			info_expander.Expanded = infobox_visible;
-			
-			bool histogram_visible = ContextSwitchStrategy.HistogramVisible (Context);
-			histogram_expander.Expanded = histogram_visible;
-			
-			if (infobox_visible)
-				update_delay.Start ();
-		}
-
-		public void HandleMainWindowViewModeChanged (object o, EventArgs args)
-		{
-			MainWindow.ModeType mode = App.Instance.Organizer.ViewMode;
-			if (mode == MainWindow.ModeType.IconView)
-				Context = ViewContext.Library; else if (mode == MainWindow.ModeType.PhotoView) {
-				Context = ViewContext.Edit;
-			}
-		}
-
-		void HandleButtonPressEvent (object sender, ButtonPressEventArgs args)
-		{
-			if (args.Event.Button == 3) {
-				Menu popup_menu = new Menu ();
-				
-				AddMenuItems (popup_menu);
-				
-				if (args.Event != null)
-					popup_menu.Popup (null, null, null, args.Event.Button, args.Event.Time);
-				else
-					popup_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
-				
-				args.RetVal = true;
-			}
-		}
-
-		void HandlePopulatePopup (object sender, PopulatePopupArgs args)
-		{
-			AddMenuItems (args.Menu);
-			
-			args.RetVal = true;
-		}
-
-		private void AddMenuItems (Menu popup_menu)
-		{
-			var items = new Dictionary <MenuItem, InfoEntry> ();
-
-			if (popup_menu.Children.Length > 0 && entries.Count > 0) {
-				GtkUtil.MakeMenuSeparator (popup_menu);
-			}
-			
-			foreach (var entry in entries) {
-				if (entry.AlwaysVisible)
-					continue;
-
-				var item =
-					GtkUtil.MakeCheckMenuItem (popup_menu, entry.Description, (sender, args) => {
-						ContextSwitchStrategy.SetInfoEntryVisible (Context, items [sender as CheckMenuItem], (sender as CheckMenuItem).Active);
-						Update ();
-					},
-					true, ContextSwitchStrategy.InfoEntryVisible (Context, entry), false);
-
-				items.Add (item, entry);
-			}
-		}
-
-		private void HandleMenuItemSelected (object sender, EventArgs args)
-		{
-			// FIXME: No ones home??? (never called either)
-		}
+                                if (width != 0 && height != 0)
+                                    return String.Format ("{0}x{1}", width, height);
+                                else
+                                    return Catalog.GetString ("(Unknown)");
+                           }, null);
+
+            AddLabelEntry ("exposure", Catalog.GetString ("Exposure"), Catalog.GetString ("Show Exposure"),
+                           (photo, metadata) => {
+                                var fnumber = metadata.ImageTag.FNumber;
+                                var exposure_time = metadata.ImageTag.ExposureTime;
+                                var iso_speed = metadata.ImageTag.ISOSpeedRatings;
+
+                                string info = String.Empty;
+
+                                if (fnumber.HasValue && fnumber.Value != 0.0) {
+                                    info += String.Format ("f/{0:.0} ", fnumber.Value);
+                                }
+
+                                if (exposure_time.HasValue) {
+                                    if (Math.Abs (exposure_time.Value) >= 1.0) {
+                                        info += String.Format ("{0} sec ", exposure_time.Value);
+                                    } else {
+                                        info += String.Format ("1/{0} sec ", (int)(1 / exposure_time.Value));
+                                    }
+                                }
+
+                                if (iso_speed.HasValue) {
+                                    info += String.Format ("{0}ISO {1}", Environment.NewLine, iso_speed.Value);
+                                }
+
+                                var exif = metadata.ImageTag.Exif;
+                                if (exif != null) {
+                                    var flash = exif.ExifIFD.GetLongValue (0, (ushort)TagLib.IFD.Tags.ExifEntryTag.Flash);
+
+                                    if (flash.HasValue) {
+                                        if ((flash.Value & 0x01) == 0x01)
+                                            info += String.Format (", {0}", Catalog.GetString ("flash fired"));
+                                        else
+                                            info += String.Format (", {0}", Catalog.GetString ("flash didn't fire"));
+                                    }
+                                }
+
+                                if (info == String.Empty)
+                                    return Catalog.GetString ("(None)");
+
+                                return info;
+                           }, null);
+            
+            AddLabelEntry ("focal_length", Catalog.GetString ("Focal Length"), Catalog.GetString ("Show Focal Length"),
+                           false, (photo, metadata) => {
+                                var focal_length = metadata.ImageTag.FocalLength;
+                
+                                if (focal_length == null)
+                                    return Catalog.GetString ("(Unknown)");
+                                else
+                                    return String.Format ("{0} mm", focal_length.Value);
+                            }, null);
+
+            AddLabelEntry ("camera", Catalog.GetString ("Camera"), Catalog.GetString ("Show Camera"), false,
+                           (photo, metadata) => { return metadata.ImageTag.Model ?? Catalog.GetString ("(Unknown)"); },
+                           null);
+            
+            AddLabelEntry ("creator", Catalog.GetString ("Creator"), Catalog.GetString ("Show Creator"),
+                           (photo, metadata) => { return metadata.ImageTag.Creator ?? Catalog.GetString ("(Unknown)"); },
+                           null);
+
+            AddLabelEntry ("file_size", Catalog.GetString ("File Size"), Catalog.GetString ("Show File Size"), false,
+                           (photo, metadata) => {
+                                try {
+                                    GFile file = FileFactory.NewForUri (photo.DefaultVersion.Uri);
+                                    GFileInfo file_info = file.QueryInfo ("standard::size", FileQueryInfoFlags.None, null);
+                                    return Format.SizeForDisplay (file_info.Size);
+                                } catch (GLib.GException e) {
+                                    Hyena.Log.DebugException (e);
+                                    return Catalog.GetString ("(File read error)");
+                                }
+                            }, null);
+            
+            var rating_entry = new RatingEntry { HasFrame = false, AlwaysShowEmptyStars = true };
+            rating_entry.Changed += HandleRatingChanged;
+            var rating_align = new Gtk.Alignment (0, 0, 0, 0);
+            rating_align.Add (rating_entry);
+            AddEntry ("rating", Catalog.GetString ("Rating"), Catalog.GetString ("Show Rating"), rating_align, false,
+                      (widget, photo, metadata) => { ((widget as Alignment).Child as RatingEntry).Value = (int) photo.Rating; },
+                      null);
+            
+            AddEntry ("tag", null, Catalog.GetString ("Show Tags"), new TagView (), false,
+                      (widget, photo, metadata) => { (widget as TagView).Current = photo; }, null);
+
+            UpdateTable ();
+
+            EventBox eb = new EventBox ();
+            eb.Add (info_table);
+            info_expander.Add (eb);
+            eb.ButtonPressEvent += HandleButtonPressEvent;
+
+            Add (info_expander);
+        }
+
+        public bool Update ()
+        {
+            if (Photos == null || Photos.Length == 0) {
+                Hide ();
+            } else if (Photos.Length == 1) {
+                var photo = Photos[0];
+
+                histogram_expander.Visible = true;
+                UpdateHistogram();
+
+                using (var metadata = Metadata.Parse (photo.DefaultVersion.Uri)) {
+                    foreach (var entry in entries) {
+                        bool is_single = (entry.SetSingle != null);
+                        
+                        if (is_single)
+                            entry.SetSingle (entry.InfoWidget, photo, metadata);
+
+                        SetEntryWidgetVisibility (entry, is_single);
+                    }
+                }
+                Show ();
+            } else if (Photos.Length > 1) {
+                foreach (var entry in entries) {
+                    bool is_multiple = (entry.SetMultiple != null);
+                    
+                    if (is_multiple)
+                        entry.SetMultiple (entry.InfoWidget, Photos);
+                    
+                    SetEntryWidgetVisibility (entry, is_multiple);
+                }
+                histogram_expander.Visible = false;
+                Show ();
+            }
+            return false;
+        }
+
+        void VersionNameCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
+        {
+            string name = (string)tree_model.GetValue (iter, 1);
+            (cell as CellRendererText).Text = name;
+            
+            cell.Sensitive = (bool)tree_model.GetValue (iter, 2);
+        }
+
+        void OnVersionComboChanged (object o, EventArgs e)
+        {
+            ComboBox combo = o as ComboBox;
+            if (combo == null)
+                return;
+            
+            TreeIter iter;
+            
+            if (combo.GetActiveIter (out iter))
+                VersionChanged (this, (IPhotoVersion)version_list.GetValue (iter, 0));
+        }
+
+        private Gdk.Pixbuf histogram_hint;
+
+        private void UpdateHistogram ()
+        {
+            if (histogram_expander.Expanded)
+                histogram_delay.Start ();
+        }
+
+        public void UpdateHistogram (Gdk.Pixbuf pixbuf)
+        {
+            histogram_hint = pixbuf;
+            UpdateHistogram ();
+        }
+
+        private bool DelayedUpdateHistogram ()
+        {
+            if (Photos.Length == 0)
+                return false;
+
+            IPhoto photo = Photos[0];
+            
+            Gdk.Pixbuf hint = histogram_hint;
+            histogram_hint = null;
+            int max = histogram_expander.Allocation.Width;
+            
+            try {
+                if (hint == null)
+                    using (var img = ImageFile.Create (photo.DefaultVersion.Uri)) {
+                        hint = img.Load (256, 256);
+                    }
+                
+                histogram_image.Pixbuf = histogram.Generate (hint, max);
+                
+                hint.Dispose ();
+            } catch (System.Exception e) {
+                Hyena.Log.Debug (e.StackTrace);
+                using (Gdk.Pixbuf empty = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, 256, 256)) {
+                    empty.Fill (0x0);
+                    histogram_image.Pixbuf = histogram.Generate (empty, max);
+                }
+            }
+            
+            return false;
+        }
+
+        // Context switching
+
+        private void HandleContextChanged (object sender, EventArgs args)
+        {
+            bool infobox_visible = ContextSwitchStrategy.InfoBoxVisible (Context);
+            info_expander.Expanded = infobox_visible;
+            
+            bool histogram_visible = ContextSwitchStrategy.HistogramVisible (Context);
+            histogram_expander.Expanded = histogram_visible;
+            
+            if (infobox_visible)
+                update_delay.Start ();
+        }
+
+        public void HandleMainWindowViewModeChanged (object o, EventArgs args)
+        {
+            MainWindow.ModeType mode = App.Instance.Organizer.ViewMode;
+            if (mode == MainWindow.ModeType.IconView)
+                Context = ViewContext.Library; else if (mode == MainWindow.ModeType.PhotoView) {
+                Context = ViewContext.Edit;
+            }
+        }
+
+        void HandleButtonPressEvent (object sender, ButtonPressEventArgs args)
+        {
+            if (args.Event.Button == 3) {
+                Menu popup_menu = new Menu ();
+                
+                AddMenuItems (popup_menu);
+                
+                if (args.Event != null)
+                    popup_menu.Popup (null, null, null, args.Event.Button, args.Event.Time);
+                else
+                    popup_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
+                
+                args.RetVal = true;
+            }
+        }
+
+        void HandlePopulatePopup (object sender, PopulatePopupArgs args)
+        {
+            AddMenuItems (args.Menu);
+            
+            args.RetVal = true;
+        }
+
+        private void AddMenuItems (Menu popup_menu)
+        {
+            var items = new Dictionary <MenuItem, InfoEntry> ();
+
+            if (popup_menu.Children.Length > 0 && entries.Count > 0) {
+                GtkUtil.MakeMenuSeparator (popup_menu);
+            }
+            
+            foreach (var entry in entries) {
+                if (entry.AlwaysVisible)
+                    continue;
+
+                var item =
+                    GtkUtil.MakeCheckMenuItem (popup_menu, entry.Description, (sender, args) => {
+                        ContextSwitchStrategy.SetInfoEntryVisible (Context, items [sender as CheckMenuItem], (sender as CheckMenuItem).Active);
+                        Update ();
+                    },
+                    true, ContextSwitchStrategy.InfoEntryVisible (Context, entry), false);
+
+                items.Add (item, entry);
+            }
+        }
+
+        private void HandleMenuItemSelected (object sender, EventArgs args)
+        {
+
+        }
 
 		#region Constructor
-		public InfoBox () : base(false, 0)
-		{
-			ContextSwitchStrategy = new MRUInfoBoxContextSwitchStrategy ();
-			ContextChanged += HandleContextChanged;
-			
-			SetupWidgets ();
-			
-			update_delay = new DelayedOperation (Update);
-			update_delay.Start ();
-			
-			histogram_delay = new DelayedOperation (DelayedUpdateHistogram);
-			
-			BorderWidth = 2;
-			Hide ();
-		}
+        public InfoBox () : base(false, 0)
+        {
+            ContextSwitchStrategy = new MRUInfoBoxContextSwitchStrategy ();
+            ContextChanged += HandleContextChanged;
+            
+            SetupWidgets ();
+            
+            update_delay = new DelayedOperation (Update);
+            update_delay.Start ();
+            
+            histogram_delay = new DelayedOperation (DelayedUpdateHistogram);
+            
+            BorderWidth = 2;
+            Hide ();
+        }
 		#endregion
-	}
-
-	// Decides whether infobox / histogram should be shown for each context. Implemented
-	// using the Strategy pattern, to make it swappable easily, in case the
-	// default MRUInfoBoxContextSwitchStrategy is not sufficiently usable.
-	public abstract class InfoBoxContextSwitchStrategy
-	{
-		public abstract bool InfoBoxVisible (ViewContext context);
-		public abstract bool HistogramVisible (ViewContext context);
-
-		public abstract bool InfoEntryVisible (ViewContext context, InfoBox.InfoEntry entry);
-
-		public abstract void SetInfoBoxVisible (ViewContext context, bool visible);
-		public abstract void SetHistogramVisible (ViewContext context, bool visible);
-
-		public abstract void SetInfoEntryVisible (ViewContext context, InfoBox.InfoEntry entry, bool visible);
-	}
-
-	// Values are stored as strings, because bool is not nullable through Preferences.
-	public class MRUInfoBoxContextSwitchStrategy : InfoBoxContextSwitchStrategy
-	{
-		public const string PREF_PREFIX = Preferences.APP_FSPOT + "ui";
-
-		private string PrefKeyForContext (ViewContext context, string item)
-		{
-			return String.Format ("{0}/{1}_visible/{2}", PREF_PREFIX, item, context);
-		}
-
-		private string PrefKeyForContext (ViewContext context, string parent, string item)
-		{
-			return String.Format ("{0}/{1}_visible/{2}/{3}", PREF_PREFIX, parent, item, context);
-		}
-
-		private bool VisibilityForContext (ViewContext context, string item, bool default_value)
-		{
-			string visible = Preferences.Get<string> (PrefKeyForContext (context, item));
-			return visible == null ? default_value : visible == "1";
-		}
-
-		private bool VisibilityForContext (ViewContext context, string parent, string item, bool default_value)
-		{
-			string visible = Preferences.Get<string> (PrefKeyForContext (context, parent, item));
-			return visible == null ? default_value : visible == "1";
-		}
-
-		private void SetVisibilityForContext (ViewContext context, string item, bool visible)
-		{
-			Preferences.Set (PrefKeyForContext (context, item), visible ? "1" : "0");
-		}
-
-		private void SetVisibilityForContext (ViewContext context, string parent, string item, bool visible)
-		{
-			Preferences.Set (PrefKeyForContext (context, parent, item), visible ? "1" : "0");
-		}
-
-		public override bool InfoBoxVisible (ViewContext context)
-		{
-			return VisibilityForContext (context, "infobox", true);
-		}
-
-		public override bool HistogramVisible (ViewContext context)
-		{
-			return VisibilityForContext (context, "histogram", true);
-		}
-
-		public override bool InfoEntryVisible (ViewContext context, InfoBox.InfoEntry entry)
-		{
-			if (entry.AlwaysVisible)
-				return true;
-			
-			return VisibilityForContext (context, "infobox", entry.Id, true);
-		}
-
-		public override void SetInfoBoxVisible (ViewContext context, bool visible)
-		{
-			SetVisibilityForContext (context, "infobox", visible);
-		}
-
-		public override void SetHistogramVisible (ViewContext context, bool visible)
-		{
-			SetVisibilityForContext (context, "histogram", visible);
-		}
-
-		public override void SetInfoEntryVisible (ViewContext context, InfoBox.InfoEntry entry, bool visible)
-		{
-			Hyena.Log.DebugFormat ("Set Visibility for Entry {0} to {1}", entry.Id, visible);
-			if (entry.AlwaysVisible)
-				throw new Exception ("entry visibility cannot be set");
-			
-			SetVisibilityForContext (context, "infobox", entry.Id, visible);
-		}
-	}
+    }
+
+    // Decides whether infobox / histogram should be shown for each context. Implemented
+    // using the Strategy pattern, to make it swappable easily, in case the
+    // default MRUInfoBoxContextSwitchStrategy is not sufficiently usable.
+    public abstract class InfoBoxContextSwitchStrategy
+    {
+        public abstract bool InfoBoxVisible (ViewContext context);
+        public abstract bool HistogramVisible (ViewContext context);
+
+        public abstract bool InfoEntryVisible (ViewContext context, InfoBox.InfoEntry entry);
+
+        public abstract void SetInfoBoxVisible (ViewContext context, bool visible);
+        public abstract void SetHistogramVisible (ViewContext context, bool visible);
+
+        public abstract void SetInfoEntryVisible (ViewContext context, InfoBox.InfoEntry entry, bool visible);
+    }
+
+    // Values are stored as strings, because bool is not nullable through Preferences.
+    public class MRUInfoBoxContextSwitchStrategy : InfoBoxContextSwitchStrategy
+    {
+        public const string PREF_PREFIX = Preferences.APP_FSPOT + "ui";
+
+        private string PrefKeyForContext (ViewContext context, string item)
+        {
+            return String.Format ("{0}/{1}_visible/{2}", PREF_PREFIX, item, context);
+        }
+
+        private string PrefKeyForContext (ViewContext context, string parent, string item)
+        {
+            return String.Format ("{0}/{1}_visible/{2}/{3}", PREF_PREFIX, parent, item, context);
+        }
+
+        private bool VisibilityForContext (ViewContext context, string item, bool default_value)
+        {
+            string visible = Preferences.Get<string> (PrefKeyForContext (context, item));
+            if (visible == null)
+                return default_value;
+            else
+                return visible == "1";
+        }
+
+        private bool VisibilityForContext (ViewContext context, string parent, string item, bool default_value)
+        {
+            string visible = Preferences.Get<string> (PrefKeyForContext (context, parent, item));
+            if (visible == null)
+                return default_value;
+            else
+                return visible == "1";
+        }
+
+        private void SetVisibilityForContext (ViewContext context, string item, bool visible)
+        {
+            Preferences.Set (PrefKeyForContext (context, item), visible ? "1" : "0");
+        }
+
+        private void SetVisibilityForContext (ViewContext context, string parent, string item, bool visible)
+        {
+            Preferences.Set (PrefKeyForContext (context, parent, item), visible ? "1" : "0");
+        }
+
+        public override bool InfoBoxVisible (ViewContext context)
+        {
+            return VisibilityForContext (context, "infobox", true);
+        }
+
+        public override bool HistogramVisible (ViewContext context)
+        {
+            return VisibilityForContext (context, "histogram", true);
+        }
+
+        public override bool InfoEntryVisible (ViewContext context, InfoBox.InfoEntry entry)
+        {
+            if (entry.AlwaysVisible)
+                return true;
+            
+            return VisibilityForContext (context, "infobox", entry.Id, true);
+        }
+
+        public override void SetInfoBoxVisible (ViewContext context, bool visible)
+        {
+            SetVisibilityForContext (context, "infobox", visible);
+        }
+
+        public override void SetHistogramVisible (ViewContext context, bool visible)
+        {
+            SetVisibilityForContext (context, "histogram", visible);
+        }
+
+        public override void SetInfoEntryVisible (ViewContext context, InfoBox.InfoEntry entry, bool visible)
+        {
+            Hyena.Log.DebugFormat ("Set Visibility for Entry {0} to {1}", entry.Id, visible);
+            if (entry.AlwaysVisible)
+                throw new Exception ("entry visibility cannot be set");
+            
+            SetVisibilityForContext (context, "infobox", entry.Id, visible);
+        }
+    }
 }
diff --git a/src/Clients/MainApp/FSpot.Widgets/Loupe.cs b/src/Clients/MainApp/FSpot.Widgets/Loupe.cs
index f9cde2f..12bae67 100644
--- a/src/Clients/MainApp/FSpot.Widgets/Loupe.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/Loupe.cs
@@ -27,17 +27,16 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
 using Cairo;
 
+using Gtk;
+using Gdk;
+using System;
+using System.Runtime.InteropServices;
+using Mono.Unix;
 using FSpot.Core;
-using FSpot.Gui;
 using FSpot.Utils;
-
-using Gdk;
-using Gtk;
-
+using FSpot.Gui;
 using Hyena;
 
 namespace FSpot.Widgets {
@@ -233,7 +232,7 @@ namespace FSpot.Widgets {
 		}
 
 		Gdk.Point Center;
-		Requisition Bounds;
+	        Requisition Bounds;
 
 		public void Layout ()
 		{
@@ -300,15 +299,14 @@ namespace FSpot.Widgets {
 			g.Arc (0, 0, radius, 0, 2 * Math.PI);
 			g.Fill ();
 
-			if (overlay == null)
-				return;
-
-			CairoHelper.SetSourcePixbuf (g, overlay, -overlay.Width / 2, -overlay.Height / 2);
-			g.Arc (0, 0, radius, angle, angle + Math.PI);
-			g.ClosePath ();
-			g.FillPreserve ();
-			g.Source = new SolidPattern (new Cairo.Color (1.0, 1.0, 1.0, 1.0));
-			g.Stroke ();
+			if (overlay != null) {
+				CairoHelper.SetSourcePixbuf (g, overlay, -overlay.Width / 2, -overlay.Height / 2);
+				g.Arc (0, 0, radius, angle, angle + Math.PI);
+				g.ClosePath ();
+				g.FillPreserve ();
+				g.Source = new SolidPattern (new Cairo.Color (1.0, 1.0, 1.0, 1.0));
+				g.Stroke ();
+			}
 		}
 
 		protected override bool OnExposeEvent (Gdk.EventExpose args)
@@ -351,28 +349,28 @@ namespace FSpot.Widgets {
 
 			if (!rotate) {
 				return MoveWindow ();
-			}
+			} else {
+				Gdk.Point initial = start_root;
+				Gdk.Point hot = start_hot;
+				Gdk.Point win = Gdk.Point.Zero;
 
-			Gdk.Point initial = start_root;
-			Gdk.Point hot = start_hot;
-			Gdk.Point win = Gdk.Point.Zero;
+				hot.X += win.X;
+				hot.Y += win.Y;
 
-			hot.X += win.X;
-			hot.Y += win.Y;
+				initial.X -= hot.X;
+				initial.Y -= hot.Y;
+				Gdk.Point now = root_pos;
+				now.X -= hot.X;
+				now.Y -= hot.Y;
 
-			initial.X -= hot.X;
-			initial.Y -= hot.Y;
-			Gdk.Point now = root_pos;
-			now.X -= hot.X;
-			now.Y -= hot.Y;
+				Vector v1 = new Vector (initial);
+				Vector v2 = new Vector (now);
 
-			Vector v1 = new Vector (initial);
-			Vector v2 = new Vector (now);
+				double angle = Vector.AngleBetween (v1, v2);
 
-			double angle = Vector.AngleBetween (v1, v2);
-
-			Angle = start_angle + angle;
-			return false;
+				Angle = start_angle + angle;
+				return false;
+			}
 		}
 
 		private bool MoveWindow ()
@@ -450,7 +448,10 @@ namespace FSpot.Widgets {
 				App.Instance.Organizer.HideLoupe ();
 				args.RetVal = true;
 				break;
+			default:
+				break;
 			}
+			return;
 		}
 
 		protected override void OnDestroyed ()
diff --git a/src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs b/src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs
index b3cda8b..2201dbd 100644
--- a/src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs
@@ -28,16 +28,18 @@
 //
 
 using System;
+using System.IO;
+using System.Text;
 using System.Collections.Generic;
-
-using FSpot.Core;
-using FSpot.Extensions;
-using FSpot.Utils;
-
 using Gtk;
 
 using Mono.Unix;
 
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Extensions;
+using FSpot.Imaging;
+
 namespace FSpot.Widgets {
 	public class MetadataDisplayPage : SidebarPage {
 		public MetadataDisplayPage() : base(new MetadataDisplayWidget(),
@@ -65,7 +67,11 @@ namespace FSpot.Widgets {
 		Label metadata_message;
 		State display;
 
-		public MetadataDisplayPage Page { get; set; }
+		private MetadataDisplayPage page;
+		public MetadataDisplayPage Page {
+			set { page = value; }
+			get { return page; }
+		}
 
 		// stores list of the expanded expanders
 		List<string> open_list;
@@ -74,7 +80,7 @@ namespace FSpot.Widgets {
 
 		bool up_to_date = false;
 
-		new enum State {
+		enum State {
 			metadata,
 			message
 		};
@@ -152,7 +158,7 @@ namespace FSpot.Widgets {
 		}
 
 		internal void HandleSelectionChanged (IBrowsableCollection collection) {
-			// Don't show metadata when multiple photos are selected.
+            // Don't show metadata when multiple photos are selected.
 			Photo = (collection != null && collection.Count == 1) ? collection [0] : null;
 		}
 
@@ -162,16 +168,16 @@ namespace FSpot.Widgets {
 
 			if (!Visible) {
 				up_to_date = false;
-			} else {
+            } else {
 				update_delay.Start ();
-			}
+            }
 		}
 
-		private new bool Visible {
-			get {
-				return (Page.Sidebar as Sidebar).IsActive (Page);
-			}
-		}
+        private new bool Visible {
+            get {
+                return (Page.Sidebar as Sidebar).IsActive (Page);
+            }
+        }
 
 		private ListStore AddExpander (string name, int pos)
 		{
@@ -211,7 +217,7 @@ namespace FSpot.Widgets {
 
 		public void HandleExpanderActivated (object sender, EventArgs e)
 		{
-			Expander expander = sender as Expander;
+			Expander expander = (Expander) sender;
 			if (expander.Expanded)
 				open_list.Add (expander.Label);
 			else
@@ -226,8 +232,8 @@ namespace FSpot.Widgets {
 			System.Exception error = null;
 
 			/*
-			// FIXME: The stuff below needs to be ported to Taglib#.
-			TreeIter iter;
+            // FIXME: The stuff below needs to be ported to Taglib#.
+            TreeIter iter;
 			ListStore model;
 			string name;
 
@@ -368,15 +374,14 @@ namespace FSpot.Widgets {
 				}
 			}*/
 
-			// FIXME: Some of this will not work because of the variables declared about (unreachable code)
 			if (empty) {
 				string msg;
 				if (photo == null) {
-					 msg = Catalog.GetString ("No active photo");
+				     msg = Catalog.GetString ("No active photo");
 				} else if (missing) {
 					msg = String.Format (Catalog.GetString ("The photo \"{0}\" does not exist"), photo.DefaultVersion.Uri);
 				} else {
-					 msg = Catalog.GetString ("No metadata available");
+				     msg = Catalog.GetString ("No metadata available");
 
 					if (error != null) {
 						msg = String.Format ("<i>{0}</i>", error);
@@ -409,7 +414,7 @@ namespace FSpot.Widgets {
 			return false;
 		}
 
-		/*
+        /*
 		private void WriteCollection (MemoryStore substore, StringBuilder collection)
 		{
 			string type = null;
diff --git a/src/Clients/MainApp/FSpot.Widgets/PhotoImageView.cs b/src/Clients/MainApp/FSpot.Widgets/PhotoImageView.cs
index 8b21c45..eac9421 100644
--- a/src/Clients/MainApp/FSpot.Widgets/PhotoImageView.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/PhotoImageView.cs
@@ -32,13 +32,13 @@
 //
 
 using System;
-
 using FSpot.Core;
+using FSpot.Editors;
+using FSpot.Utils;
 using FSpot.Loaders;
 
-using Gdk;
-
 using Hyena;
+using Gdk;
 
 using TagLib.Image;
 
@@ -46,32 +46,32 @@ namespace FSpot.Widgets {
 	public class PhotoImageView : ImageView {
 #region public API
 
-		protected PhotoImageView (IntPtr raw) : base (raw)
-		{
-			ShowProgress = true;
-		}
+		protected PhotoImageView (IntPtr raw) : base (raw) { }
 
 		public PhotoImageView (IBrowsableCollection query) : this (new BrowsablePointer (query, -1))
 		{
 		}
 
-		public PhotoImageView (BrowsablePointer item)
+		public PhotoImageView (BrowsablePointer item) : base ()
 		{
-			ShowProgress = true;
 			Accelerometer.OrientationChanged += HandleOrientationChanged;
 			Preferences.SettingChanged += OnPreferencesChanged;
 
-			this.Item = item;
+			this.item = item;
 			item.Changed += HandlePhotoItemChanged;
 		}
 
-		public BrowsablePointer Item { get; protected set; }
+		public BrowsablePointer Item {
+			get { return item; }
+		}
 
 		public IBrowsableCollection Query {
-			get { return Item.Collection; }
+			get { return item.Collection; }
 		}
 
-		public Loupe Loupe { get; protected set; }
+		public Loupe Loupe {
+			get { return loupe; }
+		}
 
 		public Gdk.Pixbuf CompletePixbuf ()
 		{
@@ -256,7 +256,7 @@ namespace FSpot.Widgets {
 				// than try to load the image one last time.
 				try {
 					Log.Warning ("Falling back to file loader");
-					Pixbuf = PhotoLoader.Load (Item.Collection, Item.Index);
+					Pixbuf = PhotoLoader.Load (item.Collection, item.Index);
 				} catch (Exception e) {
 					LoadErrorImage (e);
 				}
@@ -272,13 +272,15 @@ namespace FSpot.Widgets {
 			else
 				ZoomFit ();
 
-			ShowProgress = true;
+			progressive_display = true;
 
 			if (prev != this.Pixbuf && prev != null)
 				prev.Dispose ();
 		}
 #endregion
 
+		protected BrowsablePointer item;
+		protected Loupe loupe;
 		protected Loupe sharpener;
 
 		void HandleOrientationChanged (object sender, EventArgs e)
@@ -286,7 +288,10 @@ namespace FSpot.Widgets {
 			Reload ();
 		}
 
-		private bool ShowProgress { get; set; }
+		bool progressive_display = true;
+		bool ShowProgress {
+			get { return progressive_display; }
+		}
 
 		void LoadErrorImage (System.Exception e)
 		{
@@ -310,7 +315,7 @@ namespace FSpot.Widgets {
 			if (args != null &&
 			    args.PreviousItem != null &&
 			    Item.IsValid &&
-			    (args.PreviousIndex != Item.Index) &&
+			    (args.PreviousIndex != item.Index) &&
 			    (this.Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri))
 				return;
 
@@ -327,7 +332,7 @@ namespace FSpot.Widgets {
 			    args.PreviousItem != null &&
 			    Item.IsValid &&
 			    Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri)
-				ShowProgress = false;
+				progressive_display = false;
 
 			try {
 				if (Item.IsValid)
@@ -349,8 +354,8 @@ namespace FSpot.Widgets {
 
 		private void HandleLoupeDestroy (object sender, EventArgs args)
 		{
-			if (sender == Loupe)
-				Loupe = null;
+			if (sender == loupe)
+				loupe = null;
 
 			if (sender == sharpener)
 				sharpener = null;
@@ -360,12 +365,12 @@ namespace FSpot.Widgets {
 
 		public void ShowHideLoupe ()
 		{
-			if (Loupe == null) {
-				Loupe = new Loupe (this);
-				Loupe.Destroyed += HandleLoupeDestroy;
-				Loupe.Show ();
+			if (loupe == null) {
+				loupe = new Loupe (this);
+				loupe.Destroyed += HandleLoupeDestroy;
+				loupe.Show ();
 			} else {
-				Loupe.Destroy ();
+				loupe.Destroy ();
 			}
 
 		}
diff --git a/src/Clients/MainApp/FSpot.Widgets/PreviewPopup.cs b/src/Clients/MainApp/FSpot.Widgets/PreviewPopup.cs
index 18147f1..1c08095 100644
--- a/src/Clients/MainApp/FSpot.Widgets/PreviewPopup.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/PreviewPopup.cs
@@ -30,15 +30,12 @@
 //
 
 using System;
-
 using Cairo;
-
+using Gdk;
 using FSpot.Core;
-using FSpot.Gui;
-using FSpot.Utils;
 using FSpot.Widgets;
-
-using Gdk;
+using FSpot.Utils;
+using FSpot.Gui;
 
 namespace FSpot {
 	public class PreviewPopup : Gtk.Window {
diff --git a/src/Clients/MainApp/FSpot.Widgets/QueryView.cs b/src/Clients/MainApp/FSpot.Widgets/QueryView.cs
index 1924e73..16fb9b1 100644
--- a/src/Clients/MainApp/FSpot.Widgets/QueryView.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/QueryView.cs
@@ -35,11 +35,14 @@
 // Copyright (C) 2004 Novell, Inc.
 //
 
-using FSpot.Core;
+using System;
 
 using Gdk;
 using Gtk;
 
+using FSpot.Core;
+
+
 namespace FSpot.Widgets
 {
     public class QueryView : SelectionCollectionGridView
diff --git a/src/Clients/MainApp/FSpot.Widgets/RatingMenuItem.cs b/src/Clients/MainApp/FSpot.Widgets/RatingMenuItem.cs
index 496d564..74d786e 100644
--- a/src/Clients/MainApp/FSpot.Widgets/RatingMenuItem.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/RatingMenuItem.cs
@@ -30,6 +30,7 @@
 
 using System;
 
+
 namespace FSpot.Widgets
 {
     public class RatingMenuItem : Hyena.Widgets.RatingMenuItem
diff --git a/src/Clients/MainApp/FSpot.Widgets/SelectionCollectionGridView.cs b/src/Clients/MainApp/FSpot.Widgets/SelectionCollectionGridView.cs
index 976d5ec..23952fc 100644
--- a/src/Clients/MainApp/FSpot.Widgets/SelectionCollectionGridView.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/SelectionCollectionGridView.cs
@@ -30,502 +30,503 @@
 using System;
 using System.Collections.Generic;
 
-using FSpot.Core;
-
 using Gdk;
 using Gtk;
 
+using FSpot.Core;
+
 
 namespace FSpot.Widgets
 {
 
-	// TODO: This event ahndler is a hack. The default event from a widget
-	//       (DragBegin) should be used, but therfore, the event must be fired
-	//       correctly.
-	public delegate void StartDragHandler (object o, StartDragArgs args);
+    // TODO: This event ahndler is a hack. The default event from a widget
+    //       (DragBegin) should be used, but therfore, the event must be fired
+    //       correctly.
+    public delegate void StartDragHandler (object o, StartDragArgs args);
 
-	public class StartDragArgs {
-		public Event Event { get; set; }
-		public uint Button { get; set; }
+    public class StartDragArgs {
+        public Event Event { get; set; }
+        public uint Button { get; set; }
 
-		public StartDragArgs (uint but, Event evt) {
-			this.Button = but;
-			this.Event = evt;
-		}
-	}
+        public StartDragArgs (uint but, Event evt) {
+            this.Button = but;
+            this.Event = evt;
+        }
+    }
 
 
-	public class SelectionCollectionGridView : CollectionGridView
-	{
+    public class SelectionCollectionGridView : CollectionGridView
+    {
 
 #region Public Properties
 
-		public SelectionCollection Selection {
-			get; private set;
-		}
-
-		// Focus Handling
-		private int real_focus_cell;
-		public int FocusCell {
-			get { return real_focus_cell; }
-			set {
-				if (value != real_focus_cell) {
-					value = Math.Max (value, 0);
-					value = Math.Min (value, Collection.Count - 1);
-					InvalidateCell (value);
-					InvalidateCell (real_focus_cell);
-					real_focus_cell = value;
-				}
-			}
-		}
+        public SelectionCollection Selection {
+            get; private set;
+        }
+
+        // Focus Handling
+        private int real_focus_cell;
+        public int FocusCell {
+            get { return real_focus_cell; }
+            set {
+                if (value != real_focus_cell) {
+                    value = Math.Max (value, 0);
+                    value = Math.Min (value, Collection.Count - 1);
+                    InvalidateCell (value);
+                    InvalidateCell (real_focus_cell);
+                    real_focus_cell = value;
+                }
+            }
+        }
 
 #endregion
 
 #region Constructors
 
-		public SelectionCollectionGridView (IntPtr raw) : base (raw)
-		{
-		}
+        public SelectionCollectionGridView (IntPtr raw) : base (raw)
+        {
+        }
 
-		public SelectionCollectionGridView (IBrowsableCollection collection) : base (collection)
-		{
-			Selection = new SelectionCollection (Collection);
+        public SelectionCollectionGridView (IBrowsableCollection collection) : base (collection)
+        {
+            Selection = new SelectionCollection (Collection);
 
-			Selection.DetailedChanged += delegate(IBrowsableCollection sender, Int32 [] ids) {
-				if (ids == null)
-					QueueDraw ();
-				else
-					foreach (int id in ids)
-						InvalidateCell (id);
-			};
+            Selection.DetailedChanged += delegate(IBrowsableCollection sender, Int32 [] ids) {
+                if (ids == null)
+                    QueueDraw ();
+                else
+                    foreach (int id in ids)
+                        InvalidateCell (id);
+            };
 
-			AddEvents ((int) EventMask.KeyPressMask
-					 | (int) EventMask.KeyReleaseMask
-					 | (int) EventMask.ButtonPressMask
-					 | (int) EventMask.ButtonReleaseMask
-					 | (int) EventMask.PointerMotionMask
-					 | (int) EventMask.PointerMotionHintMask);
+            AddEvents ((int) EventMask.KeyPressMask
+                     | (int) EventMask.KeyReleaseMask
+                     | (int) EventMask.ButtonPressMask
+                     | (int) EventMask.ButtonReleaseMask
+                     | (int) EventMask.PointerMotionMask
+                     | (int) EventMask.PointerMotionHintMask);
 
-			CanFocus = true;
-		}
+            CanFocus = true;
+        }
 
 #endregion
 
 #region Event Handlers
 
-		public event EventHandler<BrowsableEventArgs> DoubleClicked;
+        public event EventHandler<BrowsableEventArgs> DoubleClicked;
 
-		// TODO: hack. See definition of StartDragHandler
-		public event StartDragHandler StartDrag;
+        // TODO: hack. See definition of StartDragHandler
+        public event StartDragHandler StartDrag;
 
 #endregion
 
 #region Drawing Methods
 
-		protected override void DrawPhoto (int cell_num, Rectangle cell_area, Rectangle expose_area, bool selected, bool focussed)
-		{
-			base.DrawPhoto (cell_num, cell_area, expose_area, Selection.Contains (cell_num), (FocusCell == cell_num));
-		}
+        protected override void DrawPhoto (int cell_num, Rectangle cell_area, Rectangle expose_area, bool selected, bool focussed)
+        {
+            base.DrawPhoto (cell_num, cell_area, expose_area, Selection.Contains (cell_num), (FocusCell == cell_num));
+        }
 
-		protected override bool OnExposeEvent (Gdk.EventExpose args)
-		{
-			bool ret = base.OnExposeEvent (args);
+        protected override bool OnExposeEvent (Gdk.EventExpose args)
+        {
+            bool ret = base.OnExposeEvent (args);
 
-			foreach (Rectangle area in args.Region.GetRectangles ()) {
-				DrawSelection (area);
-			}
+            foreach (Rectangle area in args.Region.GetRectangles ()) {
+                DrawSelection (area);
+            }
 
-			return ret;
-		}
+            return ret;
+        }
 
-		private void DrawSelection (Rectangle expose_area)
-		{
-			if ( ! isRectSelection)
-				return;
+        private void DrawSelection (Rectangle expose_area)
+        {
+            if ( ! isRectSelection)
+                return;
 
-			Gdk.Rectangle region;
-			if ( ! expose_area.Intersect (rect_select, out region))
-				return;
+            Gdk.Rectangle region;
+            if ( ! expose_area.Intersect (rect_select, out region))
+                return;
 
-			// draw selection
-			using (Cairo.Context cairo_g = CairoHelper.Create (BinWindow)) {
+            // draw selection
+            using (Cairo.Context cairo_g = CairoHelper.Create (BinWindow)) {
 
-				Gdk.Color color = Style.Background(StateType.Selected);
-				cairo_g.Color = new Cairo.Color (color.Red/65535.0, color.Green/65535.0, color.Blue/65535.0, 0.5);
-				cairo_g.Rectangle (region.X, region.Y, region.Width, region.Height);
-				cairo_g.Fill ();
+                Gdk.Color color = Style.Background(StateType.Selected);
+                cairo_g.Color = new Cairo.Color (color.Red/65535.0, color.Green/65535.0, color.Blue/65535.0, 0.5);
+                cairo_g.Rectangle (region.X, region.Y, region.Width, region.Height);
+                cairo_g.Fill ();
 
-			}
+            }
 
-			//((IDisposable) cairo_g.Target).Dispose ();
-			//((IDisposable) cairo_g).Dispose ();
-		}
+            //((IDisposable) cairo_g.Target).Dispose ();
+            //((IDisposable) cairo_g).Dispose ();
+        }
 
 #endregion
 
 #region Utility Methods
 
-		// TODO: move this to SelectionCollection
-		public void SelectAllCells ()
-		{
-			Selection.Add (0, Collection.Count - 1);
-		}
+        // TODO: move this to SelectionCollection
+        public void SelectAllCells ()
+        {
+            Selection.Add (0, Collection.Count - 1);
+        }
 
-		protected virtual void ContextMenu (EventButton evnt, int cell_num)
-		{
-		}
+        protected virtual void ContextMenu (EventButton evnt, int cell_num)
+        {
+        }
 
 #endregion
 
 #region Event Handler
 
-		// TODO: the following code need to be cleaned up.
-		// TODO: rubberband selection behaves different than Gtk.IconView. This needs to be fixed.
-		// TODO: selection by clicks behaves different than Gtk.IconView. This needs to be fixed.
-
-		protected override bool OnButtonPressEvent (EventButton evnt)
-		{
-			int cell_num = CellAtPosition ((int) evnt.X, (int) evnt.Y);
-
-			start_select_event = evnt;
-
-			selection_start = new Point ((int) evnt.X, (int) evnt.Y);
-			selection_modifier = evnt.State;
-
-			isRectSelection = false;
-			isDragDrop = false;
-
-			switch (evnt.Type) {
-			case EventType.TwoButtonPress:
-				if (evnt.Button != 1 ||
-					(evnt.State &  (ModifierType.ControlMask | ModifierType.ShiftMask)) != 0)
-					return false;
-				if (DoubleClicked != null)
-					DoubleClicked (this, new BrowsableEventArgs (cell_num, null));
-				return true;
-
-			case EventType.ButtonPress:
-				GrabFocus ();
-				// on a cell : context menu if button 3
-				// cell selection is done on button release
-				if (evnt.Button == 3) {
-					ContextMenu (evnt, cell_num);
-					return true;
-				}
-				return false;
-			}
-
-			return false;
-		}
-
-		protected override bool OnButtonReleaseEvent (EventButton evnt)
-		{
-			if (isRectSelection) {
-				// remove scrolling and rectangular selection
-				if (scroll_timeout != 0) {
-					GLib.Source.Remove (scroll_timeout);
-					scroll_timeout = 0;
-				}
-
-				isRectSelection = false;
-				if (BinWindow != null) {
-					BinWindow.InvalidateRect (rect_select, false);
-					BinWindow.ProcessUpdates (true);
-				}
-				rect_select = new Rectangle();
-			} else if (!isDragDrop) {
-				int cell_num = CellAtPosition ((int) evnt.X, (int) evnt.Y);
-				if (cell_num != -1) {
-					if ((evnt.State & ModifierType.ControlMask) != 0) {
-						Selection.ToggleCell (cell_num);
-					} else if ((evnt.State & ModifierType.ShiftMask) != 0) {
-						Selection.Add (FocusCell, cell_num);
-					} else {
-						Selection.Clear ();
-						Selection.Add (cell_num);
-					}
-					FocusCell = cell_num;
-				}
-			}
-			isDragDrop = false;
-
-			return true;
-		}
-
-		// rectangle of dragging selection
-		private Rectangle rect_select;
-		private Point selection_start;
-		private Point selection_end;
-		private ModifierType selection_modifier;
-
-		private bool isRectSelection = false;
-		private bool isDragDrop = false;
-
-		// initial selection
-		private int[] start_select_selection;
-		// initial event used to detect drag&drop
-		private EventButton start_select_event;
-		// timer using when scrolling selection
-		private uint scroll_timeout = 0;
-
-		private Rectangle BoundedRectangle (Point p1, Point p2)
-		{
-			return new Rectangle (Math.Min (p1.X, p2.X),
-								  Math.Min (p1.Y, p2.Y),
-								  Math.Abs (p1.X - p2.X) + 1,
-								  Math.Abs (p1.Y- p2.Y) + 1);
-		}
-
-		protected Point GetPointer ()
-		{
-			int x, y;
-			GetPointer (out x, out y);
-
-			return new Point (x + (int) Hadjustment.Value, y + (int) Vadjustment.Value);
-		}
-
-		// during pointer motion, select/toggle pictures between initial x/y (param)
-		// and current x/y (get pointer)
-		private void UpdateRubberband ()
-		{
-			// determine old and new selection
-			var old_selection = rect_select;
-			selection_end = GetPointer ();
-			var new_selection = BoundedRectangle (selection_start, selection_end);
-
-			// determine region to invalidate
-			var region = Region.Rectangle (old_selection);
-			region.Xor (Region.Rectangle (new_selection));
-			region.Shrink (-1, -1);
-
-			BinWindow.InvalidateRegion (region, true);
-
-			rect_select = new_selection;
-			UpdateRubberbandSelection ();
-		}
-
-		private void UpdateRubberbandSelection ()
-		{
-			var selected_area = BoundedRectangle (selection_start, selection_end);
-
-			// Restore initial selection
-			var initial_selection = Selection.ToBitArray();
-			Selection.Clear (false);
-			foreach (int i in start_select_selection)
-				Selection.Add (i, false);
-
-			// Set selection
-			int first = -1;
-			foreach (var cell_num in CellsInRect (selected_area)) {
-				if (first == -1)
-					first = cell_num;
-
-				if ((selection_modifier & ModifierType.ControlMask) == 0)
-					Selection.Add (cell_num, false);
-				else
-					Selection.ToggleCell (cell_num, false);
-			}
-			if (first != -1)
-				FocusCell = first;
-
-			// fire events for cells which have changed selection flag
-			var new_selection = Selection.ToBitArray();
-			var selection_changed = initial_selection.Xor (new_selection);
-			var changed = new List<int>();
-			for (int i = 0; i < selection_changed.Length; i++)
-				if (selection_changed.Get(i))
-					changed.Add (i);
-			if (changed.Count != 0)
-				Selection.SignalChange (changed.ToArray());
-		}
-
-		// if scroll is required, a timeout is fired
-		// until the button is release or the pointer is
-		// in window again
-		private int deltaVscroll;
-		private bool HandleMotionTimeout ()
-		{
-			int new_x, new_y;
-
-		   // do scroll
-			double newVadj = Vadjustment.Value;
-			if (deltaVscroll < 130)
-				deltaVscroll += 15;
-
-			Gdk.ModifierType new_mod;
-			Display.GetPointer (out new_x, out new_y, out new_mod);
-			GetPointer (out new_x, out new_y);
-
-			if (new_y <= 0) {
-				newVadj -= deltaVscroll;
-				if (newVadj < 0)
-					newVadj = 0;
-			} else if ((new_y > Allocation.Height) &&
-				   (newVadj < Vadjustment.Upper - Allocation.Height - deltaVscroll))
-				newVadj += deltaVscroll;
-			Vadjustment.Value = newVadj;
-
-			UpdateRubberband ();// (new Point (new_x + (int) Hadjustment.Value, new_y + (int) Vadjustment.Value));
-
-			Vadjustment.ChangeValue ();
-
-			// stop firing timeout when no button pressed
-			return (new_mod & (ModifierType.Button1Mask | ModifierType.Button3Mask)) != 0;
-		}
-
-		protected override bool OnMotionNotifyEvent (EventMotion evnt)
-		{
-			if ((evnt.State & (ModifierType.Button1Mask | ModifierType.Button3Mask)) == 0)
-				return false;
-
-			if (! Gtk.Drag.CheckThreshold (this, selection_start.X, selection_start.Y,
-									   (int) evnt.X, (int) evnt.Y))
-				return false;
-
-			if (isRectSelection) {
-				// scroll if out of window
-				double d_x, d_y;
-				deltaVscroll = 30;
-
-				if (EventHelper.GetCoords (evnt, out d_x, out d_y)) {
-					int new_y = (int) d_y;
-					if ((new_y <= 0) || (new_y >= Allocation.Height)) {
-						if (scroll_timeout == 0)
-							scroll_timeout = GLib.Timeout.Add (100, new GLib.TimeoutHandler (HandleMotionTimeout));
-					} else if (scroll_timeout != 0) {
-						GLib.Source.Remove (scroll_timeout);
-						scroll_timeout = 0;
-					}
-				} else if (scroll_timeout != 0) {
-					GLib.Source.Remove (scroll_timeout);
-					scroll_timeout = 0;
-				}
-
-				// handle selection
-				UpdateRubberband ();
-				//SelectMotion (new Point ((int) args.Event.X, (int) args.Event.Y));
-			} else  {
-				int cell_num = CellAtPosition (selection_start);
-
-				if (Selection.Contains (cell_num)) {
-					// on a selected cell : do drag&drop
-					isDragDrop = true;
-					if (StartDrag != null) {
-						uint but;
-						if ((evnt.State & ModifierType.Button1Mask) != 0)
-							but = 1;
-						else
-							but = 3;
-						StartDrag (this, new StartDragArgs(but, start_select_event));
-					}
-				} else {
-					// not on a selected cell : do rectangular select
-					isRectSelection = true;
-
-					// ctrl : toggle selected, shift : keep selected
-					if ((evnt.State & (ModifierType.ShiftMask | ModifierType.ControlMask)) == 0)
-						Selection.Clear ();
-
-					start_select_selection = Selection.Ids; // keep initial selection
-					// no rect draw at beginning
-					rect_select = Rectangle.Zero;
-
-					return false;
-				}
-			}
-
-			return true;
-		}
-
-		protected override bool OnKeyPressEvent (EventKey evnt)
-		{
-			int focus_old = FocusCell;
-
-			bool shift = ModifierType.ShiftMask == (evnt.State & ModifierType.ShiftMask);
-			bool control = ModifierType.ControlMask == (evnt.State & ModifierType.ControlMask);
-
-			switch (evnt.Key) {
-			case Gdk.Key.Down:
-			case Gdk.Key.J:
-			case Gdk.Key.j:
-				FocusCell += VisibleColums;
-				break;
-
-			case Gdk.Key.Left:
-			case Gdk.Key.H:
-			case Gdk.Key.h:
-				if (control && shift)
-					FocusCell -= FocusCell % VisibleColums;
-				else
-					FocusCell--;
-				break;
-
-			case Gdk.Key.Right:
-			case Gdk.Key.L:
-			case Gdk.Key.l:
-				if (control && shift)
-					FocusCell += VisibleColums - (FocusCell % VisibleColums) - 1;
-				else
-					FocusCell++;
-				break;
-
-			case Gdk.Key.Up:
-			case Gdk.Key.K:
-			case Gdk.Key.k:
-				FocusCell -= VisibleColums;
-				break;
-
-			case Gdk.Key.Page_Up:
-				FocusCell -= VisibleColums * VisibleRows;
-				break;
-
-			case Gdk.Key.Page_Down:
-				FocusCell += VisibleColums * VisibleRows;
-				break;
-
-			case Gdk.Key.Home:
-				FocusCell = 0;
-				break;
-
-			case Gdk.Key.End:
-				FocusCell = Collection.Count - 1;
-				break;
-
-			case Gdk.Key.R:
-			case Gdk.Key.r:
-				FocusCell = new Random().Next(0, Collection.Count - 1);
-				break;
-
-			case Gdk.Key.space:
-				Selection.ToggleCell (FocusCell);
-				break;
-
-			case Gdk.Key.Return:
-				if (DoubleClicked != null)
-					DoubleClicked (this, new BrowsableEventArgs (FocusCell, null));
-				break;
-
-			default:
-				return false;
-			}
-
-			if (shift) {
-				if (focus_old != FocusCell && Selection.Contains (focus_old) && Selection.Contains (FocusCell))
-					Selection.Remove (FocusCell, focus_old);
-				else
-					Selection.Add (focus_old, FocusCell);
-
-			} else if (!control) {
-				Selection.Clear ();
-				Selection.Add (FocusCell);
-			}
-
-			ScrollTo (FocusCell);
-			return true;
-		}
+        // TODO: the following code need to be cleaned up.
+        // TODO: rubberband selection behaves different than Gtk.IconView. This needs to be fixed.
+        // TODO: selection by clicks behaves different than Gtk.IconView. This needs to be fixed.
+
+        protected override bool OnButtonPressEvent (EventButton evnt)
+        {
+            int cell_num = CellAtPosition ((int) evnt.X, (int) evnt.Y);
+
+            start_select_event = evnt;
+
+            selection_start = new Point ((int) evnt.X, (int) evnt.Y);
+            selection_modifier = evnt.State;
+
+            isRectSelection = false;
+            isDragDrop = false;
+
+            switch (evnt.Type) {
+            case EventType.TwoButtonPress:
+                if (evnt.Button != 1 ||
+                    (evnt.State &  (ModifierType.ControlMask | ModifierType.ShiftMask)) != 0)
+                    return false;
+                if (DoubleClicked != null)
+                    DoubleClicked (this, new BrowsableEventArgs (cell_num, null));
+                return true;
+
+            case EventType.ButtonPress:
+                GrabFocus ();
+                // on a cell : context menu if button 3
+                // cell selection is done on button release
+                if (evnt.Button == 3) {
+                    ContextMenu (evnt, cell_num);
+                    return true;
+                } else {
+                    return false;
+                }
+            }
+
+            return false;
+        }
+
+        protected override bool OnButtonReleaseEvent (EventButton evnt)
+        {
+            if (isRectSelection) {
+                // remove scrolling and rectangular selection
+                if (scroll_timeout != 0) {
+                    GLib.Source.Remove (scroll_timeout);
+                    scroll_timeout = 0;
+                }
+
+                isRectSelection = false;
+                if (BinWindow != null) {
+                    BinWindow.InvalidateRect (rect_select, false);
+                    BinWindow.ProcessUpdates (true);
+                }
+                rect_select = new Rectangle();
+            } else if (!isDragDrop) {
+                int cell_num = CellAtPosition ((int) evnt.X, (int) evnt.Y);
+                if (cell_num != -1) {
+                    if ((evnt.State & ModifierType.ControlMask) != 0) {
+                        Selection.ToggleCell (cell_num);
+                    } else if ((evnt.State & ModifierType.ShiftMask) != 0) {
+                        Selection.Add (FocusCell, cell_num);
+                    } else {
+                        Selection.Clear ();
+                        Selection.Add (cell_num);
+                    }
+                    FocusCell = cell_num;
+                }
+            }
+            isDragDrop = false;
+
+            return true;
+        }
+
+        // rectangle of dragging selection
+        private Rectangle rect_select;
+        private Point selection_start;
+        private Point selection_end;
+        private ModifierType selection_modifier;
+
+        private bool isRectSelection = false;
+        private bool isDragDrop = false;
+
+        // initial selection
+        private int[] start_select_selection;
+        // initial event used to detect drag&drop
+        private EventButton start_select_event;
+        // timer using when scrolling selection
+        private uint scroll_timeout = 0;
+
+        private Rectangle BoundedRectangle (Point p1, Point p2)
+        {
+            return new Rectangle (Math.Min (p1.X, p2.X),
+                                  Math.Min (p1.Y, p2.Y),
+                                  Math.Abs (p1.X - p2.X) + 1,
+                                  Math.Abs (p1.Y- p2.Y) + 1);
+        }
+
+        protected Point GetPointer ()
+        {
+            int x, y;
+            GetPointer (out x, out y);
+
+            return new Point (x + (int) Hadjustment.Value, y + (int) Vadjustment.Value);
+        }
+
+        // during pointer motion, select/toggle pictures between initial x/y (param)
+        // and current x/y (get pointer)
+        private void UpdateRubberband ()
+        {
+            // determine old and new selection
+            var old_selection = rect_select;
+            selection_end = GetPointer ();
+            var new_selection = BoundedRectangle (selection_start, selection_end);
+
+            // determine region to invalidate
+            var region = Region.Rectangle (old_selection);
+            region.Xor (Region.Rectangle (new_selection));
+            region.Shrink (-1, -1);
+
+            BinWindow.InvalidateRegion (region, true);
+
+            rect_select = new_selection;
+            UpdateRubberbandSelection ();
+        }
+
+        private void UpdateRubberbandSelection ()
+        {
+            var selected_area = BoundedRectangle (selection_start, selection_end);
+
+            // Restore initial selection
+            var initial_selection = Selection.ToBitArray();
+            Selection.Clear (false);
+            foreach (int i in start_select_selection)
+                Selection.Add (i, false);
+
+            // Set selection
+            int first = -1;
+            foreach (var cell_num in CellsInRect (selected_area)) {
+                if (first == -1)
+                    first = cell_num;
+
+                if ((selection_modifier & ModifierType.ControlMask) == 0)
+                    Selection.Add (cell_num, false);
+                else
+                    Selection.ToggleCell (cell_num, false);
+            }
+            if (first != -1)
+                FocusCell = first;
+
+            // fire events for cells which have changed selection flag
+            var new_selection = Selection.ToBitArray();
+            var selection_changed = initial_selection.Xor (new_selection);
+            var changed = new List<int>();
+            for (int i = 0; i < selection_changed.Length; i++)
+                if (selection_changed.Get(i))
+                    changed.Add (i);
+            if (changed.Count != 0)
+                Selection.SignalChange (changed.ToArray());
+        }
+
+        // if scroll is required, a timeout is fired
+        // until the button is release or the pointer is
+        // in window again
+        private int deltaVscroll;
+        private bool HandleMotionTimeout ()
+        {
+            int new_x, new_y;
+
+           // do scroll
+            double newVadj = Vadjustment.Value;
+            if (deltaVscroll < 130)
+                deltaVscroll += 15;
+
+            Gdk.ModifierType new_mod;
+            Display.GetPointer (out new_x, out new_y, out new_mod);
+            GetPointer (out new_x, out new_y);
+
+            if (new_y <= 0) {
+                newVadj -= deltaVscroll;
+                if (newVadj < 0)
+                    newVadj = 0;
+            } else if ((new_y > Allocation.Height) &&
+                   (newVadj < Vadjustment.Upper - Allocation.Height - deltaVscroll))
+                newVadj += deltaVscroll;
+            Vadjustment.Value = newVadj;
+
+            UpdateRubberband ();// (new Point (new_x + (int) Hadjustment.Value, new_y + (int) Vadjustment.Value));
+
+            Vadjustment.ChangeValue ();
+
+            // stop firing timeout when no button pressed
+            return (new_mod & (ModifierType.Button1Mask | ModifierType.Button3Mask)) != 0;
+        }
+
+        protected override bool OnMotionNotifyEvent (EventMotion evnt)
+        {
+            if ((evnt.State & (ModifierType.Button1Mask | ModifierType.Button3Mask)) == 0)
+                return false;
+
+            if (! Gtk.Drag.CheckThreshold (this, selection_start.X, selection_start.Y,
+                                       (int) evnt.X, (int) evnt.Y))
+                return false;
+
+            if (isRectSelection) {
+                // scroll if out of window
+                double d_x, d_y;
+                deltaVscroll = 30;
+
+                if (EventHelper.GetCoords (evnt, out d_x, out d_y)) {
+                    int new_y = (int) d_y;
+                    if ((new_y <= 0) || (new_y >= Allocation.Height)) {
+                        if (scroll_timeout == 0)
+                            scroll_timeout = GLib.Timeout.Add (100, new GLib.TimeoutHandler (HandleMotionTimeout));
+                    } else if (scroll_timeout != 0) {
+                        GLib.Source.Remove (scroll_timeout);
+                        scroll_timeout = 0;
+                    }
+                } else if (scroll_timeout != 0) {
+                    GLib.Source.Remove (scroll_timeout);
+                    scroll_timeout = 0;
+                }
+
+                // handle selection
+                UpdateRubberband ();
+                //SelectMotion (new Point ((int) args.Event.X, (int) args.Event.Y));
+            } else  {
+                int cell_num = CellAtPosition (selection_start);
+
+                if (Selection.Contains (cell_num)) {
+                    // on a selected cell : do drag&drop
+                    isDragDrop = true;
+                    if (StartDrag != null) {
+                        uint but;
+                        if ((evnt.State & ModifierType.Button1Mask) != 0)
+                            but = 1;
+                        else
+                            but = 3;
+                        StartDrag (this, new StartDragArgs(but, start_select_event));
+                    }
+                } else {
+                    // not on a selected cell : do rectangular select
+                    isRectSelection = true;
+
+                    // ctrl : toggle selected, shift : keep selected
+                    if ((evnt.State & (ModifierType.ShiftMask | ModifierType.ControlMask)) == 0)
+                        Selection.Clear ();
+
+                    start_select_selection = Selection.Ids; // keep initial selection
+                    // no rect draw at beginning
+                    rect_select = Rectangle.Zero;
+
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        protected override bool OnKeyPressEvent (EventKey evnt)
+        {
+            int focus_old = FocusCell;
+
+            bool shift = ModifierType.ShiftMask == (evnt.State & ModifierType.ShiftMask);
+            bool control = ModifierType.ControlMask == (evnt.State & ModifierType.ControlMask);
+
+            switch (evnt.Key) {
+            case Gdk.Key.Down:
+            case Gdk.Key.J:
+            case Gdk.Key.j:
+                FocusCell += VisibleColums;
+                break;
+
+            case Gdk.Key.Left:
+            case Gdk.Key.H:
+            case Gdk.Key.h:
+                if (control && shift)
+                    FocusCell -= FocusCell % VisibleColums;
+                else
+                    FocusCell--;
+                break;
+
+            case Gdk.Key.Right:
+            case Gdk.Key.L:
+            case Gdk.Key.l:
+                if (control && shift)
+                    FocusCell += VisibleColums - (FocusCell % VisibleColums) - 1;
+                else
+                    FocusCell++;
+                break;
+
+            case Gdk.Key.Up:
+            case Gdk.Key.K:
+            case Gdk.Key.k:
+                FocusCell -= VisibleColums;
+                break;
+
+            case Gdk.Key.Page_Up:
+                FocusCell -= VisibleColums * VisibleRows;
+                break;
+
+            case Gdk.Key.Page_Down:
+                FocusCell += VisibleColums * VisibleRows;
+                break;
+
+            case Gdk.Key.Home:
+                FocusCell = 0;
+                break;
+
+            case Gdk.Key.End:
+                FocusCell = Collection.Count - 1;
+                break;
+
+            case Gdk.Key.R:
+            case Gdk.Key.r:
+                FocusCell = new Random().Next(0, Collection.Count - 1);
+                break;
+
+            case Gdk.Key.space:
+                Selection.ToggleCell (FocusCell);
+                break;
+
+            case Gdk.Key.Return:
+                if (DoubleClicked != null)
+                    DoubleClicked (this, new BrowsableEventArgs (FocusCell, null));
+                break;
+
+            default:
+                return false;
+            }
+
+            if (shift) {
+                if (focus_old != FocusCell && Selection.Contains (focus_old) && Selection.Contains (FocusCell))
+                    Selection.Remove (FocusCell, focus_old);
+                else
+                    Selection.Add (focus_old, FocusCell);
+
+            } else if (!control) {
+                Selection.Clear ();
+                Selection.Add (FocusCell);
+            }
+
+            ScrollTo (FocusCell);
+            return true;
+        }
 
 #endregion
 
-	}
+    }
 }
 
diff --git a/src/Clients/MainApp/FSpot.Widgets/Sharpener.cs b/src/Clients/MainApp/FSpot.Widgets/Sharpener.cs
index 9483520..3e3ebc5 100644
--- a/src/Clients/MainApp/FSpot.Widgets/Sharpener.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/Sharpener.cs
@@ -28,17 +28,17 @@
 // 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 Cairo;
 
+using Gtk;
+using Gdk;
 using System;
-
+using System.Runtime.InteropServices;
+using Mono.Unix;
+using FSpot.Widgets;
 using FSpot.UI.Dialog;
-
-using Gtk;
-
 using Hyena.Widgets;
 
-using Mono.Unix;
-
 namespace FSpot.Widgets
 {
 	public class Sharpener : Loupe
@@ -58,17 +58,17 @@ namespace FSpot.Widgets
 		{
 			if (!okClicked) {
 				base.UpdateSample ();
-	
+    
 				if (overlay != null)
 					overlay.Dispose ();
-	
+    
 				overlay = null;
 				if (source != null)
 					overlay = PixbufUtils.UnsharpMask (source,
-									   radius_spin.Value,
-									   amount_spin.Value,
-									   threshold_spin.Value,
-									   null);
+    								   radius_spin.Value,
+    								   amount_spin.Value,
+    								   threshold_spin.Value,
+                                       null);
 			}
 		}
 
@@ -92,10 +92,10 @@ namespace FSpot.Widgets
 			try {
 				Gdk.Pixbuf orig = view.Pixbuf;
 				Gdk.Pixbuf final = PixbufUtils.UnsharpMask (orig,
-										radius_spin.Value,
-										amount_spin.Value,
-										threshold_spin.Value,
-										progressDialog);
+                                        radius_spin.Value,
+                                        amount_spin.Value,
+                                        threshold_spin.Value,
+                                        progressDialog);
 
 				bool create_version = photo.DefaultVersion.IsProtected;
 
@@ -105,13 +105,13 @@ namespace FSpot.Widgets
 			} catch (System.Exception e) {
 				string msg = Catalog.GetString ("Error saving sharpened photo");
 				string desc = String.Format (Catalog.GetString ("Received exception \"{0}\". Unable to save photo {1}"),
-								 e.Message, photo.Name);
+                                 e.Message, photo.Name);
 
 				HigMessageDialog md = new HigMessageDialog (this, DialogFlags.DestroyWithParent,
-										Gtk.MessageType.Error,
-										ButtonsType.Ok,
-										msg,
-										desc);
+                                        Gtk.MessageType.Error,
+                                        ButtonsType.Ok,
+                                        msg,
+                                        desc);
 				md.Run ();
 				md.Destroy ();
 			}
diff --git a/src/Clients/MainApp/FSpot.Widgets/Sidebar.cs b/src/Clients/MainApp/FSpot.Widgets/Sidebar.cs
index 1082338..40fa08d 100644
--- a/src/Clients/MainApp/FSpot.Widgets/Sidebar.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/Sidebar.cs
@@ -27,16 +27,14 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-using System.Collections.Generic;
-
 using FSpot.Core;
 using FSpot.Extensions;
-
+using FSpot.Utils;
 using Gtk;
-
 using Mono.Addins;
 using Mono.Unix;
+using System;
+using System.Collections.Generic;
 
 namespace FSpot.Widgets
 {
@@ -60,7 +58,9 @@ namespace FSpot.Widgets
 		}
 
 		public string PageForContext (ViewContext context) {
-			string name = Preferences.Get<string> (PrefKeyForContext (context)) ?? DefaultForContext (context);
+			string name = Preferences.Get<string> (PrefKeyForContext (context));
+			if (name == null)
+				name = DefaultForContext (context);
 			return name;
 		}
 
@@ -93,7 +93,11 @@ namespace FSpot.Widgets
 		public event IBrowsableCollectionItemsChangedHandler SelectionItemsChanged;
 
 		// The photos selected.
-		public IBrowsableCollection Selection { get; private set; }
+		private IBrowsableCollection selection;
+		public IBrowsableCollection Selection {
+			get { return selection; }
+			private set { selection = value; }
+		}
 
 		public event EventHandler ContextChanged;
 
@@ -109,7 +113,7 @@ namespace FSpot.Widgets
 
 		private readonly ISidebarContextSwitchStrategy ContextSwitchStrategy;
 
-		public Sidebar ()
+		public Sidebar () : base ()
 		{
 			ContextSwitchStrategy = new MRUSidebarContextSwitchStrategy ();
 			ContextChanged += HandleContextChanged;
@@ -167,7 +171,7 @@ namespace FSpot.Widgets
 			AppendPage (new SidebarPage (widget, label, icon_name));
 		}
 
-		public void AppendPage (SidebarPage page)
+        public void AppendPage (SidebarPage page)
 		{
 			page.Sidebar = this;
 			page.CanSelectChanged += HandleCanSelectChanged;
diff --git a/src/Clients/MainApp/FSpot.Widgets/SlideShow.cs b/src/Clients/MainApp/FSpot.Widgets/SlideShow.cs
index d8a5f16..bd20866 100644
--- a/src/Clients/MainApp/FSpot.Widgets/SlideShow.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/SlideShow.cs
@@ -30,18 +30,16 @@
 using System;
 using System.Collections.Generic;
 
-using FSpot.Bling;
+using Gtk;
+using Gdk;
+using Mono.Addins;
 using FSpot.Core;
+using FSpot.Bling;
 using FSpot.Extensions;
 using FSpot.Imaging;
 using FSpot.Transitions;
 using FSpot.Utils;
 
-using Gdk;
-using Gtk;
-
-using Mono.Addins;
-
 namespace FSpot.Widgets
 {
 	public class SlideShow : DrawingArea
@@ -55,7 +53,7 @@ namespace FSpot.Widgets
 		{
 		}
 
-		public SlideShow (BrowsablePointer item, uint interval_ms, bool init)
+		public SlideShow (BrowsablePointer item, uint interval_ms, bool init) : base ()
 		{
 			this.item = item;
 			DoubleBuffered = false;
@@ -79,7 +77,7 @@ namespace FSpot.Widgets
 
 		SlideShowTransition transition;
 		public SlideShowTransition Transition {
-			get { return transition; }
+            get { return transition; }
 			set {
 				if (value == transition)
 					return;
diff --git a/src/Clients/MainApp/FSpot.Widgets/SoftFocus.cs b/src/Clients/MainApp/FSpot.Widgets/SoftFocus.cs
index d615d67..613f13a 100644
--- a/src/Clients/MainApp/FSpot.Widgets/SoftFocus.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/SoftFocus.cs
@@ -29,12 +29,11 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
 using Cairo;
+using System;
+using System.Runtime.InteropServices;
 
 using Pinta.Core;
-using Point = Gdk.Point;
 
 namespace FSpot.Widgets {
 
@@ -43,19 +42,23 @@ namespace FSpot.Widgets {
 		ImageInfo info;
 		double radius;
 		double amount;
+		Gdk.Point center;
 		ImageInfo blur;
 		Pattern mask;
 
 		public SoftFocus (ImageInfo info)
 		{
 			this.info = info;
-			Center.X = info.Bounds.Width / 2;
-			Center.Y = info.Bounds.Height / 2;
+			center.X = info.Bounds.Width / 2;
+			center.Y = info.Bounds.Height / 2;
 			Amount = 3;
 			Radius = .5;
 		}
 
-		public Point Center { get; set; }
+		public Gdk.Point Center {
+			get { return center; }
+			set { center = value; }
+		}
 
 		public double Amount {
 			get { return amount; }
@@ -109,9 +112,9 @@ namespace FSpot.Widgets {
 			((IDisposable)ctx).Dispose ();
 			Gdk.Pixbuf normal = image.ToPixbuf();
 
-			Gdk.Pixbuf blur = PixbufUtils.Blur (normal, 3, null);
+            Gdk.Pixbuf blur = PixbufUtils.Blur (normal, 3, null);
 
-			ImageInfo overlay = new ImageInfo (blur);
+            ImageInfo overlay = new ImageInfo (blur);
 			blur.Dispose ();
 			normal.Dispose ();
 			image.Destroy ();
@@ -125,8 +128,8 @@ namespace FSpot.Widgets {
 
 			RadialGradient circle;
 
-			circle = new RadialGradient (Center.X * scale, Center.Y * scale, radius * max * .7,
-							 Center.X * scale, Center.Y * scale, radius * max + max * .2);
+			circle = new RadialGradient (center.X * scale, center.Y * scale, radius * max * .7,
+						     center.X * scale, center.Y * scale, radius * max + max * .2);
 
 			circle.AddColorStop (0, new Cairo.Color (0.0, 0.0, 0.0, 0.0));
 			circle.AddColorStop (1.0, new Cairo.Color (1.0, 1.0, 1.0, 1.0));
diff --git a/src/Clients/MainApp/FSpot.Widgets/TagEntry.cs b/src/Clients/MainApp/FSpot.Widgets/TagEntry.cs
index a805889..ad18266 100644
--- a/src/Clients/MainApp/FSpot.Widgets/TagEntry.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/TagEntry.cs
@@ -32,10 +32,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System.Collections.Generic;
-using System.Linq;
 using System.Text;
-
+using System.Collections;
+using System.Collections.Generic;
 using FSpot.Core;
 
 namespace FSpot.Widgets
@@ -51,12 +50,16 @@ namespace FSpot.Widgets
 
 		TagStore tag_store;
 
+		public TagEntry (TagStore tag_store) : this (tag_store, true)
+		{
+		}
+
 		protected TagEntry (System.IntPtr raw)
 		{
 			Raw = raw;
 		}
 
-		public TagEntry (TagStore tag_store, bool update_on_focus_out = true)
+		public TagEntry (TagStore tag_store, bool update_on_focus_out) : base ()
 		{
 			this.tag_store = tag_store;
 			this.KeyPressEvent += HandleKeyPressEvent;
@@ -94,7 +97,7 @@ namespace FSpot.Widgets
 			Update ();
 		}
 
-		public void UpdateFromTagNames (IEnumerable<string> tagnames)
+		public void UpdateFromTagNames (string [] tagnames)
 		{
 			selected_photos_tagnames = new List<string> ();
 			foreach (string tagname in tagnames)
@@ -129,7 +132,14 @@ namespace FSpot.Widgets
 		{
 			string [] tagnames = Text.Split (new char [] {','});
 
-			return tagnames.Select(t => t.Trim()).Where(s => s.Length > 0).ToArray();
+			List<string> list = new List<string> ();
+			for (int i = 0; i < tagnames.Length; i ++) {
+				string s = tagnames [i].Trim ();
+
+				if (s.Length > 0)
+					list.Add (s);
+			}
+			return list.ToArray ();
 		}
 
 		int tag_completion_index = -1;
@@ -206,7 +216,7 @@ namespace FSpot.Widgets
 					return;
 
 				tag_completion_typed_so_far = Text.Substring (last_comma + 1).TrimStart (new char [] {' '});
-				if (string.IsNullOrEmpty(tag_completion_typed_so_far))
+				if (tag_completion_typed_so_far == null || tag_completion_typed_so_far.Length == 0)
 					return;
 
 				tag_completions = tag_store.GetTagsByNameStart (tag_completion_typed_so_far);
@@ -289,9 +299,12 @@ namespace FSpot.Widgets
 				TagsRemoved (this, remove_tags.ToArray ());
 		}
 
-		private static bool IsTagInList (IEnumerable<string> tags, string tag)
+		private static bool IsTagInList (string [] tags, string tag)
 		{
-			return tags.Any(t => t == tag);
+			foreach (string t in tags)
+				if (t == tag)
+					return true;
+			return false;
 		}
 
 		private void HandleFocusOutEvent (object o, Gtk.FocusOutEventArgs args)
diff --git a/src/Clients/MainApp/FSpot.Widgets/TagMenu.cs b/src/Clients/MainApp/FSpot.Widgets/TagMenu.cs
index 9262b7f..58818e1 100644
--- a/src/Clients/MainApp/FSpot.Widgets/TagMenu.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/TagMenu.cs
@@ -31,19 +31,15 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
 using Gtk;
-// FIXME: Not sure we need this conditional since gtkbeans is used in several other places
 #if GTK_2_16
 using GtkBeans;
 #endif
-
+using System;
 using FSpot;
-using FSpot.Core;
 using FSpot.Utils;
-
 using Hyena;
+using FSpot.Core;
 
 public class TagMenu : Menu {
 	private TagStore tag_store;
@@ -79,8 +75,8 @@ public class TagMenu : Menu {
 			System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
 
 			for (Category parent = t.Category;
-				 parent != null && parent.Category != null;
-				 parent = parent.Category)
+			     parent != null && parent.Category != null;
+			     parent = parent.Category)
 				label_builder.Append ("  ");
 
 			label_builder.Append (t.Name);
@@ -133,7 +129,7 @@ public class TagMenu : Menu {
 		}
 	}
 
-	public void PopulateFlat (Category cat, Gtk.Menu parent)
+        public void PopulateFlat (Category cat, Gtk.Menu parent)
 	{
 		foreach (Tag t in cat.Children) {
 			TagMenuItem item = TagMenuItem.IndentedItem (t);
diff --git a/src/Clients/MainApp/FSpot.Widgets/TagView.cs b/src/Clients/MainApp/FSpot.Widgets/TagView.cs
index 14633a2..b337e7b 100644
--- a/src/Clients/MainApp/FSpot.Widgets/TagView.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/TagView.cs
@@ -32,11 +32,9 @@
 //
 
 using System;
-
-using FSpot.Core;
-
-using Gdk;
 using Gtk;
+using Gdk;
+using FSpot.Core;
 
 namespace FSpot.Widgets {
 public class TagView : EventBox {
@@ -138,12 +136,12 @@ public class TagView : EventBox {
 					FSpot.ColorManagement.ApplyProfile (scaled_icon, screen_profile);
 
 			scaled_icon.RenderToDrawable (GdkWindow, Style.WhiteGC,
-							  0, 0, tag_x, tag_y, thumbnail_size, thumbnail_size,
-							  RgbDither.None, tag_x, tag_y);
+						      0, 0, tag_x, tag_y, thumbnail_size, thumbnail_size,
+						      RgbDither.None, tag_x, tag_y);
 			tag_x += thumbnail_size + TAG_ICON_VSPACING;
 		}
 
-		this.TooltipText =  String.Join (", ", names);
+        this.TooltipText =  String.Join (", ", names);
 	}
 }
 }
diff --git a/src/Clients/MainApp/FSpot.Widgets/ThumbnailCaptionRenderer.cs b/src/Clients/MainApp/FSpot.Widgets/ThumbnailCaptionRenderer.cs
index 9fe496a..e17ed3c 100644
--- a/src/Clients/MainApp/FSpot.Widgets/ThumbnailCaptionRenderer.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/ThumbnailCaptionRenderer.cs
@@ -27,10 +27,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Core;
+using System;
 
-using Gdk;
 using Gtk;
+using Gdk;
+
+using FSpot.Core;
+
 
 namespace FSpot.Widgets
 {
@@ -41,6 +44,14 @@ namespace FSpot.Widgets
     public abstract class ThumbnailCaptionRenderer
     {
 
+#region Constructor
+
+        public ThumbnailCaptionRenderer ()
+        {
+        }
+
+#endregion
+
 #region Drawing Methods
 
         public abstract int GetHeight (Widget widget, int width);
diff --git a/src/Clients/MainApp/FSpot.Widgets/ThumbnailDateCaptionRenderer.cs b/src/Clients/MainApp/FSpot.Widgets/ThumbnailDateCaptionRenderer.cs
index 6ec45e8..0bf105d 100644
--- a/src/Clients/MainApp/FSpot.Widgets/ThumbnailDateCaptionRenderer.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/ThumbnailDateCaptionRenderer.cs
@@ -27,15 +27,17 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.Collections.Generic;
 
-using FSpot.Core;
-
-using Gdk;
 using Gtk;
+using Gdk;
 
 using Hyena.Gui;
 
+using FSpot.Core;
+
+
 namespace FSpot.Widgets
 {
     /// <summary>
@@ -47,7 +49,15 @@ namespace FSpot.Widgets
 
 #region Private Fields
 
-        private readonly Dictionary <string, Pango.Layout> cache = new Dictionary <string, Pango.Layout> ();
+        private Dictionary <string, Pango.Layout> cache = new Dictionary <string, Pango.Layout> ();
+
+#endregion
+
+#region Constructor
+
+        public ThumbnailDateCaptionRenderer ()
+        {
+        }
 
 #endregion
 
diff --git a/src/Clients/MainApp/FSpot.Widgets/ThumbnailDecorationRenderer.cs b/src/Clients/MainApp/FSpot.Widgets/ThumbnailDecorationRenderer.cs
index 1a87378..534e44e 100644
--- a/src/Clients/MainApp/FSpot.Widgets/ThumbnailDecorationRenderer.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/ThumbnailDecorationRenderer.cs
@@ -27,10 +27,12 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Core;
+using System;
 
-using Gdk;
 using Gtk;
+using Gdk;
+
+using FSpot.Core;
 
 
 namespace FSpot.Widgets
@@ -42,6 +44,14 @@ namespace FSpot.Widgets
     public abstract class ThumbnailDecorationRenderer
     {
 
+#region Constructor
+
+        public ThumbnailDecorationRenderer ()
+        {
+        }
+
+#endregion
+
 #region Drawing Methods
 
         public abstract void Render (Drawable window,
diff --git a/src/Clients/MainApp/FSpot.Widgets/ThumbnailFilenameCaptionRenderer.cs b/src/Clients/MainApp/FSpot.Widgets/ThumbnailFilenameCaptionRenderer.cs
index d023f77..55cf635 100644
--- a/src/Clients/MainApp/FSpot.Widgets/ThumbnailFilenameCaptionRenderer.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/ThumbnailFilenameCaptionRenderer.cs
@@ -27,15 +27,24 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.IO;
 
 using FSpot.Core;
 
+
 namespace FSpot.Widgets
 {
 
     public class ThumbnailFilenameCaptionRenderer : ThumbnailTextCaptionRenderer
     {
+#region Constructor
+
+        public ThumbnailFilenameCaptionRenderer ()
+        {
+        }
+
+#endregion
 
 #region Drawing Methods
 
diff --git a/src/Clients/MainApp/FSpot.Widgets/ThumbnailRatingDecorationRenderer.cs b/src/Clients/MainApp/FSpot.Widgets/ThumbnailRatingDecorationRenderer.cs
index b0360ae..12a9a6e 100644
--- a/src/Clients/MainApp/FSpot.Widgets/ThumbnailRatingDecorationRenderer.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/ThumbnailRatingDecorationRenderer.cs
@@ -27,10 +27,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Core;
+using System;
 
-using Gdk;
 using Gtk;
+using Gdk;
+
+using FSpot.Core;
+
 
 namespace FSpot.Widgets
 {
@@ -47,6 +50,14 @@ namespace FSpot.Widgets
 
 #endregion
 
+#region Constructor
+
+        public ThumbnailRatingDecorationRenderer ()
+        {
+        }
+
+#endregion
+
 #region Drawing Methods
 
         public override void Render (Drawable window,
diff --git a/src/Clients/MainApp/FSpot.Widgets/ThumbnailTagsCaptionRenderer.cs b/src/Clients/MainApp/FSpot.Widgets/ThumbnailTagsCaptionRenderer.cs
index 36b319d..d668f2e 100644
--- a/src/Clients/MainApp/FSpot.Widgets/ThumbnailTagsCaptionRenderer.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/ThumbnailTagsCaptionRenderer.cs
@@ -27,10 +27,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Core;
+using System;
 
-using Gdk;
 using Gtk;
+using Gdk;
+
+using FSpot.Core;
+
 
 namespace FSpot.Widgets
 {
diff --git a/src/Clients/MainApp/FSpot.Widgets/ThumbnailTextCaptionRenderer.cs b/src/Clients/MainApp/FSpot.Widgets/ThumbnailTextCaptionRenderer.cs
index 7cd45a2..2b3555a 100644
--- a/src/Clients/MainApp/FSpot.Widgets/ThumbnailTextCaptionRenderer.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/ThumbnailTextCaptionRenderer.cs
@@ -27,13 +27,16 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Core;
+using System;
 
-using Gdk;
 using Gtk;
+using Gdk;
 
 using Hyena.Gui;
 
+using FSpot.Core;
+
+
 namespace FSpot.Widgets
 {
     /// <summary>
@@ -41,6 +44,13 @@ namespace FSpot.Widgets
     /// </summary>
     public abstract class ThumbnailTextCaptionRenderer : ThumbnailCaptionRenderer
     {
+#region Constructor
+
+        public ThumbnailTextCaptionRenderer ()
+        {
+        }
+
+#endregion
 
 #region Drawing Methods
 
diff --git a/src/Clients/MainApp/FSpot.Widgets/TrayView.cs b/src/Clients/MainApp/FSpot.Widgets/TrayView.cs
index 157c4ec..82e5b23 100644
--- a/src/Clients/MainApp/FSpot.Widgets/TrayView.cs
+++ b/src/Clients/MainApp/FSpot.Widgets/TrayView.cs
@@ -29,8 +29,12 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gdk;
+using Gtk;
+
 using FSpot.Core;
 
+
 namespace FSpot.Widgets
 {
     /// <summary>
diff --git a/src/Clients/MainApp/FSpot/Accelerometer.cs b/src/Clients/MainApp/FSpot/Accelerometer.cs
index 83540ad..77ac544 100644
--- a/src/Clients/MainApp/FSpot/Accelerometer.cs
+++ b/src/Clients/MainApp/FSpot/Accelerometer.cs
@@ -36,8 +36,8 @@
 using System;
 using System.IO;
 
+using FSpot.Utils;
 using Hyena;
-
 using TagLib.Image;
 
 namespace FSpot {
@@ -147,6 +147,8 @@ namespace FSpot {
 
 					x -= base_x;
 					y -= base_y;
+
+					return;
 				}
 			} catch (IOException) {
 				x = 0;
diff --git a/src/Clients/MainApp/FSpot/App.cs b/src/Clients/MainApp/FSpot/App.cs
index dd01e6c..3584190 100644
--- a/src/Clients/MainApp/FSpot/App.cs
+++ b/src/Clients/MainApp/FSpot/App.cs
@@ -239,18 +239,18 @@ namespace FSpot
 			}
 		}
 
-		void HandleImport (string path)
-		{
-			// Some users get wonky URIs here, trying to work around below.
-			// https://bugzilla.gnome.org/show_bug.cgi?id=629248
-			if (path != null && path.StartsWith ("gphoto2:usb:")) {
-				path = String.Format ("gphoto2://[{0}]", path.Substring (8));
-			}
-
-			Hyena.Log.DebugFormat ("Importing from {0}", path);
-			Organizer.Window.Present ();
-			Organizer.ImportFile (path == null ? null : new SafeUri(path));
-		}
+        void HandleImport (string path)
+        {
+            // Some users get wonky URIs here, trying to work around below.
+            // https://bugzilla.gnome.org/show_bug.cgi?id=629248
+            if (path != null && path.StartsWith ("gphoto2:usb:")) {
+                path = String.Format ("gphoto2://[{0}]", path.Substring (8));
+            }
+
+            Hyena.Log.DebugFormat ("Importing from {0}", path);
+            Organizer.Window.Present ();
+            Organizer.ImportFile (path == null ? null : new SafeUri(path));
+        }
 
 		void HandleOrganize ()
 		{
@@ -318,13 +318,13 @@ namespace FSpot
 				if (tag != null) {
 					msg = String.Format (Catalog.GetString ("No photos matching {0} found"), tag.Name);
 					long_msg = String.Format (Catalog.GetString ("The tag \"{0}\" is not applied to any photos. Try adding\n" +
-											 "the tag to some photos or selecting a different tag in the\n" +
-											 "F-Spot preference dialog."), tag.Name);
+										     "the tag to some photos or selecting a different tag in the\n" +
+										     "F-Spot preference dialog."), tag.Name);
 				} else {
 					msg = Catalog.GetString ("Search returned no results");
 					long_msg = Catalog.GetString ("The tag F-Spot is looking for does not exist. Try\n" +
-									  "selecting a different tag in the F-Spot preference\n" +
-									  "dialog.");
+								      "selecting a different tag in the F-Spot preference\n" +
+								      "dialog.");
 				}
 
 				Gtk.Label label = new Gtk.Label (msg);
diff --git a/src/Clients/MainApp/FSpot/BitConverter.cs b/src/Clients/MainApp/FSpot/BitConverter.cs
index 440de93..6dc953e 100644
--- a/src/Clients/MainApp/FSpot/BitConverter.cs
+++ b/src/Clients/MainApp/FSpot/BitConverter.cs
@@ -29,6 +29,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+using System.Runtime.InteropServices;
+
 namespace FSpot {
 	//[Obsolete ("use Mono.DataConvert instead")]
 	public class BitConverter {
diff --git a/src/Clients/MainApp/FSpot/ColorManagement.cs b/src/Clients/MainApp/FSpot/ColorManagement.cs
index 24ac115..c297154 100644
--- a/src/Clients/MainApp/FSpot/ColorManagement.cs
+++ b/src/Clients/MainApp/FSpot/ColorManagement.cs
@@ -27,9 +27,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.IO;
 using System.Collections.Generic;
-
 using FSpot.Core;
 
 namespace FSpot {
diff --git a/src/Clients/MainApp/FSpot/ControlOverlay.cs b/src/Clients/MainApp/FSpot/ControlOverlay.cs
index 5b5b3bb..f91b6dc 100644
--- a/src/Clients/MainApp/FSpot/ControlOverlay.cs
+++ b/src/Clients/MainApp/FSpot/ControlOverlay.cs
@@ -29,13 +29,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
 using Cairo;
 
+using System;
 using Gtk;
-
+using FSpot.Widgets;
 using FSpot.Utils;
+using FSpot.Core;
 using FSpot.Gui;
 
 namespace FSpot {
diff --git a/src/Clients/MainApp/FSpot/DragDropTargets.cs b/src/Clients/MainApp/FSpot/DragDropTargets.cs
index 5f71484..ab5e034 100644
--- a/src/Clients/MainApp/FSpot/DragDropTargets.cs
+++ b/src/Clients/MainApp/FSpot/DragDropTargets.cs
@@ -31,6 +31,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using Gtk;
 
 namespace FSpot
diff --git a/src/Clients/MainApp/FSpot/ExportStore.cs b/src/Clients/MainApp/FSpot/ExportStore.cs
index 19cb4ad..a29d187 100644
--- a/src/Clients/MainApp/FSpot/ExportStore.cs
+++ b/src/Clients/MainApp/FSpot/ExportStore.cs
@@ -31,9 +31,15 @@
 // 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 Gdk;
+using Gtk;
+
 using System;
+using System.Collections;
 using System.Collections.Generic;
+using System.IO;
 
+using FSpot;
 using FSpot.Core;
 using FSpot.Database;
 using Hyena.Data.Sqlite;
@@ -86,10 +92,10 @@ namespace FSpot
 		private ExportItem LoadItem (IDataReader reader)
 		{
 			return new ExportItem (Convert.ToUInt32 (reader ["id"]),
-					   Convert.ToUInt32 (reader ["image_id"]),
-					   Convert.ToUInt32 (reader ["image_version_id"]),
-					   reader ["export_type"].ToString (),
-					   reader ["export_token"].ToString ());
+				       Convert.ToUInt32 (reader ["image_id"]),
+				       Convert.ToUInt32 (reader ["image_version_id"]),
+				       reader ["export_type"].ToString (),
+				       reader ["export_token"].ToString ());
 		}
 
 		private void LoadAllItems ()
@@ -119,7 +125,7 @@ namespace FSpot
 		public override void Commit (ExportItem item)
 		{
 			Database.Execute (new HyenaSqliteCommand ("UPDATE exports SET image_id = ?, image_version_id = ?, export_type = ? SET export_token = ? WHERE id = ?",
-					item.ImageId, item.ImageVersionId, item.ExportType, item.ExportToken, item.Id));
+                    item.ImageId, item.ImageVersionId, item.ExportType, item.ExportToken, item.Id));
 
 			EmitChanged (item);
 		}
@@ -134,7 +140,7 @@ namespace FSpot
 		{
 
 			IDataReader reader = Database.Query (new HyenaSqliteCommand ("SELECT id, image_id, image_version_id, export_type, export_token FROM exports WHERE image_id = ? AND image_version_id = ?",
-					image_id, image_version_id));
+                    image_id, image_version_id));
 
 			List<ExportItem> export_items = new List<ExportItem> ();
 			while (reader.Read ()) {
diff --git a/src/Clients/MainApp/FSpot/FolderQueryWidget.cs b/src/Clients/MainApp/FSpot/FolderQueryWidget.cs
index 8da4449..1431cb1 100644
--- a/src/Clients/MainApp/FSpot/FolderQueryWidget.cs
+++ b/src/Clients/MainApp/FSpot/FolderQueryWidget.cs
@@ -31,12 +31,15 @@
 
 using System;
 using System.Text;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 
 using Gtk;
 using Hyena;
 
+using FSpot;
+using FSpot.Utils;
 using FSpot.Query;
 
 namespace FSpot
@@ -46,7 +49,7 @@ namespace FSpot
 		PhotoQuery query;
 		FolderSet folder_set;
 
-		public FolderQueryWidget (PhotoQuery query)
+		public FolderQueryWidget (PhotoQuery query) : base ()
 		{
 			folder_set = new FolderSet ();
 			this.query = query;
diff --git a/src/Clients/MainApp/FSpot/FullScreenView.cs b/src/Clients/MainApp/FSpot/FullScreenView.cs
index dba79a7..3de6420 100644
--- a/src/Clients/MainApp/FSpot/FullScreenView.cs
+++ b/src/Clients/MainApp/FSpot/FullScreenView.cs
@@ -30,22 +30,20 @@
 //
 
 using System;
-
 using Gtk;
-
+using Gdk;
 using FSpot.Core;
 using FSpot.Widgets;
 using FSpot.Gui;
 using FSpot.Utils;
-
 using Hyena;
-
 using Mono.Unix;
 
 namespace FSpot {
 	[Binding(Gdk.Key.Escape, "Quit")]
 	public class FullScreenView : Gtk.Window {
 		private ScrolledView scroll;
+		private PhotoImageView view;
 		private Notebook notebook;
 		private ControlOverlay controls;
 		private SlideShow display;
@@ -119,15 +117,15 @@ namespace FSpot {
 
 				scroll = new ScrolledView ();
 				scroll.ScrolledWindow.SetPolicy (PolicyType.Never, PolicyType.Never);
-				View = new PhotoImageView (collection);
+				view = new PhotoImageView (collection);
 				// FIXME this should be handled by the new style setting code
-				View.ModifyBg (Gtk.StateType.Normal, this.Style.Black);
+				view.ModifyBg (Gtk.StateType.Normal, this.Style.Black);
 				this.Add (notebook);
-				View.Show ();
-				View.MotionNotifyEvent += HandleViewMotion;
-				View.PointerMode = PointerMode.Scroll;
+				view.Show ();
+				view.MotionNotifyEvent += HandleViewMotion;
+				view.PointerMode = PointerMode.Scroll;
 
-				scroll.ScrolledWindow.Add (View);
+				scroll.ScrolledWindow.Add (view);
 
 				Toolbar tbar = new Toolbar ();
 				tbar.ToolbarStyle = Gtk.ToolbarStyle.BothHoriz;
@@ -139,14 +137,14 @@ namespace FSpot {
 				t_item.IsImportant = true;
 				tbar.Insert (t_item, -1);
 
-				Gtk.Action action = new PreviousPictureAction (View.Item);
+				Gtk.Action action = new PreviousPictureAction (view.Item);
 				actions.Add (action);
 				tbar.Insert (action.CreateToolItem () as ToolItem, -1);
 
 				play_pause_button = (actions [SlideShow]).CreateToolItem () as ToolButton;
 				tbar.Insert (play_pause_button, -1);
 
-				action = new NextPictureAction (View.Item);
+				action = new NextPictureAction (view.Item);
 				actions.Add (action);
 				tbar.Insert (action.CreateToolItem () as ToolItem, -1);
 
@@ -154,7 +152,7 @@ namespace FSpot {
 				t_item.Child = new Label (Catalog.GetString ("Slide transition:"));
 				tbar.Insert (t_item, -1);
 
-				display = new SlideShow (View.Item);
+				display = new SlideShow (view.Item);
 				display.AddEvents ((int) (Gdk.EventMask.PointerMotionMask));
 				display.ModifyBg (Gtk.StateType.Normal, this.Style.Black);
 				display.MotionNotifyEvent += HandleViewMotion;
@@ -169,11 +167,11 @@ namespace FSpot {
 				t_item.Child = combo;
 				tbar.Insert (t_item, -1);
 
-				action = new RotateLeftAction (View.Item);
+				action = new RotateLeftAction (view.Item);
 				actions.Add (action);
 				tbar.Insert (action.CreateToolItem () as ToolItem, -1);
 
-				action = new RotateRightAction (View.Item);
+				action = new RotateRightAction (view.Item);
 				actions.Add (action);
 				tbar.Insert (action.CreateToolItem () as ToolItem, -1);
 
@@ -192,8 +190,8 @@ namespace FSpot {
 				this.Fullscreen ();
 				this.ButtonPressEvent += HandleButtonPressEvent;
 
-				View.Item.Changed += HandleItemChanged;
-				View.GrabFocus ();
+				view.Item.Changed += HandleItemChanged;
+				view.GrabFocus ();
 
 				hide_cursor_delay = new DelayedOperation (3000, new GLib.IdleHandler (HideCursor));
 				hide_cursor_delay.Start ();
@@ -211,7 +209,7 @@ namespace FSpot {
 		private Gdk.Cursor empty_cursor;
 		private bool HideCursor ()
 		{
-			if (View.InPanMotion) {
+			if (view.InPanMotion) {
 				return false;
 			}
 
@@ -219,13 +217,13 @@ namespace FSpot {
 				empty_cursor = GdkUtils.CreateEmptyCursor (GdkWindow.Display);
 
 			this.GdkWindow.Cursor = empty_cursor;
-			View.GdkWindow.Cursor = empty_cursor;
+			view.GdkWindow.Cursor = empty_cursor;
 			return false;
 		}
 
 		private void ShowCursor ()
 		{
-			View.PointerMode = PointerMode.Scroll;
+			view.PointerMode = PointerMode.Scroll;
 			this.GdkWindow.Cursor = null;
 		}
 
@@ -286,7 +284,7 @@ namespace FSpot {
 				active = (sender as ToggleAction).Active;
 
 			if (info == null) {
-				info = new InfoOverlay (this, View.Item);
+				info = new InfoOverlay (this, view.Item);
 			}
 
 			info.Visibility = active ?
@@ -310,7 +308,11 @@ namespace FSpot {
 			}
 		}
 
-		public PhotoImageView View { get; private set; }
+		public PhotoImageView View {
+			get {
+				return view;
+			}
+		}
 
 		private void HandleButtonPressEvent (object sender, Gtk.ButtonPressEventArgs args)
 		{
@@ -363,10 +365,10 @@ namespace FSpot {
 				InfoAction (info_button, null);
 				return true;
 			case Gdk.Key.bracketleft:
-				new RotateLeftAction (View.Item).Activate ();
+				new RotateLeftAction (view.Item).Activate ();
 				return true;
 			case Gdk.Key.bracketright:
-				new RotateRightAction (View.Item).Activate ();
+				new RotateRightAction (view.Item).Activate ();
 				return true;
 			}
 
diff --git a/src/Clients/MainApp/FSpot/GroupAdaptor.cs b/src/Clients/MainApp/FSpot/GroupAdaptor.cs
index 1f1828b..e7c0c4f 100644
--- a/src/Clients/MainApp/FSpot/GroupAdaptor.cs
+++ b/src/Clients/MainApp/FSpot/GroupAdaptor.cs
@@ -30,6 +30,7 @@
 //
 
 using FSpot.Core;
+using FSpot.Utils;
 
 namespace FSpot {
 	public interface ILimitable {
diff --git a/src/Clients/MainApp/FSpot/GroupSelector.cs b/src/Clients/MainApp/FSpot/GroupSelector.cs
index 2498f28..e9e172c 100644
--- a/src/Clients/MainApp/FSpot/GroupSelector.cs
+++ b/src/Clients/MainApp/FSpot/GroupSelector.cs
@@ -30,13 +30,11 @@
 //
 
 using System;
-
 using Mono.Unix;
-
 using Gtk;
 using Gdk;
 using GLib;
-
+using FSpot.Core;
 using FSpot.Utils;
 using FSpot.Widgets;
 
@@ -296,16 +294,14 @@ namespace FSpot {
 		{
 			x -= BoxX (0);
 			position = (int) (x / BoxWidth);
-			bool result = true;
-
 			if (position < 0) {
 				position = 0;
-				result = false;
+				return false;
 			} else if (position >= box_counts.Length) {
 				position = box_counts.Length -1;
-				result = false;
+				return false;
 			}
-			return result;
+			return true;
 		}
 
 		private bool BoxHit (double x, double y, out int position)
@@ -593,7 +589,10 @@ namespace FSpot {
 					}
 				}
 				get {
-					return Dragging ? drag_offset : 0;
+					if (Dragging)
+						return drag_offset;
+					else
+						return 0;
 				}
 			}
 
@@ -619,7 +618,10 @@ namespace FSpot {
 
 			protected bool PositionValid (int position)
 			{
-				return position >= 0 && position <= selector.box_counts.Length - 1;
+				if (position < 0 || position > selector.box_counts.Length - 1)
+					return false;
+
+				return true;
 			}
 
 			public virtual void UpdateDrag (double x, double y)
@@ -694,7 +696,7 @@ namespace FSpot {
 					return;
 
 				Rectangle then = Bounds ();
-				this.Position = position;
+				this.position = position;
 				Rectangle now = Bounds ();
 
 				if (selector.Visible) {
@@ -707,7 +709,12 @@ namespace FSpot {
 					PositionChanged ();
 			}
 
-			public int Position { get; private set; }
+			private int position;
+			public int Position {
+				get {
+					return position;
+				}
+			}
 
 			public abstract void Draw (Rectangle area);
 
@@ -1110,7 +1117,6 @@ namespace FSpot {
 			if (event_window != null)
 				event_window.MoveResize (action.X, action.Y, action.Width, action.Height);
 
-			// FIXME: What?!?!?!
 			this.Offset = this.Offset;
 
 			UpdateButtons ();
@@ -1170,5 +1176,7 @@ namespace FSpot {
 			Mode = RangeType.Min;
 			UpdateButtons ();
 		}
+
+		public GroupSelector (IntPtr raw) : base (raw) {}
 	}
 }
diff --git a/src/Clients/MainApp/FSpot/InfoOverlay.cs b/src/Clients/MainApp/FSpot/InfoOverlay.cs
index 471597a..665a56a 100644
--- a/src/Clients/MainApp/FSpot/InfoOverlay.cs
+++ b/src/Clients/MainApp/FSpot/InfoOverlay.cs
@@ -32,7 +32,6 @@
 //
 
 using Gtk;
-
 using FSpot.Core;
 using FSpot.Widgets;
 
diff --git a/src/Clients/MainApp/FSpot/ItemAction.cs b/src/Clients/MainApp/FSpot/ItemAction.cs
index 3dad05c..ce377c6 100644
--- a/src/Clients/MainApp/FSpot/ItemAction.cs
+++ b/src/Clients/MainApp/FSpot/ItemAction.cs
@@ -31,13 +31,11 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
 using Gtk;
-
 using Mono.Unix;
-
 using FSpot.Core;
+using FSpot.Filters;
+using System;
 using FSpot.UI.Dialog;
 
 namespace FSpot {
diff --git a/src/Clients/MainApp/FSpot/JobStore.cs b/src/Clients/MainApp/FSpot/JobStore.cs
index f8fa1f3..ca50335 100644
--- a/src/Clients/MainApp/FSpot/JobStore.cs
+++ b/src/Clients/MainApp/FSpot/JobStore.cs
@@ -29,14 +29,14 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System.Collections;
+using System.IO;
 using System;
-
 using Banshee.Kernel;
-
-using FSpot.Core;
-using FSpot.Database;
 using FSpot.Jobs;
-
+using FSpot.Database;
+using FSpot;
+using FSpot.Core;
 using Hyena;
 using Hyena.Data.Sqlite;
 
@@ -71,6 +71,8 @@ namespace FSpot {
     				if (Finished != null)
     					Finished (this, new EventArgs ());
     				break;
+    			default:
+    				break;
     			}
     		}
     	}
@@ -78,9 +80,12 @@ namespace FSpot {
     	public void Run ()
     	{
     		Status = JobStatus.Running;
-    		Status = Execute () ? JobStatus.Finished : JobStatus.Failed;
+    		if (Execute ())
+    			Status = JobStatus.Finished;
+    		else
+    			Status = JobStatus.Failed;
     	}
-
+    
     	protected abstract bool Execute ();
     }
 
@@ -188,7 +193,7 @@ namespace FSpot {
     	{
     		RemoveFromCache (item);
     
-    		if (item.Persistent)
+    		if ((item as Job).Persistent)
     			Database.Execute (new HyenaSqliteCommand ("DELETE FROM jobs WHERE id = ?", item.Id));
     
     		EmitRemoved (item);
diff --git a/src/Clients/MainApp/FSpot/Literal.cs b/src/Clients/MainApp/FSpot/Literal.cs
index 136c77a..df2a168 100644
--- a/src/Clients/MainApp/FSpot/Literal.cs
+++ b/src/Clients/MainApp/FSpot/Literal.cs
@@ -33,17 +33,15 @@
 // This has to do with Finding photos based on tags
 // http://mail.gnome.org/archives/f-spot-list/2005-November/msg00053.html
 // http://bugzilla-attachments.gnome.org/attachment.cgi?id=54566
-
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Text;
-
-using FSpot.Core;
-
-using Gdk;
-using Gtk;
-
 using Mono.Unix;
+using Gtk;
+using Gdk;
+using Hyena;
+using FSpot.Core;
 
 namespace FSpot
 {
diff --git a/src/Clients/MainApp/FSpot/MainWindow.cs b/src/Clients/MainApp/FSpot/MainWindow.cs
index be55a41..378f2db 100644
--- a/src/Clients/MainApp/FSpot/MainWindow.cs
+++ b/src/Clients/MainApp/FSpot/MainWindow.cs
@@ -30,7 +30,10 @@
 //
 
 using System;
+using System.Text;
 using System.Linq;
+using System.IO;
+using System.Collections;
 using System.Collections.Generic;
 
 using Gdk;
@@ -41,7 +44,9 @@ using Mono.Unix;
 
 using Hyena;
 using Hyena.Widgets;
+using Banshee.Kernel;
 
+using FSpot;
 using FSpot.Core;
 using FSpot.Database;
 using FSpot.Extensions;
@@ -206,20 +211,20 @@ namespace FSpot
 		public MainSelection Selection { get; private set; }
 		public InfoBox InfoBox { get; private set; }
 
-		private static readonly TargetList iconSourceTargetList = new TargetList();
-		private static readonly TargetList iconDestTargetList = new TargetList();
+        private static TargetList iconSourceTargetList = new TargetList();
+        private static TargetList iconDestTargetList = new TargetList();
 
-		static MainWindow()
-		{
-			iconSourceTargetList.AddTargetEntry(DragDropTargets.PhotoListEntry);
-			iconSourceTargetList.AddTargetEntry(DragDropTargets.TagQueryEntry);
-			iconSourceTargetList.AddUriTargets((uint)DragDropTargets.TargetType.UriList);
-			iconSourceTargetList.AddTargetEntry(DragDropTargets.RootWindowEntry);
+        static MainWindow()
+        {
+            iconSourceTargetList.AddTargetEntry(DragDropTargets.PhotoListEntry);
+            iconSourceTargetList.AddTargetEntry(DragDropTargets.TagQueryEntry);
+            iconSourceTargetList.AddUriTargets((uint)DragDropTargets.TargetType.UriList);
+            iconSourceTargetList.AddTargetEntry(DragDropTargets.RootWindowEntry);
 
-			iconDestTargetList.AddTargetEntry(DragDropTargets.PhotoListEntry);
-			iconDestTargetList.AddTargetEntry(DragDropTargets.TagListEntry);
-			iconDestTargetList.AddUriTargets((uint)DragDropTargets.TargetType.UriList);
-		}
+            iconDestTargetList.AddTargetEntry(DragDropTargets.PhotoListEntry);
+            iconDestTargetList.AddTargetEntry(DragDropTargets.TagListEntry);
+            iconDestTargetList.AddUriTargets((uint)DragDropTargets.TargetType.UriList);
+        }
 
 		//
 		// Constructor
@@ -565,17 +570,22 @@ namespace FSpot
 		}
 
 		private Photo CurrentPhoto {
-			get
-			{
+			get {
 				int active = ActiveIndex ();
-				return active >= 0 ? query[active] as Photo : null;
+				if (active >= 0)
+					return query [active] as Photo;
+				else
+					return null;
 			}
 		}
 
 		// Index into the PhotoQuery.  If -1, no photo is selected or multiple photos are selected.
 		private int ActiveIndex ()
 		{
-			return Selection.Count == 1 ? SelectedIds() [0] : PHOTO_IDX_NONE;
+			if (Selection.Count == 1)
+				return SelectedIds() [0];
+			else
+				return PHOTO_IDX_NONE;
 		}
 
 		// Switching mode.
@@ -669,14 +679,16 @@ namespace FSpot
 
 		private void HandleExportActivated (object o, EventArgs e)
 		{
-			FSpot.Extensions.ExportMenuItemNode.SelectedImages = () => new PhotoList(SelectedPhotos());
+			FSpot.Extensions.ExportMenuItemNode.SelectedImages = delegate () {return new PhotoList (SelectedPhotos ()); };
 		}
 
 		private void HandleDbItemsChanged (object sender, DbItemEventArgs<Photo> args)
 		{
-			foreach (Photo p in args.Items.Where(p => p != null).Where(p => write_metadata))
-			{
-				FSpot.Jobs.SyncMetadataJob.Create (Database.Jobs, p);
+			foreach (Photo p in args.Items) {
+				if (p == null)
+					continue;
+				if (write_metadata)
+					FSpot.Jobs.SyncMetadataJob.Create (Database.Jobs, p);
 			}
 
 			if (args is PhotoEventArgs && (args as PhotoEventArgs).Changes.TimeChanged)
@@ -711,8 +723,8 @@ namespace FSpot
 				case ModeType.IconView:
 					ids = icon_view.Selection.Ids;
 					break;
-				case ModeType.PhotoView:
 				default:
+				case ModeType.PhotoView:
 					if (photo_view.Item.IsValid)
 						ids = new int [] { photo_view.Item.Index };
 					break;
@@ -761,7 +773,7 @@ namespace FSpot
 			{
 				switch (win.ViewMode) {
 				case ModeType.PhotoView:
-					return item == win.photo_view.Item.Current;
+					return item == win.photo_view.Item.Current ? true : false;
 				case ModeType.IconView:
 					return win.icon_view.Selection.Contains (item);
 				}
@@ -871,9 +883,9 @@ namespace FSpot
 		// Selection Interface
 		//
 
-		private Photo [] SelectedPhotos (ICollection<int> selected_ids)
+		private Photo [] SelectedPhotos (int [] selected_ids)
 		{
-			Photo [] photo_list = new Photo [selected_ids.Count];
+			Photo [] photo_list = new Photo [selected_ids.Length];
 
 			int i = 0;
 			foreach (int num in selected_ids)
@@ -1094,14 +1106,19 @@ namespace FSpot
 		void HandleIconViewDragDataGet (object sender, DragDataGetArgs args)
 		{
 			if (args.Info == (uint)DragDropTargets.TargetType.UriList) {
-				var uris = from p in SelectedPhotos () select p.DefaultVersion.Uri;
+                var uris = from p in SelectedPhotos () select p.DefaultVersion.Uri;
 				args.SelectionData.SetUriListData (new UriList (uris), args.Context.Targets[0]);
+				return;
 			}
-			else if (args.Info == DragDropTargets.PhotoListEntry.Info) {
+
+			if (args.Info == DragDropTargets.PhotoListEntry.Info) {
 				args.SelectionData.SetPhotosData (SelectedPhotos (), args.Context.Targets[0]);
+				return;
 			}
-			else if (args.Info == DragDropTargets.RootWindowEntry.Info) {
+
+			if (args.Info == DragDropTargets.RootWindowEntry.Info) {
 				HandleSetAsBackgroundCommand (null, null);
+				return;
 			}
 		}
 
@@ -1120,11 +1137,15 @@ namespace FSpot
 		{
 			// Drag'n drop import.
 			var controller = new ImportController (false);
-			controller.StatusEvent += (evnt) => ThreadAssist.ProxyToMain (() => {
-			        if (evnt == ImportEvent.ImportFinished && controller.PhotosImported > 0)
-			                query.RollSet = new RollSet (Database.Rolls.GetRolls (1));
-			        }
-			);
+			controller.StatusEvent += (evnt) => {
+				ThreadAssist.ProxyToMain (() => {
+					if (evnt == ImportEvent.ImportFinished) {
+						if (controller.PhotosImported > 0) {
+							query.RollSet = new RollSet (Database.Rolls.GetRolls (1));
+						}
+					}
+				});
+			};
 
 			var source = new MultiFileImportSource (list.ToArray ());
 			controller.ActiveSource = source;
@@ -1153,8 +1174,11 @@ namespace FSpot
 		{
 			var controller = new ImportController (true);
 			controller.StatusEvent += (evnt) => {
-				if (evnt == ImportEvent.ImportFinished && controller.PhotosImported > 0)
+				if (evnt == ImportEvent.ImportFinished) {
+					if (controller.PhotosImported > 0) {
 						query.RollSet = new RollSet (Database.Rolls.GetRolls (1));
+					}
+				}
 			};
 			var import_window = new ImportDialog (controller, Window);
 			import_window.Show ();
@@ -1170,7 +1194,7 @@ namespace FSpot
 				// drag events use the viewport.  Owen sends his regrets.
 				//
 				int item = icon_view.CellAtPosition (args.X + (int) icon_view.Hadjustment.Value,
-									 args.Y + (int) icon_view.Vadjustment.Value);
+								     args.Y + (int) icon_view.Vadjustment.Value);
 
 				//Console.WriteLine ("Drop cell = {0} ({1},{2})", item, args.X, args.Y);
 				if (item >= 0) {
@@ -1201,7 +1225,7 @@ namespace FSpot
 
 			if (args.Info == DragDropTargets.PhotoListEntry.Info) {
 				int p_item = icon_view.CellAtPosition (args.X + (int) icon_view.Hadjustment.Value,
-									 args.Y + (int) icon_view.Vadjustment.Value);
+								     args.Y + (int) icon_view.Vadjustment.Value);
 
 				if (p_item >= 0) {
 					if (icon_view.Selection.Contains (p_item)) //We don't want to reparent ourselves!
@@ -1411,9 +1435,10 @@ namespace FSpot
 
 		public void HandleTagMenuActivate (object sender, EventArgs args)
 		{
-			// We have a Gtk.Action for UI menus, so the "Edit > Remove tag" item needs special treatment
-			MenuItem parent = sender as MenuItem ?? uimanager.GetWidget("/ui/menubar1/edit2/remove_tag") as MenuItem;
-			
+
+			MenuItem parent = sender as MenuItem;
+			if (parent == null) // We have a Gtk.Action for UI menus, so the "Edit > Remove tag" item needs special treatment
+				parent = uimanager.GetWidget("/ui/menubar1/edit2/remove_tag") as MenuItem;
 			if (parent != null && parent.Submenu is PhotoTagMenu) {
 				PhotoTagMenu menu = (PhotoTagMenu) parent.Submenu;
 				menu.Populate (SelectedPhotos ());
@@ -1718,7 +1743,7 @@ namespace FSpot
 
 			// Translators, The singular case will never happen here.
 			string header = Catalog.GetPluralString ("Merge the selected tag",
-										"Merge the {0} selected tags?", tags.Length);
+									    "Merge the {0} selected tags?", tags.Length);
 			header = String.Format (header, tags.Length);
 
 			// If a tag with children tags is selected for merging, we
@@ -2080,8 +2105,8 @@ namespace FSpot
 
 			Photo[] photos = SelectedPhotos();
 			string header = Catalog.GetPluralString ("Delete the selected photo permanently?",
-										"Delete the {0} selected photos permanently?",
-										photos.Length);
+									    "Delete the {0} selected photos permanently?",
+									    photos.Length);
 			header = String.Format (header, photos.Length);
 			string msg = Catalog.GetPluralString ("This deletes all versions of the selected photo from your drive.",
 									 "This deletes all versions of the selected photos from your drive.",
@@ -2123,8 +2148,8 @@ namespace FSpot
 				return;
 
 			string header = Catalog.GetPluralString ("Remove the selected photo from F-Spot?",
-										"Remove the {0} selected photos from F-Spot?",
-										photos.Length);
+									    "Remove the {0} selected photos from F-Spot?",
+									    photos.Length);
 
 			header = String.Format (header, photos.Length);
 			string msg = Catalog.GetString("If you remove photos from the F-Spot catalog all tag information will be lost. The photos remain on your computer and can be imported into F-Spot again.");
@@ -2236,9 +2261,9 @@ namespace FSpot
 									   e.Tag.Name.Replace ("_", "__"));
 
 					HigMessageDialog md = new HigMessageDialog (main_window, DialogFlags.DestroyWithParent,
-											Gtk.MessageType.Error, ButtonsType.Ok,
-											error_msg,
-											error_desc);
+										    Gtk.MessageType.Error, ButtonsType.Ok,
+										    error_msg,
+										    error_desc);
 					md.Run ();
 					md.Destroy ();
 				}
@@ -2286,40 +2311,40 @@ namespace FSpot
 				return;
 			}
 
-			TargetList targetList = new TargetList();
-			targetList.AddTextTargets((uint)DragDropTargets.TargetType.PlainText);
-			targetList.AddUriTargets((uint)DragDropTargets.TargetType.UriList);
-			targetList.Add(
-						   DragDropTargets.CopyFilesEntry.Target,
-						   (uint)DragDropTargets.CopyFilesEntry.Flags,
-						   (uint)DragDropTargets.CopyFilesEntry.Info);
+            TargetList targetList = new TargetList();
+            targetList.AddTextTargets((uint)DragDropTargets.TargetType.PlainText);
+            targetList.AddUriTargets((uint)DragDropTargets.TargetType.UriList);
+            targetList.Add(
+                           DragDropTargets.CopyFilesEntry.Target,
+                           (uint)DragDropTargets.CopyFilesEntry.Flags,
+                           (uint)DragDropTargets.CopyFilesEntry.Info);
 
-			// use eager evaluation, because we want to copy the photos which are currently selected ...
-			var uris = new UriList (from p in SelectedPhotos () select p.DefaultVersion.Uri);
-			var paths = String.Join (" ",
-									 (from p in SelectedPhotos ()
-									  select p.DefaultVersion.Uri.LocalPath).ToArray ()
-									 );
+            // use eager evaluation, because we want to copy the photos which are currently selected ...
+            var uris = new UriList (from p in SelectedPhotos () select p.DefaultVersion.Uri);
+            var paths = String.Join (" ",
+                                     (from p in SelectedPhotos ()
+                                      select p.DefaultVersion.Uri.LocalPath).ToArray ()
+                                     );
 
-			clipboard.SetWithData ((TargetEntry[])targetList, delegate (Clipboard clip, SelectionData data, uint info) {
+            clipboard.SetWithData ((TargetEntry[])targetList, delegate (Clipboard clip, SelectionData data, uint info) {
 
-				if (info == (uint)DragDropTargets.TargetType.PlainText) {
-					data.Text = paths;
-					return;
-				}
+                if (info == (uint)DragDropTargets.TargetType.PlainText) {
+                    data.Text = paths;
+                    return;
+                }
 
-				if (info == (uint)DragDropTargets.TargetType.UriList) {
-					 data.SetUriListData (uris);
-					return;
-				}
+                if (info == (uint)DragDropTargets.TargetType.UriList) {
+                     data.SetUriListData (uris);
+                    return;
+                }
 
-				if (info == DragDropTargets.CopyFilesEntry.Info) {
-					data.SetCopyFiles (uris);
-					return;
-				}
+                if (info == DragDropTargets.CopyFilesEntry.Info) {
+                    data.SetCopyFiles (uris);
+                    return;
+                }
 
-				Log.DebugFormat ("Unknown Selection Data Target (info: {0})", info);
-			}, delegate {});
+                Log.DebugFormat ("Unknown Selection Data Target (info: {0})", info);
+            }, delegate {});
 
 			primary.Text = paths;
 		}
@@ -2461,10 +2486,7 @@ namespace FSpot
 
 						if (photo != null)
 							JumpTo (query.IndexOf (photo));
-					} catch (Exception ex)
-					{
-						Log.DebugException(ex);
-					}
+					} catch (Exception) {}
 				}
 
 				icon_view.GrabFocus ();
@@ -2500,7 +2522,7 @@ namespace FSpot
 
 		void UpdateForVersionChange (IPhotoVersion version)
 		{
-			IPhotoVersionable versionable = CurrentPhoto;
+			IPhotoVersionable versionable = CurrentPhoto as IPhotoVersionable;
 
 			if (versionable != null) {
 				versionable.SetDefaultVersion (version);
@@ -2590,7 +2612,7 @@ namespace FSpot
 			// account for All and separator menu items
 			item_pos -= 2;
 
-			FSpot.Term parent_term = FSpot.LogicWidget.Root.SubTerms [item_pos];
+			FSpot.Term parent_term = (FSpot.Term) FSpot.LogicWidget.Root.SubTerms [item_pos];
 
 			if (FSpot.LogicWidget.Box != null) {
 				FSpot.Literal after = parent_term.Last as FSpot.Literal;
@@ -2638,8 +2660,8 @@ namespace FSpot
 				versions_submenu.VersionChanged += delegate (PhotoVersionMenu menu) { UpdateForVersionChange (menu.Version);};
 				version_menu_item.Submenu = versions_submenu;
 
-				sharpen.Sensitive = (ViewMode != ModeType.IconView);
-				loupe_menu_item.Sensitive = (ViewMode != ModeType.IconView);
+				sharpen.Sensitive = (ViewMode == ModeType.IconView ? false : true);
+				loupe_menu_item.Sensitive = (ViewMode == ModeType.IconView ? false : true);
 			}
 
 			set_as_background.Sensitive = single_active;
@@ -2687,7 +2709,7 @@ namespace FSpot
 					rl_button.Sensitive = true;
 
 					string msg = Catalog.GetPluralString ("Rotate selected photo left",
-										  "Rotate selected photos left", Selection.Count);
+									      "Rotate selected photos left", Selection.Count);
 					rl_button.TooltipText = String.Format (msg, Selection.Count);
 				}
 			}
@@ -2700,7 +2722,7 @@ namespace FSpot
 					rr_button.Sensitive = true;
 
 					string msg = Catalog.GetPluralString ("Rotate selected photo right",
-										  "Rotate selected photos right", Selection.Count);
+									      "Rotate selected photos right", Selection.Count);
 					rr_button.TooltipText = String.Format (msg, Selection.Count);
 				}
 			}
@@ -2763,8 +2785,8 @@ namespace FSpot
 
 			// FIXME add cancel button? add help button?
 			HigMessageDialog hmd = new HigMessageDialog(GetToplevel (sender), DialogFlags.DestroyWithParent,
-									MessageType.Question, Gtk.ButtonsType.None,
-									header, msg);
+								    MessageType.Question, Gtk.ButtonsType.None,
+								    header, msg);
 
 			hmd.AddButton (Gtk.Stock.No, Gtk.ResponseType.No, false);
 			//hmd.AddButton (Gtk.Stock.Cancel, Gtk.ResponseType.Cancel, false);
@@ -2834,7 +2856,7 @@ namespace FSpot
 
 			try {
 				application.LaunchUris (uri_list, null);
-			} catch (Exception) {
+			} catch (System.Exception) {
 				Log.ErrorFormat ("Failed to lauch {0}", application.Name);
 			}
 		}
@@ -2873,12 +2895,12 @@ namespace FSpot
 		// "Activate" means the user pressed the enter key
 		public void HandleTagEntryActivate (object sender, EventArgs args)
 		{
-			   if (ViewMode == ModeType.IconView) {
-				   icon_view.GrabFocus ();
-			   } else {
-				   photo_view.QueueDraw ();
-				   photo_view.View.GrabFocus ();
-			   }
+		       if (ViewMode == ModeType.IconView) {
+			       icon_view.GrabFocus ();
+		       } else {
+			       photo_view.QueueDraw ();
+			       photo_view.View.GrabFocus ();
+		       }
 		}
 
 		private void HandleTagEntryTagsAttached (object o, string [] new_tags)
@@ -2901,7 +2923,7 @@ namespace FSpot
 			foreach (string tagname in new_tags) {
 				Tag t = Database.Tags.GetTagByName (tagname);
 				if (t == null) {
-					t = Database.Tags.CreateCategory (default_category, tagname, true);
+					t = Database.Tags.CreateCategory (default_category, tagname, true) as Tag;
 					Database.Tags.Commit (t);
 				}
 				tags [i++] = t;
@@ -2983,6 +3005,7 @@ namespace FSpot
 			}
 
 			query_widget.ShowBar ();
+			return;
 		}
 
 		public void HideSidebar (object o, EventArgs args) {
diff --git a/src/Clients/MainApp/FSpot/MetaStore.cs b/src/Clients/MainApp/FSpot/MetaStore.cs
index b3ad4b8..643bcb9 100644
--- a/src/Clients/MainApp/FSpot/MetaStore.cs
+++ b/src/Clients/MainApp/FSpot/MetaStore.cs
@@ -29,12 +29,14 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gdk;
+using Gtk;
+using System.Collections;
+using System.IO;
 using System;
-
+using FSpot;
 using FSpot.Core;
 using FSpot.Database;
-
-using Hyena;
 using Hyena.Data.Sqlite;
 
 namespace FSpot {
@@ -101,10 +103,7 @@ namespace FSpot {
     		try {
     			string id = Database.Query<string> ("SELECT id FROM tags WHERE name = 'Hidden'");
     			Create (hidden, id);
-    		} catch (Exception ex)
-    		{
-    			Log.DebugException(ex);
-    		}
+    		} catch (Exception) {}
     	}
     
     	private void LoadAllItems ()
diff --git a/src/Clients/MainApp/FSpot/Photo.cs b/src/Clients/MainApp/FSpot/Photo.cs
index 801df1e..78c64aa 100644
--- a/src/Clients/MainApp/FSpot/Photo.cs
+++ b/src/Clients/MainApp/FSpot/Photo.cs
@@ -34,12 +34,14 @@ using Hyena;
 using System;
 using System.IO;
 using System.Linq;
+using System.Collections;
 using System.Collections.Generic;
 
 using Mono.Unix;
 
 using FSpot.Core;
 using FSpot.Utils;
+using FSpot.Platform;
 using FSpot.Imaging;
 
 namespace FSpot
@@ -213,7 +215,7 @@ namespace FSpot
 
 		public bool VersionNameExists (string version_name)
 		{
-			return Versions.Any(v => v.Name == version_name);
+			return Versions.Where ((v) => v.Name == version_name).Any ();
 		}
 
 		public SafeUri VersionUri (uint version_id)
@@ -222,7 +224,10 @@ namespace FSpot
 				return null;
 
 			PhotoVersion v = versions [version_id];
-			return v != null ? v.Uri : null;
+			if (v != null)
+				return v.Uri;
+
+			return null;
 		}
 
 		public IPhotoVersion DefaultVersion {
@@ -261,7 +266,7 @@ namespace FSpot
 					var versionUri = VersionUri (version);
 
 					PixbufUtils.CreateDerivedVersion (DefaultVersion.Uri, versionUri, 95, buffer);
-					GetVersion (version).ImportMD5 = HashUtils.GenerateMD5 (VersionUri (version));
+					(GetVersion (version) as PhotoVersion).ImportMD5 = HashUtils.GenerateMD5 (VersionUri (version));
 					DefaultVersionId = version;
 				} catch (System.Exception e) {
 					Log.Exception (e);
@@ -275,12 +280,17 @@ namespace FSpot
 			return version;
 		}
 
+		public void DeleteVersion (uint version_id)
+		{
+			DeleteVersion (version_id, false, false);
+		}
+
 		public void DeleteVersion (uint version_id, bool remove_original)
 		{
 			DeleteVersion (version_id, remove_original, false);
 		}
 
-		public void DeleteVersion (uint version_id, bool remove_original = false, bool keep_file = false)
+		public void DeleteVersion (uint version_id, bool remove_original, bool keep_file)
 		{
 			if (version_id == OriginalVersionId && !remove_original)
 				throw new Exception ("Cannot delete original version");
@@ -355,8 +365,6 @@ namespace FSpot
 			uint count = 0;
 			GLib.FileEnumerator list = directory.EnumerateChildren ("standard::name",
 				GLib.FileQueryInfoFlags.None, null);
-
-			// FIXME: There has to be a better way to do this?
 			foreach (var item in list) {
 				count++;
 			}
@@ -365,10 +373,15 @@ namespace FSpot
 
 		public uint CreateVersion (string name, uint base_version_id, bool create)
 		{
-			return CreateVersion (name, null, base_version_id, create);
+			return CreateVersion (name, null, base_version_id, create, false);
 		}
 
-		private uint CreateVersion (string name, string extension, uint base_version_id, bool create, bool is_protected = false)
+		private uint CreateVersion (string name, string extension, uint base_version_id, bool create)
+		{
+			return CreateVersion (name, extension, base_version_id, create, false);
+		}
+
+		private uint CreateVersion (string name, string extension, uint base_version_id, bool create, bool is_protected)
 		{
 			extension = extension ?? VersionUri (base_version_id).GetExtension ();
 			SafeUri new_base_uri = DefaultVersion.BaseUri;
@@ -478,7 +491,7 @@ namespace FSpot
 				throw new Exception ("This name already exists");
 
 
-			GetVersion (version_id).Name = new_name;
+			(GetVersion (version_id) as PhotoVersion).Name = new_name;
 			changes.ChangeVersion (version_id);
 
 			//TODO: rename file too ???
@@ -539,14 +552,14 @@ namespace FSpot
 			changes.RemoveTag (tag);
 		}
 
-		public void RemoveTag (IEnumerable<Tag> taglist)
+		public void RemoveTag (Tag []taglist)
 		{
 			foreach (Tag tag in taglist) {
 				RemoveTag (tag);
 			}
 		}
 
-		public void RemoveCategory (IEnumerable<Tag> taglist)
+		public void RemoveCategory (IList<Tag> taglist)
 		{
 			foreach (Tag tag in taglist) {
 				Category cat = tag as Category;
@@ -590,20 +603,21 @@ namespace FSpot
 		{
 			if (this.GetType () == obj.GetType ())
 				return this.Compare((Photo)obj);
-
-			if (obj is DateTime)
+			else if (obj is DateTime)
 				return this.time.CompareTo ((DateTime)obj);
-
-			throw new Exception ("Object must be of type Photo");
+			else
+				throw new Exception ("Object must be of type Photo");
 		}
 
 		public int CompareTo (Photo photo)
 		{
 			int result = Id.CompareTo (photo.Id);
 
-			return result == 0 ? 0 : this.Compare (photo);
+			if (result == 0)
+				return 0;
+			else
+				return (this as IPhoto).Compare (photo);
 		}
-
 		#endregion
 	}
 }
diff --git a/src/Clients/MainApp/FSpot/PhotoLoader.cs b/src/Clients/MainApp/FSpot/PhotoLoader.cs
index 1f0bfe1..6d281b2 100644
--- a/src/Clients/MainApp/FSpot/PhotoLoader.cs
+++ b/src/Clients/MainApp/FSpot/PhotoLoader.cs
@@ -34,7 +34,9 @@
 using System;
 
 using FSpot.Core;
+using FSpot.Platform;
 using FSpot.Imaging;
+using Hyena;
 
 namespace FSpot {
 	[Obsolete ("nuke or rename this")]
diff --git a/src/Clients/MainApp/FSpot/PhotoPopup.cs b/src/Clients/MainApp/FSpot/PhotoPopup.cs
index db4e089..13f5ec9 100644
--- a/src/Clients/MainApp/FSpot/PhotoPopup.cs
+++ b/src/Clients/MainApp/FSpot/PhotoPopup.cs
@@ -52,14 +52,19 @@ namespace FSpot
 		{
 		}
 
-		public PhotoPopup (Widget parent)
+		public PhotoPopup (Widget parent) : base ()
 		{
 			foreach (MenuNode node in AddinManager.GetExtensionNodes ("/FSpot/Menus/PhotoPopup"))
 				Append (node.GetMenuItem (parent));
 			ShowAll ();
 		}
 
-		public void Activate (Widget toplevel, Gdk.EventButton eb = null)
+		public void Activate (Widget toplevel)
+		{
+			Activate (toplevel, null);
+		}
+
+		public void Activate (Widget toplevel, Gdk.EventButton eb)
 		{
 			if (eb != null)
 				Popup (null, null, null, eb.Button, eb.Time);
diff --git a/src/Clients/MainApp/FSpot/PhotoQuery.cs b/src/Clients/MainApp/FSpot/PhotoQuery.cs
index b592280..3f9c4af 100644
--- a/src/Clients/MainApp/FSpot/PhotoQuery.cs
+++ b/src/Clients/MainApp/FSpot/PhotoQuery.cs
@@ -34,11 +34,10 @@
 //
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
-
 using FSpot.Core;
 using FSpot.Query;
-
 using Hyena;
 
 namespace FSpot {
@@ -85,6 +84,7 @@ namespace FSpot {
 		}
 
 		PhotoCache cache;
+		private PhotoStore store;
 		private Term terms;
 
 		static int query_count = 0;
@@ -101,8 +101,8 @@ namespace FSpot {
 		// Constructor
 		public PhotoQuery (PhotoStore store, params IQueryCondition [] conditions)
 		{
-			this.Store = store;
-			this.Store.ItemsChanged += MarkChanged;
+			this.store = store;
+			this.store.ItemsChanged += MarkChanged;
 			cache = new PhotoCache (store, temp_table);
 			reverse_lookup = new Dictionary<uint, int> ();
 			SetCondition (OrderByTime.OrderByTimeDesc);
@@ -116,7 +116,7 @@ namespace FSpot {
 		public int Count {
 			get {
 				if (count < 0)
-					count = Store.Count (temp_table);
+					count = store.Count (temp_table);
 				return count;
 			}
 		}
@@ -135,7 +135,7 @@ namespace FSpot {
 
 		[Obsolete ("DO NOT USE THIS, IT'S TOO SLOW")]
 		public Photo [] Photos {
-			get { return Store.QueryFromTemp (temp_table); }
+			get { return store.QueryFromTemp (temp_table); }
 		}
 
 		[Obsolete ("DO NOT USE Items on PhotoQuery")]
@@ -143,12 +143,18 @@ namespace FSpot {
 			get { throw new NotImplementedException (); }
 		}
 
-		public PhotoStore Store { get; private set; }
+		public PhotoStore Store {
+			get { return store; }
+		}
 
 		//Query Conditions
 		private Dictionary<Type, IQueryCondition> conditions;
 		private Dictionary<Type, IQueryCondition> Conditions {
-			get { return conditions ?? (conditions = new Dictionary<Type, IQueryCondition>()); }
+			get {
+				if (conditions == null)
+					conditions = new Dictionary<Type, IQueryCondition> ();
+				return conditions;
+			}
 		}
 
 		internal bool SetCondition (IQueryCondition condition)
@@ -290,10 +296,10 @@ namespace FSpot {
 				i++;
 			}
 
-			Store.QueryToTemp (temp_table, condition_array);
+			store.QueryToTemp (temp_table, condition_array);
 
 			count = -1;
-			cache = new PhotoCache (Store, temp_table);
+			cache = new PhotoCache (store, temp_table);
 			reverse_lookup = new Dictionary<uint,int> ();
 
 			if (Changed != null)
@@ -306,10 +312,10 @@ namespace FSpot {
 		{
 			if (photo == null || !(photo is Photo))
 				return -1;
-			return Store.IndexOf (temp_table, photo as Photo);
+			return store.IndexOf (temp_table, photo as Photo);
 		}
 
-		private int [] IndicesOf (IEnumerable<DbItem> dbitems)
+		private int [] IndicesOf (DbItem [] dbitems)
 		{
 			uint timer = Log.DebugTimerStart ();
 			List<int> indices = new List<int> ();
@@ -323,7 +329,7 @@ namespace FSpot {
 			}
 
 			if (items_to_search.Count > 0)
-				indices.AddRange (Store.IndicesOf (temp_table, items_to_search.ToArray ()));
+				indices.AddRange (store.IndicesOf (temp_table, items_to_search.ToArray ()));
 			Log.DebugTimerPrint (timer, "IndicesOf took {0}");
 			return indices.ToArray ();
 		}
@@ -349,7 +355,7 @@ namespace FSpot {
 					//the item we're looking for is not in the cache
 					//a binary search could take up to ln2 (N/cache.SIZE) request
 					//lets reduce that number to 1
-					return Store.IndexOf (temp_table, date, asc);
+					return store.IndexOf (temp_table, date, asc);
 
 				int comp = this [mid].Time.CompareTo (date);
 				if (!asc && comp < 0 || asc && comp > 0)
@@ -378,7 +384,7 @@ namespace FSpot {
 				to_commit.Add (this [index] as Photo);
 				reverse_lookup [(this [index] as Photo).Id] = index;
 			}
-			Store.Commit (to_commit.ToArray ());
+			store.Commit (to_commit.ToArray ());
 		}
 
 		private void MarkChanged (object sender, DbItemEventArgs<Photo> args)
diff --git a/src/Clients/MainApp/FSpot/PhotoStore.cs b/src/Clients/MainApp/FSpot/PhotoStore.cs
index 5ff99ae..79f823f 100644
--- a/src/Clients/MainApp/FSpot/PhotoStore.cs
+++ b/src/Clients/MainApp/FSpot/PhotoStore.cs
@@ -33,914 +33,919 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
+using Gdk;
+using Gtk;
+
+using Mono.Unix;
+
+using System.Collections;
 using System.Collections.Generic;
+using System.IO;
 using System.Text;
+using System;
 
+using FSpot;
 using FSpot.Core;
 using FSpot.Database;
 using FSpot.Jobs;
 using FSpot.Query;
+using FSpot.Utils;
+using FSpot.Platform;
 
 using Hyena;
 using Hyena.Data.Sqlite;
 
-using Mono.Unix;
-
 namespace FSpot {
-		public class PhotoStore : DbStore<Photo> {
-		 public int TotalPhotos {
-				 get {
-						 IDataReader reader = Database.Query("SELECT COUNT(*) AS photo_count FROM photos");
-						 reader.Read ();
-						 int total = Convert.ToInt32 (reader ["photo_count"]);
-						 reader.Dispose ();
-						 return total;
-				 }
-		 }
-		
-		 // FIXME this is a hack.  Since we don't have Gnome.ThumbnailFactory.SaveThumbnail() in
-		 // GTK#, and generate them by ourselves directly with Gdk.Pixbuf, we have to make sure here
-		 // that the "large" thumbnail directory exists.
-		 private static void EnsureThumbnailDirectory ()
-		 {
-				 string large_thumbnail_file_name_template = Gnome.Thumbnail.PathForUri ("file:///boo", Gnome.ThumbnailSize.Large);
-				 string large_thumbnail_directory_path = System.IO.Path.GetDirectoryName (large_thumbnail_file_name_template);
-		
-				 if (! System.IO.File.Exists (large_thumbnail_directory_path))
-						 System.IO.Directory.CreateDirectory (large_thumbnail_directory_path);
-		 }
+        public class PhotoStore : DbStore<Photo> {
+         public int TotalPhotos {
+                 get {
+                         IDataReader reader = Database.Query("SELECT COUNT(*) AS photo_count FROM photos");
+                         reader.Read ();
+                         int total = Convert.ToInt32 (reader ["photo_count"]);
+                         reader.Dispose ();
+                         return total;
+                 }
+         }
+        
+         // FIXME this is a hack.  Since we don't have Gnome.ThumbnailFactory.SaveThumbnail() in
+         // GTK#, and generate them by ourselves directly with Gdk.Pixbuf, we have to make sure here
+         // that the "large" thumbnail directory exists.
+         private static void EnsureThumbnailDirectory ()
+         {
+                 string large_thumbnail_file_name_template = Gnome.Thumbnail.PathForUri ("file:///boo", Gnome.ThumbnailSize.Large);
+                 string large_thumbnail_directory_path = System.IO.Path.GetDirectoryName (large_thumbnail_file_name_template);
+        
+                 if (! System.IO.File.Exists (large_thumbnail_directory_path))
+                         System.IO.Directory.CreateDirectory (large_thumbnail_directory_path);
+         }
 
-		 // Constructor
-		 public PhotoStore (FSpotDatabaseConnection database, bool is_new)
-				 : base (database, false)
-		 {
-				 EnsureThumbnailDirectory ();
-		
-				 if (! is_new)
-						 return;
-		
-				 Database.Execute (
-						 "CREATE TABLE photos (\n" +
-						 "       id                      INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, \n" +
-						 "       time                    INTEGER NOT NULL, \n" +
-						 "       base_uri                STRING NOT NULL, \n" +
-					 "   filename                STRING NOT NULL, \n" +
-						 "       description             TEXT NOT NULL, \n" +
-						 "       roll_id                 INTEGER NOT NULL, \n" +
-						 "       default_version_id      INTEGER NOT NULL, \n" +
-						 "       rating                  INTEGER NULL \n" +
-						 ")");
-		
-				 Database.Execute (
-						 "CREATE TABLE photo_tags (\n" +
-						 "       photo_id        INTEGER, \n" +
-						 "       tag_id          INTEGER, \n" +
-						 "       UNIQUE (photo_id, tag_id)\n" +
-						 ")");
-		
-				 Database.Execute (
-						 "CREATE TABLE photo_versions (\n"+
-						 "       photo_id        INTEGER, \n" +
-						 "       version_id      INTEGER, \n" +
-						 "       name            STRING, \n" +
-						 "       base_uri                STRING NOT NULL, \n" +
-					 "   filename                STRING NOT NULL, \n" +
-						 "       import_md5              TEXT NULL, \n" +
-						 "       protected       BOOLEAN, \n" +
-						 "       UNIQUE (photo_id, version_id)\n" +
-						 ")");
-		
-				 Database.Execute ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
-				 Database.Execute ("CREATE INDEX idx_photo_versions_import_md5 ON photo_versions(import_md5)");
-				 Database.Execute ("CREATE INDEX idx_photos_roll_id ON photos(roll_id)");
-		 }
-		
-		 public bool HasDuplicate (IPhoto item) {
-				 var uri = item.DefaultVersion.Uri;
-		
-				 // Check if the exact given uri already exists.
-				 var query = "SELECT COUNT(*) AS count FROM photo_versions WHERE base_uri = ? AND filename = ?";
-				 var reader = Database.Query (new HyenaSqliteCommand (query, uri.GetBaseUri ().ToString (), uri.GetFilename ()));
-				 reader.Read ();
-				 int count = Convert.ToInt32 (reader ["count"]);
-				 reader.Dispose();
-				 if (count > 0)
-						 return true;
-		
-				 // Check by MD5. Won't import if there are photos with the same ImportMD5.
-				 string hash = item.DefaultVersion.ImportMD5;
-				 var condition = new ConditionWrapper (String.Format ("import_md5 = \"{0}\"", hash));
-				 var dupes_by_hash = Count ("photo_versions", condition);
-				 if (dupes_by_hash > 0)
-						 return true;
-		
-				 // This is a very lame check to overcome the lack of duplicate detect data right after transition.
-				 //
-				 // Does filename matching if there are files with no hash for the original version.
-				 condition = new ConditionWrapper ("version_id = 1 AND (import_md5 = \"\" OR import_md5 IS NULL)");
-				 var have_no_hashes = Count ("photo_versions", condition);
-				 if (have_no_hashes > 0) {
-						 var name = uri.GetFilename ();
-						 DateTime? time = null;
-		
-						 // Look for a filename match.
-						 reader = Database.Query (new HyenaSqliteCommand ("SELECT photos.id, photos.time, pv.filename FROM photos LEFT JOIN photo_versions AS pv ON pv.photo_id = photos.id WHERE pv.filename = ?", name));
-						 while (reader.Read ()) {
-								 Log.DebugFormat ("Found one possible duplicate for {0}", reader["filename"].ToString ());
-								 if (!time.HasValue) {
-										 // Only read time when needed
-										 time = item.Time;
-								 }
-		
-								 if (reader["time"].ToString () == DateTimeUtil.FromDateTime (time.Value).ToString ()) {
-										 Log.Debug ("Skipping duplicate", uri);
-		
-										 // Schedule a hash calculation job on the existing file.
-										 CalculateHashJob.Create (FSpot.App.Instance.Database.Jobs, Convert.ToUInt32 (reader["id"]));
-		
-										 return true;
-								 }
-						 }
-						 reader.Dispose ();
-				 }
-		
-				 // No matches
-				 return false;
-		 }
-		
-		 public Photo CreateFrom (IPhoto item, uint roll_id)
-		 {
-				 Photo photo;
-		
-				 long unix_time = DateTimeUtil.FromDateTime (item.Time);
-				 string description = item.Description ?? String.Empty;
-		
-				 uint id = (uint) Database.Execute (
-						 new HyenaSqliteCommand (
-								 "INSERT INTO photos (time, base_uri, filename, description, roll_id, default_version_id, rating) "      +
-								 "VALUES (?, ?, ?, ?, ?, ?, ?)",
-								 unix_time,
-								 item.DefaultVersion.BaseUri.ToString (),
-								 item.DefaultVersion.Filename,
-								 description,
-								 roll_id,
-								 Photo.OriginalVersionId,
-								 "0"
-						 )
-				 );
-		
-				 photo = new Photo (id, unix_time);
-				 photo.AddVersionUnsafely (Photo.OriginalVersionId, item.DefaultVersion.BaseUri, item.DefaultVersion.Filename, item.DefaultVersion.ImportMD5, Catalog.GetString ("Original"), true);
-				 photo.AllVersionsLoaded = true;
-		
-				 InsertVersion (photo, photo.DefaultVersion as PhotoVersion);
-				 EmitAdded (photo);
-				 return photo;
-		 }
-		
-		 private void InsertVersion (Photo photo, PhotoVersion version)
-		 {
-				 Database.Execute (new HyenaSqliteCommand (
-						 "INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, import_md5) " +
-						 "VALUES (?, ?, ?, ?, ?, ?, ?)",
-						 photo.Id,
-						 version.VersionId,
-						 version.Name,
-						 version.BaseUri.ToString (),
-						 version.Filename,
-						 version.IsProtected,
-						 (version.ImportMD5 != String.Empty ? version.ImportMD5 : null)));
-		 }
-		
-		
-		 private void GetVersions (Photo photo)
-		 {
-				 IDataReader reader = Database.Query(
-						 new HyenaSqliteCommand("SELECT version_id, name, base_uri, filename, import_md5, protected " +
-									   "FROM photo_versions " +
-									   "WHERE photo_id = ?",
-									   photo.Id
-						 )
-				 );
-		
-				 while (reader.Read ()) {
-						 uint version_id = Convert.ToUInt32 (reader ["version_id"]);
-						 string name = reader["name"].ToString ();
-						 var base_uri = new SafeUri (reader ["base_uri"].ToString (), true);
-						 var filename = reader ["filename"].ToString ();
-						 string import_md5 = reader["import_md5"] != null ? reader ["import_md5"].ToString () : null;
-						 bool is_protected = Convert.ToBoolean (reader["protected"]);
-		
-						 photo.AddVersionUnsafely (version_id, base_uri, filename, import_md5, name, is_protected);
-				 }
-				 reader.Dispose();
-		 }
-		
-		 private void GetTags (Photo photo)
-		 {
-				 IDataReader reader = Database.Query(new HyenaSqliteCommand("SELECT tag_id FROM photo_tags WHERE photo_id = ?", photo.Id));
-		
-				 while (reader.Read ()) {
-						 uint tag_id = Convert.ToUInt32 (reader ["tag_id"]);
-						 Tag tag = App.Instance.Database.Tags.Get (tag_id);
-						 photo.AddTagUnsafely (tag);
-				 }
-				 reader.Dispose();
-		 }
-		
-		 private void GetAllVersions  (string ids) {
-				 IDataReader reader = Database.Query ("SELECT photo_id, version_id, name, base_uri, filename, import_md5, protected FROM photo_versions WHERE photo_id IN " + ids);
-		
-				 while (reader.Read ()) {
-						 uint id = Convert.ToUInt32 (reader ["photo_id"]);
-						 Photo photo = LookupInCache (id);
-		
-						 if (photo == null) {
-								 //Console.WriteLine ("Photo {0} not found", id);
-								 continue;
-						 }
-		
-						 if (photo.AllVersionsLoaded) {
-								 //Console.WriteLine ("Photo {0} already Loaded", photo);
-								 continue;
-						 }
-		
-						 if (reader ["version_id"] != null) {
-								 uint version_id = Convert.ToUInt32 (reader ["version_id"]);
-								 string name = reader["name"].ToString ();
-								 var base_uri = new SafeUri (reader ["base_uri"].ToString (), true);
-								 var filename = reader ["filename"].ToString ();
-								 string import_md5 = reader["import_md5"] != null ? reader ["import_md5"].ToString () : null;
-								 bool is_protected = Convert.ToBoolean (reader["protected"]);
-		
-								 photo.AddVersionUnsafely (version_id, base_uri, filename, import_md5, name, is_protected);
-						 }
-		
-						 /*
-						 string directory_path = null;
-						 if (reader [3] != null)
-								 directory_path = reader [3].ToString ();
-						 System.Console.WriteLine ("directory_path = {0}", directory_path);
-						 */
-				 }
-				 reader.Dispose();
-		 }
-		
-		 private void GetAllTags (string ids) {
-				 IDataReader reader = Database.Query ("SELECT photo_id, tag_id FROM photo_tags WHERE photo_id IN " + ids);
-		
-				 while (reader.Read ()) {
-						 uint id = Convert.ToUInt32 (reader ["photo_id"]);
-						 Photo photo = LookupInCache (id);
-		
-						 if (photo == null) {
-								 //Console.WriteLine ("Photo {0} not found", id);
-								 continue;
-						 }
-		
-						 if (photo.AllVersionsLoaded) {
-								 //Console.WriteLine ("Photo {0} already Loaded", photo.Id);
-								 continue;
-						 }
-		
-						 if (reader [1] != null) {
-								 uint tag_id = Convert.ToUInt32 (reader ["tag_id"]);
-								 Tag tag = App.Instance.Database.Tags.Get (tag_id) as Tag;
-								 photo.AddTagUnsafely (tag);
-						 }
-				 }
-				 reader.Dispose();
-		 }
-		
-		 public override Photo Get (uint id)
-		 {
-				 Photo photo = LookupInCache (id);
-				 if (photo != null)
-						 return photo;
-		
-				 IDataReader reader = Database.Query(
-						 new HyenaSqliteCommand("SELECT time, description, roll_id, default_version_id, rating " +
-									   "FROM photos " +
-									   "WHERE id = ?", id
-									  )
-				 );
-		
-				 if (reader.Read ()) {
-						 photo = new Photo (id, Convert.ToInt64 (reader ["time"]));
-						 photo.Description = reader["description"].ToString ();
-						 photo.RollId = Convert.ToUInt32 (reader["roll_id"]);
-						 photo.DefaultVersionId = Convert.ToUInt32 (reader["default_version_id"]);
-						 photo.Rating = Convert.ToUInt32 (reader ["rating"]);
-						 AddToCache (photo);
-				 }
-				 reader.Dispose();
-		
-				 if (photo == null)
-						 return null;
-		
-				 GetTags (photo);
-				 GetVersions (photo);
-		
-				 return photo;
-		 }
-		
-		 public Photo GetByUri (SafeUri uri)
-		 {
-				 Photo photo = null;
-		
-				 var base_uri = uri.GetBaseUri ();
-				 var filename = uri.GetFilename ();
-		
-				 IDataReader reader =
-						 Database.Query (new HyenaSqliteCommand ("SELECT id, time, description, roll_id, default_version_id, rating " +
-														" FROM photos " +
-														" LEFT JOIN photo_versions AS pv ON photos.id = pv.photo_id" +
-														" WHERE (photos.base_uri = ? AND photos.filename = ?)" +
-														" OR (pv.base_uri = ? AND pv.filename = ?)",
-														base_uri.ToString (), filename,
-														base_uri.ToString (), filename));
-		
-				 if (reader.Read ()) {
-						 photo = new Photo (Convert.ToUInt32 (reader ["id"]),
-											Convert.ToInt64 (reader ["time"]));
-		
-						 photo.Description = reader["description"].ToString ();
-						 photo.RollId = Convert.ToUInt32 (reader["roll_id"]);
-						 photo.DefaultVersionId = Convert.ToUInt32 (reader["default_version_id"]);
-						 photo.Rating = Convert.ToUInt32 (reader ["rating"]);
-				 }
-		
-				 reader.Dispose();
-		
-				 if (photo == null)
-						 return null;
-		
-				 Photo cached = LookupInCache (photo.Id);
-		
-				 if (cached != null)
-						 return cached;
-		
-				 AddToCache (photo);
-		
-				 GetTags (photo);
-				 GetVersions (photo);
-		
-				 return photo;
-		 }
-		
-		 public void Remove (Tag []tags)
-		 {
-				 Photo [] photos = Query (tags, String.Empty, null, null);
-		
-				 foreach (Photo photo in photos)
-						 photo.RemoveCategory (tags);
-				 Commit (photos);
-		
-				 foreach (Tag tag in tags)
-						 App.Instance.Database.Tags.Remove (tag);
-		
-		 }
-		
-		 public void Remove (Photo []items)
-		 {
-				 EmitRemoved (items);
-		
-				 List<string> query_builder = new List<string> (items.Length);
-				 foreach (Photo t in items)
-				 {
-				 	query_builder.Add (String.Format ("{0}", t.Id));
-				 	RemoveFromCache (t);
-				 }
-		
-				 String id_list = String.Join ("','", query_builder.ToArray ());
-				 Database.Execute (String.Format ("DELETE FROM photos WHERE id IN ('{0}')", id_list));
-				 Database.Execute (String.Format ("DELETE FROM photo_tags WHERE photo_id IN ('{0}')", id_list));
-				 Database.Execute (String.Format ("DELETE FROM photo_versions WHERE photo_id IN ('{0}')", id_list));
-		
-		 }
-		
-		 public override void Remove (Photo item)
-		 {
-				 Remove (new Photo [] { item });
-		 }
-		
-		 public override void Commit (Photo item)
-		 {
-				 Commit (new Photo [] {item});
-		 }
-		
-		 public void Commit (Photo [] items)
-		 {
-				 uint timer = Log.DebugTimerStart ();
-				 // Only use a transaction for multiple saves. Avoids recursive transactions.
-		
-				 // TODO.
-				 bool use_transactions = true; //!Database.InTransaction && items.Length > 1;
-		
-				 //if (use_transactions)
-				 //      Database.BeginTransaction ();
-		
-				 // FIXME: this hack is used, because HyenaSqliteConnection does not support
-				 // the InTransaction propery
-				 try {
-						 Database.BeginTransaction ();
-				 } catch {
-						 use_transactions = false;
-				 }
-		
-				 PhotosChanges changes = new PhotosChanges ();
-				 foreach (DbItem item in items)
-						 changes |= Update ((Photo)item);
-		
-				 if (use_transactions)
-						 Database.CommitTransaction ();
-		
-				 EmitChanged (items, new PhotoEventArgs (items, changes));
-				 Log.DebugTimerPrint (timer, "Commit took {0}");
-		 }
-		
-		 private PhotoChanges Update (Photo photo) {
-				 PhotoChanges changes = photo.Changes;
-				 // Update photo.
-				 if (changes.DescriptionChanged || changes.DefaultVersionIdChanged || changes.TimeChanged || changes.UriChanged || changes.RatingChanged || changes.MD5SumChanged )
-		
-						 Database.Execute (
-								 new HyenaSqliteCommand (
-										 "UPDATE photos " +
-										 "SET description = ?, " +
-										 "    default_version_id = ?, " +
-										 "    time = ?, " +
-										 "    base_uri = ?, " +
-										 "    filename = ?, " +
-										 "    rating = ? " +
-										 "WHERE id = ? ",
-										 photo.Description,
-										 photo.DefaultVersionId,
-										 DateTimeUtil.FromDateTime (photo.Time),
-										 photo.VersionUri (Photo.OriginalVersionId).GetBaseUri ().ToString (),
-										 photo.VersionUri (Photo.OriginalVersionId).GetFilename (),
-										 String.Format ("{0}", photo.Rating),
-										 photo.Id
-								 )
-						 );
-		
-				 // Update tags.
-				 if (changes.TagsRemoved != null)
-						 foreach (Tag tag in changes.TagsRemoved)
-								 Database.Execute (new HyenaSqliteCommand (
-										 "DELETE FROM photo_tags WHERE photo_id = ? AND tag_id = ?",
-										 photo.Id,
-										 tag.Id));
-		
-				 if (changes.TagsAdded != null)
-						 foreach (Tag tag in changes.TagsAdded)
-								 Database.Execute (new HyenaSqliteCommand (
-										 "INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " +
-										 "VALUES (?, ?)",
-										 photo.Id,
-										 tag.Id));
-		
-				 // Update versions.
-				 if (changes.VersionsRemoved != null)
-						 foreach (uint version_id in changes.VersionsRemoved)
-								 Database.Execute (new HyenaSqliteCommand (
-										 "DELETE FROM photo_versions WHERE photo_id = ? AND version_id = ?",
-										 photo.Id,
-										 version_id));
-		
-				 if (changes.VersionsAdded != null)
-						 foreach (uint version_id in changes.VersionsAdded) {
-								 PhotoVersion version = photo.GetVersion (version_id);
-								 InsertVersion (photo, version);
-						 }
-				 if (changes.VersionsModified != null)
-						 foreach (uint version_id in changes.VersionsModified) {
-								 PhotoVersion version = photo.GetVersion (version_id);
-								 Database.Execute (new HyenaSqliteCommand (
-										 "UPDATE photo_versions SET name = ?, " +
-										 "base_uri = ?, filename = ?, protected = ?, import_md5 = ? " +
-										 "WHERE photo_id = ? AND version_id = ?",
-										 version.Name,
-										 version.BaseUri.ToString (),
-										 version.Filename,
-										 version.IsProtected,
-										 (version.ImportMD5 != String.Empty ? version.ImportMD5 : null),
-										 photo.Id,
-										 version_id));
-						 }
-				 photo.Changes = null;
-				 return changes;
-		 }
-		
-		 public void CalculateMD5Sum (Photo photo) {
-				 foreach (uint version_id in photo.VersionIds) {
-						 PhotoVersion version = photo.GetVersion (version_id);
-		
-					 // FIXME: What's this for?  Pointless?
-						 // Don't overwrite MD5 sums that are already calculated.
-						 if (!string.IsNullOrEmpty(version.ImportMD5))
-								 continue;
-		
-						 string version_md5_sum = HashUtils.GenerateMD5 (version.Uri);
-						 version.ImportMD5 = version_md5_sum;
-						 photo.Changes.ChangeVersion (version_id);
-				 }
-		
-				 Commit (photo);
-		 }
-		
-		 public int Count (string table_name, params IQueryCondition [] conditions)
-		 {
-				 StringBuilder query_builder = new StringBuilder ("SELECT COUNT(*) AS count FROM " + table_name + " ");
-				 bool where_added = false;
-				 foreach (IQueryCondition condition in conditions) {
-					 // FIXME: What's the point of this?
-						 if (condition == null)
-								 continue;
-						 if (condition is IOrderCondition)
-								 continue;
-						 query_builder.Append (where_added ? " AND " : " WHERE ");
-						 query_builder.Append (condition.SqlClause ());
-						 where_added = true;
-				 }
-		
-				 IDataReader reader = Database.Query (query_builder.ToString());
-				 reader.Read ();
-				 int count = Convert.ToInt32 (reader ["count"]);
-				 reader.Dispose();
-				 return count;
-		 }
-		
-		 public int [] IndicesOf (string table_name, uint [] items)
-		 {
-				 StringBuilder query_builder = new StringBuilder ("SELECT ROWID AS row_id FROM ");
-				 query_builder.Append (table_name);
-				 query_builder.Append (" WHERE id IN (");
-				 for (int i = 0; i < items.Length; i++) {
-						 query_builder.Append (items [i]);
-						 query_builder.Append ((i != items.Length - 1) ? ", " : ")" );
-				 }
-				 return IndicesOf (query_builder.ToString ());
-		 }
-		
-		 public int IndexOf (string table_name, Photo photo)
-		 {
-				 string query = String.Format ("SELECT ROWID AS row_id FROM {0} WHERE id = {1}", table_name, photo.Id);
-				 return IndexOf (query);
-		 }
-		
-		 public int IndexOf (string table_name, DateTime time, bool asc)
-		 {
-				 string query = String.Format ("SELECT ROWID AS row_id FROM {0} WHERE time {2} {1} ORDER BY time {3} LIMIT 1",
-								 table_name,
-								 DateTimeUtil.FromDateTime (time),
-								 asc ? ">=" : "<=",
-								 asc ? "ASC" : "DESC");
-				 return IndexOf (query);
-		 }
-		
-		 private int IndexOf (string query)
-		 {
-				 uint timer = Log.DebugTimerStart ();
-				 IDataReader reader = Database.Query (query);
-				 int index = - 1;
-				 if (reader.Read ())
-						 index = Convert.ToInt32 (reader ["row_id"]);
-				 reader.Dispose();
-				 Log.DebugTimerPrint (timer, "IndexOf took {0} : " + query);
-				 return index - 1; //ROWID starts counting at 1
-		 }
-		
-		 int [] IndicesOf (string query)
-		 {
-				 uint timer = Log.DebugTimerStart ();
-				 List<int> list = new List<int> ();
-				 IDataReader reader = Database.Query (query);
-				 while (reader.Read ())
-						 list.Add (Convert.ToInt32 (reader ["row_id"]) - 1);
-				 reader.Dispose ();
-				 Log.DebugTimerPrint (timer, "IndicesOf took {0} : " + query);
-				 return list.ToArray ();
-		 }
-		
-		 public Dictionary<int,int[]> PhotosPerMonth (params IQueryCondition [] conditions)
-		 {
-				 uint timer = Log.DebugTimerStart ();
-				 Dictionary<int, int[]> val = new Dictionary<int, int[]> ();
-		
-				 //Sqlite is way more efficient querying to a temp then grouping than grouping at once
-				 Database.Execute ("DROP TABLE IF EXISTS population");
-				 StringBuilder query_builder = new StringBuilder ("CREATE TEMPORARY TABLE population AS SELECT strftime('%Y%m', datetime(time, 'unixepoch')) AS month FROM photos");
-				 bool where_added = false;
-				 foreach (IQueryCondition condition in conditions) {
-						 if (condition == null)
-								 continue;
-						 if (condition is IOrderCondition)
-								 continue;
-						 query_builder.Append (where_added ? " AND " : " WHERE ");
-						 query_builder.Append (condition.SqlClause ());
-						 where_added = true;
-				 }
-				 Database.Execute (query_builder.ToString ());
+         // Constructor
+         public PhotoStore (FSpotDatabaseConnection database, bool is_new)
+                 : base (database, false)
+         {
+                 EnsureThumbnailDirectory ();
+        
+                 if (! is_new)
+                         return;
+        
+                 Database.Execute (
+                         "CREATE TABLE photos (\n" +
+                         "       id                      INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, \n" +
+                         "       time                    INTEGER NOT NULL, \n" +
+                         "       base_uri                STRING NOT NULL, \n" +
+                     "   filename                STRING NOT NULL, \n" +
+                         "       description             TEXT NOT NULL, \n" +
+                         "       roll_id                 INTEGER NOT NULL, \n" +
+                         "       default_version_id      INTEGER NOT NULL, \n" +
+                         "       rating                  INTEGER NULL \n" +
+                         ")");
+        
+                 Database.Execute (
+                         "CREATE TABLE photo_tags (\n" +
+                         "       photo_id        INTEGER, \n" +
+                         "       tag_id          INTEGER, \n" +
+                         "       UNIQUE (photo_id, tag_id)\n" +
+                         ")");
+        
+                 Database.Execute (
+                         "CREATE TABLE photo_versions (\n"+
+                         "       photo_id        INTEGER, \n" +
+                         "       version_id      INTEGER, \n" +
+                         "       name            STRING, \n" +
+                         "       base_uri                STRING NOT NULL, \n" +
+                     "   filename                STRING NOT NULL, \n" +
+                         "       import_md5              TEXT NULL, \n" +
+                         "       protected       BOOLEAN, \n" +
+                         "       UNIQUE (photo_id, version_id)\n" +
+                         ")");
+        
+                 Database.Execute ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
+                 Database.Execute ("CREATE INDEX idx_photo_versions_import_md5 ON photo_versions(import_md5)");
+                 Database.Execute ("CREATE INDEX idx_photos_roll_id ON photos(roll_id)");
+         }
+        
+         public bool HasDuplicate (IPhoto item) {
+                 var uri = item.DefaultVersion.Uri;
+        
+                 // Check if the exact given uri already exists.
+                 var query = "SELECT COUNT(*) AS count FROM photo_versions WHERE base_uri = ? AND filename = ?";
+                 var reader = Database.Query (new HyenaSqliteCommand (query, uri.GetBaseUri ().ToString (), uri.GetFilename ()));
+                 reader.Read ();
+                 int count = Convert.ToInt32 (reader ["count"]);
+                 reader.Dispose();
+                 if (count > 0)
+                         return true;
+        
+                 // Check by MD5. Won't import if there are photos with the same ImportMD5.
+                 string hash = item.DefaultVersion.ImportMD5;
+                 var condition = new ConditionWrapper (String.Format ("import_md5 = \"{0}\"", hash));
+                 var dupes_by_hash = Count ("photo_versions", condition);
+                 if (dupes_by_hash > 0)
+                         return true;
+        
+                 // This is a very lame check to overcome the lack of duplicate detect data right after transition.
+                 //
+                 // Does filename matching if there are files with no hash for the original version.
+                 condition = new ConditionWrapper ("version_id = 1 AND (import_md5 = \"\" OR import_md5 IS NULL)");
+                 var have_no_hashes = Count ("photo_versions", condition);
+                 if (have_no_hashes > 0) {
+                         var name = uri.GetFilename ();
+                         DateTime? time = null;
+        
+                         // Look for a filename match.
+                         reader = Database.Query (new HyenaSqliteCommand ("SELECT photos.id, photos.time, pv.filename FROM photos LEFT JOIN photo_versions AS pv ON pv.photo_id = photos.id WHERE pv.filename = ?", name));
+                         while (reader.Read ()) {
+                                 Log.DebugFormat ("Found one possible duplicate for {0}", reader["filename"].ToString ());
+                                 if (!time.HasValue) {
+                                         // Only read time when needed
+                                         time = item.Time;
+                                 }
+        
+                                 if (reader["time"].ToString () == DateTimeUtil.FromDateTime (time.Value).ToString ()) {
+                                         Log.Debug ("Skipping duplicate", uri);
+        
+                                         // Schedule a hash calculation job on the existing file.
+                                         CalculateHashJob.Create (FSpot.App.Instance.Database.Jobs, Convert.ToUInt32 (reader["id"]));
+        
+                                         return true;
+                                 }
+                         }
+                         reader.Dispose ();
+                 }
+        
+                 // No matches
+                 return false;
+         }
+        
+         public Photo CreateFrom (IPhoto item, uint roll_id)
+         {
+                 Photo photo;
+        
+                 long unix_time = DateTimeUtil.FromDateTime (item.Time);
+                 string description = item.Description ?? String.Empty;
+        
+                 uint id = (uint) Database.Execute (
+                         new HyenaSqliteCommand (
+                                 "INSERT INTO photos (time, base_uri, filename, description, roll_id, default_version_id, rating) "      +
+                                 "VALUES (?, ?, ?, ?, ?, ?, ?)",
+                                 unix_time,
+                                 item.DefaultVersion.BaseUri.ToString (),
+                                 item.DefaultVersion.Filename,
+                                 description,
+                                 roll_id,
+                                 Photo.OriginalVersionId,
+                                 "0"
+                         )
+                 );
+        
+                 photo = new Photo (id, unix_time);
+                 photo.AddVersionUnsafely (Photo.OriginalVersionId, item.DefaultVersion.BaseUri, item.DefaultVersion.Filename, item.DefaultVersion.ImportMD5, Catalog.GetString ("Original"), true);
+                 photo.AllVersionsLoaded = true;
+        
+                 InsertVersion (photo, photo.DefaultVersion as PhotoVersion);
+                 EmitAdded (photo);
+                 return photo;
+         }
+        
+         private void InsertVersion (Photo photo, PhotoVersion version)
+         {
+                 Database.Execute (new HyenaSqliteCommand (
+                         "INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, import_md5) " +
+                         "VALUES (?, ?, ?, ?, ?, ?, ?)",
+                         photo.Id,
+                         version.VersionId,
+                         version.Name,
+                         version.BaseUri.ToString (),
+                         version.Filename,
+                         version.IsProtected,
+                         (version.ImportMD5 != String.Empty ? version.ImportMD5 : null)));
+         }
+        
+        
+         private void GetVersions (Photo photo)
+         {
+                 IDataReader reader = Database.Query(
+                         new HyenaSqliteCommand("SELECT version_id, name, base_uri, filename, import_md5, protected " +
+                                       "FROM photo_versions " +
+                                       "WHERE photo_id = ?",
+                                       photo.Id
+                         )
+                 );
+        
+                 while (reader.Read ()) {
+                         uint version_id = Convert.ToUInt32 (reader ["version_id"]);
+                         string name = reader["name"].ToString ();
+                         var base_uri = new SafeUri (reader ["base_uri"].ToString (), true);
+                         var filename = reader ["filename"].ToString ();
+                         string import_md5 = reader["import_md5"] != null ? reader ["import_md5"].ToString () : null;
+                         bool is_protected = Convert.ToBoolean (reader["protected"]);
+        
+                         photo.AddVersionUnsafely (version_id, base_uri, filename, import_md5, name, is_protected);
+                 }
+                 reader.Dispose();
+         }
+        
+         private void GetTags (Photo photo)
+         {
+                 IDataReader reader = Database.Query(new HyenaSqliteCommand("SELECT tag_id FROM photo_tags WHERE photo_id = ?", photo.Id));
+        
+                 while (reader.Read ()) {
+                         uint tag_id = Convert.ToUInt32 (reader ["tag_id"]);
+                         Tag tag = App.Instance.Database.Tags.Get (tag_id) as Tag;
+                         photo.AddTagUnsafely (tag);
+                 }
+                 reader.Dispose();
+         }
+        
+         private void GetAllVersions  (string ids) {
+                 IDataReader reader = Database.Query ("SELECT photo_id, version_id, name, base_uri, filename, import_md5, protected FROM photo_versions WHERE photo_id IN " + ids);
+        
+                 while (reader.Read ()) {
+                         uint id = Convert.ToUInt32 (reader ["photo_id"]);
+                         Photo photo = LookupInCache (id);
+        
+                         if (photo == null) {
+                                 //Console.WriteLine ("Photo {0} not found", id);
+                                 continue;
+                         }
+        
+                         if (photo.AllVersionsLoaded) {
+                                 //Console.WriteLine ("Photo {0} already Loaded", photo);
+                                 continue;
+                         }
+        
+                         if (reader ["version_id"] != null) {
+                                 uint version_id = Convert.ToUInt32 (reader ["version_id"]);
+                                 string name = reader["name"].ToString ();
+                                 var base_uri = new SafeUri (reader ["base_uri"].ToString (), true);
+                                 var filename = reader ["filename"].ToString ();
+                                 string import_md5 = reader["import_md5"] != null ? reader ["import_md5"].ToString () : null;
+                                 bool is_protected = Convert.ToBoolean (reader["protected"]);
+        
+                                 photo.AddVersionUnsafely (version_id, base_uri, filename, import_md5, name, is_protected);
+                         }
+        
+                         /*
+                         string directory_path = null;
+                         if (reader [3] != null)
+                                 directory_path = reader [3].ToString ();
+                         System.Console.WriteLine ("directory_path = {0}", directory_path);
+                         */
+                 }
+                 reader.Dispose();
+         }
+        
+         private void GetAllTags (string ids) {
+                 IDataReader reader = Database.Query ("SELECT photo_id, tag_id FROM photo_tags WHERE photo_id IN " + ids);
+        
+                 while (reader.Read ()) {
+                         uint id = Convert.ToUInt32 (reader ["photo_id"]);
+                         Photo photo = LookupInCache (id);
+        
+                         if (photo == null) {
+                                 //Console.WriteLine ("Photo {0} not found", id);
+                                 continue;
+                         }
+        
+                         if (photo.AllVersionsLoaded) {
+                                 //Console.WriteLine ("Photo {0} already Loaded", photo.Id);
+                                 continue;
+                         }
+        
+                         if (reader [1] != null) {
+                                 uint tag_id = Convert.ToUInt32 (reader ["tag_id"]);
+                                 Tag tag = App.Instance.Database.Tags.Get (tag_id) as Tag;
+                                 photo.AddTagUnsafely (tag);
+                         }
+                 }
+                 reader.Dispose();
+         }
+        
+         public override Photo Get (uint id)
+         {
+                 Photo photo = LookupInCache (id);
+                 if (photo != null)
+                         return photo;
+        
+                 IDataReader reader = Database.Query(
+                         new HyenaSqliteCommand("SELECT time, description, roll_id, default_version_id, rating " +
+                                       "FROM photos " +
+                                       "WHERE id = ?", id
+                                      )
+                 );
+        
+                 if (reader.Read ()) {
+                         photo = new Photo (id, Convert.ToInt64 (reader ["time"]));
+                         photo.Description = reader["description"].ToString ();
+                         photo.RollId = Convert.ToUInt32 (reader["roll_id"]);
+                         photo.DefaultVersionId = Convert.ToUInt32 (reader["default_version_id"]);
+                         photo.Rating = Convert.ToUInt32 (reader ["rating"]);
+                         AddToCache (photo);
+                 }
+                 reader.Dispose();
+        
+                 if (photo == null)
+                         return null;
+        
+                 GetTags (photo);
+                 GetVersions (photo);
+        
+                 return photo;
+         }
+        
+         public Photo GetByUri (SafeUri uri)
+         {
+                 Photo photo = null;
+        
+                 var base_uri = uri.GetBaseUri ();
+                 var filename = uri.GetFilename ();
+        
+                 IDataReader reader =
+                         Database.Query (new HyenaSqliteCommand ("SELECT id, time, description, roll_id, default_version_id, rating " +
+                                                        " FROM photos " +
+                                                        " LEFT JOIN photo_versions AS pv ON photos.id = pv.photo_id" +
+                                                        " WHERE (photos.base_uri = ? AND photos.filename = ?)" +
+                                                        " OR (pv.base_uri = ? AND pv.filename = ?)",
+                                                        base_uri.ToString (), filename,
+                                                        base_uri.ToString (), filename));
+        
+                 if (reader.Read ()) {
+                         photo = new Photo (Convert.ToUInt32 (reader ["id"]),
+                                            Convert.ToInt64 (reader ["time"]));
+        
+                         photo.Description = reader["description"].ToString ();
+                         photo.RollId = Convert.ToUInt32 (reader["roll_id"]);
+                         photo.DefaultVersionId = Convert.ToUInt32 (reader["default_version_id"]);
+                         photo.Rating = Convert.ToUInt32 (reader ["rating"]);
+                 }
+        
+                 reader.Dispose();
+        
+                 if (photo == null)
+                         return null;
+        
+                 Photo cached = LookupInCache (photo.Id);
+        
+                 if (cached != null)
+                         return cached;
+        
+                 AddToCache (photo);
+        
+                 GetTags (photo);
+                 GetVersions (photo);
+        
+                 return photo;
+         }
+        
+         public void Remove (Tag []tags)
+         {
+                 Photo [] photos = Query (tags, String.Empty, null, null);
+        
+                 foreach (Photo photo in photos)
+                         photo.RemoveCategory (tags);
+                 Commit (photos);
+        
+                 foreach (Tag tag in tags)
+                         App.Instance.Database.Tags.Remove (tag);
+        
+         }
+        
+         public void Remove (Photo []items)
+         {
+                 EmitRemoved (items);
+        
+                 List<string> query_builder = new List<string> (items.Length);
+                 for (int i = 0; i < items.Length; i++) {
+                         query_builder.Add (String.Format ("{0}", items[i].Id));
+                         RemoveFromCache (items[i]);
+                 }
+        
+                 String id_list = String.Join ("','", query_builder.ToArray ());
+                 Database.Execute (String.Format ("DELETE FROM photos WHERE id IN ('{0}')", id_list));
+                 Database.Execute (String.Format ("DELETE FROM photo_tags WHERE photo_id IN ('{0}')", id_list));
+                 Database.Execute (String.Format ("DELETE FROM photo_versions WHERE photo_id IN ('{0}')", id_list));
+        
+         }
+        
+         public override void Remove (Photo item)
+         {
+                 Remove (new Photo [] { (Photo)item });
+         }
+        
+         public override void Commit (Photo item)
+         {
+                 Commit (new Photo [] {item});
+         }
+        
+         public void Commit (Photo [] items)
+         {
+                 uint timer = Log.DebugTimerStart ();
+                 // Only use a transaction for multiple saves. Avoids recursive transactions.
+        
+                 // TODO.
+                 bool use_transactions = true; //!Database.InTransaction && items.Length > 1;
+        
+                 //if (use_transactions)
+                 //      Database.BeginTransaction ();
+        
+                 // FIXME: this hack is used, because HyenaSqliteConnection does not support
+                 // the InTransaction propery
+                 try {
+                         Database.BeginTransaction ();
+                 } catch {
+                         use_transactions = false;
+                 }
+        
+                 PhotosChanges changes = new PhotosChanges ();
+                 foreach (DbItem item in items)
+                         changes |= Update ((Photo)item);
+        
+                 if (use_transactions)
+                         Database.CommitTransaction ();
+        
+                 EmitChanged (items, new PhotoEventArgs (items, changes));
+                 Log.DebugTimerPrint (timer, "Commit took {0}");
+         }
+        
+         private PhotoChanges Update (Photo photo) {
+                 PhotoChanges changes = photo.Changes;
+                 // Update photo.
+                 if (changes.DescriptionChanged || changes.DefaultVersionIdChanged || changes.TimeChanged || changes.UriChanged || changes.RatingChanged || changes.MD5SumChanged )
+        
+                         Database.Execute (
+                                 new HyenaSqliteCommand (
+                                         "UPDATE photos " +
+                                         "SET description = ?, " +
+                                         "    default_version_id = ?, " +
+                                         "    time = ?, " +
+                                         "    base_uri = ?, " +
+                                         "    filename = ?, " +
+                                         "    rating = ? " +
+                                         "WHERE id = ? ",
+                                         photo.Description,
+                                         photo.DefaultVersionId,
+                                         DateTimeUtil.FromDateTime (photo.Time),
+                                         photo.VersionUri (Photo.OriginalVersionId).GetBaseUri ().ToString (),
+                                         photo.VersionUri (Photo.OriginalVersionId).GetFilename (),
+                                         String.Format ("{0}", photo.Rating),
+                                         photo.Id
+                                 )
+                         );
+        
+                 // Update tags.
+                 if (changes.TagsRemoved != null)
+                         foreach (Tag tag in changes.TagsRemoved)
+                                 Database.Execute (new HyenaSqliteCommand (
+                                         "DELETE FROM photo_tags WHERE photo_id = ? AND tag_id = ?",
+                                         photo.Id,
+                                         tag.Id));
+        
+                 if (changes.TagsAdded != null)
+                         foreach (Tag tag in changes.TagsAdded)
+                                 Database.Execute (new HyenaSqliteCommand (
+                                         "INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " +
+                                         "VALUES (?, ?)",
+                                         photo.Id,
+                                         tag.Id));
+        
+                 // Update versions.
+                 if (changes.VersionsRemoved != null)
+                         foreach (uint version_id in changes.VersionsRemoved)
+                                 Database.Execute (new HyenaSqliteCommand (
+                                         "DELETE FROM photo_versions WHERE photo_id = ? AND version_id = ?",
+                                         photo.Id,
+                                         version_id));
+        
+                 if (changes.VersionsAdded != null)
+                         foreach (uint version_id in changes.VersionsAdded) {
+                                 PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
+                                 InsertVersion (photo, version);
+                         }
+                 if (changes.VersionsModified != null)
+                         foreach (uint version_id in changes.VersionsModified) {
+                                 PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
+                                 Database.Execute (new HyenaSqliteCommand (
+                                         "UPDATE photo_versions SET name = ?, " +
+                                         "base_uri = ?, filename = ?, protected = ?, import_md5 = ? " +
+                                         "WHERE photo_id = ? AND version_id = ?",
+                                         version.Name,
+                                         version.BaseUri.ToString (),
+                                         version.Filename,
+                                         version.IsProtected,
+                                         (version.ImportMD5 != String.Empty ? version.ImportMD5 : null),
+                                         photo.Id,
+                                         version_id));
+                         }
+                 photo.Changes = null;
+                 return changes;
+         }
+        
+         public void CalculateMD5Sum (Photo photo) {
+                 foreach (uint version_id in photo.VersionIds) {
+                         PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
+        
+                         // Don't overwrite MD5 sums that are already calculated.
+                         if (version.ImportMD5 != String.Empty && version.ImportMD5 != null)
+                                 continue;
+        
+                         string version_md5_sum = HashUtils.GenerateMD5 (version.Uri);
+                         version.ImportMD5 = version_md5_sum;
+                         photo.Changes.ChangeVersion (version_id);
+                 }
+        
+                 Commit (photo);
+         }
+        
+         public int Count (string table_name, params IQueryCondition [] conditions)
+         {
+                 StringBuilder query_builder = new StringBuilder ("SELECT COUNT(*) AS count FROM " + table_name + " ");
+                 bool where_added = false;
+                 foreach (IQueryCondition condition in conditions) {
+                         if (condition == null)
+                                 continue;
+                         if (condition is IOrderCondition)
+                                 continue;
+                         query_builder.Append (where_added ? " AND " : " WHERE ");
+                         query_builder.Append (condition.SqlClause ());
+                         where_added = true;
+                 }
+        
+                 IDataReader reader = Database.Query (query_builder.ToString());
+                 reader.Read ();
+                 int count = Convert.ToInt32 (reader ["count"]);
+                 reader.Dispose();
+                 return count;
+         }
+        
+         public int [] IndicesOf (string table_name, uint [] items)
+         {
+                 StringBuilder query_builder = new StringBuilder ("SELECT ROWID AS row_id FROM ");
+                 query_builder.Append (table_name);
+                 query_builder.Append (" WHERE id IN (");
+                 for (int i = 0; i < items.Length; i++) {
+                         query_builder.Append (items [i]);
+                         query_builder.Append ((i != items.Length - 1) ? ", " : ")" );
+                 }
+                 return IndicesOf (query_builder.ToString ());
+         }
+        
+         public int IndexOf (string table_name, Photo photo)
+         {
+                 string query = String.Format ("SELECT ROWID AS row_id FROM {0} WHERE id = {1}", table_name, photo.Id);
+                 return IndexOf (query);
+         }
+        
+         public int IndexOf (string table_name, DateTime time, bool asc)
+         {
+                 string query = String.Format ("SELECT ROWID AS row_id FROM {0} WHERE time {2} {1} ORDER BY time {3} LIMIT 1",
+                                 table_name,
+                                 DateTimeUtil.FromDateTime (time),
+                                 asc ? ">=" : "<=",
+                                 asc ? "ASC" : "DESC");
+                 return IndexOf (query);
+         }
+        
+         private int IndexOf (string query)
+         {
+                 uint timer = Log.DebugTimerStart ();
+                 IDataReader reader = Database.Query (query);
+                 int index = - 1;
+                 if (reader.Read ())
+                         index = Convert.ToInt32 (reader ["row_id"]);
+                 reader.Dispose();
+                 Log.DebugTimerPrint (timer, "IndexOf took {0} : " + query);
+                 return index - 1; //ROWID starts counting at 1
+         }
+        
+         int [] IndicesOf (string query)
+         {
+                 uint timer = Log.DebugTimerStart ();
+                 List<int> list = new List<int> ();
+                 IDataReader reader = Database.Query (query);
+                 while (reader.Read ())
+                         list.Add (Convert.ToInt32 (reader ["row_id"]) - 1);
+                 reader.Dispose ();
+                 Log.DebugTimerPrint (timer, "IndicesOf took {0} : " + query);
+                 return list.ToArray ();
+         }
+        
+         public Dictionary<int,int[]> PhotosPerMonth (params IQueryCondition [] conditions)
+         {
+                 uint timer = Log.DebugTimerStart ();
+                 Dictionary<int, int[]> val = new Dictionary<int, int[]> ();
+        
+                 //Sqlite is way more efficient querying to a temp then grouping than grouping at once
+                 Database.Execute ("DROP TABLE IF EXISTS population");
+                 StringBuilder query_builder = new StringBuilder ("CREATE TEMPORARY TABLE population AS SELECT strftime('%Y%m', datetime(time, 'unixepoch')) AS month FROM photos");
+                 bool where_added = false;
+                 foreach (IQueryCondition condition in conditions) {
+                         if (condition == null)
+                                 continue;
+                         if (condition is IOrderCondition)
+                                 continue;
+                         query_builder.Append (where_added ? " AND " : " WHERE ");
+                         query_builder.Append (condition.SqlClause ());
+                         where_added = true;
+                 }
+                 Database.Execute (query_builder.ToString ());
 
-				 int minyear = Int32.MaxValue;
-				 int maxyear = Int32.MinValue;
+                 int minyear = Int32.MaxValue;
+                 int maxyear = Int32.MinValue;
 
 		// FIXME: There appears to be a race condition here where it tries to query the population
 		// table before Database.Execute (query_builder.ToString ()); creates it.
-				 IDataReader reader = Database.Query ("SELECT COUNT (*) as count, month from population GROUP BY month");
-				 while (reader.Read ()) {
-						 string yyyymm = reader ["month"].ToString ();
-						 int count = Convert.ToInt32 (reader ["count"]);
-						 int year = Convert.ToInt32 (yyyymm.Substring (0,4));
-						 maxyear = Math.Max (year, maxyear);
-						 minyear = Math.Min (year, minyear);
-						 int month = Convert.ToInt32 (yyyymm.Substring (4));
-						 if (!val.ContainsKey (year))
-								 val.Add (year, new int[12]);
-						 val[year][month-1] = count;
-				 }
-				 reader.Dispose ();
-		
-				 //Fill the blank
-				 for (int i = minyear; i <= maxyear; i++)
-						 if (!val.ContainsKey (i))
-								 val.Add (i, new int[12]);
-		
-				 Log.DebugTimerPrint (timer, "PhotosPerMonth took {0}");
-				 return val;
-		 }
-		
-		 // Queries.
-		 [Obsolete ("drop this, use IQueryCondition correctly instead")]
-		 public Photo [] Query (Tag [] tags) {
-				 return Query (tags, null, null, null, null);
-		 }
-		
-		 private string BuildQuery (params IQueryCondition [] conditions)
-		 {
-				 StringBuilder query_builder = new StringBuilder ("SELECT * FROM photos ");
-		
-				 bool where_added = false;
-				 bool hidden_contained = false;
-				 foreach (IQueryCondition condition in conditions) {
-		
-						 if (condition == null)
-								 continue;
-		
-						 if (condition is HiddenTag)
-								 hidden_contained = true;
-		
-						 if (condition is IOrderCondition)
-								 continue;
-		
-						 string sql_clause = condition.SqlClause ();
-		
-						 if (sql_clause == null || sql_clause.Trim () == String.Empty)
-								 continue;
-						 query_builder.Append (where_added ? " AND " : " WHERE ");
-						 query_builder.Append (sql_clause);
-						 where_added = true;
-				 }
-		
-				 /* if a HiddenTag condition is not explicitly given, we add one */
-				 if ( ! hidden_contained) {
-						 string sql_clause = HiddenTag.HideHiddenTag.SqlClause ();
-		
-						 if (sql_clause != null && sql_clause.Trim () != String.Empty) {
-								 query_builder.Append (where_added ? " AND " : " WHERE ");
-								 query_builder.Append (sql_clause);
-						 }
-				 }
-		
-				 bool order_added = false;
-				 foreach (IQueryCondition condition in conditions) {
-						 if (condition == null)
-								 continue;
-		
-						 if (!(condition is IOrderCondition))
-								 continue;
-		
-						 string sql_clause = condition.SqlClause ();
-		
-						 if (sql_clause == null || sql_clause.Trim () == String.Empty)
-								 continue;
-						 query_builder.Append (order_added ? " , " : "ORDER BY ");
-						 query_builder.Append (sql_clause);
-						 order_added = true;
-				 }
-		
-				 return query_builder.ToString ();
-		 }
-		
-		 public Photo [] Query (params IQueryCondition [] conditions)
-		 {
-				 return Query (BuildQuery (conditions));
-		 }
-		
-		 public void QueryToTemp (string temp_table, params IQueryCondition [] conditions)
-		 {
-				 QueryToTemp (temp_table, BuildQuery (conditions));
-		 }
-		
-		 public void QueryToTemp(string temp_table, string query)
-		 {
-				 uint timer = Log.DebugTimerStart ();
-				 Log.DebugFormat ("Query Started : {0}", query);
-				 Database.BeginTransaction ();
-				 Database.Execute (String.Format ("DROP TABLE IF EXISTS {0}", temp_table));
-				 Database.Execute (String.Format ("CREATE TEMPORARY TABLE {0} AS {1}", temp_table, query));
-				 // For Hyena.Data.Sqlite, we need to call Execute. Calling Query here does fail.
-				 //Database.Query (String.Format ("CREATE TEMPORARY TABLE {0} AS {1}", temp_table, query)).Close ();
-				 Database.CommitTransaction ();
-				 Log.DebugTimerPrint (timer, "QueryToTemp took {0} : " + query);
-		 }
-		
-		 public Photo [] QueryFromTemp (string temp_table)
-		 {
-				 return QueryFromTemp (temp_table, 0, -1);
-		 }
-		
-		 public Photo [] QueryFromTemp (string temp_table, int offset, int limit)
-		 {
-				 return Query (String.Format ("SELECT * FROM {0} LIMIT {1} OFFSET {2}", temp_table, limit, offset));
-		 }
-		
-		 public Photo [] Query (string query)
-		 {
-				 return Query (new HyenaSqliteCommand (query));
-		 }
-		
-		 private Photo [] Query (HyenaSqliteCommand query)
-		 {
-				 uint timer = Log.DebugTimerStart ();
-				 IDataReader reader = Database.Query(query);
-		
-				 List<Photo> new_photos = new List<Photo> ();
-				 List<Photo> query_result = new List<Photo> ();
-				 while (reader.Read ()) {
-						 uint id = Convert.ToUInt32 (reader ["id"]);
-						 Photo photo = LookupInCache (id);
-		
-						 if (photo == null) {
-								 photo = new Photo (id, Convert.ToInt64 (reader ["time"]));
-								 photo.Description = reader["description"].ToString ();
-								 photo.RollId = Convert.ToUInt32 (reader["roll_id"]);
-								 photo.DefaultVersionId = Convert.ToUInt32 (reader["default_version_id"]);
-								 photo.Rating = Convert.ToUInt32 (reader ["rating"]);
-								 new_photos.Add (photo);
-						 }
-		
-						 query_result.Add (photo);
-				 }
-				 reader.Dispose();
-		
-				 bool need_load = false;
-				 string photo_ids = "(";
-				 foreach (Photo photo in new_photos) {
-						 AddToCache (photo);
-						 photo_ids = photo_ids + Convert.ToString(photo.Id) + ",";
-						 need_load |= !photo.AllVersionsLoaded;
-				 }
-		
-				 photo_ids = photo_ids + "-1)";
-		
-				 if (need_load) {
-						 GetAllTags (photo_ids);
-						 GetAllVersions (photo_ids);
-						 foreach (Photo photo in new_photos)
-								 photo.AllVersionsLoaded = true;
-				 } else {
-						 //Console.WriteLine ("Skipped Loading Data");
-				 }
-		
-				 foreach (Photo photo in new_photos)
-						 photo.Changes = null;
-		
-				 Log.DebugTimerPrint (timer, "Query took {0} : " + query.Text);
-				 return query_result.ToArray ();
-		 }
-		
-		 public Photo [] Query (SafeUri uri)
-		 {
-				 string filename = uri.GetFilename ();
-		
-				 /* query by file */
-				 if ( ! String.IsNullOrEmpty (filename)) {
-						 return Query (new HyenaSqliteCommand (
-						 "SELECT id, "                   +
-								 "time, "                        +
-								 "base_uri, "            +
-								 "filename, "            +
-								 "description, "         +
-								 "roll_id, "             +
-								 "default_version_id, "  +
-								 "rating "               +
-						 "FROM photos "                          +
-						 "WHERE base_uri LIKE ?"         +
-						 "AND filename LIKE ?",
-						  uri.GetBaseUri ().ToString (),
-						 filename));
-				 }
-		
-				 /* query by directory */
-				 return Query (new HyenaSqliteCommand (
-						 "SELECT id, "                   +
-								 "time, "                        +
-								 "base_uri, "            +
-								 "filename, "            +
-								 "description, "         +
-								 "roll_id, "             +
-								 "default_version_id, "  +
-								 "rating "               +
-						 "FROM photos "                          +
-						 "WHERE base_uri LIKE ?"         +
-						 "AND base_uri NOT LIKE ?",
-						 uri.ToString () + "%",
-						 uri.ToString () + "/%/%"));
-		 }
-		
-		 [Obsolete ("drop this, use IQueryCondition correctly instead")]
-		 public Photo [] Query (Tag [] tags, string extra_condition, DateRange range, RollSet importidrange)
-		 {
-				 return Query (FSpot.OrTerm.FromTags(tags), extra_condition, range, importidrange, null);
-		 }
-		
-		 [Obsolete ("drop this, use IQueryCondition correctly instead")]
-		 public Photo [] Query (Tag [] tags, string extra_condition, DateRange range, RollSet importidrange, RatingRange ratingrange)
-		 {
-				 return Query (FSpot.OrTerm.FromTags(tags), extra_condition, range, importidrange, ratingrange);
-		 }
-		
-		 [Obsolete ("drop this, use IQueryCondition correctly instead")]
-		 public Photo [] Query (Term searchexpression, string extra_condition, DateRange range, RollSet importidrange, RatingRange ratingrange)
-		 {
-				 bool hide = (extra_condition == null);
-		
-				 // The SQL query that we want to construct is:
-				 //
-				 // SELECT photos.id
-				 //        photos.time
-				 //        photos.uri,
-				 //        photos.description,
-				 //        photos.roll_id,
-				 //        photos.default_version_id
-				 //        photos.rating
-				 //                  FROM photos, photo_tags
-				 //                  WHERE photos.time >= time1 AND photos.time <= time2
-				 //                              AND photos.rating >= rat1 AND photos.rating <= rat2
-				 //                              AND photos.id NOT IN (select photo_id FROM photo_tags WHERE tag_id = HIDDEN)
-				 //                              AND photos.id IN (select photo_id FROM photo_tags where tag_id IN (tag1, tag2..)
-				 //                              AND extra_condition_string
-				 //                  GROUP BY photos.id
-		
-				 StringBuilder query_builder = new StringBuilder ();
-				 List<string> where_clauses = new List<string> ();
-				 query_builder.Append ("SELECT id, "                     +
-											  "time, "                   +
-											  "base_uri, "                       +
-											  "filename, "                       +
-											  "description, "            +
-											  "roll_id, "                +
-											  "default_version_id, "     +
-											  "rating "                  +
-									   "FROM photos ");
-		
-				 if (range != null) {
-						 where_clauses.Add (String.Format ("time >= {0} AND time <= {1}",
-														   DateTimeUtil.FromDateTime (range.Start),
-														   DateTimeUtil.FromDateTime (range.End)));
-		
-				 }
-		
-				 if (ratingrange != null) {
-						 where_clauses.Add (ratingrange.SqlClause ());
-				 }
-		
-				 if (importidrange != null) {
-						 where_clauses.Add (importidrange.SqlClause ());
-				 }
-		
-				 if (hide && App.Instance.Database.Tags.Hidden != null) {
-						 where_clauses.Add (String.Format ("id NOT IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0})",
-														   App.Instance.Database.Tags.Hidden.Id));
-				 }
-		
-				 if (searchexpression != null) {
-						 where_clauses.Add (searchexpression.SqlCondition ());
-				 }
-		
-				 if (extra_condition != null && extra_condition.Trim () != String.Empty) {
-						 where_clauses.Add (extra_condition);
-				 }
-		
-				 if (where_clauses.Count > 0) {
-						 query_builder.Append (" WHERE ");
-						 query_builder.Append (String.Join (" AND ", where_clauses.ToArray ()));
-				 }
-				 query_builder.Append (" ORDER BY time");
-				 return Query (query_builder.ToString ());
-		 }
-		}
+                 IDataReader reader = Database.Query ("SELECT COUNT (*) as count, month from population GROUP BY month");
+                 while (reader.Read ()) {
+                         string yyyymm = reader ["month"].ToString ();
+                         int count = Convert.ToInt32 (reader ["count"]);
+                         int year = Convert.ToInt32 (yyyymm.Substring (0,4));
+                         maxyear = Math.Max (year, maxyear);
+                         minyear = Math.Min (year, minyear);
+                         int month = Convert.ToInt32 (yyyymm.Substring (4));
+                         if (!val.ContainsKey (year))
+                                 val.Add (year, new int[12]);
+                         val[year][month-1] = count;
+                 }
+                 reader.Dispose ();
+        
+                 //Fill the blank
+                 for (int i = minyear; i <= maxyear; i++)
+                         if (!val.ContainsKey (i))
+                                 val.Add (i, new int[12]);
+        
+                 Log.DebugTimerPrint (timer, "PhotosPerMonth took {0}");
+                 return val;
+         }
+        
+         // Queries.
+         [Obsolete ("drop this, use IQueryCondition correctly instead")]
+         public Photo [] Query (Tag [] tags) {
+                 return Query (tags, null, null, null, null);
+         }
+        
+         private string BuildQuery (params IQueryCondition [] conditions)
+         {
+                 StringBuilder query_builder = new StringBuilder ("SELECT * FROM photos ");
+        
+                 bool where_added = false;
+                 bool hidden_contained = false;
+                 foreach (IQueryCondition condition in conditions) {
+        
+                         if (condition == null)
+                                 continue;
+        
+                         if (condition is HiddenTag)
+                                 hidden_contained = true;
+        
+                         if (condition is IOrderCondition)
+                                 continue;
+        
+                         string sql_clause = condition.SqlClause ();
+        
+                         if (sql_clause == null || sql_clause.Trim () == String.Empty)
+                                 continue;
+                         query_builder.Append (where_added ? " AND " : " WHERE ");
+                         query_builder.Append (sql_clause);
+                         where_added = true;
+                 }
+        
+                 /* if a HiddenTag condition is not explicitly given, we add one */
+                 if ( ! hidden_contained) {
+                         string sql_clause = HiddenTag.HideHiddenTag.SqlClause ();
+        
+                         if (sql_clause != null && sql_clause.Trim () != String.Empty) {
+                                 query_builder.Append (where_added ? " AND " : " WHERE ");
+                                 query_builder.Append (sql_clause);
+                         }
+                 }
+        
+                 bool order_added = false;
+                 foreach (IQueryCondition condition in conditions) {
+                         if (condition == null)
+                                 continue;
+        
+                         if (!(condition is IOrderCondition))
+                                 continue;
+        
+                         string sql_clause = condition.SqlClause ();
+        
+                         if (sql_clause == null || sql_clause.Trim () == String.Empty)
+                                 continue;
+                         query_builder.Append (order_added ? " , " : "ORDER BY ");
+                         query_builder.Append (sql_clause);
+                         order_added = true;
+                 }
+        
+                 return query_builder.ToString ();
+         }
+        
+         public Photo [] Query (params IQueryCondition [] conditions)
+         {
+                 return Query (BuildQuery (conditions));
+         }
+        
+         public void QueryToTemp (string temp_table, params IQueryCondition [] conditions)
+         {
+                 QueryToTemp (temp_table, BuildQuery (conditions));
+         }
+        
+         public void QueryToTemp(string temp_table, string query)
+         {
+                 uint timer = Log.DebugTimerStart ();
+                 Log.DebugFormat ("Query Started : {0}", query);
+                 Database.BeginTransaction ();
+                 Database.Execute (String.Format ("DROP TABLE IF EXISTS {0}", temp_table));
+                 Database.Execute (String.Format ("CREATE TEMPORARY TABLE {0} AS {1}", temp_table, query));
+                 // For Hyena.Data.Sqlite, we need to call Execute. Calling Query here does fail.
+                 //Database.Query (String.Format ("CREATE TEMPORARY TABLE {0} AS {1}", temp_table, query)).Close ();
+                 Database.CommitTransaction ();
+                 Log.DebugTimerPrint (timer, "QueryToTemp took {0} : " + query);
+         }
+        
+         public Photo [] QueryFromTemp (string temp_table)
+         {
+                 return QueryFromTemp (temp_table, 0, -1);
+         }
+        
+         public Photo [] QueryFromTemp (string temp_table, int offset, int limit)
+         {
+                 return Query (String.Format ("SELECT * FROM {0} LIMIT {1} OFFSET {2}", temp_table, limit, offset));
+         }
+        
+         public Photo [] Query (string query)
+         {
+                 return Query (new HyenaSqliteCommand (query));
+         }
+        
+         private Photo [] Query (HyenaSqliteCommand query)
+         {
+                 uint timer = Log.DebugTimerStart ();
+                 IDataReader reader = Database.Query(query);
+        
+                 List<Photo> new_photos = new List<Photo> ();
+                 List<Photo> query_result = new List<Photo> ();
+                 while (reader.Read ()) {
+                         uint id = Convert.ToUInt32 (reader ["id"]);
+                         Photo photo = LookupInCache (id);
+        
+                         if (photo == null) {
+                                 photo = new Photo (id, Convert.ToInt64 (reader ["time"]));
+                                 photo.Description = reader["description"].ToString ();
+                                 photo.RollId = Convert.ToUInt32 (reader["roll_id"]);
+                                 photo.DefaultVersionId = Convert.ToUInt32 (reader["default_version_id"]);
+                                 photo.Rating = Convert.ToUInt32 (reader ["rating"]);
+                                 new_photos.Add (photo);
+                         }
+        
+                         query_result.Add (photo);
+                 }
+                 reader.Dispose();
+        
+                 bool need_load = false;
+                 string photo_ids = "(";
+                 foreach (Photo photo in new_photos) {
+                         AddToCache (photo);
+                         photo_ids = photo_ids + Convert.ToString(photo.Id) + ",";
+                         need_load |= !photo.AllVersionsLoaded;
+                 }
+        
+                 photo_ids = photo_ids + "-1)";
+        
+                 if (need_load) {
+                         GetAllTags (photo_ids);
+                         GetAllVersions (photo_ids);
+                         foreach (Photo photo in new_photos)
+                                 photo.AllVersionsLoaded = true;
+                 } else {
+                         //Console.WriteLine ("Skipped Loading Data");
+                 }
+        
+                 foreach (Photo photo in new_photos)
+                         photo.Changes = null;
+        
+                 Log.DebugTimerPrint (timer, "Query took {0} : " + query.Text);
+                 return query_result.ToArray ();
+         }
+        
+         public Photo [] Query (SafeUri uri)
+         {
+                 string filename = uri.GetFilename ();
+        
+                 /* query by file */
+                 if ( ! String.IsNullOrEmpty (filename)) {
+                         return Query (new HyenaSqliteCommand (
+                         "SELECT id, "                   +
+                                 "time, "                        +
+                                 "base_uri, "            +
+                                 "filename, "            +
+                                 "description, "         +
+                                 "roll_id, "             +
+                                 "default_version_id, "  +
+                                 "rating "               +
+                         "FROM photos "                          +
+                         "WHERE base_uri LIKE ?"         +
+                         "AND filename LIKE ?",
+                          uri.GetBaseUri ().ToString (),
+                         filename));
+                 }
+        
+                 /* query by directory */
+                 return Query (new HyenaSqliteCommand (
+                         "SELECT id, "                   +
+                                 "time, "                        +
+                                 "base_uri, "            +
+                                 "filename, "            +
+                                 "description, "         +
+                                 "roll_id, "             +
+                                 "default_version_id, "  +
+                                 "rating "               +
+                         "FROM photos "                          +
+                         "WHERE base_uri LIKE ?"         +
+                         "AND base_uri NOT LIKE ?",
+                         uri.ToString () + "%",
+                         uri.ToString () + "/%/%"));
+         }
+        
+         [Obsolete ("drop this, use IQueryCondition correctly instead")]
+         public Photo [] Query (Tag [] tags, string extra_condition, DateRange range, RollSet importidrange)
+         {
+                 return Query (FSpot.OrTerm.FromTags(tags), extra_condition, range, importidrange, null);
+         }
+        
+         [Obsolete ("drop this, use IQueryCondition correctly instead")]
+         public Photo [] Query (Tag [] tags, string extra_condition, DateRange range, RollSet importidrange, RatingRange ratingrange)
+         {
+                 return Query (FSpot.OrTerm.FromTags(tags), extra_condition, range, importidrange, ratingrange);
+         }
+        
+         [Obsolete ("drop this, use IQueryCondition correctly instead")]
+         public Photo [] Query (Term searchexpression, string extra_condition, DateRange range, RollSet importidrange, RatingRange ratingrange)
+         {
+                 bool hide = (extra_condition == null);
+        
+                 // The SQL query that we want to construct is:
+                 //
+                 // SELECT photos.id
+                 //        photos.time
+                 //        photos.uri,
+                 //        photos.description,
+                 //        photos.roll_id,
+                 //        photos.default_version_id
+                 //        photos.rating
+                 //                  FROM photos, photo_tags
+                 //                  WHERE photos.time >= time1 AND photos.time <= time2
+                 //                              AND photos.rating >= rat1 AND photos.rating <= rat2
+                 //                              AND photos.id NOT IN (select photo_id FROM photo_tags WHERE tag_id = HIDDEN)
+                 //                              AND photos.id IN (select photo_id FROM photo_tags where tag_id IN (tag1, tag2..)
+                 //                              AND extra_condition_string
+                 //                  GROUP BY photos.id
+        
+                 StringBuilder query_builder = new StringBuilder ();
+                 List<string> where_clauses = new List<string> ();
+                 query_builder.Append ("SELECT id, "                     +
+                                              "time, "                   +
+                                              "base_uri, "                       +
+                                              "filename, "                       +
+                                              "description, "            +
+                                              "roll_id, "                +
+                                              "default_version_id, "     +
+                                              "rating "                  +
+                                       "FROM photos ");
+        
+                 if (range != null) {
+                         where_clauses.Add (String.Format ("time >= {0} AND time <= {1}",
+                                                           DateTimeUtil.FromDateTime (range.Start),
+                                                           DateTimeUtil.FromDateTime (range.End)));
+        
+                 }
+        
+                 if (ratingrange != null) {
+                         where_clauses.Add (ratingrange.SqlClause ());
+                 }
+        
+                 if (importidrange != null) {
+                         where_clauses.Add (importidrange.SqlClause ());
+                 }
+        
+                 if (hide && App.Instance.Database.Tags.Hidden != null) {
+                         where_clauses.Add (String.Format ("id NOT IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0})",
+                                                           App.Instance.Database.Tags.Hidden.Id));
+                 }
+        
+                 if (searchexpression != null) {
+                         where_clauses.Add (searchexpression.SqlCondition ());
+                 }
+        
+                 if (extra_condition != null && extra_condition.Trim () != String.Empty) {
+                         where_clauses.Add (extra_condition);
+                 }
+        
+                 if (where_clauses.Count > 0) {
+                         query_builder.Append (" WHERE ");
+                         query_builder.Append (String.Join (" AND ", where_clauses.ToArray ()));
+                 }
+                 query_builder.Append (" ORDER BY time");
+                 return Query (query_builder.ToString ());
+         }
+        }
 }
diff --git a/src/Clients/MainApp/FSpot/PhotoVersion.cs b/src/Clients/MainApp/FSpot/PhotoVersion.cs
index 3ec8d4f..4e9f61f 100644
--- a/src/Clients/MainApp/FSpot/PhotoVersion.cs
+++ b/src/Clients/MainApp/FSpot/PhotoVersion.cs
@@ -27,9 +27,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Core;
-
 using Hyena;
+using FSpot.Core;
 
 namespace FSpot
 {
diff --git a/src/Clients/MainApp/FSpot/PhotoView.cs b/src/Clients/MainApp/FSpot/PhotoView.cs
index 77da723..b02e057 100644
--- a/src/Clients/MainApp/FSpot/PhotoView.cs
+++ b/src/Clients/MainApp/FSpot/PhotoView.cs
@@ -31,22 +31,26 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gdk;
+using GLib;
+using Gtk;
 using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Xml.Serialization;
+using Mono.Unix;
 
 using FSpot.Core;
-using FSpot.Utils;
 using FSpot.Widgets;
-
-using Gdk;
-using Gtk;
-
-using Mono.Unix;
+using FSpot.Utils;
+using Hyena;
+using FSpot.UI.Dialog;
 
 namespace FSpot {
 	public class PhotoView : EventBox {
 		DelayedOperation commit_delay;
 
-				private ScrolledWindow photo_view_scrolled;
+                private ScrolledWindow photo_view_scrolled;
 		private EventBox background;
 
 		private Filmstrip filmstrip;
@@ -75,11 +79,11 @@ namespace FSpot {
 			get { return filmstrip.Orientation; }
 		}
 
-				// was photo_view
+                // was photo_view
 		public PhotoImageView View { get; private set; }
 
 		public BrowsablePointer Item {
-						get { return View.Item; }
+                        get { return View.Item; }
 		}
 
 		public IBrowsableCollection Query { get; set; }
@@ -157,13 +161,12 @@ namespace FSpot {
 		private void HandleButtonPressEvent (object sender, ButtonPressEventArgs args)
 		{
 			if (args.Event.Type == EventType.TwoButtonPress && args.Event.Button == 1 && DoubleClicked != null)
-					DoubleClicked (this, null);
-
-			if (args.Event.Type != EventType.ButtonPress || args.Event.Button != 3)
-				return;
-
-			PhotoPopup popup = new PhotoPopup ();
-			popup.Activate (this.Toplevel, args.Event);
+				    DoubleClicked (this, null);
+			if (args.Event.Type == EventType.ButtonPress
+			    && args.Event.Button == 3) {
+				PhotoPopup popup = new PhotoPopup ();
+				popup.Activate (this.Toplevel, args.Event);
+			}
 		}
 
 		protected override bool OnPopupMenu ()
@@ -255,7 +258,12 @@ namespace FSpot {
 			}
 		}
 
-		public void PlaceFilmstrip (Orientation pos, bool force = false)
+		public void PlaceFilmstrip (Orientation pos)
+		{
+			PlaceFilmstrip (pos, false);
+		}
+
+		public void PlaceFilmstrip (Orientation pos, bool force)
 		{
 			if (!force && filmstrip.Orientation == pos)
 				return;
@@ -292,6 +300,7 @@ namespace FSpot {
 		}
 
 		public PhotoView (IBrowsableCollection query)
+			: base ()
 		{
 			Query = query;
 
@@ -302,7 +311,7 @@ namespace FSpot {
 			Box vbox = new VBox (false, 6);
 			Add (vbox);
 
-				background = new EventBox ();
+		        background = new EventBox ();
 			Frame frame = new Frame ();
 			background.Add (frame);
 
@@ -347,10 +356,10 @@ namespace FSpot {
 			lower_hbox.PackStart (description_entry, true, true, 0);
 			description_entry.Changed += HandleDescriptionChanged;
 
-			rating = new RatingEntry () {
-				HasFrame = false,
-				AlwaysShowEmptyStars = true
-			};
+            rating = new RatingEntry () {
+                HasFrame = false,
+                AlwaysShowEmptyStars = true
+            };
 			lower_hbox.PackStart (rating, false, false, 0);
 			rating.Changed += HandleRatingChanged;
 
@@ -360,7 +369,7 @@ namespace FSpot {
 
 			vbox.ShowAll ();
 
-			Realized += (o, e) => SetColors();
+			Realized += delegate (object o, EventArgs e) {SetColors ();};
 			Preferences.SettingChanged += OnPreferencesChanged;
 		}
 
diff --git a/src/Clients/MainApp/FSpot/PixbufCache.cs b/src/Clients/MainApp/FSpot/PixbufCache.cs
index 54bf0e3..f276cbf 100644
--- a/src/Clients/MainApp/FSpot/PixbufCache.cs
+++ b/src/Clients/MainApp/FSpot/PixbufCache.cs
@@ -29,12 +29,14 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Threading;
+using Hyena;
 
 using FSpot.Utils;
-
-using Hyena;
+using FSpot.Platform;
 
 namespace FSpot
 {
@@ -63,7 +65,7 @@ namespace FSpot
 
 		public void HandleThumbnailLoaded (ImageLoaderThread loader, ImageLoaderThread.RequestItem result)
 		{
-						Reload (result.Uri);
+                        Reload (result.Uri);
 		}
 
 		public void Request (SafeUri uri, object closure, int width, int height)
@@ -214,6 +216,7 @@ namespace FSpot
 			} catch (GLib.GException){
 				if (loaded != null)
 					loaded.Dispose ();
+				return;
 			}
 		}
 
@@ -291,7 +294,7 @@ namespace FSpot
 				Uri = uri;
 				Width = width;
 				Height = height;
-								// Should this be this.data or Data?
+                                // Should this be this.data or Data?
 				this.data = closure;
 				Reload = true;
 				this.cache = cache;
diff --git a/src/Clients/MainApp/FSpot/Preferences.cs b/src/Clients/MainApp/FSpot/Preferences.cs
index bf5c79d..dba243d 100644
--- a/src/Clients/MainApp/FSpot/Preferences.cs
+++ b/src/Clients/MainApp/FSpot/Preferences.cs
@@ -31,16 +31,14 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System.Net;
 using System;
 using System.Collections.Generic;
-
+using Mono.Unix;
 using FSpot.Core;
 using FSpot.Platform;
-
 using Hyena;
 
-using Mono.Unix;
-
 namespace FSpot
 {
 	public class Preferences
diff --git a/src/Clients/MainApp/FSpot/PrintOperation.cs b/src/Clients/MainApp/FSpot/PrintOperation.cs
index 51d70b8..c5aaaf5 100644
--- a/src/Clients/MainApp/FSpot/PrintOperation.cs
+++ b/src/Clients/MainApp/FSpot/PrintOperation.cs
@@ -27,19 +27,16 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Cairo;
 using System;
 using System.Runtime.InteropServices;
-
-using Cairo;
+using Mono.Unix;
 
 using FSpot.Core;
-using FSpot.Imaging;
 using FSpot.Widgets;
-
+using FSpot.Imaging;
 using Hyena;
 
-using Mono.Unix;
-
 namespace FSpot
 {
 	public class PrintOperation : Gtk.PrintOperation
@@ -209,7 +206,7 @@ namespace FSpot
 
 		private static void DrawComment (Gtk.PrintContext context, double x, double y, double h, string comment, bool rotated)
 		{
-			if (string.IsNullOrEmpty(comment))
+			if (comment == null || comment == String.Empty)
 				return;
 
 			Context cr = context.CairoContext;
diff --git a/src/Clients/MainApp/FSpot/ProgressItem.cs b/src/Clients/MainApp/FSpot/ProgressItem.cs
index fb7b4e5..5313275 100644
--- a/src/Clients/MainApp/FSpot/ProgressItem.cs
+++ b/src/Clients/MainApp/FSpot/ProgressItem.cs
@@ -27,8 +27,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+
 namespace FSpot {
 	public class ProgressItem {
+		public ProgressItem () {
+		}
+
 		public delegate void ChangedHandler (ProgressItem item);
 		public event ChangedHandler Changed;
 
diff --git a/src/Clients/MainApp/FSpot/QueryWidget.cs b/src/Clients/MainApp/FSpot/QueryWidget.cs
index 941435c..fe41915 100644
--- a/src/Clients/MainApp/FSpot/QueryWidget.cs
+++ b/src/Clients/MainApp/FSpot/QueryWidget.cs
@@ -36,16 +36,17 @@
 using System;
 using System.Collections.Generic;
 
-using FSpot.Core;
-using FSpot.Database;
-using FSpot.Widgets;
+using Mono.Unix;
 
 using Gtk;
 
+using FSpot.Core;
+using FSpot.Database;
+using FSpot.Utils;
+using FSpot.Query;
+using FSpot.Widgets;
 using Hyena;
 
-using Mono.Unix;
-
 
 namespace FSpot {
 
diff --git a/src/Clients/MainApp/FSpot/RollStore.cs b/src/Clients/MainApp/FSpot/RollStore.cs
index cf2d898..7f355eb 100644
--- a/src/Clients/MainApp/FSpot/RollStore.cs
+++ b/src/Clients/MainApp/FSpot/RollStore.cs
@@ -1,4 +1,3 @@
-using System;
 //
 // RollStore.cs
 //
@@ -32,10 +31,15 @@ using System;
 // 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.Collections;
 using System.Collections.Generic;
+using System.IO;
+using System;
 
 using FSpot.Core;
 using FSpot.Database;
+using FSpot.Utils;
+using FSpot;
 
 using Hyena;
 using Hyena.Data.Sqlite;
@@ -113,7 +117,12 @@ namespace FSpot
 			return number_of_photos;
 		}
 
-		public Roll [] GetRolls (int limit = -1)
+		public Roll [] GetRolls ()
+		{
+			return GetRolls (-1);
+		}
+
+		public Roll [] GetRolls (int limit)
 		{
 			List<Roll> rolls = new List<Roll> ();
 
@@ -125,7 +134,7 @@ namespace FSpot
 				while (reader.Read ()) {
 					uint id = Convert.ToUInt32 (reader ["roll_id"]);
 
-					Roll roll = LookupInCache (id);
+					Roll roll = LookupInCache (id) as Roll;
 					if (roll == null) {
 						roll = new Roll (id, Convert.ToUInt32 (reader ["roll_time"]));
 						AddToCache (roll);
diff --git a/src/Clients/MainApp/FSpot/RotateCommand.cs b/src/Clients/MainApp/FSpot/RotateCommand.cs
index f841675..3c0f889 100644
--- a/src/Clients/MainApp/FSpot/RotateCommand.cs
+++ b/src/Clients/MainApp/FSpot/RotateCommand.cs
@@ -34,11 +34,12 @@
 using System;
 using System.IO;
 
+using Gtk;
+using Gdk;
+
 using FSpot;
 using FSpot.UI.Dialog;
 
-using Gtk;
-
 using Hyena;
 using Hyena.Widgets;
 using FSpot.Utils;
@@ -49,7 +50,7 @@ using Mono.Unix;
 namespace FSpot {
 	public class RotateException : ApplicationException {
 
-				public bool ReadOnly = false;
+                public bool ReadOnly = false;
 		public string Path { get; private set; }
 
 		public RotateException (string msg, string path) : this (msg, path, false) {}
@@ -77,49 +78,49 @@ namespace FSpot {
 			done = false;
 		}
 
-			private static void RotateOrientation (string original_path, RotateDirection direction)
-			{
-					try {
-						var uri = new SafeUri (original_path);
-						using (var metadata = Metadata.Parse (uri)) {
-							metadata.EnsureAvailableTags ();
-							var tag = metadata.ImageTag;
-							var orientation = direction == RotateDirection.Clockwise
-								? FSpot.Utils.PixbufUtils.Rotate90 (tag.Orientation)
-								: FSpot.Utils.PixbufUtils.Rotate270 (tag.Orientation);
-		
-							tag.Orientation = orientation;
-							var always_sidecar = Preferences.Get<bool> (Preferences.METADATA_ALWAYS_USE_SIDECAR);
-							metadata.SaveSafely (uri, always_sidecar);
-							XdgThumbnailSpec.RemoveThumbnail (uri);
-						}
-					} catch (Exception e) {
-						Log.DebugException (e);
-						throw new RotateException (Catalog.GetString ("Unable to rotate this type of photo"), original_path);
-					}
-				}
-
-				private void Rotate (string original_path, RotateDirection dir)
-				{
-					RotateOrientation (original_path, dir);
-				}
-		
-				public bool Step ()
-				{
-					if (done)
-						return false;
-		
-					GLib.FileInfo info = GLib.FileFactory.NewForUri (item.DefaultVersion.Uri).QueryInfo ("access::can-write", GLib.FileQueryInfoFlags.None, null);
-					if (!info.GetAttributeBoolean("access::can-write")) {
-						throw new RotateException (Catalog.GetString ("Unable to rotate readonly file"), item.DefaultVersion.Uri, true);
-					}
-		
-					Rotate (item.DefaultVersion.Uri, direction);
-
-					done = true;
-					return !done;
-				}
-		}
+	        private static void RotateOrientation (string original_path, RotateDirection direction)
+	        {
+                    try {
+                        var uri = new SafeUri (original_path);
+                        using (var metadata = Metadata.Parse (uri)) {
+                            metadata.EnsureAvailableTags ();
+                            var tag = metadata.ImageTag;
+                            var orientation = direction == RotateDirection.Clockwise
+                                ? FSpot.Utils.PixbufUtils.Rotate90 (tag.Orientation)
+                                : FSpot.Utils.PixbufUtils.Rotate270 (tag.Orientation);
+        
+                            tag.Orientation = orientation;
+                            var always_sidecar = Preferences.Get<bool> (Preferences.METADATA_ALWAYS_USE_SIDECAR);
+                            metadata.SaveSafely (uri, always_sidecar);
+                            XdgThumbnailSpec.RemoveThumbnail (uri);
+                        }
+                    } catch (Exception e) {
+                        Log.DebugException (e);
+                        throw new RotateException (Catalog.GetString ("Unable to rotate this type of photo"), original_path);
+                    }
+                }
+
+                private void Rotate (string original_path, RotateDirection dir)
+                {
+                    RotateOrientation (original_path, dir);
+                }
+        
+                public bool Step ()
+                {
+                    if (done)
+                        return false;
+        
+                    GLib.FileInfo info = GLib.FileFactory.NewForUri (item.DefaultVersion.Uri).QueryInfo ("access::can-write", GLib.FileQueryInfoFlags.None, null);
+                    if (!info.GetAttributeBoolean("access::can-write")) {
+                        throw new RotateException (Catalog.GetString ("Unable to rotate readonly file"), item.DefaultVersion.Uri, true);
+                    }
+        
+                    Rotate (item.DefaultVersion.Uri, direction);
+
+                    done = true;
+                    return !done;
+                }
+        }
 
 	public class RotateMultiple {
 		RotateDirection direction;
@@ -146,9 +147,10 @@ namespace FSpot {
 
 			if (op.Step ())
 				return true;
-			
-			Index++;
-			op = null;
+			else {
+				Index++;
+				op = null;
+			}
 
 			return (Index < Items.Length);
 		}
@@ -169,10 +171,10 @@ public class RotateCommand {
 
 		if (items.Length > 1)
 			progress_dialog = new ProgressDialog (Catalog.GetString ("Rotating photos"),
-								  ProgressDialog.CancelButtonType.Stop,
-								  items.Length, parent_window);
+							      ProgressDialog.CancelButtonType.Stop,
+							      items.Length, parent_window);
 
-			RotateMultiple op = new RotateMultiple (items, direction);
+	        RotateMultiple op = new RotateMultiple (items, direction);
 		int readonly_count = 0;
 		bool done = false;
 		int index = 0;
@@ -223,11 +225,11 @@ public class RotateCommand {
 		desc = String.Format (desc, readonly_count);
 
 		HigMessageDialog md = new HigMessageDialog (parent_window,
-								DialogFlags.DestroyWithParent,
-								MessageType.Error,
-								ButtonsType.Close,
-								notice,
-								desc);
+							    DialogFlags.DestroyWithParent,
+							    MessageType.Error,
+							    ButtonsType.Close,
+							    notice,
+							    desc);
 		md.Run();
 		md.Destroy();
 	}
@@ -245,9 +247,9 @@ public class RotateCommand {
 						msg, System.IO.Path.GetFileName (path));
 
 		HigMessageDialog md = new HigMessageDialog (parent_window, DialogFlags.DestroyWithParent,
-								MessageType.Warning, ButtonsType.Ok,
-								Catalog.GetString ("Error while rotating photo."),
-								longmsg);
+							    MessageType.Warning, ButtonsType.Ok,
+							    Catalog.GetString ("Error while rotating photo."),
+							    longmsg);
 		md.Run ();
 		md.Destroy ();
 	}
diff --git a/src/Clients/MainApp/FSpot/SelectionDataExtensions.cs b/src/Clients/MainApp/FSpot/SelectionDataExtensions.cs
index 8f42e1c..9d3d29e 100644
--- a/src/Clients/MainApp/FSpot/SelectionDataExtensions.cs
+++ b/src/Clients/MainApp/FSpot/SelectionDataExtensions.cs
@@ -32,15 +32,16 @@
 //
 
 using System;
-using System.Linq;
 using System.Text;
+using System.Linq;
+
+using Gtk;
+using Gdk;
 
+using FSpot;
 using FSpot.Core;
 using FSpot.Utils;
 
-using Gdk;
-using Gtk;
-
 namespace FSpot
 {
 	public static class SelectionDataExtensions
@@ -132,22 +133,22 @@ namespace FSpot
 			selection_data.Set (target, 8, data, data.Length);
 		}
 
-				public static void SetUriListData (this SelectionData selection_data, UriList uri_list)
-				{
-					selection_data.SetUriListData (uri_list, Atom.Intern ("text/uri-list", true));
-				}
-		
+                public static void SetUriListData (this SelectionData selection_data, UriList uri_list)
+                {
+                    selection_data.SetUriListData (uri_list, Atom.Intern ("text/uri-list", true));
+                }
+        
 		public static UriList GetUriListData (this SelectionData selection_data)
 		{
 			return new UriList (GetStringData (selection_data));
 		}
 
-				public static void SetCopyFiles (this SelectionData selection_data, UriList uri_list)
-				{
-					var uris = (from p in uri_list select p.ToString ()).ToArray ();
-					var data = Encoding.UTF8.GetBytes ("copy\n" + String.Join ("\n", uris));
-		
-					selection_data.Set (Atom.Intern ("x-special/gnome-copied-files", true), 8, data, data.Length);
-				}
+                public static void SetCopyFiles (this SelectionData selection_data, UriList uri_list)
+                {
+                    var uris = (from p in uri_list select p.ToString ()).ToArray ();
+                    var data = Encoding.UTF8.GetBytes ("copy\n" + String.Join ("\n", uris));
+        
+                    selection_data.Set (Atom.Intern ("x-special/gnome-copied-files", true), 8, data, data.Length);
+                }
 	}
 }
diff --git a/src/Clients/MainApp/FSpot/SendEmail.cs b/src/Clients/MainApp/FSpot/SendEmail.cs
index 3e90da2..602e6db 100644
--- a/src/Clients/MainApp/FSpot/SendEmail.cs
+++ b/src/Clients/MainApp/FSpot/SendEmail.cs
@@ -33,18 +33,17 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gtk;
+using GLib;
 using System;
 
 using FSpot.Core;
+using FSpot.Widgets;
 using FSpot.Filters;
 using FSpot.UI.Dialog;
-using FSpot.Widgets;
-
-using Gtk;
 
 using Hyena;
 using Hyena.Widgets;
-
 using Mono.Unix;
 
 namespace FSpot
@@ -100,6 +99,7 @@ namespace FSpot
 					case 3 :  medium_size.Active = true; break;
 					case 4 :  large_size.Active = true; break;
 					case 5 :  x_large_size.Active = true; break;
+					default: break;
 				}
 
 
diff --git a/src/Clients/MainApp/FSpot/SingleView.cs b/src/Clients/MainApp/FSpot/SingleView.cs
index 55860d8..8607683 100644
--- a/src/Clients/MainApp/FSpot/SingleView.cs
+++ b/src/Clients/MainApp/FSpot/SingleView.cs
@@ -31,23 +31,21 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gtk;
+using Gdk;
 using System;
 using System.Collections.Generic;
 
-using FSpot.Core;
+using Mono.Addins;
+using Mono.Unix;
+
+using Hyena;
 using FSpot.Extensions;
-using FSpot.Platform;
-using FSpot.UI.Dialog;
 using FSpot.Utils;
+using FSpot.UI.Dialog;
 using FSpot.Widgets;
-
-using Gdk;
-using Gtk;
-
-using Hyena;
-
-using Mono.Addins;
-using Mono.Unix;
+using FSpot.Platform;
+using FSpot.Core;
 
 namespace FSpot {
 	public class SingleView {
@@ -216,7 +214,7 @@ namespace FSpot {
 
 		void HandleExportActivated (object o, EventArgs e)
 		{
-			FSpot.Extensions.ExportMenuItemNode.SelectedImages = () => new PhotoList(directory_view.Selection.Items);
+			FSpot.Extensions.ExportMenuItemNode.SelectedImages = delegate () {return new PhotoList (directory_view.Selection.Items); };
 		}
 
 		public void HandleCollectionChanged (IBrowsableCollection collection)
@@ -486,6 +484,8 @@ namespace FSpot {
 				collection.LoadItems (list.ToArray());
 
 				Gtk.Drag.Finish (args.Context, true, false, args.Time);
+
+				return;
 			}
 		}
 
diff --git a/src/Clients/MainApp/FSpot/TagQueryWidget.cs b/src/Clients/MainApp/FSpot/TagQueryWidget.cs
index 3f8b77e..94fe2e8 100644
--- a/src/Clients/MainApp/FSpot/TagQueryWidget.cs
+++ b/src/Clients/MainApp/FSpot/TagQueryWidget.cs
@@ -30,16 +30,16 @@
 //
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
+using System.Text;
+using Mono.Unix;
+using Gtk;
+using Gdk;
 
 using FSpot.Core;
-using FSpot.Query;
 using FSpot.Utils;
-
-using Gdk;
-using Gtk;
-
-using Mono.Unix;
+using FSpot.Query;
 
 namespace FSpot
 {
@@ -64,20 +64,20 @@ namespace FSpot
 
 			if (literal.IsNegated) {
 				GtkUtil.MakeMenuItem (popup_menu,
-							  String.Format (Catalog.GetString ("Include Photos Tagged \"{0}\""), literal.Tag.Name),
-							  new EventHandler (literal.HandleToggleNegatedCommand),
-							  true);
+						      String.Format (Catalog.GetString ("Include Photos Tagged \"{0}\""), literal.Tag.Name),
+						      new EventHandler (literal.HandleToggleNegatedCommand),
+						      true);
 			} else {
 				GtkUtil.MakeMenuItem (popup_menu,
-							  String.Format (Catalog.GetString ("Exclude Photos Tagged \"{0}\""), literal.Tag.Name),
-							  new EventHandler (literal.HandleToggleNegatedCommand),
-							  true);
+						      String.Format (Catalog.GetString ("Exclude Photos Tagged \"{0}\""), literal.Tag.Name),
+						      new EventHandler (literal.HandleToggleNegatedCommand),
+						      true);
 			}
 
 			GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Remove From Search"),
-						  "gtk-remove",
-						  new EventHandler (literal.HandleRemoveCommand),
-						  true);
+					      "gtk-remove",
+					      new EventHandler (literal.HandleRemoveCommand),
+					      true);
 
 			if (is_popup) {
 				if (eb != null)
@@ -88,7 +88,6 @@ namespace FSpot
 		}
 	}
 
-	// FIXME: This class is never used
 	public class LiteralMenu : Menu
 	{
 		private LiteralPopup popup;
@@ -141,33 +140,33 @@ namespace FSpot
 			if (LogicWidget.Root == null || LogicWidget.Root.SubTerms.Count == 0) {
 				//Console.WriteLine ("root is null or has no terms");
 				return null;
-			}
-
-			//Console.WriteLine ("root is not null and has terms");
-			Gtk.Menu m = new Gtk.Menu ();
+			} else {
+				//Console.WriteLine ("root is not null and has terms");
+				Gtk.Menu m = new Gtk.Menu ();
 
-			Gtk.MenuItem all_item = GtkUtil.MakeMenuItem (m, Catalog.GetString ("All"), new EventHandler (App.Instance.Organizer.HandleRequireTag));
-			GtkUtil.MakeMenuSeparator (m);
+				Gtk.MenuItem all_item = GtkUtil.MakeMenuItem (m, Catalog.GetString ("All"), new EventHandler (App.Instance.Organizer.HandleRequireTag));
+				GtkUtil.MakeMenuSeparator (m);
 
-			int sensitive_items = 0;
-			foreach (Term term in LogicWidget.Root.SubTerms) {
-				List<string> term_parts = new List<string> ();
+				int sensitive_items = 0;
+				foreach (Term term in LogicWidget.Root.SubTerms) {
+					List<string> term_parts = new List<string> ();
 
-				bool contains_tag = AppendTerm (term_parts, term, single_tag);
+					bool contains_tag = AppendTerm (term_parts, term, single_tag);
 
-				string name = "_" + String.Join (", ", term_parts.ToArray ());
+					string name = "_" + String.Join (", ", term_parts.ToArray ());
 
-				Gtk.MenuItem item = GtkUtil.MakeMenuItem (m, name, new EventHandler (App.Instance.Organizer.HandleAddTagToTerm));
-				item.Sensitive = !contains_tag;
+					Gtk.MenuItem item = GtkUtil.MakeMenuItem (m, name, new EventHandler (App.Instance.Organizer.HandleAddTagToTerm));
+					item.Sensitive = !contains_tag;
 
-				if (!contains_tag)
-					sensitive_items++;
-			}
+					if (!contains_tag)
+						sensitive_items++;
+				}
 
-			if (sensitive_items == 0)
-				all_item.Sensitive = false;
+				if (sensitive_items == 0)
+					all_item.Sensitive = false;
 
-			return m;
+				return m;
+			}
 		}
 
 		private static bool AppendTerm (List<string> parts, Term term, Tag single_tag)
@@ -208,14 +207,18 @@ namespace FSpot
 	}
 
 	public class GrabHandle : DrawingArea {
-		public GrabHandle (int w, int h)
+		public GrabHandle (int w, int h) : base ()
 		{
 			Size (w, h);
 			Orientation = Gtk.Orientation.Horizontal;
 			Show ();
 		}
 
-		public Orientation Orientation { get; set; }
+		private Gtk.Orientation orientation;
+		public Gtk.Orientation Orientation {
+			get { return orientation; }
+			set { orientation = value; }
+		}
 
 		protected override bool OnExposeEvent (Gdk.EventExpose evnt)
 		{
@@ -226,7 +229,7 @@ namespace FSpot
 			}
 
 			Gtk.Style.PaintHandle(Style, GdkWindow, State, ShadowType.In,
-						  evnt.Area, this, "entry", 0, 0, Allocation.Width, Allocation.Height, Orientation);
+					      evnt.Area, this, "entry", 0, 0, Allocation.Width, Allocation.Height, Orientation);
 
 			//(Style, GdkWindow, StateType.Normal, ShadowType.In,
 			//evnt.Area, this, "entry", 0, y_mid - y_offset, Allocation.Width,
@@ -270,7 +273,7 @@ namespace FSpot
 				DragDropTargets.TagQueryEntry
 			};
 
-		public LogicWidget (PhotoQuery query, TagStore tag_store)
+		public LogicWidget (PhotoQuery query, TagStore tag_store) : base ()
 		{
 			//SetFlag (WidgetFlags.NoWindow);
 			this.query = query;
@@ -342,16 +345,16 @@ namespace FSpot
 		private void HandleTagChanged (object sender, DbItemEventArgs<Tag> args)
 		{
 			foreach (Tag t in args.Items)
-				foreach (Literal term in rootTerm.FindByTag (t))
-					term.Update ();
+                foreach (Literal term in rootTerm.FindByTag (t))
+                    term.Update ();
 		}
 
 		// If the user deletes a tag that is in use in the query, remove it from the query too.
 		private void HandleTagDeleted (object sender, DbItemEventArgs<Tag> args)
 		{
 			foreach (Tag t in args.Items)
-				foreach (Literal term in rootTerm.FindByTag (t))
-					term.RemoveSelf ();
+                foreach (Literal term in rootTerm.FindByTag (t))
+                    term.RemoveSelf ();
 		}
 
 		private void HandleDragMotion (object o, DragMotionArgs args)
@@ -412,13 +415,13 @@ namespace FSpot
 		private void HandleRemoving (Literal term)
 		{
 			foreach (Widget w in HangersOn (term))
-				Remove (w);
+			Remove (w);
 
 			// Remove the term's widget
 			Remove (term.Widget);
 		}
 
-		public IEnumerable<Widget> HangersOn (Literal term)
+		public List<Gtk.Widget> HangersOn (Literal term)
 		{
 			List<Gtk.Widget> w = new List<Gtk.Widget> ();
 
@@ -468,6 +471,8 @@ namespace FSpot
 
 				// Prevent them from being removed again
 				Literal.FocusedLiterals = null;
+
+				return;
 			}
 		}
 
diff --git a/src/Clients/MainApp/FSpot/TagSelectionWidget.cs b/src/Clients/MainApp/FSpot/TagSelectionWidget.cs
index 4f35b2d..afc3a8e 100644
--- a/src/Clients/MainApp/FSpot/TagSelectionWidget.cs
+++ b/src/Clients/MainApp/FSpot/TagSelectionWidget.cs
@@ -29,21 +29,27 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
+using System.Collections;
 using System.Collections.Generic;
+using System.IO;
+using System;
 
-using FSpot.Core;
-using FSpot.Database;
-using FSpot.Utils;
-using FSpot.Widgets;
+using GLib;
 
 using Gdk;
-using Gtk;
 
-using Hyena.Widgets;
+using Gtk;
 
 using Mono.Unix;
 
+using FSpot;
+using FSpot.Core;
+using FSpot.Database;
+using FSpot.Utils;
+using FSpot.Widgets;
+using FSpot.UI.Dialog;
+using Hyena.Widgets;
+
 
 
 namespace FSpot {
@@ -95,7 +101,7 @@ namespace FSpot {
 			Model.GetValue (iter, IdColumn, ref val);
 			uint tag_id = (uint) val;
 
-			return tag_store.Get (tag_id);
+			return tag_store.Get (tag_id) as Tag;
 		}
 
 		// Loading up the store.
@@ -225,7 +231,7 @@ namespace FSpot {
 			Model.GetValue (iter, IdColumn, ref value);
 			uint tag_id = (uint) value;
 
-			Tag tag = tag_store.Get (tag_id);
+			Tag tag = tag_store.Get (tag_id) as Tag;
 			if (tag == null)
 				return;
 
@@ -265,7 +271,10 @@ namespace FSpot {
 			Model.GetValue (parent, IdColumn, ref value);
 			iter = parent;
 
-			return tag.Id == (uint) value;
+			if (tag.Id == (uint) value)
+				return true;
+
+			return false;
 		}
 
 		// Copy a branch of the tree to a new parent
@@ -278,7 +287,7 @@ namespace FSpot {
 			bool valid;
 
 			store.GetValue (src, IdColumn, ref value);
-			Tag tag = tag_store.Get ((uint)value);
+			Tag tag = (Tag) tag_store.Get ((uint)value);
 			if (is_parent) {
 				// we need to figure out where to insert it in the correct order
 				copy = InsertInOrder(dest, is_root, tag);
@@ -356,8 +365,8 @@ namespace FSpot {
 					TreeIterForTag (tag.Category, out iter);
 
 				InsertInOrder (iter,
-						   tag.Category.Name == tag_store.RootCategory.Name,
-						   tag);
+					       tag.Category.Name == tag_store.RootCategory.Name,
+					       tag);
 			}
 		}
 
@@ -497,7 +506,7 @@ namespace FSpot {
 			GLib.Value value = new GLib.Value ();
 			Model.GetValue (iter, IdColumn, ref value);
 			uint tag_id = (uint) value;
-			Tag tag = tag_store.Get (tag_id);
+			Tag tag = tag_store.Get (tag_id) as Tag;
 
 			// Ignore if it hasn't changed
 			if (tag.Name == args.NewText)
@@ -505,7 +514,7 @@ namespace FSpot {
 
 			// Check that the tag doesn't already exist
 			if (String.Compare (args.NewText, tag.Name, true) != 0 &&
-				tag_store.GetTagByName (args.NewText) != null) {
+			    tag_store.GetTagByName (args.NewText) != null) {
 				HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window,
 					DialogFlags.DestroyWithParent,
 					MessageType.Warning, ButtonsType.Ok,
@@ -524,19 +533,20 @@ namespace FSpot {
 			text_render.Edited -= HandleTagNameEdited;
 
 			args.RetVal = true;
+			return;
 		}
 
-		private static TargetList tagSourceTargetList = new TargetList();
-		private static TargetList tagDestTargetList = new TargetList();
+        private static TargetList tagSourceTargetList = new TargetList();
+        private static TargetList tagDestTargetList = new TargetList();
 
-		static TagSelectionWidget()
-		{
-			tagSourceTargetList.AddTargetEntry(DragDropTargets.TagListEntry);
+        static TagSelectionWidget()
+        {
+            tagSourceTargetList.AddTargetEntry(DragDropTargets.TagListEntry);
 
-			tagDestTargetList.AddTargetEntry(DragDropTargets.PhotoListEntry);
-			tagDestTargetList.AddUriTargets((uint)DragDropTargets.TargetType.UriList);
-			tagDestTargetList.AddTargetEntry(DragDropTargets.TagListEntry);
-		}
+            tagDestTargetList.AddTargetEntry(DragDropTargets.PhotoListEntry);
+            tagDestTargetList.AddUriTargets((uint)DragDropTargets.TargetType.UriList);
+            tagDestTargetList.AddTargetEntry(DragDropTargets.TagListEntry);
+        }
 
 		CellRendererPixbuf pix_render;
 		TreeViewColumn complete_column;
@@ -593,17 +603,17 @@ namespace FSpot {
 			DragBegin += HandleDragBegin;
 
 			Gtk.Drag.SourceSet (this,
-					   Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
-					   (TargetEntry[])tagSourceTargetList,
-					   DragAction.Copy | DragAction.Move);
+			           Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
+			           (TargetEntry[])tagSourceTargetList,
+			           DragAction.Copy | DragAction.Move);
 
 			DragDataReceived += HandleDragDataReceived;
 			DragMotion += HandleDragMotion;
 
 			Gtk.Drag.DestSet (this,
-							  DestDefaults.All,
-							  (TargetEntry[])tagDestTargetList,
-							  DragAction.Copy | DragAction.Move);
+			                  DestDefaults.All,
+			                  (TargetEntry[])tagDestTargetList,
+			                  DragAction.Copy | DragAction.Move);
 		}
 
 		void HandleDragBegin (object sender, DragBeginArgs args)
@@ -643,6 +653,7 @@ namespace FSpot {
 		{
 			if (args.Info == DragDropTargets.TagListEntry.Info) {
 				args.SelectionData.SetTagsData (TagHighlight, args.Context.Targets[0]);
+				return;
 			}
 		}
 
@@ -654,41 +665,41 @@ namespace FSpot {
 		public void HandleDragMotion (object o, DragMotionArgs args)
 		{
 			TreePath path;
-			TreeViewDropPosition position = TreeViewDropPosition.IntoOrAfter;
+	        TreeViewDropPosition position = TreeViewDropPosition.IntoOrAfter;
 			GetPathAtPos (args.X, args.Y, out path);
 
-			if (path == null)
-				return;
+	        if (path == null)
+	            return;
 
-			// Tags can be dropped before, after, or into another tag
-			if (args.Context.Targets[0].Name == "application/x-fspot-tags") {
-				Gdk.Rectangle rect = GetCellArea(path, Columns[0]);
-				double vpos = Math.Abs(rect.Y - args.Y) / (double)rect.Height;
-				if (vpos < 0.2) {
-					position = TreeViewDropPosition.Before;
-				} else if (vpos > 0.8) {
-					position = TreeViewDropPosition.After;
-				}
-			}
+	        // Tags can be dropped before, after, or into another tag
+	        if (args.Context.Targets[0].Name == "application/x-fspot-tags") {
+	            Gdk.Rectangle rect = GetCellArea(path, Columns[0]);
+	            double vpos = Math.Abs(rect.Y - args.Y) / (double)rect.Height;
+	            if (vpos < 0.2) {
+	                position = TreeViewDropPosition.Before;
+	            } else if (vpos > 0.8) {
+	                position = TreeViewDropPosition.After;
+	            }
+	        }
 
 			SetDragDestRow (path, position);
 
 			// Scroll if within 20 pixels of the top or bottom of the tag list
 			if (args.Y < 20)
 				Vadjustment.Value -= 30;
-			else if (((o as Gtk.Widget).Allocation.Height - args.Y) < 20)
+	        else if (((o as Gtk.Widget).Allocation.Height - args.Y) < 20)
 				Vadjustment.Value += 30;
 		}
 
 		public void HandleDragDataReceived (object o, DragDataReceivedArgs args)
 		{
-			TreePath path;
-			TreeViewDropPosition position;
+	        TreePath path;
+	        TreeViewDropPosition position;
 
-			if ( ! GetDestRowAtPos ((int)args.X, (int)args.Y, out path, out position))
-				return;
+	        if ( ! GetDestRowAtPos ((int)args.X, (int)args.Y, out path, out position))
+	            return;
 
-			Tag tag = path == null ? null : TagByPath (path);
+	        Tag tag = path == null ? null : TagByPath (path);
 			if (tag == null)
 				return;
 
@@ -741,34 +752,35 @@ namespace FSpot {
 
 			if (args.Info == DragDropTargets.TagListEntry.Info) {
 				Category parent;
-				if (position == TreeViewDropPosition.Before || position == TreeViewDropPosition.After) {
-					parent = tag.Category;
-				} else {
-					parent = tag as Category;
-				}
+	            if (position == TreeViewDropPosition.Before || position == TreeViewDropPosition.After) {
+	                parent = tag.Category;
+	            } else {
+	                parent = tag as Category;
+	            }
 
 				if (parent == null || TagHighlight.Length < 1) {
-					args.RetVal = false;
+	                args.RetVal = false;
 					return;
-				}
+	            }
 
-				int moved_count = 0;
-				Tag [] highlighted_tags = TagHighlight;
+	            int moved_count = 0;
+	            Tag [] highlighted_tags = TagHighlight;
 				foreach (Tag child in TagHighlight) {
-					// FIXME with this reparenting via dnd, you cannot move a tag to root.
-					if (child != parent && child.Category != parent && !child.IsAncestorOf(parent)) {
-						child.Category = parent;
-
-						// Saving changes will automatically cause the TreeView to be updated
-						database.Tags.Commit (child);
-						moved_count++;
-					}
-				}
+	                // FIXME with this reparenting via dnd, you cannot move a tag to root.
+	                if (child != parent && child.Category != parent && !child.IsAncestorOf(parent)) {
+	                    child.Category = parent as Category;
 
-				// Reselect the same tags
-				TagHighlight = highlighted_tags;
+	                    // Saving changes will automatically cause the TreeView to be updated
+	                    database.Tags.Commit (child);
+	                    moved_count++;
+	                }
+	            }
 
-				args.RetVal = moved_count > 0;
+	            // Reselect the same tags
+	            TagHighlight = highlighted_tags;
+
+	            args.RetVal = moved_count > 0;
+				return;
 			}
 		}
 
diff --git a/src/Clients/MainApp/FSpot/TagStore.cs b/src/Clients/MainApp/FSpot/TagStore.cs
index 805b332..a532434 100644
--- a/src/Clients/MainApp/FSpot/TagStore.cs
+++ b/src/Clients/MainApp/FSpot/TagStore.cs
@@ -31,20 +31,22 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-using System.Collections;
+using Gdk;
+using Gtk;
+using Mono.Unix;
 using System.Collections.Generic;
-
+using System.Collections;
+using System.IO;
+using System;
+using FSpot;
 using FSpot.Core;
 using FSpot.Database;
 using FSpot.Jobs;
+using FSpot.Query;
 using FSpot.Utils;
-
 using Hyena;
 using Hyena.Data.Sqlite;
 
-using Mono.Unix;
-
 namespace FSpot {
 	public class InvalidTagOperationException : InvalidOperationException {
 
@@ -71,9 +73,10 @@ namespace FSpot {
 		{
 			if (t1.IsAncestorOf (t2))
 				return 1;
-			if (t2.IsAncestorOf (t1))
+			else if (t2.IsAncestorOf (t1))
 				return -1;
-			return 0;
+			else
+				return 0;
 		}
 	}
 	
@@ -126,7 +129,7 @@ namespace FSpot {
 			if (l.Count == 0)
 				return null;
 	
-			l.Sort ((t1, t2) => t2.Popularity.CompareTo(t1.Popularity));
+			l.Sort (delegate (Tag t1, Tag t2) {return t2.Popularity.CompareTo (t1.Popularity); });
 	
 			return l.ToArray ();
 		}
@@ -173,7 +176,7 @@ namespace FSpot {
 				uint id = Convert.ToUInt32 (reader ["id"]);
 				uint category_id = Convert.ToUInt32 (reader ["category_id"]);
 	
-				Tag tag = Get (id);
+				Tag tag = Get (id) as Tag;
 				if (tag == null)
 					throw new Exception (String.Format ("Cannot find tag {0}", id));
 				if (category_id == 0)
@@ -190,14 +193,14 @@ namespace FSpot {
 			//Pass 3, set popularity
 			reader = Database.Query ("SELECT tag_id, COUNT (*) AS popularity FROM photo_tags GROUP BY tag_id");
 			while (reader.Read ()) {
-				Tag t = Get (Convert.ToUInt32 (reader ["tag_id"]));
+				Tag t = Get (Convert.ToUInt32 (reader ["tag_id"])) as Tag;
 				if (t != null)
 					t.Popularity = Convert.ToInt32 (reader ["popularity"]);
 			}
 			reader.Dispose ();
 	
 			if (FSpot.App.Instance.Database.Meta.HiddenTagId.Value != null)
-				Hidden = LookupInCache ((uint) FSpot.App.Instance.Database.Meta.HiddenTagId.ValueAsInt);
+				Hidden = LookupInCache ((uint) FSpot.App.Instance.Database.Meta.HiddenTagId.ValueAsInt) as Tag;
 		}
 	
 	
@@ -312,9 +315,12 @@ namespace FSpot {
 	
 		public override Tag Get (uint id)
 		{
-			return id == 0 ? RootCategory : LookupInCache (id);
+			if (id == 0)
+				return RootCategory;
+			else
+				return LookupInCache (id);
 		}
-
+	
 		public override void Remove (Tag tag)
 		{
 			Category category = tag as Category;
diff --git a/src/Clients/MainApp/FSpot/Term.cs b/src/Clients/MainApp/FSpot/Term.cs
index 869b722..b79e595 100644
--- a/src/Clients/MainApp/FSpot/Term.cs
+++ b/src/Clients/MainApp/FSpot/Term.cs
@@ -33,18 +33,15 @@
 // This has to do with Finding photos based on tags
 // http://mail.gnome.org/archives/f-spot-list/2005-November/msg00053.html
 // http://bugzilla-attachments.gnome.org/attachment.cgi?id=54566
-
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Text;
-
-using FSpot.Core;
-
+using Mono.Unix;
 using Gtk;
-
+using Gdk;
 using Hyena;
-
-using Mono.Unix;
+using FSpot.Core;
 
 namespace FSpot
 {
@@ -83,9 +80,11 @@ namespace FSpot
 		/// last Literal in term, else null
 		/// </value>
 		public Term Last {
-			get
-			{
-				return SubTerms.Count > 0 ? SubTerms [SubTerms.Count - 1] : null;
+			get {
+				if (SubTerms.Count > 0)
+					return SubTerms [SubTerms.Count - 1];
+else
+					return null;
 			}
 		}
 
@@ -150,7 +149,12 @@ else
 			}
 		}
 
-		public List<Term> FindByTag (Tag t, bool recursive = true)
+		public List<Term> FindByTag (Tag t)
+		{
+			return FindByTag (t, true);
+		}
+
+		public List<Term> FindByTag (Tag t, bool recursive)
 		{
 			List<Term> results = new List<Term> ();
 
@@ -281,7 +285,7 @@ else
 			StringBuilder condition = new StringBuilder ("(");
 
 			for (int i = 0; i < SubTerms.Count; i++) {
-				Term term = SubTerms [i];
+				Term term = SubTerms [i] as Term;
 				condition.Append (term.SqlCondition ());
 
 				if (i != SubTerms.Count - 1)
@@ -303,7 +307,6 @@ else
 			return String.Empty;
 		}
 
-		// FIXME: The base class shouldn't know about its derived classes?
 		public static Term TermFromOperator (string op, Term parent, Literal after)
 		{
 			//Console.WriteLine ("finding type for operator {0}", op);
@@ -313,8 +316,7 @@ else
 			if (AndTerm.Operators.Contains (op))
 				//Console.WriteLine ("AND!");
 				return new AndTerm (parent, after);
-			
-			if (OrTerm.Operators.Contains (op))
+			else if (OrTerm.Operators.Contains (op))
 				//Console.WriteLine ("OR!");
 				return new OrTerm (parent, after);
 
diff --git a/src/Clients/MainApp/FSpot/ThumbnailCache.cs b/src/Clients/MainApp/FSpot/ThumbnailCache.cs
index dde1336..c785c5e 100644
--- a/src/Clients/MainApp/FSpot/ThumbnailCache.cs
+++ b/src/Clients/MainApp/FSpot/ThumbnailCache.cs
@@ -33,17 +33,15 @@
 //
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
-
-using FSpot.Utils;
-
 using Gdk;
 
 using Hyena;
+using FSpot.Utils;
 
 namespace FSpot
 {
-	// FIXME: This class is never called
 	public class ThumbnailCache : IDisposable {
 	
 		#region Types
@@ -61,7 +59,7 @@ namespace FSpot
 		private int max_count;
 		private List<Thumbnail> pixbuf_mru;
 		private Dictionary<SafeUri,Thumbnail> pixbuf_hash;
-
+		static private ThumbnailCache defaultcache = new ThumbnailCache (DEFAULT_CACHE_SIZE);
 		#endregion
 	
 		#region Public API
@@ -71,14 +69,13 @@ namespace FSpot
 			pixbuf_mru = new List<Thumbnail> (max_count);
 			pixbuf_hash = new Dictionary<SafeUri, Thumbnail> ();
 		}
-
-		static ThumbnailCache()
-		{
-			Default = new ThumbnailCache (DEFAULT_CACHE_SIZE);
+	
+		static public ThumbnailCache Default {
+			get {
+				return defaultcache;
+			}
 		}
-
-		public static ThumbnailCache Default { get; private set; }
-
+	
 		public void AddThumbnail (SafeUri uri, Pixbuf pixbuf)
 		{
 			Thumbnail thumbnail = new Thumbnail ();
@@ -104,7 +101,9 @@ namespace FSpot
 			pixbuf_mru.Remove (item);
 			pixbuf_mru.Insert (0, item);
 	
-		        return item.pixbuf == null ? null : item.pixbuf.ShallowCopy ();
+		        if (item.pixbuf == null)
+		            return null;
+		        return item.pixbuf.ShallowCopy ();
 		}
 	
 		public void RemoveThumbnailForUri (SafeUri uri)
@@ -123,8 +122,8 @@ namespace FSpot
 	
 		public void Dispose ()
 		{
-			foreach (Thumbnail item in pixbuf_mru) {
-				Thumbnail thumb = item;
+			foreach (object item in pixbuf_mru) {
+				Thumbnail thumb = item as Thumbnail;
 				pixbuf_hash.Remove (thumb.uri);
 				thumb.pixbuf.Dispose ();
 			}
@@ -135,8 +134,8 @@ namespace FSpot
 		~ThumbnailCache ()
 		{
 			Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
-			foreach (Thumbnail item in pixbuf_mru) {
-				Thumbnail thumb = item;
+			foreach (object item in pixbuf_mru) {
+				Thumbnail thumb = item as Thumbnail;
 				pixbuf_hash.Remove (thumb.uri);
 				thumb.pixbuf.Dispose ();
 			}
@@ -147,7 +146,7 @@ namespace FSpot
 		private void MaybeExpunge ()
 		{
 			while (pixbuf_mru.Count > max_count) {
-				Thumbnail thumbnail = pixbuf_mru [pixbuf_mru.Count - 1];
+				Thumbnail thumbnail = pixbuf_mru [pixbuf_mru.Count - 1] as Thumbnail;
 	
 				pixbuf_hash.Remove (thumbnail.uri);
 				pixbuf_mru.RemoveAt (pixbuf_mru.Count - 1);
diff --git a/src/Clients/MainApp/FSpot/ThumbnailGenerator.cs b/src/Clients/MainApp/FSpot/ThumbnailGenerator.cs
index 17e43ad..26e7233 100644
--- a/src/Clients/MainApp/FSpot/ThumbnailGenerator.cs
+++ b/src/Clients/MainApp/FSpot/ThumbnailGenerator.cs
@@ -31,14 +31,18 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+using Hyena;
 using FSpot.Utils;
+using FSpot.Platform;
 
-using Hyena;
+using Mono.Unix.Native;
+using GFileInfo = GLib.FileInfo;
 
 namespace FSpot {
     public class ThumbnailLoader : ImageLoaderThread {
 
-        static public readonly ThumbnailLoader Default = new ThumbnailLoader ();
+        static public ThumbnailLoader Default = new ThumbnailLoader ();
 
         public void Request (SafeUri uri, ThumbnailSize size, int order)
         {
diff --git a/src/Clients/MainApp/FSpot/TimeAdaptor.cs b/src/Clients/MainApp/FSpot/TimeAdaptor.cs
index 2fb5367..33c970f 100644
--- a/src/Clients/MainApp/FSpot/TimeAdaptor.cs
+++ b/src/Clients/MainApp/FSpot/TimeAdaptor.cs
@@ -34,12 +34,10 @@
 //
 
 using System;
-using System.Collections.Generic;
 using System.Threading;
-
+using System.Collections.Generic;
 using FSpot.Core;
 using FSpot.Query;
-
 using Hyena;
 
 namespace FSpot {
@@ -61,7 +59,10 @@ namespace FSpot {
 
 			DateTime end = DateFromIndex(max);
 
-			end = order_ascending ? end.AddMonths (1) : end.AddMonths(-1);
+			if (order_ascending)
+				end = end.AddMonths (1);
+			else
+				end = end.AddMonths(-1);
 
 			SetLimits (start, end);
 		}
@@ -87,16 +88,16 @@ namespace FSpot {
 
 			if ((start.Month == 12 && !order_ascending) || (start.Month == 1 && order_ascending))
 				return start.Year.ToString ();
-			
-			return null;
+			else
+				return null;
 		}
 
 		public override int Value (int item)
 		{
 			if (order_ascending)
 				return years [startyear + item/12][item % 12];
-			
-			return years [endyear - item/12][11 - item % 12];
+			else
+				return years [endyear - item/12][11 - item % 12];
 		}
 
 		public DateTime DateFromIndex (int item)
@@ -104,7 +105,10 @@ namespace FSpot {
 			item = Math.Max (item, 0);
 			item = Math.Min (years.Count * 12 - 1, item);
 
-			return order_ascending ? DateFromIndexAscending (item) : DateFromIndexDescending (item);
+			if (order_ascending)
+				return DateFromIndexAscending (item);
+
+			return DateFromIndexDescending (item);
 		}
 
 		private DateTime DateFromIndexAscending (int item)
@@ -178,6 +182,7 @@ namespace FSpot {
 		{
 			DateTime start = DateFromIndex (item);
 			return query [query.LookupItem (start)];
+
 		}
 
 		public override event ChangedHandler Changed;
diff --git a/src/Clients/MainApp/FSpot/UriCollection.cs b/src/Clients/MainApp/FSpot/UriCollection.cs
index f7843ef..85f168f 100644
--- a/src/Clients/MainApp/FSpot/UriCollection.cs
+++ b/src/Clients/MainApp/FSpot/UriCollection.cs
@@ -29,14 +29,18 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+using System.IO;
+using System.Collections;
 using System.Collections.Generic;
 using System.Xml;
 
+using Hyena;
+using GLib;
+
 using FSpot.Core;
 using FSpot.Imaging;
 
-using Hyena;
-
 namespace FSpot {
 	public class UriCollection : PhotoList {
 		public UriCollection () : base (new IPhoto [0])
@@ -148,7 +152,9 @@ namespace FSpot {
 					if (ImageFile.HasLoader (i))
 						items.Add (new FilePhoto (i));
 				}
-				ThreadAssist.ProxyToMain (() => collection.Add (items.ToArray ()));
+				ThreadAssist.ProxyToMain (() => {
+					collection.Add (items.ToArray ());
+				});
 			}
 		}
 
diff --git a/src/Clients/MainApp/FSpot/XScreenSaverSlide.cs b/src/Clients/MainApp/FSpot/XScreenSaverSlide.cs
index 9120a20..1c4e0b6 100644
--- a/src/Clients/MainApp/FSpot/XScreenSaverSlide.cs
+++ b/src/Clients/MainApp/FSpot/XScreenSaverSlide.cs
@@ -29,10 +29,14 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
-using Gdk;
 using Gtk;
+using Gdk;
+using System;
+using GLib;
+using System.Runtime.InteropServices;
+using FSpot;
+using FSpot.Utils;
+using Hyena;
 
 namespace FSpot {
 	public class XScreenSaverSlide : Gtk.Window {
@@ -74,7 +78,7 @@ namespace FSpot {
 					SizeAllocate (new Gdk.Rectangle (geom.X, geom.Y, geom.Width, geom.Height));
 					Resize (geom.Width, geom.Height);
 					return;
-				} catch (Exception e) {
+				} catch (System.Exception e) {
 					Hyena.Log.Exception (e);
 				}
 			} else {
diff --git a/src/Clients/MainApp/FSpot/main.cs b/src/Clients/MainApp/FSpot/main.cs
index eceb83a..64b44db 100644
--- a/src/Clients/MainApp/FSpot/main.cs
+++ b/src/Clients/MainApp/FSpot/main.cs
@@ -33,22 +33,26 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gtk;
 using System;
-using System.Collections.Generic;
-using System.IO;
 using System.Reflection;
-
-using FSpot.Imaging;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Mono.Unix;
+using Mono.Addins;
+using Mono.Addins.Setup;
+using FSpot.Core;
 using FSpot.Utils;
-
+using FSpot.UI.Dialog;
+using FSpot.Extensions;
+using FSpot.Imaging;
 using Hyena;
 using Hyena.CommandLine;
 using Hyena.Gui;
 
-using Mono.Addins;
-using Mono.Addins.Setup;
-using Mono.Unix;
-
 namespace FSpot
 {
 	public static class Driver
@@ -299,10 +303,7 @@ namespace FSpot
 					GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, "f-spot", 32, (Gtk.IconLookupFlags)0),
 					GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, "f-spot", 48, (Gtk.IconLookupFlags)0)
 				};
-			} catch (Exception ex)
-			{
-				Log.DebugException(ex);
-			}
+			} catch {}
 
 			CleanRoomStartup.Startup (Startup);
 
diff --git a/src/Clients/MainApp/ImageLoaderThread.cs b/src/Clients/MainApp/ImageLoaderThread.cs
index 2ac34a7..4668f6f 100644
--- a/src/Clients/MainApp/ImageLoaderThread.cs
+++ b/src/Clients/MainApp/ImageLoaderThread.cs
@@ -30,19 +30,18 @@
 // 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 Gdk;
+using Gtk;
 using System.Collections;
 using System.Collections.Generic;
 using System.Threading;
-
-using FSpot.Imaging;
-using FSpot.Utils;
-
-using Gdk;
-using Gtk;
+using System;
 
 using Hyena;
 
+using FSpot.Utils;
+using FSpot.Imaging;
+
 public class ImageLoaderThread
 {
 	// Types.
@@ -63,9 +62,11 @@ public class ImageLoaderThread
 		private Pixbuf result;
 
 		public Pixbuf Result {
-			get
-			{
-				return result == null ? null : result.ShallowCopy ();
+			get {
+				if (result == null) {
+					return null;
+				}
+				return result.ShallowCopy ();
 			}
 			set { result = value; }
 		}
@@ -97,7 +98,7 @@ public class ImageLoaderThread
 
 
 	#region Private members.
-	static readonly List<ImageLoaderThread> instances = new List<ImageLoaderThread> ();
+	static List<ImageLoaderThread> instances = new List<ImageLoaderThread> ();
 
 	/* The thread used to handle the requests.  */
 	private Thread worker_thread;
@@ -192,7 +193,12 @@ public class ImageLoaderThread
 		}
 	}
 
-	public virtual void Request (SafeUri uri, int order, int width = 0, int height = 0)
+	public void Request (SafeUri uri, int order)
+	{
+		Request (uri, order, 0, 0);
+	}
+
+	public virtual void Request (SafeUri uri, int order, int width, int height)
 	{
 		lock (queue) {
 			if (InsertRequest (uri, order, width, height)) {
@@ -305,7 +311,7 @@ public class ImageLoaderThread
 
 					int pos = queue.Count - 1;
 
-					current_request = queue [pos];
+					current_request = queue [pos] as RequestItem;
 					queue.RemoveAt (pos);
 					requests_by_uri.Remove (current_request.Uri);
 				}
diff --git a/src/Clients/MainApp/MainApp.csproj b/src/Clients/MainApp/MainApp.csproj
index 5827f1a..506f5b3 100644
--- a/src/Clients/MainApp/MainApp.csproj
+++ b/src/Clients/MainApp/MainApp.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>MainApp</RootNamespace>
     <AssemblyName>f-spot</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -45,7 +27,6 @@
         <Variable name="GTK_MODULES" value="" />
       </EnvironmentVariables>
     </EnvironmentVariables>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -55,7 +36,6 @@
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -323,11 +303,8 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="System.Data" />
     <Reference Include="Mono.Posix" />
     <Reference Include="Mono.Addins, Version=0.4.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756">
@@ -406,20 +383,8 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot\" />
+    <Folder Include="FSpot.Widgets\" />
+    <Folder Include="Pinta\" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Clients/MainApp/PhotoTagMenu.cs b/src/Clients/MainApp/PhotoTagMenu.cs
index 820a1ff..bf183c6 100644
--- a/src/Clients/MainApp/PhotoTagMenu.cs
+++ b/src/Clients/MainApp/PhotoTagMenu.cs
@@ -29,20 +29,19 @@
 //
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
-
-using FSpot.Core;
-
 using Gtk;
 
+using FSpot;
+using FSpot.Core;
 using Hyena;
 
 public class PhotoTagMenu : Menu {
 	public delegate void TagSelectedHandler (Tag t);
 	public event TagSelectedHandler TagSelected;
 
-	public PhotoTagMenu ()
-	{
+	public PhotoTagMenu () : base () {
 	}
 
 	protected PhotoTagMenu (IntPtr raw) : base (raw) {}
diff --git a/src/Clients/MainApp/PhotoVersionCommands.cs b/src/Clients/MainApp/PhotoVersionCommands.cs
index 247fbc6..873733c 100644
--- a/src/Clients/MainApp/PhotoVersionCommands.cs
+++ b/src/Clients/MainApp/PhotoVersionCommands.cs
@@ -31,17 +31,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gtk;
 using System;
-
+using Mono.Unix;
 using FSpot;
-using FSpot.UI.Dialog;
-
-using Gtk;
-
 using Hyena;
 using Hyena.Widgets;
-
-using Mono.Unix;
+using FSpot.UI.Dialog;
 
 public class PhotoVersionCommands
 {
diff --git a/src/Clients/MainApp/PhotoVersionMenu.cs b/src/Clients/MainApp/PhotoVersionMenu.cs
index aa1499e..6e4fbbc 100644
--- a/src/Clients/MainApp/PhotoVersionMenu.cs
+++ b/src/Clients/MainApp/PhotoVersionMenu.cs
@@ -29,12 +29,15 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+
+using Gtk;
+
 using System;
 using System.Collections.Generic;
 
+using FSpot;
 using FSpot.Core;
 
-using Gtk;
 
 public class PhotoVersionMenu : Menu {
 
diff --git a/src/Clients/MainApp/Pinta/CairoExtensions.cs b/src/Clients/MainApp/Pinta/CairoExtensions.cs
index f443427..2a663af 100644
--- a/src/Clients/MainApp/Pinta/CairoExtensions.cs
+++ b/src/Clients/MainApp/Pinta/CairoExtensions.cs
@@ -34,8 +34,8 @@
 /////////////////////////////////////////////////////////////////////////////////
 
 using System;
-
 using Cairo;
+using System.Collections.Generic;
 
 namespace Pinta.Core
 {
diff --git a/src/Clients/MainApp/Pinta/ColorBgra.cs b/src/Clients/MainApp/Pinta/ColorBgra.cs
index 8525453..d07ec11 100644
--- a/src/Clients/MainApp/Pinta/ColorBgra.cs
+++ b/src/Clients/MainApp/Pinta/ColorBgra.cs
@@ -6,6 +6,9 @@
 /////////////////////////////////////////////////////////////////////////////////
 
 using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
 using System.Runtime.InteropServices;
 
 namespace Pinta.Core
diff --git a/src/Clients/MainApp/Pinta/GaussianBlurEffect.cs b/src/Clients/MainApp/Pinta/GaussianBlurEffect.cs
index 6d9d029..2009e6f 100644
--- a/src/Clients/MainApp/Pinta/GaussianBlurEffect.cs
+++ b/src/Clients/MainApp/Pinta/GaussianBlurEffect.cs
@@ -7,9 +7,10 @@
 // Ported to Pinta by: Jonathan Pobst <monkey jpobst com>                      //
 /////////////////////////////////////////////////////////////////////////////////
 
+using System;
 using Cairo;
-
 using Pinta.Core;
+using Mono.Unix;
 
 namespace Pinta.Effects
 {
diff --git a/src/Clients/MainApp/PixbufUtils.cs b/src/Clients/MainApp/PixbufUtils.cs
index 6ac007a..4594ca4 100644
--- a/src/Clients/MainApp/PixbufUtils.cs
+++ b/src/Clients/MainApp/PixbufUtils.cs
@@ -30,28 +30,23 @@
 // 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 Gdk;
+using System.Collections;
+using System.Runtime.InteropServices;
 using System;
 using System.IO;
-using System.Runtime.InteropServices;
-
-using Cairo;
-
 using FSpot;
 using FSpot.Core;
-using FSpot.Imaging;
-using FSpot.UI.Dialog;
 using FSpot.Utils;
-
-using Gdk;
-
+using FSpot.Imaging;
 using Hyena;
+using TagLib.Image;
+using Cairo;
+using FSpot.UI.Dialog;
 
 using Pinta.Core;
 using Pinta.Effects;
 
-using TagLib.Image;
-
 public static class PixbufUtils
 {
 	static Pixbuf error_pixbuf = null;
@@ -72,15 +67,15 @@ public static class PixbufUtils
 				  out int fit_width, out int fit_height)
 	{
 		return Fit (pixbuf.Width, pixbuf.Height,
-				dest_width, dest_height,
-				upscale_smaller,
-				out fit_width, out fit_height);
+			    dest_width, dest_height,
+			    upscale_smaller,
+			    out fit_width, out fit_height);
 	}
 
 	public static double Fit (int orig_width, int orig_height,
-							  int dest_width, int dest_height,
-							  bool upscale_smaller,
-							  out int fit_width, out int fit_height)
+				  int dest_width, int dest_height,
+				  bool upscale_smaller,
+				  out int fit_width, out int fit_height)
 	{
 		if (orig_width == 0 || orig_height == 0) {
 			fit_width = 0;
@@ -256,10 +251,10 @@ public static class PixbufUtils
 
 		Pixbuf flattened = new Pixbuf (Colorspace.Rgb, false, 8, pixbuf.Width, pixbuf.Height);
 		pixbuf.CompositeColor (flattened, 0, 0,
-					   pixbuf.Width, pixbuf.Height,
-					   0, 0, 1, 1,
-					   InterpType.Bilinear,
-					   255, 0, 0, 2000, 0xffffff, 0xffffff);
+				       pixbuf.Width, pixbuf.Height,
+				       0, 0, 1, 1,
+				       InterpType.Bilinear,
+				       255, 0, 0, 2000, 0xffffff, 0xffffff);
 
 		return flattened;
 	}
@@ -283,10 +278,10 @@ public static class PixbufUtils
 	}
 
 	unsafe public static Pixbuf UnsharpMask (Pixbuf src,
-											 double radius,
-											 double amount,
-											 double threshold,
-											 ThreadProgressDialog progressDialog)
+                                             double radius,
+                                             double amount,
+                                             double threshold,
+                                             ThreadProgressDialog progressDialog)
 	{
 		// Make sure the pixbuf has an alpha channel before we try to blur it
 		src = src.AddAlpha (false, 0, 0, 0);
@@ -366,12 +361,17 @@ public static class PixbufUtils
 			g.SetSource (surf);
 			g.Paint ();
 		}
-		
+        
 		return newsurf;
 	}
 
+	public unsafe static Gdk.Pixbuf RemoveRedeye (Gdk.Pixbuf src, Gdk.Rectangle area)
+	{
+		return RemoveRedeye (src, area, -15);
+	}
+
 	//threshold, factors and comparisons borrowed from the gimp plugin 'redeye.c' by Robert Merkel
-	public unsafe static Gdk.Pixbuf RemoveRedeye (Gdk.Pixbuf src, Gdk.Rectangle area, int threshold = -15)
+	public unsafe static Gdk.Pixbuf RemoveRedeye (Gdk.Pixbuf src, Gdk.Rectangle area, int threshold)
 	{
 		Gdk.Pixbuf copy = src.Copy ();
 		Gdk.Pixbuf selection = new Gdk.Pixbuf (copy, area.X, area.Y, area.Width, area.Height);
@@ -392,7 +392,7 @@ public static class PixbufUtils
 				int adjusted_blue = (int)(s [2] * BLUE_FACTOR);
 
 				if (adjusted_red >= adjusted_green - threshold
-					&& adjusted_red >= adjusted_blue - threshold)
+				    && adjusted_red >= adjusted_blue - threshold)
 					s [0] = (byte)(((double)(adjusted_green + adjusted_blue)) / (2.0 * RED_FACTOR));
 				s += channels;
 			}
@@ -416,9 +416,9 @@ public static class PixbufUtils
 	}
 
 	public static unsafe void ColorAdjust (Pixbuf src, Pixbuf dest,
-						   double brightness, double contrast,
-						   double hue, double saturation,
-						   int src_color, int dest_color)
+					       double brightness, double contrast,
+					       double hue, double saturation,
+					       int src_color, int dest_color)
 	{
 		if (src.Width != dest.Width || src.Height != dest.Height)
 			throw new Exception ("Invalid Dimensions");
@@ -452,8 +452,8 @@ public static class PixbufUtils
 
 		for (int row = 0; row < src.Height; row++) {
 			trans.Apply ((IntPtr)(srcpix + row * src.Rowstride),
-					 (IntPtr)(destpix + row * dest.Rowstride),
-					 (uint)width);
+				     (IntPtr)(destpix + row * dest.Rowstride),
+				     (uint)width);
 		}
 
 	}
@@ -525,7 +525,12 @@ public static class PixbufUtils
 		return ret;
 	}
 
-	public static void CreateDerivedVersion (SafeUri source, SafeUri destination, uint jpeg_quality = 95)
+	public static void CreateDerivedVersion (SafeUri source, SafeUri destination)
+	{
+		CreateDerivedVersion (source, destination, 95);
+	}
+
+	public static void CreateDerivedVersion (SafeUri source, SafeUri destination, uint jpeg_quality)
 	{
 		if (source.GetExtension () == destination.GetExtension ()) {
 			// Simple copy will do!
@@ -579,7 +584,7 @@ public static class PixbufUtils
 
 	[DllImport("libgdk_pixbuf-2.0-0.dll")]
 	static extern bool gdk_pixbuf_save (IntPtr raw, IntPtr filename, IntPtr type, out IntPtr error,
-			IntPtr optlabel1, IntPtr optvalue1, IntPtr dummy);
+            IntPtr optlabel1, IntPtr optvalue1, IntPtr dummy);
 
 	private static bool Save (this Pixbuf pixbuf, string filename, string type, uint jpeg_quality)
 	{
diff --git a/src/Clients/MainApp/TagCommands.cs b/src/Clients/MainApp/TagCommands.cs
index 63dec0e..82276f4 100644
--- a/src/Clients/MainApp/TagCommands.cs
+++ b/src/Clients/MainApp/TagCommands.cs
@@ -31,20 +31,22 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Gtk;
+using Gdk;
+
 using System;
+using System.Text;
+using System.Collections;
 using System.Collections.Generic;
 
+using Mono.Unix;
 using FSpot;
 using FSpot.Core;
+using FSpot.Utils;
 using FSpot.UI.Dialog;
-
-using Gdk;
-using Gtk;
-
+using FSpot.Widgets;
 using Hyena;
 
-using Mono.Unix;
-
 public class TagCommands {
 
 	public enum TagType {
@@ -141,18 +143,17 @@ public class TagCommands {
 			}
 		}
 
-		// FIXME:  This is never used?  Should this be connected to something?
 		private void HandleTagNameEntryChanged (object sender, EventArgs args)
 		{
 			Update ();
 		}
 
 		private Category Category {
-			get
-			{
+			get {
 				if (categories.Count == 0)
 					return tag_store.RootCategory;
-				return categories [category_option_menu.Active] as Category;
+				else
+					return categories [category_option_menu.Active] as Category;
 			}
 			set {
 				if ((value != null) && (categories.Count > 0)) {
@@ -205,7 +206,7 @@ public class TagCommands {
 					Category parent_category = Category;
 
 					if (type == TagType.Category)
-						new_tag = tag_store.CreateCategory (parent_category, tag_name_entry.Text, autoicon);
+						new_tag = tag_store.CreateCategory (parent_category, tag_name_entry.Text, autoicon) as Tag;
 					else
 						new_tag = tag_store.CreateTag (parent_category, tag_name_entry.Text, autoicon);
 				} catch (Exception ex) {
@@ -214,7 +215,7 @@ public class TagCommands {
 				}
 			}
 
-			Destroy ();
+			this.Destroy ();
 			return new_tag;
 		}
 
diff --git a/src/Clients/MainApp/TagPopup.cs b/src/Clients/MainApp/TagPopup.cs
index c1d9572..51abf8f 100644
--- a/src/Clients/MainApp/TagPopup.cs
+++ b/src/Clients/MainApp/TagPopup.cs
@@ -32,15 +32,12 @@
 // 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 Mono.Unix;
 using FSpot;
 using FSpot.Core;
 using FSpot.Utils;
 
-using Mono.Unix;
-
 public class TagPopup
 {
 	public void Activate (Gdk.EventButton eb, Tag tag, Tag [] tags)
@@ -51,18 +48,18 @@ public class TagPopup
 		Gtk.Menu popup_menu = new Gtk.Menu ();
 
 		GtkUtil.MakeMenuItem (popup_menu,
-				String.Format (Catalog.GetPluralString ("Find", "Find", tags.Length), tags.Length),
-				"gtk-add",
-				new EventHandler (App.Instance.Organizer.HandleIncludeTag),
-				true
-		);
+                String.Format (Catalog.GetPluralString ("Find", "Find", tags.Length), tags.Length),
+                "gtk-add",
+                new EventHandler (App.Instance.Organizer.HandleIncludeTag),
+                true
+        );
 
 		FSpot.TermMenuItem.Create (tags, popup_menu);
 
 		GtkUtil.MakeMenuSeparator (popup_menu);
 
 		GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Create New Tag..."), "tag-new",
-					  App.Instance.Organizer.HandleCreateNewCategoryCommand, true);
+				      App.Instance.Organizer.HandleCreateNewCategoryCommand, true);
 
 		GtkUtil.MakeMenuSeparator (popup_menu);
 
@@ -78,18 +75,18 @@ public class TagPopup
 		GtkUtil.MakeMenuSeparator (popup_menu);
 
 		GtkUtil.MakeMenuItem (popup_menu,
-					  Catalog.GetPluralString ("Attach Tag to Selection", "Attach Tags to Selection", tags_count), "gtk-add",
-					  new EventHandler (App.Instance.Organizer.HandleAttachTagCommand), tag != null && photo_count > 0);
+				      Catalog.GetPluralString ("Attach Tag to Selection", "Attach Tags to Selection", tags_count), "gtk-add",
+				      new EventHandler (App.Instance.Organizer.HandleAttachTagCommand), tag != null && photo_count > 0);
 
 		GtkUtil.MakeMenuItem (popup_menu,
-					  Catalog.GetPluralString ("Remove Tag From Selection", "Remove Tags From Selection", tags_count), "gtk-remove",
-					  new EventHandler (App.Instance.Organizer.HandleRemoveTagCommand), tag != null && photo_count > 0);
+				      Catalog.GetPluralString ("Remove Tag From Selection", "Remove Tags From Selection", tags_count), "gtk-remove",
+				      new EventHandler (App.Instance.Organizer.HandleRemoveTagCommand), tag != null && photo_count > 0);
 
 		if (tags_count > 1 && tag != null) {
 			GtkUtil.MakeMenuSeparator (popup_menu);
 
 			GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Merge Tags"),
-						  new EventHandler (App.Instance.Organizer.HandleMergeTagsCommand), true);
+					      new EventHandler (App.Instance.Organizer.HandleMergeTagsCommand), true);
 
 		}
 
diff --git a/src/Clients/MainApp/ThumbnailCommand.cs b/src/Clients/MainApp/ThumbnailCommand.cs
index db6d543..ba36a81 100644
--- a/src/Clients/MainApp/ThumbnailCommand.cs
+++ b/src/Clients/MainApp/ThumbnailCommand.cs
@@ -30,11 +30,11 @@
 //
 
 using System;
-
+using Gtk;
 using FSpot;
 using FSpot.Core;
-using FSpot.UI.Dialog;
 using FSpot.Utils;
+using FSpot.UI.Dialog;
 
 public class ThumbnailCommand {
 
diff --git a/src/Core/FSpot.Bling/FSpot.Bling.csproj b/src/Core/FSpot.Bling/FSpot.Bling.csproj
index a082933..d4ba5e5 100644
--- a/src/Core/FSpot.Bling/FSpot.Bling.csproj
+++ b/src/Core/FSpot.Bling/FSpot.Bling.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Bling</RootNamespace>
     <AssemblyName>FSpot.Bling</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -83,21 +63,4 @@
       <HintPath>..\..\..\lib\gtk-sharp-beans\gtk-sharp-beans.dll</HintPath>
     </Reference>
   </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Core/FSpot.Bling/FSpot.Bling/Animation.cs b/src/Core/FSpot.Bling/FSpot.Bling/Animation.cs
index 1809d6f..b007ab5 100644
--- a/src/Core/FSpot.Bling/FSpot.Bling/Animation.cs
+++ b/src/Core/FSpot.Bling/FSpot.Bling/Animation.cs
@@ -31,7 +31,6 @@
 
 using System;
 using System.ComponentModel;
-
 using GLibBeans;
 
 namespace FSpot.Bling
diff --git a/src/Core/FSpot.Bling/FSpot.Bling/BackEase.cs b/src/Core/FSpot.Bling/FSpot.Bling/BackEase.cs
index 59a47dc..25b12ce 100644
--- a/src/Core/FSpot.Bling/FSpot.Bling/BackEase.cs
+++ b/src/Core/FSpot.Bling/FSpot.Bling/BackEase.cs
@@ -30,7 +30,6 @@
 using System;
 
 namespace FSpot.Bling
-	// FIXME: This is never used
 {	public abstract class BackEase : EasingFunction
 	{
 		double amplitude;
@@ -39,7 +38,7 @@ namespace FSpot.Bling
 		{
 		}
 
-		public BackEase (double amplitude)
+		public BackEase (double amplitude) : base ()
 		{
 			if (amplitude < 0)
 				throw new ArgumentOutOfRangeException ("amplitude");
diff --git a/src/Core/FSpot.Bling/FSpot.Bling/CubicEase.cs b/src/Core/FSpot.Bling/FSpot.Bling/CubicEase.cs
index d009f33..99647c0 100644
--- a/src/Core/FSpot.Bling/FSpot.Bling/CubicEase.cs
+++ b/src/Core/FSpot.Bling/FSpot.Bling/CubicEase.cs
@@ -27,10 +27,15 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+
 namespace FSpot.Bling
 {	public class CubicEase : EasingFunction
 	{
-	
+		public CubicEase () : base ()
+		{
+		}
+
 		public CubicEase (EasingMode easingMode) : base (easingMode)
 		{
 		}
diff --git a/src/Core/FSpot.Bling/FSpot.Bling/EasedAnimation.cs b/src/Core/FSpot.Bling/FSpot.Bling/EasedAnimation.cs
index 3df41c7..dad8e71 100644
--- a/src/Core/FSpot.Bling/FSpot.Bling/EasedAnimation.cs
+++ b/src/Core/FSpot.Bling/FSpot.Bling/EasedAnimation.cs
@@ -37,7 +37,7 @@ namespace FSpot.Bling
 		{
 		}
 
-		public EasedAnimation (EasingFunction easingFunction)
+		public EasedAnimation (EasingFunction easingFunction) : base ()
 		{
 			EasingFunction = easingFunction;
 		}
diff --git a/src/Core/FSpot.Bling/FSpot.Bling/QuinticEase.cs b/src/Core/FSpot.Bling/FSpot.Bling/QuinticEase.cs
index 7d558f4..3542641 100644
--- a/src/Core/FSpot.Bling/FSpot.Bling/QuinticEase.cs
+++ b/src/Core/FSpot.Bling/FSpot.Bling/QuinticEase.cs
@@ -27,12 +27,12 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+
 namespace FSpot.Bling
-{
-	// FIXME: This is never used
-	public abstract class QuinticEase : EasingFunction
+{	public abstract class QuinticEase : EasingFunction
 	{
-		public QuinticEase ()
+		public QuinticEase () : base ()
 		{
 		}
 		
diff --git a/src/Core/FSpot.Cms/Cms/CmsException.cs b/src/Core/FSpot.Cms/Cms/CmsException.cs
index 09ddb51..b4bb642 100644
--- a/src/Core/FSpot.Cms/Cms/CmsException.cs
+++ b/src/Core/FSpot.Cms/Cms/CmsException.cs
@@ -32,7 +32,7 @@ using System.Runtime.Serialization;
 
 namespace Cms {
 	[Serializable]
-	public class CmsException : Exception {
+	public class CmsException : System.Exception {
 		public CmsException (string message) : base (message)
 		{
 		}
@@ -45,7 +45,7 @@ namespace Cms {
 		{
 		}
 
-		public CmsException ()
+		public CmsException () : base ()
 		{
 		}
 	}
diff --git a/src/Core/FSpot.Cms/Cms/ColorCIELCh.cs b/src/Core/FSpot.Cms/Cms/ColorCIELCh.cs
index 425f6b3..25fea0c 100644
--- a/src/Core/FSpot.Cms/Cms/ColorCIELCh.cs
+++ b/src/Core/FSpot.Cms/Cms/ColorCIELCh.cs
@@ -27,6 +27,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+using System.IO;
+using System.Collections;
+using System.Runtime.InteropServices;
+using System.Reflection;
+using System.Runtime.Serialization;
+
 namespace Cms {
 	public struct ColorCIELCh {
 		public double L;
diff --git a/src/Core/FSpot.Cms/Cms/ColorCIELab.cs b/src/Core/FSpot.Cms/Cms/ColorCIELab.cs
index 9ffd5c6..5c14bde 100644
--- a/src/Core/FSpot.Cms/Cms/ColorCIELab.cs
+++ b/src/Core/FSpot.Cms/Cms/ColorCIELab.cs
@@ -28,6 +28,11 @@
 //
 
 using System;
+using System.IO;
+using System.Collections;
+using System.Runtime.InteropServices;
+using System.Reflection;
+using System.Runtime.Serialization;
 
 namespace Cms {
 	public struct ColorCIELab {
diff --git a/src/Core/FSpot.Cms/Cms/ColorCIEXYZ.cs b/src/Core/FSpot.Cms/Cms/ColorCIEXYZ.cs
index e6440b9..479a69a 100644
--- a/src/Core/FSpot.Cms/Cms/ColorCIEXYZ.cs
+++ b/src/Core/FSpot.Cms/Cms/ColorCIEXYZ.cs
@@ -28,7 +28,11 @@
 //
 
 using System;
+using System.IO;
+using System.Collections;
 using System.Runtime.InteropServices;
+using System.Reflection;
+using System.Runtime.Serialization;
 
 namespace Cms {
 	public struct ColorCIEXYZ {
diff --git a/src/Core/FSpot.Cms/Cms/ColorCIExyY.cs b/src/Core/FSpot.Cms/Cms/ColorCIExyY.cs
index f8b82db..7397bb9 100644
--- a/src/Core/FSpot.Cms/Cms/ColorCIExyY.cs
+++ b/src/Core/FSpot.Cms/Cms/ColorCIExyY.cs
@@ -29,8 +29,10 @@
 
 using System;
 using System.IO;
-using System.Reflection;
+using System.Collections;
 using System.Runtime.InteropServices;
+using System.Reflection;
+using System.Runtime.Serialization;
 
 namespace Cms {
 	public struct ColorCIExyY {
diff --git a/src/Core/FSpot.Cms/Cms/GammaTable.cs b/src/Core/FSpot.Cms/Cms/GammaTable.cs
index 5605b77..8d95350 100644
--- a/src/Core/FSpot.Cms/Cms/GammaTable.cs
+++ b/src/Core/FSpot.Cms/Cms/GammaTable.cs
@@ -28,7 +28,11 @@
 //
 
 using System;
+using System.IO;
+using System.Collections;
 using System.Runtime.InteropServices;
+using System.Reflection;
+using System.Runtime.Serialization;
 
 namespace Cms {
 	public class GammaTable : IDisposable {
diff --git a/src/Core/FSpot.Cms/Cms/Profile.cs b/src/Core/FSpot.Cms/Cms/Profile.cs
index 7cff841..c469858 100644
--- a/src/Core/FSpot.Cms/Cms/Profile.cs
+++ b/src/Core/FSpot.Cms/Cms/Profile.cs
@@ -28,7 +28,11 @@
 //
 
 using System;
+using System.IO;
+using System.Collections;
 using System.Runtime.InteropServices;
+using System.Reflection;
+using System.Runtime.Serialization;
 
 namespace Cms {
 	public class Profile : IDisposable {
@@ -87,7 +91,8 @@ namespace Cms {
 		{
 			if (transfer == null)
 				return new Profile (NativeMethods.CmsCreateGrayProfile (ref whitePoint, new GammaTable (4096, 2.2).Handle));
-			return new Profile (NativeMethods.CmsCreateGrayProfile (ref whitePoint, transfer.Handle));
+			else
+				return new Profile (NativeMethods.CmsCreateGrayProfile (ref whitePoint, transfer.Handle));
 		}
 
 		public static Profile GetScreenProfile (Gdk.Screen screen)
@@ -97,7 +102,10 @@ namespace Cms {
 
 			IntPtr profile = NativeMethods.FScreenGetProfile (screen.Handle);
 			
-			return profile == IntPtr.Zero ? null : new Profile (profile);
+			if (profile == IntPtr.Zero)
+				return null;
+			
+			return new Profile (profile);
 		}
 
 
@@ -234,8 +242,8 @@ namespace Cms {
 			
 			if (profileh == IntPtr.Zero)
 				throw new CmsException ("Invalid Profile Data");
-			
-			Handle = new HandleRef (this, profileh);
+			else
+				Handle = new HandleRef (this, profileh);
 		}
 
 		public ColorCIEXYZ MediaWhitePoint {
diff --git a/src/Core/FSpot.Cms/Cms/SaveException.cs b/src/Core/FSpot.Cms/Cms/SaveException.cs
index 37ee878..4edf837 100644
--- a/src/Core/FSpot.Cms/Cms/SaveException.cs
+++ b/src/Core/FSpot.Cms/Cms/SaveException.cs
@@ -44,5 +44,9 @@ namespace Cms {
 		public SaveException (string message, Exception innerException) : base (message, innerException)
 		{
 		}
+
+		public SaveException () : base ()
+		{
+		}
 	}
 }
diff --git a/src/Core/FSpot.Cms/Cms/Transform.cs b/src/Core/FSpot.Cms/Cms/Transform.cs
index d7816e4..2ceddc8 100644
--- a/src/Core/FSpot.Cms/Cms/Transform.cs
+++ b/src/Core/FSpot.Cms/Cms/Transform.cs
@@ -28,7 +28,11 @@
 //
 
 using System;
+using System.IO;
+using System.Collections;
 using System.Runtime.InteropServices;
+using System.Reflection;
+using System.Runtime.Serialization;
 
 namespace Cms {
 	public class Transform : IDisposable {
diff --git a/src/Core/FSpot.Cms/FSpot.Cms.csproj b/src/Core/FSpot.Cms/FSpot.Cms.csproj
index 0a417cf..37f91fc 100644
--- a/src/Core/FSpot.Cms/FSpot.Cms.csproj
+++ b/src/Core/FSpot.Cms/FSpot.Cms.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Cms</RootNamespace>
     <AssemblyName>FSpot.Cms</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -40,7 +22,6 @@
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -50,7 +31,6 @@
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -87,23 +67,5 @@
   </ProjectExtensions>
   <ItemGroup>
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-  </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Core/FSpot.Core/FSpot.Core.csproj b/src/Core/FSpot.Core/FSpot.Core.csproj
index 45f6e2d..cca4cae 100644
--- a/src/Core/FSpot.Core/FSpot.Core.csproj
+++ b/src/Core/FSpot.Core/FSpot.Core.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Core</RootNamespace>
     <AssemblyName>FSpot.Core</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugType>full</DebugType>
@@ -37,7 +19,6 @@
     <WarningLevel>4</WarningLevel>
     <DebugSymbols>true</DebugSymbols>
     <DefineConstants>ENABLE_TESTS</DefineConstants>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -96,7 +77,6 @@
   </ItemGroup>
   <ItemGroup>
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="System.Xml" />
     <Reference Include="Mono.Posix" />
@@ -111,20 +91,6 @@
     </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Core\" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Core/FSpot.Core/FSpot.Core/BrowsableCollectionProxy.cs b/src/Core/FSpot.Core/FSpot.Core/BrowsableCollectionProxy.cs
index 341cfb1..87bb6e1 100644
--- a/src/Core/FSpot.Core/FSpot.Core/BrowsableCollectionProxy.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/BrowsableCollectionProxy.cs
@@ -27,6 +27,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System.Collections.Generic;
+
 namespace FSpot.Core {
     public class BrowsableCollectionProxy : IBrowsableCollection {
 
@@ -67,14 +69,15 @@ namespace FSpot.Core {
 
         public bool Contains (IPhoto item)
         {
-        	return collection != null && collection.Contains (item);
+            if (collection == null)
+                return false;
+            return collection.Contains (item);
         }
 
-    	public IPhoto this [int index] {
+        public IPhoto this [int index] {
             get {
                 if (collection == null)
                     throw new System.IndexOutOfRangeException ();
-
                 return collection [index];
             }
         }
diff --git a/src/Core/FSpot.Core/FSpot.Core/BrowsableEventArgs.cs b/src/Core/FSpot.Core/FSpot.Core/BrowsableEventArgs.cs
index b31354b..7df9e43 100644
--- a/src/Core/FSpot.Core/FSpot.Core/BrowsableEventArgs.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/BrowsableEventArgs.cs
@@ -29,6 +29,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+
 namespace FSpot.Core
 {
 	public class BrowsableEventArgs : System.EventArgs {
diff --git a/src/Core/FSpot.Core/FSpot.Core/BrowsablePointer.cs b/src/Core/FSpot.Core/FSpot.Core/BrowsablePointer.cs
index 9be6987..d9e59ef 100644
--- a/src/Core/FSpot.Core/FSpot.Core/BrowsablePointer.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/BrowsablePointer.cs
@@ -46,7 +46,7 @@ namespace FSpot.Core
 				throw new ArgumentNullException ("collection");
 
 			this.collection = collection;
-			Index = index;
+			this.Index = index;
 			item = Current;
 
 			collection.Changed += HandleCollectionChanged;
@@ -58,9 +58,11 @@ namespace FSpot.Core
 		}
 
 		public IPhoto Current {
-			get
-			{
-				return !IsValid ? null : collection [index];
+			get {
+				if (!this.IsValid)
+					return null;
+				else
+					return collection [index];
 			}
 		}
 
@@ -70,7 +72,7 @@ namespace FSpot.Core
 		}
 
 		public bool IsValid {
-			get { return Valid (Index); }
+			get { return Valid (this.Index); }
 		}
 
 		public void MoveFirst ()
@@ -83,7 +85,12 @@ namespace FSpot.Core
 			Index = collection.Count - 1;
 		}
 
-		public void MoveNext (bool wrap = false)
+		public void MoveNext ()
+		{
+			MoveNext (false);
+		}
+
+		public void MoveNext (bool wrap)
 		{
 			int val = Index;
 
@@ -94,7 +101,12 @@ namespace FSpot.Core
 			Index = val;
 		}
 
-		public void MovePrevious (bool wrap = false)
+		public void MovePrevious ()
+		{
+			MovePrevious (false);
+		}
+
+		public void MovePrevious (bool wrap)
 		{
 			int val = Index;
 
@@ -114,7 +126,12 @@ namespace FSpot.Core
 			}
 		}
 
-		private void SetIndex (int value, IBrowsableItemChanges changes = null)
+		private void SetIndex (int value)
+		{
+			SetIndex (value, null);
+		}
+
+		private void SetIndex (int value, IBrowsableItemChanges changes)
 		{
 			BrowsablePointerChangedEventArgs args = new BrowsablePointerChangedEventArgs (Current, index, changes);
 
@@ -137,13 +154,12 @@ namespace FSpot.Core
 		{
 			if (collection == null)
 				throw new ArgumentNullException ("collection");
-
 			int old_location = Index;
 			int next_location = collection.IndexOf (item);
 
 			if (old_location == next_location) {
 				if (! Valid (next_location))
-					SetIndex (0);
+					SetIndex (0, null);
 
 				return;
 			}
diff --git a/src/Core/FSpot.Core/FSpot.Core/BrowsablePointerChangedEventArgs.cs b/src/Core/FSpot.Core/FSpot.Core/BrowsablePointerChangedEventArgs.cs
index 1a8dd11..741dc0d 100644
--- a/src/Core/FSpot.Core/FSpot.Core/BrowsablePointerChangedEventArgs.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/BrowsablePointerChangedEventArgs.cs
@@ -37,7 +37,7 @@ namespace FSpot.Core
 		public int PreviousIndex { get; private set; }
 		public IBrowsableItemChanges Changes { get; private set; }
 
-		public BrowsablePointerChangedEventArgs (IPhoto previous_item, int previous_index, IBrowsableItemChanges changes)
+		public BrowsablePointerChangedEventArgs (IPhoto previous_item, int previous_index, IBrowsableItemChanges changes) : base ()
 		{
 			PreviousItem = previous_item;
 			PreviousIndex = previous_index;
diff --git a/src/Core/FSpot.Core/FSpot.Core/DbItem.cs b/src/Core/FSpot.Core/FSpot.Core/DbItem.cs
index 33a32f2..ac4b77e 100644
--- a/src/Core/FSpot.Core/FSpot.Core/DbItem.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/DbItem.cs
@@ -47,12 +47,12 @@ namespace FSpot.Core
 	{
 		public T [] Items { get; private set; }
 
-		public DbItemEventArgs (T [] items)
+		public DbItemEventArgs (T [] items) : base ()
 		{
 			Items = items;
 		}
 
-		public DbItemEventArgs (T item)
+		public DbItemEventArgs (T item) : base ()
 		{
 			Items = new T [] { item };
 		}
diff --git a/src/Core/FSpot.Core/FSpot.Core/FilePhoto.cs b/src/Core/FSpot.Core/FSpot.Core/FilePhoto.cs
index 6d6245f..834e3e8 100644
--- a/src/Core/FSpot.Core/FSpot.Core/FilePhoto.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/FilePhoto.cs
@@ -28,11 +28,12 @@
 //
 
 using System;
+using System.IO;
 using System.Collections.Generic;
-
-using FSpot.Utils;
+using System.Xml;
 
 using Hyena;
+using FSpot.Utils;
 
 using Mono.Unix.Native;
 
diff --git a/src/Core/FSpot.Core/FSpot.Core/Global.cs b/src/Core/FSpot.Core/FSpot.Core/Global.cs
index 02320c3..4e9596d 100644
--- a/src/Core/FSpot.Core/FSpot.Core/Global.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/Global.cs
@@ -32,7 +32,6 @@
 //
 
 using System;
-
 using Hyena;
 
 namespace FSpot.Core {
diff --git a/src/Core/FSpot.Core/FSpot.Core/IPhoto.cs b/src/Core/FSpot.Core/FSpot.Core/IPhoto.cs
index 0070b46..44f07d0 100644
--- a/src/Core/FSpot.Core/FSpot.Core/IPhoto.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/IPhoto.cs
@@ -29,6 +29,9 @@
 
 using System.Collections.Generic;
 
+using Hyena;
+
+
 namespace FSpot.Core
 {
 
diff --git a/src/Core/FSpot.Core/FSpot.Core/IPhotoComparer.cs b/src/Core/FSpot.Core/FSpot.Core/IPhotoComparer.cs
index 8cefeab..4e969d2 100644
--- a/src/Core/FSpot.Core/FSpot.Core/IPhotoComparer.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/IPhotoComparer.cs
@@ -28,7 +28,6 @@
 //
 
 using System;
-// FIXME: Why do we still have System.Collections here
 using System.Collections;
 using System.Collections.Generic;
 
diff --git a/src/Core/FSpot.Core/FSpot.Core/IPhotoVersion.cs b/src/Core/FSpot.Core/FSpot.Core/IPhotoVersion.cs
index d2d84de..bbd6c6e 100644
--- a/src/Core/FSpot.Core/FSpot.Core/IPhotoVersion.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/IPhotoVersion.cs
@@ -29,6 +29,7 @@
 
 using Hyena;
 
+
 namespace FSpot.Core
 {
 
diff --git a/src/Core/FSpot.Core/FSpot.Core/IPhotoVersionable.cs b/src/Core/FSpot.Core/FSpot.Core/IPhotoVersionable.cs
index 8d2dedf..0a3eee6 100644
--- a/src/Core/FSpot.Core/FSpot.Core/IPhotoVersionable.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/IPhotoVersionable.cs
@@ -27,6 +27,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System.Collections.Generic;
+
 namespace FSpot.Core
 {
     /// <summary>
diff --git a/src/Core/FSpot.Core/FSpot.Core/PhotoChanges.cs b/src/Core/FSpot.Core/FSpot.Core/PhotoChanges.cs
index 705ab43..cb903c4 100644
--- a/src/Core/FSpot.Core/FSpot.Core/PhotoChanges.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/PhotoChanges.cs
@@ -27,6 +27,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.Collections.Generic;
 
 namespace FSpot.Core
@@ -48,8 +49,9 @@ namespace FSpot.Core
 			get {
 				if (tags_added == null)
 					return null;
-				
-				return tags_added.Count == 0 ? null : tags_added.ToArray ();
+				if (tags_added.Count == 0)
+					return null;
+				return tags_added.ToArray ();
 			}
 			set {
 				foreach (Tag t in value)
@@ -72,8 +74,9 @@ namespace FSpot.Core
 			get {
 				if (tags_removed == null)
 					return null;
-
-				return tags_removed.Count == 0 ? null : tags_removed.ToArray ();
+				if (tags_removed.Count == 0)
+					return null;
+				return tags_removed.ToArray ();
 			}
 			set {
 				foreach (Tag t in value)
@@ -96,8 +99,9 @@ namespace FSpot.Core
 			get {
 				if (versions_added == null)
 					return null;
-
-				return versions_added.Count == 0 ? null : versions_added.ToArray ();
+				if (versions_added.Count == 0)
+					return null;
+				return versions_added.ToArray ();
 			}
 			set {
 				foreach (uint u in value)
@@ -117,8 +121,9 @@ namespace FSpot.Core
 			get {
 				if (versions_removed == null)
 					return null;
-
-				return versions_removed.Count == 0 ? null : versions_removed.ToArray ();
+				if (versions_removed.Count == 0)
+					return null;
+				return versions_removed.ToArray ();
 			}
 			set {
 				foreach (uint u in value)
@@ -137,13 +142,15 @@ namespace FSpot.Core
 			versions_removed.Add (v);
 		}
 
+
 		List<uint> versions_modified = null;
 		public uint [] VersionsModified {
 			get {
 				if (versions_modified == null)
 					return null;
-
-				return versions_modified.Count == 0 ? null : versions_modified.ToArray ();
+				if (versions_modified.Count == 0)
+					return null;
+				return versions_modified.ToArray ();
 			}
 			set {
 				foreach (uint u in value)
@@ -155,14 +162,15 @@ namespace FSpot.Core
 		{
 			if (versions_modified == null)
 				versions_modified = new List<uint> ();
-
 			if (versions_added != null && versions_added.Contains (v))
 				return;
-
 			if (versions_removed != null && versions_removed.Contains (v))
 				return;
-
 			versions_modified.Add (v);
 		}
+
+		public PhotoChanges ()
+		{
+		}
 	}
 }
diff --git a/src/Core/FSpot.Core/FSpot.Core/PhotoList.cs b/src/Core/FSpot.Core/FSpot.Core/PhotoList.cs
index ab0ea2a..91ee84a 100644
--- a/src/Core/FSpot.Core/FSpot.Core/PhotoList.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/PhotoList.cs
@@ -115,8 +115,13 @@ namespace FSpot.Core
         }
 
         public IPhoto[] Items {
-            get { return cache ?? (cache = list.ToArray()); }
-        	set {
+            get {
+                if (cache == null)
+                    cache = list.ToArray ();
+                
+                return cache;
+            }
+            set {
                 list.Clear ();
                 Add (value);
             }
diff --git a/src/Core/FSpot.Core/FSpot.Core/PhotosChanges.cs b/src/Core/FSpot.Core/FSpot.Core/PhotosChanges.cs
index 365b3cc..f986eba 100644
--- a/src/Core/FSpot.Core/FSpot.Core/PhotosChanges.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/PhotosChanges.cs
@@ -28,6 +28,7 @@
 //
 
 using System;
+using System.Collections.Generic;
 
 namespace FSpot.Core
 {
@@ -107,11 +108,16 @@ namespace FSpot.Core
 					changes &= ~ Changes.Description;
 			}
 		}
-
-		public virtual bool TagsChanged { get; private set; }
-
-		public virtual bool VersionsChanged { get; private set; }
-
+		bool tags_changed = false;
+		public virtual bool TagsChanged {
+			get { return tags_changed; }
+			private set { tags_changed = value; }
+		}
+		bool versions_changed = false;
+		public virtual bool VersionsChanged {
+			get { return versions_changed; }
+			private set { versions_changed = value; }
+		}
 		public bool RollIdChanged {
 			get { return (changes & Changes.RollId) == Changes.RollId; }
 			set {
@@ -149,8 +155,6 @@ namespace FSpot.Core
 
 		public PhotosChanges ()
 		{
-			TagsChanged = false;
-			VersionsChanged = false;
 		}
 	}
 }
diff --git a/src/Core/FSpot.Core/FSpot.Core/Roll.cs b/src/Core/FSpot.Core/FSpot.Core/Roll.cs
index 61d36a3..f99e31a 100644
--- a/src/Core/FSpot.Core/FSpot.Core/Roll.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/Roll.cs
@@ -32,7 +32,6 @@
 //
 
 using System;
-
 using Hyena;
 
 namespace FSpot.Core
diff --git a/src/Core/FSpot.Core/FSpot.Core/Tag.cs b/src/Core/FSpot.Core/FSpot.Core/Tag.cs
index 3b70d03..912d807 100644
--- a/src/Core/FSpot.Core/FSpot.Core/Tag.cs
+++ b/src/Core/FSpot.Core/FSpot.Core/Tag.cs
@@ -30,11 +30,8 @@
 //
 
 using System;
-
-using FSpot.Utils;
-
 using Gdk;
-
+using FSpot.Utils;
 using Hyena;
 
 namespace FSpot.Core
@@ -144,14 +141,14 @@ namespace FSpot.Core
 			if (tag == null)
 				throw new ArgumentNullException ("tag");
 
-			if (Category == tag.Category)
-			{
+			if (Category == tag.Category) {
 				if (SortPriority == tag.SortPriority)
 					return Name.CompareTo (tag.Name);
-				return SortPriority - tag.SortPriority;
+				else
+					return SortPriority - tag.SortPriority;
+			} else {
+				return Category.CompareTo (tag.Category);
 			}
-
-			return Category.CompareTo (tag.Category);
 		}
 
 		public bool IsAncestorOf (Tag tag)
diff --git a/src/Core/FSpot.Gui/FSpot.Gui.csproj b/src/Core/FSpot.Gui/FSpot.Gui.csproj
index ee8572c..ee74131 100644
--- a/src/Core/FSpot.Gui/FSpot.Gui.csproj
+++ b/src/Core/FSpot.Gui/FSpot.Gui.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Widgets</RootNamespace>
     <AssemblyName>FSpot.Gui</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -96,7 +76,6 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
@@ -138,20 +117,8 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Transitions\" />
+    <Folder Include="FSpot.Widgets\" />
+    <Folder Include="FSpot.Gui\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Core/FSpot.Gui/FSpot.Gui/CompositeUtils.cs b/src/Core/FSpot.Gui/FSpot.Gui/CompositeUtils.cs
index 00cb34f..3e4d87b 100644
--- a/src/Core/FSpot.Gui/FSpot.Gui/CompositeUtils.cs
+++ b/src/Core/FSpot.Gui/FSpot.Gui/CompositeUtils.cs
@@ -29,12 +29,9 @@
 
 using System;
 using System.Runtime.InteropServices;
-
-using FSpot.Utils;
-
 using Gdk;
 using Gtk;
-
+using FSpot.Utils;
 using Hyena;
 
 namespace FSpot.Gui {
diff --git a/src/Core/FSpot.Gui/FSpot.Gui/WindowOpacityFader.cs b/src/Core/FSpot.Gui/FSpot.Gui/WindowOpacityFader.cs
index a4fb285..9c1645e 100644
--- a/src/Core/FSpot.Gui/FSpot.Gui/WindowOpacityFader.cs
+++ b/src/Core/FSpot.Gui/FSpot.Gui/WindowOpacityFader.cs
@@ -28,7 +28,7 @@
 //
 
 using System;
-
+using Gtk;
 using FSpot.Bling;
 
 namespace FSpot.Gui
@@ -43,7 +43,9 @@ namespace FSpot.Gui
             this.win = win;
             win.Mapped += HandleMapped;
             win.Unmapped += HandleUnmapped;
-            fadin = new DoubleAnimation (0.0, target, TimeSpan.FromMilliseconds (msec), opacity => CompositeUtils.SetWinOpacity (win, opacity));
+            fadin = new DoubleAnimation (0.0, target, TimeSpan.FromMilliseconds (msec), opacity => {
+                CompositeUtils.SetWinOpacity (win, opacity);
+            });
         }
 
         [GLib.ConnectBefore]
diff --git a/src/Core/FSpot.Gui/FSpot.Transitions/CairoTransition.cs b/src/Core/FSpot.Gui/FSpot.Transitions/CairoTransition.cs
index 774329e..cf7f0b1 100644
--- a/src/Core/FSpot.Gui/FSpot.Transitions/CairoTransition.cs
+++ b/src/Core/FSpot.Gui/FSpot.Transitions/CairoTransition.cs
@@ -27,14 +27,20 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+
 using Cairo;
 using Gdk;
 
+using FSpot.Utils;
+
+using Color = Cairo.Color;
+
 namespace FSpot.Transitions
 {
 	public abstract class CairoTransition : SlideShowTransition
 	{
-		protected CairoTransition (string name) : base (name)
+		public CairoTransition (string name) : base (name)
 		{
 		}
 
diff --git a/src/Core/FSpot.Gui/FSpot.Transitions/SlideShowTransition.cs b/src/Core/FSpot.Gui/FSpot.Transitions/SlideShowTransition.cs
index 4c3d3fa..042c122 100644
--- a/src/Core/FSpot.Gui/FSpot.Transitions/SlideShowTransition.cs
+++ b/src/Core/FSpot.Gui/FSpot.Transitions/SlideShowTransition.cs
@@ -27,18 +27,28 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+
+using Cairo;
 using Gdk;
 
+using FSpot.Utils;
+
+using Color = Cairo.Color;
+
 namespace FSpot.Transitions
 {
 	public abstract class SlideShowTransition
 	{
-		protected SlideShowTransition (string name)
+		public SlideShowTransition (string name)
 		{
-			Name = name;
+			this.name = name;
 		}
 
-		public string Name { get; private set; }
+		string name;
+		public string Name {
+			get { return name; }
+		}
 
 		public abstract void Draw (Drawable d, Pixbuf prev, Pixbuf next, int width, int height, double progress);
 	}
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/ApplicationActivatedEventArgs.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ApplicationActivatedEventArgs.cs
index a02e505..4e1d439 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/ApplicationActivatedEventArgs.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/ApplicationActivatedEventArgs.cs
@@ -36,7 +36,7 @@ namespace FSpot.Widgets
 	{
 		public AppInfo AppInfo { get; private set; }
 
-		public ApplicationActivatedEventArgs (AppInfo app)
+		public ApplicationActivatedEventArgs (AppInfo app) : base ()
 		{
 			AppInfo = app;
 		}
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/BuilderWindow.cs b/src/Core/FSpot.Gui/FSpot.Widgets/BuilderWindow.cs
index 131d699..19533ca 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/BuilderWindow.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/BuilderWindow.cs
@@ -27,6 +27,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using GtkBeans;
 
 namespace FSpot.Widgets
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/CellGridView.cs b/src/Core/FSpot.Gui/FSpot.Widgets/CellGridView.cs
index 79fd777..8a31ab4 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/CellGridView.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/CellGridView.cs
@@ -33,526 +33,543 @@ using System.Collections.Generic;
 using Gtk;
 using Gdk;
 
+using Hyena;
+
+
 namespace FSpot.Widgets
 {
-	/// <summary>
-	///    This class provides the base functionality for displaying cells in a grid. The
-	///    paramters to set up the grid are gathered by abstract properties which must be
-	///    implemented by a subclass.
-	/// </summary>
-	public abstract class CellGridView : Gtk.Layout
-	{
+    /// <summary>
+    ///    This class provides the base functionality for displaying cells in a grid. The
+    ///    paramters to set up the grid are gathered by abstract properties which must be
+    ///    implemented by a subclass.
+    /// </summary>
+    public abstract class CellGridView : Gtk.Layout
+    {
 
 #region Constructors
 
-		protected CellGridView (IntPtr raw) : base (raw)
-		{
-		}
+        public CellGridView (IntPtr raw) : base (raw)
+        {
+        }
 
-		protected CellGridView () : base (null, null)
-		{
-		}
+        public CellGridView () : base (null, null)
+        {
+        }
 
 #endregion
 
 #region Abstract Layout Description
 
-		/// <summary>
-		///    Must return the width which each cell should have.
-		/// </summary>
-		protected abstract int MinCellWidth { get; }
+        /// <summary>
+        ///    Must return the width which each cell should have.
+        /// </summary>
+        protected abstract int MinCellWidth { get; }
 
-		/// <summary>
-		///    Must return the height which each cell should have.
-		/// </summary>
-		protected abstract int MinCellHeight { get; }
+        /// <summary>
+        ///    Must return the height which each cell should have.
+        /// </summary>
+        protected abstract int MinCellHeight { get; }
 
-		/// <summary>
-		///    Must return the number of cells which should be displayed.
-		/// </summary>
-		protected abstract int CellCount { get; }
+        /// <summary>
+        ///    Must return the number of cells which should be displayed.
+        /// </summary>
+        protected abstract int CellCount { get; }
 
 #endregion
 
 #region Abstract Drawing Functions
 
-		/// <summary>
-		///   The function is called to draw a Cell.
-		/// </summary>
-		protected abstract void DrawCell (int cell_num, Rectangle cell_area, Rectangle expose_area);
+        /// <summary>
+        ///   The function is called to draw a Cell.
+        /// </summary>
+        protected abstract void DrawCell (int cell_num, Rectangle cell_area, Rectangle expose_area);
 
-		/// <summary>
-		///    The function is called to preload a cell.
-		/// </summary>
-		protected abstract void PreloadCell (int cell_num);
+        /// <summary>
+        ///    The function is called to preload a cell.
+        /// </summary>
+        protected abstract void PreloadCell (int cell_num);
 
 #endregion
 
 #region Private Layout Values
 
-		/// <summary>
-		///    The width of each cell. It is set, when the layout is updated. The
-		///    property <see cref="MinCellWidth"/> is only used when the layout is updated.
-		/// </summary>
-		private int cell_width;
-
-		/// <summary>
-		///    The height of each cell. It is set, when the layout is updated. The
-		///    property <see cref="MinCellHeight"/> is only used when the layout is updated.
-		/// </summary>
-		private int cell_height;
-
-		/// <summary>
-		///    The total number of cells the layout is computed with. It is set, when the
-		///    layout is updated. The property <see cref="CellCount"/> is only used when
-		///    the layout is updated.
-		/// </summary>
-		private int cell_count;
-
-		/// <summary>
-		///    The number of rows which are needed to display all cells.
-		/// </summary>
-		private int total_rows;
-
-		/// <summary>
-		///    The border size the current layout is computed with.
-		/// </summary>
-		private int border_size = 6;
-
-		/// <summary>
-		///    The maximal number of columns.
-		/// </summary>
-		private int max_columns = -1;
-
-		// preserve the scroll postion when possible
-		private bool scroll;
-		private double scroll_value;
-
-		// suppress scroll is currently not used. where do we need it?
-		private bool suppress_scroll = false;
+        /// <summary>
+        ///    The number of cells per row (columns).
+        /// </summary>
+        protected int cells_per_row;
+
+        /// <summary>
+        ///    The width of each cell. It is set, when the layout is updated. The
+        ///    property <see cref="MinCellWidth"/> is only used when the layout is updated.
+        /// </summary>
+        protected int cell_width;
+
+        /// <summary>
+        ///    The height of each cell. It is set, when the layout is updated. The
+        ///    property <see cref="MinCellHeight"/> is only used when the layout is updated.
+        /// </summary>
+        protected int cell_height;
+
+        /// <summary>
+        ///    The total number of cells the layout is computed with. It is set, when the
+        ///    layout is updated. The property <see cref="CellCount"/> is only used when
+        ///    the layout is updated.
+        /// </summary>
+        private int cell_count;
+
+        /// <summary>
+        ///    Holds the number of rows which are displayed at once regarded to the current
+        ///    size of the widget.
+        /// </summary>
+        private int displayed_rows;
+
+        /// <summary>
+        ///    The number of rows which are needed to display all cells.
+        /// </summary>
+        private int total_rows;
+
+        /// <summary>
+        ///    The border size the current layout is computed with.
+        /// </summary>
+        private int border_size = 6;
+
+        /// <summary>
+        ///    The maximal number of columns.
+        /// </summary>
+        private int max_columns = -1;
+
+        // preserve the scroll postion when possible
+        private bool scroll;
+        private double scroll_value;
+
+        // suppress scroll is currently not used. where do we need it?
+        private bool suppress_scroll = false;
 
 #endregion
 
 #region Public Layout Properties
 
-		public int MaxColumns {
-			get { return max_columns; }
-			set {
-				max_columns = value;
-				QueueResize ();
-			}
-		}
-
-		public int BorderSize {
-			get { return border_size; }
-			set {
-				if (value < 0)
-					throw new ArgumentException ("value");
-
-				border_size = value;
-				QueueResize ();
-			}
-		}
+        public int MaxColumns {
+            get { return max_columns; }
+            set {
+                max_columns = value;
+                QueueResize ();
+            }
+        }
+
+        public int BorderSize {
+            get { return border_size; }
+            set {
+                if (value < 0)
+                    throw new ArgumentException ("value");
+
+                border_size = value;
+                QueueResize ();
+            }
+        }
+
+        public int VisibleRows {
+            get { return displayed_rows; }
+        }
+
+        public int VisibleColums {
+            get { return cells_per_row; }
+        }
 
-		public int VisibleRows { get; private set; }
-
-		public int VisibleColums { get; private set; }
-
-		#endregion
+#endregion
 
 #region Public Methods
 
-		public int CellAtPosition (Point p)
-		{
-			return CellAtPosition (p.X, p.Y);
-		}
+        public int CellAtPosition (Point p)
+        {
+            return CellAtPosition (p.X, p.Y);
+        }
 
-		public int CellAtPosition (int x, int y)
-		{
-			return CellAtPosition (x, y, true);
-		}
+        public int CellAtPosition (int x, int y)
+        {
+            return CellAtPosition (x, y, true);
+        }
 
-		public int CellAtPosition (int x, int y, bool crop_visible)
-		{
-			if (crop_visible
-				&& ((y < (int)Vadjustment.Value || y > (int)Vadjustment.Value + Allocation.Height)
-				|| (x < (int)Hadjustment.Value || x > (int)Hadjustment.Value + Allocation.Width)))
-				return -1;
+        public int CellAtPosition (int x, int y, bool crop_visible)
+        {
+            if (crop_visible
+                && ((y < (int)Vadjustment.Value || y > (int)Vadjustment.Value + Allocation.Height)
+                || (x < (int)Hadjustment.Value || x > (int)Hadjustment.Value + Allocation.Width)))
+                return -1;
 
-			if (x < border_size || x >= border_size + VisibleColums * cell_width)
-				return -1;
+            if (x < border_size || x >= border_size + cells_per_row * cell_width)
+                return -1;
 
-			if (y < border_size || y >= border_size + (cell_count / VisibleColums + 1) * cell_height)
-				return -1;
+            if (y < border_size || y >= border_size + (cell_count / cells_per_row + 1) * cell_height)
+                return -1;
 
-			int column = (int) ((x - border_size) / cell_width);
-			int row = (int) ((y - border_size) / cell_height);
+            int column = (int) ((x - border_size) / cell_width);
+            int row = (int) ((y - border_size) / cell_height);
 
-			int cell_num = column + row * VisibleColums;
-			if (cell_num >= cell_count)
-				return -1;
+            int cell_num = column + row * cells_per_row;
+            if (cell_num >= cell_count)
+                return -1;
 
-			return cell_num;
-		}
+            return cell_num;
+        }
 
-		public int TopLeftVisibleCell ()
-		{
-			// TODO: Where does the 8 come from?
-			return CellAtPosition (border_size, (int) (Vadjustment.Value + Allocation.Height * (Vadjustment.Value / Vadjustment.Upper)) + border_size + 8);
-		}
+        public int TopLeftVisibleCell ()
+        {
+            // TODO: Where does the 8 come from?
+            return CellAtPosition (border_size, (int) (Vadjustment.Value + Allocation.Height * (Vadjustment.Value / Vadjustment.Upper)) + border_size + 8);
+        }
 
-		public void CellPosition (int cell_num, out int x, out int y)
-		{
-			// TODO: compare the values with the ones in GetCellCenter.
-			if (VisibleColums == 0) {
-				x = 0;
-				y = 0;
-				return;
-			}
+        public void CellPosition (int cell_num, out int x, out int y)
+        {
+            // TODO: compare the values with the ones in GetCellCenter.
+            if (cells_per_row == 0) {
+                x = 0;
+                y = 0;
+                return;
+            }
 
-			int col = cell_num % VisibleColums;
-			int row = cell_num / VisibleColums;
+            int col = cell_num % cells_per_row;
+            int row = cell_num / cells_per_row;
 
-			x = col * cell_width + border_size;
-			y = row * cell_height + border_size;
-		}
+            x = col * cell_width + border_size;
+            y = row * cell_height + border_size;
+        }
 
-		public void CellCenter (int cell_num, out int x, out int y)
-		{
-			// TODO: compare the values with the ones in GetCellPosition.
-			if (cell_num == -1) {
-				x = -1;
-				y = -1;
-			}
+        public void CellCenter (int cell_num, out int x, out int y)
+        {
+            // TODO: compare the values with the ones in GetCellPosition.
+            if (cell_num == -1) {
+                x = -1;
+                y = -1;
+            }
 
-			CellPosition (cell_num, out x, out y);
+            CellPosition (cell_num, out x, out y);
 
-			x += cell_width / 2;
-			y += cell_height / 2;
-		}
+            x += cell_width / 2;
+            y += cell_height / 2;
+        }
 
-		public Gdk.Rectangle CellBounds (int cell_num)
-		{
-			Rectangle bounds;
+        public Gdk.Rectangle CellBounds (int cell_num)
+        {
+            Rectangle bounds;
 
-			CellPosition (cell_num, out bounds.X, out bounds.Y);
+            CellPosition (cell_num, out bounds.X, out bounds.Y);
 
-			bounds.Width = cell_width;
-			bounds.Height = cell_height;
+            bounds.Width = cell_width;
+            bounds.Height = cell_height;
 
-			return bounds;
-		}
+            return bounds;
+        }
 
-		public IEnumerable<int> CellsInRect (Rectangle area)
-		{
-			if (cell_width <= 0 || cell_height <= 0) {
-				yield break;
-			}
+        public IEnumerable<int> CellsInRect (Rectangle area)
+        {
+            if (cell_width <= 0 || cell_height <= 0) {
+                yield break;
+            }
 
-			int start_cell_column = Math.Max (0, (area.X - border_size) / cell_width);
-			int start_cell_row = Math.Max (0, (area.Y - border_size) / cell_height);
+            int start_cell_column = Math.Max (0, (area.X - border_size) / cell_width);
+            int start_cell_row = Math.Max (0, (area.Y - border_size) / cell_height);
 
-			int end_cell_column = Math.Max (0, (area.X + area.Width - border_size) / cell_width);
-			int end_cell_row = Math.Max (0, (area.Y + area.Height - border_size) / cell_height);
+            int end_cell_column = Math.Max (0, (area.X + area.Width - border_size) / cell_width);
+            int end_cell_row = Math.Max (0, (area.Y + area.Height - border_size) / cell_height);
 
-			for (int cell_row = start_cell_row; cell_row <= end_cell_row; cell_row ++) {
+            for (int cell_row = start_cell_row; cell_row <= end_cell_row; cell_row ++) {
 
-				for (int cell_column = start_cell_column; cell_column <= end_cell_column; cell_column ++) {
+                for (int cell_column = start_cell_column; cell_column <= end_cell_column; cell_column ++) {
 
-					int cell_num = cell_column + cell_row * VisibleColums;
+                    int cell_num = cell_column + cell_row * cells_per_row;
 
-					if (cell_num < cell_count)
-						yield return cell_num;
-				}
-			}
-		}
+                    if (cell_num < cell_count)
+                        yield return cell_num;
+                }
+            }
+        }
 
-		public void ScrollTo (int cell_num)
-		{
-			ScrollTo (cell_num, true);
-		}
+        public void ScrollTo (int cell_num)
+        {
+            ScrollTo (cell_num, true);
+        }
 
-		public void ScrollTo (int cell_num, bool center)
-		{
-			if (!IsRealized)
-				return;
+        public void ScrollTo (int cell_num, bool center)
+        {
+            if (!IsRealized)
+                return;
 
-			Adjustment adjustment = Vadjustment;
-			int x;
-			int y;
+            Adjustment adjustment = Vadjustment;
+            int x;
+            int y;
 
-			CellPosition (cell_num, out x, out y);
+            CellPosition (cell_num, out x, out y);
 
-			if (center)
-				y += cell_height / 2 - Allocation.Height / 2;
+            if (center)
+                y += cell_height / 2 - Allocation.Height / 2;
 
-			// the maximal possible adjustment value
-			// (otherwise, we are scrolling to far ...)
-			int max = (int) (Height - Allocation.Height);
+            // the maximal possible adjustment value
+            // (otherwise, we are scrolling to far ...)
+            int max = (int) (Height - Allocation.Height);
 
-			adjustment.Value = Math.Min (y, max);
-			adjustment.ChangeValue ();
-		}
+            adjustment.Value = Math.Min (y, max);
+            adjustment.ChangeValue ();
+        }
 
-		public void InvalidateCell (int cell_num)
-		{
-			Rectangle cell_area = CellBounds (cell_num);
+        public void InvalidateCell (int cell_num)
+        {
+            Rectangle cell_area = CellBounds (cell_num);
 
-			// FIXME where are we computing the bounds incorrectly
-			cell_area.Width -= 1;
-			cell_area.Height -= 1;
+            // FIXME where are we computing the bounds incorrectly
+            cell_area.Width -= 1;
+            cell_area.Height -= 1;
 
-			Gdk.Rectangle visible =
-				new Gdk.Rectangle ((int) Hadjustment.Value,
-								   (int) Vadjustment.Value,
-								   Allocation.Width,
-								   Allocation.Height);
+            Gdk.Rectangle visible =
+                new Gdk.Rectangle ((int) Hadjustment.Value,
+                                   (int) Vadjustment.Value,
+                                   Allocation.Width,
+                                   Allocation.Height);
 
-			if (BinWindow != null && cell_area.Intersect (visible, out cell_area))
-				BinWindow.InvalidateRect (cell_area, false);
-		}
+            if (BinWindow != null && cell_area.Intersect (visible, out cell_area))
+                BinWindow.InvalidateRect (cell_area, false);
+        }
 
 #endregion
 
 #region Event Handlers
 
-		[GLib.ConnectBefore]
-		private void HandleAdjustmentValueChanged (object sender, EventArgs args)
-		{
-			Scroll ();
-		}
+        [GLib.ConnectBefore]
+        private void HandleAdjustmentValueChanged (object sender, EventArgs args)
+        {
+            Scroll ();
+        }
 
 #endregion
 
 #region Determine Layout
 
-		protected override void OnSizeAllocated (Gdk.Rectangle allocation)
-		{
-			scroll_value = (Vadjustment.Value)/ (Vadjustment.Upper);
-			scroll = ! suppress_scroll;
-			suppress_scroll = false;
-			UpdateLayout (allocation);
-
-			base.OnSizeAllocated (allocation);
-		}
-
-		protected override void OnScrollAdjustmentsSet (Adjustment hadjustment, Adjustment vadjustment)
-		{
-			base.OnScrollAdjustmentsSet (hadjustment, vadjustment);
-
-			if (vadjustment != null)
-				vadjustment.ValueChanged += new EventHandler (HandleAdjustmentValueChanged);
-		}
-
-		protected override bool OnExposeEvent (Gdk.EventExpose args)
-		{
-			foreach (Rectangle area in args.Region.GetRectangles ()) {
-				DrawAllCells (area);
-			}
-			return base.OnExposeEvent (args);
-		}
-
-		// FIXME: This is never used
-		private void UpdateLayout ()
-		{
-			UpdateLayout (Allocation);
-		}
-
-		private void UpdateLayout (Gdk.Rectangle allocation)
-		{
-			// get the basic values for the layout ...
-			cell_width = MinCellWidth;
-			cell_height = MinCellHeight;
-			cell_count = CellCount;
-
-			// ... and compute the remaining ones.
-			int available_width = allocation.Width - 2 * border_size;
-			int available_height = allocation.Height - 2 * border_size;
-
-			VisibleColums = Math.Max ((int) (available_width / cell_width), 1);
-			if (MaxColumns > 0)
-				VisibleColums = Math.Min (MaxColumns, VisibleColums);
-
-			cell_width += (available_width - VisibleColums * cell_width) / VisibleColums;
-
-			VisibleRows = (int) Math.Max (available_height / cell_height, 1);
-
-			total_rows = cell_count / VisibleColums;
-			if (cell_count % VisibleColums != 0)
-				total_rows ++;
-
-			int height = total_rows * cell_height + 2 * border_size;
-
-			Vadjustment.StepIncrement = cell_height;
-			int x = (int)(Hadjustment.Value);
-			int y = (int)(height * scroll_value);
-			SetSize (x, y, (int) allocation.Width, (int) height);
-		}
-
-		private void SetSize (int x, int y, int width, int height)
-		{
-			Hadjustment.Upper = System.Math.Max (Allocation.Width, width);
-			Vadjustment.Upper = System.Math.Max (Allocation.Height, height);
-
-			bool xchange = scroll && (int)(Hadjustment.Value) != x;
-			bool ychange = scroll && (int)(Vadjustment.Value) != y;
-
-			// reset scroll
-			scroll = false;
-
-			if (IsRealized)
-				BinWindow.FreezeUpdates ();
-
-			if (xchange || ychange) {
-				if (IsRealized)
-					BinWindow.MoveResize (-x, -y, (int)(Hadjustment.Upper), (int)(Vadjustment.Upper));
-				Vadjustment.Value = y;
-				Hadjustment.Value = x;
-			}
-
-			if (this.Width != Allocation.Width || this.Height != Allocation.Height)
-				SetSize ((uint)Allocation.Width, (uint)height);
-
-			if (xchange || ychange) {
-				Vadjustment.ChangeValue ();
-				Hadjustment.ChangeValue ();
-			}
-
-			if (IsRealized) {
-				BinWindow.ThawUpdates ();
-				BinWindow.ProcessUpdates (true);
-			}
-		}
-
-		private void DrawAllCells (Gdk.Rectangle area)
-		{
-			foreach (var cell_num in CellsInRect (area)) {
-				DrawCell (cell_num, CellBounds (cell_num), area);
-			}
-		}
-
-		// The first pixel line that is currently on the screen (i.e. in the current
-		// scroll region).  Used to compute the area that went offscreen in the "changed"
-		// signal handler for the vertical GtkAdjustment.
-		private int y_offset;
-		private int x_offset;
-		private void Scroll ()
-		{
-			int ystep = (int)(Vadjustment.Value - y_offset);
-			int xstep = (int)(Hadjustment.Value - x_offset);
-
-			if (xstep > 0)
-				xstep = Math.Max (xstep, Allocation.Width);
-			else
-				xstep = Math.Min (xstep, -Allocation.Width);
-
-			if (ystep > 0)
-				ystep = Math.Max (ystep, Allocation.Height);
-			else
-				ystep = Math.Min (ystep, -Allocation.Height);
-
-			Gdk.Rectangle area;
-
-			Gdk.Region offscreen = new Gdk.Region ();
-			/*
-			Log.Debug ("step ({0}, {1}) allocation ({2},{3},{4},{5})",
-					xstep, ystep, Hadjustment.Value, Vadjustment.Value,
-					Allocation.Width, Allocation.Height);
-			*/
-			/*
-			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 4 * xstep), 0),
-					Math.Max ((int) (Vadjustment.Value + 4 * ystep), 0),
-					Allocation.Width,
-					Allocation.Height);
-			offscreen.UnionWithRect (area);
-			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 3 * xstep), 0),
-					Math.Max ((int) (Vadjustment.Value + 3 * ystep), 0),
-					Allocation.Width,
-					Allocation.Height);
-			offscreen.UnionWithRect (area);
-			*/
-			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 2 * xstep), 0),
-					Math.Max ((int) (Vadjustment.Value + 2 * ystep), 0),
-					Allocation.Width,
-					Allocation.Height);
-			offscreen.UnionWithRect (area);
-			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + xstep), 0),
-					Math.Max ((int) (Vadjustment.Value + ystep), 0),
-					Allocation.Width,
-					Allocation.Height);
-			offscreen.UnionWithRect (area);
-			area = new Gdk.Rectangle ((int) Hadjustment.Value,
-					(int) Vadjustment.Value,
-					Allocation.Width,
-					Allocation.Height);
-
-			// always load the onscreen area last to make sure it
-			// is first in the loading
-			Gdk.Region onscreen = Gdk.Region.Rectangle (area);
-			offscreen.Subtract (onscreen);
-
-			PreloadRegion (offscreen, ystep);
-			Preload (area, false);
-
-			y_offset = (int) Vadjustment.Value;
-			x_offset = (int) Hadjustment.Value;
-		}
-
-		private void PreloadRegion (Gdk.Region region, int step)
-		{
-			Gdk.Rectangle [] rects = region.GetRectangles ();
-
-			if (step < 0)
-				System.Array.Reverse (rects);
-
-			foreach (Gdk.Rectangle preload in rects) {
-				Preload (preload, false);
-			}
-		}
-
-		private void Preload (Gdk.Rectangle area, bool back)
-		{
-			if (VisibleColums ==0)
-				return;
-
-			int start_cell_column = Math.Max ((area.X - border_size) / cell_width, 0);
-			int start_cell_row = Math.Max ((area.Y - border_size) / cell_height, 0);
-			int start_cell_num = start_cell_column + start_cell_row * VisibleColums;
-
-			int end_cell_column = Math.Max ((area.X + area.Width - border_size) / cell_width, 0);
-			int end_cell_row = Math.Max ((area.Y + area.Height - border_size) / cell_height, 0);
-
-			int i;
-
-			int cols = end_cell_column - start_cell_column + 1;
-			int rows = end_cell_row - start_cell_row + 1;
-			int len = rows * cols;
-			int scell = start_cell_num;
-			int ecell = scell + len;
-			if (scell > cell_count - len) {
-				ecell = cell_count;
-				scell = System.Math.Max (0, scell - len);
-			} else
-				ecell = scell + len;
-
-			int mid = (ecell - scell) / 2;
-			for (i = 0; i < mid; i++) {
-
-				// The order of Preloading is kept from the previous version, because it provides
-				// smooth appearance (alternating for begin and end of the viewport) of the cells.
-				// Maybe, this can be done better in a subclass ? (e.g. by calling a PreloadCells
-				// with an Array/Enumeration of all cells to be preloaded, or with lower and upper
-				// bound of cells to be preloaded)
-				int cell = back ? ecell - i - 1 : scell + mid + i;
-				PreloadCell (cell);
-
-				cell = back ? scell + i : scell + mid - i - 1;
-				PreloadCell (cell);
-			}
-		}
+        protected override void OnSizeAllocated (Gdk.Rectangle allocation)
+        {
+            scroll_value = (Vadjustment.Value)/ (Vadjustment.Upper);
+            scroll = ! suppress_scroll;
+            suppress_scroll = false;
+            UpdateLayout (allocation);
+
+            base.OnSizeAllocated (allocation);
+        }
+
+        protected override void OnScrollAdjustmentsSet (Adjustment hadjustment, Adjustment vadjustment)
+        {
+            base.OnScrollAdjustmentsSet (hadjustment, vadjustment);
+
+            if (vadjustment != null)
+                vadjustment.ValueChanged += new EventHandler (HandleAdjustmentValueChanged);
+        }
+
+        protected override bool OnExposeEvent (Gdk.EventExpose args)
+        {
+            foreach (Rectangle area in args.Region.GetRectangles ()) {
+                DrawAllCells (area);
+            }
+            return base.OnExposeEvent (args);
+        }
+
+        private void UpdateLayout ()
+        {
+            UpdateLayout (Allocation);
+        }
+
+        private void UpdateLayout (Gdk.Rectangle allocation)
+        {
+            // get the basic values for the layout ...
+            cell_width = MinCellWidth;
+            cell_height = MinCellHeight;
+            cell_count = CellCount;
+
+            // ... and compute the remaining ones.
+            int available_width = allocation.Width - 2 * border_size;
+            int available_height = allocation.Height - 2 * border_size;
+
+            cells_per_row = Math.Max ((int) (available_width / cell_width), 1);
+            if (MaxColumns > 0)
+                cells_per_row = Math.Min (MaxColumns, cells_per_row);
+
+            cell_width += (available_width - cells_per_row * cell_width) / cells_per_row;
+
+            displayed_rows = (int) Math.Max (available_height / cell_height, 1);
+
+            total_rows = cell_count / cells_per_row;
+            if (cell_count % cells_per_row != 0)
+                total_rows ++;
+
+            int height = total_rows * cell_height + 2 * border_size;
+
+            Vadjustment.StepIncrement = cell_height;
+            int x = (int)(Hadjustment.Value);
+            int y = (int)(height * scroll_value);
+            SetSize (x, y, (int) allocation.Width, (int) height);
+        }
+
+        private void SetSize (int x, int y, int width, int height)
+        {
+            Hadjustment.Upper = System.Math.Max (Allocation.Width, width);
+            Vadjustment.Upper = System.Math.Max (Allocation.Height, height);
+
+            bool xchange = scroll && (int)(Hadjustment.Value) != x;
+            bool ychange = scroll && (int)(Vadjustment.Value) != y;
+
+            // reset scroll
+            scroll = false;
+
+            if (IsRealized)
+                BinWindow.FreezeUpdates ();
+
+            if (xchange || ychange) {
+                if (IsRealized)
+                    BinWindow.MoveResize (-x, -y, (int)(Hadjustment.Upper), (int)(Vadjustment.Upper));
+                Vadjustment.Value = y;
+                Hadjustment.Value = x;
+            }
+
+            if (this.Width != Allocation.Width || this.Height != Allocation.Height)
+                SetSize ((uint)Allocation.Width, (uint)height);
+
+            if (xchange || ychange) {
+                Vadjustment.ChangeValue ();
+                Hadjustment.ChangeValue ();
+            }
+
+            if (IsRealized) {
+                BinWindow.ThawUpdates ();
+                BinWindow.ProcessUpdates (true);
+            }
+        }
+
+        private void DrawAllCells (Gdk.Rectangle area)
+        {
+            foreach (var cell_num in CellsInRect (area)) {
+                DrawCell (cell_num, CellBounds (cell_num), area);
+            }
+        }
+
+        // The first pixel line that is currently on the screen (i.e. in the current
+        // scroll region).  Used to compute the area that went offscreen in the "changed"
+        // signal handler for the vertical GtkAdjustment.
+        private int y_offset;
+        private int x_offset;
+        private void Scroll ()
+        {
+            int ystep = (int)(Vadjustment.Value - y_offset);
+            int xstep = (int)(Hadjustment.Value - x_offset);
+
+            if (xstep > 0)
+                xstep = Math.Max (xstep, Allocation.Width);
+            else
+                xstep = Math.Min (xstep, -Allocation.Width);
+
+            if (ystep > 0)
+                ystep = Math.Max (ystep, Allocation.Height);
+            else
+                ystep = Math.Min (ystep, -Allocation.Height);
+
+            Gdk.Rectangle area;
+
+            Gdk.Region offscreen = new Gdk.Region ();
+            /*
+            Log.Debug ("step ({0}, {1}) allocation ({2},{3},{4},{5})",
+                    xstep, ystep, Hadjustment.Value, Vadjustment.Value,
+                    Allocation.Width, Allocation.Height);
+            */
+            /*
+            area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 4 * xstep), 0),
+                    Math.Max ((int) (Vadjustment.Value + 4 * ystep), 0),
+                    Allocation.Width,
+                    Allocation.Height);
+            offscreen.UnionWithRect (area);
+            area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 3 * xstep), 0),
+                    Math.Max ((int) (Vadjustment.Value + 3 * ystep), 0),
+                    Allocation.Width,
+                    Allocation.Height);
+            offscreen.UnionWithRect (area);
+            */
+            area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 2 * xstep), 0),
+                    Math.Max ((int) (Vadjustment.Value + 2 * ystep), 0),
+                    Allocation.Width,
+                    Allocation.Height);
+            offscreen.UnionWithRect (area);
+            area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + xstep), 0),
+                    Math.Max ((int) (Vadjustment.Value + ystep), 0),
+                    Allocation.Width,
+                    Allocation.Height);
+            offscreen.UnionWithRect (area);
+            area = new Gdk.Rectangle ((int) Hadjustment.Value,
+                    (int) Vadjustment.Value,
+                    Allocation.Width,
+                    Allocation.Height);
+
+            // always load the onscreen area last to make sure it
+            // is first in the loading
+            Gdk.Region onscreen = Gdk.Region.Rectangle (area);
+            offscreen.Subtract (onscreen);
+
+            PreloadRegion (offscreen, ystep);
+            Preload (area, false);
+
+            y_offset = (int) Vadjustment.Value;
+            x_offset = (int) Hadjustment.Value;
+        }
+
+        private void PreloadRegion (Gdk.Region region, int step)
+        {
+            Gdk.Rectangle [] rects = region.GetRectangles ();
+
+            if (step < 0)
+                System.Array.Reverse (rects);
+
+            foreach (Gdk.Rectangle preload in rects) {
+                Preload (preload, false);
+            }
+        }
+
+        private void Preload (Gdk.Rectangle area, bool back)
+        {
+            if (cells_per_row ==0)
+                return;
+
+            int start_cell_column = Math.Max ((area.X - border_size) / cell_width, 0);
+            int start_cell_row = Math.Max ((area.Y - border_size) / cell_height, 0);
+            int start_cell_num = start_cell_column + start_cell_row * cells_per_row;
+
+            int end_cell_column = Math.Max ((area.X + area.Width - border_size) / cell_width, 0);
+            int end_cell_row = Math.Max ((area.Y + area.Height - border_size) / cell_height, 0);
+
+            int i;
+
+            int cols = end_cell_column - start_cell_column + 1;
+            int rows = end_cell_row - start_cell_row + 1;
+            int len = rows * cols;
+            int scell = start_cell_num;
+            int ecell = scell + len;
+            if (scell > cell_count - len) {
+                ecell = cell_count;
+                scell = System.Math.Max (0, scell - len);
+            } else
+                ecell = scell + len;
+
+            int mid = (ecell - scell) / 2;
+            for (i = 0; i < mid; i++) {
+
+                // The order of Preloading is kept from the previous version, because it provides
+                // smooth appearance (alternating for begin and end of the viewport) of the cells.
+                // Maybe, this can be done better in a subclass ? (e.g. by calling a PreloadCells
+                // with an Array/Enumeration of all cells to be preloaded, or with lower and upper
+                // bound of cells to be preloaded)
+                int cell = back ? ecell - i - 1 : scell + mid + i;
+                PreloadCell (cell);
+
+                cell = back ? scell + i : scell + mid - i - 1;
+                PreloadCell (cell);
+            }
+        }
 
 #endregion
 
-	}
+    }
 }
 
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/CheckPattern.cs b/src/Core/FSpot.Gui/FSpot.Widgets/CheckPattern.cs
index 7648075..079e0da 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/CheckPattern.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/CheckPattern.cs
@@ -28,7 +28,6 @@
 //
 
 using System;
-
 using Gdk;
 
 namespace FSpot.Widgets
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/Curve.cs b/src/Core/FSpot.Gui/FSpot.Widgets/Curve.cs
index 1cd6aa8..37d4a6e 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/Curve.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/Curve.cs
@@ -29,17 +29,15 @@
 
 using System;
 using System.Collections.Generic;
-
-using Gdk;
 using Gtk;
+using Gdk;
 
 namespace FSpot.Widgets
 {
-	// FIXME: This class is never used
 	public class Curve : DrawingArea
 	{
 #region public API
-		public Curve ()
+		public Curve () : base ()
 		{
 			Events |= EventMask.ExposureMask
 				| EventMask.PointerMotionMask
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs b/src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs
index 9b47258..f90f609 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs
@@ -30,10 +30,9 @@
 //
 
 using System;
-
-using Gtk;
-
 using Mono.Unix;
+using Gtk;
+using FSpot.Utils;
 
 namespace FSpot.Widgets
 {
@@ -47,6 +46,7 @@ namespace FSpot.Widgets
 			Fill,
 		}
 
+		Gtk.Image preview_image;
 		CheckButton fullpage;
 
 		RadioButton ppp1, ppp2, ppp4, ppp9, ppp20, ppp30;
@@ -93,30 +93,31 @@ namespace FSpot.Widgets
 		}
 
 		public FitMode Fitmode {
-			get
-			{
+			get {
 				if (zoom.Active)	return FitMode.Zoom;
-				if (fill.Active)	return FitMode.Fill;
-				if (scaled.Active)	return FitMode.Scaled;
-
-				throw new Exception ("Something is wrong on this GUI");
+				else if (fill.Active)	return FitMode.Fill;
+				else if (scaled.Active)	return FitMode.Scaled;
+				else
+					throw new Exception ("Something is wrong on this GUI");
 			}
 		}
 
 		public int PhotosPerPage {
 			get {
 				if (ppp1.Active)	return 1;
-				if (ppp2.Active)	return 2;
-				if (ppp4.Active)	return 4;
-				if (ppp9.Active)	return 9;
-				if (ppp20.Active)	return 20;
-				if (ppp30.Active)	return 30;
-				
-				throw new Exception ("Something is wrong on this GUI");
+				else if (ppp2.Active)	return 2;
+				else if (ppp4.Active)	return 4;
+				else if (ppp9.Active)	return 9;
+				else if (ppp20.Active)	return 20;
+				else if (ppp30.Active)	return 30;
+				else
+					throw new Exception ("Something is wrong on this GUI");
 			}
 		}
 
-		public Image PreviewImage { get; private set; }
+		public Gtk.Image PreviewImage {
+			get { return preview_image; }
+		}
 
 		public bool Repeat {
 			get { return repeat.Active; }
@@ -134,8 +135,8 @@ namespace FSpot.Widgets
 		{
 			this.print_operation = print_operation;
 
-			PreviewImage = new Gtk.Image ();
-			Attach (PreviewImage, 0, 2, 0, 1);
+			preview_image = new Gtk.Image ();
+			Attach (preview_image, 0, 2, 0, 1);
 
 			Frame page_frame = new Frame (Catalog.GetString ("Page Setup"));
 			VBox page_box = new VBox ();
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/DateEdit.cs b/src/Core/FSpot.Gui/FSpot.Widgets/DateEdit.cs
index b377646..9b2964f 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/DateEdit.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/DateEdit.cs
@@ -28,10 +28,8 @@
 //
 
 using System;
-
-using Gtk;
-
 using Mono.Unix;
+using Gtk;
 
 namespace FSpot.Widgets
 {
@@ -45,7 +43,11 @@ namespace FSpot.Widgets
 		{
 		}
 
-		public DateEdit (DateTimeOffset dateTimeOffset, DateEditFlags dateEditFlags = DateEditFlags.None)
+		public DateEdit (DateTimeOffset dateTimeOffset) : this (dateTimeOffset, DateEditFlags.None)
+		{
+		}
+
+		public DateEdit (DateTimeOffset dateTimeOffset, DateEditFlags dateEditFlags) : base ()
 		{
 			this.dateEditFlags = dateEditFlags;
 			this.dateTimeOffset = dateTimeOffset;
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/HighlightedBox.cs b/src/Core/FSpot.Gui/FSpot.Widgets/HighlightedBox.cs
index 3df08d6..975f182 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/HighlightedBox.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/HighlightedBox.cs
@@ -28,7 +28,6 @@
 //
 
 using System;
-
 using Gtk;
 
 namespace FSpot.Widgets
@@ -39,7 +38,7 @@ namespace FSpot.Widgets
 
 		protected HighlightedBox (IntPtr raw) : base (raw) {}
 
-		public HighlightedBox (Widget child)
+		public HighlightedBox (Widget child) : base ()
 		{
 			Child = child;
 			AppPaintable = true;
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/ImageView.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView.cs
index f618857..8843d85 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/ImageView.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView.cs
@@ -30,31 +30,26 @@
 //
 
 using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
 
-using FSpot.Utils;
-
-using Gdk;
 using Gtk;
+using Gdk;
 
-using Hyena;
-
+using FSpot.Utils;
 using TagLib.Image;
 
+using Hyena;
+
 namespace FSpot.Widgets
 {
 	public partial class ImageView : Container
 	{
 #region public API
-		protected ImageView (IntPtr raw) : base (raw)
-		{
-			MIN_ZOOM = 0.1;
-			MAX_ZOOM = 10.0;
-		}
+		protected ImageView (IntPtr raw) : base (raw) { }
 
-		public ImageView (Adjustment hadjustment, Adjustment vadjustment, bool can_select)
+		public ImageView (Adjustment hadjustment, Adjustment vadjustment, bool can_select) : base ()
 		{
-			MIN_ZOOM = 0.1;
-			MAX_ZOOM = 10.0;
 			OnSetScrollAdjustments (hadjustment, vadjustment);
 			AdjustmentsChanged += ScrollToAdjustments;
 			WidgetFlags &= ~WidgetFlags.NoWindow;
@@ -79,7 +74,7 @@ namespace FSpot.Widgets
 					return;
 
 				pixbuf = value;
-				MIN_ZOOM = ComputeMinZoom (upscale);
+				min_zoom = ComputeMinZoom (upscale);
 
 				ComputeScaledSize ();
 				AdjustmentsChanged -= ScrollToAdjustments;
@@ -97,7 +92,7 @@ namespace FSpot.Widgets
 				if (value == pixbuf_orientation)
 					return;
 				pixbuf_orientation = value;
-				MIN_ZOOM = ComputeMinZoom (upscale);
+				min_zoom = ComputeMinZoom (upscale);
 				ComputeScaledSize ();
 				QueueDraw ();
 			}
@@ -188,14 +183,14 @@ namespace FSpot.Widgets
 			} 
 		}
 
-		double zoom = 1.0;
-		public double Zoom {
-			get { return zoom; }
-			set {
-				// Zoom around the center of the image.
-				DoZoom (value, Allocation.Width / 2, Allocation.Height / 2);
-			}
-		}
+        double zoom = 1.0;
+        public double Zoom {
+            get { return zoom; }
+            set {
+                // Zoom around the center of the image.
+                DoZoom (value, Allocation.Width / 2, Allocation.Height / 2);
+            }
+        }
 
 		public void ZoomIn ()
 		{
@@ -212,25 +207,27 @@ namespace FSpot.Widgets
 			DoZoom (zoom * zoom_increment, x, y);
 		}
 
-		public bool Fit { get; private set; }
+        public bool Fit { get; private set; }
 
-		public void ZoomFit (bool upscale)
-		{
-			Gtk.ScrolledWindow scrolled = Parent as Gtk.ScrolledWindow;
-			if (scrolled != null)
-				scrolled.SetPolicy (Gtk.PolicyType.Never, Gtk.PolicyType.Never);
+        public void ZoomFit (bool upscale)
+        {
+            Gtk.ScrolledWindow scrolled = Parent as Gtk.ScrolledWindow;
+            if (scrolled != null)
+                scrolled.SetPolicy (Gtk.PolicyType.Never, Gtk.PolicyType.Never);
 
-			MIN_ZOOM = ComputeMinZoom (upscale);
+            min_zoom = ComputeMinZoom (upscale);
 
-			this.upscale = upscale;
+            this.upscale = upscale;
 
-			Fit = true;
-			DoZoom (MIN_ZOOM, Allocation.Width / 2, Allocation.Height / 2);
+            Fit = true;
+            DoZoom (MIN_ZOOM, Allocation.Width / 2, Allocation.Height / 2);
 
-			if (scrolled != null) {
-				ThreadAssist.ProxyToMain (() => scrolled.SetPolicy (Gtk.PolicyType.Automatic, Gtk.PolicyType.Automatic));
-			}
-		}
+            if (scrolled != null) {
+                ThreadAssist.ProxyToMain (() => {
+                        scrolled.SetPolicy (Gtk.PolicyType.Automatic, Gtk.PolicyType.Automatic);
+                });
+            }
+        }
 
 		public Point WindowCoordsToImage (Point win)
 		{
@@ -257,9 +254,15 @@ namespace FSpot.Widgets
 
 		protected static double ZOOM_FACTOR = 1.1;
 
-		protected double MAX_ZOOM { get; set; }
+		protected double max_zoom = 10.0;
+		protected double MAX_ZOOM {
+			get { return max_zoom; }
+		}
 
-		protected double MIN_ZOOM { get; set; }
+		protected double min_zoom = 0.1;
+		protected double MIN_ZOOM {
+			get { return min_zoom; }
+		}
 
 		bool upscale;
 		protected void ZoomFit ()
@@ -305,82 +308,82 @@ namespace FSpot.Widgets
 
 #region GtkWidgetry
 
-		protected override void OnRealized ()
-		{
-			SetFlag (Gtk.WidgetFlags.Realized);
-			GdkWindow = new Gdk.Window (ParentWindow,
-					new Gdk.WindowAttr { 
-						WindowType = Gdk.WindowType.Child,
-						X = Allocation.X,
-						Y = Allocation.Y,
-						Width = Allocation.Width,
-						Height = Allocation.Height,
-						Wclass = Gdk.WindowClass.InputOutput,
-						Visual = ParentWindow.Visual,
-						Colormap = ParentWindow.Colormap,
-						Mask = this.Events
-							| EventMask.ExposureMask
-							| EventMask.ButtonPressMask
-							| EventMask.ButtonReleaseMask
-							| EventMask.PointerMotionMask
-							| EventMask.PointerMotionHintMask
-							| EventMask.ScrollMask
-							| EventMask.KeyPressMask 
-					},
-					Gdk.WindowAttributesType.X | Gdk.WindowAttributesType.Y |
-					Gdk.WindowAttributesType.Visual | Gdk.WindowAttributesType.Colormap);
-
-			GdkWindow.SetBackPixmap (null, false);
-			GdkWindow.UserData = Handle;
-
-			Style.Attach (GdkWindow);
-			Style.SetBackground (GdkWindow, Gtk.StateType.Normal);
-
-			OnRealizedChildren ();
-		}
-
-		protected override void OnMapped ()
-		{
-			SetFlag (Gtk.WidgetFlags.Mapped);
-			OnMappedChildren ();
-			GdkWindow.Show ();
-		}
-
-		protected override void OnSizeRequested (ref Gtk.Requisition requisition)
-		{
-			requisition.Width = requisition.Height = 0;
-			OnSizeRequestedChildren ();
-		}
-
-		protected override void OnSizeAllocated (Gdk.Rectangle allocation)
-		{
-			MIN_ZOOM = ComputeMinZoom (upscale);
-
-			if (Fit || zoom < MIN_ZOOM)
-				zoom = MIN_ZOOM;
-			// Since this affects the zoom_scale we should alert it
-			EventHandler eh = ZoomChanged;
-			if (eh != null)
-				eh (this, System.EventArgs.Empty);
-
-			ComputeScaledSize ();
-
-			OnSizeAllocatedChildren ();
-
-			if (IsRealized) {
-				GdkWindow.MoveResize (allocation.X, allocation.Y, allocation.Width, allocation.Height);
-			}
-
-			if (XOffset > Hadjustment.Upper - Hadjustment.PageSize)
-				ScrollTo ((int)(Hadjustment.Upper - Hadjustment.PageSize), YOffset, false);
-			if (YOffset > Vadjustment.Upper - Vadjustment.PageSize)
-				ScrollTo (XOffset, (int)(Vadjustment.Upper - Vadjustment.PageSize), false);
-
-			base.OnSizeAllocated (allocation);
-
-			if (Fit)
-				ZoomFit (upscale);
-		}
+        protected override void OnRealized ()
+        {
+            SetFlag (Gtk.WidgetFlags.Realized);
+            GdkWindow = new Gdk.Window (ParentWindow,
+                    new Gdk.WindowAttr { 
+                        WindowType = Gdk.WindowType.Child,
+                        X = Allocation.X,
+                        Y = Allocation.Y,
+                        Width = Allocation.Width,
+                        Height = Allocation.Height,
+                        Wclass = Gdk.WindowClass.InputOutput,
+                        Visual = ParentWindow.Visual,
+                        Colormap = ParentWindow.Colormap,
+                        Mask = this.Events
+                            | EventMask.ExposureMask
+                            | EventMask.ButtonPressMask
+                            | EventMask.ButtonReleaseMask
+                            | EventMask.PointerMotionMask
+                            | EventMask.PointerMotionHintMask
+                            | EventMask.ScrollMask
+                            | EventMask.KeyPressMask 
+                    },
+                    Gdk.WindowAttributesType.X | Gdk.WindowAttributesType.Y |
+                    Gdk.WindowAttributesType.Visual | Gdk.WindowAttributesType.Colormap);
+
+            GdkWindow.SetBackPixmap (null, false);
+            GdkWindow.UserData = Handle;
+
+            Style.Attach (GdkWindow);
+            Style.SetBackground (GdkWindow, Gtk.StateType.Normal);
+
+            OnRealizedChildren ();
+        }
+
+        protected override void OnMapped ()
+        {
+            SetFlag (Gtk.WidgetFlags.Mapped);
+            OnMappedChildren ();
+            GdkWindow.Show ();
+        }
+
+        protected override void OnSizeRequested (ref Gtk.Requisition requisition)
+        {
+            requisition.Width = requisition.Height = 0;
+            OnSizeRequestedChildren ();
+        }
+
+        protected override void OnSizeAllocated (Gdk.Rectangle allocation)
+        {
+            min_zoom = ComputeMinZoom (upscale);
+
+            if (Fit || zoom < MIN_ZOOM)
+                zoom = MIN_ZOOM;
+            // Since this affects the zoom_scale we should alert it
+            EventHandler eh = ZoomChanged;
+            if (eh != null)
+                eh (this, System.EventArgs.Empty);
+
+            ComputeScaledSize ();
+
+            OnSizeAllocatedChildren ();
+
+            if (IsRealized) {
+                GdkWindow.MoveResize (allocation.X, allocation.Y, allocation.Width, allocation.Height);
+            }
+
+            if (XOffset > Hadjustment.Upper - Hadjustment.PageSize)
+                ScrollTo ((int)(Hadjustment.Upper - Hadjustment.PageSize), YOffset, false);
+            if (YOffset > Vadjustment.Upper - Vadjustment.PageSize)
+                ScrollTo (XOffset, (int)(Vadjustment.Upper - Vadjustment.PageSize), false);
+
+            base.OnSizeAllocated (allocation);
+
+            if (Fit)
+                ZoomFit (upscale);
+        }
 
 		protected override bool OnExposeEvent (Gdk.EventExpose evnt)
 		{
@@ -390,7 +393,7 @@ namespace FSpot.Widgets
 			foreach (Rectangle area in evnt.Region.GetRectangles ())
 			{
 				var p_area = new Rectangle (Math.Max (0, area.X), Math.Max (0, area.Y),
-							  Math.Min (Allocation.Width, area.Width), Math.Min (Allocation.Height, area.Height));
+						      Math.Min (Allocation.Width, area.Width), Math.Min (Allocation.Height, area.Height));
 				if (p_area == Rectangle.Zero)
 					continue;
 
@@ -568,58 +571,58 @@ namespace FSpot.Widgets
 
 #region private painting, zooming and misc
 
-		int XOffset { get; set;}
-		int YOffset { get; set;}
-
-		/// <summary>
-		///     Zoom to the given factor.
-		/// </summary>
-		/// <param name='zoom'>
-		///     A zoom factor, expressed as a double.
-		/// </param>
-		/// <param name='x'>
-		///     The point of the viewport around which to zoom.
-		/// </param>
-		/// <param name='y'>
-		///     The point of the viewport around which to zoom.
-		/// </param>
-		void DoZoom (double zoom, int x, int y)
-		{
-			Fit = zoom == MIN_ZOOM;
-
-			if (zoom == this.zoom || System.Math.Abs (this.zoom - zoom) < System.Double.Epsilon) {
-				// Don't recalculate if the zoom factor stays the same.
-				return;
-			}
-
-			// Clamp the zoom factor within the [ MIN_ZOOM , MAX_ZOOM ] interval.
-			zoom = Math.Max (Math.Min (zoom, MAX_ZOOM), MIN_ZOOM);
-
-			this.zoom = zoom;
-
-			int x_offset = scaled_width < Allocation.Width ? (int)(Allocation.Width - scaled_width) / 2 : -XOffset;
-			int y_offset = scaled_height < Allocation.Height ? (int)(Allocation.Height - scaled_height) / 2 : -YOffset;
-			double x_anchor = (double)(x - x_offset) / (double)scaled_width;
-			double y_anchor = (double)(y - y_offset) / (double)scaled_height;
-			ComputeScaledSize ();
-
-			AdjustmentsChanged -= ScrollToAdjustments;
-			if (scaled_width < Allocation.Width)
-				Hadjustment.Value = XOffset = 0;
-			else
-				Hadjustment.Value = XOffset = Clamp ((int)(x_anchor * scaled_width - x), 0, (int)(Hadjustment.Upper - Hadjustment.PageSize));
-			if (scaled_height < Allocation.Height)
-				Vadjustment.Value = YOffset = 0;
-			else
-				Vadjustment.Value = YOffset = Clamp ((int)(y_anchor * scaled_height - y), 0, (int)(Vadjustment.Upper - Vadjustment.PageSize));
-			AdjustmentsChanged += ScrollToAdjustments;
-
-			EventHandler eh = ZoomChanged;
-			if (eh != null)
-				eh (this, EventArgs.Empty);
-
-			QueueDraw ();
-		}
+        int XOffset { get; set;}
+        int YOffset { get; set;}
+
+        /// <summary>
+        ///     Zoom to the given factor.
+        /// </summary>
+        /// <param name='zoom'>
+        ///     A zoom factor, expressed as a double.
+        /// </param>
+        /// <param name='x'>
+        ///     The point of the viewport around which to zoom.
+        /// </param>
+        /// <param name='y'>
+        ///     The point of the viewport around which to zoom.
+        /// </param>
+        void DoZoom (double zoom, int x, int y)
+        {
+            Fit = zoom == MIN_ZOOM;
+
+            if (zoom == this.zoom || System.Math.Abs (this.zoom - zoom) < System.Double.Epsilon) {
+                // Don't recalculate if the zoom factor stays the same.
+                return;
+            }
+
+            // Clamp the zoom factor within the [ MIN_ZOOM , MAX_ZOOM ] interval.
+            zoom = Math.Max (Math.Min (zoom, MAX_ZOOM), MIN_ZOOM);
+
+            this.zoom = zoom;
+
+            int x_offset = scaled_width < Allocation.Width ? (int)(Allocation.Width - scaled_width) / 2 : -XOffset;
+            int y_offset = scaled_height < Allocation.Height ? (int)(Allocation.Height - scaled_height) / 2 : -YOffset;
+            double x_anchor = (double)(x - x_offset) / (double)scaled_width;
+            double y_anchor = (double)(y - y_offset) / (double)scaled_height;
+            ComputeScaledSize ();
+
+            AdjustmentsChanged -= ScrollToAdjustments;
+            if (scaled_width < Allocation.Width)
+                Hadjustment.Value = XOffset = 0;
+            else
+                Hadjustment.Value = XOffset = Clamp ((int)(x_anchor * scaled_width - x), 0, (int)(Hadjustment.Upper - Hadjustment.PageSize));
+            if (scaled_height < Allocation.Height)
+                Vadjustment.Value = YOffset = 0;
+            else
+                Vadjustment.Value = YOffset = Clamp ((int)(y_anchor * scaled_height - y), 0, (int)(Vadjustment.Upper - Vadjustment.PageSize));
+            AdjustmentsChanged += ScrollToAdjustments;
+
+            EventHandler eh = ZoomChanged;
+            if (eh != null)
+                eh (this, EventArgs.Empty);
+
+            QueueDraw ();
+        }
 
 		void PaintBackground (Rectangle backgound, Rectangle area)
 		{
@@ -650,16 +653,16 @@ namespace FSpot.Widgets
 
 			//Short circuit for 1:1 zoom
 			if (zoom == 1.0 &&
-				!Pixbuf.HasAlpha &&
-				Pixbuf.BitsPerSample == 8 &&
-				pixbuf_orientation == ImageOrientation.TopLeft) {
+			    !Pixbuf.HasAlpha &&
+			    Pixbuf.BitsPerSample == 8 &&
+			    pixbuf_orientation == ImageOrientation.TopLeft) {
 				GdkWindow.DrawPixbuf (Style.BlackGC,
-							  Pixbuf,
-							  area.X - x_offset, area.Y - y_offset,
-							  area.X, area.Y,
-							  area.Width, area.Height,
-							  RgbDither.Max,
-							  area.X - x_offset, area.Y - y_offset);
+						      Pixbuf,
+						      area.X - x_offset, area.Y - y_offset,
+						      area.X, area.Y,
+						      area.Width, area.Height,
+						      RgbDither.Max,
+						      area.X - x_offset, area.Y - y_offset);
 				return;
 			}
 
@@ -675,25 +678,25 @@ namespace FSpot.Widgets
 					temp_pixbuf.Fill (0x00000000);
 
 				Pixbuf.CompositeColor (temp_pixbuf,
-							   0, 0,
-							   pixbuf_area.Width, pixbuf_area.Height,
-							   -pixbuf_area.X, -pixbuf_area.Y,
-							   zoom, zoom,
-							   zoom == 1.0 ? InterpType.Nearest : interpolation, 255,
-							   pixbuf_area.X, pixbuf_area.Y,
-							   CheckPattern.CheckSize, CheckPattern.Color1, CheckPattern.Color2);
+						       0, 0,
+						       pixbuf_area.Width, pixbuf_area.Height,
+						       -pixbuf_area.X, -pixbuf_area.Y,
+						       zoom, zoom,
+						       zoom == 1.0 ? InterpType.Nearest : interpolation, 255,
+						       pixbuf_area.X, pixbuf_area.Y,
+						       CheckPattern.CheckSize, CheckPattern.Color1, CheckPattern.Color2);
 
 
 				ApplyColorTransform (temp_pixbuf);
 
 				using (var dest_pixbuf = PixbufUtils.TransformOrientation (temp_pixbuf, pixbuf_orientation)) {
 					GdkWindow.DrawPixbuf (Style.BlackGC,
-								  dest_pixbuf,
-								  0, 0,
-								  area.X, area.Y,
-								  area.Width, area.Height,
-								  RgbDither.Max,
-								  area.X - x_offset, area.Y - y_offset);
+							      dest_pixbuf,
+							      0, 0,
+							      area.X, area.Y,
+							      area.Width, area.Height,
+							      RgbDither.Max,
+							      area.X - x_offset, area.Y - y_offset);
 				}
 			}
 		}
@@ -870,7 +873,7 @@ namespace FSpot.Widgets
 					Rectangle win_sel = ImageCoordsToWindow (Selection);
 					is_dragging_selection = true;
 					if (Math.Abs (win_sel.X - evnt.X) < SELECTION_SNAP_DISTANCE &&
-						Math.Abs (win_sel.Y - evnt.Y) < SELECTION_SNAP_DISTANCE) {	 			//TopLeft
+					    Math.Abs (win_sel.Y - evnt.Y) < SELECTION_SNAP_DISTANCE) {	 			//TopLeft
 						selection_anchor = new Point (Selection.X + Selection.Width, Selection.Y + Selection.Height);
 					} else if (Math.Abs (win_sel.X + win_sel.Width - evnt.X) < SELECTION_SNAP_DISTANCE &&
 						   Math.Abs (win_sel.Y - evnt.Y) < SELECTION_SNAP_DISTANCE) { 			//TopRight
@@ -937,7 +940,7 @@ namespace FSpot.Widgets
 				case DragMode.Extend:
 					Rectangle win_sel = ImageCoordsToWindow (Selection);
 					if (Math.Abs (win_sel.X - x) < SELECTION_SNAP_DISTANCE &&
-						Math.Abs (win_sel.Y - y) < SELECTION_SNAP_DISTANCE) {	 			//TopLeft
+					    Math.Abs (win_sel.Y - y) < SELECTION_SNAP_DISTANCE) {	 			//TopLeft
 						GdkWindow.Cursor = new Cursor (CursorType.TopLeftCorner);
 					} else if (Math.Abs (win_sel.X + win_sel.Width - x) < SELECTION_SNAP_DISTANCE &&
 						   Math.Abs (win_sel.Y - y) < SELECTION_SNAP_DISTANCE) { 			//TopRight
@@ -980,8 +983,8 @@ namespace FSpot.Widgets
 			if (is_dragging_selection) {
 				Point win_anchor = ImageCoordsToWindow (selection_anchor);
 				if (Selection == Rectangle.Zero &&
-					Math.Abs (evnt.X - win_anchor.X) < SELECTION_THRESHOLD &&
-					Math.Abs (evnt.Y - win_anchor.Y) < SELECTION_THRESHOLD) {
+				    Math.Abs (evnt.X - win_anchor.X) < SELECTION_THRESHOLD &&
+				    Math.Abs (evnt.Y - win_anchor.Y) < SELECTION_THRESHOLD) {
 					SelectionSetPointer (x, y);
 					return true;
 				}
@@ -995,9 +998,9 @@ namespace FSpot.Widgets
 
 				else
 					Selection = ConstrainSelection (new Rectangle (Math.Min (selection_anchor.X, img.X),
-											   Math.Min (selection_anchor.Y, img.Y),
-											   Math.Abs (selection_anchor.X - img.X),
-											   Math.Abs (selection_anchor.Y - img.Y)),
+										       Math.Min (selection_anchor.Y, img.Y),
+										       Math.Abs (selection_anchor.X - img.X),
+										       Math.Abs (selection_anchor.Y - img.Y)),
 									fixed_width, fixed_height);
 
 				SelectionSetPointer (x, y);
@@ -1021,7 +1024,7 @@ namespace FSpot.Widgets
 		{
 			double constrain = selection_xy_ratio;
 			if ((double)sel.Width > (double)sel.Height && selection_xy_ratio < 1 ||
-				(double)sel.Width < (double)sel.Height && selection_xy_ratio > 1)
+			    (double)sel.Width < (double)sel.Height && selection_xy_ratio > 1)
 				constrain = 1.0 / constrain;
 
 
@@ -1043,10 +1046,10 @@ namespace FSpot.Widgets
 			}
 
 			return new Rectangle (sel.X + width < Pixbuf.Width ? sel.X : Pixbuf.Width - width,
-						  sel.Y + height < Pixbuf.Height ? sel.Y : Pixbuf.Height - height,
-						  width, height);
+					      sel.Y + height < Pixbuf.Height ? sel.Y : Pixbuf.Height - height,
+					      width, height);
 		}
 #endregion
 
-	}
+    }
 }
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Container.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Container.cs
index 6b9be5d..ca6995d 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Container.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Container.cs
@@ -27,126 +27,132 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System.Collections.Generic;
-using System.Linq;
 using Gtk;
+using System.Collections.Generic;
 
 namespace FSpot.Widgets
 {
-	public partial class ImageView : Container
-	{
-		readonly List<LayoutChild> children = new List<LayoutChild> ();
-
-		#region container
-
-		protected override void OnAdded (Gtk.Widget widget)
-		{
-			Put (widget, 0, 0);
-		}
-
-		protected override void OnRemoved (Gtk.Widget widget)
-		{
-			LayoutChild child = null;
-			foreach (var c in children.Where(c => child.Widget == widget))
-			{
-				child = c;
-				break;
-			}
-
-			if (child == null)
-				return;
-
-			widget.Unparent ();
-			children.Remove (child);
-		}
-
-		protected override void ForAll (bool include_internals, Gtk.Callback callback)
-		{
-			foreach (var child in children) {
-				callback (child.Widget);
-			}
-		}
-
-		#endregion
-
-
-		#region children
-
-		class LayoutChild
-		{
-			public Widget Widget { get; private set; }
-
-			public int X { get; set; }
-			public int Y { get; set; }
-
-			public LayoutChild (Gtk.Widget widget, int x, int y)
-			{
-				Widget = widget;
-				X = x;
-				Y = y;
-			}
-		}
-
-		LayoutChild GetChild (Gtk.Widget widget)
-		{
-			return children.FirstOrDefault(child => child.Widget == widget);
-		}
-
-		#endregion
-
-		#region Public API
-
-		public void Put (Gtk.Widget widget, int x, int y)
-		{
-			children.Add (new LayoutChild (widget, x, y));
-			if (IsRealized)
-				widget.ParentWindow = GdkWindow;
-			widget.Parent = this;
-		}
-
-		public void Move (Gtk.Widget widget, int x, int y)
-		{
-			LayoutChild child = GetChild (widget);
-			if (child == null)
-				return;
-			
-			child.X = x;
-			child.Y = y;
-			if (Visible && widget.Visible)
-				QueueResize ();
-		}
-
-		private void OnRealizedChildren ()
-		{
-			foreach (var child in children) {
-				child.Widget.ParentWindow = GdkWindow;
-			}
-		}
-
-		private void OnMappedChildren ()
-		{
-			foreach (var child in children) {
-				if (child.Widget.Visible && !child.Widget.IsMapped)
-					child.Widget.Map ();
-			}
-		}
-
-		private void OnSizeRequestedChildren ()
-		{
-			foreach (var child in children) {
-				child.Widget.SizeRequest ();
-			}
-		}
-
-		private void OnSizeAllocatedChildren ()
-		{
-			foreach (var child in children) {
-				Gtk.Requisition req = child.Widget.ChildRequisition;
-				child.Widget.SizeAllocate (new Gdk.Rectangle (child.X, child.Y, req.Width, req.Height));
-			}
-		}
-		
-		#endregion
-	}
+    public partial class ImageView : Container
+    {
+        List<LayoutChild> children = new List<LayoutChild> ();
+
+        #region container
+
+        protected override void OnAdded (Gtk.Widget widget)
+        {
+            Put (widget, 0, 0);
+        }
+
+        protected override void OnRemoved (Gtk.Widget widget)
+        {
+            LayoutChild child = null;
+            foreach (var c in children) {
+                if (child.Widget == widget) {
+                    child = c;
+                    break;
+                }
+            }
+            
+            if (child != null) {
+                widget.Unparent ();
+                children.Remove (child);
+            }
+        }
+
+        protected override void ForAll (bool include_internals, Gtk.Callback callback)
+        {
+            foreach (var child in children) {
+                callback (child.Widget);
+            }
+        }
+
+        #endregion
+
+
+        #region children
+
+        class LayoutChild
+        {
+            Gtk.Widget widget;
+            public Gtk.Widget Widget {
+                get { return widget; }
+            }
+
+            public int X { get; set; }
+            public int Y { get; set; }
+
+            public LayoutChild (Gtk.Widget widget, int x, int y)
+            {
+                this.widget = widget;
+                X = x;
+                Y = y;
+            }
+        }
+
+        LayoutChild GetChild (Gtk.Widget widget)
+        {
+            foreach (var child in children) {
+                if (child.Widget == widget)
+                    return child;
+            }
+            return null;
+        }
+
+        #endregion
+
+        #region Public API
+
+        public void Put (Gtk.Widget widget, int x, int y)
+        {
+            children.Add (new LayoutChild (widget, x, y));
+            if (IsRealized)
+                widget.ParentWindow = GdkWindow;
+            widget.Parent = this;
+        }
+
+        public void Move (Gtk.Widget widget, int x, int y)
+        {
+            LayoutChild child = GetChild (widget);
+            if (child == null)
+                return;
+            
+            child.X = x;
+            child.Y = y;
+            if (Visible && widget.Visible)
+                QueueResize ();
+        }
+
+        private void OnRealizedChildren ()
+        {
+            foreach (var child in children) {
+                child.Widget.ParentWindow = GdkWindow;
+            }
+        }
+
+        private void OnMappedChildren ()
+        {
+            foreach (var child in children) {
+                if (child.Widget.Visible && !child.Widget.IsMapped)
+                    child.Widget.Map ();
+            }
+        }
+
+        private void OnSizeRequestedChildren ()
+        {
+            foreach (var child in children) {
+                child.Widget.SizeRequest ();
+            }
+        }
+
+        private void OnSizeAllocatedChildren ()
+        {
+            foreach (var child in children) {
+                Gtk.Requisition req = child.Widget.ChildRequisition;
+                child.Widget.SizeAllocate (new Gdk.Rectangle (child.X, child.Y, req.Width, req.Height));
+            }
+        }
+        
+        #endregion
+    }
 }
 
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Panning.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Panning.cs
index fd0a7f5..57ee06d 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Panning.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Panning.cs
@@ -28,6 +28,7 @@
 //
 
 using Gdk;
+using Gtk;
 
 namespace FSpot.Widgets
 {
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/Layout.cs b/src/Core/FSpot.Gui/FSpot.Widgets/Layout.cs
index b769106..50dab91 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/Layout.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/Layout.cs
@@ -29,28 +29,26 @@
 
 using System;
 using System.Collections.Generic;
-using Gdk;
 using Hyena;
 
 namespace FSpot.Widgets
 {
-	// FIXME: This class is never used
 	public class Layout : Gtk.Container
 	{
 		public Layout () : this (null, null)
 		{
 		}
 
-		public Layout (Gtk.Adjustment hadjustment, Gtk.Adjustment vadjustment)
+		public Layout (Gtk.Adjustment hadjustment, Gtk.Adjustment vadjustment) : base ()
 		{
-			Height = 100;
-			Width = 100;
-			BinWindow = null;
 			OnSetScrollAdjustments (hadjustment, vadjustment);
 			children = new List<LayoutChild> ();
 		}
 
-		public Window BinWindow { get; private set; }
+		Gdk.Window bin_window = null;
+		public Gdk.Window BinWindow {
+			get { return bin_window; }
+		}
 
 		Gtk.Adjustment hadjustment;
 		public Gtk.Adjustment Hadjustment {
@@ -64,9 +62,15 @@ namespace FSpot.Widgets
 			set { OnSetScrollAdjustments (Hadjustment, vadjustment); }
 		}
 
-		public uint Width { get; private set; }
+		uint width = 100;
+		public uint Width {
+			get { return width; }
+		}
 
-		public uint Height { get; private set; }
+		uint height = 100;
+		public uint Height {
+			get { return height; }
+		}
 
 		class LayoutChild {
 			public Gtk.Widget Widget { get; private set; }
@@ -87,7 +91,7 @@ namespace FSpot.Widgets
 		{
 			children.Add (new LayoutChild (widget, x, y));
 			if (IsRealized)
-				widget.ParentWindow = BinWindow;
+				widget.ParentWindow = bin_window;
 			widget.Parent = this;
 		}
 
@@ -105,11 +109,11 @@ namespace FSpot.Widgets
 
 		public void SetSize (uint width, uint height)
 		{
-			Hadjustment.Upper = Width = width;
-			Vadjustment.Upper = Height = height;
+			Hadjustment.Upper = this.width = width;
+			Vadjustment.Upper = this.height = height;
 			
 			if (IsRealized) {
-				BinWindow.Resize ((int)Math.Max (width, Allocation.Width), (int)Math.Max (height, Allocation.Height));
+				bin_window.Resize ((int)Math.Max (width, Allocation.Width), (int)Math.Max (height, Allocation.Height));
 			}
 		}
 
@@ -146,29 +150,29 @@ namespace FSpot.Widgets
 							     WindowType = Gdk.WindowType.Child, 
 							     X = (int)-Hadjustment.Value,
 							     Y = (int)-Vadjustment.Value,
-							     Width = (int)Math.Max (Width, Allocation.Width),
-							     Height = (int)Math.Max (Height, Allocation.Height),
+							     Width = (int)Math.Max (width, Allocation.Width),
+							     Height = (int)Math.Max (height, Allocation.Height),
 							     Wclass = Gdk.WindowClass.InputOutput,
 							     Visual = this.Visual,
 							     Colormap = this.Colormap,
 							     Mask = Gdk.EventMask.ExposureMask | Gdk.EventMask.ScrollMask | this.Events };
-			BinWindow = new Gdk.Window (GdkWindow, attributes, 
+			bin_window = new Gdk.Window (GdkWindow, attributes, 
 						     Gdk.WindowAttributesType.X | Gdk.WindowAttributesType.Y | Gdk.WindowAttributesType.Visual | Gdk.WindowAttributesType.Colormap);
-			BinWindow.UserData = Handle;
+			bin_window.UserData = Handle;
 
 			Style.Attach (GdkWindow);
-			Style.SetBackground (BinWindow, Gtk.StateType.Normal);
+			Style.SetBackground (bin_window, Gtk.StateType.Normal);
 
 			foreach (var child in children) {
-				child.Widget.ParentWindow = BinWindow;
+				child.Widget.ParentWindow = bin_window;
 			}
 
 		}
 
 		protected override void OnUnrealized ()
 		{
-			BinWindow.Destroy ();
-			BinWindow = null;
+			bin_window.Destroy ();
+			bin_window = null;
 
 			base.OnUnrealized ();
 		}
@@ -177,7 +181,7 @@ namespace FSpot.Widgets
 		{
 			base.OnStyleSet (old_style);
 			if (IsRealized)
-				Style.SetBackground (BinWindow, Gtk.StateType.Normal);
+				Style.SetBackground (bin_window, Gtk.StateType.Normal);
 		}
 
 		protected override void OnMapped ()
@@ -188,7 +192,7 @@ namespace FSpot.Widgets
 				if (child.Widget.Visible && !child.Widget.IsMapped)
 					child.Widget.Map ();
 			}
-			BinWindow.Show ();
+			bin_window.Show ();
 			GdkWindow.Show ();
 		}
 
@@ -210,24 +214,24 @@ namespace FSpot.Widgets
 
 			if (IsRealized) {
 				GdkWindow.MoveResize (allocation.X, allocation.Y, allocation.Width, allocation.Height);
-				BinWindow.Resize ((int)Math.Max (Width, allocation.Width), (int)Math.Max (Height, allocation.Height));
+				bin_window.Resize ((int)Math.Max (width, allocation.Width), (int)Math.Max (height, allocation.Height));
 			}
 
 			Hadjustment.PageSize = allocation.Width;
 			Hadjustment.PageIncrement = Width * .9;
 			Hadjustment.Lower = 0;
-			Hadjustment.Upper = Math.Max (Width, allocation.Width);
+			Hadjustment.Upper = Math.Max (width, allocation.Width);
 
 			Vadjustment.PageSize = allocation.Height;
 			Vadjustment.PageIncrement = Height * .9;
 			Vadjustment.Lower = 0;
-			Vadjustment.Upper = Math.Max (Height, allocation.Height);
+			Vadjustment.Upper = Math.Max (height, allocation.Height);
 			base.OnSizeAllocated (allocation);
 		}
 
 		protected override bool OnExposeEvent (Gdk.EventExpose evnt)
 		{
-			if (evnt.Window != BinWindow)
+			if (evnt.Window != bin_window)
 				return false;
 
 			return base.OnExposeEvent (evnt);
@@ -261,7 +265,7 @@ namespace FSpot.Widgets
 		void HandleAdjustmentsValueChanged (object sender, EventArgs e)
 		{
 			if (IsRealized)
-				BinWindow.Move (-(int)Hadjustment.Value, -(int)Vadjustment.Value);
+				bin_window.Move (-(int)Hadjustment.Value, -(int)Vadjustment.Value);
 		}
 #endregion widgetry
 
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/MenuButton.cs b/src/Core/FSpot.Gui/FSpot.Widgets/MenuButton.cs
index 9d14a00..362aca4 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/MenuButton.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/MenuButton.cs
@@ -35,6 +35,7 @@ namespace FSpot.Widgets
 	{
 		Label label;
 		Arrow arrow;
+		Menu popup_menu;
 
 		public new string Label {
 			get { return label.Text; }
@@ -48,17 +49,24 @@ namespace FSpot.Widgets
 			set { arrow.ArrowType = value; }
 		}
 
-		public Menu Menu { get; set; }
+		public Menu Menu {
+			get { return popup_menu; }
+			set { popup_menu = value; }
+		}
 
 		public MenuButton () : this (null)
 		{
 		}
 
-		public MenuButton (string label, Menu menu = null) : this (label, menu, ArrowType.Down)
+		public MenuButton (string label) : this (label, null)
+		{
+		}
+
+		public MenuButton (string label, Menu menu) : this (label, menu, ArrowType.Down)
 		{
 		}
 
-		public MenuButton (string label, Menu menu, ArrowType arrow_type)
+		public MenuButton (string label, Menu menu, ArrowType arrow_type) : base ()
 		{
 			HBox hbox = new HBox ();
 			
@@ -83,10 +91,10 @@ namespace FSpot.Widgets
 
 		protected override void OnPressed ()
 		{
-			if (Menu == null)
+			if (popup_menu == null)
 				return;
 			
-			Menu.Popup (null, null, Position, 0, Gtk.Global.CurrentEventTime);
+			popup_menu.Popup (null, null, Position, 0, Gtk.Global.CurrentEventTime);
 		}
 
 		void Position (Menu menu, out int x, out int y, out bool push_in)
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/OpenWithMenu.cs b/src/Core/FSpot.Gui/FSpot.Widgets/OpenWithMenu.cs
index b6f65dd..444eeb8 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/OpenWithMenu.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/OpenWithMenu.cs
@@ -33,6 +33,8 @@ using System;
 using System.Collections.Generic;
 
 using Gtk;
+using Gdk;
+using GLib;
 using GtkBeans;
 
 using Mono.Unix;
@@ -53,7 +55,11 @@ namespace FSpot.Widgets {
 			}
 		}
 
-		public bool ShowIcons { get; set; }
+		bool show_icons = true;
+		public bool ShowIcons {
+			get { return show_icons; }
+			set { show_icons = value; }
+		}
 
 		public OpenWithMenu (TypeFetcher type_fetcher) : this (type_fetcher, null)
 		{
@@ -61,7 +67,6 @@ namespace FSpot.Widgets {
 
 		public OpenWithMenu (TypeFetcher type_fetcher, params string [] ignore_apps)
 		{
-			ShowIcons = true;
 			this.type_fetcher = type_fetcher;
 			this.ignore_apps = new List<string> (ignore_apps);
 		}
@@ -70,11 +75,11 @@ namespace FSpot.Widgets {
 		public void Populate (object sender, EventArgs args)
 		{
 			Widget [] dead_pool = Children;
-			foreach (Widget t in dead_pool)
-				t.Destroy ();
+			for (int i = 0; i < dead_pool.Length; i++)
+				dead_pool [i].Destroy ();
 
 			foreach (AppInfo app in ApplicationsFor (type_fetcher ())) {
-				AppMenuItem i = new AppMenuItem (app, ShowIcons);
+				AppMenuItem i = new AppMenuItem (app, show_icons);
 				i.Activated += HandleItemActivated;
 				Append (i);
 			}
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/RatingEntry.cs b/src/Core/FSpot.Gui/FSpot.Widgets/RatingEntry.cs
index ef2977c..6fc6723 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/RatingEntry.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/RatingEntry.cs
@@ -27,6 +27,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+
 namespace FSpot.Widgets
 {
     public class RatingEntry : Hyena.Widgets.RatingEntry
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/RatingRenderer.cs b/src/Core/FSpot.Gui/FSpot.Widgets/RatingRenderer.cs
index d356f44..f47bb50 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/RatingRenderer.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/RatingRenderer.cs
@@ -27,19 +27,23 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using FSpot.Utils;
+using System;
 
 using Gdk;
+using Cairo;
 
 using Hyena.Gui;
 
+using FSpot.Utils;
+
+
 namespace FSpot.Widgets
 {
     public class RatingRenderer : Hyena.Gui.RatingRenderer
     {
-    	private const int REQUESTED_ICON_SIZE = 16;
+        private static int REQUESTED_ICON_SIZE = 16;
 
-    	#region Shared Pixbufs
+#region Shared Pixbufs
 
         // cache the unscaled pixbufs for all instances
         private static Pixbuf icon_rated;
@@ -179,7 +183,11 @@ namespace FSpot.Widgets
 
 #region Constructors / Destructor
 
-    	~RatingRenderer ()
+        public RatingRenderer ()
+        {
+        }
+
+        ~RatingRenderer ()
         {
             ResetCachedPixbufs ();
         }
@@ -188,7 +196,12 @@ namespace FSpot.Widgets
 
 #region Drawing Code
 
-    	public Pixbuf RenderPixbuf (bool showEmptyStars = false)
+        public Pixbuf RenderPixbuf ()
+        {
+            return RenderPixbuf (false);
+        }
+
+        public Pixbuf RenderPixbuf (bool showEmptyStars)
         {
             return RenderPixbuf (showEmptyStars, false, MinRating - 1, 0.0, 0.0, 1.0);
         }
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/SaneTreeView.cs b/src/Core/FSpot.Gui/FSpot.Widgets/SaneTreeView.cs
index c10f367..94e0092 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/SaneTreeView.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/SaneTreeView.cs
@@ -38,7 +38,6 @@
  */
 
 using System;
-
 using Gdk;
 using Gtk;
 
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/ScrolledView.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ScrolledView.cs
index de5598c..3f4a270 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/ScrolledView.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/ScrolledView.cs
@@ -28,10 +28,8 @@
 //
 
 using System;
-
-using FSpot.Utils;
-
 using Gtk;
+using FSpot.Utils;
 
 namespace FSpot.Widgets {
 	public class ScrolledView : Fixed {
@@ -41,8 +39,7 @@ namespace FSpot.Widgets {
 
 		public ScrolledView (IntPtr raw) : base (raw) {}
 
-		public ScrolledView ()
-		{
+		public ScrolledView () : base () {
 			ScrolledWindow = new ScrolledWindow  (null, null);
 			this.Put (ScrolledWindow, 0, 0);
 			ScrolledWindow.Show ();
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/SelectionCollection.cs b/src/Core/FSpot.Gui/FSpot.Widgets/SelectionCollection.cs
index b6edcb6..5973bba 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/SelectionCollection.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/SelectionCollection.cs
@@ -28,11 +28,10 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 using System;
+using System.Linq;
 using System.Collections;
 using System.Collections.Generic;
 
-using System.Linq;
-
 using FSpot.Core;
 
 namespace FSpot.Widgets
@@ -47,11 +46,11 @@ namespace FSpot.Widgets
 
 		public SelectionCollection (IBrowsableCollection collection)
 		{
-			selected_cells = new Dictionary<IPhoto, int> ();
-			parent = collection;
-			bit_array = new BitArray (this.parent.Count);
-			parent.Changed += HandleParentChanged;
-			parent.ItemsChanged += HandleParentItemsChanged;
+			this.selected_cells = new Dictionary<IPhoto, int> ();
+			this.parent = collection;
+			this.bit_array = new BitArray (this.parent.Count);
+			this.parent.Changed += HandleParentChanged;
+			this.parent.ItemsChanged += HandleParentItemsChanged;
 		}
 
 		private void HandleParentChanged (IBrowsableCollection collection)
@@ -67,16 +66,16 @@ namespace FSpot.Widgets
 				for (i = 0; i < local.Length; i++) {
 					int parent_index = parent.IndexOf (local [i]);
 					if (parent_index >= 0)
-						Add (parent_index, false);
+						this.Add (parent_index, false);
 				}
 			}
 
 			// Call the directly so that we don't reset old immediately this way the old selection
 			// set isn't actually lost until we change it.
-			if (Changed != null)
+			if (this.Changed != null)
 				Changed (this);
 
-			if (DetailedChanged != null)
+			if (this.DetailedChanged != null)
 				DetailedChanged (this, null);
 		}
 
@@ -87,16 +86,16 @@ namespace FSpot.Widgets
 
 		private void HandleParentItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args)
 		{
-			if (ItemsChanged == null)
+			if (this.ItemsChanged == null)
 				return;
 
 			List<int> local_ids = new List<int> ();
 			foreach (int parent_index in args.Items) {
 				// If the item isn't part of the selection ignore it
-				if (!Contains (collection [parent_index]))
+				if (!this.Contains (collection [parent_index]))
 					return;
 
-				int local_index = IndexOf (parent_index);
+				int local_index = this.IndexOf (parent_index);
 				if (local_index >= 0)
 					local_ids.Add (local_index);
 			}
@@ -122,7 +121,7 @@ namespace FSpot.Widgets
 
 		public IPhoto this [int index] {
 			get {
-				int [] ids = Ids;
+				int [] ids = this.Ids;
 				return parent [ids [index]];
 			}
 		}
@@ -132,7 +131,7 @@ namespace FSpot.Widgets
 				if (items != null)
 					return items;
 
-				int [] ids = Ids;
+				int [] ids = this.Ids;
 				items = new IPhoto [ids.Length];
 				for (int i = 0; i < items.Length; i++) {
 					items [i] = parent [ids [i]];
@@ -141,7 +140,12 @@ namespace FSpot.Widgets
 			}
 		}
 
-		public void Clear (bool update = true)
+		public void Clear ()
+		{
+			Clear (true);
+		}
+
+		public void Clear (bool update)
 		{
 			int [] ids = Ids;
 			selected_cells.Clear ();
@@ -152,11 +156,11 @@ namespace FSpot.Widgets
 
 		public void Add (IPhoto item)
 		{
-			if (Contains (item))
+			if (this.Contains (item))
 				return;
 
 			int index = parent.IndexOf (item);
-			Add (index);
+			this.Add (index);
 		}
 
 		public int Count {
@@ -175,15 +179,20 @@ namespace FSpot.Widgets
 			if (num < 0 || num >= parent.Count)
 				return false;
 
-			return Contains (parent [num]);
+			return this.Contains (parent [num]);
+		}
+
+		public void Add (int num)
+		{
+			this.Add (num, true);
 		}
 
-		public void Add (int num, bool notify = true)
+		public void Add (int num, bool notify)
 		{
 			if (num == -1)
 				return;
 
-			if (Contains (num))
+			if (this.Contains (num))
 				return;
 
 			IPhoto item = parent [num];
@@ -205,7 +214,7 @@ namespace FSpot.Widgets
 			int [] ids = new int [count];
 
 			for (int i = 0; i < count; i++) {
-				Add (current, false);
+				this.Add (current, false);
 				ids [i] = current;
 				current++;
 			}
@@ -213,15 +222,25 @@ namespace FSpot.Widgets
 			SignalChange (ids);
 		}
 
-		public void Remove (int cell, bool notify = true)
+		public void Remove (int cell, bool notify)
 		{
 			IPhoto item = parent [cell];
 			if (item != null)
-				Remove (item, notify);
+				this.Remove (item, notify);
 
 		}
 
-		private void Remove (IPhoto item, bool notify = true)
+		public void Remove (IPhoto item)
+		{
+			Remove (item, true);
+		}
+
+		public void Remove (int cell)
+		{
+			Remove (cell, true);
+		}
+
+		private void Remove (IPhoto item, bool notify)
 		{
 			if (item == null)
 				return;
@@ -246,7 +265,7 @@ namespace FSpot.Widgets
 			int [] ids = new int [count];
 
 			for (int i = 0; i < count; i++) {
-				Remove (current, false);
+				this.Remove (current, false);
 				ids [i] = current;
 				current++;
 			}
@@ -256,19 +275,19 @@ namespace FSpot.Widgets
 
 		public int IndexOf (int parent_index)
 		{
-			return System.Array.IndexOf (Ids, parent_index);
+			return System.Array.IndexOf (this.Ids, parent_index);
 		}
 
 		public int IndexOf (IPhoto item)
 		{
-			if (!Contains (item))
+			if (!this.Contains (item))
 				return -1;
 
 			int parent_index = (int)selected_cells [item];
 			return System.Array.IndexOf (Ids, parent_index);
 		}
 
-		public void ToggleCell (int cell_num, bool notify = true)
+		public void ToggleCell (int cell_num, bool notify)
 		{
 			if (Contains (cell_num))
 				Remove (cell_num, notify);
@@ -276,6 +295,11 @@ namespace FSpot.Widgets
 				Add (cell_num, notify);
 		}
 
+		public void ToggleCell (int cell_num)
+		{
+			ToggleCell (cell_num, true);
+		}
+
 		public void SelectionInvert ()
 		{
 			int [] changed_cell = new int[parent.Count];
@@ -302,7 +326,7 @@ namespace FSpot.Widgets
 		public void SignalChange (int [] ids)
 		{
 			ClearCached ();
-			old = Items;
+			old = this.Items;
 
 
 			if (Changed != null)
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/ToolTipWindow.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ToolTipWindow.cs
index ba5adc4..acd39f4 100644
--- a/src/Core/FSpot.Gui/FSpot.Widgets/ToolTipWindow.cs
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/ToolTipWindow.cs
@@ -28,6 +28,7 @@
 //
 
 using Gtk;
+using Gdk;
 
 namespace FSpot.Widgets
 {
diff --git a/src/Core/FSpot.JobScheduler/Banshee.Base/FSpotCompat.cs b/src/Core/FSpot.JobScheduler/Banshee.Base/FSpotCompat.cs
index 02fb93e..fa0b572 100644
--- a/src/Core/FSpot.JobScheduler/Banshee.Base/FSpotCompat.cs
+++ b/src/Core/FSpot.JobScheduler/Banshee.Base/FSpotCompat.cs
@@ -30,12 +30,10 @@
 namespace Banshee.Base
 {
 	public static class Globals
-	{
-		static Globals()
-		{
-			Debugging = false;
+	{	
+		static bool debugging = false;
+		public static bool Debugging {
+			get { return debugging; }
 		}
-
-		public static bool Debugging { get; private set; }
 	}
 }
diff --git a/src/Core/FSpot.JobScheduler/Banshee.Kernel/IInstanceCriticalJob.cs b/src/Core/FSpot.JobScheduler/Banshee.Kernel/IInstanceCriticalJob.cs
index 0cdf324..a99581a 100644
--- a/src/Core/FSpot.JobScheduler/Banshee.Kernel/IInstanceCriticalJob.cs
+++ b/src/Core/FSpot.JobScheduler/Banshee.Kernel/IInstanceCriticalJob.cs
@@ -55,6 +55,8 @@
  *  DEALINGS IN THE SOFTWARE.
  */
  
+using System;
+
 namespace Banshee.Kernel
 {
     public interface IInstanceCriticalJob : IJob
diff --git a/src/Core/FSpot.JobScheduler/Banshee.Kernel/IJob.cs b/src/Core/FSpot.JobScheduler/Banshee.Kernel/IJob.cs
index 21184f7..3855c93 100644
--- a/src/Core/FSpot.JobScheduler/Banshee.Kernel/IJob.cs
+++ b/src/Core/FSpot.JobScheduler/Banshee.Kernel/IJob.cs
@@ -55,6 +55,8 @@
  *  DEALINGS IN THE SOFTWARE.
  */
  
+using System;
+
 namespace Banshee.Kernel
 {
     public interface IJob
diff --git a/src/Core/FSpot.JobScheduler/Banshee.Kernel/IntervalHeap.cs b/src/Core/FSpot.JobScheduler/Banshee.Kernel/IntervalHeap.cs
index fba27f3..ff791fc 100644
--- a/src/Core/FSpot.JobScheduler/Banshee.Kernel/IntervalHeap.cs
+++ b/src/Core/FSpot.JobScheduler/Banshee.Kernel/IntervalHeap.cs
@@ -56,385 +56,384 @@
  */
  
 using System;
-// FIXME: Do we still need System.Collections?
 using System.Collections;
 using System.Collections.Generic;
 
 namespace Banshee.Kernel
 {
-	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;
-		}
+    public class IntervalHeap<T> : ICollection<T>, ICollection, IEnumerable<T>, IEnumerable
+    {
+        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;
+        }
 
-		public virtual void Push(T item, int priority)
-		{
-			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;
-			heap = new Interval[MIN_CAPACITY];
-		}
-		
-		void ICollection.CopyTo(Array array, int index)
-		{
-			if(array == null) {
-				throw new ArgumentNullException("array");
-			}
+        public virtual void Push(T item, int priority)
+        {
+            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;
+            heap = new Interval[MIN_CAPACITY];
+        }
+        
+        void ICollection.CopyTo(Array array, int index)
+        {
+            if(array == null) {
+                throw new ArgumentNullException("array");
+            }
 
-			if(index < 0) {
-				throw new ArgumentOutOfRangeException("index");
-			}
+            if(index < 0) {
+                throw new ArgumentOutOfRangeException("index");
+            }
 
-			Array.Copy(heap, 0, array, index, count);
-		}
-		
-		public virtual void CopyTo(T [] array, int index)
-		{
-			if(array == null) {
-				throw new ArgumentNullException("array");
-			}
+            Array.Copy(heap, 0, array, index, count);
+        }
+        
+        public virtual void CopyTo(T [] array, int index)
+        {
+            if(array == null) {
+                throw new ArgumentNullException("array");
+            }
 
-			if(index < 0) {
-				throw new ArgumentOutOfRangeException("index");
-			}
+            if(index < 0) {
+                throw new ArgumentOutOfRangeException("index");
+            }
 
-			Array.Copy(heap, 0, array, index, count);
-		}
+            Array.Copy(heap, 0, array, index, count);
+        }
 
-		public virtual bool Contains(T item)
-		{
-			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++) {
-				if(item.Equals(heap[i].Item)) {
-					return i;
-				}
-			}
-			
-			return -1;
-		}
-		
-		private static int GetLeftChildIndex(int index)
-		{
-			return index * 2 + 1;
-		}
-		
-		private static int GetParentIndex(int index)
-		{
-			return (index - 1) / 2;
-		}
-		
-		// grow array to nearest minimum power of two
-		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;
+        public virtual bool Contains(T item)
+        {
+            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++) {
+                if(item.Equals(heap[i].Item)) {
+                    return i;
+                }
+            }
+            
+            return -1;
+        }
+        
+        private static int GetLeftChildIndex(int index)
+        {
+            return index * 2 + 1;
+        }
+        
+        private static int GetParentIndex(int index)
+        {
+            return (index - 1) / 2;
+        }
+        
+        // grow array to nearest minimum power of two
+        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;
 
-			while(new_capacity < min_capacity) {
-				new_capacity <<= 1;
-			}
+            while(new_capacity < min_capacity) {
+                new_capacity <<= 1;
+            }
 
-			Array.Resize(ref array, new_capacity);
-		}
+            Array.Resize(ref array, new_capacity);
+        }
 
-		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 
-					&& 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);
-		}
+        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 
+                    && 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 { 
-				get { return priority; }
-			}
+        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 { 
+                get { return priority; }
+            }
 	
 	   public override int GetHashCode ()
 	   {
 		return priority.GetHashCode () ^ item.GetHashCode ();
 	   }
-		}
-		
-		private sealed 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 sealed 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;
-			}
+        }
+        
+        private sealed 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 sealed 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 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;
-				}
-			}
-		}
-	}
+            public T Current {
+                get {
+                    if(generation != heap.generation) {
+                        throw new InvalidOperationException();
+                    }
+                    
+                    return heap.heap[index].Item;
+                }
+            }
+        }
+    }
 }
  
diff --git a/src/Core/FSpot.JobScheduler/Banshee.Kernel/JobPriority.cs b/src/Core/FSpot.JobScheduler/Banshee.Kernel/JobPriority.cs
index 358fd4e..d9c309c 100644
--- a/src/Core/FSpot.JobScheduler/Banshee.Kernel/JobPriority.cs
+++ b/src/Core/FSpot.JobScheduler/Banshee.Kernel/JobPriority.cs
@@ -55,6 +55,8 @@
  *  DEALINGS IN THE SOFTWARE.
  */
  
+using System;
+
 namespace Banshee.Kernel
 {
     public enum JobPriority
diff --git a/src/Core/FSpot.JobScheduler/Banshee.Kernel/Scheduler.cs b/src/Core/FSpot.JobScheduler/Banshee.Kernel/Scheduler.cs
index e054fe9..575b9d2 100644
--- a/src/Core/FSpot.JobScheduler/Banshee.Kernel/Scheduler.cs
+++ b/src/Core/FSpot.JobScheduler/Banshee.Kernel/Scheduler.cs
@@ -54,11 +54,10 @@
  *  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.Threading;
-
+using System.Collections.Generic;
 using Hyena;
 
 namespace Banshee.Kernel
diff --git a/src/Core/FSpot.JobScheduler/FSpot.JobScheduler.csproj b/src/Core/FSpot.JobScheduler/FSpot.JobScheduler.csproj
index ecb8b07..3946736 100644
--- a/src/Core/FSpot.JobScheduler/FSpot.JobScheduler.csproj
+++ b/src/Core/FSpot.JobScheduler/FSpot.JobScheduler.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.JobScheduler</RootNamespace>
     <AssemblyName>FSpot.JobScheduler</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -84,21 +64,4 @@
   <ItemGroup>
     <Reference Include="System" />
   </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Core/FSpot.Platform/FSpot.Platform.csproj b/src/Core/FSpot.Platform/FSpot.Platform.csproj
index d3af7a7..59af707 100644
--- a/src/Core/FSpot.Platform/FSpot.Platform.csproj
+++ b/src/Core/FSpot.Platform/FSpot.Platform.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Platform</RootNamespace>
     <AssemblyName>FSpot.Platform</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -84,21 +64,4 @@
       <Name>Hyena</Name>
     </ProjectReference>
   </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Core/FSpot.Platform/FSpot.Platform/PreferenceBackend.cs b/src/Core/FSpot.Platform/FSpot.Platform/PreferenceBackend.cs
index d78e3c8..e420b93 100644
--- a/src/Core/FSpot.Platform/FSpot.Platform/PreferenceBackend.cs
+++ b/src/Core/FSpot.Platform/FSpot.Platform/PreferenceBackend.cs
@@ -30,6 +30,7 @@
 using System;
 using System.Runtime.Serialization;
 
+
 namespace FSpot
 {
 	public class NotifyEventArgs : System.EventArgs
@@ -50,7 +51,7 @@ namespace FSpot.Platform
 	[Serializable]
 	public class NoSuchKeyException : Exception
 	{
-		public NoSuchKeyException ()
+		public NoSuchKeyException () : base ()
 		{
 		}
 
@@ -82,6 +83,10 @@ namespace FSpot.Platform
 			}
 		}
 
+		public PreferenceBackend ()
+		{
+		}
+
 		public object Get (string key)
 		{
 			try {
diff --git a/src/Core/FSpot.Platform/FSpot.Platform/ScreenSaver.cs b/src/Core/FSpot.Platform/FSpot.Platform/ScreenSaver.cs
index 6ef6360..b4e6742 100644
--- a/src/Core/FSpot.Platform/FSpot.Platform/ScreenSaver.cs
+++ b/src/Core/FSpot.Platform/FSpot.Platform/ScreenSaver.cs
@@ -29,6 +29,7 @@
 //
 
 using System;
+using System.Runtime.InteropServices;
 
 using DBus;
 
diff --git a/src/Core/FSpot.Platform/FSpot.Platform/WebProxy.cs b/src/Core/FSpot.Platform/FSpot.Platform/WebProxy.cs
index 84e3791..0cec2d0 100644
--- a/src/Core/FSpot.Platform/FSpot.Platform/WebProxy.cs
+++ b/src/Core/FSpot.Platform/FSpot.Platform/WebProxy.cs
@@ -28,7 +28,6 @@
 //
 
 using System;
-
 using Hyena;
 
 namespace FSpot.Platform
diff --git a/src/Core/FSpot.Query/FSpot.Query.csproj b/src/Core/FSpot.Query/FSpot.Query.csproj
index e647766..735ee26 100644
--- a/src/Core/FSpot.Query/FSpot.Query.csproj
+++ b/src/Core/FSpot.Query/FSpot.Query.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Query</RootNamespace>
     <AssemblyName>FSpot.Query</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -93,21 +73,4 @@
     <Reference Include="System" />
     <Reference Include="nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77" />
   </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Core/FSpot.Query/FSpot.Query/DateRange.cs b/src/Core/FSpot.Query/FSpot.Query/DateRange.cs
index c3091d4..e77a501 100644
--- a/src/Core/FSpot.Query/FSpot.Query/DateRange.cs
+++ b/src/Core/FSpot.Query/FSpot.Query/DateRange.cs
@@ -28,7 +28,6 @@
 //
 
 using System;
-
 using Hyena;
 
 namespace FSpot.Query {
diff --git a/src/Core/FSpot.Query/FSpot.Query/FolderSet.cs b/src/Core/FSpot.Query/FSpot.Query/FolderSet.cs
index d41c5d2..5f1ac52 100644
--- a/src/Core/FSpot.Query/FSpot.Query/FolderSet.cs
+++ b/src/Core/FSpot.Query/FSpot.Query/FolderSet.cs
@@ -31,9 +31,9 @@
 
 using System;
 using System.Collections.Generic;
-
 using Hyena;
 
+
 namespace FSpot.Query
 {
 	public class FolderSet : IQueryCondition
diff --git a/src/Core/FSpot.Query/FSpot.Query/LogicalTerm.cs b/src/Core/FSpot.Query/FSpot.Query/LogicalTerm.cs
index 5c0f4d5..3c4e5d6 100644
--- a/src/Core/FSpot.Query/FSpot.Query/LogicalTerm.cs
+++ b/src/Core/FSpot.Query/FSpot.Query/LogicalTerm.cs
@@ -29,10 +29,8 @@
 
 using System;
 using System.Collections.Generic;
-using System.Linq;
-using FSpot.Core;
-
 using Hyena;
+using FSpot.Core;
 
 namespace FSpot.Query
 {
@@ -58,7 +56,8 @@ namespace FSpot.Query
 		internal static string SqlClause (params TagTerm [] tags)
 		{
 			List<string> list = new List<string> (tags.Length);
-			list.AddRange(tags.Select(tag => tag.Tag.Id.ToString()));
+			foreach (TagTerm tag in tags)
+				list.Add (tag.Tag.Id.ToString ());
 			return SqlClause (list.ToArray ());
 		}
 
@@ -68,8 +67,8 @@ namespace FSpot.Query
 				return null;
 			if (tagids.Length == 1)
 				return String.Format (" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0})) ", tagids[0]);
-
-			return String.Format (" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN ({0}))) ", String.Join (", ", tagids));
+			else
+				return String.Format (" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN ({0}))) ", String.Join (", ", tagids));
 		}
 
 		public void Dispose ()
@@ -87,7 +86,6 @@ namespace FSpot.Query
 		}
 	}
 
-	// FIXME: This is never used
 	public class TextTerm : LogicalTerm
 	{
 		public string Text { get; private set; }
@@ -103,7 +101,8 @@ namespace FSpot.Query
 		public static OrTerm SearchMultiple (string text, params string[] fields)
 		{
 			List<TextTerm> terms = new List<TextTerm> (fields.Length);
-			terms.AddRange(fields.Select(field => new TextTerm(text, field)));
+			foreach (string field in fields)
+				terms.Add (new TextTerm (text, field));
 			return new OrTerm (terms.ToArray ());
 		}
 
@@ -113,7 +112,6 @@ namespace FSpot.Query
 		}
 	}
 
-	// FIXME: This is never used
 	public class NotTerm : LogicalTerm
 	{
 		public LogicalTerm Term { get; private set; }
@@ -139,7 +137,8 @@ namespace FSpot.Query
 		protected string [] ToStringArray ()
 		{
 			List<string> ls = new List<string> (terms.Count);
-			ls.AddRange(terms.Select(term => term.SqlClause()));
+			foreach (LogicalTerm term in terms)
+				ls.Add (term.SqlClause ());
 			return ls.ToArray ();
 		}
 
@@ -147,9 +146,10 @@ namespace FSpot.Query
 		{
 			if (items.Length == 1)
 				return items [0];
-
-			return " (" + String.Join (String.Format (" {0} ", op), items) + ") ";
+			else
+				return " (" + String.Join (String.Format (" {0} ", op), items) + ") ";
 		}
+		
 	}
 
 	public class OrTerm : NAryOperator
@@ -184,7 +184,6 @@ namespace FSpot.Query
 		}
 	}
 
-	// FIXME: This is never used
 	public class AndTerm : NAryOperator
 	{
 		public AndTerm (params LogicalTerm[] terms)
diff --git a/src/Core/FSpot.Utils/FSpot.Utils.csproj b/src/Core/FSpot.Utils/FSpot.Utils.csproj
index 27eeb84..61196eb 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils.csproj
+++ b/src/Core/FSpot.Utils/FSpot.Utils.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Utils</RootNamespace>
     <AssemblyName>FSpot.Utils</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -100,7 +80,6 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Cairo" />
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
@@ -113,21 +92,4 @@
       <HintPath>..\..\..\lib\gio-sharp\gio\gio-sharp.dll</HintPath>
     </Reference>
   </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/Cache.cs b/src/Core/FSpot.Utils/FSpot.Utils/Cache.cs
index d6c4aac..15dc0a9 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/Cache.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/Cache.cs
@@ -29,9 +29,9 @@
 
 using System;
 using System.Collections.Generic;
-
 using Hyena;
 
+
 namespace FSpot.Utils
 {
 	public class Cache<TKey, TValue>
@@ -116,6 +116,10 @@ namespace FSpot.Utils
 
 	public class DisposableCache<TKey, TValue> : Cache<TKey, TValue>, IDisposable
 	{
+		public DisposableCache () : base ()
+		{
+		}
+
 		public DisposableCache (int max_count) : base (max_count)
 		{
 		}
@@ -159,6 +163,7 @@ namespace FSpot.Utils
 			}
 		}
 
+
 		public void Dispose ()
 		{
 			Clear ();
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/CairoUtils.cs b/src/Core/FSpot.Utils/FSpot.Utils/CairoUtils.cs
index d5d1085..607575a 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/CairoUtils.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/CairoUtils.cs
@@ -28,8 +28,8 @@
 //
 
 using System;
-
 using Cairo;
+using System.Runtime.InteropServices;
 
 namespace FSpot.Utils {
 	public class CairoUtils {
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/DelayedOperation.cs b/src/Core/FSpot.Utils/FSpot.Utils/DelayedOperation.cs
index 44296df..bff34ac 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/DelayedOperation.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/DelayedOperation.cs
@@ -65,7 +65,7 @@ namespace FSpot.Utils
         public void Start ()
         {
             lock (syncHandle) {
-                if (IsPending)
+                if (this.IsPending)
                     return;
                 
                 if (interval != 0)
@@ -88,13 +88,13 @@ namespace FSpot.Utils
 
         private void HandleDestroy (object sender, System.EventArgs args)
         {
-            Stop ();
+            this.Stop ();
         }
 
         public void Stop ()
         {
             lock (syncHandle) {
-                if (IsPending) {
+                if (this.IsPending) {
                     GLib.Source.Remove (source);
                     source = 0;
                 }
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/FileExtensions.cs b/src/Core/FSpot.Utils/FSpot.Utils/FileExtensions.cs
index f20114e..068a4dc 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/FileExtensions.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/FileExtensions.cs
@@ -29,13 +29,14 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.IO;
-
+using Mono.Unix;
 using GLib;
+using Hyena;
 
 namespace FSpot.Utils
 {
-	// FIXME: This class is never used
 	public static class FileExtensions
 	{
 		public static bool CopyRecursive (this GLib.File source, GLib.File target, GLib.FileCopyFlags flags, GLib.Cancellable cancellable, GLib.FileProgressCallback callback)
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/GIOTagLibFileAbstraction.cs b/src/Core/FSpot.Utils/FSpot.Utils/GIOTagLibFileAbstraction.cs
index 7c5d2ca..d477648 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/GIOTagLibFileAbstraction.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/GIOTagLibFileAbstraction.cs
@@ -29,9 +29,7 @@
 
 using System;
 using System.IO;
-
 using GLib;
-
 using Hyena;
 
 namespace FSpot.Utils
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/GdkUtils.cs b/src/Core/FSpot.Utils/FSpot.Utils/GdkUtils.cs
index 27bc11c..7804bac 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/GdkUtils.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/GdkUtils.cs
@@ -32,10 +32,8 @@
 //
 
 using System;
-using System.Runtime.InteropServices;
-
 using Gdk;
-
+using System.Runtime.InteropServices;
 using Hyena;
 
 namespace FSpot.Utils {
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/GtkUtil.cs b/src/Core/FSpot.Utils/FSpot.Utils/GtkUtil.cs
index 5b4f6b2..f1639b0 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/GtkUtil.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/GtkUtil.cs
@@ -53,25 +53,25 @@ namespace FSpot.Utils
 			if (e != null)
 				i.Activated += e;
 	
-					i.Sensitive = enabled;
+	                i.Sensitive = enabled;
 			
 			menu.Append (i);
 			i.Show ();
 	
-			return i;
+	        return i;
 		}
 		
 		public static Gtk.MenuItem MakeMenuItem (Gtk.Menu menu, string label, string image_name, EventHandler e, bool enabled)
 		{
 			Gtk.ImageMenuItem i = new Gtk.ImageMenuItem (label);
 			i.Activated += e;
-					i.Sensitive = enabled;
+	                i.Sensitive = enabled;
 			i.Image = Gtk.Image.NewFromIconName (image_name, Gtk.IconSize.Menu);
 			
 			menu.Append (i);
 			i.Show ();
 	
-				return i;
+		        return i;
 		}
 	
 		public static Gtk.MenuItem MakeCheckMenuItem (Gtk.Menu menu, string label, EventHandler e, bool enabled, bool active, bool as_radio)
@@ -81,12 +81,12 @@ namespace FSpot.Utils
 			i.DrawAsRadio = as_radio;
 			i.Active = active;
 
-			i.Activated += e;
+            i.Activated += e;
 	
 			menu.Append(i);
 			i.Show ();
 	
-			return i;
+	        return i;
 		}
 	
 		public static void MakeMenuSeparator (Gtk.Menu menu)
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/Metadata.cs b/src/Core/FSpot.Utils/FSpot.Utils/Metadata.cs
index 8d5516a..bf65a31 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/Metadata.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/Metadata.cs
@@ -27,13 +27,10 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
-using GLib;
-
 using Hyena;
-
 using TagLib;
+using System;
+using GLib;
 
 namespace FSpot.Utils
 {
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/PixbufUtils.cs b/src/Core/FSpot.Utils/FSpot.Utils/PixbufUtils.cs
index 4829076..6c4a195 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/PixbufUtils.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/PixbufUtils.cs
@@ -29,36 +29,35 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-// FIXME: What's the difference between having this one and the other in Clients?
-
 using Gdk;
-
+using System;
+using System.Runtime.InteropServices;
 using TagLib.Image;
 
 namespace FSpot.Utils
 {
 	public static class PixbufUtils
 	{
-		static public ImageOrientation Rotate270 (ImageOrientation orientation)
-		{
-			if (orientation == ImageOrientation.None) {
-				orientation = ImageOrientation.TopLeft;
-			}
+        static public ImageOrientation Rotate270 (ImageOrientation orientation)
+        {
+            if (orientation == ImageOrientation.None) {
+                orientation = ImageOrientation.TopLeft;
+            }
 
-			ImageOrientation [] rot = new ImageOrientation [] {
-				ImageOrientation.LeftBottom,
-					ImageOrientation.LeftTop,
-					ImageOrientation.RightTop,
-					ImageOrientation.RightBottom,
-					ImageOrientation.BottomLeft,
-					ImageOrientation.TopLeft,
-					ImageOrientation.TopRight,
-					ImageOrientation.BottomRight
-			};
+            ImageOrientation [] rot = new ImageOrientation [] {
+                ImageOrientation.LeftBottom,
+                    ImageOrientation.LeftTop,
+                    ImageOrientation.RightTop,
+                    ImageOrientation.RightBottom,
+                    ImageOrientation.BottomLeft,
+                    ImageOrientation.TopLeft,
+                    ImageOrientation.TopRight,
+                    ImageOrientation.BottomRight
+            };
 
-			orientation = rot [((int)orientation) -1];
-			return orientation;
-		}
+            orientation = rot [((int)orientation) -1];
+            return orientation;
+        }
 	
 		static public ImageOrientation Rotate90 (ImageOrientation orientation)
 		{
@@ -112,6 +111,8 @@ namespace FSpot.Utils
 				area.Width = args.Height;
 				area.Height = args.Width;
 				break;
+			default:
+				break;
 			}
 			
 			return area;
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/RecursiveFileEnumerator.cs b/src/Core/FSpot.Utils/FSpot.Utils/RecursiveFileEnumerator.cs
index 821b723..de02098 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/RecursiveFileEnumerator.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/RecursiveFileEnumerator.cs
@@ -29,10 +29,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-// FIXME: What's bring in System.Collections
+using System;
 using System.Collections;
 using System.Collections.Generic;
-
 using GLib;
 
 namespace FSpot.Utils
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/SafeUriExtensions.cs b/src/Core/FSpot.Utils/FSpot.Utils/SafeUriExtensions.cs
index 60a6dec..9eb73cc 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/SafeUriExtensions.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/SafeUriExtensions.cs
@@ -27,9 +27,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
 using Hyena;
+using System;
 
 namespace FSpot
 {
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/SidecarXmpExtensions.cs b/src/Core/FSpot.Utils/FSpot.Utils/SidecarXmpExtensions.cs
index 03ce611..81b2a3f 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/SidecarXmpExtensions.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/SidecarXmpExtensions.cs
@@ -31,76 +31,73 @@
 
 using System;
 using System.IO;
-
 using Hyena;
-
 using TagLib.Image;
 using TagLib.Xmp;
 
 namespace FSpot.Utils
 {
-	// FIXME: This class is never used
-	public static class SidecarXmpExtensions
-	{
-		/// <summary>
-		///    Parses the XMP file identified by resource and replaces the XMP
-		///    tag of file by the parsed data.
-		/// </summary>
-		public static bool ParseXmpSidecar (this TagLib.Image.File file, TagLib.File.IFileAbstraction resource)
-		{
-			string xmp;
+    public static class SidecarXmpExtensions
+    {
+        /// <summary>
+        ///    Parses the XMP file identified by resource and replaces the XMP
+        ///    tag of file by the parsed data.
+        /// </summary>
+        public static bool ParseXmpSidecar (this TagLib.Image.File file, TagLib.File.IFileAbstraction resource)
+        {
+            string xmp;
 
-			try {
-				using (var stream = resource.ReadStream) {
-					using (var reader = new StreamReader (stream)) {
-						xmp = reader.ReadToEnd ();
-					}
-				}
-			} catch (Exception e) {
-				Log.DebugFormat ("Sidecar cannot be read for file {0}", file.Name);
-				Log.DebugException (e);
-				return false;
-			}
+            try {
+                using (var stream = resource.ReadStream) {
+                    using (var reader = new StreamReader (stream)) {
+                        xmp = reader.ReadToEnd ();
+                    }
+                }
+            } catch (Exception e) {
+                Log.DebugFormat ("Sidecar cannot be read for file {0}", file.Name);
+                Log.DebugException (e);
+                return false;
+            }
 
-			XmpTag tag = null;
-			try {
-				tag = new XmpTag (xmp, file);
-			} catch (Exception e) {
-				Log.DebugFormat ("Metadata of Sidecar cannot be parsed for file {0}", file.Name);
-				Log.DebugException (e);
-				return false;
-			}
+            XmpTag tag = null;
+            try {
+                tag = new XmpTag (xmp, file);
+            } catch (Exception e) {
+                Log.DebugFormat ("Metadata of Sidecar cannot be parsed for file {0}", file.Name);
+                Log.DebugException (e);
+                return false;
+            }
 
-			var xmp_tag = file.GetTag (TagLib.TagTypes.XMP, true) as XmpTag;
-			xmp_tag.ReplaceFrom (tag);
-			return true;
-		}
+            var xmp_tag = file.GetTag (TagLib.TagTypes.XMP, true) as XmpTag;
+            xmp_tag.ReplaceFrom (tag);
+            return true;
+        }
 
-		public static bool SaveXmpSidecar (this TagLib.Image.File file, TagLib.File.IFileAbstraction resource)
-		{
-			var xmp_tag = file.GetTag (TagLib.TagTypes.XMP, false) as XmpTag;
-			if (xmp_tag == null) {
-				// TODO: Delete File
-				return true;
-			}
+        public static bool SaveXmpSidecar (this TagLib.Image.File file, TagLib.File.IFileAbstraction resource)
+        {
+            var xmp_tag = file.GetTag (TagLib.TagTypes.XMP, false) as XmpTag;
+            if (xmp_tag == null) {
+                // TODO: Delete File
+                return true;
+            }
 
-			var xmp = xmp_tag.Render ();
+            var xmp = xmp_tag.Render ();
 
-			try {
-				using (var stream = resource.WriteStream) {
-					stream.SetLength (0);
-					using (var writer = new StreamWriter (stream)) {
-						writer.Write (xmp);
-					}
-					resource.CloseStream (stream);
-				}
-			} catch (Exception e) {
-				Log.DebugFormat ("Sidecar cannot be saved: {0}", resource.Name);
-				Log.DebugException (e);
-				return false;
-			}
+            try {
+                using (var stream = resource.WriteStream) {
+                    stream.SetLength (0);
+                    using (var writer = new StreamWriter (stream)) {
+                        writer.Write (xmp);
+                    }
+                    resource.CloseStream (stream);
+                }
+            } catch (Exception e) {
+                Log.DebugFormat ("Sidecar cannot be saved: {0}", resource.Name);
+                Log.DebugException (e);
+                return false;
+            }
 
-			return true;
-		}
-	}
+            return true;
+        }
+    }
 }
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/TargetListExtensionMethods.cs b/src/Core/FSpot.Utils/FSpot.Utils/TargetListExtensionMethods.cs
index a0c131d..57a110d 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/TargetListExtensionMethods.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/TargetListExtensionMethods.cs
@@ -1,4 +1,5 @@
-// FIXME: Missing license file?
+using System;
+
 using Gtk;
 
 namespace FSpot.Utils
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/UriList.cs b/src/Core/FSpot.Utils/FSpot.Utils/UriList.cs
index 48662d3..3cfab05 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/UriList.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/UriList.cs
@@ -27,11 +27,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
 using System.Collections.Generic;
-using System.Linq;
 using System.Text;
-
+using System;
 using Hyena;
 
 namespace FSpot.Utils
@@ -84,9 +82,11 @@ namespace FSpot.Utils
         {
             StringBuilder list = new StringBuilder ();
             
-            foreach (SafeUri uri in this.TakeWhile(uri => uri != null))
-            {
-            	list.Append (uri + Environment.NewLine);
+            foreach (SafeUri uri in this) {
+                if (uri == null)
+                    break;
+                
+                list.Append (uri.ToString () + Environment.NewLine);
             }
             
             return list.ToString ();
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/UriUtils.cs b/src/Core/FSpot.Utils/FSpot.Utils/UriUtils.cs
index d9b71ab..a46b8bb 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/UriUtils.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/UriUtils.cs
@@ -29,6 +29,7 @@
 
 using System;
 using System.Text;
+using System.IO;
 
 namespace FSpot.Utils
 {
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/XdgThumbnailSpec.cs b/src/Core/FSpot.Utils/FSpot.Utils/XdgThumbnailSpec.cs
index e5f24fc..5e42794 100644
--- a/src/Core/FSpot.Utils/FSpot.Utils/XdgThumbnailSpec.cs
+++ b/src/Core/FSpot.Utils/FSpot.Utils/XdgThumbnailSpec.cs
@@ -27,10 +27,9 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
 using Gdk;
-
+using System;
+using System.Runtime.InteropServices;
 using Hyena;
 
 namespace FSpot.Utils
@@ -163,7 +162,11 @@ namespace FSpot.Utils
 
             var info = file.QueryInfo ("time::modified", GLib.FileQueryInfoFlags.None, null);
 
-            return pixbuf.GetOption (ThumbMTimeOpt) == info.GetAttributeULong ("time::modified").ToString ();
+            if (pixbuf.GetOption (ThumbMTimeOpt) != info.GetAttributeULong ("time::modified").ToString ()) {
+                return false;
+            }
+
+            return true;
         }
 #endregion
 
diff --git a/src/Extensions/Editors/FSpot.Editors.BW/FSpot.Addins.Editors/BWEditor.cs b/src/Extensions/Editors/FSpot.Editors.BW/FSpot.Addins.Editors/BWEditor.cs
index ddfe765..06a490b 100644
--- a/src/Extensions/Editors/FSpot.Editors.BW/FSpot.Addins.Editors/BWEditor.cs
+++ b/src/Extensions/Editors/FSpot.Editors.BW/FSpot.Addins.Editors/BWEditor.cs
@@ -28,16 +28,13 @@
 //
 
 using System;
-
+using FSpot;
 using FSpot.Editors;
-
-using Gdk;
 using Gtk;
-
-using Hyena;
-
-using Mono.Simd;
+using Gdk;
 using Mono.Unix;
+using Mono.Simd;
+using Hyena;
 
 namespace FSpot.Addins.Editors {
 	class BWEditor : Editor {
diff --git a/src/Extensions/Editors/FSpot.Editors.BW/FSpot.Editors.BW.csproj b/src/Extensions/Editors/FSpot.Editors.BW/FSpot.Editors.BW.csproj
index c59042b..75d4a48 100644
--- a/src/Extensions/Editors/FSpot.Editors.BW/FSpot.Editors.BW.csproj
+++ b/src/Extensions/Editors/FSpot.Editors.BW/FSpot.Editors.BW.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Addins.Editors</RootNamespace>
     <AssemblyName>FSpot.Editors.BWEditor</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -40,7 +22,6 @@
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -50,7 +31,6 @@
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -95,28 +75,13 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="Mono.Simd" />
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Addins.Editors\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs b/src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs
index b6910e2..89964ae 100644
--- a/src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs
+++ b/src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs
@@ -27,11 +27,10 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FSpot;
 using FSpot.Editors;
-
 using Gdk;
 using Gtk;
-
 using Mono.Unix;
 
 namespace FSpot.Addins.Editors {
diff --git a/src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Editors.Blackout.csproj b/src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Editors.Blackout.csproj
index 9e753ea..258802c 100644
--- a/src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Editors.Blackout.csproj
+++ b/src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Editors.Blackout.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Addins.Editors</RootNamespace>
     <AssemblyName>FSpot.Editors.BlackoutEditor</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -85,27 +65,12 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Addins.Editors\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Addins.Editors/FlipEditor.cs b/src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Addins.Editors/FlipEditor.cs
index ea910f6..1f5c64a 100644
--- a/src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Addins.Editors/FlipEditor.cs
+++ b/src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Addins.Editors/FlipEditor.cs
@@ -27,21 +27,20 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FSpot;
 using FSpot.Editors;
-
 using Gdk;
-
 using Mono.Unix;
 
 namespace FSpot.Addins.Editors {
-	class FlipEditor : Editor {
-		public FlipEditor () : base (Catalog.GetString ("Flip"), "object-flip-horizontal") {
+    class FlipEditor : Editor {
+        public FlipEditor () : base (Catalog.GetString ("Flip"), "object-flip-horizontal") {
 			CanHandleMultiple = true;
-		}
+        }
 
-		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
+        protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
 			Pixbuf output = (Pixbuf) input.Clone ();
 			return output.Flip (true);
-		}
-	}
+        }
+    }
 }
diff --git a/src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Editors.Flip.csproj b/src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Editors.Flip.csproj
index 9e0b9d1..2a77987 100644
--- a/src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Editors.Flip.csproj
+++ b/src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Editors.Flip.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Addins.Editors</RootNamespace>
     <AssemblyName>FSpot.Editors.FlipEditor</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -85,25 +65,11 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Addins.Editors\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs b/src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs
index e7e9f7a..62968f1 100644
--- a/src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs
+++ b/src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs
@@ -29,11 +29,10 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FSpot;
 using FSpot.Editors;
-
 using Gdk;
 using Gtk;
-
 using Mono.Unix;
 
 namespace FSpot.Addins.Editors {
diff --git a/src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Editors.Pixelate.csproj b/src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Editors.Pixelate.csproj
index 880813c..a048921 100644
--- a/src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Editors.Pixelate.csproj
+++ b/src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Editors.Pixelate.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Addins.Editors</RootNamespace>
     <AssemblyName>FSpot.Editors.PixelateEditor</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -85,27 +65,12 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Addins.Editors\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Addins.Editors/ResizeEditor.cs b/src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Addins.Editors/ResizeEditor.cs
index 4272213..b9d80fa 100644
--- a/src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Addins.Editors/ResizeEditor.cs
+++ b/src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Addins.Editors/ResizeEditor.cs
@@ -28,13 +28,11 @@
 //
 
 using System;
-
+using FSpot;
 using FSpot.Editors;
 using FSpot.Imaging;
-
-using Gdk;
 using Gtk;
-
+using Gdk;
 using Mono.Unix;
 
 namespace FSpot.Addins.Editors {
diff --git a/src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Editors.Resize.csproj b/src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Editors.Resize.csproj
index b4e43cd..c5fdfbf 100644
--- a/src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Editors.Resize.csproj
+++ b/src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Editors.Resize.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Addins.Editors</RootNamespace>
     <AssemblyName>FSpot.Editors.ResizeEditor</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -75,8 +55,6 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
@@ -92,20 +70,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Addins.Editors\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD.csproj b/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD.csproj
index ab6acc8..9450933 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD.csproj
+++ b/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Exporters.CDExport</RootNamespace>
     <AssemblyName>FSpot.Exporters.CDExport</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -81,7 +61,6 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
@@ -108,20 +87,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Exporters.CD\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/Brasero.cs b/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/Brasero.cs
index 1ae59af..d723bec 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/Brasero.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/Brasero.cs
@@ -27,9 +27,9 @@
 
 // Borrowed parts from banshee.
 // src/Backends/Banshee.Gnome/Banshee.GnomeBackend/Brasero.cs
-
-using System.Diagnostics;
+using System;
 using System.IO;
+using System.Diagnostics;
 
 using Hyena;
 
diff --git a/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs b/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs
index 3f1b3e2..871c743 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs
@@ -29,18 +29,24 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+using System.IO;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+using Mono.Unix;
+
+using FSpot;
 using FSpot.Core;
 using FSpot.Filters;
+using FSpot.Widgets;
+using Hyena;
 using FSpot.UI.Dialog;
 
 using GLib;
 using Gtk;
 using GtkBeans;
 
-using Hyena;
-
-using Mono.Unix;
-
 namespace FSpot.Exporters.CD {
 	public class CDExport : FSpot.Extensions.IExporter {
 		IBrowsableCollection selection;
@@ -158,7 +164,9 @@ namespace FSpot.Exporters.CD {
 				progress_dialog.ProgressText = Catalog.GetString ("Error Transferring");
 				return;
 			}
-			ThreadAssist.ProxyToMain (() => progress_dialog.Destroy ());
+			ThreadAssist.ProxyToMain (() => {
+				progress_dialog.Destroy ();
+			});
 		}
 
 		private void Progress (long current_num_bytes, long total_num_bytes)
diff --git a/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExportDialog.cs b/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExportDialog.cs
index dbc3de0..1e52b56 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExportDialog.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExportDialog.cs
@@ -30,12 +30,16 @@
 //
 
 using System;
+using System.IO;
 using System.Reflection;
-
+using System.Runtime.InteropServices;
+using Mono.Unix;
+using FSpot;
 using FSpot.Core;
-using FSpot.UI.Dialog;
+using FSpot.Filters;
 using FSpot.Widgets;
-
+using Hyena;
+using FSpot.UI.Dialog;
 using GLib;
 using Gtk;
 using GtkBeans;
@@ -46,7 +50,7 @@ namespace FSpot.Exporters.CD
 		Gtk.Window listwindow;
 		System.Uri dest;
 
-		[GtkBeans.Builder.Object] Button browse_button;
+      		[GtkBeans.Builder.Object] Button browse_button;
 		[GtkBeans.Builder.Object] ScrolledWindow thumb_scrolledwindow;
 		[GtkBeans.Builder.Object] CheckButton remove_check;
 		[GtkBeans.Builder.Object] Label size_label;
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook.csproj b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook.csproj
index 7e3db2d..f24af18 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook.csproj
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Exporters.Facebook</RootNamespace>
     <AssemblyName>FSpot.Exporters.Facebook</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -101,25 +81,10 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Exporters.Facebook\" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="System" />
     <Reference Include="Mono.Posix" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs
index e48d2a2..5ec17be 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs
@@ -31,33 +31,31 @@
 //
 
 using System;
+using System.IO;
+using System.Threading;
 using System.Collections;
 using System.Collections.Generic;
-using System.IO;
-
-using FSpot.Core;
-using FSpot.Extensions;
-using FSpot.Filters;
-using FSpot.UI.Dialog;
-
-using Gnome.Keyring;
+using Mono.Unix;
 using Gtk;
+using Gnome.Keyring;
 
+using FSpot.Core;
 using Hyena;
 using Hyena.Widgets;
+using FSpot.UI.Dialog;
+using FSpot.Extensions;
+using FSpot.Filters;
 
 using Mono.Facebook;
-using Mono.Unix;
 
 namespace FSpot.Exporters.Facebook
 {
 	internal class FacebookAccount
 	{
-		private const string keyring_item_name = "Facebook Account";
+		static string keyring_item_name = "Facebook Account";
 
-		private const string api_key = "c23d1683e87313fa046954ea253a240e";
+		static string api_key = "c23d1683e87313fa046954ea253a240e";
 
-		// FIXME:
 		/* INSECURE! According to:
 		 *
 		 * http://wiki.developers.facebook.com/index.php/Desktop_App_Auth_Process
@@ -65,22 +63,24 @@ namespace FSpot.Exporters.Facebook
 		 * We should *NOT* put our secret code here, but do an external
 		 * authorization using our own PHP page somewhere.
 		 */
-		private const string secret = "743e9a2e6a1c35ce961321bceea7b514";
+		static string secret = "743e9a2e6a1c35ce961321bceea7b514";
+
+		FacebookSession facebookSession;
+		bool connected = false;
 
 		public FacebookAccount ()
 		{
-			Authenticated = false;
 			SessionInfo info = ReadSessionInfo ();
 			if (info != null) {
-				Facebook = new FacebookSession (api_key, info);
+				facebookSession = new FacebookSession (api_key, info);
 				try {
 					/* This basically functions like a ping to ensure the
 					 * session is still valid:
 					 */
-					Facebook.HasAppPermission("offline_access");
-					Authenticated = true;
+					facebookSession.HasAppPermission("offline_access");
+					connected = true;
 				} catch (FacebookException) {
-					Authenticated = false;
+					connected = false;
 				}
 			}
 		}
@@ -89,22 +89,22 @@ namespace FSpot.Exporters.Facebook
 		{
 			FacebookSession session = new FacebookSession (api_key, secret);
 			Uri uri = session.CreateToken();
-			Facebook = session;
-			Authenticated = false;
+			facebookSession = session;
+			connected = false;
 			return uri;
 		}
 
 		public bool RevokePermission (string permission)
 		{
-			return Facebook.RevokeAppPermission(permission);
+			return facebookSession.RevokeAppPermission(permission);
 		}
 
 		public bool GrantPermission (string permission, Window parent)
 		{
-			if (Facebook.HasAppPermission(permission))
+			if (facebookSession.HasAppPermission(permission))
 				return true;
 
-			Uri uri = Facebook.GetGrantUri (permission);
+			Uri uri = facebookSession.GetGrantUri (permission);
 			GtkBeans.Global.ShowUri (parent.Screen, uri.ToString ());
 
 			HigMessageDialog mbox = new HigMessageDialog (parent, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
@@ -114,17 +114,23 @@ namespace FSpot.Exporters.Facebook
 			mbox.Run ();
 			mbox.Destroy ();
 
-			return Facebook.HasAppPermission(permission);
+			return facebookSession.HasAppPermission(permission);
 		}
 
 		public bool HasPermission(string permission)
 		{
-			return Facebook.HasAppPermission(permission);
+			return facebookSession.HasAppPermission(permission);
 		}
 
-		public FacebookSession Facebook { get; private set; }
+		public FacebookSession Facebook
+		{
+			get { return facebookSession; }
+		}
 
-		public bool Authenticated { get; private set; }
+		public bool Authenticated
+		{
+			get { return connected; }
+		}
 
 		bool SaveSessionInfo (SessionInfo info)
 		{
@@ -155,7 +161,6 @@ namespace FSpot.Exporters.Facebook
 		{
 			SessionInfo info = null;
 
-			// FIXME: Should probably convert this to a Dictionary
 			Hashtable request_attributes = new Hashtable ();
 			//Dictionary<string, string> request_attributes = new Dictionary<string, string> ();
 			request_attributes["name"] = keyring_item_name;
@@ -209,28 +214,28 @@ namespace FSpot.Exporters.Facebook
 
 		public bool Authenticate ()
 		{
-			if (Authenticated)
+			if (connected)
 				return true;
 			try {
-				SessionInfo info = Facebook.GetSession();
-				Authenticated = true;
+				SessionInfo info = facebookSession.GetSession();
+				connected = true;
 				if (SaveSessionInfo (info))
 					Log.Information ("Saved session information to keyring");
 				else
 					Log.Warning ("Could not save session information to keyring");
 			} catch (KeyringException e) {
-				Authenticated = false;
+				connected = false;
 				Log.DebugException (e);
 			} catch (FacebookException fe) {
-				Authenticated = false;
+				connected = false;
 				Log.DebugException (fe);
 			}
-			return Authenticated;
+			return connected;
 		}
 
 		public void Deauthenticate ()
 		{
-			Authenticated = false;
+			connected = false;
 			ForgetSessionInfo ();
 		}
 	}
@@ -276,6 +281,10 @@ namespace FSpot.Exporters.Facebook
 		System.Threading.Thread command_thread;
 		Album album = null;
 
+		public FacebookExport ()
+		{
+		}
+
 		public void Run (IBrowsableCollection selection)
 		{
 
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs
index dff1315..9d0a630 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs
@@ -28,21 +28,21 @@
 //
 
 using System;
+using System.Reflection;
 using System.Collections;
 using System.Collections.Generic;
-using System.Reflection;
 using System.Threading;
 
-using FSpot.Core;
-using FSpot.UI.Dialog;
-using FSpot.Utils;
-using FSpot.Widgets;
-
 using Gtk;
 using GtkBeans;
 
 using Hyena;
 using Hyena.Widgets;
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Widgets;
+using FSpot.Platform;
+using FSpot.UI.Dialog;
 
 using Mono.Facebook;
 using Mono.Unix;
@@ -83,7 +83,7 @@ namespace FSpot.Exporters.Facebook
 		private class DateComparer : IComparer
 		{
 			public int Compare (object left,
-								object right)
+			                    object right)
 			{
 				return DateTime.Compare ((left as IPhoto).Time,
 					(right as IPhoto).Time);
@@ -93,19 +93,19 @@ namespace FSpot.Exporters.Facebook
 		public FacebookExportDialog (IBrowsableCollection selection) : base (Assembly.GetExecutingAssembly (), "FacebookExport.ui", "facebook_export_dialog")
 		{
 			// Sort selection by date ascending
-			Items = selection.Items;
-			Array.Sort (Items, new DateComparer ());
+			items = selection.Items;
+			Array.Sort (items, new DateComparer ());
 			current_item = -1;
 
-			Captions = new string [selection.Items.Length];
+			captions = new string [selection.Items.Length];
 			tags = new List<Mono.Facebook.Tag> [selection.Items.Length];
 
 			tray_view = new SelectionCollectionGridView (selection) {
-				MaxColumns = 1,
-				DisplayDates = false,
-				DisplayTags = false,
-				DisplayRatings = false
-			};
+                MaxColumns = 1,
+                DisplayDates = false,
+                DisplayTags = false,
+                DisplayRatings = false
+            };
 			tray_view.ButtonPressEvent += HandleThumbnailIconViewButtonPressEvent;
 			tray_view.KeyPressEvent += delegate (object sender, KeyPressEventArgs e) {(sender as SelectionCollectionGridView).Selection.Clear(); };
 			thumbnails_scrolled_window.Add (tray_view);
@@ -132,18 +132,27 @@ namespace FSpot.Exporters.Facebook
 
 			DoLogout ();
 
-			Account = new FacebookAccount();
-			if (Account.Authenticated)
+			account = new FacebookAccount();
+			if (account.Authenticated)
 				DoLogin ();
 		}
 
-		public FacebookAccount Account { get; private set; }
+		FacebookAccount account;
+		public FacebookAccount Account {
+			get { return account; }
+		}
 
-		public string[] Captions { get; private set; }
+		string[] captions;
+		public string [] Captions {
+			get {return captions; } 
+		}
 
 		List<Mono.Facebook.Tag>[] tags;
 		int current_item;
-		public IPhoto[] Items { get; private set; }
+		IPhoto[] items;
+		public IPhoto[] Items {
+			get {return items; }
+		}
 
 		public bool CreateAlbum {
 			get { return create_album_radiobutton.Active; }
@@ -172,7 +181,7 @@ namespace FSpot.Exporters.Facebook
 				return;
 			
 			// Store the caption
-			Captions [current_item] = caption_textview.Buffer.Text;
+			captions [current_item] = caption_textview.Buffer.Text;
 		}
 
 		void HandleThumbnailIconViewButtonPressEvent (object sender, Gtk.ButtonPressEventArgs args)
@@ -183,20 +192,20 @@ namespace FSpot.Exporters.Facebook
 			int old_item = current_item;
 			current_item = tray_view.CellAtPosition ((int) args.Event.X, (int) args.Event.Y);
 
-			if (current_item < 0 || current_item >=  Items.Length) {
+			if (current_item < 0 || current_item >=  items.Length) {
 				current_item = old_item;
 				return;
 			}
 
-			string caption = Captions [current_item];
+			string caption = captions [current_item];
 			if (caption == null)
-				Captions [current_item] = caption = "";
+				captions [current_item] = caption = "";
 			caption_textview.Buffer.Text = caption;
 			caption_textview.Sensitive = true;
 
-			tag_treeview.Model = new TagStore (Account.Facebook, tags [current_item], friends);
+			tag_treeview.Model = new TagStore (account.Facebook, tags [current_item], friends);
 
-			IPhoto item = Items [current_item];
+			IPhoto item = items [current_item];
 
 			if (tag_image_eventbox.Children.Length > 0) {
 				tag_image_eventbox.Remove (tag_image);
@@ -214,8 +223,8 @@ namespace FSpot.Exporters.Facebook
 
 		public void HandleLoginClicked (object sender, EventArgs args)
 		{
-			if (!Account.Authenticated) {
-				Uri uri = Account.GetLoginUri ();
+			if (!account.Authenticated) {
+				Uri uri = account.GetLoginUri ();
 				GtkBeans.Global.ShowUri (Screen, uri.ToString ());
 
 				HigMessageDialog mbox = new HigMessageDialog (this, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
@@ -226,14 +235,14 @@ namespace FSpot.Exporters.Facebook
 				mbox.Destroy ();
 
 				LoginProgress (0.0, Catalog.GetString ("Authenticating..."));
-				Account.Authenticate ();
+				account.Authenticate ();
 			}
 			DoLogin ();
 		}
 
 		void DoLogin ()
 		{
-			if (!Account.Authenticated) {
+			if (!account.Authenticated) {
 				HigMessageDialog error = new HigMessageDialog (this, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
 						Gtk.MessageType.Error, Gtk.ButtonsType.Ok, Catalog.GetString ("Error logging into Facebook"),
 						Catalog.GetString ("There was a problem logging into Facebook.  Check your credentials and try again."));
@@ -248,8 +257,8 @@ namespace FSpot.Exporters.Facebook
 				LoginProgress (0.0, Catalog.GetString ("Authorizing Session"));
 				ThreadPool.QueueUserWorkItem (delegate {	
 					try {
-						bool perm_offline = Account.HasPermission("offline_access");
-						bool perm_upload = photo_perm_check.Active = Account.HasPermission("photo_upload");
+						bool perm_offline = account.HasPermission("offline_access");
+						bool perm_upload = photo_perm_check.Active = account.HasPermission("photo_upload");
 
 						ThreadAssist.ProxyToMain (() => {
 							offline_perm_check.Active = perm_offline;
@@ -257,13 +266,13 @@ namespace FSpot.Exporters.Facebook
 							LoginProgress (0.2, Catalog.GetString ("Session established, fetching user info..."));
 						});
 	
-						User me = Account.Facebook.GetLoggedInUser ().GetUserInfo ();
+						User me = account.Facebook.GetLoggedInUser ().GetUserInfo ();
 	
 						ThreadAssist.ProxyToMain (() => {
 							LoginProgress (0.4, Catalog.GetString ("Session established, fetching friend list..."));
 						});
 
-						Friend[] friend_list = Account.Facebook.GetFriends ();
+						Friend[] friend_list = account.Facebook.GetFriends ();
 						long[] uids = new long [friend_list.Length];
 	
 						for (int i = 0; i < friend_list.Length; i++)
@@ -274,7 +283,7 @@ namespace FSpot.Exporters.Facebook
 						});
 
 						if (uids.Length > 0) {
-							User[] infos = Account.Facebook.GetUserInfo (uids, new string[] { "first_name", "last_name" });
+							User[] infos = account.Facebook.GetUserInfo (uids, new string[] { "first_name", "last_name" });
 							friends = new Dictionary<long, User> ();
 
 							foreach (User user in infos)
@@ -284,7 +293,7 @@ namespace FSpot.Exporters.Facebook
 						ThreadAssist.ProxyToMain (() => {
 							LoginProgress (0.8, Catalog.GetString ("Session established, fetching photo albums..."));
 						});
-						Album[] albums = Account.Facebook.GetAlbums ();
+						Album[] albums = account.Facebook.GetAlbums ();
 						ThreadAssist.ProxyToMain (() => {
 							album_info_vbox.Sensitive = true;
 							picture_info_vbox.Sensitive = true;
@@ -307,7 +316,7 @@ namespace FSpot.Exporters.Facebook
 							error.Destroy ();
 						});
 	
-						Account.Deauthenticate ();
+						account.Deauthenticate ();
 						DoLogout ();
 					} finally {
 						ThreadAssist.ProxyToMain (() => {
@@ -321,7 +330,7 @@ namespace FSpot.Exporters.Facebook
 
 		void HandleLogoutClicked (object sender, EventArgs args)
 		{
-			Account.Deauthenticate ();
+			account.Deauthenticate ();
 			DoLogout ();
 		}
 
@@ -357,21 +366,21 @@ namespace FSpot.Exporters.Facebook
 			}
 			CheckButton origin = (CheckButton)sender;
 			bool desired = origin.Active;
-			bool actual = Account.HasPermission (permission);
+			bool actual = account.HasPermission (permission);
 			if (desired != actual) {
 				if (desired) {
 					Log.DebugFormat ("Granting {0}", permission);
-					Account.GrantPermission (permission, this);
+					account.GrantPermission (permission, this);
 				} else {
 					Log.DebugFormat ("Revoking {0}", permission);
-					Account.RevokePermission (permission);
+					account.RevokePermission (permission);
 				}
 				/* Double-check that things work... */
-				actual = Account.HasPermission (permission);
+				actual = account.HasPermission (permission);
 				if (actual != desired) {
 					Log.Warning("Failed to alter permissions");
 				}
-				origin.Active = Account.HasPermission (permission);
+				origin.Active = account.HasPermission (permission);
 			}
 		}
 
@@ -435,16 +444,21 @@ namespace FSpot.Exporters.Facebook
 
 	internal class AlbumStore : ListStore
 	{
+		private Album[] _albums;
+
 		public AlbumStore (Album[] albums) : base (typeof (string))
 		{
-			Albums = albums;
+			_albums = albums;
 
 			foreach (Album album in Albums) {
 				AppendValues (album.name);
 			}
 		}
 
-		public Album[] Albums { get; private set; }
+		public Album[] Albums
+		{
+			get { return _albums; }
+		}
 	}
 
 }
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookTagPopup.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookTagPopup.cs
index 34ae081..313d8c2 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookTagPopup.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookTagPopup.cs
@@ -27,22 +27,26 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System.Collections.Generic;
 using System.Reflection;
-
+using System.Collections.Generic;
 using FSpot.Widgets;
-
 using Mono.Facebook;
 
 namespace FSpot.Exporters.Facebook
 {	
 	internal class FacebookTagPopup : BuilderWindow
 	{
+		Dictionary<long, User> _friends;
+
 		public FacebookTagPopup (Dictionary<long, User> friends) : base (Assembly.GetExecutingAssembly (), "FacebookExport.ui", "facebook_tag_popup")
 		{
 			Friends = friends;
 		}
 
-		public Dictionary<long, User> Friends { get; set; }
+		public Dictionary<long, User> Friends
+		{
+			get { return _friends; }
+			set { _friends = value; }
+		}
 	}
 }
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/FindNullableClashes.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FindNullableClashes.cs
index a8e6d7f..4f6ea90 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/FindNullableClashes.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FindNullableClashes.cs
@@ -31,7 +31,6 @@
 
 using System;
 using System.Reflection;
-
 using Hyena;
 
 public class FindNullableClashes {
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Album.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Album.cs
index 7cad8f2..9c27846 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Album.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Album.cs
@@ -26,19 +26,20 @@
 // 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.Collections.Generic;
+using System.IO;
 using System.Xml.Serialization;
-
+using System.Text;
+using System.Net;
 using Mono.Facebook.Schemas;
 
 namespace Mono.Facebook
 {
-	[System.Xml.Serialization.XmlRootAttribute("photos_createAlbum_response", Namespace="http://api.facebook.com/1.0/";)]
+    [System.Xml.Serialization.XmlRootAttribute("photos_createAlbum_response", Namespace="http://api.facebook.com/1.0/";)]
 	public class Album : album, SessionWrapper
 	{
-		[XmlIgnore]
+        [XmlIgnore]
 		public FacebookSession Session { get; set; }
 
 		public Photo[] GetPhotos ()
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Error.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Error.cs
index 67bdae4..191a0fe 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Error.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Error.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.Xml.Serialization;
 
 namespace Mono.Facebook
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Event.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Event.cs
index 4da70c1..2ff027a 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Event.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Event.cs
@@ -22,10 +22,11 @@
 // 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.IO;
 using System.Xml.Serialization;
-
+using System.Text;
 using Mono.Facebook.Schemas;
 
 namespace Mono.Facebook
@@ -40,7 +41,7 @@ namespace Mono.Facebook
 
 	public class Event : @event, SessionWrapper
 	{
-		[XmlIgnore]
+        [XmlIgnore]
 		public FacebookSession Session { get; set; }
 
 		[XmlIgnore ()]
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookException.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookException.cs
index 18b4f06..ffcf8cf 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookException.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookException.cs
@@ -26,20 +26,26 @@
 // 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;
 
 public class FacebookException : Exception
 {
-	public int ErrorCode { get; private set; }
+	private int error_code;
+	private string error_message;
+
+	public int ErrorCode {
+		get { return error_code; }
+	}
 
-	public string ErrorMessage { get; private set; }
+	public string ErrorMessage {
+		get { return error_message; }
+	}
 
 	public FacebookException (int error_code, string error_message)
 		: base (CreateMessage (error_code, error_message))
 	{
-		ErrorCode = error_code;
-		ErrorMessage = error_message;
+		this.error_code = error_code;
+		this.error_message = error_message;
 	}
 
 	private static string CreateMessage (int error_code, string error_message)
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookParam.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookParam.cs
index b6113a6..11aaaf7 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookParam.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookParam.cs
@@ -27,7 +27,6 @@
 // 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;
 
@@ -35,22 +34,25 @@ namespace Mono.Facebook
 {
 	public class FacebookParam : IComparable
 	{
+		private string name;
 		private object value;
 
-		public string Name { get; private set; }
+		public string Name {
+			get{ return name; }
+		}
 
 		public string Value {
-			get
-			{
+			get {
 				if (value is Array)
 					return ConvertArrayToString (value as Array);
-				return value.ToString ();
+				else
+					return value.ToString ();
 			}
 		}
 
 		protected FacebookParam (string name, object value)
 		{
-			Name = name;
+			this.name = name;
 			this.value = value;
 		}
 
@@ -69,7 +71,7 @@ namespace Mono.Facebook
 			if (!(obj is FacebookParam))
 				return -1;
 
-			return Name.CompareTo ((obj as FacebookParam).Name);
+			return this.name.CompareTo ((obj as FacebookParam).name);
 		}
 
 		private static string ConvertArrayToString (Array a)
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookSession.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookSession.cs
index d266cbf..43377dd 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookSession.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookSession.cs
@@ -27,11 +27,14 @@
 // 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;
+using System.Text;
+using System.IO;
+using System.Net;
 using System.Linq;
-using System.Xml;
+using Mono.Facebook.Schemas;
 
 namespace Mono.Facebook
 {
@@ -138,10 +141,10 @@ namespace Mono.Facebook
 			param_list.Add (FacebookParam.Create ("call_id", DateTime.Now.Ticks));
 			param_list.Add (FacebookParam.Create ("name", name));
 
-			if (!string.IsNullOrEmpty(description))
+			if (description != null && description != string.Empty)
 				param_list.Add (FacebookParam.Create ("description", description));
 
-			if (!string.IsNullOrEmpty(location))
+			if (location != null && location != string.Empty)
 				param_list.Add (FacebookParam.Create ("location", location));
 
 			// create the albums
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Friend.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Friend.cs
index cbc13c3..de26293 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Friend.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Friend.cs
@@ -24,13 +24,18 @@
 // 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.IO;
+using System.Xml.Serialization;
+using System.Text;
 
 namespace Mono.Facebook
 {
 	public class Friend : SessionWrapper
 	{
 		public FacebookSession Session { get; set; }
-		public long UId { get; set; }
+        public long UId { get; set; }
 
 		public Friend (long UId, FacebookSession session)
 		{
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FriendInfo.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FriendInfo.cs
index 093237d..c64e33a 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FriendInfo.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FriendInfo.cs
@@ -24,7 +24,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.Serialization;
 
 namespace Mono.Facebook
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Group.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Group.cs
index 5f3f907..719fd83 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Group.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Group.cs
@@ -26,7 +26,6 @@
 // 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.Serialization;
 using Mono.Facebook.Schemas;
@@ -35,7 +34,7 @@ namespace Mono.Facebook
 {
 	public class Group : group, SessionWrapper
 	{
-		[XmlIgnore]
+        [XmlIgnore]
 		public FacebookSession Session { get; set; }
 
 		[XmlIgnore ()]
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Location.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Location.cs
index 18af52f..feb6221 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Location.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Location.cs
@@ -23,7 +23,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.Serialization;
 
 namespace Mono.Facebook
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Notification.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Notification.cs
index 4daf7c0..3792ebc 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Notification.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Notification.cs
@@ -23,8 +23,10 @@
 // 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.Serialization;
+using System.Text;
 
 namespace Mono.Facebook
 {
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/PeopleList.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/PeopleList.cs
index 49774a5..6278330 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/PeopleList.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/PeopleList.cs
@@ -23,8 +23,9 @@
 // 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.Serialization;
+using System.Collections;
 
 namespace Mono.Facebook
 {
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Photo.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Photo.cs
index 8800eeb..3ddbcdf 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Photo.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Photo.cs
@@ -26,19 +26,18 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 using System.Xml.Serialization;
-
 using Mono.Facebook.Schemas;
 
 namespace Mono.Facebook
 {
-	[System.Xml.Serialization.XmlRootAttribute("photos_upload_response", Namespace="http://api.facebook.com/1.0/";)]
+    [System.Xml.Serialization.XmlRootAttribute("photos_upload_response", Namespace="http://api.facebook.com/1.0/";)]
 	public class Photo : photo, SessionWrapper
 	{
-		[XmlIgnore]
+        [XmlIgnore]
 		public FacebookSession Session { get; set; }
 
-		[XmlIgnore]
-		public string PId { get { return pid; } }
+        [XmlIgnore]
+        public string PId { get { return pid; } }
 
 		public Tag[] GetTags ()
 		{
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Responses.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Responses.cs
index eab2ee4..105e737 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Responses.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Responses.cs
@@ -26,14 +26,16 @@
 // 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.Serialization;
+using Mono.Facebook.Schemas;
 
 namespace Mono.Facebook
 {
 	[XmlRoot ("photos_getAlbums_response", Namespace = "http://api.facebook.com/1.0/";, IsNullable = false)]
 	public class AlbumsResponse
 	{
-		[XmlElement ("album")]
+        [XmlElement ("album")]
 		public Album[] album;
 
 		[XmlIgnore ()]
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionInfo.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionInfo.cs
index 2a2d5a9..f385ef3 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionInfo.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionInfo.cs
@@ -25,16 +25,16 @@
 // 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.Serialization;
-
 using Mono.Facebook.Schemas;
 
 namespace Mono.Facebook
 {
-	[System.Xml.Serialization.XmlRootAttribute("auth_getSession_response", Namespace="http://api.facebook.com/1.0/";, IsNullable=false)]
+    [System.Xml.Serialization.XmlRootAttribute("auth_getSession_response", Namespace="http://api.facebook.com/1.0/";, IsNullable=false)]
 	public class SessionInfo : session_info
 	{
-			[XmlIgnore]
+		[XmlIgnore]
 			public bool IsInfinite
 			{
 				get { return expires == 0; }
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionWrapper.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionWrapper.cs
index bd984b8..5874380 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionWrapper.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionWrapper.cs
@@ -26,6 +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.Xml.Serialization;
 
 namespace Mono.Facebook
 {
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Tag.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Tag.cs
index 35059f5..4d7393e 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Tag.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Tag.cs
@@ -27,19 +27,18 @@
 //
 
 using System.Xml.Serialization;
-
 using Mono.Facebook.Schemas;
 
 namespace Mono.Facebook
 {
 	public class Tag : photo_tag, SessionWrapper
 	{
-		[XmlIgnore]
+        [XmlIgnore]
 		public FacebookSession Session { get; set; }
-		
-		[XmlIgnore]
-		public long Subject { get { return subject; } }
-		
+        
+        [XmlIgnore]
+        public long Subject { get { return subject; } }
+        
 		public Photo GetPhoto ()
 		{
 			PhotosResponse rsp = Session.Util.GetResponse<PhotosResponse> ("facebook.photos.get", FacebookParam.Create ("pids", pid),
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/User.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/User.cs
index 06a04eb..3d1ca17 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/User.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/User.cs
@@ -29,7 +29,6 @@
 //
 using System;
 using System.Xml.Serialization;
-
 using Mono.Facebook.Schemas;
 
 namespace Mono.Facebook
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Util.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Util.cs
index d525d52..b71cb0a 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Util.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Util.cs
@@ -26,7 +26,6 @@
 // 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.IO;
@@ -44,9 +43,12 @@ namespace Mono.Facebook
 		private const string BOUNDARY = "SoMeTeXtWeWiLlNeVeRsEe";
 		private const string LINE = "\r\n";
 
-		private static readonly Dictionary<int, XmlSerializer> serializer_dict = new Dictionary<int, XmlSerializer>();
+		private static Dictionary<int, XmlSerializer> serializer_dict = new Dictionary<int, XmlSerializer>();
 
-		private readonly FacebookParam VersionParam = FacebookParam.Create ("v", "1.0");
+		private FacebookParam VersionParam = FacebookParam.Create ("v", "1.0");
+		private string api_key;
+		private string secret;
+		private bool use_json;
 
 		private static XmlSerializer ErrorSerializer {
 			get {
@@ -56,15 +58,26 @@ namespace Mono.Facebook
 
 		public Util (string api_key, string secret)
 		{
-			ApiKey = api_key;
-			SharedSecret = secret;
+			this.api_key = api_key;
+			this.secret = secret;
 		}
 
-		public bool UseJson { get; set; }
+		public bool UseJson
+		{
+			get { return use_json; }
+			set { use_json = value; }
+		}
 
-		internal string SharedSecret { get; set; }
+		internal string SharedSecret
+		{
+			get { return secret; }
+			set { secret = value; }
+		}
 
-		internal string ApiKey { get; private set; }
+		internal string ApiKey
+		{
+			get { return api_key; }
+		}
 
 		public T GetResponse<T>(string method_name, params FacebookParam[] parameters)
 		{
@@ -238,7 +251,7 @@ namespace Mono.Facebook
 		{
 			List<FacebookParam> list = new List<FacebookParam> (parameters);
 			list.Add (FacebookParam.Create ("method", method_name));
-			list.Add (FacebookParam.Create ("api_key", ApiKey));
+			list.Add (FacebookParam.Create ("api_key", api_key));
 			list.Add (VersionParam);
 			list.Sort ();
 
@@ -247,7 +260,7 @@ namespace Mono.Facebook
 			foreach (FacebookParam param in list)
 				values.Append (param.ToString ());
 
-			values.Append (SharedSecret);
+			values.Append (secret);
 
 			byte[] md5_result = MD5.Create ().ComputeHash (Encoding.ASCII.GetBytes (values.ToString ()));
 
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr.csproj b/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr.csproj
index 2ff4d80..dc81d61 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr.csproj
+++ b/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Exporters.Flickr</RootNamespace>
     <AssemblyName>FSpot.Exporters.Flickr</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -79,8 +59,6 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
@@ -115,20 +93,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Exporters.Flickr\" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs b/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs
index 7e3bcc5..3a738bc 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs
@@ -30,23 +30,24 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using FlickrNet;
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.IO;
 using System.Threading;
+using Mono.Unix;
 
+using FSpot;
 using FSpot.Core;
 using FSpot.Filters;
-using FSpot.UI.Dialog;
 using FSpot.Widgets;
-
-using GtkBeans;
-
+using FSpot.Utils;
+using FSpot.UI.Dialog;
 using Hyena;
 using Hyena.Widgets;
 
-using Mono.Unix;
+using GtkBeans;
 
 namespace FSpot.Exporters.Flickr {
 	public class TwentyThreeHQExport : FlickrExport
@@ -263,10 +264,10 @@ namespace FSpot.Exporters.Flickr {
 			} catch (Exception e) {
 				HigMessageDialog md =
 					new HigMessageDialog (Dialog,
-								  Gtk.DialogFlags.Modal |
-								  Gtk.DialogFlags.DestroyWithParent,
-								  Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-								  Catalog.GetString ("Unable to log on"), e.Message);
+							      Gtk.DialogFlags.Modal |
+							      Gtk.DialogFlags.DestroyWithParent,
+							      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+							      Catalog.GetString ("Unable to log on"), e.Message);
 
 				md.Run ();
 				md.Destroy ();
@@ -287,8 +288,22 @@ namespace FSpot.Exporters.Flickr {
 		}
 
 		private class AuthorizationEventArgs : System.EventArgs {
-			public Exception Exception { get; set; }
-			public Auth Auth { get; set; }
+			Exception e;
+			Auth auth;
+
+			public Exception Exception {
+				get { return e; }
+				set { e = value; }
+			}
+
+			public Auth Auth {
+				get { return auth; }
+				set { auth = value; }
+			}
+
+			public AuthorizationEventArgs ()
+			{
+			}
 		}
 
 		public void HandleSizeActive (object sender, System.EventArgs args)
@@ -318,10 +333,10 @@ namespace FSpot.Exporters.Flickr {
 				} else {
 					HigMessageDialog md =
 						new HigMessageDialog (Dialog,
-									  Gtk.DialogFlags.Modal |
-									  Gtk.DialogFlags.DestroyWithParent,
-									  Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-									  Catalog.GetString ("Unable to log on"), e.Message);
+								      Gtk.DialogFlags.Modal |
+								      Gtk.DialogFlags.DestroyWithParent,
+								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+								      Catalog.GetString ("Unable to log on"), e.Message);
 
 					md.Run ();
 					md.Destroy ();
@@ -342,7 +357,7 @@ namespace FSpot.Exporters.Flickr {
 			if (args.UploadComplete) {
 				progress_dialog.Fraction = photo_index / (double) selection.Count;
 				progress_dialog.ProgressText = String.Format (Catalog.GetString ("Waiting for response {0} of {1}"),
-										  photo_index, selection.Count);
+									      photo_index, selection.Count);
 			}
 			progress_dialog.Fraction = (photo_index - 1.0 + (args.Bytes / (double) info.Length)) / (double) selection.Count;
 		}
@@ -368,7 +383,7 @@ namespace FSpot.Exporters.Flickr {
 				try {
 					IPhoto photo = photos [index];
 					progress_dialog.Message = System.String.Format (
-												Catalog.GetString ("Uploading picture \"{0}\""), photo.Name);
+                                                Catalog.GetString ("Uploading picture \"{0}\""), photo.Name);
 
 					progress_dialog.Fraction = photo_index / (double)selection.Count;
 					photo_index++;
@@ -386,9 +401,9 @@ namespace FSpot.Exporters.Flickr {
 
 					if (App.Instance.Database != null && photo is FSpot.Photo)
 						App.Instance.Database.Exports.Create ((photo as FSpot.Photo).Id,
-										  (photo as FSpot.Photo).DefaultVersionId,
-										  ExportStore.FlickrExportType,
-										  auth.User.UserId + ":" + auth.User.Username + ":" + current_service.Name + ":" + id);
+									      (photo as FSpot.Photo).DefaultVersionId,
+									      ExportStore.FlickrExportType,
+									      auth.User.UserId + ":" + auth.User.Username + ":" + current_service.Name + ":" + id);
 
 				} catch (System.Exception e) {
 					progress_dialog.Message = String.Format (Catalog.GetString ("Error Uploading To {0}: {1}"),
@@ -475,12 +490,12 @@ namespace FSpot.Exporters.Flickr {
 				do_export_flickr.Sensitive = false;
 				HigMessageDialog md =
 					new HigMessageDialog (Dialog,
-								  Gtk.DialogFlags.Modal |
-								  Gtk.DialogFlags.DestroyWithParent,
-								  Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-								  Catalog.GetString ("Unable to log on."),
-								  string.Format (Catalog.GetString ("F-Spot was unable to log on to {0}.  Make sure you have given the authentication using {0} web browser interface."),
-										 current_service.Name));
+							      Gtk.DialogFlags.Modal |
+							      Gtk.DialogFlags.DestroyWithParent,
+							      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+							      Catalog.GetString ("Unable to log on."),
+							      string.Format (Catalog.GetString ("F-Spot was unable to log on to {0}.  Make sure you have given the authentication using {0} web browser interface."),
+									     current_service.Name));
 				md.Run ();
 				md.Destroy ();
 				return;
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrRemote.cs b/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrRemote.cs
index 6759cba..da35672 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrRemote.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrRemote.cs
@@ -42,13 +42,16 @@
  *
  */
 using System;
-using System.Collections.Generic;
-using System.Linq;
+using System.IO;
 using System.Text;
+using System.Collections;
+using System.Collections.Generic;
 
+using FlickrNet;
+using FSpot;
 using FSpot.Core;
+using FSpot.Utils;
 using FSpot.Filters;
-
 using Hyena;
 
 namespace FSpot.Exporters.Flickr {
@@ -70,7 +73,7 @@ public class FlickrRemote {
 
 	public FlickrRemote (string token, Service service)
 	{
-		if (string.IsNullOrEmpty(token)) {
+		if (token == null || token.Length == 0) {
 			this.flickr = new FlickrNet.Flickr (service.ApiKey, service.Secret);
 			this.token = null;
 		} else {
@@ -261,9 +264,9 @@ public class FlickrRemote {
 
 		public static Service FromSupported (SupportedService id)
 		{
-			foreach (Service s in Supported.Where(s => s.Id == id))
-			{
-				return s;
+			foreach (Service s in Supported) {
+				if (s.Id == id)
+					return s;
 			}
 
 			throw new System.ArgumentException ("Unknown service type");
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder.csproj b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder.csproj
index d160caa..e6bde28 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder.csproj
+++ b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Exporters.Folder</RootNamespace>
     <AssemblyName>FSpot.Exporters.Folder</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -112,8 +92,6 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="ICSharpCode.SharpZipLib" />
     <Reference Include="Mono.Posix" />
     <Reference Include="System" />
@@ -128,20 +106,7 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Exporters.Folder\" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs
index fcbb047..270f228 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs
@@ -53,21 +53,25 @@
 //located on a GIO location.
 using System;
 using System.IO;
-
-using FSpot.Core;
-using FSpot.Filters;
-using FSpot.Widgets;
-using FSpot.UI.Dialog;
+using System.Runtime.InteropServices;
+using System.Collections;
+using System.Collections.Generic;
 
 using Hyena;
 
 using Mono.Unix;
 
-// FIXME: In a newer version of mono?
 using ICSharpCode.SharpZipLib.Checksums;
 using ICSharpCode.SharpZipLib.Zip;
 using ICSharpCode.SharpZipLib.GZip;
 
+using FSpot;
+using FSpot.Core;
+using FSpot.Filters;
+using FSpot.Widgets;
+using FSpot.Utils;
+using FSpot.UI.Dialog;
+
 namespace FSpot.Exporters.Folder
 {
 	public class FolderExport : FSpot.Extensions.IExporter
@@ -301,7 +305,7 @@ namespace FSpot.Exporters.Folder
 				if (!dest.IsNative)
 					System.IO.Directory.Delete (gallery_path, true);
 
-				ThreadAssist.ProxyToMain (() => Dialog.Destroy());
+				ThreadAssist.ProxyToMain (() => { Dialog.Destroy(); });
 			}
 		}
 
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderGallery.cs b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderGallery.cs
index 7ff8c15..6774650 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderGallery.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderGallery.cs
@@ -55,11 +55,12 @@
 using System;
 using System.IO;
 
+using Hyena;
+
+using FSpot;
 using FSpot.Core;
 using FSpot.Filters;
 
-using Hyena;
-
 namespace FSpot.Exporters.Folder
 {
 	internal class FolderGallery
@@ -75,16 +76,16 @@ namespace FSpot.Exporters.Folder
 
 			public ScaleRequest (string name, int width, int height, bool skip, bool exif = false)
 			{
-				Name = name ?? String.Empty;
-				Width = width;
-				Height = height;
-				Skip = skip;
-				CopyExif = exif;
+				this.Name = name != null ? name : String.Empty;
+				this.Width = width;
+				this.Height = height;
+				this.Skip = skip;
+				this.CopyExif = exif;
 			}
 
 			public bool AvoidScale (int size)
 			{
-				return (size < Width && size < Height && Skip);
+				return (size < this.Width && size < this.Height && this.Skip);
 			}
 		}
 
@@ -111,7 +112,7 @@ namespace FSpot.Exporters.Folder
 			Collection = selection;
 			GalleryName = gallery_name;
 			GalleryPath = Path.Combine (path, GalleryName);
-			requests = new ScaleRequest [] { ScaleRequest.Default };
+			this.requests = new ScaleRequest [] { ScaleRequest.Default };
 		}
 		#endregion
 
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/HtmlGallery.cs b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/HtmlGallery.cs
index 8444d10..b877ebe 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/HtmlGallery.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/HtmlGallery.cs
@@ -53,13 +53,14 @@
 //located on a GIO location.
 
 using System;
-using System.Collections.Generic;
 using System.IO;
-
-using FSpot.Core;
+using System.Collections;
+using System.Collections.Generic;
 
 using Mono.Unix;
 
+using FSpot.Core;
+
 namespace FSpot.Exporters.Folder
 {
 	class HtmlGallery : FolderGallery
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/OriginalGallery.cs b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/OriginalGallery.cs
index cb502b3..5bf7787 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/OriginalGallery.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/OriginalGallery.cs
@@ -55,14 +55,13 @@
 using System;
 using System.IO;
 
-using FSpot.Core;
-
 using Hyena;
 
-// FIXME: Isn't there some zip library stuff in a newer version of mono?
 using ICSharpCode.SharpZipLib.Checksums;
 using ICSharpCode.SharpZipLib.Zip;
 
+using FSpot.Core;
+
 namespace FSpot.Exporters.Folder
 {
 	class OriginalGallery : FolderGallery
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery.csproj b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery.csproj
index c7cb9d2..7c5c4b6 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery.csproj
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Exporters.Gallery</RootNamespace>
     <AssemblyName>FSpot.Exporters.Gallery</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -94,8 +74,6 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="System" />
     <Reference Include="System.Xml" />
@@ -135,20 +113,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Exporters.Gallery\" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs
index e8590bd..c98e249 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/AccountDialog.cs
@@ -27,12 +27,14 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+
 using System;
 
+using Mono.Unix;
+
 using Hyena;
 using Hyena.Widgets;
 
-using Mono.Unix;
 
 namespace FSpot.Exporters.Gallery
 {
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/FormClient.cs b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/FormClient.cs
index 09543d9..b224103 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/FormClient.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/FormClient.cs
@@ -38,6 +38,7 @@ using System.Net;
 using System.Text;
 using System.Web;
 
+using FSpot.Core;
 using Mono.Unix;
 
 
@@ -61,9 +62,12 @@ namespace FSpot.Exporters.Gallery
 		private string boundary;
 		private string start_boundary;
 		private string end_boundary;
-
-		public bool Multipart { private get; set; }
-
+	
+		private bool multipart = false;
+		public bool Multipart {
+			set { multipart = value; }
+		}
+	
 		private bool first_item;
 	
 		public bool Buffer = false;
@@ -78,16 +82,14 @@ namespace FSpot.Exporters.Gallery
 	
 		public FormClient (CookieContainer cookies) 
 		{
-			Multipart = false;
-			Cookies = cookies;
-			Items = new List<FormItem> ();
+			this.Cookies = cookies;
+			this.Items = new List<FormItem> ();
 		}
 		
 		public FormClient ()
 		{
-			Multipart = false;
-			Items = new List<FormItem> ();
-			Cookies = new CookieContainer ();
+			this.Items = new List<FormItem> ();
+			this.Cookies = new CookieContainer ();
 		}
 		
 		private void GenerateBoundary () 
@@ -105,7 +107,7 @@ namespace FSpot.Exporters.Gallery
 		
 		public void Add (string name, FileInfo fileinfo)
 		{
-			Multipart = true;
+			multipart = true;
 			Items.Add (new FormItem (name, fileinfo));
 		}
 	
@@ -114,7 +116,7 @@ namespace FSpot.Exporters.Gallery
 			// types we allow in .Add
 	
 			if (item.Value == null) {
-				Write (item.Name, String.Empty);
+				Write (item.Name, (string)String.Empty);
 			} else if (item.Value is FileInfo) {
 				Write (item.Name, (FileInfo)item.Value);
 			} else if (item.Value is string) {
@@ -124,24 +126,21 @@ namespace FSpot.Exporters.Gallery
 			}
 		}
 	
-		private long MultipartLength (FormItem item)
-		{
+		private long MultipartLength (FormItem item) {
 			// The types we check here need to match the
 			// types we allow in .Add
 	
 			if (item.Value == null) {
 				return MultipartLength (item.Name, (string)String.Empty);
-			}
-			if (item.Value is FileInfo) {
+			} else if (item.Value is FileInfo) {
 				return MultipartLength (item.Name, (FileInfo)item.Value);
-			}
-			if (item.Value is string) {
+			} else if (item.Value is string) {
 				return MultipartLength (item.Name, (string)item.Value);
+			} else {
+				throw new Exception ("Unknown value type");
 			}
-
-			throw new Exception ("Unknown value type");
 		}
-
+	
 		private string MultipartHeader (string name, string value)
 		{
 			return string.Format ("{0}\r\n" + 
@@ -160,7 +159,7 @@ namespace FSpot.Exporters.Gallery
 		{
 			string cmd;
 			
-			if (Multipart) {
+			if (multipart) {
 				cmd = String.Format ("{0}"
 						     + "{1}\r\n",
 						     MultipartHeader (name, value), value);
@@ -197,7 +196,7 @@ namespace FSpot.Exporters.Gallery
 	
 	       	private void Write (string name, FileInfo file)
 		{
-			if (Multipart) {
+			if (multipart) {
 				stream_writer.Write (MultipartHeader (name, file));
 				stream_writer.Flush ();
 				Stream stream = stream_writer.BaseStream;
@@ -226,7 +225,7 @@ namespace FSpot.Exporters.Gallery
 		public void Clear () 
 		{
 			Items.Clear ();
-			Multipart = false;
+			multipart = false;
 		}
 
 		public HttpWebResponse Submit (string url, FSpot.ProgressItem progress_item = null)
@@ -264,7 +263,7 @@ namespace FSpot.Exporters.Gallery
 			Request.Headers["Accept-Charset"] = "utf-8;";
 			Request.UserAgent = String.Format("F-Spot {0} (http://www.f-spot.org)", Defines.VERSION);
 	
-			if (Multipart) {
+			if (multipart) {
 				GenerateBoundary ();
 				Request.ContentType = "multipart/form-data; boundary=" + boundary;
 				Request.Timeout = Request.Timeout * 3;
@@ -295,7 +294,7 @@ namespace FSpot.Exporters.Gallery
 				Write (item);
 			}
 			
-			if (Multipart)
+			if (multipart)
 				stream_writer.Write (end_boundary + "\r\n");
 			
 			stream_writer.Flush ();
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/Gallery2.cs b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/Gallery2.cs
index bc61456..02f0edc 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/Gallery2.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/Gallery2.cs
@@ -261,7 +261,7 @@ namespace FSpot.Exporters.Gallery
 
 		public override string GetAlbumUrl (Album album)
 		{
-			return Uri + "?g2_view=core.ShowItem&g2_itemId=" + album.Name;
+			return Uri.ToString () + "?g2_view=core.ShowItem&g2_itemId=" + album.Name;
 		}
 	}
 }
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAccount.cs b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAccount.cs
index 071c4d8..b66427e 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAccount.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAccount.cs
@@ -27,22 +27,25 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using Hyena;
-
 using Mono.Unix;
 
+using Hyena;
+
 namespace FSpot.Exporters.Gallery
 {
 	public class GalleryAccount {
 		public GalleryAccount (string name, string url, string username, string password) : this (name, url, username, password, GalleryVersion.VersionUnknown) {}
 		public GalleryAccount (string name, string url, string username, string password, GalleryVersion version)
 		{
-			Name = name;
+			this.Name = name;
 			this.username = username;
 			this.password = password;
-			Url = url;
+			this.Url = url;
 
-			Version = version != GalleryVersion.VersionUnknown ? version : Gallery.DetectGalleryVersion(Url);
+			if (version != GalleryVersion.VersionUnknown)
+				this.Version = version;
+			else
+				this.Version = Gallery.DetectGalleryVersion(Url);
 		}
 
 		public const string EXPORT_SERVICE = "gallery/";
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAddAlbum.cs b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAddAlbum.cs
index c9e8c6e..b7bd0ac 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAddAlbum.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryAddAlbum.cs
@@ -29,10 +29,10 @@
 
 using System;
 
-using Hyena.Widgets;
-
 using Mono.Unix;
 
+using Hyena.Widgets;
+
 namespace FSpot.Exporters.Gallery
 {
 	public class GalleryAddAlbum
@@ -105,12 +105,12 @@ namespace FSpot.Exporters.Gallery
 				if (gallery.Albums.Count == 0 || album_optionmenu.Active <= 0)
 					parent = String.Empty;
 				else
-					parent = gallery.Albums [album_optionmenu.Active-1].Name;
+					parent = ((Album) gallery.Albums [album_optionmenu.Active-1]).Name;
 			else
 				if (gallery.Albums.Count == 0 || album_optionmenu.Active < 0)
 					parent = String.Empty;
 				else
-					parent = gallery.Albums [album_optionmenu.Active].Name;
+					parent = ((Album) gallery.Albums [album_optionmenu.Active]).Name;
 
 			name = name_entry.Text;
 			description = description_entry.Text;
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs
index 4dd858e..a7bd093 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs
@@ -34,15 +34,16 @@
 using System;
 using System.Collections.Generic;
 
+using Mono.Unix;
+
 using FSpot.Core;
-using FSpot.Extensions;
 using FSpot.Filters;
-using FSpot.UI.Dialog;
 using FSpot.Widgets;
+using FSpot.UI.Dialog;
+using FSpot.Extensions;
 
 using Hyena;
-
-using Mono.Unix;
+using Hyena.Widgets;
 
 namespace FSpot.Exporters.Gallery
 {
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs
index 48e7586..a225aa4 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs
@@ -31,12 +31,17 @@
 //
 
 using System;
-using System.Collections.Generic;
+using System.Net;
 using System.IO;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
 
+using Mono.Unix;
+using FSpot;
 using FSpot.Core;
-
 using Hyena;
+using Hyena.Widgets;
 
 /* These classes are based off the documentation at
  *
@@ -131,12 +136,11 @@ namespace FSpot.Exporters.Gallery
 			return Gallery.GetAlbumUrl(this);
 		}
 
-		// FIXME: I switched this to Album obj since its now a List and not an ArrayList
-		public int CompareTo (Album obj)
+		public int CompareTo (Object obj)
 		{
-			Album other = obj;
+			Album other = obj as Album;
 
-			int numThis = Parents.Count;
+			int numThis = this.Parents.Count;
 			int numOther = other.Parents.Count;
 			int thisVal = -1, otherVal = -1;
 
@@ -144,8 +148,8 @@ namespace FSpot.Exporters.Gallery
 			int maxIters = Math.Min (numThis, numOther);
 			int i = 0;
 			while (i < maxIters) {
-				thisVal = Parents[i];
-				otherVal = other.Parents[i];
+				thisVal = (int)this.Parents[i];
+				otherVal = (int)other.Parents[i];
 				if (thisVal != otherVal) {
 					break;
 				}
@@ -159,7 +163,7 @@ namespace FSpot.Exporters.Gallery
 
 			} else if (i < numThis) {
 				//other shorter
-				thisVal = Parents[i];
+				thisVal = (int)this.Parents[i];
 				retVal = thisVal.CompareTo (other.RefNum);
 
 				//if equal, we want to make the shorter one come first
@@ -168,8 +172,8 @@ namespace FSpot.Exporters.Gallery
 
 			} else if (i < numOther) {
 				//this shorter
-				otherVal = other.Parents[i];
-				retVal = RefNum.CompareTo (otherVal);
+				otherVal = (int)other.Parents[i];
+				retVal = this.RefNum.CompareTo (otherVal);
 
 				//if equal, we want to make the shorter one come first
 				if (retVal == 0)
@@ -177,7 +181,7 @@ namespace FSpot.Exporters.Gallery
 
 			} else {
 				//children of the same parent
-				retVal = RefNum.CompareTo (other.RefNum);
+				retVal = this.RefNum.CompareTo (other.RefNum);
 			}
 			return retVal;
 		}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb.csproj b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb.csproj
index db152ca..5b7171f 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb.csproj
+++ b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Exporters.PicasaWeb</RootNamespace>
     <AssemblyName>FSpot.Exporters.PicasaWeb</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -88,25 +68,10 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Exporters.PicasaWeb\" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="System" />
     <Reference Include="Mono.Posix" />
     <Reference Include="Gnome.Keyring, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1a73e1bde00c9b66">
@@ -138,4 +103,4 @@
       <Name>Mono.Google</Name>
     </ProjectReference>
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccount.cs b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccount.cs
index 2cd3717..864867b 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccount.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccount.cs
@@ -27,13 +27,25 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.Net;
-
-using Gnome.Keyring;
-
+using System.IO;
+using System.Text;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Web;
+using Mono.Unix;
 using Hyena;
-
+using Hyena.Widgets;
+using FSpot;
+using FSpot.Core;
+using FSpot.Filters;
+using FSpot.Widgets;
+using FSpot.Imaging;
+using FSpot.UI.Dialog;
+using Gnome.Keyring;
 using Mono.Google;
+using Mono.Google.Picasa;
 
 namespace FSpot.Exporters.PicasaWeb
 {
@@ -41,7 +53,10 @@ namespace FSpot.Exporters.PicasaWeb
 
 		private string username;
 		private string password;
+		private string token;
+		private string unlock_captcha;
 		private GoogleConnection connection;
+		private Mono.Google.Picasa.PicasaWeb picasa;
 
 		public GoogleAccount (string username, string password)
 		{
@@ -53,8 +68,8 @@ namespace FSpot.Exporters.PicasaWeb
 		{
 			this.username = username;
 			this.password = password;
-			Token = token;
-			UnlockCaptcha = unlock_captcha;
+			this.token = token;
+			this.unlock_captcha = unlock_captcha;
 		}
 
 		public Mono.Google.Picasa.PicasaWeb Connect ()
@@ -62,16 +77,16 @@ namespace FSpot.Exporters.PicasaWeb
 			Log.Debug ("GoogleAccount.Connect()");
 			GoogleConnection conn = new GoogleConnection (GoogleService.Picasa);
 			ServicePointManager.CertificatePolicy = new NoCheckCertificatePolicy ();
-			if (UnlockCaptcha == null || Token == null)
+			if (unlock_captcha == null || token == null)
 				conn.Authenticate(username, password);
 			else {
-				conn.Authenticate(username, password, Token, UnlockCaptcha);
-				Token = null;
-				UnlockCaptcha = null;
+				conn.Authenticate(username, password, token, unlock_captcha);
+				token = null;
+				unlock_captcha = null;
 			}
 			connection = conn;
 			var picasa = new Mono.Google.Picasa.PicasaWeb(conn);
-			Picasa = picasa;
+			this.picasa = picasa;
 			return picasa;
 		}
 
@@ -110,10 +125,28 @@ namespace FSpot.Exporters.PicasaWeb
 			}
 		}
 
-		public string Token { get; set; }
+		public string Token {
+			get {
+				return token;
+			}
+			set {
+				token = value;
+			}
+		}
 
-		public string UnlockCaptcha { get; set; }
+		public string UnlockCaptcha {
+			get {
+				return unlock_captcha;
+			}
+			set {
+				unlock_captcha = value;
+			}
+		}
 
-		public Mono.Google.Picasa.PicasaWeb Picasa { get; private set; }
+		public Mono.Google.Picasa.PicasaWeb Picasa {
+			get {
+				return picasa;
+			}
+		}
 	}
 }
diff --git a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccountDialog.cs b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccountDialog.cs
index 6584830..cbe45f6 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccountDialog.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccountDialog.cs
@@ -28,14 +28,24 @@
 //
 
 using System;
-
+using System.Net;
+using System.IO;
+using System.Text;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Web;
+using Mono.Unix;
+using Hyena;
+using Hyena.Widgets;
+using FSpot;
+using FSpot.Core;
+using FSpot.Filters;
+using FSpot.Widgets;
 using FSpot.Imaging;
-
+using FSpot.UI.Dialog;
 using Gnome.Keyring;
-
-using Hyena;
-
 using Mono.Google;
+using Mono.Google.Picasa;
 
 namespace FSpot.Exporters.PicasaWeb
 {
@@ -138,7 +148,7 @@ namespace FSpot.Exporters.PicasaWeb
 		private string username;
 		private string token;
 
-		GtkBeans.Builder builder;
+        GtkBeans.Builder builder;
 
 		// widgets
 		[GtkBeans.Builder.Object] Gtk.Dialog dialog;
diff --git a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccountManager.cs b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccountManager.cs
index 3227b4c..5389e59 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccountManager.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAccountManager.cs
@@ -29,13 +29,10 @@
 //
 
 using System;
-// FIXME: Why do we still have System.Collections
 using System.Collections;
 using System.Collections.Generic;
-
-using Gnome.Keyring;
-
 using Hyena;
+using Gnome.Keyring;
 
 namespace FSpot.Exporters.PicasaWeb
 {
@@ -43,7 +40,7 @@ namespace FSpot.Exporters.PicasaWeb
 	{
 		private static GoogleAccountManager instance;
 		private const string keyring_item_name = "Google Account";
-		readonly List<GoogleAccount> accounts;
+		List<GoogleAccount> accounts;
 
 		public delegate void AccountListChangedHandler (GoogleAccountManager manager, GoogleAccount changed_account);
 		public event AccountListChangedHandler AccountListChanged;
@@ -63,7 +60,12 @@ namespace FSpot.Exporters.PicasaWeb
 			ReadAccounts ();
 		}
 
-		public void MarkChanged (bool write = true, GoogleAccount changed_account = null)
+		public void MarkChanged ()
+		{
+			MarkChanged (true, null);
+		}
+
+		public void MarkChanged (bool write, GoogleAccount changed_account)
 		{
 			if (write)
 				WriteAccounts ();
@@ -77,7 +79,12 @@ namespace FSpot.Exporters.PicasaWeb
 			return accounts;
 		}
 
-		public void AddAccount (GoogleAccount account, bool write = true)
+		public void AddAccount (GoogleAccount account)
+		{
+			AddAccount (account, true);
+		}
+
+		public void AddAccount (GoogleAccount account, bool write)
 		{
 			accounts.Add (account);
 			MarkChanged (write, account);
diff --git a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAddAlbum.cs b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAddAlbum.cs
index 3554d9d..9fc6408 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAddAlbum.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/GoogleAddAlbum.cs
@@ -28,13 +28,24 @@
 //
 
 using System;
-
-using Gnome.Keyring;
-
+using System.Net;
+using System.IO;
+using System.Text;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Web;
+using Mono.Unix;
+using Hyena;
 using Hyena.Widgets;
-
+using FSpot;
+using FSpot.Core;
+using FSpot.Filters;
+using FSpot.Widgets;
+using FSpot.Imaging;
+using FSpot.UI.Dialog;
+using Gnome.Keyring;
+using Mono.Google;
 using Mono.Google.Picasa;
-using Mono.Unix;
 
 namespace FSpot.Exporters.PicasaWeb
 {
diff --git a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs
index 730cd42..f40d17d 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs
@@ -37,26 +37,30 @@
  * Copyright (C) 2006 Stephane Delcroix
  */
 using System;
-using System.Collections;
-using System.Collections.Generic;
 using System.IO;
 using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Mono.Unix;
+using Hyena;
 
+using FSpot;
 using FSpot.Core;
 using FSpot.Filters;
-using FSpot.UI.Dialog;
 using FSpot.Widgets;
-
-using Hyena;
+using FSpot.UI.Dialog;
 
 using Mono.Google;
 using Mono.Google.Picasa;
-using Mono.Unix;
 
 namespace FSpot.Exporters.PicasaWeb
 {
 	public class GoogleExport : FSpot.Extensions.IExporter
 	{
+		public GoogleExport ()
+		{
+		}
+
 		public void Run (IBrowsableCollection selection)
 		{
 			builder = new GtkBeans.Builder (null, "google_export_dialog.ui", null);
@@ -328,7 +332,12 @@ namespace FSpot.Exporters.PicasaWeb
 			gallery_optionmenu.Active = pos;
 		}
 
-		private void Connect (GoogleAccount selected = null)
+		private void Connect ()
+		{
+			Connect (null);
+		}
+
+		private void Connect (GoogleAccount selected)
 		{
 			Connect (selected, null, null);
 		}
@@ -387,7 +396,6 @@ namespace FSpot.Exporters.PicasaWeb
 			}
 		}
 
-		// FIXME: This is never used
 		private void HandleAccountSelected (object sender, System.EventArgs args)
 		{
 			Connect ();
@@ -401,7 +409,7 @@ namespace FSpot.Exporters.PicasaWeb
 			// make the newly created album selected
 //			PicasaAlbumCollection albums = account.Picasa.GetAlbums();
 			for (int i=0; i < albums.Count; i++) {
-				if (albums [i].Title == title)
+				if (((PicasaAlbum)albums [i]).Title == title)
 					album_optionmenu.Active = i;
 			}
 		}
@@ -509,7 +517,12 @@ namespace FSpot.Exporters.PicasaWeb
 		}
 
 		private Gtk.Dialog Dialog {
-			get { return dialog ?? (dialog = new Gtk.Dialog(builder.GetRawObject(dialog_name))); }
+			get {
+				if (dialog == null)
+					dialog = new Gtk.Dialog (builder.GetRawObject (dialog_name));
+
+				return dialog;
+			}
 		}
 	}
 }
diff --git a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug.csproj b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug.csproj
index 645e3ea..32ba3cc 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug.csproj
+++ b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Exporters.SmugMug</RootNamespace>
     <AssemblyName>FSpot.Exporters.SmugMugExport</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -106,9 +86,6 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Gnome.Keyring, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1a73e1bde00c9b66">
     </Reference>
     <Reference Include="System" />
@@ -119,20 +96,7 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Exporters.SmugMug\" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccount.cs b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccount.cs
index 7feb2d6..e103b03 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccount.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccount.cs
@@ -27,12 +27,23 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.Net;
-
-using Gnome.Keyring;
-
+using System.IO;
+using System.Text;
+using System.Threading;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Web;
+using Mono.Unix;
+using Gtk;
+using FSpot;
+using FSpot.Core;
+using FSpot.Filters;
+using FSpot.Widgets;
 using Hyena;
-
+using FSpot.UI.Dialog;
+using Gnome.Keyring;
 using SmugMugNet;
 
 namespace FSpot.Exporters.SmugMug
diff --git a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccountDialog.cs b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccountDialog.cs
index de4512e..114bfc2 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccountDialog.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccountDialog.cs
@@ -28,8 +28,23 @@
 //
 
 using System;
-
+using System.Net;
+using System.IO;
+using System.Text;
+using System.Threading;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Web;
+using Mono.Unix;
+using Gtk;
+using FSpot;
+using FSpot.Core;
+using FSpot.Filters;
+using FSpot.Widgets;
+using Hyena;
+using FSpot.UI.Dialog;
 using Gnome.Keyring;
+using SmugMugNet;
 
 namespace FSpot.Exporters.SmugMug
 {
@@ -63,7 +78,7 @@ namespace FSpot.Exporters.SmugMug
 			if (remove_button != null)
 				remove_button.Visible = account != null;
 
-			Dialog.Show ();
+			this.Dialog.Show ();
 
 			password_entry.Changed += HandleChanged;
 			username_entry.Changed += HandleChanged;
@@ -102,7 +117,12 @@ namespace FSpot.Exporters.SmugMug
 		}
 
 		private Gtk.Dialog Dialog {
-			get { return dialog ?? (dialog = new Gtk.Dialog(builder.GetRawObject(dialog_name))); }
+			get {
+				if (dialog == null)
+					dialog = new Gtk.Dialog (builder.GetRawObject (dialog_name));
+
+				return dialog;
+			}
 		}
 
 		private SmugMugAccount account;
diff --git a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccountManager.cs b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccountManager.cs
index 8141438..bd1032c 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccountManager.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAccountManager.cs
@@ -29,13 +29,25 @@
 //
 
 using System;
-// FIXME: Why do we still have System.Collections?
+using System.Net;
+using System.IO;
+using System.Text;
+using System.Threading;
 using System.Collections;
 using System.Collections.Generic;
-
-using Gnome.Keyring;
-
+using System.Collections.Specialized;
+using System.Web;
+
+using Mono.Unix;
+using Gtk;
+using FSpot;
+using FSpot.Core;
+using FSpot.Filters;
+using FSpot.Widgets;
 using Hyena;
+using FSpot.UI.Dialog;
+using Gnome.Keyring;
+using SmugMugNet;
 
 namespace FSpot.Exporters.SmugMug
 {
@@ -82,7 +94,12 @@ namespace FSpot.Exporters.SmugMug
 			return accounts;
 		}
 
-		public void AddAccount (SmugMugAccount account, bool write = true)
+		public void AddAccount (SmugMugAccount account)
+		{
+			AddAccount (account, true);
+		}
+
+		public void AddAccount (SmugMugAccount account, bool write)
 		{
 			accounts.Add (account);
 			MarkChanged (write, account);
diff --git a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAddAlbum.cs b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAddAlbum.cs
index a2a0e31..df6d8c6 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAddAlbum.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugAddAlbum.cs
@@ -28,10 +28,22 @@
 //
 
 using System;
-
-using Gnome.Keyring;
+using System.Net;
+using System.IO;
+using System.Text;
+using System.Threading;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Web;
+using Mono.Unix;
 using Gtk;
-
+using FSpot;
+using FSpot.Core;
+using FSpot.Filters;
+using FSpot.Widgets;
+using Hyena;
+using FSpot.UI.Dialog;
+using Gnome.Keyring;
 using SmugMugNet;
 
 namespace FSpot.Exporters.SmugMug
@@ -76,7 +88,10 @@ namespace FSpot.Exporters.SmugMug
 		{
 			title = title_entry.Text;
 
-			add_button.Sensitive = title != String.Empty;
+			if (title == String.Empty)
+				add_button.Sensitive = false;
+			else
+				add_button.Sensitive = true;
 		}
 
 		[GLib.ConnectBefore]
@@ -118,7 +133,12 @@ namespace FSpot.Exporters.SmugMug
 		}
 
 		private Gtk.Dialog Dialog {
-			get { return dialog ?? (dialog = new Gtk.Dialog(builder.GetRawObject(dialog_name))); }
+			get {
+				if (dialog == null)
+					dialog = new Gtk.Dialog (builder.GetRawObject (dialog_name));
+
+				return dialog;
+			}
 		}
 	}
 }
diff --git a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs
index ba1c4a1..f2417e5 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs
@@ -40,17 +40,19 @@
  */
 
 using System;
-using System.Collections.Generic;
 using System.IO;
+using System.Text;
+using System.Threading;
+using System.Collections.Generic;
+using Mono.Unix;
+using Gtk;
 
+using FSpot;
 using FSpot.Core;
 using FSpot.Filters;
-using FSpot.UI.Dialog;
 using FSpot.Widgets;
-
 using Hyena;
-
-using Mono.Unix;
+using FSpot.UI.Dialog;
 
 using SmugMugNet;
 
@@ -62,16 +64,16 @@ namespace FSpot.Exporters.SmugMug {
 			builder = new GtkBeans.Builder (null, "smugmug_export_dialog.ui", null);
 			builder.Autoconnect (this);
 
-			gallery_optionmenu = Gtk.ComboBox.NewText();
-			album_optionmenu = Gtk.ComboBox.NewText();
+            gallery_optionmenu = Gtk.ComboBox.NewText();
+            album_optionmenu = Gtk.ComboBox.NewText();
 
-			(edit_button.Parent as Gtk.HBox).PackStart (gallery_optionmenu);
-			(album_button.Parent as Gtk.HBox).PackStart (album_optionmenu);
-			(edit_button.Parent as Gtk.HBox).ReorderChild (gallery_optionmenu, 1);
-			(album_button.Parent as Gtk.HBox).ReorderChild (album_optionmenu, 1);
+            (edit_button.Parent as Gtk.HBox).PackStart (gallery_optionmenu);
+            (album_button.Parent as Gtk.HBox).PackStart (album_optionmenu);
+            (edit_button.Parent as Gtk.HBox).ReorderChild (gallery_optionmenu, 1);
+            (album_button.Parent as Gtk.HBox).ReorderChild (album_optionmenu, 1);
 
-			gallery_optionmenu.Show ();
-			album_optionmenu.Show ();
+            gallery_optionmenu.Show ();
+            album_optionmenu.Show ();
 
 			this.items = selection.Items;
 			album_button.Sensitive = false;
@@ -163,7 +165,7 @@ namespace FSpot.Exporters.SmugMug {
 			browser = browser_check.Active;
 
 			if (account != null) {
-				album = account.SmugMug.GetAlbums() [Math.Max (0, album_optionmenu.Active)];
+				album = (Album) account.SmugMug.GetAlbums() [Math.Max (0, album_optionmenu.Active)];
 				photo_index = 0;
 
 				Dialog.Destroy ();
@@ -228,9 +230,9 @@ namespace FSpot.Exporters.SmugMug {
 					int image_id = account.SmugMug.Upload (request.Current.LocalPath, album.AlbumID);
 					if (App.Instance.Database != null && item is Photo && image_id >= 0)
 						App.Instance.Database.Exports.Create ((item as Photo).Id,
-										  (item as Photo).DefaultVersionId,
-										  ExportStore.SmugMugExportType,
-										  account.SmugMug.GetAlbumUrl (image_id).ToString ());
+									      (item as Photo).DefaultVersionId,
+									      ExportStore.SmugMugExportType,
+									      account.SmugMug.GetAlbumUrl (image_id).ToString ());
 
 					sent_bytes += file_info.Length;
 
@@ -267,7 +269,7 @@ namespace FSpot.Exporters.SmugMug {
 
 			accounts = manager.GetAccounts ();
 			if (accounts == null || accounts.Count == 0) {
-				gallery_optionmenu.AppendText (Mono.Unix.Catalog.GetString ("(No Gallery)"));
+                gallery_optionmenu.AppendText (Mono.Unix.Catalog.GetString ("(No Gallery)"));
 
 				gallery_optionmenu.Sensitive = false;
 				edit_button.Sensitive = false;
@@ -277,7 +279,7 @@ namespace FSpot.Exporters.SmugMug {
 					if (account == changed_account)
 						pos = i;
 
-					gallery_optionmenu.AppendText(account.Username);
+                    gallery_optionmenu.AppendText(account.Username);
 
 					i++;
 				}
@@ -285,10 +287,15 @@ namespace FSpot.Exporters.SmugMug {
 				edit_button.Sensitive = true;
 			}
 
-			gallery_optionmenu.Active = pos;
+            gallery_optionmenu.Active = pos;
+		}
+
+		private void Connect ()
+		{
+			Connect (null);
 		}
 
-		private void Connect (SmugMugAccount selected = null)
+		private void Connect (SmugMugAccount selected)
 		{
 			Connect (selected, null);
 		}
@@ -333,7 +340,7 @@ namespace FSpot.Exporters.SmugMug {
 			Album[] albums = account.SmugMug.GetAlbums();
 			for (int i=0; i < albums.Length; i++) {
 				if (((Album)albums[i]).Title == title) {
-					album_optionmenu.Active = 1;
+                    album_optionmenu.Active = 1;
 				}
 			}
 		}
@@ -356,7 +363,7 @@ namespace FSpot.Exporters.SmugMug {
 				string msg = disconnected ? Mono.Unix.Catalog.GetString ("(Not Connected)")
 					: Mono.Unix.Catalog.GetString ("(No Albums)");
 
-				album_optionmenu.AppendText(msg);
+                album_optionmenu.AppendText(msg);
 
 				export_button.Sensitive = false;
 				album_optionmenu.Sensitive = false;
@@ -367,7 +374,7 @@ namespace FSpot.Exporters.SmugMug {
 
 					label_builder.Append (album.Title);
 
-					album_optionmenu.AppendText (label_builder.ToString());
+                    album_optionmenu.AppendText (label_builder.ToString());
 				}
 
 				export_button.Sensitive = items.Length > 0;
@@ -422,7 +429,12 @@ namespace FSpot.Exporters.SmugMug {
 		}
 
 		private Gtk.Dialog Dialog {
-			get { return dialog ?? (dialog = new Gtk.Dialog(builder.GetRawObject(dialog_name))); }
+			get {
+				if (dialog == null)
+					dialog = new Gtk.Dialog (builder.GetRawObject (dialog_name));
+
+				return dialog;
+			}
 		}
 	}
 }
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo.csproj b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo.csproj
index b833371..24f7fe4 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo.csproj
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Exporters.Tabblo</RootNamespace>
     <AssemblyName>FSpot.Exporters.Tabblo</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -88,8 +68,6 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="System" />
     <Reference Include="Mono.Posix" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
@@ -124,20 +102,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Exporters.Tabblo\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/ApplicationCentricCertificatePolicy.cs b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/ApplicationCentricCertificatePolicy.cs
index f8061aa..059114e 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/ApplicationCentricCertificatePolicy.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/ApplicationCentricCertificatePolicy.cs
@@ -27,6 +27,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/FSpotUploadProgress.cs b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/FSpotUploadProgress.cs
index 17c0f99..8b0b1f6 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/FSpotUploadProgress.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/FSpotUploadProgress.cs
@@ -27,12 +27,11 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
-using FSpot.UI.Dialog;
-
 using Mono.Tabblo;
 using Mono.Unix;
+using System;
+using FSpot.UI.Dialog;
+using FSpot.Utils;
 
 namespace FSpot.Exporters.Tabblo {
 
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs
index be0b615..615c684 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs
@@ -27,19 +27,20 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Mono.Tabblo;
+using Mono.Unix;
+
 using System;
+using System.Collections;
 using System.Diagnostics;
 using System.Net;
 using System.Threading;
 
+using Hyena;
+using FSpot;
 using FSpot.Core;
 using FSpot.UI.Dialog;
 
-using Hyena;
-
-using Mono.Tabblo;
-using Mono.Unix;
-
 namespace FSpot.Exporters.Tabblo {
 
 	public class TabbloExport : FSpot.Extensions.IExporter {
@@ -373,8 +374,12 @@ namespace FSpot.Exporters.Tabblo {
 			}
 
 			PhotoStore photo_store = FSpot.App.Instance.Database.Photos;
-			FSpot.Photo photo = photo_store.GetByUri (item.DefaultVersion.Uri);
+			FSpot.Photo photo = photo_store.GetByUri (
+					item.DefaultVersion.Uri);
 			Debug.Assert (null != photo);
+			if (null == photo) {
+				return;
+			}
 
 			if (model.AttachTags) {
 				photo.AddTag (model.AttachedTags);
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExportModel.cs b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExportModel.cs
index 799e9a9..c129c24 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExportModel.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExportModel.cs
@@ -27,19 +27,23 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using Hyena;
+
+using Mono.Tabblo;
+
 using System;
-// FIXME: Why do we still have System.Collections?
 using System.Collections;
 using System.Collections.Generic;
 using System.Diagnostics;
 
 using FSpot.Core;
 
-using Hyena;
-
 namespace FSpot.Exporters.Tabblo {
 
 	class TabbloExportModel : Mono.Tabblo.IPreferences {
+
+		private IBrowsableCollection photo_collection;
+
 		private string username;
 		private string password;
 
@@ -73,11 +77,18 @@ namespace FSpot.Exporters.Tabblo {
 
 		// The photos.
 
-		internal IBrowsableCollection PhotoCollection { get; set; }
+		internal IBrowsableCollection PhotoCollection {
+			get {
+				return photo_collection;
+			}
+			set {
+				photo_collection = value;
+			}
+		}
 
 		internal IPhoto [] Photos {
 			get {
-				return PhotoCollection.Items;
+				return photo_collection.Items;
 			}
 		}
 
@@ -87,7 +98,8 @@ namespace FSpot.Exporters.Tabblo {
 		internal event EventHandler UsernameChanged;
 		public string Username {
 			get {
-				return null != username ? username : string.Empty;
+				return null != username
+						? username : string.Empty;
 			}
 			internal set {
 				string old_value = username;
@@ -100,7 +112,8 @@ namespace FSpot.Exporters.Tabblo {
 		internal event EventHandler PasswordChanged;
 		public string Password {
 			get {
-				return null != password ? password : string.Empty;
+				return null != password
+						? password : string.Empty;
 			}
 			internal set {
 				string old_value = password;
@@ -137,7 +150,8 @@ namespace FSpot.Exporters.Tabblo {
 		internal event EventHandler AttachedTagsChanged;
 		internal FSpot.Core.Tag [] AttachedTags {
 			get {
-				return null != attached_tags ? attached_tags	: no_tags;
+				return null != attached_tags
+						? attached_tags	: no_tags;
 			}
 			set {
 				FSpot.Core.Tag [] old_value = attached_tags;
@@ -163,7 +177,8 @@ namespace FSpot.Exporters.Tabblo {
 		internal event EventHandler RemovedTagsChanged;
 		internal FSpot.Core.Tag [] RemovedTags {
 			get {
-				return null != removed_tags ? removed_tags : no_tags;
+				return null != removed_tags
+						? removed_tags : no_tags;
 			}
 			set {
 				FSpot.Core.Tag [] old_value = removed_tags;
@@ -205,7 +220,6 @@ namespace FSpot.Exporters.Tabblo {
 				string keyring = Gnome.Keyring
 						.Ring.GetDefaultKeyring ();
 				
-				// FIXME: Change this out for a Dictionary
 				Hashtable attrs = new Hashtable ();
 				attrs [KeyringItemNameAttr] = KeyringItemName;
 				attrs [KeyringItemAppAttr] = KeyringItemApp;
@@ -246,8 +260,7 @@ namespace FSpot.Exporters.Tabblo {
 			string new_username = string.Empty;
 			string new_password = string.Empty;
 
-			// FIXME: Change this out for a Dictionary
-			Hashtable attrs = new Hashtable();
+			Hashtable attrs = new Hashtable ();
 			attrs [KeyringItemNameAttr] = KeyringItemName;
 			attrs [KeyringItemAppAttr] = KeyringItemApp;
 			
@@ -341,14 +354,14 @@ namespace FSpot.Exporters.Tabblo {
 		}
 		
 		
-		private static FSpot.Core.Tag [] ToTags (ICollection<int> ids)
+		private static FSpot.Core.Tag [] ToTags (int [] ids)
 		{
 			if (null == ids) {
 				return null;
 			}
 
 			List <FSpot.Core.Tag> tags =
-					new List <FSpot.Core.Tag> (ids.Count);
+					new List <FSpot.Core.Tag> (ids.Length);
 			foreach (int id in ids) {
 				FSpot.Core.Tag tag = FSpot.App.Instance.Database.Tags
 						.GetTagById (id);
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExportView.cs b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExportView.cs
index 25f8ca7..875064b 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExportView.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExportView.cs
@@ -27,6 +27,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
+using System.Diagnostics;
 using System.Reflection;
 
 using FSpot.Core;
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip.csproj b/src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip.csproj
index 053d7d9..cf06827 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip.csproj
+++ b/src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Exporters.Zip</RootNamespace>
     <AssemblyName>FSpot.Exporters.Zip</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -96,8 +76,6 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="ICSharpCode.SharpZipLib" />
@@ -110,20 +88,7 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Exporters.Zip\" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs b/src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs
index ec5cfd3..4f6382f 100644
--- a/src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs
+++ b/src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs
@@ -29,25 +29,21 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-using System.IO;
-
+using FSpot;
+using FSpot.UI.Dialog;
 using FSpot.Core;
 using FSpot.Extensions;
 using FSpot.Filters;
-using FSpot.UI.Dialog;
-
-using Gtk;
-
 using Hyena;
 using Hyena.Widgets;
-
-// FIXME: Is this in a newer version of mono?
+using System;
+using System.IO;
+using System.Collections;
+using Mono.Unix;
+using Gtk;
 using ICSharpCode.SharpZipLib.Checksums;
-using ICSharpCode.SharpZipLib.GZip;
 using ICSharpCode.SharpZipLib.Zip;
-
-using Mono.Unix;
+using ICSharpCode.SharpZipLib.GZip;
 
 namespace FSpot.Exporters.Zip {
 	public class Zip : IExporter {
@@ -127,9 +123,8 @@ namespace FSpot.Exporters.Zip {
 							      photos.Length, zipdiag);
 
 			//Pack up
-			foreach (IPhoto photo in photos)
-			{
-				if (progress_dialog.Update (String.Format (Catalog.GetString ("Preparing photo \"{0}\""), photo.Name))) {
+			for (int i = 0; i < photos.Length; i ++) {
+				if (progress_dialog.Update (String.Format (Catalog.GetString ("Preparing photo \"{0}\""), photos[i].Name))) {
 					progress_dialog.Destroy ();
 					return;
 				}
@@ -139,17 +134,17 @@ namespace FSpot.Exporters.Zip {
 					FilterSet filters = new FilterSet ();
 					filters.Add (new JpegFilter ());
 					filters.Add (new ResizeFilter ((uint) scale_size.ValueAsInt));
-					FilterRequest freq = new FilterRequest (photo.DefaultVersion.Uri);
+					FilterRequest freq = new FilterRequest (photos [i].DefaultVersion.Uri);
 					filters.Convert (freq);
 					f = freq.Current.LocalPath;
 				} else {
-					f = photo.DefaultVersion.Uri.LocalPath;
+					f = photos [i].DefaultVersion.Uri.LocalPath;
 				}
 				FileStream fs = File.OpenRead (f);
 
 				byte [] buffer = new byte [fs.Length];
 				fs.Read (buffer, 0, buffer.Length);
-				ZipEntry entry = new ZipEntry (System.IO.Path.GetFileName (photo.DefaultVersion.Uri.LocalPath));
+				ZipEntry entry = new ZipEntry (System.IO.Path.GetFileName (photos [i].DefaultVersion.Uri.LocalPath));
 
 				entry.DateTime = DateTime.Now;
 
diff --git a/src/Extensions/Exporters/FSpotExporters.UnitTests/FSpotExporters.UnitTests.csproj b/src/Extensions/Exporters/FSpotExporters.UnitTests/FSpotExporters.UnitTests.csproj
index 46cfb8a..7da149e 100644
--- a/src/Extensions/Exporters/FSpotExporters.UnitTests/FSpotExporters.UnitTests.csproj
+++ b/src/Extensions/Exporters/FSpotExporters.UnitTests/FSpotExporters.UnitTests.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -9,26 +9,8 @@
     <OutputType>Library</OutputType>
     <RootNamespace>FSpotExportersCD.UnitTests</RootNamespace>
     <AssemblyName>FSpotExportersCD.UnitTests</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
@@ -61,6 +41,7 @@
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
+    <Folder Include="FSpot.Exporters.CD\" />
     <Folder Include="FSpot.Exporters.Gallery\" />
   </ItemGroup>
   <ItemGroup>
@@ -69,21 +50,4 @@
       <Name>FSpot.Exporters.CD</Name>
     </ProjectReference>
   </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath.csproj b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath.csproj
index 9a78410..877f69d 100644
--- a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath.csproj
+++ b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Tools.ChangePhotoPath</RootNamespace>
     <AssemblyName>FSpot.Tools.ChangePhotoPath</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -80,8 +60,6 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="System" />
     <Reference Include="gtk-sharp-beans">
@@ -114,20 +92,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Tools.ChangePhotoPath\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/ChangePhotoPathController.cs b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/ChangePhotoPathController.cs
index 86b34b8..3e62978 100644
--- a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/ChangePhotoPathController.cs
+++ b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/ChangePhotoPathController.cs
@@ -37,13 +37,14 @@
 //
 
 
+using FSpot;
+using FSpot.Core;
+using FSpot.Query;
 using System;
+using System.IO;
+using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Specialized;
-using System.IO;
-
-using FSpot.Core;
-
 using Hyena;
 
 /*
@@ -102,7 +103,7 @@ namespace FSpot.Tools.ChangePhotoPath
 
 		private string EnsureEndsWithOneDirectorySeparator (string tmp_str)
 		{
-			if ( string.IsNullOrEmpty(tmp_str) )
+			if ( (tmp_str == null) || (tmp_str.Length == 0) )
 				return String.Format ("{0}", Path.DirectorySeparatorChar);
 			while (tmp_str.EndsWith(String.Format ("{0}", Path.DirectorySeparatorChar)))
 				tmp_str = tmp_str.Remove (tmp_str.Length-1, 1);
@@ -176,7 +177,7 @@ namespace FSpot.Tools.ChangePhotoPath
 		{
 				foreach (uint version_id in photo.VersionIds) {
 
-					PhotoVersion version = photo.GetVersion (version_id);
+					PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
 					if ( ChangeThisVersionUri (version, old_base, new_base) )
 						AddVersionToArrays (	photo.Id,
 									version_id,
@@ -213,12 +214,11 @@ namespace FSpot.Tools.ChangePhotoPath
 		{
 			if (photo == null)
 				photo = photo_store.Get (photo_id_array[index]);
-
-			PhotoVersion version = photo.GetVersion ( version_id_array[index]);
+			PhotoVersion version = photo.GetVersion ( (uint) version_id_array[index]) as PhotoVersion;
 			version.BaseUri = new SafeUri ( path ).GetBaseUri ();
 			version.Filename = new SafeUri ( path ).GetFilename ();
 			photo.Changes.UriChanged = true;
-			photo.Changes.ChangeVersion ( version_id_array[index] );
+			photo.Changes.ChangeVersion ( (uint) version_id_array[index] );
 		}
 
 		// FIXME: Refactor, try to use one common method....
@@ -283,10 +283,8 @@ namespace FSpot.Tools.ChangePhotoPath
 			int last_index = 0;
 			ProcessResult tmp_res;
 			tmp_res = ChangeAllUris(ref last_index);
-
-			if (tmp_res != ProcessResult.Ok)
+			if (!(tmp_res == ProcessResult.Ok))
 				RevertAllUris(last_index);
-
 			return tmp_res;
 		}
 
diff --git a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/ChangePhotoPathGui.cs b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/ChangePhotoPathGui.cs
index 10f5b58..d9c50f1 100644
--- a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/ChangePhotoPathGui.cs
+++ b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/ChangePhotoPathGui.cs
@@ -36,11 +36,11 @@
 // Copyright (C) 2007
 //
 
-using System;
-
 using FSpot.Extensions;
 using FSpot.UI.Dialog;
-
+using System;
+//using Gnome.Vfs;
+using Gtk;
 using Hyena;
 using Hyena.Widgets;
 
@@ -187,6 +187,8 @@ namespace FSpot.Tools.ChangePhotoPath
 			remove_progress_dialog();
 			if (destroy_dialog)
 				Dialog.Destroy();
+
+			return;
 		}
 
 		public void DisplayDefaultPaths (string oldpath, string newpath)
@@ -197,11 +199,10 @@ namespace FSpot.Tools.ChangePhotoPath
 
 		public void remove_progress_dialog ()
 		{
-			if (progress_dialog == null)
-				return;
-
-			progress_dialog.Destroy();
-			progress_dialog = null;
+			if (progress_dialog != null) {
+				progress_dialog.Destroy();
+				progress_dialog = null;
+			}
 		}
 
 		public void check_if_remove_progress_dialog (int total)
diff --git a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile.am b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile.am
old mode 100644
new mode 100755
diff --git a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw.csproj b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw.csproj
index f6ca62e..7eae1c3 100644
--- a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw.csproj
+++ b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Tools.DevelopInUFraw</RootNamespace>
     <AssemblyName>FSpot.Tools.DevelopInUFraw</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -77,21 +57,8 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Tools.DevelopInUFraw\" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\..\..\lib\Hyena\Hyena\Hyena.csproj">
@@ -112,9 +79,6 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="System" />
     <Reference Include="gio-sharp">
diff --git a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/AbstractDevelopInUFRaw.cs b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/AbstractDevelopInUFRaw.cs
index 4d9f2df..3985c58 100644
--- a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/AbstractDevelopInUFRaw.cs
+++ b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/AbstractDevelopInUFRaw.cs
@@ -31,18 +31,18 @@
 
 using System;
 using System.IO;
-
+using Mono.Unix;
+using Hyena;
+using FSpot;
 using FSpot.Core;
+using FSpot.Utils;
 using FSpot.Extensions;
 using FSpot.Imaging;
-
-using Hyena;
-
-using Mono.Unix;
+using FSpot.UI.Dialog;
 
 namespace FSpot.Tools.DevelopInUFraw
 {
-	// Abstract version, contains shared functionality
+    // Abstract version, contains shared functionality
 	public abstract class AbstractDevelopInUFRaw : ICommand
 	{
 		// The executable used for developing RAWs
@@ -71,7 +71,7 @@ namespace FSpot.Tools.DevelopInUFraw
 			LoadPreference (UFRAW_ARGUMENTS_KEY);
 			LoadPreference (UFRAW_BATCH_ARGUMENTS_KEY);
 
-			PhotoVersion raw = p.GetVersion (Photo.OriginalVersionId);
+			PhotoVersion raw = p.GetVersion (Photo.OriginalVersionId) as PhotoVersion;
 			if (!ImageFile.IsRaw (raw.Uri)) {
 				Log.Warning ("The original version of this image is not a (supported) RAW file");
 				return;
@@ -143,15 +143,16 @@ namespace FSpot.Tools.DevelopInUFraw
 		{
 			string name = Catalog.GetPluralString ("Developed in UFRaw", "Developed in UFRaw ({0})", i);
 			name = String.Format (name, i);
-
-			return p.VersionNameExists (name) ? GetVersionName (p, i + 1) : name;
+			if (p.VersionNameExists (name))
+				return GetVersionName (p, i + 1);
+			return name;
 		}
 
 		private System.Uri GetUriForVersionName (Photo p, string version_name)
 		{
 			string name_without_ext = System.IO.Path.GetFileNameWithoutExtension (p.Name);
 			return new System.Uri (System.IO.Path.Combine (DirectoryPath (p),  name_without_ext
-						   + " (" + version_name + ")" + ".jpg"));
+					       + " (" + version_name + ")" + ".jpg"));
 		}
 
 		private static string DirectoryPath (Photo p)
diff --git a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRaw.cs b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRaw.cs
index 7779d8c..bcbdd96 100644
--- a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRaw.cs
+++ b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRaw.cs
@@ -28,8 +28,17 @@
 //
 
 using System;
+using System.IO;
+
+using Mono.Unix;
 
 using Hyena;
+using FSpot;
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Extensions;
+using FSpot.Imaging;
+using FSpot.UI.Dialog;
 
 namespace FSpot.Tools.DevelopInUFraw
 {
diff --git a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs
index 283c9e5..5dc4d35 100644
--- a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs
+++ b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs
@@ -28,16 +28,19 @@
 //
 
 using System;
-
-using FSpot.UI.Dialog;
-
-using Hyena;
-
+using System.IO;
 using Mono.Unix;
+using Hyena;
+using FSpot;
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Extensions;
+using FSpot.Imaging;
+using FSpot.UI.Dialog;
 
 namespace FSpot.Tools.DevelopInUFraw
 {
-	// Batch Version
+    // Batch Version
 	public class DevelopInUFRawBatch : AbstractDevelopInUFRaw {
 		public DevelopInUFRawBatch() : base("ufraw-batch")
 		{
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery.csproj b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery.csproj
index 180b4d4..0681371 100644
--- a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery.csproj
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Tools.LiveWebGallery</RootNamespace>
     <AssemblyName>FSpot.Tools.LiveWebGallery</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -95,25 +75,10 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Tools.LiveWebGallery\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="System" />
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs
index fb32158..fa71e06 100644
--- a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs
@@ -29,12 +29,11 @@
 
 using System;
 using System.IO;
-using System.Linq;
-using System.Reflection;
 using System.Text;
+using System.Reflection;
 
+using FSpot;
 using FSpot.Core;
-
 using Mono.Unix;
 
 namespace FSpot.Tools.LiveWebGallery	
@@ -43,7 +42,10 @@ namespace FSpot.Tools.LiveWebGallery
 	{
 		protected string TagsToString (Photo photo) 
 		{
-			string tags = photo.Tags.Aggregate("", (current, tag) => current + (", " + tag.Name));
+			string tags = "";
+			foreach (Tag tag in photo.Tags) {
+				tags += ", " + tag.Name;
+			}
 			return tags.Length > 1 ? tags.Substring (2) : tags;
 		}
 
@@ -80,30 +82,49 @@ namespace FSpot.Tools.LiveWebGallery
 	}
 	
 	public class GalleryRequestHandler : TemplateRequestHandler, ILiveWebGalleryOptions
-	{
-		public QueryType QueryType { get; set; }
-
-		public Tag QueryTag { get; set; }
-
-		public bool LimitMaxPhotos { get; set; }
+	{			
+		private QueryType query_type = QueryType.ByTag;
+		public QueryType QueryType {
+			get { return query_type; }
+			set { query_type = value; }
+		}
+		
+		private Tag query_tag;
+		public Tag QueryTag {
+			get { return query_tag; }
+			set { query_tag = value; }
+		}
 
-		public int MaxPhotos { get; set; }
+		private bool limit_max_photos = true;
+		public bool LimitMaxPhotos {
+			get { return limit_max_photos; }
+			set { limit_max_photos = value; }
+		}
 
-		public bool TaggingAllowed { get; set; }
+		private int max_photos = 1000;
+		public int MaxPhotos {
+			get { return max_photos; }
+			set { max_photos = value; }
+		}
+		
+		private bool tagging_allowed = false;
+		public bool TaggingAllowed {
+			get { return tagging_allowed; }
+			set { tagging_allowed = value; }
+		}
 
-		public Tag EditableTag { get; set; }
+		private Tag editable_tag;
+		public Tag EditableTag {
+			get { return editable_tag; }
+			set { editable_tag = value; }
+		}
 
 		private LiveWebGalleryStats stats;
 					
 		public GalleryRequestHandler (LiveWebGalleryStats stats) 
 			: base ("gallery.html") 
 		{
-			TaggingAllowed = false;
-			MaxPhotos = 1000;
-			LimitMaxPhotos = true;
-			QueryType = QueryType.ByTag;
 			this.stats = stats;
-
 			template = template.Replace ("TITLE", Catalog.GetString("F-Spot Gallery"));
 			template = template.Replace ("OFFLINE_MESSAGE", Catalog.GetString("The web gallery seems to be offline now"));
 			template = template.Replace ("SHOW_ALL", Catalog.GetString("Show All"));
@@ -115,10 +136,10 @@ namespace FSpot.Tools.LiveWebGallery
 			
 			StringBuilder s = new StringBuilder (4096);
 			s.Append (template);
-			int num_photos = LimitMaxPhotos ? Math.Min (photos.Length, MaxPhotos) : photos.Length;
+			int num_photos = limit_max_photos ? Math.Min (photos.Length, max_photos) : photos.Length;
 			s.Replace ("NUM_PHOTOS", String.Format(Catalog.GetPluralString("{0} photo", "{0} photos", num_photos), num_photos));
 			s.Replace ("QUERY_TYPE", QueryTypeToString ());
-			s.Replace ("EDITABLE_TAG_NAME", TaggingAllowed ? Escape (EditableTag.Name) : "");
+			s.Replace ("EDITABLE_TAG_NAME", tagging_allowed ? Escape (editable_tag.Name) : "");
 			
 			string photo_template = GetSubTemplate (s, "BEGIN_PHOTO", "END_PHOTO");
 			StringBuilder photos_s = new StringBuilder (4096);
@@ -127,7 +148,7 @@ namespace FSpot.Tools.LiveWebGallery
 			foreach (Photo photo in photos) {
 				photos_s.Append (PreparePhoto (photo_template, photo));
 				
-				if (++num_photos >= MaxPhotos && LimitMaxPhotos)
+				if (++num_photos >= max_photos && limit_max_photos)
 					break;
 			}
 			s.Replace ("END_PHOTO", photos_s.ToString ());
@@ -141,9 +162,9 @@ namespace FSpot.Tools.LiveWebGallery
 		
 		private Photo[] GetChosenPhotos () 
 		{
-			switch (QueryType) {
+			switch (query_type) {
 			case QueryType.ByTag:
-				return App.Instance.Database.Photos.Query (new Tag[] {QueryTag});
+				return App.Instance.Database.Photos.Query (new Tag[] {query_tag});
 			case QueryType.CurrentView:
 				return App.Instance.Organizer.Query.Photos;
 			case QueryType.Selected:
@@ -154,9 +175,9 @@ namespace FSpot.Tools.LiveWebGallery
 		
 		private string QueryTypeToString ()
 		{
-			switch (QueryType) {
+			switch (query_type) {
 			case QueryType.ByTag:
-				return QueryTag.Name;
+				return query_tag.Name;
 			case QueryType.CurrentView:
 				return Catalog.GetString ("Current View");
 			case QueryType.Selected:
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGallery.cs b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGallery.cs
index eba47e1..386af52 100644
--- a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGallery.cs
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGallery.cs
@@ -28,12 +28,19 @@
 //
 
 using System;
+using System.IO;
 using System.Net;
+using System.Collections.Generic;
 
+using Gtk;
+
+using FSpot;
 using FSpot.Core;
 using FSpot.Extensions;
-
-using Gtk;
+using FSpot.Utils;
+using FSpot.Query;
+using FSpot.UI.Dialog;
+using Mono.Unix;
 
 namespace FSpot.Tools.LiveWebGallery
 {
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs
index 696c038..6a2dd80 100644
--- a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs
@@ -30,14 +30,13 @@
 using System;
 using System.Net;
 using System.Reflection;
-
+using FSpot;
 using FSpot.Core;
-
+using FSpot.Extensions;
+using FSpot.Query;
 using Gtk;
-
-using Hyena;
-
 using Mono.Unix;
+using Hyena;
 
 namespace FSpot.Tools.LiveWebGallery
 {
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/PhotoRequestHandler.cs b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/PhotoRequestHandler.cs
index 85eb387..84ed578 100644
--- a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/PhotoRequestHandler.cs
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/PhotoRequestHandler.cs
@@ -27,11 +27,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.IO;
+using System.Text;
 
+using FSpot;
 using FSpot.Filters;
 using FSpot.Utils;
-
 using Hyena;
 
 namespace FSpot.Tools.LiveWebGallery
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/ResourceRequestHandler.cs b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/ResourceRequestHandler.cs
index e9223df..7ce3923 100644
--- a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/ResourceRequestHandler.cs
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/ResourceRequestHandler.cs
@@ -27,9 +27,13 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.IO;
+using System.Text;
 using System.Reflection;
 
+using FSpot;
+
 namespace FSpot.Tools.LiveWebGallery
 {	
 	public class ResourceRequestHandler : RequestHandler
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/SimpleWebServer.cs b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/SimpleWebServer.cs
index 17022b9..00c42a0 100644
--- a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/SimpleWebServer.cs
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/SimpleWebServer.cs
@@ -28,15 +28,16 @@
 //
 
 using System;
-using System.Collections.Generic;
 using System.IO;
 using System.Net;
 using System.Net.Sockets;
+using System.Collections;
+using System.Collections.Generic;
 using System.Text;
 using System.Threading;
 
+using FSpot;
 using FSpot.Extensions;
-
 using Hyena;
 
 namespace FSpot.Tools.LiveWebGallery
@@ -45,7 +46,7 @@ namespace FSpot.Tools.LiveWebGallery
 	{
 		private Thread server_thread;
 		private TcpListener listener;
-		private readonly Dictionary<string, RequestHandler> handlers = new Dictionary<string, RequestHandler> ();
+		private Dictionary<string, RequestHandler> handlers = new Dictionary<string, RequestHandler> ();
 		
 		private IWebStats stats;
 		public IWebStats Stats {
diff --git a/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb.csproj b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb.csproj
index 23f4cf7..9cacb01 100644
--- a/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb.csproj
+++ b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Tools.MergeDb</RootNamespace>
     <AssemblyName>FSpot.Tools.MergeDb</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -109,8 +89,6 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gio-sharp">
@@ -121,20 +99,7 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Tools.MergeDb\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDb.cs b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDb.cs
index 7389907..036a5de 100644
--- a/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDb.cs
+++ b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDb.cs
@@ -30,21 +30,21 @@
 //
 
 using System;
-using System.Collections.Generic;
 using System.IO;
+using System.Collections.Generic;
 
+using Gtk;
+
+using FSpot;
 using FSpot.Core;
 using FSpot.Database;
 using FSpot.Extensions;
 using FSpot.Query;
-
-using Gtk;
-
+using FSpot.UI.Dialog;
+using Mono.Unix;
 using Hyena;
 using Hyena.Widgets;
 
-using Mono.Unix;
-
 namespace FSpot.Tools.MergeDb
 {
 	public class MergeDb : ICommand
@@ -92,10 +92,10 @@ namespace FSpot.Tools.MergeDb
 				string desc = String.Format (Catalog.GetString ("The file you selected is not a valid or supported database.\n\nReceived exception \"{0}\"."), ex.Message);
 
 				HigMessageDialog md = new HigMessageDialog (mdd.Dialog, DialogFlags.DestroyWithParent,
-										Gtk.MessageType.Error,
-										ButtonsType.Ok,
-										msg,
-										desc);
+									    Gtk.MessageType.Error,
+									    ButtonsType.Ok,
+									    msg,
+									    desc);
 				md.Run ();
 				md.Destroy ();
 
@@ -301,46 +301,45 @@ namespace FSpot.Tools.MergeDb
 			to_store.Commit (newp);
 		}
 
-		SafeUri FindImportDestination (SafeUri uri, DateTime time)
-		{
-			// Find a new unique location inside the photo folder
-			string name = uri.GetFilename ();
-
-			var dest_uri = FSpot.Core.Global.PhotoUri.Append (time.Year.ToString ())
-										  .Append (String.Format ("{0:D2}", time.Month))
-										  .Append (String.Format ("{0:D2}", time.Day));
-			EnsureDirectory (dest_uri);
-
-			// If the destination we'd like to use is the file itself return that
-			if (dest_uri.Append (name) == uri)
-				return uri;
-
-			// Find an unused name
-			int i = 1;
-			var dest = dest_uri.Append (name);
-			var file = GLib.FileFactory.NewForUri (dest);
-			while (file.Exists) {
-				var filename = uri.GetFilenameWithoutExtension ();
-				var extension = uri.GetExtension ();
-				dest = dest_uri.Append (String.Format ("{0}-{1}{2}", filename, i++, extension));
-				file = GLib.FileFactory.NewForUri (dest);
-			}
-
-			return dest;
-		}
-
-		void EnsureDirectory (SafeUri uri)
-		{
-			var parts = uri.AbsolutePath.Split('/');
-			SafeUri current = new SafeUri (uri.Scheme + ":///", true);
-			foreach (string part in parts)
-			{
-				current = current.Append (part);
-				var file = GLib.FileFactory.NewForUri (current);
-				if (!file.Exists) {
-					file.MakeDirectory (null);
-				}
-			}
-		}
+        SafeUri FindImportDestination (SafeUri uri, DateTime time)
+        {
+            // Find a new unique location inside the photo folder
+            string name = uri.GetFilename ();
+
+            var dest_uri = FSpot.Core.Global.PhotoUri.Append (time.Year.ToString ())
+                                          .Append (String.Format ("{0:D2}", time.Month))
+                                          .Append (String.Format ("{0:D2}", time.Day));
+            EnsureDirectory (dest_uri);
+
+            // If the destination we'd like to use is the file itself return that
+            if (dest_uri.Append (name) == uri)
+                return uri;
+
+            // Find an unused name
+            int i = 1;
+            var dest = dest_uri.Append (name);
+            var file = GLib.FileFactory.NewForUri (dest);
+            while (file.Exists) {
+                var filename = uri.GetFilenameWithoutExtension ();
+                var extension = uri.GetExtension ();
+                dest = dest_uri.Append (String.Format ("{0}-{1}{2}", filename, i++, extension));
+                file = GLib.FileFactory.NewForUri (dest);
+            }
+
+            return dest;
+        }
+
+        void EnsureDirectory (SafeUri uri)
+        {
+            var parts = uri.AbsolutePath.Split('/');
+            SafeUri current = new SafeUri (uri.Scheme + ":///", true);
+            for (int i = 0; i < parts.Length; i++) {
+                current = current.Append (parts [i]);
+                var file = GLib.FileFactory.NewForUri (current);
+                if (!file.Exists) {
+                    file.MakeDirectory (null);
+                }
+            }
+        }
 	}
 }
diff --git a/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDbDialog.cs b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDbDialog.cs
index 2a270db..382c7e6 100644
--- a/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDbDialog.cs
+++ b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDbDialog.cs
@@ -30,8 +30,9 @@
 //
 
 using System;
-
+using FSpot;
 using FSpot.Core;
+using FSpot.Query;
 
 namespace FSpot.Tools.MergeDb
 {
@@ -95,8 +96,10 @@ namespace FSpot.Tools.MergeDb
 			get {
 				if (allrolls_radio.Active)
 					return null;
-
-				return newrolls_radio.Active ? rolls : new Roll [] {rolls [rolls_combo.Active]};
+				if (newrolls_radio.Active)
+					return rolls;
+				else
+					return new Roll [] {rolls [rolls_combo.Active]};
 			}
 		}
 
diff --git a/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/PickFolderDialog.cs b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/PickFolderDialog.cs
index 981cc24..c71dfbf 100644
--- a/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/PickFolderDialog.cs
+++ b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/PickFolderDialog.cs
@@ -30,10 +30,10 @@
 //
 
 using System;
-
-using Hyena;
-
+using FSpot;
+using FSpot.Query;
 using Mono.Unix;
+using Hyena;
 
 namespace FSpot.Tools.MergeDb
 {
@@ -61,7 +61,10 @@ namespace FSpot.Tools.MergeDb
 		public string Run ()
 		{
 			pickfolder_dialog.ShowAll ();
-			return pickfolder_dialog.Run () == -6 ? pickfolder_chooser.Filename : null;
+			if (pickfolder_dialog.Run () == -6)
+				return pickfolder_chooser.Filename;
+			else
+				return null;
 		}
 
 		public Gtk.Dialog Dialog {
diff --git a/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/FSpot.Tools.RawPlusJpeg.csproj b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/FSpot.Tools.RawPlusJpeg.csproj
index 13cf580..e037111 100644
--- a/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/FSpot.Tools.RawPlusJpeg.csproj
+++ b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/FSpot.Tools.RawPlusJpeg.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Tools.RawPlusJpeg</RootNamespace>
     <AssemblyName>FSpot.Tools.RawPlusJpeg</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -75,8 +55,6 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
   </ItemGroup>
   <ItemGroup>
@@ -102,20 +80,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="Resources\" />
+    <Folder Include="FSpot.Tools.RawPlusJpeg\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/FSpot.Tools.RawPlusJpeg/RawPlusJpeg.cs b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/FSpot.Tools.RawPlusJpeg/RawPlusJpeg.cs
index 59c944d..3ce0a74 100644
--- a/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/FSpot.Tools.RawPlusJpeg/RawPlusJpeg.cs
+++ b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/FSpot.Tools.RawPlusJpeg/RawPlusJpeg.cs
@@ -30,12 +30,14 @@
 using System;
 using System.Collections.Generic;
 
+using Gtk;
+
+using FSpot;
 using FSpot.Core;
+using FSpot.UI.Dialog;
 using FSpot.Extensions;
 using FSpot.Imaging;
 
-using Gtk;
-
 using Hyena;
 using Hyena.Widgets;
 
diff --git a/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/FSpot.Tools.RetroactiveRoll.csproj b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/FSpot.Tools.RetroactiveRoll.csproj
index 283c788..db05d44 100644
--- a/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/FSpot.Tools.RetroactiveRoll.csproj
+++ b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/FSpot.Tools.RetroactiveRoll.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Tools.RetroactiveRoll</RootNamespace>
     <AssemblyName>FSpot.Tools.RetroactiveRoll</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -93,20 +73,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Tools.RetroactiveRoll\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/FSpot.Tools.RetroactiveRoll/RetroactiveRoll.cs b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/FSpot.Tools.RetroactiveRoll/RetroactiveRoll.cs
index 5916e0d..697644d 100644
--- a/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/FSpot.Tools.RetroactiveRoll/RetroactiveRoll.cs
+++ b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/FSpot.Tools.RetroactiveRoll/RetroactiveRoll.cs
@@ -29,12 +29,12 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
-
+using FSpot;
 using FSpot.Core;
 using FSpot.Extensions;
-
+using System;
 using Hyena;
+
 using Hyena.Data.Sqlite;
 
 namespace FSpot.Tools.RetroactiveRoll
diff --git a/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/FSpot.Tools.ScreensaverConfig.csproj b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/FSpot.Tools.ScreensaverConfig.csproj
index 078eee2..66876b7 100644
--- a/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/FSpot.Tools.ScreensaverConfig.csproj
+++ b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/FSpot.Tools.ScreensaverConfig.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Tools.ScreensaverConfig</RootNamespace>
     <AssemblyName>FSpot.Tools.ScreensaverConfig</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -78,8 +58,6 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gtk-sharp-beans">
       <HintPath>..\..\..\..\lib\gtk-sharp-beans\gtk-sharp-beans.dll</HintPath>
@@ -100,20 +78,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Tools.ScreensaverConfig\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/FSpot.Tools.ScreensaverConfig/ScreensaverConfig.cs b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/FSpot.Tools.ScreensaverConfig/ScreensaverConfig.cs
index e554cf0..fe6f4a6 100644
--- a/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/FSpot.Tools.ScreensaverConfig/ScreensaverConfig.cs
+++ b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/FSpot.Tools.ScreensaverConfig/ScreensaverConfig.cs
@@ -30,13 +30,14 @@
 using System;
 using System.Reflection;
 
+using Gtk;
+
+using FSpot;
 using FSpot.Core;
-using FSpot.Extensions;
 using FSpot.UI.Dialog;
+using FSpot.Extensions;
 using FSpot.Widgets;
 
-using Gtk;
-
 namespace FSpot.Tools.ScreensaverConfig
 {
 	public class ScreensaverConfig : ICommand
diff --git a/src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Addins.Transitions/Cover.cs b/src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Addins.Transitions/Cover.cs
index d0389ab..277c3a7 100644
--- a/src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Addins.Transitions/Cover.cs
+++ b/src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Addins.Transitions/Cover.cs
@@ -28,14 +28,13 @@
 //
 
 using System;
+using Mono.Unix;
 
 using Cairo;
-
-using FSpot.Transitions;
-
 using Gdk;
 
-using Mono.Unix;
+using FSpot.Utils;
+using FSpot.Transitions;
 
 using Color = Cairo.Color;
 
diff --git a/src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Transitions.Cover.csproj b/src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Transitions.Cover.csproj
index acbe665..e3efb67 100644
--- a/src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Transitions.Cover.csproj
+++ b/src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Transitions.Cover.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Addins.Transitions</RootNamespace>
     <AssemblyName>FSpot.Transitions.Cover</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -75,29 +55,19 @@
     </MonoDevelop>
   </ProjectExtensions>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Addins.Transitions\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Cairo" />
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Posix" />
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\..\Core\FSpot.Utils\FSpot.Utils.csproj">
+      <Project>{CE160879-1BF0-4711-A18F-FDA2772900FA}</Project>
+      <Name>FSpot.Utils</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\..\Core\FSpot.Gui\FSpot.Gui.csproj">
       <Project>{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}</Project>
       <Name>FSpot.Gui</Name>
diff --git a/src/Extensions/Transitions/FSpot.Transitions.Dissolve/FSpot.Addins.Transitions/Dissolve.cs b/src/Extensions/Transitions/FSpot.Transitions.Dissolve/FSpot.Addins.Transitions/Dissolve.cs
index 4229a80..bb65a7d 100644
--- a/src/Extensions/Transitions/FSpot.Transitions.Dissolve/FSpot.Addins.Transitions/Dissolve.cs
+++ b/src/Extensions/Transitions/FSpot.Transitions.Dissolve/FSpot.Addins.Transitions/Dissolve.cs
@@ -28,14 +28,13 @@
 //
 
 using System;
+using Mono.Unix;
 
 using Cairo;
-
-using FSpot.Transitions;
-
 using Gdk;
 
-using Mono.Unix;
+using FSpot.Utils;
+using FSpot.Transitions;
 
 using Color = Cairo.Color;
 
diff --git a/src/Extensions/Transitions/FSpot.Transitions.Dissolve/FSpot.Transitions.Dissolve.csproj b/src/Extensions/Transitions/FSpot.Transitions.Dissolve/FSpot.Transitions.Dissolve.csproj
index a30eea5..791a0d1 100644
--- a/src/Extensions/Transitions/FSpot.Transitions.Dissolve/FSpot.Transitions.Dissolve.csproj
+++ b/src/Extensions/Transitions/FSpot.Transitions.Dissolve/FSpot.Transitions.Dissolve.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Addins.Transitions</RootNamespace>
     <AssemblyName>FSpot.Transitions.Dissolve</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,25 +29,11 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Addins.Transitions\" />
+    <Folder Include="Resources\" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Resources\DissolveTransition.addin.xml">
@@ -74,6 +41,10 @@
     </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\..\Core\FSpot.Utils\FSpot.Utils.csproj">
+      <Project>{CE160879-1BF0-4711-A18F-FDA2772900FA}</Project>
+      <Name>FSpot.Utils</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\..\Core\FSpot.Gui\FSpot.Gui.csproj">
       <Project>{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}</Project>
       <Name>FSpot.Gui</Name>
@@ -81,7 +52,6 @@
   </ItemGroup>
   <ItemGroup>
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Cairo" />
     <Reference Include="Mono.Posix" />
   </ItemGroup>
diff --git a/src/Extensions/Transitions/FSpot.Transitions.Push/FSpot.Addins.Transitions/Push.cs b/src/Extensions/Transitions/FSpot.Transitions.Push/FSpot.Addins.Transitions/Push.cs
index e063051..1f5c63a 100644
--- a/src/Extensions/Transitions/FSpot.Transitions.Push/FSpot.Addins.Transitions/Push.cs
+++ b/src/Extensions/Transitions/FSpot.Transitions.Push/FSpot.Addins.Transitions/Push.cs
@@ -28,14 +28,13 @@
 //
 
 using System;
+using Mono.Unix;
 
 using Cairo;
-
-using FSpot.Transitions;
-
 using Gdk;
 
-using Mono.Unix;
+using FSpot.Utils;
+using FSpot.Transitions;
 
 using Color = Cairo.Color;
 
diff --git a/src/Extensions/Transitions/FSpot.Transitions.Push/FSpot.Transitions.Push.csproj b/src/Extensions/Transitions/FSpot.Transitions.Push/FSpot.Transitions.Push.csproj
index 979cb52..629004f 100644
--- a/src/Extensions/Transitions/FSpot.Transitions.Push/FSpot.Transitions.Push.csproj
+++ b/src/Extensions/Transitions/FSpot.Transitions.Push/FSpot.Transitions.Push.csproj
@@ -1,5 +1,5 @@
-ï<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -10,25 +10,7 @@
     <RootNamespace>FSpot.Addins.Transitions</RootNamespace>
     <AssemblyName>FSpot.Transitions.Push</AssemblyName>
     <ReleaseVersion>0.9.0</ReleaseVersion>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,7 +21,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -48,7 +29,6 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
@@ -56,10 +36,13 @@
       <Project>{05A7FEC4-974A-40EB-AFB8-14E523EEEFFB}</Project>
       <Name>FSpot.Gui</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\..\Core\FSpot.Utils\FSpot.Utils.csproj">
+      <Project>{CE160879-1BF0-4711-A18F-FDA2772900FA}</Project>
+      <Name>FSpot.Utils</Name>
+    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="Mono.Cairo" />
     <Reference Include="Mono.Posix" />
   </ItemGroup>
@@ -69,21 +52,7 @@
     </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
-      <Visible>False</Visible>
-      <ProductName>Windows Installer 3.1</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
+    <Folder Include="FSpot.Addins.Transitions\" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="FSpot.Addins.Transitions\Push.cs" />
diff --git a/tools/copyrightify.py b/tools/copyrightify.py
old mode 100644
new mode 100755
diff --git a/tools/f-spot-import b/tools/f-spot-import
old mode 100644
new mode 100755
diff --git a/tools/f-spot-screensaver b/tools/f-spot-screensaver
old mode 100644
new mode 100755
diff --git a/tools/f-spot-sqlite-upgrade b/tools/f-spot-sqlite-upgrade
old mode 100644
new mode 100755



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