[Pkg-cli-apps-commits] [SCM] f-spot branch, upstream-experimental, updated. upstream/0.7.1-1-gfa90f4c

Iain Lane laney at ubuntu.com
Wed Aug 11 21:40:50 UTC 2010


The following commit has been merged in the upstream-experimental branch:
commit fa90f4c087edf17230b603a81d089d7e08b370c2
Author: Iain Lane <laney at ubuntu.com>
Date:   Wed Aug 11 19:48:48 2010 +0100

    Imported Upstream version 0.7.2

diff --git a/Makefile.am b/Makefile.am
index 90287ba..5190a22 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -8,7 +8,6 @@ SUBDIRS = 		\
 	tools		\
 	po			\
 	src			\
-	extensions	\
 	tests
 
 schemadir = $(sysconfdir)/gconf/schemas
@@ -48,9 +47,16 @@ else
 install-data-local:
 endif
 
+csharp:
+	@pushd .; \
+	echo ""; \
+	echo "Starting csharp with Gtk#, Hyena, FSpot, etc referenced"; \
+	csharp -lib:bin/ -pkg:glib-sharp-2.0 -pkg:gtk-sharp-2.0 -pkg:gconf-sharp-2.0 -pkg:mono-addins -r:lib/gio-sharp/gio/gio-sharp.dll -r:lib/unique-sharp/unique/unique-sharp.dll -reference:bin/f-spot.exe $(addprefix "-reference:", $(wildcard bin/*.dll)); \
+	popd;
+
 run:
 	@pushd bin/; \
-	../src/f-spot --uninstalled --debug; \
+	../src/Clients/MainApp/f-spot --uninstalled --debug; \
 	popd;
 
 
diff --git a/Makefile.in b/Makefile.in
index a984cdd..847f981 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -39,6 +39,7 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
 	$(top_srcdir)/build/m4/shave/shave-libtool.in \
 	$(top_srcdir)/build/m4/shave/shave.in $(top_srcdir)/configure \
+	$(top_srcdir)/src/Core/FSpot.Core/FSpot.Core/Defines.cs.in \
 	AUTHORS COPYING ChangeLog NEWS TODO config.guess config.sub \
 	depcomp install-sh ltmain.sh missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -51,6 +52,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -59,7 +61,8 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = build/m4/shave/shave build/m4/shave/shave-libtool
+CONFIG_CLEAN_FILES = build/m4/shave/shave build/m4/shave/shave-libtool \
+	src/Core/FSpot.Core/FSpot.Core/Defines.cs
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
@@ -149,6 +152,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -158,9 +165,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -174,6 +178,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -201,6 +206,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -297,14 +303,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -366,7 +370,6 @@ SUBDIRS = \
 	tools		\
 	po			\
 	src			\
-	extensions	\
 	tests
 
 schemadir = $(sysconfdir)/gconf/schemas
@@ -454,6 +457,8 @@ build/m4/shave/shave: $(top_builddir)/config.status $(top_srcdir)/build/m4/shave
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 build/m4/shave/shave-libtool: $(top_builddir)/config.status $(top_srcdir)/build/m4/shave/shave-libtool.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
+src/Core/FSpot.Core/FSpot.Core/Defines.cs: $(top_builddir)/config.status $(top_srcdir)/src/Core/FSpot.Core/FSpot.Core/Defines.cs.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -927,9 +932,16 @@ uninstall-am: uninstall-schemaDATA
 @GCONF_SCHEMAS_INSTALL_TRUE@	-GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$(schema_DATA)
 @GCONF_SCHEMAS_INSTALL_FALSE at install-data-local:
 
+csharp:
+	@pushd .; \
+	echo ""; \
+	echo "Starting csharp with Gtk#, Hyena, FSpot, etc referenced"; \
+	csharp -lib:bin/ -pkg:glib-sharp-2.0 -pkg:gtk-sharp-2.0 -pkg:gconf-sharp-2.0 -pkg:mono-addins -r:lib/gio-sharp/gio/gio-sharp.dll -r:lib/unique-sharp/unique/unique-sharp.dll -reference:bin/f-spot.exe $(addprefix "-reference:", $(wildcard bin/*.dll)); \
+	popd;
+
 run:
 	@pushd bin/; \
-	../src/f-spot --uninstalled --debug; \
+	../src/Clients/MainApp/f-spot --uninstalled --debug; \
 	popd;
 
 test:
diff --git a/NEWS b/NEWS
index 41a2678..8adf357 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,25 @@
+f-spot 0.7.2 - Aug 11 2010 - Retooled
+-------------------------------------
+- Third release of the unstable 0.7 development series. Features a fully
+  restructured source tree with full Monodevelop build support. Solves some of
+  the regressions introduced in 0.7.1.
+ - Reorganized source tree for clarity, builds with Monodevelop.
+ - Switched from QueuedSqliteDatabase to HyenaSqliteConnection (Mike Gemünde)
+ - Build tweaks (Christian Krause)
+ - More GtkBuilder transition (Eric Faehnrich)
+ - Reliability improvements (lots of them) for metadata handling (Mike Gemünde,
+   Ruben Vermeersch)
+ - Prune empty directories when deleting photos, import usability enhancements
+   (Mike Wallick)
+ - Big race-condition fix in import (Paul Wellner Bou)
+ - Loads of improvements to Taglib#, in terms of handling broken files, extra
+   format support (Pentax, Panasonic, Leica), stability and correctness (Ruben
+   Vermeersch)
+ - Reporting of import errors.
+ - Speedups to repeated imports of the same directory.
+ - Piles of cleanups and general stability improvements.
+ - Over 50 bugs closed (http://bit.ly/cqpC3y)
+
 f-spot 0.7.1 - Jul 14 2010 - The Big Switch
 -------------------------------------------
 - Second release of the unstable 0.7 development series. Most notably
diff --git a/aclocal.m4 b/aclocal.m4
index add44b9..411dcd4 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -64,148 +64,6 @@ AC_DEFUN([AM_GCONF_SOURCE_2],
   AM_CONDITIONAL([GCONF_SCHEMAS_INSTALL], [test "$enable_schemas_install" != no])
 ])
 
-dnl GNOME_COMPILE_WARNINGS
-dnl Turn on many useful compiler warnings
-dnl For now, only works on GCC
-AC_DEFUN([GNOME_COMPILE_WARNINGS],[
-    dnl ******************************
-    dnl More compiler warnings
-    dnl ******************************
-
-    AC_ARG_ENABLE(compile-warnings, 
-                  AC_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@],
-                                 [Turn on compiler warnings]),,
-                  [enable_compile_warnings="m4_default([$1],[yes])"])
-
-    warnCFLAGS=
-    if test "x$GCC" != xyes; then
-	enable_compile_warnings=no
-    fi
-
-    warning_flags=
-    realsave_CFLAGS="$CFLAGS"
-
-    case "$enable_compile_warnings" in
-    no)
-	warning_flags=
-	;;
-    minimum)
-	warning_flags="-Wall"
-	;;
-    yes)
-	warning_flags="-Wall -Wmissing-prototypes"
-	;;
-    maximum|error)
-	warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith"
-	CFLAGS="$warning_flags $CFLAGS"
-	for option in -Wno-sign-compare; do
-		SAVE_CFLAGS="$CFLAGS"
-		CFLAGS="$CFLAGS $option"
-		AC_MSG_CHECKING([whether gcc understands $option])
-		AC_TRY_COMPILE([], [],
-			has_option=yes,
-			has_option=no,)
-		CFLAGS="$SAVE_CFLAGS"
-		AC_MSG_RESULT($has_option)
-		if test $has_option = yes; then
-		  warning_flags="$warning_flags $option"
-		fi
-		unset has_option
-		unset SAVE_CFLAGS
-	done
-	unset option
-	if test "$enable_compile_warnings" = "error" ; then
-	    warning_flags="$warning_flags -Werror"
-	fi
-	;;
-    *)
-	AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
-	;;
-    esac
-    CFLAGS="$realsave_CFLAGS"
-    AC_MSG_CHECKING(what warning flags to pass to the C compiler)
-    AC_MSG_RESULT($warning_flags)
-
-    AC_ARG_ENABLE(iso-c,
-                  AC_HELP_STRING([--enable-iso-c],
-                                 [Try to warn if code is not ISO C ]),,
-                  [enable_iso_c=no])
-
-    AC_MSG_CHECKING(what language compliance flags to pass to the C compiler)
-    complCFLAGS=
-    if test "x$enable_iso_c" != "xno"; then
-	if test "x$GCC" = "xyes"; then
-	case " $CFLAGS " in
-	    *[\ \	]-ansi[\ \	]*) ;;
-	    *) complCFLAGS="$complCFLAGS -ansi" ;;
-	esac
-	case " $CFLAGS " in
-	    *[\ \	]-pedantic[\ \	]*) ;;
-	    *) complCFLAGS="$complCFLAGS -pedantic" ;;
-	esac
-	fi
-    fi
-    AC_MSG_RESULT($complCFLAGS)
-
-    WARN_CFLAGS="$warning_flags $complCFLAGS"
-    AC_SUBST(WARN_CFLAGS)
-])
-
-dnl For C++, do basically the same thing.
-
-AC_DEFUN([GNOME_CXX_WARNINGS],[
-  AC_ARG_ENABLE(cxx-warnings,
-                AC_HELP_STRING([--enable-cxx-warnings=@<:@no/minimum/yes@:>@]
-                               [Turn on compiler warnings.]),,
-                [enable_cxx_warnings="m4_default([$1],[minimum])"])
-
-  AC_MSG_CHECKING(what warning flags to pass to the C++ compiler)
-  warnCXXFLAGS=
-  if test "x$GXX" != xyes; then
-    enable_cxx_warnings=no
-  fi
-  if test "x$enable_cxx_warnings" != "xno"; then
-    if test "x$GXX" = "xyes"; then
-      case " $CXXFLAGS " in
-      *[\ \	]-Wall[\ \	]*) ;;
-      *) warnCXXFLAGS="-Wall -Wno-unused" ;;
-      esac
-
-      ## -W is not all that useful.  And it cannot be controlled
-      ## with individual -Wno-xxx flags, unlike -Wall
-      if test "x$enable_cxx_warnings" = "xyes"; then
-	warnCXXFLAGS="$warnCXXFLAGS -Wshadow -Woverloaded-virtual"
-      fi
-    fi
-  fi
-  AC_MSG_RESULT($warnCXXFLAGS)
-
-   AC_ARG_ENABLE(iso-cxx,
-                 AC_HELP_STRING([--enable-iso-cxx],
-                                [Try to warn if code is not ISO C++ ]),,
-                 [enable_iso_cxx=no])
-
-   AC_MSG_CHECKING(what language compliance flags to pass to the C++ compiler)
-   complCXXFLAGS=
-   if test "x$enable_iso_cxx" != "xno"; then
-     if test "x$GXX" = "xyes"; then
-      case " $CXXFLAGS " in
-      *[\ \	]-ansi[\ \	]*) ;;
-      *) complCXXFLAGS="$complCXXFLAGS -ansi" ;;
-      esac
-
-      case " $CXXFLAGS " in
-      *[\ \	]-pedantic[\ \	]*) ;;
-      *) complCXXFLAGS="$complCXXFLAGS -pedantic" ;;
-      esac
-     fi
-   fi
-  AC_MSG_RESULT($complCXXFLAGS)
-
-  WARN_CXXFLAGS="$CXXFLAGS $warnCXXFLAGS $complCXXFLAGS"
-  AC_SUBST(WARN_CXXFLAGS)
-])
-
 dnl Do not call GNOME_DOC_DEFINES directly.  It is split out from
 dnl GNOME_DOC_INIT to allow gnome-doc-utils to bootstrap off itself.
 AC_DEFUN([GNOME_DOC_DEFINES],
@@ -10248,5 +10106,6 @@ m4_include([build/m4/shamrock/programs.m4])
 m4_include([build/m4/f-spot/flickrnet.m4])
 m4_include([build/m4/f-spot/gnome-keyring-sharp.m4])
 m4_include([build/m4/f-spot/gtk-sharp.m4])
+m4_include([build/m4/f-spot/libfspot.m4])
 m4_include([build/m4/f-spot/mono-addins.m4])
 m4_include([acinclude.m4])
diff --git a/build/Makefile.in b/build/Makefile.in
index 72820d5..abbc05b 100644
--- a/build/Makefile.in
+++ b/build/Makefile.in
@@ -45,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -108,6 +109,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -117,9 +122,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -133,6 +135,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -160,6 +163,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -256,14 +260,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/build/build.environment.mk b/build/build.environment.mk
index 4b75af7..231e28e 100644
--- a/build/build.environment.mk
+++ b/build/build.environment.mk
@@ -29,7 +29,6 @@ LINK_MONO_POSIX = -r:Mono.Posix
 LINK_MONO_CAIRO = -r:Mono.Cairo
 LINK_MONO_SIMD = -r:Mono.Simd
 LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
 LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
 
 LINK_KEYRING = $(KEYRINGSHARP_LIBS)
@@ -91,7 +90,7 @@ LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
 LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
 
 # FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
 LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
 LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
 
@@ -100,6 +99,10 @@ REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
 LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
 LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
 
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
 # FSpot.JobScheduler
 REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
 LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
@@ -115,17 +118,18 @@ REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DB
 LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
 LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
 
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
 
 # FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
             $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
             $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
 # FIXME: do not link executables
 LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
 LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
@@ -147,10 +151,10 @@ LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
 LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
 REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
 
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
 LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
 LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
 
 REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
 LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
diff --git a/build/build.rules.mk b/build/build.rules.mk
index 3f054d4..6686e57 100644
--- a/build/build.rules.mk
+++ b/build/build.rules.mk
@@ -48,7 +48,7 @@ OUTPUT_FILES = \
 moduledir = $(INSTALL_DIR_RESOLVED)
 module_SCRIPTS = $(OUTPUT_FILES)
 
-all: $(ASSEMBLY_FILE) theme-icons
+all-local: theme-icons
 
 run: 
 	@pushd $(top_builddir); \
diff --git a/build/m4/Makefile.in b/build/m4/Makefile.in
index 8663156..47d6370 100644
--- a/build/m4/Makefile.in
+++ b/build/m4/Makefile.in
@@ -45,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -68,6 +69,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -77,9 +82,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -93,6 +95,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -120,6 +123,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -216,14 +220,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/build/m4/f-spot/libfspot.m4 b/build/m4/f-spot/libfspot.m4
new file mode 100644
index 0000000..dc0b6f6
--- /dev/null
+++ b/build/m4/f-spot/libfspot.m4
@@ -0,0 +1,10 @@
+AC_DEFUN([FSPOT_CHECK_LIBFSPOT],
+[
+	AC_ISC_POSIX
+	AC_PROG_CC
+
+	AC_HEADER_STDC
+
+	AM_PATH_GLIB_2_0
+])
+
diff --git a/build/pkg-config/Makefile.in b/build/pkg-config/Makefile.in
index 9cc5c55..16bec0c 100644
--- a/build/pkg-config/Makefile.in
+++ b/build/pkg-config/Makefile.in
@@ -46,6 +46,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -92,6 +93,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -101,9 +106,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -117,6 +119,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -144,6 +147,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -240,14 +244,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/build/pkg-config/f-spot.pc.in b/build/pkg-config/f-spot.pc.in
index 75c0539..36bd330 100644
--- a/build/pkg-config/f-spot.pc.in
+++ b/build/pkg-config/f-spot.pc.in
@@ -6,4 +6,4 @@ libdir=@libdir@
 Name: F-Spot
 Description: F-Spot, Organise, enjoy and share your pictures
 Version: @VERSION@
-Libs: -r:${libdir}/f-spot/f-spot.exe -r:${libdir}/f-spot/FSpot.Core.dll -r:${libdir}/f-spot/FSpot.Utils.dll -r:${libdir}/f-spot/Cms.dll -r:${libdir}/f-spot/FSpot.Query.dll -r:${libdir}/f-spot/FSpot.JobScheduler.dll -r:${libdir}/f-spot/FSpot.Widgets.dll
+Libs: -r:${libdir}/f-spot/f-spot.exe -r:${libdir}/f-spot/FSpot.Core.dll -r:${libdir}/f-spot/FSpot.Utils.dll -r:${libdir}/f-spot/FSpot.Cms.dll -r:${libdir}/f-spot/FSpot.Query.dll -r:${libdir}/f-spot/FSpot.JobScheduler.dll -r:${libdir}/f-spot/FSpot.Gui.dll
diff --git a/configure b/configure
index b0ac335..8845382 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65 for f-spot 0.7.1.
+# Generated by GNU Autoconf 2.65 for f-spot 0.7.2.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=f-spot>.
 #
@@ -702,8 +702,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='f-spot'
 PACKAGE_TARNAME='f-spot'
-PACKAGE_VERSION='0.7.1'
-PACKAGE_STRING='f-spot 0.7.1'
+PACKAGE_VERSION='0.7.2'
+PACKAGE_STRING='f-spot 0.7.2'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=f-spot'
 PACKAGE_URL=''
 
@@ -743,7 +743,6 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_unique_file="src/main.cs"
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
@@ -753,9 +752,20 @@ V
 OBJC
 F77
 FC
+CXX
 AM_MAKEFLAGS
 MAKEFLAGS
 shavedir
+BUILD_TIME
+BUILD_HOST_CPU
+BUILD_HOST_OS
+BUILD_VENDOR_ID
+HYENA_PKG_CONFIG_FALSE
+HYENA_PKG_CONFIG_TRUE
+GMCS_FLAGS
+ENABLE_RELEASE
+ENABLE_RELEASE_FALSE
+ENABLE_RELEASE_TRUE
 GNOME_ICON_THEME_PREFIX
 LIBJPEG
 MKINSTALLDIRS
@@ -796,8 +806,6 @@ GCONF_SCHEMAS_INSTALL_TRUE
 GCONF_SCHEMA_FILE_DIR
 GCONF_SCHEMA_CONFIG_SOURCE
 GCONFTOOL
-NOGCONF_FALSE
-NOGCONF_TRUE
 GNOME_SHARP_LIBS
 GNOME_SHARP_CFLAGS
 GIO_LIBS
@@ -807,21 +815,6 @@ F_CFLAGS
 GAPI2CODEGEN
 GAPI2PARSER
 GAPI2FIXUP
-GLIB_MKENUMS
-GOBJECT_QUERY
-GLIB_GENMARSHAL
-GLIB_LIBS
-GLIB_CFLAGS
-WARN_CFLAGS
-CXXCPP
-am__fastdepCXX_FALSE
-am__fastdepCXX_TRUE
-CXXDEPMODE
-ac_ct_CXX
-CXXFLAGS
-CXX
-HYENA_PKG_CONFIG_FALSE
-HYENA_PKG_CONFIG_TRUE
 NUNIT_LIBS
 NUNIT_CFLAGS
 ENABLE_TESTS_FALSE
@@ -842,6 +835,11 @@ GLIBSHARP_LIBS
 GLIBSHARP_CFLAGS
 GTKSHARP_LIBS
 GTKSHARP_CFLAGS
+GLIB_MKENUMS
+GOBJECT_QUERY
+GLIB_GENMARSHAL
+GLIB_LIBS
+GLIB_CFLAGS
 MONO
 MCS
 MONO_MODULE_LIBS
@@ -1019,11 +1017,8 @@ with_help_dir
 with_omf_dir
 with_help_formats
 enable_scrollkeeper
-enable_tests
-enable_compile_warnings
-enable_iso_c
 enable_glibtest
-enable_gconf
+enable_tests
 with_gconf_source
 with_gconf_schema_file_dir
 enable_schemas_install
@@ -1031,6 +1026,8 @@ with_turtle
 with_gnome_screensaver
 with_gnome_screensaver_privlibexecdir
 with_gnome_screensaver_themesdir
+enable_release
+with_vendor_build_id
 enable_shave
 '
       ac_precious_vars='build_alias
@@ -1061,10 +1058,6 @@ FLICKRNET_CFLAGS
 FLICKRNET_LIBS
 NUNIT_CFLAGS
 NUNIT_LIBS
-CXX
-CXXFLAGS
-CCC
-CXXCPP
 F_CFLAGS
 F_LIBS
 GIO_CFLAGS
@@ -1626,7 +1619,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures f-spot 0.7.1 to adapt to many kinds of systems.
+\`configure' configures f-spot 0.7.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1696,7 +1689,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of f-spot 0.7.1:";;
+     short | recursive ) echo "Configuration of f-spot 0.7.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1716,14 +1709,11 @@ Optional Features:
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-user-help      Enable building the user-help [[default=auto]]
   --disable-scrollkeeper  do not make updates to the scrollkeeper database
-  --enable-tests          Enable NUnit tests
-  --enable-compile-warnings=[no/minimum/yes/maximum/error]
-                          Turn on compiler warnings
-  --enable-iso-c          Try to warn if code is not ISO C
   --disable-glibtest      do not try to compile and run a test GLIB program
-  --disable-gconf         build without gconf preference backend
+  --enable-tests          Enable NUnit tests
   --disable-schemas-install
                           Disable the schemas installation
+  --enable-release        Use release configuration
   --enable-shave          use shave to make the build pretty [[default=yes]]
 
 Optional Packages:
@@ -1744,6 +1734,8 @@ Optional Packages:
  --with-gnome-screensaver=PREFIX  set gnome gnome-screensaver prefix
  --with-gnome-screensaver-privlibexecdir=DIR  set gnome-screensaver privlibexecdir
  --with-gnome-screensaver-themesdir=DIR  set gnome-screensaver themesdir
+  --with-vendor-build-id=<vendor-build-id>
+                          Set a vendor build ID, recommended for packagers
 
 Some influential environment variables:
   CC          C compiler command
@@ -1790,9 +1782,6 @@ Some influential environment variables:
   NUNIT_CFLAGS
               C compiler flags for NUNIT, overriding pkg-config
   NUNIT_LIBS  linker flags for NUNIT, overriding pkg-config
-  CXX         C++ compiler command
-  CXXFLAGS    C++ compiler flags
-  CXXCPP      C++ preprocessor
   F_CFLAGS    C compiler flags for F, overriding pkg-config
   F_LIBS      linker flags for F, overriding pkg-config
   GIO_CFLAGS  C compiler flags for GIO, overriding pkg-config
@@ -1893,7 +1882,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-f-spot configure 0.7.1
+f-spot configure 0.7.2
 generated by GNU Autoconf 2.65
 
 Copyright (C) 2009 Free Software Foundation, Inc.
@@ -2168,127 +2157,6 @@ fi
 
 } # ac_fn_c_try_run
 
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_compile
-
-# ac_fn_cxx_try_cpp LINENO
-# ------------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
-	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_cpp
-
-# ac_fn_cxx_try_link LINENO
-# -------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_link
-
 # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
 # -------------------------------------------------------
 # Tests whether HEADER exists, giving a warning if it cannot be compiled using
@@ -2385,7 +2253,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by f-spot $as_me 0.7.1, which was
+It was created by f-spot $as_me 0.7.2, which was
 generated by GNU Autoconf 2.65.  Invocation command line was
 
   $ $0 $@
@@ -3194,7 +3062,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='f-spot'
- VERSION='0.7.1'
+ VERSION='0.7.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3340,7 +3208,8 @@ fi
 
 ac_config_headers="$ac_config_headers config.h"
 
-ACLOCAL_AMFLAGS="-I build/m4/f-spot -I build/m4/shamrock -I build/m4/shave \${ACLOCAL_FLAGS}"
+
+ACLOCAL_AMFLAGS="-I build/m4/shamrock -I build/m4/f-spot -I build/m4/shave \${ACLOCAL_FLAGS}"
 
 
 
@@ -5562,13 +5431,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5565: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:5434: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5568: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:5437: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5571: output\"" >&5)
+  (eval echo "\"\$as_me:5440: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -6773,7 +6642,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 6776 "configure"' > conftest.$ac_ext
+  echo '#line 6645 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -8299,11 +8168,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8302: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8171: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8306: \$? = $ac_status" >&5
+   echo "$as_me:8175: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8638,11 +8507,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8641: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8510: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8645: \$? = $ac_status" >&5
+   echo "$as_me:8514: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8743,11 +8612,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8746: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8615: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8750: \$? = $ac_status" >&5
+   echo "$as_me:8619: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -8798,11 +8667,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8801: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8670: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8805: \$? = $ac_status" >&5
+   echo "$as_me:8674: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -11168,7 +11037,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11171 "configure"
+#line 11040 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11264,7 +11133,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11267 "configure"
+#line 11136 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11500,7 +11369,7 @@ API_VERSION=0.7
 
 ASM_VERSION=0.7.0.0
 
-DISPLAY_VERSION="0.7.1"
+DISPLAY_VERSION="0.7.2"
 
 
 
@@ -12135,8 +12004,7 @@ fi
 
 
 
-	for asm in $(echo "mono,2.0,Mono.Data.SqliteClient
-    Mono.Posix
+	for asm in $(echo "mono,2.0,Mono.Posix
     Mono.Simd
     Mono.Data
     System
@@ -12166,720 +12034,63 @@ $as_echo "not found" >&6; }
 
 
 
-	GTKSHARP_REQUIRED=2.12.2
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKSHARP" >&5
-$as_echo_n "checking for GTKSHARP... " >&6; }
-
-if test -n "$GTKSHARP_CFLAGS"; then
-    pkg_cv_GTKSHARP_CFLAGS="$GTKSHARP_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GTKSHARP_CFLAGS=`$PKG_CONFIG --cflags "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$GTKSHARP_LIBS"; then
-    pkg_cv_GTKSHARP_LIBS="$GTKSHARP_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GTKSHARP_LIBS=`$PKG_CONFIG --libs "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        GTKSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
-        else
-	        GTKSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$GTKSHARP_PKG_ERRORS" >&5
-
-	as_fn_error "Package requirements (gtk-sharp-2.0 >= $GTKSHARP_REQUIRED) were not met:
-
-$GTKSHARP_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables GTKSHARP_CFLAGS
-and GTKSHARP_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" "$LINENO" 5
-elif test $pkg_failed = untried; then
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables GTKSHARP_CFLAGS
-and GTKSHARP_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details." "$LINENO" 5; }
-else
-	GTKSHARP_CFLAGS=$pkg_cv_GTKSHARP_CFLAGS
-	GTKSHARP_LIBS=$pkg_cv_GTKSHARP_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	:
-fi
-
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIBSHARP" >&5
-$as_echo_n "checking for GLIBSHARP... " >&6; }
-
-if test -n "$GLIBSHARP_CFLAGS"; then
-    pkg_cv_GLIBSHARP_CFLAGS="$GLIBSHARP_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GLIBSHARP_CFLAGS=`$PKG_CONFIG --cflags "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$GLIBSHARP_LIBS"; then
-    pkg_cv_GLIBSHARP_LIBS="$GLIBSHARP_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GLIBSHARP_LIBS=`$PKG_CONFIG --libs "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        GLIBSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
-        else
-	        GLIBSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$GLIBSHARP_PKG_ERRORS" >&5
-
-	as_fn_error "Package requirements (glib-sharp-2.0 >= $GTKSHARP_REQUIRED) were not met:
-
-$GLIBSHARP_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables GLIBSHARP_CFLAGS
-and GLIBSHARP_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" "$LINENO" 5
-elif test $pkg_failed = untried; then
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables GLIBSHARP_CFLAGS
-and GLIBSHARP_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details." "$LINENO" 5; }
-else
-	GLIBSHARP_CFLAGS=$pkg_cv_GLIBSHARP_CFLAGS
-	GLIBSHARP_LIBS=$pkg_cv_GLIBSHARP_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	:
-fi
-
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIBSHARP_2_12_7" >&5
-$as_echo_n "checking for GLIBSHARP_2_12_7... " >&6; }
-
-if test -n "$GLIBSHARP_2_12_7_CFLAGS"; then
-    pkg_cv_GLIBSHARP_2_12_7_CFLAGS="$GLIBSHARP_2_12_7_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= 2.12.7\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= 2.12.7") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GLIBSHARP_2_12_7_CFLAGS=`$PKG_CONFIG --cflags "glib-sharp-2.0 >= 2.12.7" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$GLIBSHARP_2_12_7_LIBS"; then
-    pkg_cv_GLIBSHARP_2_12_7_LIBS="$GLIBSHARP_2_12_7_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= 2.12.7\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= 2.12.7") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GLIBSHARP_2_12_7_LIBS=`$PKG_CONFIG --libs "glib-sharp-2.0 >= 2.12.7" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        GLIBSHARP_2_12_7_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-sharp-2.0 >= 2.12.7" 2>&1`
-        else
-	        GLIBSHARP_2_12_7_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-sharp-2.0 >= 2.12.7" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$GLIBSHARP_2_12_7_PKG_ERRORS" >&5
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                HAVE_GLIBSHARP_2_12_7=no
-elif test $pkg_failed = untried; then
-	HAVE_GLIBSHARP_2_12_7=no
-else
-	GLIBSHARP_2_12_7_CFLAGS=$pkg_cv_GLIBSHARP_2_12_7_CFLAGS
-	GLIBSHARP_2_12_7_LIBS=$pkg_cv_GLIBSHARP_2_12_7_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	HAVE_GLIBSHARP_2_12_7=yes
-fi
-	 if test "$HAVE_GLIBSHARP_2_12_7" = "yes"; then
-  HAVE_GLIBSHARP_2_12_7_TRUE=
-  HAVE_GLIBSHARP_2_12_7_FALSE='#'
-else
-  HAVE_GLIBSHARP_2_12_7_TRUE='#'
-  HAVE_GLIBSHARP_2_12_7_FALSE=
-fi
-
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKSHARP_A11Y" >&5
-$as_echo_n "checking for GTKSHARP_A11Y... " >&6; }
-
-if test -n "$GTKSHARP_A11Y_CFLAGS"; then
-    pkg_cv_GTKSHARP_A11Y_CFLAGS="$GTKSHARP_A11Y_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= 2.12.10\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= 2.12.10") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GTKSHARP_A11Y_CFLAGS=`$PKG_CONFIG --cflags "gtk-sharp-2.0 >= 2.12.10" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$GTKSHARP_A11Y_LIBS"; then
-    pkg_cv_GTKSHARP_A11Y_LIBS="$GTKSHARP_A11Y_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= 2.12.10\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= 2.12.10") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GTKSHARP_A11Y_LIBS=`$PKG_CONFIG --libs "gtk-sharp-2.0 >= 2.12.10" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        GTKSHARP_A11Y_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk-sharp-2.0 >= 2.12.10" 2>&1`
-        else
-	        GTKSHARP_A11Y_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk-sharp-2.0 >= 2.12.10" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$GTKSHARP_A11Y_PKG_ERRORS" >&5
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                gtksharp_with_a11y=no
-elif test $pkg_failed = untried; then
-	gtksharp_with_a11y=no
-else
-	GTKSHARP_A11Y_CFLAGS=$pkg_cv_GTKSHARP_A11Y_CFLAGS
-	GTKSHARP_A11Y_LIBS=$pkg_cv_GTKSHARP_A11Y_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	gtksharp_with_a11y=yes
-fi
-	 if test "x$gtksharp_with_a11y" = "xyes"; then
-  ENABLE_ATK_TRUE=
-  ENABLE_ATK_FALSE='#'
-else
-  ENABLE_ATK_TRUE='#'
-  ENABLE_ATK_FALSE=
-fi
-
-
-
-
-	GNOMEKEYRINGSHARP_REQUIRED=1.0
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for KEYRINGSHARP" >&5
-$as_echo_n "checking for KEYRINGSHARP... " >&6; }
-
-if test -n "$KEYRINGSHARP_CFLAGS"; then
-    pkg_cv_KEYRINGSHARP_CFLAGS="$KEYRINGSHARP_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-keyring-sharp-1.0 >= \$GNOMEKEYRINGSHARP_REQUIRED\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_KEYRINGSHARP_CFLAGS=`$PKG_CONFIG --cflags "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$KEYRINGSHARP_LIBS"; then
-    pkg_cv_KEYRINGSHARP_LIBS="$KEYRINGSHARP_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-keyring-sharp-1.0 >= \$GNOMEKEYRINGSHARP_REQUIRED\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_KEYRINGSHARP_LIBS=`$PKG_CONFIG --libs "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        KEYRINGSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>&1`
-        else
-	        KEYRINGSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$KEYRINGSHARP_PKG_ERRORS" >&5
-
-	as_fn_error "Package requirements (gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED) were not met:
-
-$KEYRINGSHARP_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables KEYRINGSHARP_CFLAGS
-and KEYRINGSHARP_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" "$LINENO" 5
-elif test $pkg_failed = untried; then
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables KEYRINGSHARP_CFLAGS
-and KEYRINGSHARP_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details." "$LINENO" 5; }
-else
-	KEYRINGSHARP_CFLAGS=$pkg_cv_KEYRINGSHARP_CFLAGS
-	KEYRINGSHARP_LIBS=$pkg_cv_KEYRINGSHARP_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	:
-fi
-
-
-
-	FLICKRNET_REQUIRED=2.0
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FLICKRNET" >&5
-$as_echo_n "checking for FLICKRNET... " >&6; }
-
-if test -n "$FLICKRNET_CFLAGS"; then
-    pkg_cv_FLICKRNET_CFLAGS="$FLICKRNET_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flickrnet >= \$FLICKRNET_REQUIRED\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "flickrnet >= $FLICKRNET_REQUIRED") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_FLICKRNET_CFLAGS=`$PKG_CONFIG --cflags "flickrnet >= $FLICKRNET_REQUIRED" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$FLICKRNET_LIBS"; then
-    pkg_cv_FLICKRNET_LIBS="$FLICKRNET_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flickrnet >= \$FLICKRNET_REQUIRED\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "flickrnet >= $FLICKRNET_REQUIRED") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_FLICKRNET_LIBS=`$PKG_CONFIG --libs "flickrnet >= $FLICKRNET_REQUIRED" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        FLICKRNET_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "flickrnet >= $FLICKRNET_REQUIRED" 2>&1`
-        else
-	        FLICKRNET_PKG_ERRORS=`$PKG_CONFIG --print-errors "flickrnet >= $FLICKRNET_REQUIRED" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$FLICKRNET_PKG_ERRORS" >&5
-
-	as_fn_error "Package requirements (flickrnet >= $FLICKRNET_REQUIRED) were not met:
-
-$FLICKRNET_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables FLICKRNET_CFLAGS
-and FLICKRNET_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" "$LINENO" 5
-elif test $pkg_failed = untried; then
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables FLICKRNET_CFLAGS
-and FLICKRNET_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details." "$LINENO" 5; }
-else
-	FLICKRNET_CFLAGS=$pkg_cv_FLICKRNET_CFLAGS
-	FLICKRNET_LIBS=$pkg_cv_FLICKRNET_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	:
-fi
-
-
-
-	NUNIT_REQUIRED=2.4.7
-
-	# Check whether --enable-tests was given.
-if test "${enable_tests+set}" = set; then :
-  enableval=$enable_tests; enable_tests=$enableval
-else
-  enable_tests="no"
-fi
-
-
-	if test "x$enable_tests" = "xno"; then
-		do_tests=no
-		 if false; then
-  ENABLE_TESTS_TRUE=
-  ENABLE_TESTS_FALSE='#'
-else
-  ENABLE_TESTS_TRUE='#'
-  ENABLE_TESTS_FALSE=
-fi
-
-	else
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUNIT" >&5
-$as_echo_n "checking for NUNIT... " >&6; }
-
-if test -n "$NUNIT_CFLAGS"; then
-    pkg_cv_NUNIT_CFLAGS="$NUNIT_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nunit >= \$NUNIT_REQUIRED\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "nunit >= $NUNIT_REQUIRED") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_NUNIT_CFLAGS=`$PKG_CONFIG --cflags "nunit >= $NUNIT_REQUIRED" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$NUNIT_LIBS"; then
-    pkg_cv_NUNIT_LIBS="$NUNIT_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nunit >= \$NUNIT_REQUIRED\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "nunit >= $NUNIT_REQUIRED") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_NUNIT_LIBS=`$PKG_CONFIG --libs "nunit >= $NUNIT_REQUIRED" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        NUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "nunit >= $NUNIT_REQUIRED" 2>&1`
-        else
-	        NUNIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "nunit >= $NUNIT_REQUIRED" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$NUNIT_PKG_ERRORS" >&5
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                do_tests="no"
-elif test $pkg_failed = untried; then
-	do_tests="no"
-else
-	NUNIT_CFLAGS=$pkg_cv_NUNIT_CFLAGS
-	NUNIT_LIBS=$pkg_cv_NUNIT_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	do_tests="yes"
-fi
-
-
-		 if test "x$do_tests" = "xyes"; then
-  ENABLE_TESTS_TRUE=
-  ENABLE_TESTS_FALSE='#'
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
+$as_echo_n "checking for library containing strerror... " >&6; }
+if test "${ac_cv_search_strerror+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  ENABLE_TESTS_TRUE='#'
-  ENABLE_TESTS_FALSE=
-fi
-
-
-		if test "x$do_tests" = "xno"; then
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUNIT" >&5
-$as_echo_n "checking for NUNIT... " >&6; }
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-if test -n "$NUNIT_CFLAGS"; then
-    pkg_cv_NUNIT_CFLAGS="$NUNIT_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-nunit >= 2.4\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "mono-nunit >= 2.4") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_NUNIT_CFLAGS=`$PKG_CONFIG --cflags "mono-nunit >= 2.4" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$NUNIT_LIBS"; then
-    pkg_cv_NUNIT_LIBS="$NUNIT_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-nunit >= 2.4\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "mono-nunit >= 2.4") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_NUNIT_LIBS=`$PKG_CONFIG --libs "mono-nunit >= 2.4" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strerror ();
+int
+main ()
+{
+return strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' cposix; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_strerror=$ac_res
 fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if test "${ac_cv_search_strerror+set}" = set; then :
+  break
 fi
-        if test $_pkg_short_errors_supported = yes; then
-	        NUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-nunit >= 2.4" 2>&1`
-        else
-	        NUNIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-nunit >= 2.4" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$NUNIT_PKG_ERRORS" >&5
+done
+if test "${ac_cv_search_strerror+set}" = set; then :
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                do_tests="no"
-elif test $pkg_failed = untried; then
-	do_tests="no"
 else
-	NUNIT_CFLAGS=$pkg_cv_NUNIT_CFLAGS
-	NUNIT_LIBS=$pkg_cv_NUNIT_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	do_tests="yes"
+  ac_cv_search_strerror=no
 fi
-
-
-			 if test "x$do_tests" = "xyes"; then
-  ENABLE_TESTS_TRUE=
-  ENABLE_TESTS_FALSE='#'
-else
-  ENABLE_TESTS_TRUE='#'
-  ENABLE_TESTS_FALSE=
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
+$as_echo "$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-
-			if test "x$do_tests" = "xno"; then
-				{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find nunit: tests will not be available" >&5
-$as_echo "$as_me: WARNING: Could not find nunit: tests will not be available" >&2;}			fi
-		fi
-	fi
-
-
-
-
- if false; then
-  HYENA_PKG_CONFIG_TRUE=
-  HYENA_PKG_CONFIG_FALSE='#'
-else
-  HYENA_PKG_CONFIG_TRUE='#'
-  HYENA_PKG_CONFIG_FALSE=
 fi
 
-
-
-
-
-ac_ext=c
+	ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
@@ -13546,3809 +12757,8 @@ else
 fi
 
 
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CXX" && break
-done
-
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CXX"  am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CXX_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
 
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CXX_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
-  am__fastdepCXX_TRUE=
-  am__fastdepCXX_FALSE='#'
-else
-  am__fastdepCXX_TRUE='#'
-  am__fastdepCXX_FALSE=
-fi
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CXX" && break
-done
-
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CXX"  am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CXX_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CXX_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
-  am__fastdepCXX_TRUE=
-  am__fastdepCXX_FALSE='#'
-else
-  am__fastdepCXX_TRUE='#'
-  am__fastdepCXX_FALSE=
-fi
-
-
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
-$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
-if test -z "$CXXCPP"; then
-  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CXXCPP needs to be expanded
-    for CXXCPP in "$CXX -E" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
-  CXXCPP=$ac_cv_prog_CXXCPP
-else
-  ac_cv_prog_CXXCPP=$CXXCPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
-$as_echo "$CXXCPP" >&6; }
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-_lt_caught_CXX_error=yes; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-else
-  _lt_caught_CXX_error=yes
-fi
-
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-archive_cmds_need_lc_CXX=no
-allow_undefined_flag_CXX=
-always_export_symbols_CXX=no
-archive_expsym_cmds_CXX=
-compiler_needs_object_CXX=no
-export_dynamic_flag_spec_CXX=
-hardcode_direct_CXX=no
-hardcode_direct_absolute_CXX=no
-hardcode_libdir_flag_spec_CXX=
-hardcode_libdir_flag_spec_ld_CXX=
-hardcode_libdir_separator_CXX=
-hardcode_minus_L_CXX=no
-hardcode_shlibpath_var_CXX=unsupported
-hardcode_automatic_CXX=no
-inherit_rpath_CXX=no
-module_cmds_CXX=
-module_expsym_cmds_CXX=
-link_all_deplibs_CXX=unknown
-old_archive_cmds_CXX=$old_archive_cmds
-no_undefined_flag_CXX=
-whole_archive_flag_spec_CXX=
-enable_shared_with_static_runtimes_CXX=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-objext_CXX=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="int some_variable = 0;"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-  # save warnings/boilerplate of simple test code
-  ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-
-  ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC=$CC
-  lt_save_LD=$LD
-  lt_save_GCC=$GCC
-  GCC=$GXX
-  lt_save_with_gnu_ld=$with_gnu_ld
-  lt_save_path_LD=$lt_cv_path_LD
-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-  else
-    $as_unset lt_cv_prog_gnu_ld
-  fi
-  if test -n "${lt_cv_path_LDCXX+set}"; then
-    lt_cv_path_LD=$lt_cv_path_LDCXX
-  else
-    $as_unset lt_cv_path_LD
-  fi
-  test -z "${LDCXX+set}" || LD=$LDCXX
-  CC=${CXX-"c++"}
-  compiler=$CC
-  compiler_CXX=$CC
-  for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-  if test -n "$compiler"; then
-    # We don't want -fno-exception when compiling C++ code, so set the
-    # no_builtin_flag separately
-    if test "$GXX" = yes; then
-      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
-    else
-      lt_prog_compiler_no_builtin_flag_CXX=
-    fi
-
-    if test "$GXX" = yes; then
-      # Set up default GNU C++ configuration
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [\\/]* | ?:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if test "${lt_cv_path_LD+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
-	;;
-      *)
-	test "$with_gnu_ld" != yes && break
-	;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
-
-
-
-
-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
-      # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-
-        # If archive_cmds runs LD, not CC, wlarc should be empty
-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-        #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
-
-        # ancient GNU ld didn't support --whole-archive et. al.
-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
-	  $GREP 'no-whole-archive' > /dev/null; then
-          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-        else
-          whole_archive_flag_spec_CXX=
-        fi
-      else
-        with_gnu_ld=no
-        wlarc=
-
-        # A generic and very simple default shared library creation
-        # command for GNU C++ for the case where it uses the native
-        # linker, instead of GNU ld.  If possible, this setting should
-        # overridden to take advantage of the native linker features on
-        # the platform it is being used on.
-        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      fi
-
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-    else
-      GXX=no
-      with_gnu_ld=no
-      wlarc=
-    fi
-
-    # PORTME: fill in a description of your system's C++ link characteristics
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-    ld_shlibs_CXX=yes
-    case $host_os in
-      aix3*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-        ;;
-      aix[4-9]*)
-        if test "$host_cpu" = ia64; then
-          # On IA64, the linker does run time linking by default, so we don't
-          # have to do anything special.
-          aix_use_runtimelinking=no
-          exp_sym_flag='-Bexport'
-          no_entry_flag=""
-        else
-          aix_use_runtimelinking=no
-
-          # Test if we are trying to use run time linking or normal
-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
-          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-	    for ld_flag in $LDFLAGS; do
-	      case $ld_flag in
-	      *-brtl*)
-	        aix_use_runtimelinking=yes
-	        break
-	        ;;
-	      esac
-	    done
-	    ;;
-          esac
-
-          exp_sym_flag='-bexport'
-          no_entry_flag='-bnoentry'
-        fi
-
-        # When large executables or shared objects are built, AIX ld can
-        # have problems creating the table of contents.  If linking a library
-        # or program results in "error TOC overflow" add -mminimal-toc to
-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-        archive_cmds_CXX=''
-        hardcode_direct_CXX=yes
-        hardcode_direct_absolute_CXX=yes
-        hardcode_libdir_separator_CXX=':'
-        link_all_deplibs_CXX=yes
-        file_list_spec_CXX='${wl}-f,'
-
-        if test "$GXX" = yes; then
-          case $host_os in aix4.[012]|aix4.[012].*)
-          # We only want to do this on AIX 4.2 and lower, the check
-          # below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	    # We have reworked collect2
-	    :
-	  else
-	    # We have old collect2
-	    hardcode_direct_CXX=unsupported
-	    # It fails to find uninstalled libraries when the uninstalled
-	    # path is not listed in the libpath.  Setting hardcode_minus_L
-	    # to unsupported forces relinking
-	    hardcode_minus_L_CXX=yes
-	    hardcode_libdir_flag_spec_CXX='-L$libdir'
-	    hardcode_libdir_separator_CXX=
-	  fi
-          esac
-          shared_flag='-shared'
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag="$shared_flag "'${wl}-G'
-	  fi
-        else
-          # not using gcc
-          if test "$host_cpu" = ia64; then
-	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	  # chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-          else
-	    if test "$aix_use_runtimelinking" = yes; then
-	      shared_flag='${wl}-G'
-	    else
-	      shared_flag='${wl}-bM:SRE'
-	    fi
-          fi
-        fi
-
-        export_dynamic_flag_spec_CXX='${wl}-bexpall'
-        # It seems that -bexpall does not export symbols beginning with
-        # underscore (_), so it is better to generate a list of symbols to
-	# export.
-        always_export_symbols_CXX=yes
-        if test "$aix_use_runtimelinking" = yes; then
-          # Warning - without using the other runtime loading flags (-brtl),
-          # -berok will link without error, but may produce a broken library.
-          allow_undefined_flag_CXX='-berok'
-          # Determine the default libpath from the value encoded in an empty
-          # executable.
-          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-        else
-          if test "$host_cpu" = ia64; then
-	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
-	    allow_undefined_flag_CXX="-z nodefs"
-	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-          else
-	    # Determine the default libpath from the value encoded in an
-	    # empty executable.
-	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
-	    # Warning - without using the other run time loading flags,
-	    # -berok will link without error, but may produce a broken library.
-	    no_undefined_flag_CXX=' ${wl}-bernotok'
-	    allow_undefined_flag_CXX=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    whole_archive_flag_spec_CXX='$convenience'
-	    archive_cmds_need_lc_CXX=yes
-	    # This is similar to how AIX traditionally builds its shared
-	    # libraries.
-	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-          fi
-        fi
-        ;;
-
-      beos*)
-	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	  allow_undefined_flag_CXX=unsupported
-	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	  # support --undefined.  This deserves some investigation.  FIXME
-	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	else
-	  ld_shlibs_CXX=no
-	fi
-	;;
-
-      chorus*)
-        case $cc_basename in
-          *)
-	  # FIXME: insert proper C++ library support
-	  ld_shlibs_CXX=no
-	  ;;
-        esac
-        ;;
-
-      cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
-        # as there is no search path for DLLs.
-        hardcode_libdir_flag_spec_CXX='-L$libdir'
-        allow_undefined_flag_CXX=unsupported
-        always_export_symbols_CXX=no
-        enable_shared_with_static_runtimes_CXX=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          ld_shlibs_CXX=no
-        fi
-        ;;
-      darwin* | rhapsody*)
-
-
-  archive_cmds_need_lc_CXX=no
-  hardcode_direct_CXX=no
-  hardcode_automatic_CXX=yes
-  hardcode_shlibpath_var_CXX=unsupported
-  whole_archive_flag_spec_CXX=''
-  link_all_deplibs_CXX=yes
-  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
-    fi
-
-  else
-  ld_shlibs_CXX=no
-  fi
-
-	;;
-
-      dgux*)
-        case $cc_basename in
-          ec++*)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          ghcx*)
-	    # Green Hills C++ Compiler
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-        esac
-        ;;
-
-      freebsd[12]*)
-        # C++ shared libraries reported to be fairly broken before
-	# switch to ELF
-        ld_shlibs_CXX=no
-        ;;
-
-      freebsd-elf*)
-        archive_cmds_need_lc_CXX=no
-        ;;
-
-      freebsd* | dragonfly*)
-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-        # conventions
-        ld_shlibs_CXX=yes
-        ;;
-
-      gnu*)
-        ;;
-
-      hpux9*)
-        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
-        hardcode_libdir_separator_CXX=:
-        export_dynamic_flag_spec_CXX='${wl}-E'
-        hardcode_direct_CXX=yes
-        hardcode_minus_L_CXX=yes # Not in the search PATH,
-				             # but as the default
-				             # location of the library.
-
-        case $cc_basename in
-          CC*)
-            # FIXME: insert proper C++ library support
-            ld_shlibs_CXX=no
-            ;;
-          aCC*)
-            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            # Commands to make compiler produce verbose output that lists
-            # what "hidden" libraries, object files and flags are used when
-            # linking a shared library.
-            #
-            # There doesn't appear to be a way to prevent this compiler from
-            # explicitly linking system object files so we need to strip them
-            # from the output so that they don't get included in the library
-            # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-            ;;
-          *)
-            if test "$GXX" = yes; then
-              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            else
-              # FIXME: insert proper C++ library support
-              ld_shlibs_CXX=no
-            fi
-            ;;
-        esac
-        ;;
-
-      hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-	  hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
-	  hardcode_libdir_separator_CXX=:
-
-          case $host_cpu in
-            hppa*64*|ia64*)
-              ;;
-            *)
-	      export_dynamic_flag_spec_CXX='${wl}-E'
-              ;;
-          esac
-        fi
-        case $host_cpu in
-          hppa*64*|ia64*)
-            hardcode_direct_CXX=no
-            hardcode_shlibpath_var_CXX=no
-            ;;
-          *)
-            hardcode_direct_CXX=yes
-            hardcode_direct_absolute_CXX=yes
-            hardcode_minus_L_CXX=yes # Not in the search PATH,
-					         # but as the default
-					         # location of the library.
-            ;;
-        esac
-
-        case $cc_basename in
-          CC*)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          aCC*)
-	    case $host_cpu in
-	      hppa*64*)
-	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      ia64*)
-	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      *)
-	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	    esac
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test $with_gnu_ld = no; then
-	        case $host_cpu in
-	          hppa*64*)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          ia64*)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          *)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	        esac
-	      fi
-	    else
-	      # FIXME: insert proper C++ library support
-	      ld_shlibs_CXX=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      interix[3-9]*)
-	hardcode_direct_CXX=no
-	hardcode_shlibpath_var_CXX=no
-	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	export_dynamic_flag_spec_CXX='${wl}-E'
-	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-	# Instead, shared libraries are loaded at an image base (0x10000000 by
-	# default) and relocated if they conflict, which is a slow very memory
-	# consuming and fragmenting process.  To avoid this, we pick a random,
-	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	;;
-      irix5* | irix6*)
-        case $cc_basename in
-          CC*)
-	    # SGI C++
-	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test "$with_gnu_ld" = no; then
-	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	      else
-	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
-	      fi
-	    fi
-	    link_all_deplibs_CXX=yes
-	    ;;
-        esac
-        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-        hardcode_libdir_separator_CXX=:
-        inherit_rpath_CXX=yes
-        ;;
-
-      linux* | k*bsd*-gnu)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-	    old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
-	    ;;
-	  icpc* | ecpc* )
-	    # Intel C++
-	    with_gnu_ld=yes
-	    # version 8.0 and above of icpc choke on multiply defined symbols
-	    # if we add $predep_objects and $postdep_objects, however 7.1 and
-	    # earlier do not add the objects themselves.
-	    case `$CC -V 2>&1` in
-	      *"Version 7."*)
-	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	      *)  # Version 8.0 or newer
-	        tmp_idyn=
-	        case $host_cpu in
-		  ia64*) tmp_idyn=' -i_dynamic';;
-		esac
-	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	    esac
-	    archive_cmds_need_lc_CXX=no
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	    ;;
-          pgCC* | pgcpp*)
-            # Portland Group C++ compiler
-	    case `$CC -V` in
-	    *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
-	      prelink_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-	      old_archive_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-		$RANLIB $oldlib'
-	      archive_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      archive_expsym_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    *) # Version 6 will use weak symbols
-	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    esac
-
-	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-            ;;
-	  cxx*)
-	    # Compaq C++
-	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-	    runpath_var=LD_RUN_PATH
-	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
-	    hardcode_libdir_separator_CXX=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  xl*)
-	    # IBM XL 8.0 on PPC, with GNU ld
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    if test "x$supports_anon_versioning" = xyes; then
-	      archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-		echo "local: *; };" >> $output_objdir/$libname.ver~
-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	    fi
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      no_undefined_flag_CXX=' -zdefs'
-	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
-	      hardcode_libdir_flag_spec_CXX='-R$libdir'
-	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	      compiler_needs_object_CXX=yes
-
-	      # Not sure whether something based on
-	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-	      # would be better.
-	      output_verbose_link_cmd='echo'
-
-	      # Archives containing C++ object files must be created using
-	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	      # necessary to make sure instantiated templates are included
-	      # in the archive.
-	      old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-
-      lynxos*)
-        # FIXME: insert proper C++ library support
-	ld_shlibs_CXX=no
-	;;
-
-      m88k*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-	;;
-
-      mvs*)
-        case $cc_basename in
-          cxx*)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-	  *)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-	esac
-	;;
-
-      netbsd*)
-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	  archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-	  wlarc=
-	  hardcode_libdir_flag_spec_CXX='-R$libdir'
-	  hardcode_direct_CXX=yes
-	  hardcode_shlibpath_var_CXX=no
-	fi
-	# Workaround some broken pre-1.5 toolchains
-	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-	;;
-
-      *nto* | *qnx*)
-        ld_shlibs_CXX=yes
-	;;
-
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-	ld_shlibs_CXX=no
-	;;
-
-      openbsd*)
-	if test -f /usr/libexec/ld.so; then
-	  hardcode_direct_CXX=yes
-	  hardcode_shlibpath_var_CXX=no
-	  hardcode_direct_absolute_CXX=yes
-	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-	  hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-	    export_dynamic_flag_spec_CXX='${wl}-E'
-	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-	  fi
-	  output_verbose_link_cmd=echo
-	else
-	  ld_shlibs_CXX=no
-	fi
-	;;
-
-      osf3* | osf4* | osf5*)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	    hardcode_libdir_separator_CXX=:
-
-	    # Archives containing C++ object files must be created using
-	    # the KAI C++ compiler.
-	    case $host in
-	      osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
-	      *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
-	    esac
-	    ;;
-          RCC*)
-	    # Rational C++ 2.4.1
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          cxx*)
-	    case $host in
-	      osf3*)
-	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-		;;
-	      *)
-	        allow_undefined_flag_CXX=' -expect_unresolved \*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
-	          $RM $lib.exp'
-	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
-		;;
-	    esac
-
-	    hardcode_libdir_separator_CXX=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  *)
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-	      case $host in
-	        osf3*)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	        *)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	      esac
-
-	      hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-	      hardcode_libdir_separator_CXX=:
-
-	      # Commands to make compiler produce verbose output that lists
-	      # what "hidden" libraries, object files and flags are used when
-	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-	    else
-	      # FIXME: insert proper C++ library support
-	      ld_shlibs_CXX=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      psos*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-        ;;
-
-      sunos4*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.x
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          lcc*)
-	    # Lucid
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-        esac
-        ;;
-
-      solaris*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-            archive_cmds_need_lc_CXX=yes
-	    no_undefined_flag_CXX=' -zdefs'
-	    archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	    archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	    hardcode_libdir_flag_spec_CXX='-R$libdir'
-	    hardcode_shlibpath_var_CXX=no
-	    case $host_os in
-	      solaris2.[0-5] | solaris2.[0-5].*) ;;
-	      *)
-		# The compiler driver will combine and reorder linker options,
-		# but understands `-z linker_flag'.
-	        # Supported since Solaris 2.6 (maybe 2.5.1?)
-		whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
-	        ;;
-	    esac
-	    link_all_deplibs_CXX=yes
-
-	    output_verbose_link_cmd='echo'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
-	    ;;
-          gcx*)
-	    # Green Hills C++ Compiler
-	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-	    # The C++ compiler must be used to create the archive.
-	    old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    # GNU C++ compiler with Solaris linker
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
-	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      else
-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
-	        # platform.
-	        archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      fi
-
-	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
-	      case $host_os in
-		solaris2.[0-5] | solaris2.[0-5].*) ;;
-		*)
-		  whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-		  ;;
-	      esac
-	    fi
-	    ;;
-        esac
-        ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag_CXX='${wl}-z,text'
-      archive_cmds_need_lc_CXX=no
-      hardcode_shlibpath_var_CXX=no
-      runpath_var='LD_RUN_PATH'
-
-      case $cc_basename in
-        CC*)
-	  archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-      esac
-      ;;
-
-      sysv5* | sco3.2v5* | sco5v6*)
-	# Note: We can NOT use -z defs as we might desire, because we do not
-	# link with -lc, and that would cause any symbols used from libc to
-	# always be unresolved, which means just about no library would
-	# ever link correctly.  If we're not using GNU ld we use -z text
-	# though, which does catch some bad symbols but isn't as heavy-handed
-	# as -z defs.
-	no_undefined_flag_CXX='${wl}-z,text'
-	allow_undefined_flag_CXX='${wl}-z,nodefs'
-	archive_cmds_need_lc_CXX=no
-	hardcode_shlibpath_var_CXX=no
-	hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
-	hardcode_libdir_separator_CXX=':'
-	link_all_deplibs_CXX=yes
-	export_dynamic_flag_spec_CXX='${wl}-Bexport'
-	runpath_var='LD_RUN_PATH'
-
-	case $cc_basename in
-          CC*)
-	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	  *)
-	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	esac
-      ;;
-
-      tandem*)
-        case $cc_basename in
-          NCC*)
-	    # NonStop-UX NCC 3.20
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    ld_shlibs_CXX=no
-	    ;;
-        esac
-        ;;
-
-      vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-        ;;
-
-      *)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-        ;;
-    esac
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
-$as_echo "$ld_shlibs_CXX" >&6; }
-    test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-    GCC_CXX="$GXX"
-    LD_CXX="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    # Dependencies to place before and after the object being linked:
-predep_objects_CXX=
-postdep_objects_CXX=
-predeps_CXX=
-postdeps_CXX=
-compiler_lib_search_path_CXX=
-
-cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-_LT_EOF
-
-if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
-	 prev=$p
-	 continue
-       else
-	 prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
-	   # Internal compiler library paths should come after those
-	   # provided the user.  The postdeps already come after the
-	   # user supplied libs so there is no need to process them.
-	   if test -z "$compiler_lib_search_path_CXX"; then
-	     compiler_lib_search_path_CXX="${prev}${p}"
-	   else
-	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
-	   fi
-	   ;;
-	 # The "-l" case would never come before the object being
-	 # linked, so don't bother handling this case.
-	 esac
-       else
-	 if test -z "$postdeps_CXX"; then
-	   postdeps_CXX="${prev}${p}"
-	 else
-	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
-	 fi
-       fi
-       ;;
-
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-	 pre_test_object_deps_done=yes
-	 continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 if test -z "$predep_objects_CXX"; then
-	   predep_objects_CXX="$p"
-	 else
-	   predep_objects_CXX="$predep_objects_CXX $p"
-	 fi
-       else
-	 if test -z "$postdep_objects_CXX"; then
-	   postdep_objects_CXX="$p"
-	 else
-	   postdep_objects_CXX="$postdep_objects_CXX $p"
-	 fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling CXX test program"
-fi
-
-$RM -f confest.$objext
-
-# PORTME: override above test on systems where it is broken
-case $host_os in
-interix[3-9]*)
-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
-  # hack all around it, let's just trust "g++" to DTRT.
-  predep_objects_CXX=
-  postdep_objects_CXX=
-  postdeps_CXX=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      postdeps_CXX='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      postdeps_CXX='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-
-
-case " $postdeps_CXX " in
-*" -lc "*) archive_cmds_need_lc_CXX=no ;;
-esac
- compiler_lib_search_dirs_CXX=
-if test -n "${compiler_lib_search_path_CXX}"; then
- compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    lt_prog_compiler_wl_CXX=
-lt_prog_compiler_pic_CXX=
-lt_prog_compiler_static_CXX=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    lt_prog_compiler_wl_CXX='-Wl,'
-    lt_prog_compiler_static_CXX='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	lt_prog_compiler_static_CXX='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            lt_prog_compiler_pic_CXX='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic_CXX='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      lt_prog_compiler_pic_CXX=
-      ;;
-    interix[3-9]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	lt_prog_compiler_pic_CXX=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	;;
-      *)
-	lt_prog_compiler_pic_CXX='-fPIC'
-	;;
-      esac
-      ;;
-    *qnx* | *nto*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      lt_prog_compiler_pic_CXX='-fPIC -shared'
-      ;;
-    *)
-      lt_prog_compiler_pic_CXX='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[4-9]*)
-	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
-	  # AIX 5 now supports IA64 processor
-	  lt_prog_compiler_static_CXX='-Bstatic'
-	else
-	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
-	fi
-	;;
-      chorus*)
-	case $cc_basename in
-	cxch68*)
-	  # Green Hills C++ Compiler
-	  # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-	  ;;
-	esac
-	;;
-      dgux*)
-	case $cc_basename in
-	  ec++*)
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    ;;
-	  ghcx*)
-	    # Green Hills C++ Compiler
-	    lt_prog_compiler_pic_CXX='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      freebsd* | dragonfly*)
-	# FreeBSD uses GNU C++
-	;;
-      hpux9* | hpux10* | hpux11*)
-	case $cc_basename in
-	  CC*)
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
-	    if test "$host_cpu" != ia64; then
-	      lt_prog_compiler_pic_CXX='+Z'
-	    fi
-	    ;;
-	  aCC*)
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
-	    case $host_cpu in
-	    hppa*64*|ia64*)
-	      # +Z the default
-	      ;;
-	    *)
-	      lt_prog_compiler_pic_CXX='+Z'
-	      ;;
-	    esac
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      interix*)
-	# This is c89, which is MS Visual C++ (no shared libs)
-	# Anyone wants to do a port?
-	;;
-      irix5* | irix6* | nonstopux*)
-	case $cc_basename in
-	  CC*)
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_static_CXX='-non_shared'
-	    # CC pic flag -KPIC is the default.
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      linux* | k*bsd*-gnu)
-	case $cc_basename in
-	  KCC*)
-	    # KAI C++ Compiler
-	    lt_prog_compiler_wl_CXX='--backend -Wl,'
-	    lt_prog_compiler_pic_CXX='-fPIC'
-	    ;;
-	  ecpc* )
-	    # old Intel C++ for x86_64 which still supported -KPIC.
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    lt_prog_compiler_static_CXX='-static'
-	    ;;
-	  icpc* )
-	    # Intel C++, used to be incompatible with GCC.
-	    # ICC 10 doesn't accept -KPIC any more.
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-fPIC'
-	    lt_prog_compiler_static_CXX='-static'
-	    ;;
-	  pgCC* | pgcpp*)
-	    # Portland Group C++ compiler
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-fpic'
-	    lt_prog_compiler_static_CXX='-Bstatic'
-	    ;;
-	  cxx*)
-	    # Compaq C++
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    lt_prog_compiler_pic_CXX=
-	    lt_prog_compiler_static_CXX='-non_shared'
-	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-qpic'
-	    lt_prog_compiler_static_CXX='-qstaticlink'
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      lt_prog_compiler_pic_CXX='-KPIC'
-	      lt_prog_compiler_static_CXX='-Bstatic'
-	      lt_prog_compiler_wl_CXX='-Qoption ld '
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-      lynxos*)
-	;;
-      m88k*)
-	;;
-      mvs*)
-	case $cc_basename in
-	  cxx*)
-	    lt_prog_compiler_pic_CXX='-W c,exportall'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      netbsd*)
-	;;
-      *qnx* | *nto*)
-        # QNX uses GNU C++, but need to define -shared option too, otherwise
-        # it will coredump.
-        lt_prog_compiler_pic_CXX='-fPIC -shared'
-        ;;
-      osf3* | osf4* | osf5*)
-	case $cc_basename in
-	  KCC*)
-	    lt_prog_compiler_wl_CXX='--backend -Wl,'
-	    ;;
-	  RCC*)
-	    # Rational C++ 2.4.1
-	    lt_prog_compiler_pic_CXX='-pic'
-	    ;;
-	  cxx*)
-	    # Digital/Compaq C++
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    lt_prog_compiler_pic_CXX=
-	    lt_prog_compiler_static_CXX='-non_shared'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      psos*)
-	;;
-      solaris*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    lt_prog_compiler_static_CXX='-Bstatic'
-	    lt_prog_compiler_wl_CXX='-Qoption ld '
-	    ;;
-	  gcx*)
-	    # Green Hills C++ Compiler
-	    lt_prog_compiler_pic_CXX='-PIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sunos4*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.x
-	    lt_prog_compiler_pic_CXX='-pic'
-	    lt_prog_compiler_static_CXX='-Bstatic'
-	    ;;
-	  lcc*)
-	    # Lucid
-	    lt_prog_compiler_pic_CXX='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-	case $cc_basename in
-	  CC*)
-	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    lt_prog_compiler_static_CXX='-Bstatic'
-	    ;;
-	esac
-	;;
-      tandem*)
-	case $cc_basename in
-	  NCC*)
-	    # NonStop-UX NCC 3.20
-	    lt_prog_compiler_pic_CXX='-KPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      vxworks*)
-	;;
-      *)
-	lt_prog_compiler_can_build_shared_CXX=no
-	;;
-    esac
-  fi
-
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic_CXX=
-    ;;
-  *)
-    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
-    ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
-
-
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_pic_works_CXX=no
-   ac_outfile=conftest.$ac_objext
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16208: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:16212: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_pic_works_CXX=yes
-     fi
-   fi
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
-    case $lt_prog_compiler_pic_CXX in
-     "" | " "*) ;;
-     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
-     esac
-else
-    lt_prog_compiler_pic_CXX=
-     lt_prog_compiler_can_build_shared_CXX=no
-fi
-
-fi
-
-
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_static_works_CXX=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         lt_cv_prog_compiler_static_works_CXX=yes
-       fi
-     else
-       lt_cv_prog_compiler_static_works_CXX=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
-    :
-else
-    lt_prog_compiler_static_CXX=
-fi
-
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_c_o_CXX=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16307: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:16311: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o_CXX=yes
-     fi
-   fi
-   chmod u+w . 2>&5
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_c_o_CXX=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16359: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:16363: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o_CXX=yes
-     fi
-   fi
-   chmod u+w . 2>&5
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
-$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
-
-
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
-  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix[4-9]*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    else
-      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    export_symbols_cmds_CXX="$ltdll_cmds"
-  ;;
-  cygwin* | mingw* | cegcc*)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  *)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
-$as_echo "$ld_shlibs_CXX" >&6; }
-test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-with_gnu_ld_CXX=$with_gnu_ld
-
-
-
-
-
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_CXX" in
-x|xyes)
-  # Assume -lc should be added
-  archive_cmds_need_lc_CXX=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $archive_cmds_CXX in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_CXX
-	pic_flag=$lt_prog_compiler_pic_CXX
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
-        allow_undefined_flag_CXX=
-        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
-  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-        then
-	  archive_cmds_need_lc_CXX=no
-        else
-	  archive_cmds_need_lc_CXX=yes
-        fi
-        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
-$as_echo "$archive_cmds_need_lc_CXX" >&6; }
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[4-9]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[01] | aix4.[01].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-	:
-      else
-	can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[45]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[123]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[01]* | freebsdelf3.[01]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
-  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[3-9]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
-	else
-		version_type=irix
-	fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  shlibpath_overrides_runpath=yes
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Add ABI-specific directories to the system library path.
-  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-	;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action_CXX=
-if test -n "$hardcode_libdir_flag_spec_CXX" ||
-   test -n "$runpath_var_CXX" ||
-   test "X$hardcode_automatic_CXX" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$hardcode_direct_CXX" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
-     test "$hardcode_minus_L_CXX" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action_CXX=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action_CXX=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action_CXX=unsupported
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
-$as_echo "$hardcode_action_CXX" >&6; }
-
-if test "$hardcode_action_CXX" = relink ||
-   test "$inherit_rpath_CXX" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-
-
-
-
-
-
-  fi # test -n "$compiler"
-
-  CC=$lt_save_CC
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
-$as_echo_n "checking for library containing strerror... " >&6; }
-if test "${ac_cv_search_strerror+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char strerror ();
-int
-main ()
-{
-return strerror ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' cposix; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_strerror=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if test "${ac_cv_search_strerror+set}" = set; then :
-  break
-fi
-done
-if test "${ac_cv_search_strerror+set}" = set; then :
-
-else
-  ac_cv_search_strerror=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
-$as_echo "$ac_cv_search_strerror" >&6; }
-ac_res=$ac_cv_search_strerror
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
 if test "${ac_cv_header_stdc+set}" = set; then :
   $as_echo_n "(cached) " >&6
@@ -17461,113 +12871,7 @@ $as_echo "#define STDC_HEADERS 1" >>confdefs.h
 fi
 
 
-
-
-    # Check whether --enable-compile-warnings was given.
-if test "${enable_compile_warnings+set}" = set; then :
-  enableval=$enable_compile_warnings;
-else
-  enable_compile_warnings="yes"
-fi
-
-
-    warnCFLAGS=
-    if test "x$GCC" != xyes; then
-	enable_compile_warnings=no
-    fi
-
-    warning_flags=
-    realsave_CFLAGS="$CFLAGS"
-
-    case "$enable_compile_warnings" in
-    no)
-	warning_flags=
-	;;
-    minimum)
-	warning_flags="-Wall"
-	;;
-    yes)
-	warning_flags="-Wall -Wmissing-prototypes"
-	;;
-    maximum|error)
-	warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith"
-	CFLAGS="$warning_flags $CFLAGS"
-	for option in -Wno-sign-compare; do
-		SAVE_CFLAGS="$CFLAGS"
-		CFLAGS="$CFLAGS $option"
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc understands $option" >&5
-$as_echo_n "checking whether gcc understands $option... " >&6; }
-		cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  has_option=yes
-else
-  has_option=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-		CFLAGS="$SAVE_CFLAGS"
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_option" >&5
-$as_echo "$has_option" >&6; }
-		if test $has_option = yes; then
-		  warning_flags="$warning_flags $option"
-		fi
-		unset has_option
-		unset SAVE_CFLAGS
-	done
-	unset option
-	if test "$enable_compile_warnings" = "error" ; then
-	    warning_flags="$warning_flags -Werror"
-	fi
-	;;
-    *)
-	as_fn_error "Unknown argument '$enable_compile_warnings' to --enable-compile-warnings" "$LINENO" 5
-	;;
-    esac
-    CFLAGS="$realsave_CFLAGS"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking what warning flags to pass to the C compiler" >&5
-$as_echo_n "checking what warning flags to pass to the C compiler... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $warning_flags" >&5
-$as_echo "$warning_flags" >&6; }
-
-    # Check whether --enable-iso-c was given.
-if test "${enable_iso_c+set}" = set; then :
-  enableval=$enable_iso_c;
-else
-  enable_iso_c=no
-fi
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking what language compliance flags to pass to the C compiler" >&5
-$as_echo_n "checking what language compliance flags to pass to the C compiler... " >&6; }
-    complCFLAGS=
-    if test "x$enable_iso_c" != "xno"; then
-	if test "x$GCC" = "xyes"; then
-	case " $CFLAGS " in
-	    *\ \	-ansi\ \	*) ;;
-	    *) complCFLAGS="$complCFLAGS -ansi" ;;
-	esac
-	case " $CFLAGS " in
-	    *\ \	-pedantic\ \	*) ;;
-	    *) complCFLAGS="$complCFLAGS -pedantic" ;;
-	esac
-	fi
-    fi
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $complCFLAGS" >&5
-$as_echo "$complCFLAGS" >&6; }
-
-    WARN_CFLAGS="$warning_flags $complCFLAGS"
-
-
-# Check whether --enable-glibtest was given.
+	# Check whether --enable-glibtest was given.
 if test "${enable_glibtest+set}" = set; then :
   enableval=$enable_glibtest;
 else
@@ -17918,6 +13222,708 @@ rm -f core conftest.err conftest.$ac_objext \
 
 
 
+	GTKSHARP_REQUIRED=2.12.2
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKSHARP" >&5
+$as_echo_n "checking for GTKSHARP... " >&6; }
+
+if test -n "$GTKSHARP_CFLAGS"; then
+    pkg_cv_GTKSHARP_CFLAGS="$GTKSHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTKSHARP_CFLAGS=`$PKG_CONFIG --cflags "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GTKSHARP_LIBS"; then
+    pkg_cv_GTKSHARP_LIBS="$GTKSHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTKSHARP_LIBS=`$PKG_CONFIG --libs "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GTKSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+        else
+	        GTKSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GTKSHARP_PKG_ERRORS" >&5
+
+	as_fn_error "Package requirements (gtk-sharp-2.0 >= $GTKSHARP_REQUIRED) were not met:
+
+$GTKSHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GTKSHARP_CFLAGS
+and GTKSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GTKSHARP_CFLAGS
+and GTKSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
+else
+	GTKSHARP_CFLAGS=$pkg_cv_GTKSHARP_CFLAGS
+	GTKSHARP_LIBS=$pkg_cv_GTKSHARP_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIBSHARP" >&5
+$as_echo_n "checking for GLIBSHARP... " >&6; }
+
+if test -n "$GLIBSHARP_CFLAGS"; then
+    pkg_cv_GLIBSHARP_CFLAGS="$GLIBSHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GLIBSHARP_CFLAGS=`$PKG_CONFIG --cflags "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GLIBSHARP_LIBS"; then
+    pkg_cv_GLIBSHARP_LIBS="$GLIBSHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GLIBSHARP_LIBS=`$PKG_CONFIG --libs "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GLIBSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+        else
+	        GLIBSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GLIBSHARP_PKG_ERRORS" >&5
+
+	as_fn_error "Package requirements (glib-sharp-2.0 >= $GTKSHARP_REQUIRED) were not met:
+
+$GLIBSHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GLIBSHARP_CFLAGS
+and GLIBSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GLIBSHARP_CFLAGS
+and GLIBSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
+else
+	GLIBSHARP_CFLAGS=$pkg_cv_GLIBSHARP_CFLAGS
+	GLIBSHARP_LIBS=$pkg_cv_GLIBSHARP_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIBSHARP_2_12_7" >&5
+$as_echo_n "checking for GLIBSHARP_2_12_7... " >&6; }
+
+if test -n "$GLIBSHARP_2_12_7_CFLAGS"; then
+    pkg_cv_GLIBSHARP_2_12_7_CFLAGS="$GLIBSHARP_2_12_7_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= 2.12.7\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= 2.12.7") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GLIBSHARP_2_12_7_CFLAGS=`$PKG_CONFIG --cflags "glib-sharp-2.0 >= 2.12.7" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GLIBSHARP_2_12_7_LIBS"; then
+    pkg_cv_GLIBSHARP_2_12_7_LIBS="$GLIBSHARP_2_12_7_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= 2.12.7\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= 2.12.7") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GLIBSHARP_2_12_7_LIBS=`$PKG_CONFIG --libs "glib-sharp-2.0 >= 2.12.7" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GLIBSHARP_2_12_7_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-sharp-2.0 >= 2.12.7" 2>&1`
+        else
+	        GLIBSHARP_2_12_7_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-sharp-2.0 >= 2.12.7" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GLIBSHARP_2_12_7_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                HAVE_GLIBSHARP_2_12_7=no
+elif test $pkg_failed = untried; then
+	HAVE_GLIBSHARP_2_12_7=no
+else
+	GLIBSHARP_2_12_7_CFLAGS=$pkg_cv_GLIBSHARP_2_12_7_CFLAGS
+	GLIBSHARP_2_12_7_LIBS=$pkg_cv_GLIBSHARP_2_12_7_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_GLIBSHARP_2_12_7=yes
+fi
+	 if test "$HAVE_GLIBSHARP_2_12_7" = "yes"; then
+  HAVE_GLIBSHARP_2_12_7_TRUE=
+  HAVE_GLIBSHARP_2_12_7_FALSE='#'
+else
+  HAVE_GLIBSHARP_2_12_7_TRUE='#'
+  HAVE_GLIBSHARP_2_12_7_FALSE=
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKSHARP_A11Y" >&5
+$as_echo_n "checking for GTKSHARP_A11Y... " >&6; }
+
+if test -n "$GTKSHARP_A11Y_CFLAGS"; then
+    pkg_cv_GTKSHARP_A11Y_CFLAGS="$GTKSHARP_A11Y_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= 2.12.10\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= 2.12.10") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTKSHARP_A11Y_CFLAGS=`$PKG_CONFIG --cflags "gtk-sharp-2.0 >= 2.12.10" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GTKSHARP_A11Y_LIBS"; then
+    pkg_cv_GTKSHARP_A11Y_LIBS="$GTKSHARP_A11Y_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= 2.12.10\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= 2.12.10") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTKSHARP_A11Y_LIBS=`$PKG_CONFIG --libs "gtk-sharp-2.0 >= 2.12.10" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GTKSHARP_A11Y_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk-sharp-2.0 >= 2.12.10" 2>&1`
+        else
+	        GTKSHARP_A11Y_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk-sharp-2.0 >= 2.12.10" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GTKSHARP_A11Y_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                gtksharp_with_a11y=no
+elif test $pkg_failed = untried; then
+	gtksharp_with_a11y=no
+else
+	GTKSHARP_A11Y_CFLAGS=$pkg_cv_GTKSHARP_A11Y_CFLAGS
+	GTKSHARP_A11Y_LIBS=$pkg_cv_GTKSHARP_A11Y_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	gtksharp_with_a11y=yes
+fi
+	 if test "x$gtksharp_with_a11y" = "xyes"; then
+  ENABLE_ATK_TRUE=
+  ENABLE_ATK_FALSE='#'
+else
+  ENABLE_ATK_TRUE='#'
+  ENABLE_ATK_FALSE=
+fi
+
+
+
+
+	GNOMEKEYRINGSHARP_REQUIRED=1.0
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for KEYRINGSHARP" >&5
+$as_echo_n "checking for KEYRINGSHARP... " >&6; }
+
+if test -n "$KEYRINGSHARP_CFLAGS"; then
+    pkg_cv_KEYRINGSHARP_CFLAGS="$KEYRINGSHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-keyring-sharp-1.0 >= \$GNOMEKEYRINGSHARP_REQUIRED\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_KEYRINGSHARP_CFLAGS=`$PKG_CONFIG --cflags "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$KEYRINGSHARP_LIBS"; then
+    pkg_cv_KEYRINGSHARP_LIBS="$KEYRINGSHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-keyring-sharp-1.0 >= \$GNOMEKEYRINGSHARP_REQUIRED\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_KEYRINGSHARP_LIBS=`$PKG_CONFIG --libs "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        KEYRINGSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>&1`
+        else
+	        KEYRINGSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$KEYRINGSHARP_PKG_ERRORS" >&5
+
+	as_fn_error "Package requirements (gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED) were not met:
+
+$KEYRINGSHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables KEYRINGSHARP_CFLAGS
+and KEYRINGSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables KEYRINGSHARP_CFLAGS
+and KEYRINGSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
+else
+	KEYRINGSHARP_CFLAGS=$pkg_cv_KEYRINGSHARP_CFLAGS
+	KEYRINGSHARP_LIBS=$pkg_cv_KEYRINGSHARP_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+
+
+
+	FLICKRNET_REQUIRED=2.0
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FLICKRNET" >&5
+$as_echo_n "checking for FLICKRNET... " >&6; }
+
+if test -n "$FLICKRNET_CFLAGS"; then
+    pkg_cv_FLICKRNET_CFLAGS="$FLICKRNET_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flickrnet >= \$FLICKRNET_REQUIRED\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "flickrnet >= $FLICKRNET_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_FLICKRNET_CFLAGS=`$PKG_CONFIG --cflags "flickrnet >= $FLICKRNET_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$FLICKRNET_LIBS"; then
+    pkg_cv_FLICKRNET_LIBS="$FLICKRNET_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flickrnet >= \$FLICKRNET_REQUIRED\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "flickrnet >= $FLICKRNET_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_FLICKRNET_LIBS=`$PKG_CONFIG --libs "flickrnet >= $FLICKRNET_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        FLICKRNET_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "flickrnet >= $FLICKRNET_REQUIRED" 2>&1`
+        else
+	        FLICKRNET_PKG_ERRORS=`$PKG_CONFIG --print-errors "flickrnet >= $FLICKRNET_REQUIRED" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$FLICKRNET_PKG_ERRORS" >&5
+
+	as_fn_error "Package requirements (flickrnet >= $FLICKRNET_REQUIRED) were not met:
+
+$FLICKRNET_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables FLICKRNET_CFLAGS
+and FLICKRNET_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables FLICKRNET_CFLAGS
+and FLICKRNET_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
+else
+	FLICKRNET_CFLAGS=$pkg_cv_FLICKRNET_CFLAGS
+	FLICKRNET_LIBS=$pkg_cv_FLICKRNET_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+
+
+
+	NUNIT_REQUIRED=2.4.7
+
+	# Check whether --enable-tests was given.
+if test "${enable_tests+set}" = set; then :
+  enableval=$enable_tests; enable_tests=$enableval
+else
+  enable_tests="no"
+fi
+
+
+	if test "x$enable_tests" = "xno"; then
+		do_tests=no
+		 if false; then
+  ENABLE_TESTS_TRUE=
+  ENABLE_TESTS_FALSE='#'
+else
+  ENABLE_TESTS_TRUE='#'
+  ENABLE_TESTS_FALSE=
+fi
+
+	else
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUNIT" >&5
+$as_echo_n "checking for NUNIT... " >&6; }
+
+if test -n "$NUNIT_CFLAGS"; then
+    pkg_cv_NUNIT_CFLAGS="$NUNIT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nunit >= \$NUNIT_REQUIRED\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "nunit >= $NUNIT_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_NUNIT_CFLAGS=`$PKG_CONFIG --cflags "nunit >= $NUNIT_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$NUNIT_LIBS"; then
+    pkg_cv_NUNIT_LIBS="$NUNIT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nunit >= \$NUNIT_REQUIRED\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "nunit >= $NUNIT_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_NUNIT_LIBS=`$PKG_CONFIG --libs "nunit >= $NUNIT_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        NUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "nunit >= $NUNIT_REQUIRED" 2>&1`
+        else
+	        NUNIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "nunit >= $NUNIT_REQUIRED" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$NUNIT_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                do_tests="no"
+elif test $pkg_failed = untried; then
+	do_tests="no"
+else
+	NUNIT_CFLAGS=$pkg_cv_NUNIT_CFLAGS
+	NUNIT_LIBS=$pkg_cv_NUNIT_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	do_tests="yes"
+fi
+
+
+		 if test "x$do_tests" = "xyes"; then
+  ENABLE_TESTS_TRUE=
+  ENABLE_TESTS_FALSE='#'
+else
+  ENABLE_TESTS_TRUE='#'
+  ENABLE_TESTS_FALSE=
+fi
+
+
+		if test "x$do_tests" = "xno"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUNIT" >&5
+$as_echo_n "checking for NUNIT... " >&6; }
+
+if test -n "$NUNIT_CFLAGS"; then
+    pkg_cv_NUNIT_CFLAGS="$NUNIT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-nunit >= 2.4\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "mono-nunit >= 2.4") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_NUNIT_CFLAGS=`$PKG_CONFIG --cflags "mono-nunit >= 2.4" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$NUNIT_LIBS"; then
+    pkg_cv_NUNIT_LIBS="$NUNIT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-nunit >= 2.4\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "mono-nunit >= 2.4") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_NUNIT_LIBS=`$PKG_CONFIG --libs "mono-nunit >= 2.4" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        NUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-nunit >= 2.4" 2>&1`
+        else
+	        NUNIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-nunit >= 2.4" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$NUNIT_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                do_tests="no"
+elif test $pkg_failed = untried; then
+	do_tests="no"
+else
+	NUNIT_CFLAGS=$pkg_cv_NUNIT_CFLAGS
+	NUNIT_LIBS=$pkg_cv_NUNIT_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	do_tests="yes"
+fi
+
+
+			 if test "x$do_tests" = "xyes"; then
+  ENABLE_TESTS_TRUE=
+  ENABLE_TESTS_FALSE='#'
+else
+  ENABLE_TESTS_TRUE='#'
+  ENABLE_TESTS_FALSE=
+fi
+
+
+			if test "x$do_tests" = "xno"; then
+				{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find nunit: tests will not be available" >&5
+$as_echo "$as_me: WARNING: Could not find nunit: tests will not be available" >&2;}			fi
+		fi
+	fi
+
+
+
+# ---------------------------------- <Old build stuff>
+
 # Extract the first word of "mono", so it can be a program name with args.
 set dummy mono; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -18524,25 +14530,7 @@ if pkg-config --atleast-version=2.13.0 gtk-sharp-2.0 && pkg-config --max-version
 	as_fn_error "There's a svn version of gtk-sharp 2.13.x installed. Uninstall it." "$LINENO" 5
 fi
 
-# Check whether --enable-gconf was given.
-if test "${enable_gconf+set}" = set; then :
-  enableval=$enable_gconf;
-fi
-
-
- if test "x$enable_gconf" = "xno"; then
-  NOGCONF_TRUE=
-  NOGCONF_FALSE='#'
-else
-  NOGCONF_TRUE='#'
-  NOGCONF_FALSE=
-fi
-
-
-if test "x$enable_gconf" = "xno"; then
-  CSC_DEFINES="$CSC_DEFINES -d:NOGCONF"
-else
-  # Extract the first word of "gconftool-2", so it can be a program name with args.
+# Extract the first word of "gconftool-2", so it can be a program name with args.
 set dummy gconftool-2; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
@@ -18718,12 +14706,11 @@ else
 $as_echo "yes" >&6; }
 	:
 fi
-  if pkg-config --atleast-version=2.18 gconf-sharp-2.0; then
-    CSC_DEFINES="$CSC_DEFINES -d:GCONF_SHARP_2_18"
-  fi
-  if pkg-config --atleast-version=2.20.2 gconf-sharp-2.0; then
-    CSC_DEFINES="$CSC_DEFINES -d:GCONF_SHARP_2_20_2"
-  fi
+if pkg-config --atleast-version=2.18 gconf-sharp-2.0; then
+	CSC_DEFINES="$CSC_DEFINES -d:GCONF_SHARP_2_18"
+fi
+if pkg-config --atleast-version=2.20.2 gconf-sharp-2.0; then
+	CSC_DEFINES="$CSC_DEFINES -d:GCONF_SHARP_2_20_2"
 fi
 
 if pkg-config --atleast-version=2.16 gtk+-2.0; then
@@ -19087,100 +15074,6 @@ fi
 
 
 
-# Extract the first word of "gconftool-2", so it can be a program name with args.
-set dummy gconftool-2; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_GCONFTOOL+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $GCONFTOOL in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_GCONFTOOL="$GCONFTOOL" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_GCONFTOOL="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_path_GCONFTOOL" && ac_cv_path_GCONFTOOL="no"
-  ;;
-esac
-fi
-GCONFTOOL=$ac_cv_path_GCONFTOOL
-if test -n "$GCONFTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCONFTOOL" >&5
-$as_echo "$GCONFTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-  if test "x$GCONF_SCHEMA_INSTALL_SOURCE" = "x"; then
-    GCONF_SCHEMA_CONFIG_SOURCE=`gconftool-2 --get-default-source`
-  else
-    GCONF_SCHEMA_CONFIG_SOURCE=$GCONF_SCHEMA_INSTALL_SOURCE
-  fi
-
-
-# Check whether --with-gconf-source was given.
-if test "${with_gconf_source+set}" = set; then :
-  withval=$with_gconf_source; GCONF_SCHEMA_CONFIG_SOURCE="$withval"
-fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation" >&5
-$as_echo "Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation" >&6; }
-
-  if test "x$GCONF_SCHEMA_FILE_DIR" = "x"; then
-    GCONF_SCHEMA_FILE_DIR='$(sysconfdir)/gconf/schemas'
-  fi
-
-
-# Check whether --with-gconf-schema-file-dir was given.
-if test "${with_gconf_schema_file_dir+set}" = set; then :
-  withval=$with_gconf_schema_file_dir; GCONF_SCHEMA_FILE_DIR="$withval"
-fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files" >&5
-$as_echo "Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files" >&6; }
-
-  # Check whether --enable-schemas-install was given.
-if test "${enable_schemas_install+set}" = set; then :
-  enableval=$enable_schemas_install; case ${enableval} in
-       yes|no) ;;
-       *) as_fn_error "bad value ${enableval} for --enable-schemas-install" "$LINENO" 5 ;;
-      esac
-fi
-
-   if test "$enable_schemas_install" != no; then
-  GCONF_SCHEMAS_INSTALL_TRUE=
-  GCONF_SCHEMAS_INSTALL_FALSE='#'
-else
-  GCONF_SCHEMAS_INSTALL_TRUE='#'
-  GCONF_SCHEMAS_INSTALL_FALSE=
-fi
-
-
-
-
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_start_decompress in -ljpeg" >&5
 $as_echo_n "checking for jpeg_start_decompress in -ljpeg... " >&6; }
 if test "${ac_cv_lib_jpeg_jpeg_start_decompress+set}" = set; then :
@@ -20287,12 +16180,69 @@ $as_echo "$LINGUAS" >&6; }
 
 
 
-ac_config_files="$ac_config_files src/f-spot"
+ac_config_files="$ac_config_files src/Clients/MainApp/f-spot"
 
 
 GNOME_ICON_THEME_PREFIX=`$PKG_CONFIG --variable=prefix gnome-icon-theme`
 
 
+# ---------------------------------- </Old build stuff>
+
+# Check whether --enable-release was given.
+if test "${enable_release+set}" = set; then :
+  enableval=$enable_release; enable_release=yes
+else
+  enable_release=`(test ! -d .svn && test ! -d .git) && echo "yes" || echo "no"`
+fi
+
+ if test "x$enable_release" = "xyes"; then
+  ENABLE_RELEASE_TRUE=
+  ENABLE_RELEASE_FALSE='#'
+else
+  ENABLE_RELEASE_TRUE='#'
+  ENABLE_RELEASE_FALSE=
+fi
+
+ENABLE_RELEASE=$enable_release
+
+if test "x$enable_release" = "xyes"; then
+	GMCS_FLAGS="-define:RELEASE"
+# FIXME: Enable as soon as we rock sufficiently
+#else
+#	GMCS_FLAGS="-warnaserror"
+fi
+
+
+ if false; then
+  HYENA_PKG_CONFIG_TRUE=
+  HYENA_PKG_CONFIG_FALSE='#'
+else
+  HYENA_PKG_CONFIG_TRUE='#'
+  HYENA_PKG_CONFIG_FALSE=
+fi
+
+
+
+# Check whether --with-vendor-build-id was given.
+if test "${with_vendor_build_id+set}" = set; then :
+  withval=$with_vendor_build_id; vendor_build_id="$withval"
+else
+
+		test -d .git \
+			&& vendor_build_id="git-checkout" \
+			|| vendor_build_id="source-tarball"
+
+fi
+
+BUILD_VENDOR_ID="$vendor_build_id"
+BUILD_HOST_OS="$host_os"
+BUILD_HOST_CPU="$host_cpu"
+BUILD_TIME=`date +"%F %T %Z"`
+
+
+
+
+
 
 
   # Check whether --enable-shave was given.
@@ -20385,7 +16335,7 @@ fi
 
 
 
-ac_config_files="$ac_config_files Makefile build/Makefile build/m4/Makefile build/m4/shave/shave build/m4/shave/shave-libtool build/pkg-config/Makefile data/Makefile data/desktop-files/Makefile data/desktop-files/f-spot.desktop.in data/desktop-files/f-spot-view.desktop.in data/desktop-files/f-spot-import.desktop.in help/Makefile lib/GKeyFile/Makefile lib/gio-sharp/Makefile lib/gio-sharp/gio/Makefile lib/gio-sharp/generator/Makefile lib/gtk-sharp-beans/Makefile lib/libfspot/Makefile lib/Makefile lib/unique-sharp/Makefile lib/unique-sharp/generator/Makefile lib/unique-sharp/unique/Makefile lib/Hyena/Makefile lib/Hyena/build/Makefile lib/Hyena/build/pkg-config/Makefile lib/Hyena/build/m4/Makefile lib/Hyena/Hyena/Makefile lib/Hyena/Mono.Data.Sqlite/Makefile lib/Hyena/Hyena.Data.Sqlite/Makefile lib/Hyena/Hyena.Gui/Makefile lib/TagLib/Makefile docs/Makefile icons/Makefile tools/Makefile po/Makefile.in src/Cms/FSpot.Cms.dll.config src/Cms/Makefile src/Utils/Makefile src/Bling/Makefile src/JobScheduler/Makefile src/Query/Makefile src/Core/Defines.cs src/Core/Makefile src/Core/FSpot.Core.dll.config src/Widgets/Makefile src/Widgets/FSpot.Widgets.dll.config src/Platform/Makefile src/AssemblyInfo.cs src/f-spot.exe.config src/Makefile extensions/Makefile extensions/Editors/Makefile extensions/Editors/BlackoutEditor/Makefile extensions/Editors/BWEditor/Makefile extensions/Editors/FlipEditor/Makefile extensions/Editors/PixelateEditor/Makefile extensions/Editors/ResizeEditor/Makefile extensions/Exporters/Makefile extensions/Exporters/CDExport/Makefile extensions/Exporters/FlickrExport/Makefile extensions/Exporters/GalleryExport/Makefile extensions/Exporters/FacebookExport/Makefile extensions/Exporters/FolderExport/Makefile extensions/Exporters/SmugMugExport/SmugMugNet/Makefile extensions/Exporters/SmugMugExport/Makefile extensions/Exporters/TabbloExport/Makefile extensions/Exporters/TabbloExport/Tabblo/Makefile extensions/Exporters/PicasaWebExport/Makefile extensions/Exporters/PicasaWebExport/google-sharp/Makefile extensions/Exporters/ZipExport/Makefile extensions/Tools/Makefile extensions/Tools/RawPlusJpeg/Makefile extensions/Tools/ChangePhotoPath/Makefile extensions/Tools/HashJob/Makefile extensions/Tools/DevelopInUFraw/Makefile extensions/Tools/LiveWebGallery/Makefile extensions/Tools/MergeDb/Makefile extensions/Tools/RetroactiveRoll/Makefile extensions/Tools/ScreensaverConfig/Makefile extensions/Transitions/Makefile extensions/Transitions/CoverTransition/Makefile tests/Makefile"
+ac_config_files="$ac_config_files Makefile build/Makefile build/m4/Makefile build/m4/shave/shave build/m4/shave/shave-libtool build/pkg-config/Makefile data/Makefile data/desktop-files/Makefile data/desktop-files/f-spot.desktop.in data/desktop-files/f-spot-view.desktop.in data/desktop-files/f-spot-import.desktop.in help/Makefile lib/gio-sharp/generator/Makefile lib/gio-sharp/gio/Makefile lib/gio-sharp/Makefile lib/GKeyFile/Makefile lib/gtk-sharp-beans/Makefile lib/Hyena/build/m4/Makefile lib/Hyena/build/Makefile lib/Hyena/build/pkg-config/Makefile lib/Hyena/Hyena.Data.Sqlite/Makefile lib/Hyena/Hyena.Gui/Makefile lib/Hyena/Hyena/Makefile lib/Hyena/Makefile lib/Hyena/Mono.Data.Sqlite/Makefile lib/libfspot/Makefile lib/Makefile lib/Mono.Google/Makefile lib/Mono.Tabblo/Makefile lib/SmugMugNet/Makefile lib/TagLib/Makefile lib/unique-sharp/generator/Makefile lib/unique-sharp/Makefile lib/unique-sharp/unique/Makefile src/AssemblyInfo.cs src/Makefile src/Core/Makefile src/Core/FSpot.Bling/Makefile src/Core/FSpot.Cms/Makefile src/Core/FSpot.Cms/FSpot.Cms.dll.config src/Core/FSpot.Core/Makefile src/Core/FSpot.Core/FSpot.Core.dll.config src/Core/FSpot.Core/FSpot.Core/Defines.cs src/Core/FSpot.JobScheduler/Makefile src/Core/FSpot.Utils/Makefile src/Core/FSpot.Query/Makefile src/Core/FSpot.Gui/Makefile src/Core/FSpot.Gui/FSpot.Gui.dll.config src/Core/FSpot.Platform/Makefile src/Clients/Makefile src/Clients/MainApp/Makefile src/Clients/MainApp/f-spot.exe.config src/Extensions/Makefile src/Extensions/Editors/Makefile src/Extensions/Editors/FSpot.Editors.Blackout/Makefile src/Extensions/Editors/FSpot.Editors.BW/Makefile src/Extensions/Editors/FSpot.Editors.Flip/Makefile src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile src/Extensions/Editors/FSpot.Editors.Resize/Makefile src/Extensions/Exporters/Makefile src/Extensions/Exporters/FSpot.Exporters.CD/Makefile src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile src/Extensions/Tools/Makefile src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile src/Extensions/Tools/FSpot.Tools.HashJob/Makefile src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile src/Extensions/Transitions/Makefile src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile docs/Makefile icons/Makefile tools/Makefile po/Makefile.in tests/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -20524,6 +16474,10 @@ if test -z "${HAVE_GNOME_DOC_UTILS_TRUE}" && test -z "${HAVE_GNOME_DOC_UTILS_FAL
   as_fn_error "conditional \"HAVE_GNOME_DOC_UTILS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${HAVE_GLIBSHARP_2_12_7_TRUE}" && test -z "${HAVE_GLIBSHARP_2_12_7_FALSE}"; then
   as_fn_error "conditional \"HAVE_GLIBSHARP_2_12_7\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -20544,30 +16498,6 @@ if test -z "${ENABLE_TESTS_TRUE}" && test -z "${ENABLE_TESTS_FALSE}"; then
   as_fn_error "conditional \"ENABLE_TESTS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HYENA_PKG_CONFIG_TRUE}" && test -z "${HYENA_PKG_CONFIG_FALSE}"; then
-  as_fn_error "conditional \"HYENA_PKG_CONFIG\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${NOGCONF_TRUE}" && test -z "${NOGCONF_FALSE}"; then
-  as_fn_error "conditional \"NOGCONF\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GCONF_SCHEMAS_INSTALL_TRUE}" && test -z "${GCONF_SCHEMAS_INSTALL_FALSE}"; then
-  as_fn_error "conditional \"GCONF_SCHEMAS_INSTALL\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${GCONF_SCHEMAS_INSTALL_TRUE}" && test -z "${GCONF_SCHEMAS_INSTALL_FALSE}"; then
   as_fn_error "conditional \"GCONF_SCHEMAS_INSTALL\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -20576,6 +16506,14 @@ if test -z "${WITH_TURTLE_TRUE}" && test -z "${WITH_TURTLE_FALSE}"; then
   as_fn_error "conditional \"WITH_TURTLE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${ENABLE_RELEASE_TRUE}" && test -z "${ENABLE_RELEASE_FALSE}"; then
+  as_fn_error "conditional \"ENABLE_RELEASE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HYENA_PKG_CONFIG_TRUE}" && test -z "${HYENA_PKG_CONFIG_FALSE}"; then
+  as_fn_error "conditional \"HYENA_PKG_CONFIG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : ${CONFIG_STATUS=./config.status}
 ac_write_fail=0
@@ -20984,7 +16922,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by f-spot $as_me 0.7.1, which was
+This file was extended by f-spot $as_me 0.7.2, which was
 generated by GNU Autoconf 2.65.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -21050,7 +16988,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-f-spot config.status 0.7.1
+f-spot config.status 0.7.2
 configured by $0, generated by GNU Autoconf 2.65,
   with options \\"\$ac_cs_config\\"
 
@@ -21291,59 +17229,6 @@ enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quot
 enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
 old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
 striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
-LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
 
 LTCC='$LTCC'
 LTCFLAGS='$LTCFLAGS'
@@ -21407,39 +17292,7 @@ library_names_spec \
 soname_spec \
 finish_eval \
 old_striplib \
-striplib \
-compiler_lib_search_dirs \
-predep_objects \
-postdep_objects \
-predeps \
-postdeps \
-compiler_lib_search_path \
-LD_CXX \
-compiler_CXX \
-lt_prog_compiler_no_builtin_flag_CXX \
-lt_prog_compiler_wl_CXX \
-lt_prog_compiler_pic_CXX \
-lt_prog_compiler_static_CXX \
-lt_cv_prog_compiler_c_o_CXX \
-export_dynamic_flag_spec_CXX \
-whole_archive_flag_spec_CXX \
-compiler_needs_object_CXX \
-with_gnu_ld_CXX \
-allow_undefined_flag_CXX \
-no_undefined_flag_CXX \
-hardcode_libdir_flag_spec_CXX \
-hardcode_libdir_flag_spec_ld_CXX \
-hardcode_libdir_separator_CXX \
-fix_srcfile_path_CXX \
-exclude_expsyms_CXX \
-include_expsyms_CXX \
-file_list_spec_CXX \
-compiler_lib_search_dirs_CXX \
-predep_objects_CXX \
-postdep_objects_CXX \
-predeps_CXX \
-postdeps_CXX \
-compiler_lib_search_path_CXX; do
+striplib; do
     case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
     *[\\\\\\\`\\"\\\$]*)
       eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
@@ -21468,16 +17321,7 @@ postinstall_cmds \
 postuninstall_cmds \
 finish_cmds \
 sys_lib_search_path_spec \
-sys_lib_dlsearch_path_spec \
-old_archive_cmds_CXX \
-old_archive_from_new_cmds_CXX \
-old_archive_from_expsyms_cmds_CXX \
-archive_cmds_CXX \
-archive_expsym_cmds_CXX \
-module_cmds_CXX \
-module_expsym_cmds_CXX \
-export_symbols_cmds_CXX \
-prelink_cmds_CXX; do
+sys_lib_dlsearch_path_spec; do
     case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
     *[\\\\\\\`\\"\\\$]*)
       eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
@@ -21515,8 +17359,6 @@ fi
 
 
 
-
-
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -21529,7 +17371,7 @@ do
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
-    "src/f-spot") CONFIG_FILES="$CONFIG_FILES src/f-spot" ;;
+    "src/Clients/MainApp/f-spot") CONFIG_FILES="$CONFIG_FILES src/Clients/MainApp/f-spot" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "build/Makefile") CONFIG_FILES="$CONFIG_FILES build/Makefile" ;;
     "build/m4/Makefile") CONFIG_FILES="$CONFIG_FILES build/m4/Makefile" ;;
@@ -21542,75 +17384,78 @@ do
     "data/desktop-files/f-spot-view.desktop.in") CONFIG_FILES="$CONFIG_FILES data/desktop-files/f-spot-view.desktop.in" ;;
     "data/desktop-files/f-spot-import.desktop.in") CONFIG_FILES="$CONFIG_FILES data/desktop-files/f-spot-import.desktop.in" ;;
     "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;;
-    "lib/GKeyFile/Makefile") CONFIG_FILES="$CONFIG_FILES lib/GKeyFile/Makefile" ;;
-    "lib/gio-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gio-sharp/Makefile" ;;
-    "lib/gio-sharp/gio/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gio-sharp/gio/Makefile" ;;
     "lib/gio-sharp/generator/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gio-sharp/generator/Makefile" ;;
+    "lib/gio-sharp/gio/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gio-sharp/gio/Makefile" ;;
+    "lib/gio-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gio-sharp/Makefile" ;;
+    "lib/GKeyFile/Makefile") CONFIG_FILES="$CONFIG_FILES lib/GKeyFile/Makefile" ;;
     "lib/gtk-sharp-beans/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gtk-sharp-beans/Makefile" ;;
-    "lib/libfspot/Makefile") CONFIG_FILES="$CONFIG_FILES lib/libfspot/Makefile" ;;
-    "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
-    "lib/unique-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES lib/unique-sharp/Makefile" ;;
-    "lib/unique-sharp/generator/Makefile") CONFIG_FILES="$CONFIG_FILES lib/unique-sharp/generator/Makefile" ;;
-    "lib/unique-sharp/unique/Makefile") CONFIG_FILES="$CONFIG_FILES lib/unique-sharp/unique/Makefile" ;;
-    "lib/Hyena/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/Makefile" ;;
+    "lib/Hyena/build/m4/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/build/m4/Makefile" ;;
     "lib/Hyena/build/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/build/Makefile" ;;
     "lib/Hyena/build/pkg-config/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/build/pkg-config/Makefile" ;;
-    "lib/Hyena/build/m4/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/build/m4/Makefile" ;;
-    "lib/Hyena/Hyena/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/Hyena/Makefile" ;;
-    "lib/Hyena/Mono.Data.Sqlite/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/Mono.Data.Sqlite/Makefile" ;;
     "lib/Hyena/Hyena.Data.Sqlite/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/Hyena.Data.Sqlite/Makefile" ;;
     "lib/Hyena/Hyena.Gui/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/Hyena.Gui/Makefile" ;;
+    "lib/Hyena/Hyena/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/Hyena/Makefile" ;;
+    "lib/Hyena/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/Makefile" ;;
+    "lib/Hyena/Mono.Data.Sqlite/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/Mono.Data.Sqlite/Makefile" ;;
+    "lib/libfspot/Makefile") CONFIG_FILES="$CONFIG_FILES lib/libfspot/Makefile" ;;
+    "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+    "lib/Mono.Google/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Mono.Google/Makefile" ;;
+    "lib/Mono.Tabblo/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Mono.Tabblo/Makefile" ;;
+    "lib/SmugMugNet/Makefile") CONFIG_FILES="$CONFIG_FILES lib/SmugMugNet/Makefile" ;;
     "lib/TagLib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/TagLib/Makefile" ;;
+    "lib/unique-sharp/generator/Makefile") CONFIG_FILES="$CONFIG_FILES lib/unique-sharp/generator/Makefile" ;;
+    "lib/unique-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES lib/unique-sharp/Makefile" ;;
+    "lib/unique-sharp/unique/Makefile") CONFIG_FILES="$CONFIG_FILES lib/unique-sharp/unique/Makefile" ;;
+    "src/AssemblyInfo.cs") CONFIG_FILES="$CONFIG_FILES src/AssemblyInfo.cs" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "src/Core/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/Makefile" ;;
+    "src/Core/FSpot.Bling/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Bling/Makefile" ;;
+    "src/Core/FSpot.Cms/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Cms/Makefile" ;;
+    "src/Core/FSpot.Cms/FSpot.Cms.dll.config") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Cms/FSpot.Cms.dll.config" ;;
+    "src/Core/FSpot.Core/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Core/Makefile" ;;
+    "src/Core/FSpot.Core/FSpot.Core.dll.config") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Core/FSpot.Core.dll.config" ;;
+    "src/Core/FSpot.Core/FSpot.Core/Defines.cs") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Core/FSpot.Core/Defines.cs" ;;
+    "src/Core/FSpot.JobScheduler/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.JobScheduler/Makefile" ;;
+    "src/Core/FSpot.Utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Utils/Makefile" ;;
+    "src/Core/FSpot.Query/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Query/Makefile" ;;
+    "src/Core/FSpot.Gui/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Gui/Makefile" ;;
+    "src/Core/FSpot.Gui/FSpot.Gui.dll.config") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Gui/FSpot.Gui.dll.config" ;;
+    "src/Core/FSpot.Platform/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Platform/Makefile" ;;
+    "src/Clients/Makefile") CONFIG_FILES="$CONFIG_FILES src/Clients/Makefile" ;;
+    "src/Clients/MainApp/Makefile") CONFIG_FILES="$CONFIG_FILES src/Clients/MainApp/Makefile" ;;
+    "src/Clients/MainApp/f-spot.exe.config") CONFIG_FILES="$CONFIG_FILES src/Clients/MainApp/f-spot.exe.config" ;;
+    "src/Extensions/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Makefile" ;;
+    "src/Extensions/Editors/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Editors/Makefile" ;;
+    "src/Extensions/Editors/FSpot.Editors.Blackout/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Editors/FSpot.Editors.Blackout/Makefile" ;;
+    "src/Extensions/Editors/FSpot.Editors.BW/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Editors/FSpot.Editors.BW/Makefile" ;;
+    "src/Extensions/Editors/FSpot.Editors.Flip/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Editors/FSpot.Editors.Flip/Makefile" ;;
+    "src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile" ;;
+    "src/Extensions/Editors/FSpot.Editors.Resize/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Editors/FSpot.Editors.Resize/Makefile" ;;
+    "src/Extensions/Exporters/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Exporters/Makefile" ;;
+    "src/Extensions/Exporters/FSpot.Exporters.CD/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Exporters/FSpot.Exporters.CD/Makefile" ;;
+    "src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile" ;;
+    "src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile" ;;
+    "src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile" ;;
+    "src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile" ;;
+    "src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile" ;;
+    "src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile" ;;
+    "src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile" ;;
+    "src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile" ;;
+    "src/Extensions/Tools/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Tools/Makefile" ;;
+    "src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile" ;;
+    "src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile" ;;
+    "src/Extensions/Tools/FSpot.Tools.HashJob/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Tools/FSpot.Tools.HashJob/Makefile" ;;
+    "src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile" ;;
+    "src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile" ;;
+    "src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile" ;;
+    "src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile" ;;
+    "src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile" ;;
+    "src/Extensions/Transitions/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Transitions/Makefile" ;;
+    "src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile") CONFIG_FILES="$CONFIG_FILES src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile" ;;
     "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
     "icons/Makefile") CONFIG_FILES="$CONFIG_FILES icons/Makefile" ;;
     "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
     "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
-    "src/Cms/FSpot.Cms.dll.config") CONFIG_FILES="$CONFIG_FILES src/Cms/FSpot.Cms.dll.config" ;;
-    "src/Cms/Makefile") CONFIG_FILES="$CONFIG_FILES src/Cms/Makefile" ;;
-    "src/Utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/Utils/Makefile" ;;
-    "src/Bling/Makefile") CONFIG_FILES="$CONFIG_FILES src/Bling/Makefile" ;;
-    "src/JobScheduler/Makefile") CONFIG_FILES="$CONFIG_FILES src/JobScheduler/Makefile" ;;
-    "src/Query/Makefile") CONFIG_FILES="$CONFIG_FILES src/Query/Makefile" ;;
-    "src/Core/Defines.cs") CONFIG_FILES="$CONFIG_FILES src/Core/Defines.cs" ;;
-    "src/Core/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/Makefile" ;;
-    "src/Core/FSpot.Core.dll.config") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Core.dll.config" ;;
-    "src/Widgets/Makefile") CONFIG_FILES="$CONFIG_FILES src/Widgets/Makefile" ;;
-    "src/Widgets/FSpot.Widgets.dll.config") CONFIG_FILES="$CONFIG_FILES src/Widgets/FSpot.Widgets.dll.config" ;;
-    "src/Platform/Makefile") CONFIG_FILES="$CONFIG_FILES src/Platform/Makefile" ;;
-    "src/AssemblyInfo.cs") CONFIG_FILES="$CONFIG_FILES src/AssemblyInfo.cs" ;;
-    "src/f-spot.exe.config") CONFIG_FILES="$CONFIG_FILES src/f-spot.exe.config" ;;
-    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
-    "extensions/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Makefile" ;;
-    "extensions/Editors/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Editors/Makefile" ;;
-    "extensions/Editors/BlackoutEditor/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Editors/BlackoutEditor/Makefile" ;;
-    "extensions/Editors/BWEditor/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Editors/BWEditor/Makefile" ;;
-    "extensions/Editors/FlipEditor/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Editors/FlipEditor/Makefile" ;;
-    "extensions/Editors/PixelateEditor/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Editors/PixelateEditor/Makefile" ;;
-    "extensions/Editors/ResizeEditor/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Editors/ResizeEditor/Makefile" ;;
-    "extensions/Exporters/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/Makefile" ;;
-    "extensions/Exporters/CDExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/CDExport/Makefile" ;;
-    "extensions/Exporters/FlickrExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/FlickrExport/Makefile" ;;
-    "extensions/Exporters/GalleryExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/GalleryExport/Makefile" ;;
-    "extensions/Exporters/FacebookExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/FacebookExport/Makefile" ;;
-    "extensions/Exporters/FolderExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/FolderExport/Makefile" ;;
-    "extensions/Exporters/SmugMugExport/SmugMugNet/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/SmugMugExport/SmugMugNet/Makefile" ;;
-    "extensions/Exporters/SmugMugExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/SmugMugExport/Makefile" ;;
-    "extensions/Exporters/TabbloExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/TabbloExport/Makefile" ;;
-    "extensions/Exporters/TabbloExport/Tabblo/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/TabbloExport/Tabblo/Makefile" ;;
-    "extensions/Exporters/PicasaWebExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/PicasaWebExport/Makefile" ;;
-    "extensions/Exporters/PicasaWebExport/google-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/PicasaWebExport/google-sharp/Makefile" ;;
-    "extensions/Exporters/ZipExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/ZipExport/Makefile" ;;
-    "extensions/Tools/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/Makefile" ;;
-    "extensions/Tools/RawPlusJpeg/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/RawPlusJpeg/Makefile" ;;
-    "extensions/Tools/ChangePhotoPath/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/ChangePhotoPath/Makefile" ;;
-    "extensions/Tools/HashJob/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/HashJob/Makefile" ;;
-    "extensions/Tools/DevelopInUFraw/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/DevelopInUFraw/Makefile" ;;
-    "extensions/Tools/LiveWebGallery/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/LiveWebGallery/Makefile" ;;
-    "extensions/Tools/MergeDb/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/MergeDb/Makefile" ;;
-    "extensions/Tools/RetroactiveRoll/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/RetroactiveRoll/Makefile" ;;
-    "extensions/Tools/ScreensaverConfig/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/ScreensaverConfig/Makefile" ;;
-    "extensions/Transitions/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Transitions/Makefile" ;;
-    "extensions/Transitions/CoverTransition/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Transitions/CoverTransition/Makefile" ;;
     "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
     "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;;
 
@@ -22341,7 +18186,7 @@ $as_echo X"$file" |
 
 
 # The names of the tagged configurations supported by this script.
-available_tags="CXX "
+available_tags=""
 
 # ### BEGIN LIBTOOL CONFIG
 
@@ -22691,20 +18536,6 @@ file_list_spec=$lt_file_list_spec
 # How to hardcode a shared library path into an executable.
 hardcode_action=$hardcode_action
 
-# The directories searched by this compiler when creating a shared library.
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
-
-# Dependencies to place before and after the objects being linked to
-# create a shared library.
-predep_objects=$lt_predep_objects
-postdep_objects=$lt_postdep_objects
-predeps=$lt_predeps
-postdeps=$lt_postdeps
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path
-
 # ### END LIBTOOL CONFIG
 
 _LT_EOF
@@ -22940,164 +18771,11 @@ _LT_EOF
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 
-
-    cat <<_LT_EOF >> "$ofile"
-
-# ### BEGIN LIBTOOL TAG CONFIG: CXX
-
-# The linker used to build libraries.
-LD=$lt_LD_CXX
-
-# Commands used to build an old-style archive.
-old_archive_cmds=$lt_old_archive_cmds_CXX
-
-# A language specific compiler.
-CC=$lt_compiler_CXX
-
-# Is the compiler the GNU compiler?
-with_gcc=$GCC_CXX
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_CXX
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_CXX
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_CXX
-
-# Whether or not to disallow shared libs when runtime libs are static.
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
-
-# Whether the compiler copes with passing no objects directly.
-compiler_needs_object=$lt_compiler_needs_object_CXX
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
-
-# Commands used to build a shared archive.
-archive_cmds=$lt_archive_cmds_CXX
-archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
-
-# Commands used to build a loadable module if different from building
-# a shared archive.
-module_cmds=$lt_module_cmds_CXX
-module_expsym_cmds=$lt_module_expsym_cmds_CXX
-
-# Whether we are building with GNU ld or not.
-with_gnu_ld=$lt_with_gnu_ld_CXX
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_CXX
-
-# Flag that enforces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_CXX
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
-
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
-
-# Whether we need a single "-rpath" flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary.
-hardcode_direct=$hardcode_direct_CXX
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
-# library is relocated.
-hardcode_direct_absolute=$hardcode_direct_absolute_CXX
-
-# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-# into the resulting binary.
-hardcode_minus_L=$hardcode_minus_L_CXX
-
-# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-# into the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
-
-# Set to "yes" if building a shared library automatically hardcodes DIR
-# into the library and all subsequent libraries and executables linked
-# against it.
-hardcode_automatic=$hardcode_automatic_CXX
-
-# Set to yes if linker adds runtime paths of dependent libraries
-# to runtime path list.
-inherit_rpath=$inherit_rpath_CXX
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_CXX
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path_CXX
-
-# Set to "yes" if exported symbols are required.
-always_export_symbols=$always_export_symbols_CXX
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_CXX
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_CXX
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_CXX
-
-# Commands necessary for linking programs (against libraries) with templates.
-prelink_cmds=$lt_prelink_cmds_CXX
-
-# Specify filename containing input files.
-file_list_spec=$lt_file_list_spec_CXX
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_CXX
-
-# The directories searched by this compiler when creating a shared library.
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
-
-# Dependencies to place before and after the objects being linked to
-# create a shared library.
-predep_objects=$lt_predep_objects_CXX
-postdep_objects=$lt_postdep_objects_CXX
-predeps=$lt_predeps_CXX
-postdeps=$lt_postdeps_CXX
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
-
-# ### END LIBTOOL TAG CONFIG: CXX
-_LT_EOF
-
  ;;
     "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*)
         sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
       esac ;;
-    "src/f-spot":F) chmod +x src/f-spot ;;
+    "src/Clients/MainApp/f-spot":F) chmod +x src/Clients/MainApp/f-spot ;;
     "po/stamp-it":C)
     if  ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then
        as_fn_error "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5
@@ -23177,3 +18855,12 @@ ${PACKAGE}-${VERSION}
 Run 'make' to build F-Spot.
 
 EOF
+
+if test -d ${expanded_libdir}/${PACKAGE}; then
+	if test x$br = xyes; then echo; fi
+	echo "  WARNING: An existing F-Spot install is in ${expanded_libdir}/${PACKAGE}"
+	echo "           Remove the existing install before installing this build."
+	echo "           Installing over an existing install will cause conflicts!"
+	echo
+fi
+
diff --git a/configure.ac b/configure.ac
index 8a2b2b3..39cd69e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ dnl Granularly define the version components
 dnl Remember to also update the Display Version
 m4_define([fspot_version_major], [0])
 m4_define([fspot_version_minor], [7])
-m4_define([fspot_version_micro], [1])
+m4_define([fspot_version_micro], [2])
 
 dnl set to 0 when doing an official release
 m4_define([fspot_version_pre_release], [0])
@@ -23,7 +23,7 @@ m4_define([fspot_version],
 
 dnl this can sometimes differ manually
 m4_define([fspot_display_version],
-	["0.7.1"])
+	["0.7.2"])
 
 m4_define([fspot_api_version],
 	[fspot_version_major.fspot_version_minor])
@@ -37,8 +37,9 @@ AC_INIT([f-spot], fspot_version,
 
 AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar dist-zip foreign])
 AM_MAINTAINER_MODE
-AM_CONFIG_HEADER(config.h)
-AC_SUBST([ACLOCAL_AMFLAGS], ["-I build/m4/f-spot -I build/m4/shamrock -I build/m4/shave \${ACLOCAL_FLAGS}"])
+AM_CONFIG_HEADER([config.h])
+AC_CONFIG_MACRO_DIR([build/m4])
+AC_SUBST([ACLOCAL_AMFLAGS], ["-I build/m4/shamrock -I build/m4/f-spot -I build/m4/shave \${ACLOCAL_FLAGS}"])
 
 IT_PROG_INTLTOOL([0.35.0])
 AC_PROG_LIBTOOL
@@ -66,7 +67,6 @@ SHAMROCK_CHECK_MONO_MODULE(2.2)
 SHAMROCK_FIND_MONO_2_0_COMPILER
 SHAMROCK_FIND_MONO_RUNTIME
 SHAMROCK_CHECK_MONO_2_0_GAC_ASSEMBLIES([
-    Mono.Data.SqliteClient
     Mono.Posix
     Mono.Simd
     Mono.Data
@@ -79,26 +79,14 @@ SHAMROCK_CHECK_MONO_2_0_GAC_ASSEMBLIES([
     ICSharpCode.SharpZipLib
 ])
 
+FSPOT_CHECK_LIBFSPOT
 FSPOT_CHECK_GTK_SHARP
 FSPOT_CHECK_GNOME_KEYRING_SHARP
 FSPOT_CHECK_FLICKRNET
 SHAMROCK_CHECK_NUNIT
 
 
-
-AM_CONDITIONAL(HYENA_PKG_CONFIG, false)
-
-
-AC_CONFIG_SRCDIR(src/main.cs)
-
-AC_PROG_CC
-AC_PROG_CXX
-AC_ISC_POSIX
-AC_HEADER_STDC
-
-GNOME_COMPILE_WARNINGS
-AM_PATH_GLIB_2_0
-
+# ---------------------------------- <Old build stuff>
 dnl --- Check for mono and gmcs
 
 AC_PATH_PROG(MONO, mono)
@@ -170,23 +158,15 @@ if pkg-config --atleast-version=2.13.0 gtk-sharp-2.0 && pkg-config --max-version
 	AC_MSG_ERROR([There's a svn version of gtk-sharp 2.13.x installed. Uninstall it.])
 fi
 
-dnl - Choose PreferenceBackend (default to gconf)
-AC_ARG_ENABLE([gconf],[AC_HELP_STRING([--disable-gconf], [build without gconf preference backend])],,)
-
-AM_CONDITIONAL(NOGCONF, test "x$enable_gconf" = "xno")
-
-if test "x$enable_gconf" = "xno"; then
-  CSC_DEFINES="$CSC_DEFINES -d:NOGCONF"
-else
-  AC_PATH_PROG(GCONFTOOL, gconftool-2)
-  AM_GCONF_SOURCE_2
-  PKG_CHECK_MODULES(GCONF_SHARP, gconf-sharp-2.0 >= $GTKSHARP_REQUIRED)
-  if pkg-config --atleast-version=2.18 gconf-sharp-2.0; then
-    CSC_DEFINES="$CSC_DEFINES -d:GCONF_SHARP_2_18"
-  fi
-  if pkg-config --atleast-version=2.20.2 gconf-sharp-2.0; then
-    CSC_DEFINES="$CSC_DEFINES -d:GCONF_SHARP_2_20_2"
-  fi
+dnl --- GConf
+AC_PATH_PROG(GCONFTOOL, gconftool-2)
+AM_GCONF_SOURCE_2
+PKG_CHECK_MODULES(GCONF_SHARP, gconf-sharp-2.0 >= $GTKSHARP_REQUIRED)
+if pkg-config --atleast-version=2.18 gconf-sharp-2.0; then
+	CSC_DEFINES="$CSC_DEFINES -d:GCONF_SHARP_2_18"
+fi
+if pkg-config --atleast-version=2.20.2 gconf-sharp-2.0; then
+	CSC_DEFINES="$CSC_DEFINES -d:GCONF_SHARP_2_20_2"
 fi
 
 if pkg-config --atleast-version=2.16 gtk+-2.0; then
@@ -202,12 +182,6 @@ dnl -- dbus-sharp
 PKG_CHECK_MODULES(NDESK_DBUS, ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED)
 AC_SUBST(NDESK_DBUS_LIBS)
 
-dnl --- GConf
-
-AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
-AM_GCONF_SOURCE_2
-
-
 dnl --- libjpeg
 
 AC_CHECK_LIB(jpeg, jpeg_start_decompress, [],
@@ -280,14 +254,51 @@ AC_SUBST(CFLAGS)
 AC_SUBST(CPPFLAGS)
 AC_SUBST(LDFLAGS)
 
-AC_CONFIG_FILES([src/f-spot],[chmod +x src/f-spot])
+AC_CONFIG_FILES([src/Clients/MainApp/f-spot],[chmod +x src/Clients/MainApp/f-spot])
 
 GNOME_ICON_THEME_PREFIX=`$PKG_CONFIG --variable=prefix gnome-icon-theme`
 AC_SUBST(GNOME_ICON_THEME_PREFIX)
 
+# ---------------------------------- </Old build stuff>
+
+AC_ARG_ENABLE(release,
+	AC_HELP_STRING([--enable-release],
+		[Use release configuration]),
+	enable_release=yes, enable_release=`(test ! -d .svn && test ! -d .git) && echo "yes" || echo "no"`)
+AM_CONDITIONAL(ENABLE_RELEASE, test "x$enable_release" = "xyes")
+ENABLE_RELEASE=$enable_release
+AC_SUBST(ENABLE_RELEASE)
+if test "x$enable_release" = "xyes"; then
+	GMCS_FLAGS="-define:RELEASE"
+# FIXME: Enable as soon as we rock sufficiently
+#else
+#	GMCS_FLAGS="-warnaserror"
+fi
+AC_SUBST(GMCS_FLAGS)
+
+AM_CONDITIONAL(HYENA_PKG_CONFIG, false)
+
+AC_ARG_WITH(vendor-build-id,
+	AC_HELP_STRING([--with-vendor-build-id=<vendor-build-id>],
+		[Set a vendor build ID, recommended for packagers]),
+	[vendor_build_id="$withval"], [
+		test -d .git \
+			&& vendor_build_id="git-checkout" \
+			|| vendor_build_id="source-tarball"
+	])
+BUILD_VENDOR_ID="$vendor_build_id"
+BUILD_HOST_OS="$host_os"
+BUILD_HOST_CPU="$host_cpu"
+BUILD_TIME=`date +"%F %T %Z"`
+AC_SUBST(BUILD_VENDOR_ID)
+AC_SUBST(BUILD_HOST_OS)
+AC_SUBST(BUILD_HOST_CPU)
+AC_SUBST(BUILD_TIME)
+
 SHAVE_INIT([build/m4/shave], [enable])
 
-AC_OUTPUT(
+dnl generated files
+AC_OUTPUT([
 Makefile
 
 build/Makefile
@@ -304,78 +315,85 @@ data/desktop-files/f-spot-import.desktop.in
 
 help/Makefile
 
-lib/GKeyFile/Makefile
-lib/gio-sharp/Makefile
-lib/gio-sharp/gio/Makefile
 lib/gio-sharp/generator/Makefile
+lib/gio-sharp/gio/Makefile
+lib/gio-sharp/Makefile
+lib/GKeyFile/Makefile
 lib/gtk-sharp-beans/Makefile
-lib/libfspot/Makefile
-lib/Makefile
-lib/unique-sharp/Makefile
-lib/unique-sharp/generator/Makefile
-lib/unique-sharp/unique/Makefile
-lib/Hyena/Makefile
+lib/Hyena/build/m4/Makefile
 lib/Hyena/build/Makefile
 lib/Hyena/build/pkg-config/Makefile
-lib/Hyena/build/m4/Makefile
-lib/Hyena/Hyena/Makefile
-lib/Hyena/Mono.Data.Sqlite/Makefile
 lib/Hyena/Hyena.Data.Sqlite/Makefile
 lib/Hyena/Hyena.Gui/Makefile
+lib/Hyena/Hyena/Makefile
+lib/Hyena/Makefile
+lib/Hyena/Mono.Data.Sqlite/Makefile
+lib/libfspot/Makefile
+lib/Makefile
+lib/Mono.Google/Makefile
+lib/Mono.Tabblo/Makefile
+lib/SmugMugNet/Makefile
 lib/TagLib/Makefile
+lib/unique-sharp/generator/Makefile
+lib/unique-sharp/Makefile
+lib/unique-sharp/unique/Makefile
+
+src/AssemblyInfo.cs
+
+src/Makefile
+src/Core/Makefile
+src/Core/FSpot.Bling/Makefile
+src/Core/FSpot.Cms/Makefile
+src/Core/FSpot.Cms/FSpot.Cms.dll.config
+src/Core/FSpot.Core/Makefile
+src/Core/FSpot.Core/FSpot.Core.dll.config
+src/Core/FSpot.Core/FSpot.Core/Defines.cs
+src/Core/FSpot.JobScheduler/Makefile
+src/Core/FSpot.Utils/Makefile
+src/Core/FSpot.Query/Makefile
+src/Core/FSpot.Gui/Makefile
+src/Core/FSpot.Gui/FSpot.Gui.dll.config
+src/Core/FSpot.Platform/Makefile
+
+src/Clients/Makefile
+src/Clients/MainApp/Makefile
+src/Clients/MainApp/f-spot.exe.config
+
+src/Extensions/Makefile
+src/Extensions/Editors/Makefile
+src/Extensions/Editors/FSpot.Editors.Blackout/Makefile
+src/Extensions/Editors/FSpot.Editors.BW/Makefile
+src/Extensions/Editors/FSpot.Editors.Flip/Makefile
+src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile
+src/Extensions/Editors/FSpot.Editors.Resize/Makefile
+src/Extensions/Exporters/Makefile
+src/Extensions/Exporters/FSpot.Exporters.CD/Makefile
+src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile
+src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile
+src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile
+src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile
+src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile
+src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile
+src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile
+src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile
+src/Extensions/Tools/Makefile
+src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile
+src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile
+src/Extensions/Tools/FSpot.Tools.HashJob/Makefile
+src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile
+src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile
+src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile
+src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile
+src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile
+src/Extensions/Transitions/Makefile
+src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile
 
 docs/Makefile
 icons/Makefile
 tools/Makefile
 po/Makefile.in
-src/Cms/FSpot.Cms.dll.config
-src/Cms/Makefile
-src/Utils/Makefile
-src/Bling/Makefile
-src/JobScheduler/Makefile
-src/Query/Makefile
-src/Core/Defines.cs
-src/Core/Makefile
-src/Core/FSpot.Core.dll.config
-src/Widgets/Makefile
-src/Widgets/FSpot.Widgets.dll.config
-src/Platform/Makefile
-src/AssemblyInfo.cs
-src/f-spot.exe.config
-src/Makefile
-extensions/Makefile
-extensions/Editors/Makefile
-extensions/Editors/BlackoutEditor/Makefile
-extensions/Editors/BWEditor/Makefile
-extensions/Editors/FlipEditor/Makefile
-extensions/Editors/PixelateEditor/Makefile
-extensions/Editors/ResizeEditor/Makefile
-extensions/Exporters/Makefile
-extensions/Exporters/CDExport/Makefile
-extensions/Exporters/FlickrExport/Makefile
-extensions/Exporters/GalleryExport/Makefile
-extensions/Exporters/FacebookExport/Makefile
-extensions/Exporters/FolderExport/Makefile
-extensions/Exporters/SmugMugExport/SmugMugNet/Makefile
-extensions/Exporters/SmugMugExport/Makefile
-extensions/Exporters/TabbloExport/Makefile
-extensions/Exporters/TabbloExport/Tabblo/Makefile
-extensions/Exporters/PicasaWebExport/Makefile
-extensions/Exporters/PicasaWebExport/google-sharp/Makefile
-extensions/Exporters/ZipExport/Makefile
-extensions/Tools/Makefile
-extensions/Tools/RawPlusJpeg/Makefile
-extensions/Tools/ChangePhotoPath/Makefile
-extensions/Tools/HashJob/Makefile
-extensions/Tools/DevelopInUFraw/Makefile
-extensions/Tools/LiveWebGallery/Makefile
-extensions/Tools/MergeDb/Makefile
-extensions/Tools/RetroactiveRoll/Makefile
-extensions/Tools/ScreensaverConfig/Makefile
-extensions/Transitions/Makefile
-extensions/Transitions/CoverTransition/Makefile
 tests/Makefile
-)
+])
 
 cat <<EOF
 
@@ -397,3 +415,12 @@ ${PACKAGE}-${VERSION}
 Run 'make' to build F-Spot.
 
 EOF
+
+if test -d ${expanded_libdir}/${PACKAGE}; then
+	if test x$br = xyes; then echo; fi
+	echo "  WARNING: An existing F-Spot install is in ${expanded_libdir}/${PACKAGE}"
+	echo "           Remove the existing install before installing this build."
+	echo "           Installing over an existing install will cause conflicts!"
+	echo 
+fi
+
diff --git a/data/Makefile.in b/data/Makefile.in
index 738d66e..12ce97b 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -45,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -108,6 +109,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -117,9 +122,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -133,6 +135,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -160,6 +163,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -256,14 +260,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/data/desktop-files/Makefile.am b/data/desktop-files/Makefile.am
index 1557a50..6ac64b6 100644
--- a/data/desktop-files/Makefile.am
+++ b/data/desktop-files/Makefile.am
@@ -22,7 +22,7 @@ DISTCLEANFILES = \
 UPDATE_DESKTOP = \
 	if [ -f $(DESTDIR)$(datadir)/applications/defaults.list ] ; then \
 		if which update-desktop-database>/dev/null 2>&1 ; then \
-			update-desktop-database; \
+			update-desktop-database $(DESTDIR)$(datadir)/applications; \
 		fi \
 	fi
 
diff --git a/data/desktop-files/Makefile.in b/data/desktop-files/Makefile.in
index be58818..ae5f23a 100644
--- a/data/desktop-files/Makefile.in
+++ b/data/desktop-files/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -96,6 +97,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -105,9 +110,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -121,6 +123,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -148,6 +151,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -244,14 +248,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -324,7 +326,7 @@ DISTCLEANFILES = \
 UPDATE_DESKTOP = \
 	if [ -f $(DESTDIR)$(datadir)/applications/defaults.list ] ; then \
 		if which update-desktop-database>/dev/null 2>&1 ; then \
-			update-desktop-database; \
+			update-desktop-database $(DESTDIR)$(datadir)/applications; \
 		fi \
 	fi
 
diff --git a/data/desktop-files/f-spot-import.desktop b/data/desktop-files/f-spot-import.desktop
index 188b770..f2280ce 100644
--- a/data/desktop-files/f-spot-import.desktop
+++ b/data/desktop-files/f-spot-import.desktop
@@ -211,7 +211,7 @@ Comment[pt_BR]=Importar para o F-Spot
 Comment[ro]=Importă în F-Spot
 Comment[ru]=Импортировать в F-Spot
 Comment[sk]=Importovať do F-Spot
-Comment[sl]=Uvoz v F-Spot
+Comment[sl]=Uvozi v F-Spot
 Comment[sr]=Увези у Ф-број
 Comment[sr at latin]=Uvezi u F-broj
 Comment[sv]=Importera till F-Spot
@@ -232,5 +232,5 @@ Type=Application
 X-GNOME-Bugzilla-Bugzilla=GNOME
 X-GNOME-Bugzilla-Product=f-spot
 X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.7.1
+X-GNOME-Bugzilla-Version=0.7.2
 X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/data/desktop-files/f-spot-import.desktop.in b/data/desktop-files/f-spot-import.desktop.in
index 46b6106..875abdc 100644
--- a/data/desktop-files/f-spot-import.desktop.in
+++ b/data/desktop-files/f-spot-import.desktop.in
@@ -14,5 +14,5 @@ Type=Application
 X-GNOME-Bugzilla-Bugzilla=GNOME
 X-GNOME-Bugzilla-Product=f-spot
 X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.7.1
+X-GNOME-Bugzilla-Version=0.7.2
 X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/data/desktop-files/f-spot-view.desktop b/data/desktop-files/f-spot-view.desktop
index 0c09b89..e47cb6f 100644
--- a/data/desktop-files/f-spot-view.desktop
+++ b/data/desktop-files/f-spot-view.desktop
@@ -180,5 +180,5 @@ Type=Application
 X-GNOME-Bugzilla-Bugzilla=GNOME
 X-GNOME-Bugzilla-Product=f-spot
 X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.7.1
+X-GNOME-Bugzilla-Version=0.7.2
 MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/svg+xml;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/x-dcraw;image/x-ciff;image/x-mrw;image/x-x3f;image/x-orf;image/x-nef;image/x-cr2;image/x-raf;
diff --git a/data/desktop-files/f-spot-view.desktop.in b/data/desktop-files/f-spot-view.desktop.in
index 2a35bcf..0e9a20a 100644
--- a/data/desktop-files/f-spot-view.desktop.in
+++ b/data/desktop-files/f-spot-view.desktop.in
@@ -13,5 +13,5 @@ Type=Application
 X-GNOME-Bugzilla-Bugzilla=GNOME
 X-GNOME-Bugzilla-Product=f-spot
 X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.7.1
+X-GNOME-Bugzilla-Version=0.7.2
 MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/svg+xml;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/x-dcraw;image/x-ciff;image/x-mrw;image/x-x3f;image/x-orf;image/x-nef;image/x-cr2;image/x-raf;
diff --git a/data/desktop-files/f-spot.desktop b/data/desktop-files/f-spot.desktop
index fcf97bd..e538756 100644
--- a/data/desktop-files/f-spot.desktop
+++ b/data/desktop-files/f-spot.desktop
@@ -218,7 +218,7 @@ Comment[pt_BR]=Organize, compartilhe e divirta-se com suas fotos
 Comment[ro]=Organizați, priviți și partajați fotografii
 Comment[ru]=Организация, просмотр и передача фотографий
 Comment[sk]=Organizovať, mať potešenie a zdielať vaše fotky
-Comment[sl]=Urejajte, uživajte in delite vaše fotografije.
+Comment[sl]=Urejajte, uživajte in dajte svoje fotografije v souporabo.
 Comment[sr]=Организујте, уживајте и поделите ваше фотографије
 Comment[sr at latin]=Organizujte, uživajte i podelite vaše fotografije
 Comment[sv]=Organisera, njut av, och dela med dig av dina foton
@@ -238,5 +238,5 @@ Categories=Graphics;Photography;GNOME;GTK;
 X-GNOME-Bugzilla-Bugzilla=GNOME
 X-GNOME-Bugzilla-Product=f-spot
 X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.7.1
+X-GNOME-Bugzilla-Version=0.7.2
 X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/data/desktop-files/f-spot.desktop.in b/data/desktop-files/f-spot.desktop.in
index 5043673..5623607 100644
--- a/data/desktop-files/f-spot.desktop.in
+++ b/data/desktop-files/f-spot.desktop.in
@@ -13,5 +13,5 @@ Categories=Graphics;Photography;GNOME;GTK;
 X-GNOME-Bugzilla-Bugzilla=GNOME
 X-GNOME-Bugzilla-Product=f-spot
 X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.7.1
+X-GNOME-Bugzilla-Version=0.7.2
 X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 01d5d74..e2e9772 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -45,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -68,6 +69,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -77,9 +82,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -93,6 +95,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -120,6 +123,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -216,14 +220,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/extensions/Editors/BWEditor/BWEditor.addin.xml b/extensions/Editors/BWEditor/BWEditor.addin.xml
deleted file mode 100644
index 50e6cad..0000000
--- a/extensions/Editors/BWEditor/BWEditor.addin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Addin namespace="FSpot"
-	id="BWEditor"
-	version="0.7.0.0"
-	name="BWEditor"
-	description="Convert to B/W with control. Require Mono 2.2."
-	author="Stephane Delcroix"
-	url="http://f-spot.org/Extensions"
-	category="Editors">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Editors">
-		<Editor editor_type = "BWEditor.BWEditor"/>
-	</Extension>
-</Addin>
diff --git a/extensions/Editors/BWEditor/BWEditor.cs b/extensions/Editors/BWEditor/BWEditor.cs
deleted file mode 100644
index ffe76c4..0000000
--- a/extensions/Editors/BWEditor/BWEditor.cs
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * BWEditor.cs
- *
- * Author(s)
- * 	Stephane Delcroix  (stephane at delcroix.org)
- *
- * Copyright (c) 2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using FSpot;
-using FSpot.Editors;
-using Gtk;
-using Gdk;
-using Mono.Unix;
-using Mono.Simd;
-using Hyena;
-
-namespace BWEditor {
-	class BWEditor : Editor {
-		public BWEditor () : base (Catalog.GetString ("Convert to B/W"), null) {
-			CanHandleMultiple = false;
-			HasSettings = true;
-			ApplyLabel = Catalog.GetString ("Apply");
-		}
-
-		static bool enhanced_support = EnhancedSimdSupport ();
-		static bool EnhancedSimdSupport () { //require sse3
-			return SimdRuntime.IsMethodAccelerated (typeof (VectorOperations), "HorizontalAdd", new Type[] {typeof (Vector4f), typeof (Vector4f)})
-			       && SimdRuntime.IsMethodAccelerated (typeof (Vector4f), "op_Multiply");
-		}
-
-		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile)
-		{
-			uint timer = Log.DebugTimerStart ();
-			if (input.BitsPerSample != 8) {
-				Log.Warning ("unsupported pixbuf format");
-				return (Pixbuf)input.Clone ();
-			}
-			Pixbuf output = new Pixbuf (input.Colorspace, input.HasAlpha, input.BitsPerSample, input.Width, input.Height);
-			Vector4f multiply = new Vector4f ((float)(r.Value/100.0), (float)(g.Value/100.0), (float)(b.Value/100.0), 0);
-			Normalize (ref multiply);
-
-			bool has_alpha = input.HasAlpha;
-			int chan = input.NChannels;
-			int rowstride_in = input.Rowstride;
-			int rowstride_out = output.Rowstride;
-			Vector4f v_in;
-			Vector4f v_out = new Vector4f (0);
-			float[] fcurve = new float [256];
-			c.GetVector (fcurve.Length, fcurve);
-			byte[] curve = new byte [fcurve.Length];
-			for (int i = 0; i < fcurve.Length; i++)
-				curve[i] = (byte)fcurve[i];
-			unsafe {
-				byte *pix_in = (byte *)input.Pixels;
-				byte *pix_out = (byte *)output.Pixels;
-				for (int i=0; i < input.Height; i++)
-					for (int j=0; j<input.Width; j++) {
-						v_in = new Vector4f (pix_in[i*rowstride_in + j*chan],
-								     pix_in[i*rowstride_in + j*chan + 1],
-								     pix_in[i*rowstride_in + j*chan + 2],
-								     0);
-						Desaturate (ref v_in, ref multiply, ref v_out);
-						pix_out[i*rowstride_out + j*chan] = curve [unchecked ((byte)v_out.X)];
-						pix_out[i*rowstride_out + j*chan + 1] = curve [unchecked ((byte)v_out.Y)];
-						pix_out[i*rowstride_out + j*chan + 2] = curve [unchecked ((byte)v_out.Z)];
-						if (has_alpha)
-							pix_out[i*rowstride_out + j*chan + 3] = pix_in[i*rowstride_in + j*chan + 3];
-					}
-			}
-			Log.DebugTimerPrint (timer, "Processing took {0}");
-			return output;
-		}
-
-		static void Desaturate (ref Vector4f input, ref Vector4f chan_multiplier, ref Vector4f output)
-		{
-			Vector4f temp = input * chan_multiplier;	//(r1,g1,b1,0) = (r,g,b,a) * (rx, gx, bx, 0)
-			temp = temp.HorizontalAdd (temp);		//(r1+g1, b1+0, r1+g1, b1+0)
-			output = temp.HorizontalAdd (temp);		//(r1+g1+b1+0, r1+g1+b1+0, ..., ...)
-		}
-
-		static void Normalize (ref Vector4f v)
-		{
-			float sum = v.X + v.Y + v.Z;
-			v /= new Vector4f (sum);
-		}
-
-		HScale r, g, b;
-		Curve c;
-
-		public override Widget ConfigurationWidget ()
-		{
-			VBox h = new VBox ();
-			r = new HScale (0, 100, 1);
-			r.ModifyBg (StateType.Selected, new Color (0xff, 0, 0));
-			r.Value = 80;
-			r.ValueChanged += SettingsChanged;
-			h.Add (r);
-			g = new HScale (0, 100, 1);
-			g.ModifyBg (StateType.Selected, new Color (0, 0xff, 0));
-			g.Value = 10;
-			g.ValueChanged += SettingsChanged;
-			h.Add (g);
-			b = new HScale (0, 100, 1);
-			b.ModifyBg (StateType.Selected, new Color (0, 0, 0xff));
-			b.Value = 10;
-			b.ValueChanged += SettingsChanged;
-			h.Add (b);
-			c = new Curve ();
-			c.CurveType = CurveType.Spline;
-			c.SetRange (0, 255, 0, 255);
-			h.Add (c);
-			Button btn = new Button (Gtk.Stock.Refresh);
-			btn.Clicked += delegate {UpdatePreview ();};
-			h.Add (btn);
-			return h;
-		}
-
-		void SettingsChanged (object sender, EventArgs e)
-		{
-			UpdatePreview ();
-		}
-	}
-}
diff --git a/extensions/Editors/BWEditor/Makefile.am b/extensions/Editors/BWEditor/Makefile.am
deleted file mode 100644
index 521695c..0000000
--- a/extensions/Editors/BWEditor/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-ASSEMBLY = FSpot.Editors.BWEditor
-ASSEMBLY_BUILD_FLAGS = -unsafe
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_BWEDITOR)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = BWEditor.cs
-
-RESOURCES = BWEditor.addin.xml
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Editors/BWEditor/Makefile.in b/extensions/Editors/BWEditor/Makefile.in
deleted file mode 100644
index 411a884..0000000
--- a/extensions/Editors/BWEditor/Makefile.in
+++ /dev/null
@@ -1,800 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Editors/BWEditor
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Editors.BWEditor
-ASSEMBLY_BUILD_FLAGS = -unsafe
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_BWEDITOR) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = BWEditor.cs
-RESOURCES = BWEditor.addin.xml
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Editors/BWEditor/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Editors/BWEditor/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Editors/BlackoutEditor/BlackoutEditor.addin.xml b/extensions/Editors/BlackoutEditor/BlackoutEditor.addin.xml
deleted file mode 100644
index 2961f43..0000000
--- a/extensions/Editors/BlackoutEditor/BlackoutEditor.addin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Addin namespace="FSpot"
-	id="BlackoutEditor"
-	version="0.7"
-	name="BlackoutEditor"
-	description="Blacks out an area of the image."
-	author="Brian J. Murrell"
-	url="http://f-spot.org/Extensions"
-	category="Editors">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Editors">
-		<Editor editor_type = "FSpot.Addins.Editors.BlackoutEditor"/>
-	</Extension>
-</Addin>
diff --git a/extensions/Editors/BlackoutEditor/Makefile.am b/extensions/Editors/BlackoutEditor/Makefile.am
deleted file mode 100644
index 5338ad4..0000000
--- a/extensions/Editors/BlackoutEditor/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-ASSEMBLY = FSpot.Editors.BlackoutEditor
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_BLACKOUTEDITOR)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = BlackoutEditor.cs
-
-RESOURCES = BlackoutEditor.addin.xml
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Editors/BlackoutEditor/Makefile.in b/extensions/Editors/BlackoutEditor/Makefile.in
deleted file mode 100644
index f4dd040..0000000
--- a/extensions/Editors/BlackoutEditor/Makefile.in
+++ /dev/null
@@ -1,799 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Editors/BlackoutEditor
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Editors.BlackoutEditor
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_BLACKOUTEDITOR) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = BlackoutEditor.cs
-RESOURCES = BlackoutEditor.addin.xml
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Editors/BlackoutEditor/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Editors/BlackoutEditor/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Editors/FlipEditor/FlipEditor.addin.xml b/extensions/Editors/FlipEditor/FlipEditor.addin.xml
deleted file mode 100644
index 9cc9448..0000000
--- a/extensions/Editors/FlipEditor/FlipEditor.addin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Addin namespace="FSpot"
-	id="FlipEditor"
-	version="0.7"
-	name="FlipEditor"
-	description="Flips the image horizontally."
-	author="Ruben Vermeersch"
-	url="http://f-spot.org/Extensions"
-	category="Editors">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Editors">
-		<Editor editor_type = "FSpot.Addins.Editors.FlipEditor"/>
-	</Extension>
-</Addin>
diff --git a/extensions/Editors/FlipEditor/Makefile.am b/extensions/Editors/FlipEditor/Makefile.am
deleted file mode 100644
index 45b9f2f..0000000
--- a/extensions/Editors/FlipEditor/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-ASSEMBLY = FSpot.Editors.FlipEditor
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_FLIPEDITOR)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = FlipEditor.cs
-
-RESOURCES = FlipEditor.addin.xml
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Editors/FlipEditor/Makefile.in b/extensions/Editors/FlipEditor/Makefile.in
deleted file mode 100644
index 7401e33..0000000
--- a/extensions/Editors/FlipEditor/Makefile.in
+++ /dev/null
@@ -1,799 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Editors/FlipEditor
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Editors.FlipEditor
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_FLIPEDITOR) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = FlipEditor.cs
-RESOURCES = FlipEditor.addin.xml
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Editors/FlipEditor/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Editors/FlipEditor/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Editors/Makefile.am b/extensions/Editors/Makefile.am
deleted file mode 100644
index edd2541..0000000
--- a/extensions/Editors/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-DIST_SUBDIRS =		\
-	BlackoutEditor	\
-	BWEditor	\
-	FlipEditor	\
-	PixelateEditor	\
-	ResizeEditor
diff --git a/extensions/Editors/Makefile.in b/extensions/Editors/Makefile.in
deleted file mode 100644
index c595364..0000000
--- a/extensions/Editors/Makefile.in
+++ /dev/null
@@ -1,674 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = extensions/Editors
-SUBDIRS =
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-DIST_SUBDIRS = \
-	BlackoutEditor	\
-	BWEditor	\
-	FlipEditor	\
-	PixelateEditor	\
-	ResizeEditor
-
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Editors/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Editors/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-	install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive distclean distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Editors/PixelateEditor/Makefile.am b/extensions/Editors/PixelateEditor/Makefile.am
deleted file mode 100644
index d6ead24..0000000
--- a/extensions/Editors/PixelateEditor/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-ASSEMBLY = FSpot.Editors.PixelateEditor
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_PIXELATEEDITOR)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = PixelateEditor.cs
-
-RESOURCES = PixelateEditor.addin.xml
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Editors/PixelateEditor/Makefile.in b/extensions/Editors/PixelateEditor/Makefile.in
deleted file mode 100644
index 129d83b..0000000
--- a/extensions/Editors/PixelateEditor/Makefile.in
+++ /dev/null
@@ -1,799 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Editors/PixelateEditor
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Editors.PixelateEditor
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_PIXELATEEDITOR) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = PixelateEditor.cs
-RESOURCES = PixelateEditor.addin.xml
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Editors/PixelateEditor/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Editors/PixelateEditor/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Editors/PixelateEditor/PixelateEditor.addin.xml b/extensions/Editors/PixelateEditor/PixelateEditor.addin.xml
deleted file mode 100644
index 6cf375e..0000000
--- a/extensions/Editors/PixelateEditor/PixelateEditor.addin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Addin namespace="FSpot"
-	id="PixelateEditor"
-	version="0.7"
-	name="PixelateEditor"
-	description="Pixelates an area of the image."
-	author="Brian J. Murrell"
-	url="http://f-spot.org/Extensions"
-	category="Editors">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Editors">
-		<Editor editor_type = "FSpot.Addins.Editors.PixelateEditor"/>
-	</Extension>
-</Addin>
diff --git a/extensions/Editors/ResizeEditor/Makefile.am b/extensions/Editors/ResizeEditor/Makefile.am
deleted file mode 100644
index 77785a9..0000000
--- a/extensions/Editors/ResizeEditor/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-ASSEMBLY = FSpot.Editors.ResizeEditor
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_RESIZEEDITOR)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = ResizeEditor.cs
-
-RESOURCES = ResizeEditor.addin.xml
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Editors/ResizeEditor/Makefile.in b/extensions/Editors/ResizeEditor/Makefile.in
deleted file mode 100644
index e6d1905..0000000
--- a/extensions/Editors/ResizeEditor/Makefile.in
+++ /dev/null
@@ -1,799 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Editors/ResizeEditor
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Editors.ResizeEditor
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_RESIZEEDITOR) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = ResizeEditor.cs
-RESOURCES = ResizeEditor.addin.xml
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Editors/ResizeEditor/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Editors/ResizeEditor/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Editors/ResizeEditor/ResizeEditor.addin.xml b/extensions/Editors/ResizeEditor/ResizeEditor.addin.xml
deleted file mode 100644
index c0a97d2..0000000
--- a/extensions/Editors/ResizeEditor/ResizeEditor.addin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Addin namespace="FSpot"
-	id="ResizeEditor"
-	version="0.7"
-	name="ResizeEditor"
-	description="Resize the image"
-	author="Stephane Delcroix"
-	url="http://f-spot.org/Extensions"
-	category="Editors">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Editors">
-		<Editor editor_type = "FSpot.Addins.Editors.ResizeEditor"/>
-	</Extension>
-</Addin>
diff --git a/extensions/Editors/ResizeEditor/ResizeEditor.cs b/extensions/Editors/ResizeEditor/ResizeEditor.cs
deleted file mode 100644
index deedaeb..0000000
--- a/extensions/Editors/ResizeEditor/ResizeEditor.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * ResizeEditor.cs
- *
- * Author(s)
- * 	Stephane Delcroix  (stephane at delcroix.org)
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using FSpot;
-using FSpot.Editors;
-using Gtk;
-using Gdk;
-using Mono.Unix;
-
-namespace FSpot.Addins.Editors {
-	class ResizeEditor : Editor {
-		SpinButton size;
-
-		public ResizeEditor () : base (Catalog.GetString ("Resize"), null) {
-			CanHandleMultiple = false;
-			HasSettings = true;
-		}
-
-		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile)
-		{
-			Pixbuf output = (Pixbuf) input.Clone ();
-			double ratio = (double)size.Value / Math.Max (output.Width, output.Height);
-			return output.ScaleSimple ((int)(output.Width * ratio), (int)(output.Height * ratio), InterpType.Bilinear);
-		}
-
-		public override Widget ConfigurationWidget ()
-		{
-			int max;
-			using (ImageFile img = ImageFile.Create (State.Items[0].DefaultVersion.Uri))
-				using (Pixbuf p = img.Load ())
-					max = Math.Max (p.Width, p.Height);
-
-			size = new SpinButton (128, max, 10);
-			size.Value = max;
-			return size;
-		}
-	}
-}
diff --git a/extensions/Exporters/CDExport/CDExport.addin.xml b/extensions/Exporters/CDExport/CDExport.addin.xml
deleted file mode 100644
index 9a5bdab..0000000
--- a/extensions/Exporters/CDExport/CDExport.addin.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<Addin namespace="FSpot"
-	version="0.7.0.0"
-	name="CD Export"
-	description="This extension allows you to burn your photos to CD."
-	author="F-Spot team"
-	url="http://f-spot.org"
-	defaultEnabled="true"
-	category="Export">
-
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-
-	<Extension path = "/FSpot/Menus/Exports">
-		<ExportMenuItem id="CD" _label = "_CD..." class = "FSpotCDExport.CDExport" />
-	</Extension>
-</Addin>
diff --git a/extensions/Exporters/CDExport/CDExport.cs b/extensions/Exporters/CDExport/CDExport.cs
deleted file mode 100644
index 725196d..0000000
--- a/extensions/Exporters/CDExport/CDExport.cs
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * CDExport.cs
- *
- * Authors:
- *   Larry Ewing <lewing at novell.com>
- *   Lorenzo Milesi <maxxer at yetopen.it>
- *
- * Copyright (c) 2007-2009 Novell, Inc.
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.IO;
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-using Mono.Unix;
-
-using FSpot;
-using FSpot.Filters;
-using FSpot.Widgets;
-using Hyena;
-using FSpot.UI.Dialog;
-
-using GLib;
-using Gtk;
-using GtkBeans;
-
-namespace FSpotCDExport {
-	class CDExportDialog : BuilderDialog {
-		IBrowsableCollection selection;
-		Gtk.Window listwindow;
-		System.Uri dest;
-
-		[GtkBeans.Builder.Object] ScrolledWindow thumb_scrolledwindow;
-		[GtkBeans.Builder.Object] CheckButton remove_check;
-		[GtkBeans.Builder.Object] Label size_label;
-		[GtkBeans.Builder.Object] Frame previous_frame;
-
-		public bool Clean {
-			get { return remove_check.Active; }
-		}
-
-		public CDExportDialog (IBrowsableCollection selection, System.Uri dest) : base (Assembly.GetExecutingAssembly (), "CDExport.ui", "cd_export_dialog")
-		{
-			this.selection = selection;
-			this.dest = dest;
-
-			// Calculate the total size
-			long total_size = 0;
-			string path;
-			System.IO.FileInfo file_info;
-
-			foreach (IBrowsableItem item in selection.Items) {
-				path = item.DefaultVersion.Uri.LocalPath;
-				if (System.IO.File.Exists (path)) {
-					file_info = new System.IO.FileInfo (path);
-					total_size += file_info.Length;
-				}
-			}
-
-			FSpot.Widgets.IconView view = new FSpot.Widgets.IconView (selection);
-			view.DisplayDates = false;
-			view.DisplayTags = false;
-			view.DisplayRatings = false;
-
-			this.Modal = false;
-			this.TransientFor = null;
-
-			size_label.Text = Format.SizeForDisplay (total_size);
-
-			thumb_scrolledwindow.Add (view);
-			this.ShowAll ();
-
-			previous_frame.Visible = IsEmpty (dest);
-			//LoadHistory ();
-
-		}
-
-		bool IsEmpty (System.Uri path)
-		{
-			foreach (GLib.FileInfo fi in FileFactory.NewForUri (path).EnumerateChildren ("*", FileQueryInfoFlags.None, null))
-				return true;
-			return false;
-		}
-
-		void HandleBrowseExisting (object sender, System.EventArgs args)
-		{
-			if (listwindow == null) {
-				listwindow = new Gtk.Window ("Pending files to write");
-				listwindow.SetDefaultSize (400, 200);
-				listwindow.DeleteEvent += delegate (object o, Gtk.DeleteEventArgs e) {(o as Gtk.Window).Destroy (); listwindow = null;};
-				Gtk.TextView view = new Gtk.TextView ();
-				Gtk.TextBuffer buffer = view.Buffer;
-				Gtk.ScrolledWindow sw = new Gtk.ScrolledWindow ();
-				sw.Add (view);
-				listwindow.Add (sw);
-			} else {
-				((listwindow.Child as Gtk.ScrolledWindow).Child as Gtk.TextView).Buffer.Text = "";
-			}
-			ListAll (((listwindow.Child as Gtk.ScrolledWindow).Child as Gtk.TextView).Buffer, dest);
-			listwindow.ShowAll ();
-		}
-
-		void ListAll (Gtk.TextBuffer t, System.Uri path)
-		{
-			GLib.File f = FileFactory.NewForUri (path);
-			foreach (GLib.FileInfo info in f.EnumerateChildren ("*", FileQueryInfoFlags.None, null)) {
-				t.Text += new System.Uri (path, info.Name).ToString () + Environment.NewLine;
-				if (info.FileType == FileType.Directory)
-					ListAll (t, new System.Uri (path, info.Name + "/"));
-			}
-		}
-		
-		~CDExportDialog ()
-		{
-			if (listwindow != null)
-				listwindow.Destroy ();
-		}
-
-	}
-
-
-	public class CDExport : FSpot.Extensions.IExporter {
-		IBrowsableCollection selection;
-
-		System.Uri dest = new System.Uri ("burn:///");
-
-		int photo_index;
-		bool clean;
-
-		CDExportDialog dialog;
-		ThreadProgressDialog progress_dialog;
-		System.Threading.Thread command_thread;
-
-		public CDExport ()
-		{
-		}
-
-		public void Run (IBrowsableCollection selection)
-		{
-			this.selection = selection;
-			dialog = new CDExportDialog (selection, dest);
-			//LoadHistory ();
-
-                        if (dialog.Run () != (int)ResponseType.Ok) {
-                                dialog.Destroy ();
-                                return;
-                        }
-
-			clean = dialog.Clean;
-
-			command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (Transfer));
-			command_thread.Name = Catalog.GetString ("Transferring Pictures");
-
-			progress_dialog = new ThreadProgressDialog (command_thread, selection.Count);
-			progress_dialog.Start ();
-
-			dialog.Destroy ();
-		}
-
-		[DllImport ("libc")]
-		extern static int system (string program);
-
-//		//FIXME: rewrite this as a Filter
-	        public static GLib.File UniqueName (System.Uri path, string shortname)
-	        {
-	                int i = 1;
-			GLib.File dest = FileFactory.NewForUri (new System.Uri (path, shortname));
-	                while (dest.Exists) {
-	                        string numbered_name = System.String.Format ("{0}-{1}{2}",
-	                                                              System.IO.Path.GetFileNameWithoutExtension (shortname),
-	                                                              i++,
-	                                                              System.IO.Path.GetExtension (shortname));
-
-				dest = FileFactory.NewForUri (new System.Uri (path, numbered_name));
-	                }
-
-	                return dest;
-	        }
-
-		void Clean (System.Uri path)
-		{
-			GLib.File source = FileFactory.NewForUri (path);
-			foreach (GLib.FileInfo info in source.EnumerateChildren ("*", FileQueryInfoFlags.None, null)) {
-				if (info.FileType == FileType.Directory)
-					Clean (new System.Uri(path, info.Name + "/"));
-				FileFactory.NewForUri (new System.Uri (path, info.Name)).Delete ();
-			}
-		}
-
-		public void Transfer () {
-			try {
-				bool result = true;
-
-				if (clean)
-					Clean (dest);
-
-				foreach (IBrowsableItem photo in selection.Items) {
-
-				//FIXME need to implement the uniquename as a filter
-					using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
-						GLib.File source = FileFactory.NewForUri (request.Current.ToString ());
-						GLib.File target = UniqueName (dest, photo.Name);
-						FileProgressCallback cb = Progress;
-
-						progress_dialog.Message = System.String.Format (Catalog.GetString ("Transferring picture \"{0}\" To CD"), photo.Name);
-						progress_dialog.Fraction = photo_index / (double) selection.Count;
-						progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of {1}"),
-											     photo_index, selection.Count);
-
-						result &= source.Copy (target,
-									FileCopyFlags.None,
-									null,
-									cb);
-					}
-					photo_index++;
-				}
-
-				// FIXME the error dialog here is ugly and needs improvement when strings are not frozen.
-				if (result) {
-					progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
-					progress_dialog.Fraction = 1.0;
-					progress_dialog.ProgressText = Catalog.GetString ("Transfer Complete");
-					progress_dialog.ButtonLabel = Gtk.Stock.Ok;
-					progress_dialog.Hide ();
-					system ("brasero -n");
-				} else {
-					throw new System.Exception (System.String.Format ("{0}{3}{1}{3}{2}",
-											  progress_dialog.Message,
-											  Catalog.GetString ("Error While Transferring"),
-											  result.ToString (),
-											  System.Environment.NewLine));
-				}
-
-			} catch (System.Exception e) {
-				Hyena.Log.DebugException (e);
-				progress_dialog.Message = e.ToString ();
-				progress_dialog.ProgressText = Catalog.GetString ("Error Transferring");
-				return;
-			}
-			Gtk.Application.Invoke (this.Destroy);
-		}
-
-		private void Destroy (object sender, System.EventArgs args)
-		{
-			progress_dialog.Destroy ();
-		}
-
-		private void Progress (long current_num_bytes, long total_num_bytes)
-		{
-			progress_dialog.ProgressText = Catalog.GetString ("copying...");
-
-			if (total_num_bytes > 0)
-				progress_dialog.Fraction = current_num_bytes / (double)total_num_bytes;
-
-		}
-
-	}
-}
diff --git a/extensions/Exporters/CDExport/CDExport.ui b/extensions/Exporters/CDExport/CDExport.ui
deleted file mode 100644
index 391d858..0000000
--- a/extensions/Exporters/CDExport/CDExport.ui
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0"?>
-<interface>
-  <!-- interface-requires gtk+ 2.12 -->
-  <!-- interface-naming-policy toplevel-contextual -->
-  <object class="GtkDialog" id="cd_export_dialog">
-    <property name="visible">True</property>
-    <property name="title" translatable="yes">Create CD</property>
-    <property name="type_hint">dialog</property>
-    <property name="has_separator">False</property>
-    <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox13">
-        <property name="visible">True</property>
-        <property name="orientation">vertical</property>
-        <child>
-          <object class="GtkVBox" id="vbox42">
-            <property name="visible">True</property>
-            <property name="orientation">vertical</property>
-            <child>
-              <object class="GtkFrame" id="frame33">
-                <property name="visible">True</property>
-                <property name="label_xalign">0</property>
-                <property name="shadow_type">none</property>
-                <child>
-                  <object class="GtkAlignment" id="alignment37">
-                    <property name="visible">True</property>
-                    <property name="left_padding">12</property>
-                    <child>
-                      <object class="GtkVBox" id="vbox43">
-                        <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
-                        <property name="spacing">6</property>
-                        <child>
-                          <object class="GtkScrolledWindow" id="thumb_scrolledwindow">
-                            <property name="width_request">512</property>
-                            <property name="height_request">350</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="hscrollbar_policy">automatic</property>
-                            <property name="vscrollbar_policy">automatic</property>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkFrame" id="previous_frame">
-                            <property name="visible">True</property>
-                            <property name="label_xalign">0</property>
-                            <property name="shadow_type">none</property>
-                            <child>
-                              <object class="GtkAlignment" id="alignment1">
-                                <property name="visible">True</property>
-                                <property name="left_padding">12</property>
-                                <child>
-                                  <object class="GtkHBox" id="hbox1">
-                                    <property name="visible">True</property>
-                                    <property name="spacing">12</property>
-                                    <child>
-                                      <object class="GtkCheckButton" id="remove_check">
-                                        <property name="label" translatable="yes">_Write only these photos to CD</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="receives_default">False</property>
-                                        <property name="use_underline">True</property>
-                                        <property name="draw_indicator">True</property>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">0</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <object class="GtkButton" id="browse_button">
-                                        <property name="label" translatable="yes">_Browse Previously Scheduled Files</property>
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="receives_default">False</property>
-                                        <property name="use_underline">True</property>
-                                        <signal name="clicked" handler="HandleBrowseExisting"/>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">1</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <placeholder/>
-                                    </child>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child type="label">
-                              <object class="GtkLabel" id="label1">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes"><b><i>There are some previously scheduled items to write</i></b></property>
-                                <property name="use_markup">True</property>
-                              </object>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkHBox" id="hbox85">
-                            <property name="visible">True</property>
-                            <child>
-                              <object class="GtkLabel" id="label210">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">Size of the exported selection:</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="size_label">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">Size</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="position">2</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-                <child type="label">
-                  <object class="GtkLabel" id="label98">
-                    <property name="visible">True</property>
-                    <property name="label" translatable="yes"><b>Photos to Burn</b></property>
-                    <property name="use_markup">True</property>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="position">0</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area13">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="cancelbutton6">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="export_button">
-                <property name="label" translatable="yes">_Export</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_underline">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-    <action-widgets>
-      <action-widget response="-6">cancelbutton6</action-widget>
-      <action-widget response="-5">export_button</action-widget>
-    </action-widgets>
-  </object>
-</interface>
diff --git a/extensions/Exporters/CDExport/Makefile.am b/extensions/Exporters/CDExport/Makefile.am
deleted file mode 100644
index 7cf9120..0000000
--- a/extensions/Exporters/CDExport/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-ASSEMBLY = FSpot.Exporters.CDExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_CDEXPORT)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = CDExport.cs
-
-RESOURCES = \
-	CDExport.addin.xml \
-	CDExport.ui
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/CDExport/Makefile.in b/extensions/Exporters/CDExport/Makefile.in
deleted file mode 100644
index 5572f68..0000000
--- a/extensions/Exporters/CDExport/Makefile.in
+++ /dev/null
@@ -1,802 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/CDExport
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.CDExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_CDEXPORT) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = CDExport.cs
-RESOURCES = \
-	CDExport.addin.xml \
-	CDExport.ui
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/CDExport/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/CDExport/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/FacebookExport/FacebookExport.addin.xml b/extensions/Exporters/FacebookExport/FacebookExport.addin.xml
deleted file mode 100644
index f7999bf..0000000
--- a/extensions/Exporters/FacebookExport/FacebookExport.addin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Addin 	namespace="FSpot"
-	id="FacebookExport"
-	version="0.7.0.0"
-	name="FacebookExport"
-	description="Export pictures to facebook"
-	author="George Talusan, Jim Ramsay, Stephane Delcroix"
-	url="http://f-spot.org/Extensions"
-	category="Export"
-	defaultEnabled="false">
-	<Dependencies>
-		<Addin id="Core" version="0.7.0.0"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Menus/Exports">
-		<ExportMenuItem id="Facebook" _label = "F_acebook..." class = "FSpot.Exporter.Facebook.FacebookExport" />
-	</Extension>
-</Addin>
diff --git a/extensions/Exporters/FacebookExport/FacebookExport.cs b/extensions/Exporters/FacebookExport/FacebookExport.cs
deleted file mode 100644
index 5b97690..0000000
--- a/extensions/Exporters/FacebookExport/FacebookExport.cs
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * FacebookExport.cs
- *
- * Authors:
- *   George Talusan <george at convolve.ca>
- *   Stephane Delcroix <stephane at delcroix.org>
- *   Jim Ramsay <i.am at jimramsay.com>
- *
- * Copyright (C) 2007 George Talusan
- * Copyright (c) 2008-2009 Novell, Inc.
- * Copyright (c) 2009 Jim Rasay
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Net;
-using System.IO;
-using System.Text;
-using System.Threading;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.Web;
-using Mono.Unix;
-using Gtk;
-using Gnome.Keyring;
-using GtkBeans;
-
-using FSpot;
-using Hyena;
-using Hyena.Widgets;
-using FSpot.UI.Dialog;
-using FSpot.Extensions;
-using FSpot.Filters;
-using FSpot.Platform;
-
-using Mono.Facebook;
-
-namespace FSpot.Exporter.Facebook
-{
-	internal class FacebookAccount
-	{
-		static string keyring_item_name = "Facebook Account";
-
-		static string api_key = "c23d1683e87313fa046954ea253a240e";
-
-		/* INSECURE! According to:
-		 *
-		 * http://wiki.developers.facebook.com/index.php/Desktop_App_Auth_Process
-		 *
-		 * We should *NOT* put our secret code here, but do an external
-		 * authorization using our own PHP page somewhere.
-		 */
-		static string secret = "743e9a2e6a1c35ce961321bceea7b514";
-
-		FacebookSession facebookSession;
-		bool connected = false;
-
-		public FacebookAccount ()
-		{
-			SessionInfo info = ReadSessionInfo ();
-			if (info != null) {
-				facebookSession = new FacebookSession (api_key, info);
-				try {
-					/* This basically functions like a ping to ensure the
-					 * session is still valid:
-					 */
-					facebookSession.HasAppPermission("offline_access");
-					connected = true;
-				} catch (FacebookException) {
-					connected = false;
-				}
-			}
-		}
-
-		public Uri GetLoginUri ()
-		{
-			FacebookSession session = new FacebookSession (api_key, secret);
-			Uri uri = session.CreateToken();
-			facebookSession = session;
-			connected = false;
-			return uri;
-		}
-
-		public bool RevokePermission (string permission)
-		{
-			return facebookSession.RevokeAppPermission(permission);
-		}
-
-		public bool GrantPermission (string permission, Window parent)
-		{
-			if (facebookSession.HasAppPermission(permission))
-				return true;
-
-			Uri uri = facebookSession.GetGrantUri (permission);
-			GtkBeans.Global.ShowUri (parent.Screen, uri.ToString ());
-
-			HigMessageDialog mbox = new HigMessageDialog (parent, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
-					Gtk.MessageType.Info, Gtk.ButtonsType.Ok, Catalog.GetString ("Waiting for authorization"),
-					Catalog.GetString ("F-Spot will now launch your browser so that you can enable the permission you just selected.\n\nOnce you are directed by Facebook to return to this application, click \"Ok\" below." ));
-
-			mbox.Run ();
-			mbox.Destroy ();
-
-			return facebookSession.HasAppPermission(permission);
-		}
-
-		public bool HasPermission(string permission)
-		{
-			return facebookSession.HasAppPermission(permission);
-		}
-
-		public FacebookSession Facebook
-		{
-			get { return facebookSession; }
-		}
-
-		public bool Authenticated
-		{
-			get { return connected; }
-		}
-
-		bool SaveSessionInfo (SessionInfo info)
-		{
-			string keyring;
-			try {
-				keyring = Ring.GetDefaultKeyring();
-			} catch (KeyringException e) {
-				Log.DebugException (e);
-				return false;
-			}
-
-			Hashtable attribs = new Hashtable();
-			attribs["name"] = keyring_item_name;
-			attribs["uid"] = info.uid.ToString ();
-			attribs["session_key"] = info.session_key;
-			try {
-				Ring.CreateItem (keyring, ItemType.GenericSecret, keyring_item_name, attribs, info.secret, true);
-			} catch (KeyringException e) {
-				Log.DebugException (e);
-				return false;
-			}
-
-			return true;
-		}
-
-		SessionInfo ReadSessionInfo ()
-		{
-			SessionInfo info = null;
-
-			Hashtable request_attributes = new Hashtable ();
-			request_attributes["name"] = keyring_item_name;
-			try {
-				foreach (ItemData result in Ring.Find (ItemType.GenericSecret, request_attributes)) {
-					if (!result.Attributes.ContainsKey ("name") ||
-						!result.Attributes.ContainsKey ("uid") ||
-						!result.Attributes.ContainsKey ("session_key") ||
-						(result.Attributes["name"] as string) != keyring_item_name)
-							continue;
-
-					string session_key = (string)result.Attributes["session_key"];
-					long uid = Int64.Parse((string)result.Attributes["uid"]);
-					string secret = result.Secret;
-					info = new SessionInfo (session_key, uid, secret);
-					break;
-				}
-			} catch (KeyringException e) {
-				Log.DebugException (e);
-			}
-
-			return info;
-		}
-
-		bool ForgetSessionInfo()
-		{
-			string keyring;
-			bool success = false;
-
-			try {
-				keyring = Ring.GetDefaultKeyring();
-			} catch (KeyringException e) {
-				Log.DebugException (e);
-				return false;
-			}
-
-			Hashtable request_attributes = new Hashtable ();
-			request_attributes["name"] = keyring_item_name;
-			try {
-				foreach (ItemData result in Ring.Find (ItemType.GenericSecret, request_attributes)) {
-					Ring.DeleteItem(keyring, result.ItemID);
-					success = true;
-				}
-			} catch (KeyringException e) {
-				Log.DebugException (e);
-			}
-
-			return success;
-		}
-
-		public bool Authenticate ()
-		{
-			if (connected)
-				return true;
-			try {
-				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) {
-				connected = false;
-				Log.DebugException (e);
-			} catch (FacebookException fe) {
-				connected = false;
-				Log.DebugException (fe);
-			}
-			return connected;
-		}
-
-		public void Deauthenticate ()
-		{
-			connected = false;
-			ForgetSessionInfo ();
-		}
-	}
-
-	internal class TagStore : ListStore
-	{
-		private List<Mono.Facebook.Tag> _tags;
-
-		private Dictionary<long, User> _friends;
-
-		public TagStore (FacebookSession session, List<Mono.Facebook.Tag> tags, Dictionary<long, User> friends) : base (typeof (string))
-		{
-			_tags = tags;
-			_friends = friends;
-
-			foreach (Mono.Facebook.Tag tag in Tags) {
-				long subject = tag.Subject;
-				User info = _friends [subject];
-				if (info == null ) {
-					try {
-						info = session.GetUserInfo (new long[] { subject }, new string[] { "first_name", "last_name" }) [0];
-					}
-					catch (FacebookException) {
-						continue;
-					}
-				}
-				AppendValues (String.Format ("{0} {1}", info.first_name ?? "", info.last_name ?? ""));
-			}
-		}
-
-		public List<Mono.Facebook.Tag> Tags
-		{
-			get { return _tags ?? new List<Mono.Facebook.Tag> (); }
-		}
-	}
-
-	public class FacebookExport : IExporter
-	{
-		private int size = 720;
-		private int max_photos_per_album = 200;
-		FacebookExportDialog dialog;
-		ThreadProgressDialog progress_dialog;
-		System.Threading.Thread command_thread;
-		Album album = null;
-
-		public FacebookExport ()
-		{
-		}
-
-		public void Run (IBrowsableCollection selection)
-		{
-
-			dialog = new FacebookExportDialog (selection);
-
-			if (selection.Items.Length > max_photos_per_album) {
-				HigMessageDialog mbox = new HigMessageDialog (dialog,
-						Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal, Gtk.MessageType.Error,
-						Gtk.ButtonsType.Ok, Catalog.GetString ("Too many images to export"),
-						String.Format (Catalog.GetString ("Facebook only permits {0} photographs per album.  Please refine your selection and try again."), max_photos_per_album));
-				mbox.Run ();
-				mbox.Destroy ();
-				return;
-			}
-
-			if (dialog.Run () != (int)ResponseType.Ok) {
-				dialog.Destroy ();
-				return;
-			}
-
-			if (dialog.CreateAlbum) {
-				string name = dialog.AlbumName;
-				if (String.IsNullOrEmpty (name)) {
-					HigMessageDialog mbox = new HigMessageDialog (dialog, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
-							Gtk.MessageType.Error, Gtk.ButtonsType.Ok, Catalog.GetString ("Album must have a name"),
-							Catalog.GetString ("Please name your album or choose an existing album."));
-					mbox.Run ();
-					mbox.Destroy ();
-					return;
-				}
-
-				string description = dialog.AlbumDescription;
-				string location = dialog.AlbumLocation;
-
-				try {
-					album = dialog.Account.Facebook.CreateAlbum (name, description, location);
-				}
-				catch (FacebookException fe) {
-					HigMessageDialog mbox = new HigMessageDialog (dialog, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
-							Gtk.MessageType.Error, Gtk.ButtonsType.Ok, Catalog.GetString ("Creating a new album failed"),
-							String.Format (Catalog.GetString ("An error occurred creating a new album.\n\n{0}"), fe.Message));
-					mbox.Run ();
-					mbox.Destroy ();
-					return;
-				}
-			} else {
-				album = dialog.ActiveAlbum;
-			}
-
-			if (dialog.Account != null) {
-				dialog.Hide ();
-
-				command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (Upload));
-				command_thread.Name = Mono.Unix.Catalog.GetString ("Uploading Pictures");
-
-				progress_dialog = new ThreadProgressDialog (command_thread, selection.Items.Length);
-				progress_dialog.Start ();
-			}
-
-			dialog.Destroy ();
-		}
-
-		void Upload ()
-		{
-			IBrowsableItem [] items = dialog.Items;
-			string [] captions = dialog.Captions;
-			dialog.StoreCaption ();
-
-			long sent_bytes = 0;
-
-			FilterSet filters = new FilterSet ();
-			filters.Add (new JpegFilter ());
-			filters.Add (new ResizeFilter ((uint) size));
-
-			for (int i = 0; i < items.Length; i++) {
-				try {
-					IBrowsableItem item = items [i];
-
-					FileInfo file_info;
-					Log.DebugFormat ("uploading {0}", i);
-
-					progress_dialog.Message = String.Format (Catalog.GetString ("Uploading picture \"{0}\" ({1} of {2})"), item.Name, i + 1, items.Length);
-					progress_dialog.ProgressText = string.Empty;
-					progress_dialog.Fraction = i / (double) items.Length;
-
-					FilterRequest request = new FilterRequest (item.DefaultVersion.Uri);
-					filters.Convert (request);
-
-					file_info = new FileInfo (request.Current.LocalPath);
-
-					album.Upload (captions [i] ?? "", request.Current.LocalPath);
-
-					sent_bytes += file_info.Length;
-				}
-				catch (Exception e) {
-					progress_dialog.Message = String.Format (Catalog.GetString ("Error Uploading To Facebook: {0}"), e.Message);
-					progress_dialog.ProgressText = Catalog.GetString ("Error");
-					Log.DebugException (e);
-
-					if (progress_dialog.PerformRetrySkip ())
-						i--;
-				}
-			}
-
-			progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
-			progress_dialog.Fraction = 1.0;
-			progress_dialog.ProgressText = Catalog.GetString ("Upload Complete");
-			progress_dialog.ButtonLabel = Gtk.Stock.Ok;
-
-			var li = new LinkButton ("http://www.facebook.com/group.php?gid=158960179844&ref=mf", Catalog.GetString ("Visit F-Spot group on Facebook"));
-			progress_dialog.VBoxPackEnd (li);
-			li.ShowAll ();
-		}
-	}
-}
diff --git a/extensions/Exporters/FacebookExport/FacebookExportDialog.cs b/extensions/Exporters/FacebookExport/FacebookExportDialog.cs
deleted file mode 100644
index cf6d6e2..0000000
--- a/extensions/Exporters/FacebookExport/FacebookExportDialog.cs
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * FacebookExportDialog.cs
- *
- * Authors:
- *   George Talusan <george at convolve.ca>
- *   Stephane Delcroix <stephane at delcroix.org>
- *   Jim Ramsay <i.am at jimramsay.com>
- *
- * Copyright (C) 2007 George Talusan
- * Copyright (c) 2008-2009 Novell, Inc.
- * Later changes (2009) by Jim Ramsay
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Reflection;
-using System.Collections;
-using System.Collections.Generic;
-using System.Threading;
-
-using Gtk;
-using GtkBeans;
-
-using Hyena;
-using Hyena.Widgets;
-using FSpot.Utils;
-using FSpot.Platform;
-using FSpot.UI.Dialog;
-
-using Mono.Facebook;
-using Mono.Unix;
-
-namespace FSpot.Exporter.Facebook
-{
-	internal class FacebookExportDialog : BuilderDialog
-	{
-		[GtkBeans.Builder.Object] VBox album_info_vbox;
-		[GtkBeans.Builder.Object] VBox picture_info_vbox;
-		[GtkBeans.Builder.Object] HBox log_buttons_hbox;
-		[GtkBeans.Builder.Object] HButtonBox dialog_action_area;
-		[GtkBeans.Builder.Object] Button login_button;
-		[GtkBeans.Builder.Object] Button logout_button;
-		[GtkBeans.Builder.Object] ProgressBar login_progress;
-		[GtkBeans.Builder.Object] RadioButton existing_album_radiobutton;
-		[GtkBeans.Builder.Object] RadioButton create_album_radiobutton;
-		[GtkBeans.Builder.Object] ComboBox existing_album_combobox;
-		[GtkBeans.Builder.Object] Table new_album_info_table;
-		[GtkBeans.Builder.Object] Entry album_name_entry;
-		[GtkBeans.Builder.Object] Entry album_location_entry;
-		[GtkBeans.Builder.Object] Entry album_description_entry;
-		[GtkBeans.Builder.Object] Gtk.ScrolledWindow thumbnails_scrolled_window;
-		[GtkBeans.Builder.Object] TextView caption_textview;
-		[GtkBeans.Builder.Object] TreeView tag_treeview;
-		[GtkBeans.Builder.Object] EventBox tag_image_eventbox;
-		[GtkBeans.Builder.Object] HBox permissions_hbox;
-		[GtkBeans.Builder.Object] CheckButton offline_perm_check;
-		[GtkBeans.Builder.Object] CheckButton photo_perm_check;
-
-		Gtk.Image tag_image;
-		int tag_image_height;
-		int tag_image_width;
-
-		FSpot.Widgets.IconView thumbnail_iconview;
-		Dictionary<long, User> friends;
-
-		private class DateComparer : IComparer
-		{
-			public int Compare (object left,
-			                    object right)
-			{
-				return DateTime.Compare ((left as IBrowsableItem).Time,
-					(right as IBrowsableItem).Time);
-			}
-		}
-
-		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 ());
-			current_item = -1;
-
-			captions = new string [selection.Items.Length];
-			tags = new List<Mono.Facebook.Tag> [selection.Items.Length];
-
-			thumbnail_iconview = new FSpot.Widgets.IconView (selection);
-			thumbnail_iconview.DisplayDates = false;
-			thumbnail_iconview.DisplayTags = false;
-			thumbnail_iconview.DisplayRatings = false;
-			thumbnail_iconview.ButtonPressEvent += HandleThumbnailIconViewButtonPressEvent;
-			thumbnail_iconview.KeyPressEvent += delegate (object sender, KeyPressEventArgs e) {(sender as FSpot.Widgets.IconView).Selection.Clear(); };
-			thumbnails_scrolled_window.Add (thumbnail_iconview);
-			thumbnail_iconview.Show ();
-
-			login_button.Clicked += HandleLoginClicked;
-			logout_button.Clicked += HandleLogoutClicked;
-			offline_perm_check.Toggled += HandlePermissionToggled;
-			photo_perm_check.Toggled += HandlePermissionToggled;
-
-			create_album_radiobutton.Toggled += HandleCreateAlbumToggled;
-			create_album_radiobutton.Active = true;
-
-			existing_album_radiobutton.Toggled += HandleExistingAlbumToggled;
-
-			CellRendererText cell = new CellRendererText ();
-			existing_album_combobox.PackStart (cell, true);
-			existing_album_combobox.SetAttributes (cell, "text", 0);
-
-			tag_image_eventbox.ButtonPressEvent += HandleTagImageButtonPressEvent;
-
-			tag_treeview.Sensitive = false;
-			caption_textview.Sensitive = false;
-
-			DoLogout ();
-
-			account = new FacebookAccount();
-			if (account.Authenticated)
-				DoLogin ();
-		}
-
-		FacebookAccount account;
-		public FacebookAccount Account {
-			get { return account; }
-		}
-
-		string[] captions;
-		public string [] Captions {
-			get {return captions; } 
-		}
-
-		List<Mono.Facebook.Tag>[] tags;
-		int current_item;
-		IBrowsableItem[] items;
-		public IBrowsableItem[] Items {
-			get {return items; }
-		}
-
-		public bool CreateAlbum {
-			get { return create_album_radiobutton.Active; }
-		}
-
-		public string AlbumName {
-			get { return album_name_entry.Text; }
-		}
-
-		public string AlbumLocation {
-			get { return album_location_entry.Text; }
-		}
-
-		public string AlbumDescription {
-			get { return album_description_entry.Text; }
-		}
-		
-		public Album ActiveAlbum {
-			get { return ((AlbumStore) existing_album_combobox.Model).Albums [existing_album_combobox.Active]; }
-		}
-
-		public void StoreCaption ()
-		{
-			// Check for empty text box
-			if (current_item == -1)
-				return;
-			
-			// Store the caption
-			captions [current_item] = caption_textview.Buffer.Text;
-		}
-
-		void HandleThumbnailIconViewButtonPressEvent (object sender, Gtk.ButtonPressEventArgs args)
-		{
-			// Store caption before switching
-			StoreCaption ();
-			
-			int old_item = current_item;
-			current_item = thumbnail_iconview.CellAtPosition ((int) args.Event.X, (int) args.Event.Y, false, false);
-
-			if (current_item < 0 || current_item >=  items.Length) {
-				current_item = old_item;
-				return;
-			}
-
-			string caption = captions [current_item];
-			if (caption == null)
-				captions [current_item] = caption = "";
-			caption_textview.Buffer.Text = caption;
-			caption_textview.Sensitive = true;
-
-			tag_treeview.Model = new TagStore (account.Facebook, tags [current_item], friends);
-
-			IBrowsableItem item = items [current_item];
-
-			if (tag_image_eventbox.Children.Length > 0) {
-				tag_image_eventbox.Remove (tag_image);
-				tag_image.Destroy ();
-			}
-
-			using (Gdk.Pixbuf data = XdgThumbnailSpec.LoadThumbnail (item.DefaultVersion.Uri, ThumbnailSize.Large)) {
-				tag_image_height = data.Height;
-				tag_image_width = data.Width;
-				tag_image = new Gtk.Image (data);
-				tag_image_eventbox.Add (tag_image);
-				tag_image_eventbox.ShowAll ();
-			}
-		}
-
-		public void HandleLoginClicked (object sender, EventArgs args)
-		{
-			if (!account.Authenticated) {
-				Uri uri = account.GetLoginUri ();
-				GtkBeans.Global.ShowUri (Screen, uri.ToString ());
-
-				HigMessageDialog mbox = new HigMessageDialog (this, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
-						Gtk.MessageType.Info, Gtk.ButtonsType.Ok, Catalog.GetString ("Waiting for authentication"),
-						Catalog.GetString ("F-Spot will now launch your browser so that you can log into Facebook.\n\nOnce 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." ));
-
-				mbox.Run ();
-				mbox.Destroy ();
-
-				LoginProgress (0.0, Catalog.GetString ("Authenticating..."));
-				account.Authenticate ();
-			}
-			DoLogin ();
-		}
-
-		void DoLogin ()
-		{
-			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."));
-				error.Run ();
-				error.Destroy ();
-
-				DoLogout ();
-			}
-			else {
-				log_buttons_hbox.Sensitive = false;
-				dialog_action_area.Sensitive = false;
-				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");
-
-						Gtk.Application.Invoke (delegate {
-							offline_perm_check.Active = perm_offline;
-							photo_perm_check.Active = perm_upload;
-							LoginProgress (0.2, Catalog.GetString ("Session established, fetching user info..."));
-						});
-	
-						User me = account.Facebook.GetLoggedInUser ().GetUserInfo ();
-	
-						Gtk.Application.Invoke (delegate {
-							LoginProgress (0.4, Catalog.GetString ("Session established, fetching friend list..."));
-						});
-
-						Friend[] friend_list = account.Facebook.GetFriends ();
-						long[] uids = new long [friend_list.Length];
-	
-						for (int i = 0; i < friend_list.Length; i++)
-							uids [i] = friend_list [i].UId;
-	
-						Gtk.Application.Invoke (delegate {
-							LoginProgress (0.6, Catalog.GetString ("Session established, fetching friend details..."));
-						});
-
-						if (uids.Length > 0) {
-							User[] infos = account.Facebook.GetUserInfo (uids, new string[] { "first_name", "last_name" });
-							friends = new Dictionary<long, User> ();
-
-							foreach (User user in infos)
-								friends.Add (user.uid, user);
-						}
-
-						Gtk.Application.Invoke (delegate {
-							LoginProgress (0.8, Catalog.GetString ("Session established, fetching photo albums..."));
-						});
-						Album[] albums = account.Facebook.GetAlbums ();
-						Gtk.Application.Invoke (delegate {
-							album_info_vbox.Sensitive = true;
-							picture_info_vbox.Sensitive = true;
-							permissions_hbox.Sensitive = true;
-							login_button.Visible = false;
-							logout_button.Visible = true;
-							// Note for translators: {0} and {1} are respectively firstname and surname of the user
-							LoginProgress (1.0, String.Format (Catalog.GetString ("{0} {1} is logged into Facebook"), me.first_name, me.last_name));
-
-							existing_album_combobox.Model = new AlbumStore (albums);
-							existing_album_combobox.Active = 0;
-						});
-					} catch (Exception e) {
-						Log.DebugException (e);
-						Gtk.Application.Invoke (delegate {
-							HigMessageDialog error = new HigMessageDialog (this, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
-									Gtk.MessageType.Error, Gtk.ButtonsType.Ok, Catalog.GetString ("Facebook Connection Error"),
-									String.Format (Catalog.GetString ("There was an error when downloading your information from Facebook.\n\nFacebook said: {0}"), e.Message));
-							error.Run ();
-							error.Destroy ();
-						});
-	
-						account.Deauthenticate ();
-						DoLogout ();
-					} finally {
-						Gtk.Application.Invoke (delegate {
-							log_buttons_hbox.Sensitive = true;
-							dialog_action_area.Sensitive = true;
-						});
-					}
-				});
-			}
-		}
-
-		void HandleLogoutClicked (object sender, EventArgs args)
-		{
-			account.Deauthenticate ();
-			DoLogout ();
-		}
-
-		void DoLogout ()
-		{
-			login_button.Visible = true;
-			logout_button.Visible = false;
-
-			login_progress.Fraction = 0;
-			login_progress.Text = Catalog.GetString ("You are not logged in.");
-
-
-			album_info_vbox.Sensitive = false;
-			picture_info_vbox.Sensitive = false;
-			offline_perm_check.Toggled -= HandlePermissionToggled;
-			photo_perm_check.Toggled -= HandlePermissionToggled;
-			offline_perm_check.Active = false;
-			photo_perm_check.Active = false;
-			offline_perm_check.Toggled += HandlePermissionToggled;
-			photo_perm_check.Toggled += HandlePermissionToggled;
-			permissions_hbox.Sensitive = false;
-		}
-
-		public void HandlePermissionToggled (object sender, EventArgs args)
-		{
-			string permission;
-			if (sender == offline_perm_check) {
-				permission = "offline_access";
-			} else if (sender == photo_perm_check) {
-				permission = "photo_upload";
-			} else {
-				throw new Exception ("Unknown Source object");
-			}
-			CheckButton origin = (CheckButton)sender;
-			bool desired = origin.Active;
-			bool actual = account.HasPermission (permission);
-			if (desired != actual) {
-				if (desired) {
-					Log.DebugFormat ("Granting {0}", permission);
-					account.GrantPermission (permission, this);
-				} else {
-					Log.DebugFormat ("Revoking {0}", permission);
-					account.RevokePermission (permission);
-				}
-				/* Double-check that things work... */
-				actual = account.HasPermission (permission);
-				if (actual != desired) {
-					Log.Warning("Failed to alter permissions");
-				}
-				origin.Active = account.HasPermission (permission);
-			}
-		}
-
-		void HandleCreateAlbumToggled (object sender, EventArgs args)
-		{
-			if (create_album_radiobutton.Active == false)
-				return;
-
-			new_album_info_table.Sensitive = true;
-			existing_album_combobox.Sensitive = false;
-		}
-
-		void HandleExistingAlbumToggled (object sender, EventArgs args)
-		{
-			if (existing_album_radiobutton.Active == false)
-				return;
-
-			new_album_info_table.Sensitive = false;
-			existing_album_combobox.Sensitive = true;
-		}
-
-		void HandleTagImageButtonPressEvent (object sender, Gtk.ButtonPressEventArgs args)
-		{
-			double x = args.Event.X;
-			double y = args.Event.Y;
-
-			// translate the centered image to top left corner
-			double tag_image_center_x = tag_image_width / 2;
-			double tag_image_center_y = tag_image_height / 2;
-
-			double allocation_center_x = tag_image_eventbox.Allocation.Width / 2;
-			double allocation_center_y = tag_image_eventbox.Allocation.Height / 2;
-
-			double dx = allocation_center_x - tag_image_center_x;
-			double dy = allocation_center_y - tag_image_center_y;
-
-			if (dx < 0)
-				dx = 0;
-			if (dy < 0)
-				dy = 0;
-
-			x -= dx;
-			y -= dy;
-
-			// bail if we're in the eventbox but not the image
-			if (x < 0 || x > tag_image_width)
-				return;
-			if (y < 0 || y > tag_image_height)
-				return;
-
-			//FacebookTagPopup popup = new FacebookTagPopup (friends);
-		}
-
-		void LoginProgress (double percentage, string message)
-		{
-			login_progress.Fraction = percentage;
-			login_progress.Text = message;
-			Log.Debug (message);
-		}
-	}
-
-	internal class AlbumStore : ListStore
-	{
-		private Album[] _albums;
-
-		public AlbumStore (Album[] albums) : base (typeof (string))
-		{
-			_albums = albums;
-
-			foreach (Album album in Albums) {
-				AppendValues (album.name);
-			}
-		}
-
-		public Album[] Albums
-		{
-			get { return _albums; }
-		}
-	}
-
-}
diff --git a/extensions/Exporters/FacebookExport/FacebookTagPopup.cs b/extensions/Exporters/FacebookExport/FacebookTagPopup.cs
deleted file mode 100644
index 90953e4..0000000
--- a/extensions/Exporters/FacebookExport/FacebookTagPopup.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * FacebookTagPopup.cs
- *
- * Authors:
- *   George Talusan <george at convolve.ca>
- *   Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (C) 2007 George Talusan
- * Copyright (c) 2008-2009 Novell, Inc.
- *
- * This is free software. See COPYING for details.
- */
-
-using System.Reflection;
-using System.Collections.Generic;
-using FSpot.Widgets;
-using Mono.Facebook;
-
-namespace FSpot.Exporter.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 { return _friends; }
-			set { _friends = value; }
-		}
-	}
-}
diff --git a/extensions/Exporters/FacebookExport/Makefile.am b/extensions/Exporters/FacebookExport/Makefile.am
deleted file mode 100644
index 1c77f22..0000000
--- a/extensions/Exporters/FacebookExport/Makefile.am
+++ /dev/null
@@ -1,37 +0,0 @@
-ASSEMBLY = FSpot.Exporters.FacebookExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_FACEBOOKEXPORT)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	FacebookExport.cs \
-	FacebookExportDialog.cs \
-	FacebookTagPopup.cs \
-	FindNullableClashes.cs \
-	Mono.Facebook/facebook.cs \
-	Mono.Facebook/Album.cs \
-	Mono.Facebook/Error.cs \
-	Mono.Facebook/Event.cs \
-	Mono.Facebook/FacebookException.cs \
-	Mono.Facebook/FacebookParam.cs \
-	Mono.Facebook/FacebookSession.cs \
-	Mono.Facebook/Friend.cs \
-	Mono.Facebook/FriendInfo.cs \
-	Mono.Facebook/Group.cs \
-	Mono.Facebook/Location.cs \
-	Mono.Facebook/Notification.cs \
-	Mono.Facebook/PeopleList.cs \
-	Mono.Facebook/Photo.cs \
-	Mono.Facebook/Responses.cs \
-	Mono.Facebook/SessionInfo.cs \
-	Mono.Facebook/SessionWrapper.cs \
-	Mono.Facebook/Tag.cs \
-	Mono.Facebook/User.cs \
-	Mono.Facebook/Util.cs
-RESOURCES = \
-	FacebookExport.addin.xml \
-	FacebookExport.ui
-
-ASSEMBLY_INFO_SOURCE = Mono.Facebook/AssemblyInfo.cs
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/FacebookExport/Makefile.in b/extensions/Exporters/FacebookExport/Makefile.in
deleted file mode 100644
index f21c237..0000000
--- a/extensions/Exporters/FacebookExport/Makefile.in
+++ /dev/null
@@ -1,828 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/FacebookExport
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.FacebookExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_FACEBOOKEXPORT) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	FacebookExport.cs \
-	FacebookExportDialog.cs \
-	FacebookTagPopup.cs \
-	FindNullableClashes.cs \
-	Mono.Facebook/facebook.cs \
-	Mono.Facebook/Album.cs \
-	Mono.Facebook/Error.cs \
-	Mono.Facebook/Event.cs \
-	Mono.Facebook/FacebookException.cs \
-	Mono.Facebook/FacebookParam.cs \
-	Mono.Facebook/FacebookSession.cs \
-	Mono.Facebook/Friend.cs \
-	Mono.Facebook/FriendInfo.cs \
-	Mono.Facebook/Group.cs \
-	Mono.Facebook/Location.cs \
-	Mono.Facebook/Notification.cs \
-	Mono.Facebook/PeopleList.cs \
-	Mono.Facebook/Photo.cs \
-	Mono.Facebook/Responses.cs \
-	Mono.Facebook/SessionInfo.cs \
-	Mono.Facebook/SessionWrapper.cs \
-	Mono.Facebook/Tag.cs \
-	Mono.Facebook/User.cs \
-	Mono.Facebook/Util.cs
-
-RESOURCES = \
-	FacebookExport.addin.xml \
-	FacebookExport.ui
-
-ASSEMBLY_INFO_SOURCE = Mono.Facebook/AssemblyInfo.cs
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/FacebookExport/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/FacebookExport/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/FlickrExport/FlickrExport.addin.xml b/extensions/Exporters/FlickrExport/FlickrExport.addin.xml
deleted file mode 100644
index 192f120..0000000
--- a/extensions/Exporters/FlickrExport/FlickrExport.addin.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<Addin namespace="FSpot"
-	version="0.7.0.0"
-	name="Flickr Export"
-	description="This extension allows you to export your photos to Flickr and 23hq."
-	author="F-Spot team"
-	url="http://f-spot.org"
-	defaultEnabled="true"
-	category="Export">
-
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-
-	<Extension path = "/FSpot/Menus/Exports">
-		<ExportMenuItem id="Flickr" _label = "_Flickr..." class = "FSpotFlickrExport.FlickrExport" />
-		<ExportMenuItem id="23hq" _label = "_23hq..." class = "FSpotFlickrExport.TwentyThreeHQExport" />
-		<ExportMenuItem id="zooomr" _label = "_Zooomr..." class = "FSpotFlickrExport.ZooomrExport" />
-	</Extension>
-</Addin>
diff --git a/extensions/Exporters/FlickrExport/FlickrExport.cs b/extensions/Exporters/FlickrExport/FlickrExport.cs
deleted file mode 100644
index 680128c..0000000
--- a/extensions/Exporters/FlickrExport/FlickrExport.cs
+++ /dev/null
@@ -1,585 +0,0 @@
-using FlickrNet;
-using System;
-using System.Collections;
-using System.IO;
-using System.Threading;
-using Mono.Unix;
-
-using FSpot;
-using FSpot.Filters;
-using FSpot.Widgets;
-using FSpot.Utils;
-using FSpot.UI.Dialog;
-using Hyena;
-using Hyena.Widgets;
-
-namespace FSpotFlickrExport {
-	public class TwentyThreeHQExport : FlickrExport
-	{
-		public override void Run (IBrowsableCollection selection)
-		{
-			Run (SupportedService.TwentyThreeHQ, selection, false);
-		}
-	}
-
-	public class ZooomrExport : FlickrExport
-	{
-		public override void Run (IBrowsableCollection selection)
-		{
-			Run (SupportedService.Zooomr, selection, false);
-		}
-	}
-
-	public class FlickrExport : FSpot.Extensions.IExporter {
-		IBrowsableCollection selection;
-
-		[Glade.Widget] Gtk.Dialog	  dialog;
-		[Glade.Widget] Gtk.CheckButton    scale_check;
-		[Glade.Widget] Gtk.CheckButton    meta_check;
-		[Glade.Widget] Gtk.CheckButton    tag_check;
-		[Glade.Widget] Gtk.CheckButton    hierarchy_check;
-		[Glade.Widget] Gtk.CheckButton    ignore_top_level_check;
-		[Glade.Widget] Gtk.CheckButton    open_check;
-		[Glade.Widget] Gtk.SpinButton     size_spin;
-		[Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
-		[Glade.Widget] Gtk.Button         auth_flickr;
-		[Glade.Widget] Gtk.Button         auth_done_flickr;
-		[Glade.Widget] Gtk.ProgressBar    used_bandwidth;
-		[Glade.Widget] Gtk.Button         do_export_flickr;
-		[Glade.Widget] Gtk.Label          auth_label;
-		[Glade.Widget] Gtk.RadioButton    public_radio;
-		[Glade.Widget] Gtk.CheckButton    family_check;
-		[Glade.Widget] Gtk.CheckButton    friend_check;
-
-		private Glade.XML xml;
-		private string dialog_name = "flickr_export_dialog";
-		System.Threading.Thread command_thread;
-		ThreadProgressDialog progress_dialog;
-		ProgressItem progress_item;
-
-		public const string EXPORT_SERVICE = "flickr/";
-		public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
-		public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
-		public const string BROWSER_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
-		public const string TAGS_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "tags";
-		public const string STRIP_META_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "strip_meta";
-		public const string PUBLIC_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "public";
-		public const string FAMILY_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "family";
-		public const string FRIENDS_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "friends";
-		public const string TAG_HIERARCHY_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "tag_hierarchy";
-		public const string IGNORE_TOP_LEVEL_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "ignore_top_level";
-
-		bool open;
-		bool scale;
-		bool copy_metadata;
-
-		bool is_public;
-		bool is_friend;
-		bool is_family;
-
-		string token;
-
-		int photo_index;
-		int size;
-		Auth auth;
-
-		FlickrRemote fr;
-		private FlickrRemote.Service current_service;
-
-		string auth_text;
-		private State state;
-
-		private enum State {
-			Disconnected,
-			Connected,
-			InAuth,
-			Authorized
-		}
-
-		private State CurrentState {
-			get { return state; }
-			set {
-				switch (value) {
-				case State.Disconnected:
-					auth_label.Text = auth_text;
-					auth_flickr.Sensitive = true;
-					do_export_flickr.Sensitive = false;
-					auth_flickr.Label = Catalog.GetString ("Authorize");
-					used_bandwidth.Visible = false;
-					break;
-				case State.Connected:
-					auth_flickr.Sensitive = true;
-					do_export_flickr.Sensitive = false;
-					auth_label.Text = string.Format (Catalog.GetString ("Return to this window after you have finished the authorization process on {0} and click the \"Complete Authorization\" button below"), current_service.Name);
-					auth_flickr.Label = Catalog.GetString ("Complete Authorization");
-					used_bandwidth.Visible = false;
-					break;
-				case State.InAuth:
-					auth_flickr.Sensitive = false;
-					auth_label.Text = string.Format (Catalog.GetString ("Logging into {0}"), current_service.Name);
-					auth_flickr.Label = Catalog.GetString ("Checking credentials...");
-					do_export_flickr.Sensitive = false;
-					used_bandwidth.Visible = false;
-					break;
-				case State.Authorized:
-					do_export_flickr.Sensitive = true;
-					auth_flickr.Sensitive = true;
-					auth_label.Text = System.String.Format (Catalog.GetString ("Welcome {0} you are connected to {1}"),
-										auth.User.Username,
-										current_service.Name);
-					auth_flickr.Label = String.Format (Catalog.GetString ("Sign in as a different user"), auth.User.Username);
-					used_bandwidth.Visible = !fr.Connection.PeopleGetUploadStatus().IsPro &&
-									fr.Connection.PeopleGetUploadStatus().BandwidthMax > 0;
-					if (used_bandwidth.Visible) {
-						used_bandwidth.Fraction = fr.Connection.PeopleGetUploadStatus().PercentageUsed;
-						used_bandwidth.Text = string.Format (Catalog.GetString("Used {0} of your allowed {1} monthly quota"),
-									GLib.Format.SizeForDisplay (fr.Connection.PeopleGetUploadStatus().BandwidthUsed),
-									GLib.Format.SizeForDisplay (fr.Connection.PeopleGetUploadStatus().BandwidthMax));
-					}
-					break;
-				}
-				state = value;
-			}
-		}
-
-		public FlickrExport (IBrowsableCollection selection, bool display_tags) :
-			this (SupportedService.Flickr, selection, display_tags)
-		{ }
-
-
-		public FlickrExport (SupportedService service, IBrowsableCollection selection, bool display_tags) : this ()
-		{
-			Run (service, selection, display_tags);
-		}
-
-		public FlickrExport ()
-		{
-
-		}
-
-		public virtual void Run (IBrowsableCollection selection)
-		{
-			Run (SupportedService.Flickr, selection, false);
-		}
-
-		public void Run (SupportedService service, IBrowsableCollection selection, bool display_tags)
-		{
-			this.selection = selection;
-			this.current_service = FlickrRemote.Service.FromSupported (service);
-
-			IconView view = new IconView (selection);
-			view.DisplayTags = display_tags;
-			view.DisplayDates = false;
-
-			xml = new Glade.XML (null, "FlickrExport.glade", dialog_name, "f-spot");
-			xml.Autoconnect (this);
-
-			Dialog.Modal = false;
-			Dialog.TransientFor = null;
-
-			thumb_scrolledwindow.Add (view);
-			HandleSizeActive (null, null);
-
-			public_radio.Toggled += HandlePublicChanged;
-			tag_check.Toggled += HandleTagChanged;
-			hierarchy_check.Toggled += HandleHierarchyChanged;
-			HandleTagChanged (null, null);
-			HandleHierarchyChanged (null, null);
-
-			Dialog.ShowAll ();
-			Dialog.Response += HandleResponse;
-			auth_flickr.Clicked += HandleClicked;
-			auth_text = string.Format (auth_label.Text, current_service.Name);
-			auth_label.Text = auth_text;
-			used_bandwidth.Visible = false;
-
-			LoadPreference (SCALE_KEY);
-			LoadPreference (SIZE_KEY);
-			LoadPreference (BROWSER_KEY);
-			LoadPreference (TAGS_KEY);
-			LoadPreference (TAG_HIERARCHY_KEY);
-			LoadPreference (IGNORE_TOP_LEVEL_KEY);
-			LoadPreference (STRIP_META_KEY);
-			LoadPreference (PUBLIC_KEY);
-			LoadPreference (FAMILY_KEY);
-			LoadPreference (FRIENDS_KEY);
-			LoadPreference (current_service.PreferencePath);
-
-			do_export_flickr.Sensitive = false;
-			fr = new FlickrRemote (token, current_service);
-			if (token != null && token.Length > 0) {
-				StartAuth ();
-			}
-		}
-
-		public bool StartAuth ()
-		{
-			CurrentState = State.InAuth;
-			if (command_thread == null || ! command_thread.IsAlive) {
-				command_thread = new Thread (new ThreadStart (CheckAuthorization));
-				command_thread.Start ();
-			}
-			return true;
-		}
-
-		public void CheckAuthorization ()
-		{
-			AuthorizationEventArgs args = new AuthorizationEventArgs ();
-
-			try {
-				args.Auth = fr.CheckLogin ();
-			} catch (FlickrException e) {
-				args.Exception = e;
-			} 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);
-
-				md.Run ();
-				md.Destroy ();
-				return;
-			}
-
-			Gtk.Application.Invoke (this, args, delegate (object sender, EventArgs sargs) {
-				AuthorizationEventArgs wargs = (AuthorizationEventArgs) sargs;
-
-				do_export_flickr.Sensitive = wargs.Auth != null;
-				if (wargs.Auth != null) {
-					token = wargs.Auth.Token;
-					auth = wargs.Auth;
-					CurrentState = State.Authorized;
-					Preferences.Set (current_service.PreferencePath, token);
-				} else {
-					CurrentState = State.Disconnected;
-				}
-			});
-		}
-
-		private class AuthorizationEventArgs : System.EventArgs {
-			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)
-		{
-			size_spin.Sensitive = scale_check.Active;
-		}
-
-		private void Logout ()
-		{
-			token = null;
-			auth = null;
-			fr = new FlickrRemote (token, current_service);
-			Preferences.Set (current_service.PreferencePath, String.Empty);
-			CurrentState = State.Disconnected;
-		}
-
-		private void Login ()
-		{
-			try {
-				fr = new FlickrRemote (token, current_service);
-				fr.TryWebLogin();
-				CurrentState = State.Connected;
-			} catch (Exception e) {
-				if (e is FlickrApiException && (e as FlickrApiException).Code == 98) {
-					Logout ();
-					Login ();
-				} 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);
-
-					md.Run ();
-					md.Destroy ();
-					CurrentState = State.Disconnected;
-				}
-			}
-		}
-
-		private void HandleProgressChanged (ProgressItem item)
-		{
-			//System.Console.WriteLine ("Changed value = {0}", item.Value);
-			progress_dialog.Fraction = (photo_index - 1.0 + item.Value) / (double) selection.Count;
-		}
-
-		FileInfo info;
-		private void HandleFlickrProgress (object sender, UploadProgressEventArgs args)
-		{
-			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);
-			}
-			progress_dialog.Fraction = (photo_index - 1.0 + (args.Bytes / (double) info.Length)) / (double) selection.Count;
-		}
-
-		private class DateComparer : IComparer
-		{
-			public int Compare (object left, object right)
-			{
-				return DateTime.Compare ((left as IBrowsableItem).Time, (right as IBrowsableItem).Time);
-			}
-		}
-
-		private void Upload () {
-			progress_item = new ProgressItem ();
-			progress_item.Changed += HandleProgressChanged;
-			fr.Connection.OnUploadProgress += HandleFlickrProgress;
-
-			System.Collections.ArrayList ids = new System.Collections.ArrayList ();
-			IBrowsableItem [] photos = selection.Items;
-			Array.Sort (photos, new DateComparer ());
-
-			for (int index = 0; index < photos.Length; index++) {
-				try {
-					IBrowsableItem photo = photos [index];
-					progress_dialog.Message = System.String.Format (
-                                                Catalog.GetString ("Uploading picture \"{0}\""), photo.Name);
-
-					progress_dialog.Fraction = photo_index / (double)selection.Count;
-					photo_index++;
-					progress_dialog.ProgressText = System.String.Format (
-						Catalog.GetString ("{0} of {1}"), photo_index,
-						selection.Count);
-
-					info = new FileInfo (photo.DefaultVersion.Uri.LocalPath);
-					FilterSet stack = new FilterSet ();
-					if (scale)
-						stack.Add (new ResizeFilter ((uint)size));
-
-					string id = fr.Upload (photo, stack, is_public, is_family, is_friend);
-					ids.Add (id);
-
-					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);
-
-				} catch (System.Exception e) {
-					progress_dialog.Message = String.Format (Catalog.GetString ("Error Uploading To {0}: {1}"),
-										 current_service.Name,
-										 e.Message);
-					progress_dialog.ProgressText = Catalog.GetString ("Error");
-					Log.Exception (e);
-
-					if (progress_dialog.PerformRetrySkip ()) {
-						index--;
-						photo_index--;
-					}
-				}
-			}
-			progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
-			progress_dialog.Fraction = 1.0;
-			progress_dialog.ProgressText = Catalog.GetString ("Upload Complete");
-			progress_dialog.ButtonLabel = Gtk.Stock.Ok;
-
-			if (open && ids.Count != 0) {
-				string view_url;
-				if (current_service.Name == "Zooomr.com")
-					view_url = string.Format ("http://www.{0}/photos/{1}/", current_service.Name, auth.User.Username);
-				else {
-					view_url = string.Format ("http://www.{0}/tools/uploader_edit.gne?ids", current_service.Name);
-					bool first = true;
-
-					foreach (string id in ids) {
-						view_url = view_url + (first ? "=" : ",") + id;
-						first = false;
-					}
-				}
-
-				GtkBeans.Global.ShowUri (Dialog.Screen, view_url);
-			}
-		}
-
-		private void HandleClicked (object sender, System.EventArgs args)
-		{
-			switch (CurrentState) {
-			case State.Disconnected:
-				Login ();
-				break;
-			case State.Connected:
-				StartAuth ();
-				break;
-			case State.InAuth:
-				break;
-			case State.Authorized:
-				Logout ();
-				Login ();
-				break;
-			}
-		}
-
-		private void HandlePublicChanged (object sender, EventArgs args)
-		{
-			bool sensitive = ! public_radio.Active;
-			friend_check.Sensitive = sensitive;
-			family_check.Sensitive = sensitive;
-		}
-
-		private void HandleTagChanged (object sender, EventArgs args)
-		{
-			hierarchy_check.Sensitive = tag_check.Active;
-		}
-
-		private void HandleHierarchyChanged (object sender, EventArgs args)
-		{
-			ignore_top_level_check.Sensitive = hierarchy_check.Active;
-		}
-
-		private void HandleResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId != Gtk.ResponseType.Ok) {
-				if (command_thread != null && command_thread.IsAlive)
-					command_thread.Abort ();
-
-				Dialog.Destroy ();
-				return;
-			}
-
-			if (fr.CheckLogin() == null) {
-				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));
-				md.Run ();
-				md.Destroy ();
-				return;
-			}
-
-			fr.ExportTags = tag_check.Active;
-			fr.ExportTagHierarchy = hierarchy_check.Active;
-			fr.ExportIgnoreTopLevel = ignore_top_level_check.Active;
-			open = open_check.Active;
-			scale = scale_check.Active;
-			copy_metadata = !meta_check.Active;
-			is_public = public_radio.Active;
-			is_family = family_check.Active;
-			is_friend = friend_check.Active;
-			if (scale)
-				size = size_spin.ValueAsInt;
-
-			command_thread = new Thread (new ThreadStart (Upload));
-			command_thread.Name = Catalog.GetString ("Uploading Pictures");
-
-			Dialog.Destroy ();
-			progress_dialog = new ThreadProgressDialog (command_thread, selection.Count);
-			progress_dialog.Start ();
-
-			// Save these settings for next time
-			Preferences.Set (SCALE_KEY, scale);
-			Preferences.Set (SIZE_KEY, size);
-			Preferences.Set (BROWSER_KEY, open);
-			Preferences.Set (TAGS_KEY, tag_check.Active);
-			Preferences.Set (STRIP_META_KEY, meta_check.Active);
-			Preferences.Set (PUBLIC_KEY, public_radio.Active);
-			Preferences.Set (FAMILY_KEY, family_check.Active);
-			Preferences.Set (FRIENDS_KEY, friend_check.Active);
-			Preferences.Set (TAG_HIERARCHY_KEY, hierarchy_check.Active);
-			Preferences.Set (IGNORE_TOP_LEVEL_KEY, ignore_top_level_check.Active);
-			Preferences.Set (current_service.PreferencePath, fr.Token);
-		}
-
-		void LoadPreference (string key)
-		{
-			switch (key) {
-			case SCALE_KEY:
-				if (scale_check.Active != Preferences.Get<bool> (key))
-					scale_check.Active = Preferences.Get<bool> (key);
-				break;
-				
-			case SIZE_KEY:
-				size_spin.Value = (double) Preferences.Get<int> (key);
-				break;
-				
-			case BROWSER_KEY:
-				if (open_check.Active != Preferences.Get<bool> (key))
-					open_check.Active = Preferences.Get<bool> (key);
-				break;
-				
-			case TAGS_KEY:
-				if (tag_check.Active != Preferences.Get<bool> (key))
-					tag_check.Active = Preferences.Get<bool> (key);
-				break;
-				
-			case TAG_HIERARCHY_KEY:
-				if (hierarchy_check.Active != Preferences.Get<bool> (key))
-					hierarchy_check.Active = Preferences.Get<bool> (key);
-				break;
-				
-			case IGNORE_TOP_LEVEL_KEY:
-				if (ignore_top_level_check.Active != Preferences.Get<bool> (key))
-					ignore_top_level_check.Active = Preferences.Get<bool> (key);
-				break;
-				
-			case STRIP_META_KEY:
-				if (meta_check.Active != Preferences.Get<bool> (key))
-					meta_check.Active = Preferences.Get<bool> (key);
-				break;
-				
-			case FlickrRemote.TOKEN_FLICKR:
-			case FlickrRemote.TOKEN_23HQ:
-			case FlickrRemote.TOKEN_ZOOOMR:
-				token = Preferences.Get<string> (key);
-				break;
-				
-			case PUBLIC_KEY:
-				if (public_radio.Active != Preferences.Get<bool> (key))
-					public_radio.Active = Preferences.Get<bool> (key);
-				break;
-				
-			case FAMILY_KEY:
-				if (family_check.Active != Preferences.Get<bool> (key))
-					family_check.Active = Preferences.Get<bool> (key);
-				break;
-				
-			case FRIENDS_KEY:
-				if (friend_check.Active != Preferences.Get<bool> (key))
-					friend_check.Active = Preferences.Get<bool> (key);
-				break;
-				/*
-			case Preferences.EXPORT_FLICKR_EMAIL:
-
-				/*
-			case Preferences.EXPORT_FLICKR_EMAIL:
-				email_entry.Text = (string) val;
-				break;
-				*/
-			}
-		}
-
-		private Gtk.Dialog Dialog {
-			get {
-				if (dialog == null)
-					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
-
-				return dialog;
-			}
-		}
-	}
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrExport.glade b/extensions/Exporters/FlickrExport/FlickrExport.glade
deleted file mode 100644
index fd3fdc1..0000000
--- a/extensions/Exporters/FlickrExport/FlickrExport.glade
+++ /dev/null
@@ -1,504 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--*- mode: xml -*-->
-<glade-interface>
-  <requires lib="canvas"/>
-  <requires lib="gnome"/>
-  <widget class="GtkDialog" id="flickr_export_dialog">
-    <property name="title" translatable="yes">Export</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <property name="has_separator">False</property>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="vbox33">
-        <property name="visible">True</property>
-        <child>
-          <widget class="GtkHBox" id="hbox35">
-            <property name="visible">True</property>
-            <property name="border_width">6</property>
-            <child>
-              <widget class="GtkFrame" id="frame26">
-                <property name="visible">True</property>
-                <property name="label_xalign">0</property>
-                <property name="shadow_type">GTK_SHADOW_NONE</property>
-                <child>
-                  <widget class="GtkAlignment" id="alignment30">
-                    <property name="visible">True</property>
-                    <property name="left_padding">12</property>
-                    <child>
-                      <widget class="GtkScrolledWindow" id="thumb_scrolledwindow">
-                        <property name="width_request">180</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                        <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                        <property name="shadow_type">GTK_SHADOW_IN</property>
-                        <child>
-                          <placeholder/>
-                        </child>
-                      </widget>
-                    </child>
-                  </widget>
-                </child>
-                <child>
-                  <widget class="GtkLabel" id="label85">
-                    <property name="visible">True</property>
-                    <property name="label" translatable="yes"><b>Photos</b></property>
-                    <property name="use_markup">True</property>
-                  </widget>
-                  <packing>
-                    <property name="type">label_item</property>
-                  </packing>
-                </child>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkVBox" id="vbox36">
-                <property name="visible">True</property>
-                <property name="spacing">6</property>
-                <child>
-                  <widget class="GtkFrame" id="frame28">
-                    <property name="visible">True</property>
-                    <property name="label_xalign">0</property>
-                    <property name="shadow_type">GTK_SHADOW_NONE</property>
-                    <child>
-                      <widget class="GtkAlignment" id="alignment32">
-                        <property name="visible">True</property>
-                        <property name="left_padding">12</property>
-                        <child>
-                          <widget class="GtkVBox" id="vbox37">
-                            <property name="visible">True</property>
-                            <property name="spacing">6</property>
-                            <child>
-                              <widget class="GtkLabel" id="auth_label">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">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. </property>
-                                <property name="wrap">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkButton" id="auth_flickr">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="response_id">0</property>
-                                <child>
-                                  <widget class="GtkAlignment" id="alignment59">
-                                    <property name="visible">True</property>
-                                    <property name="xscale">0</property>
-                                    <property name="yscale">0</property>
-                                    <child>
-                                      <widget class="GtkHBox" id="hbox82">
-                                        <property name="visible">True</property>
-                                        <property name="spacing">2</property>
-                                        <child>
-                                          <widget class="GtkImage" id="image40">
-                                            <property name="visible">True</property>
-                                            <property name="stock">gtk-yes</property>
-                                          </widget>
-                                          <packing>
-                                            <property name="expand">False</property>
-                                            <property name="fill">False</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <widget class="GtkLabel" id="label206">
-                                            <property name="visible">True</property>
-                                            <property name="label" translatable="yes">Authorize</property>
-                                            <property name="use_underline">True</property>
-                                          </widget>
-                                          <packing>
-                                            <property name="expand">False</property>
-                                            <property name="fill">False</property>
-                                            <property name="position">1</property>
-                                          </packing>
-                                        </child>
-                                      </widget>
-                                    </child>
-                                  </widget>
-                                </child>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkProgressBar" id="used_bandwidth">
-                                <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="text" translatable="yes"></property>
-                              </widget>
-                              <packing>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkCheckButton" id="open_check">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">_View photos in browser when done uploading</property>
-                                <property name="use_underline">True</property>
-                                <property name="response_id">0</property>
-                                <property name="active">True</property>
-                                <property name="draw_indicator">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">3</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="staus_label">
-                                <property name="visible">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">4</property>
-                              </packing>
-                            </child>
-                          </widget>
-                        </child>
-                      </widget>
-                    </child>
-                    <child>
-                      <widget class="GtkLabel" id="label92">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes"><b>Account</b></property>
-                        <property name="use_markup">True</property>
-                      </widget>
-                      <packing>
-                        <property name="type">label_item</property>
-                      </packing>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                  </packing>
-                </child>
-                <child>
-                  <widget class="GtkFrame" id="frame45">
-                    <property name="visible">True</property>
-                    <property name="label_xalign">0</property>
-                    <property name="shadow_type">GTK_SHADOW_NONE</property>
-                    <child>
-                      <widget class="GtkAlignment" id="alignment60">
-                        <property name="visible">True</property>
-                        <property name="left_padding">12</property>
-                        <child>
-                          <widget class="GtkVBox" id="vbox80">
-                            <property name="visible">True</property>
-                            <property name="spacing">6</property>
-                            <child>
-                              <widget class="GtkRadioButton" id="private_radio">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Private</property>
-                                <property name="use_underline">True</property>
-                                <property name="response_id">0</property>
-                                <property name="draw_indicator">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkAlignment" id="alignment61">
-                                <property name="visible">True</property>
-                                <property name="left_padding">24</property>
-                                <child>
-                                  <widget class="GtkVBox" id="vbox81">
-                                    <property name="visible">True</property>
-                                    <property name="spacing">6</property>
-                                    <child>
-                                      <widget class="GtkCheckButton" id="friend_check">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="label" translatable="yes">Visible to Friends</property>
-                                        <property name="use_underline">True</property>
-                                        <property name="response_id">0</property>
-                                        <property name="draw_indicator">True</property>
-                                      </widget>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <widget class="GtkCheckButton" id="family_check">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="label" translatable="yes">Visible to Family</property>
-                                        <property name="use_underline">True</property>
-                                        <property name="response_id">0</property>
-                                        <property name="draw_indicator">True</property>
-                                      </widget>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">1</property>
-                                      </packing>
-                                    </child>
-                                  </widget>
-                                </child>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkRadioButton" id="public_radio">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Public</property>
-                                <property name="use_underline">True</property>
-                                <property name="response_id">0</property>
-                                <property name="active">True</property>
-                                <property name="draw_indicator">True</property>
-                                <property name="group">private_radio</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                          </widget>
-                        </child>
-                      </widget>
-                    </child>
-                    <child>
-                      <widget class="GtkLabel" id="priv_label">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes"><b>Viewing permissions</b></property>
-                        <property name="use_markup">True</property>
-                      </widget>
-                      <packing>
-                        <property name="type">label_item</property>
-                      </packing>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <widget class="GtkFrame" id="frame29">
-                    <property name="visible">True</property>
-                    <property name="label_xalign">0</property>
-                    <property name="shadow_type">GTK_SHADOW_NONE</property>
-                    <child>
-                      <widget class="GtkAlignment" id="alignment33">
-                        <property name="visible">True</property>
-                        <property name="left_padding">12</property>
-                        <child>
-                          <widget class="GtkVBox" id="vbox38">
-                            <property name="visible">True</property>
-                            <property name="spacing">6</property>
-                            <child>
-                              <widget class="GtkHBox" id="hbox45">
-                                <property name="visible">True</property>
-                                <child>
-                                  <widget class="GtkCheckButton" id="scale_check">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="label" translatable="yes">_Resize to: </property>
-                                    <property name="use_underline">True</property>
-                                    <property name="response_id">0</property>
-                                    <property name="draw_indicator">True</property>
-                                    <signal name="toggled" handler="HandleSizeActive"/>
-                                  </widget>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkSpinButton" id="size_spin">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="adjustment">400 0 10000 1 10 10</property>
-                                    <property name="climb_rate">1</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkLabel" id="label136">
-                                    <property name="visible">True</property>
-                                    <property name="label" translatable="yes">pixels</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">2</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <placeholder/>
-                                </child>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="GtkVBox" id="vbox39">
-                                <property name="visible">True</property>
-                                <property name="spacing">6</property>
-                                <child>
-                                  <widget class="GtkCheckButton" id="meta_check">
-                                    <property name="can_focus">True</property>
-                                    <property name="label" translatable="yes">Strip _metadata</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="response_id">0</property>
-                                    <property name="draw_indicator">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkHBox" id="hbox7">
-                                    <property name="visible">True</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <child>
-                                      <widget class="GtkCheckButton" id="tag_check">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="label" translatable="yes">_Export tags</property>
-                                        <property name="use_underline">True</property>
-                                        <property name="response_id">0</property>
-                                        <property name="draw_indicator">True</property>
-                                      </widget>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <widget class="GtkCheckButton" id="hierarchy_check">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="label" translatable="yes">Export tag _hierarchy</property>
-                                        <property name="use_underline">True</property>
-                                        <property name="response_id">0</property>
-                                        <property name="draw_indicator">True</property>
-                                      </widget>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">1</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <widget class="GtkCheckButton" id="ignore_top_level_check">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="label" translatable="yes">Ignore _top level tags</property>
-                                        <property name="use_underline">True</property>
-                                        <property name="response_id">0</property>
-                                        <property name="draw_indicator">True</property>
-                                      </widget>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">2</property>
-                                      </packing>
-                                    </child>
-                                  </widget>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </widget>
-                        </child>
-                      </widget>
-                    </child>
-                    <child>
-                      <widget class="GtkLabel" id="label94">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes"><b>Style</b></property>
-                        <property name="use_markup">True</property>
-                      </widget>
-                      <packing>
-                        <property name="type">label_item</property>
-                      </packing>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">2</property>
-                  </packing>
-                </child>
-              </widget>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="hbuttonbox6">
-            <property name="visible">True</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
-            <child>
-              <widget class="GtkButton" id="button13">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-cancel</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-6</property>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkButton" id="do_export_flickr">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label" translatable="yes">_Export</property>
-                <property name="use_underline">True</property>
-                <property name="response_id">-5</property>
-              </widget>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-</glade-interface>
diff --git a/extensions/Exporters/FlickrExport/FlickrRemote.cs b/extensions/Exporters/FlickrExport/FlickrRemote.cs
deleted file mode 100644
index 3e4ea96..0000000
--- a/extensions/Exporters/FlickrExport/FlickrRemote.cs
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Simple upload based on the api at
- * http://www.flickr.com/services/api/upload.api.html
- *
- * Modified by acs in order to use Flickr.Net
- *
- * Modified in order to use the new Auth API
- *
- * We use now the search API also
- *
- */
-using System;
-using System.IO;
-using System.Text;
-using System.Collections;
-using FlickrNet;
-using FSpot;
-using FSpot.Utils;
-using FSpot.Filters;
-using Hyena;
-
-public class FlickrRemote {
-	public static Licenses    licenses;
-	private string            frob;
-	private string            token;
-	private Auth              auth;
-	private Flickr            flickr;
-
-	public bool               ExportTags;
-	public bool               ExportTagHierarchy;
-	public bool               ExportIgnoreTopLevel;
-	public FSpot.ProgressItem Progress;
-
-	public const string TOKEN_FLICKR = Preferences.APP_FSPOT_EXPORT_TOKENS + "flickr";
-	public const string TOKEN_23HQ = Preferences.APP_FSPOT_EXPORT_TOKENS + "23hq";
-	public const string TOKEN_ZOOOMR = Preferences.APP_FSPOT_EXPORT_TOKENS + "zooomr";
-
-	public FlickrRemote (string token, Service service)
-	{
-		if (token == null || token.Length == 0) {
-			this.flickr = new Flickr (service.ApiKey, service.Secret);
-			this.token = null;
-		} else {
-			this.flickr = new Flickr (service.ApiKey, service.Secret, token);
-			this.token = token;
-		}
-
-		this.flickr.CurrentService = service.Id;
-	}
-
-	public string Token {
-		get { return token; }
-		set {
-			token = value;
-			flickr.AuthToken = value;
-		}
-	}
-
-	public Flickr Connection {
-		get { return flickr; }
-	}
-
-	public License[] GetLicenses ()
-	{
-		// Licenses won't change normally in a user session
-		if (licenses == null) {
-			try {
-				licenses = flickr.PhotosLicensesGetInfo();
-			} catch (FlickrNet.FlickrApiException e ) {
-				Log.Error (e.Code + ": " + e.Verbose );
-				return null;
-			}
-		}
-		return licenses.LicenseCollection;
-	}
-
-	public ArrayList Search (string[] tags, int licenseId)
-	{
-		ArrayList photos_url = new ArrayList ();
-		// Photos photos = flickr.PhotosSearchText (tags, licenseId);
-		Photos photos = flickr.PhotosSearch (tags);
-
-		if (photos != null) {
-			foreach (FlickrNet.Photo photo in photos.PhotoCollection) {
-				photos_url.Add (photo.ThumbnailUrl);
-			}
-		}
-
-		return photos_url;
-	}
-
-	public ArrayList Search (string tags, int licenseId)
-	{
-		ArrayList photos_url = new ArrayList ();
-		Photos photos = flickr.PhotosSearchText (tags, licenseId);
-
-		if (photos != null) {
-			foreach (FlickrNet.Photo photo in photos.PhotoCollection) {
-				photos_url.Add (photo.ThumbnailUrl);
-			}
-		}
-		return photos_url;
-	}
-
-	public Auth CheckLogin ()
-	{
-		try {
-			if (frob == null) {
-				frob = flickr.AuthGetFrob ();
-				if (frob ==  null) {
-					Log.Error ("ERROR: Problems login in Flickr. Don't have a frob");
-					return null;
-				}
-			}
-		} catch (Exception e) {
-			Log.Error ("Error logging in: {0}", e.Message);
-		}
-
-		if (token == null) {
-			try {
-				auth = flickr.AuthGetToken(frob);
-				token = auth.Token;
-				flickr.AuthToken = token;
-
-				return auth;
-			} catch (FlickrNet.FlickrApiException ex) {
-				Log.Error ("Problems logging in to Flickr - " + ex.Verbose);
-				return null;
-			}
-		}
-
-		auth = flickr.AuthCheckToken ("token");
-		return auth;
-	}
-
-	public string Upload (IBrowsableItem photo, IFilter filter, bool is_public, bool is_family, bool is_friend)
-	{
-		if (token == null) {
-			throw new Exception ("Must Login First");
-		}
-		// FIXME flickr needs rotation
-		string  error_verbose;
-
-		using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
-
-			try {
-				string tags = null;
-
-				filter.Convert (request);
-				string path = request.Current.LocalPath;
-
-				if (ExportTags && photo.Tags != null) {
-					StringBuilder taglist = new StringBuilder ();
-					FSpot.Tag [] t = photo.Tags;
-					FSpot.Tag tag_iter = null;
-
-					for (int i = 0; i < t.Length; i++) {
-						if (i > 0)
-							taglist.Append (",");
-
-						taglist.Append (String.Format ("\"{0}\"", t[i].Name));
-
-						// Go through the tag parents
-						if (ExportTagHierarchy) {
-							tag_iter = t[i].Category;
-							while (tag_iter != App.Instance.Database.Tags.RootCategory && tag_iter != null) {
-								// Skip top level tags because they have no meaning in a linear tag database
-								if (ExportIgnoreTopLevel && tag_iter.Category == App.Instance.Database.Tags.RootCategory) {
-									break;
-								}
-
-								// FIXME Look if the tag is already there!
-								taglist.Append (",");
-								taglist.Append (String.Format ("\"{0}\"", tag_iter.Name));
-								tag_iter = tag_iter.Category;
-							}
-						}
-
-					}
-
-					tags = taglist.ToString ();
-				}
-				try {
-					string photoid =
-						flickr.UploadPicture (path, photo.Name, photo.Description, tags, is_public, is_family, is_friend);
-					return photoid;
-				} catch (FlickrNet.FlickrException ex) {
-					Log.Error ("Problems uploading picture: " + ex.ToString());
-					error_verbose = ex.ToString();
-				}
-			} catch (Exception e) {
-				// FIXME we need to distinguish between file IO errors and xml errors here
-				throw new System.Exception ("Error while uploading", e);
-			}
-		}
-
-		throw new System.Exception (error_verbose);
-	}
-
-	public void TryWebLogin () {
-		frob = flickr.AuthGetFrob ();
-		string login_url = flickr.AuthCalcUrl (frob, FlickrNet.AuthLevel.Write);
-
-		GtkBeans.Global.ShowUri (null, login_url);
-	}
-
-	public class Service {
-		public string ApiKey;
-		public string Secret;
-		public SupportedService Id;
-		public string Name;
-		public string PreferencePath;
-
-		public static Service [] Supported = {
-			new Service (SupportedService.Flickr, "Flickr.com", "c6b39ee183385d9ce4ea188f85945016", "0a951ac44a423a04", TOKEN_FLICKR),
-			new Service (SupportedService.TwentyThreeHQ, "23hq.com", "c6b39ee183385d9ce4ea188f85945016", "0a951ac44a423a04", TOKEN_23HQ),
-			new Service (SupportedService.Zooomr, "Zooomr.com", "a2075d8ff1b7b059df761649835562e4", "6c66738681", TOKEN_ZOOOMR)
-		};
-
-		public Service (SupportedService id, string name, string api_key, string secret, string pref)
-		{
-			Id = id;
-			ApiKey = api_key;
-			Secret = secret;
-			Name = name;
-			PreferencePath = pref;
-		}
-
-		public static Service FromSupported (SupportedService id)
-		{
-			foreach (Service s in Supported) {
-				if (s.Id == id)
-					return s;
-			}
-
-			throw new System.ArgumentException ("Unknown service type");
-		}
-	}
-}
diff --git a/extensions/Exporters/FlickrExport/Makefile.am b/extensions/Exporters/FlickrExport/Makefile.am
deleted file mode 100644
index 6a62ecf..0000000
--- a/extensions/Exporters/FlickrExport/Makefile.am
+++ /dev/null
@@ -1,14 +0,0 @@
-ASSEMBLY = FSpot.Exporters.FlickrExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_FLICKREXPORT)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	FlickrExport.cs \
-	FlickrRemote.cs
-
-RESOURCES = \
-	FlickrExport.addin.xml \
-	FlickrExport.glade
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/FlickrExport/Makefile.in b/extensions/Exporters/FlickrExport/Makefile.in
deleted file mode 100644
index 429251a..0000000
--- a/extensions/Exporters/FlickrExport/Makefile.in
+++ /dev/null
@@ -1,805 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/FlickrExport
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.FlickrExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_FLICKREXPORT) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	FlickrExport.cs \
-	FlickrRemote.cs
-
-RESOURCES = \
-	FlickrExport.addin.xml \
-	FlickrExport.glade
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/FlickrExport/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/FlickrExport/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/FolderExport/FolderExport.addin.xml b/extensions/Exporters/FolderExport/FolderExport.addin.xml
deleted file mode 100644
index d98e734..0000000
--- a/extensions/Exporters/FolderExport/FolderExport.addin.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<Addin namespace="FSpot"
-	version="0.7.0.0"
-	name="Folder Export"
-	description="This extension allows you to export your photos to HTML galleries, Original galleries or just to a folder."
-	author="F-Spot team"
-	url="http://f-spot.org"
-	defaultEnabled="true"
-	category="Export">
-
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-
-	<Extension path = "/FSpot/Menus/Exports">
-		<ExportMenuItem id="Folder" _label = "F_older..." class = "FSpotFolderExport.FolderExport" />
-	</Extension>
-</Addin>
diff --git a/extensions/Exporters/FolderExport/FolderExport.cs b/extensions/Exporters/FolderExport/FolderExport.cs
deleted file mode 100644
index 9b8fb43..0000000
--- a/extensions/Exporters/FolderExport/FolderExport.cs
+++ /dev/null
@@ -1,1407 +0,0 @@
-/*
- * Copyright (C) 2005 Alessandro Gervaso <gervystar at gervystar.net>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * 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.
- */
-
-//This should be used to export the selected pics to an original gallery
-//located on a GIO location.
-using System;
-using System.IO;
-using System.Runtime.InteropServices;
-using System.Collections;
-
-using Hyena;
-
-using Mono.Unix;
-
-using ICSharpCode.SharpZipLib.Checksums;
-using ICSharpCode.SharpZipLib.Zip;
-using ICSharpCode.SharpZipLib.GZip;
-
-using FSpot;
-using FSpot.Filters;
-using FSpot.Widgets;
-using FSpot.Utils;
-using FSpot.UI.Dialog;
-
-namespace FSpotFolderExport {
-	public class FolderExport : FSpot.Extensions.IExporter {
-		IBrowsableCollection selection;
-
-		[Glade.Widget] Gtk.Dialog dialog;
-		[Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
-		[Glade.Widget] Gtk.Entry name_entry;
-		[Glade.Widget] Gtk.Entry description_entry;
-
-		//[Glade.Widget] Gtk.CheckButton meta_check;
-		[Glade.Widget] Gtk.CheckButton scale_check;
-		[Glade.Widget] Gtk.CheckButton export_tags_check;
-		[Glade.Widget] Gtk.CheckButton export_tag_icons_check;
-		[Glade.Widget] Gtk.CheckButton open_check;
-
-		[Glade.Widget] Gtk.RadioButton static_radio;
-		[Glade.Widget] Gtk.RadioButton original_radio;
-		[Glade.Widget] Gtk.RadioButton plain_radio;
-
-		[Glade.Widget] Gtk.SpinButton size_spin;
-
-		[Glade.Widget] Gtk.HBox chooser_hbox;
-
-		public const string EXPORT_SERVICE = "folder/";
-		public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
-		public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
-		public const string OPEN_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
-		public const string EXPORT_TAGS_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "export_tags";
-		public const string EXPORT_TAG_ICONS_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "export_tag_icons";
-		public const string METHOD_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "method";
-		public const string URI_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "uri";
-		public const string SHARPEN_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "sharpen";
-		public const string INCLUDE_TARBALLS_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "include_tarballs";
-
-		private Glade.XML xml;
-		private string dialog_name = "folder_export_dialog";
-		GLib.File dest;
-		Gtk.FileChooserButton uri_chooser;
-
-		bool open;
-		bool scale;
-		bool exportTags;
-		bool exportTagIcons;
-		int size;
-
-		string description;
-		string gallery_name = "Gallery";
-		// FIXME this needs to be a real temp directory
-		string gallery_path = Path.Combine (Path.GetTempPath (), "f-spot-original-" + System.DateTime.Now.Ticks.ToString ());
-
-		ThreadProgressDialog progress_dialog;
-		System.Threading.Thread command_thread;
-
-		public FolderExport ()
-		{}
-		public void Run (IBrowsableCollection selection)
-		{
-			this.selection = selection;
-
-			IconView view = (IconView) new IconView (selection);
-			view.DisplayDates = false;
-			view.DisplayTags = false;
-
-			xml = new Glade.XML (null, "FolderExport.glade", dialog_name, "f-spot");
-			xml.Autoconnect (this);
-			Dialog.Modal = false;
-			Dialog.TransientFor = null;
-
-			thumb_scrolledwindow.Add (view);
-			HandleSizeActive (null, null);
-			name_entry.Text = gallery_name;
-
-			string uri_path = System.IO.Path.Combine (FSpot.Global.HomeDirectory, "Desktop");
-			if (!System.IO.Directory.Exists (uri_path))
-			        uri_path = FSpot.Global.HomeDirectory;
-
-			uri_chooser = new Gtk.FileChooserButton (Catalog.GetString ("Select Export Folder"),
-								 Gtk.FileChooserAction.SelectFolder);
-
-			uri_chooser.LocalOnly = false;
-
-			if (!String.IsNullOrEmpty (Preferences.Get<string> (URI_KEY)))
-				uri_chooser.SetCurrentFolderUri (Preferences.Get<string> (URI_KEY));
-			else
-				uri_chooser.SetFilename (uri_path);
-
-			chooser_hbox.PackStart (uri_chooser);
-
-			Dialog.ShowAll ();
-			Dialog.Response += HandleResponse;
-
-			LoadPreference (SCALE_KEY);
-			LoadPreference (SIZE_KEY);
-			LoadPreference (OPEN_KEY);
-			LoadPreference (EXPORT_TAGS_KEY);
-			LoadPreference (EXPORT_TAG_ICONS_KEY);
-			LoadPreference (METHOD_KEY);
-		}
-
-		public void HandleSizeActive (object sender, System.EventArgs args)
-		{
-			size_spin.Sensitive = scale_check.Active;
-		}
-
-		public void HandleStandaloneActive (object sender, System.EventArgs args)
-		{
-			export_tags_check.Sensitive = static_radio.Active;
-			HandleExportTagsActive (sender, args);
-		}
-
-		public void HandleExportTagsActive (object sender, System.EventArgs args)
-		{
-			export_tag_icons_check.Sensitive = export_tags_check.Active && static_radio.Active;
-		}
-
-		public void Upload ()
-		{
-			// FIXME use mkstemp
-
-			try {
-				Gtk.Application.Invoke (delegate {Dialog.Hide ();});
-
-				GLib.File source = GLib.FileFactory.NewForPath (Path.Combine (gallery_path, gallery_name));
-				GLib.File target = GLib.FileFactory.NewForPath (Path.Combine (dest.Path, source.Basename));
-
-				if (dest.IsNative)
-					gallery_path = dest.Path;
-
-				progress_dialog.Message = Catalog.GetString ("Building Gallery");
-				progress_dialog.Fraction = 0.0;
-
-				FolderGallery gallery;
-				if (static_radio.Active) {
-					gallery = new HtmlGallery (selection, gallery_path, gallery_name);
-				} else if (original_radio.Active) {
-					gallery = new OriginalGallery (selection, gallery_path, gallery_name);
-				} else {
-					gallery = new FolderGallery (selection, gallery_path, gallery_name);
-				}
-
-				if (scale) {
-					Log.DebugFormat ("Resize Photos to {0}.", size);
-					gallery.SetScale (size);
-				} else {
-					Log.Debug ("Exporting full size.");
-				}
-
-				if (exportTags)
-					gallery.SetExportTags ();
-
-				if (exportTagIcons)
-					gallery.SetExportTagIcons ();
-
-				gallery.Description = description;
-				gallery.GenerateLayout ();
-				
-				FilterSet filter_set = new FilterSet ();
-				if (scale)
-					filter_set.Add (new ResizeFilter ((uint) size));
-				filter_set.Add (new ChmodFilter ());
-				filter_set.Add (new UniqueNameFilter (new SafeUri (gallery_path)));
-
-				for (int photo_index = 0; photo_index < selection.Count; photo_index++)
-				{
-					try {
-						progress_dialog.Message = System.String.Format (Catalog.GetString ("Exporting \"{0}\"..."), selection[photo_index].Name);
-						progress_dialog.Fraction = photo_index / (double) selection.Count;
-						gallery.ProcessImage (photo_index, filter_set);
-						progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of {1}"), (photo_index + 1), selection.Count);
-					}
-					catch (Exception e) {
-						Log.Error (e.ToString ());
-						progress_dialog.Message = String.Format (Catalog.GetString ("Error Copying \"{0}\" to Gallery:{2}{1}"),
-							selection[photo_index].Name, e.Message, Environment.NewLine);
-						progress_dialog.ProgressText = Catalog.GetString ("Error");
-
-						if (progress_dialog.PerformRetrySkip ())
-							photo_index--;
-					}
-				}
-
-				// create the zip tarballs for original
-				if (gallery is OriginalGallery) {
-					bool include_tarballs;
-					try {
-						include_tarballs = Preferences.Get<bool> (INCLUDE_TARBALLS_KEY);
-					} catch (NullReferenceException){
-						include_tarballs = true;
-						Preferences.Set (INCLUDE_TARBALLS_KEY, true);
-					}
-					if (include_tarballs)
-						(gallery as OriginalGallery).CreateZip ();
-				}
-
-				// we've created the structure, now if the destination was local (native) we are done
-				// otherwise we xfer
-				if (!dest.IsNative) {
-					Log.DebugFormat ("Transferring \"{0}\" to \"{1}\"", source.Path, target.Path);
-					progress_dialog.Message = String.Format (Catalog.GetString ("Transferring to \"{0}\""), target.Path);
-					progress_dialog.ProgressText = Catalog.GetString ("Transferring...");
-					source.CopyRecursive (target, GLib.FileCopyFlags.Overwrite, new GLib.Cancellable (), Progress);
-				}
-				
-				// No need to check result here as if result is not true, an Exception will be thrown before
-				progress_dialog.Message = Catalog.GetString ("Export Complete.");
-				progress_dialog.Fraction = 1.0;
-				progress_dialog.ProgressText = Catalog.GetString ("Exporting Photos Completed.");
-				progress_dialog.ButtonLabel = Gtk.Stock.Ok;
-
-				if (open) {
-					Log.DebugFormat (String.Format ("Open URI \"{0}\"", target.Uri.ToString ()));
-					Gtk.Application.Invoke (delegate {GtkBeans.Global.ShowUri (Dialog.Screen, target.Uri.ToString () );});
-				}
-
-				// Save these settings for next time
-				Preferences.Set (SCALE_KEY, scale);
-				Preferences.Set (SIZE_KEY, size);
-				Preferences.Set (OPEN_KEY, open);
-				Preferences.Set (EXPORT_TAGS_KEY, exportTags);
-				Preferences.Set (EXPORT_TAG_ICONS_KEY, exportTagIcons);
-				Preferences.Set (METHOD_KEY, static_radio.Active ? "static" : original_radio.Active ? "original" : "folder" );
-				Preferences.Set (URI_KEY, uri_chooser.Uri);
-			} catch (System.Exception e) {
-				Log.Error (e.ToString ());
-				progress_dialog.Message = e.ToString ();
-				progress_dialog.ProgressText = Catalog.GetString ("Error Transferring");
-			} finally {
-				// if the destination isn't local then we want to remove the temp directory we
-				// created.
-				if (!dest.IsNative)
-					System.IO.Directory.Delete (gallery_path, true);
-
-				Gtk.Application.Invoke (delegate { Dialog.Destroy(); });
-			}
-		}
-
-		private void Progress (long current_num_bytes, long total_num_bytes)
-		{
-			if (total_num_bytes > 0) {
-				progress_dialog.Fraction = current_num_bytes / (double)total_num_bytes;
-			}
-		}
-
-		private void HandleResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId != Gtk.ResponseType.Ok) {
-				// FIXME this is to work around a bug in gtk+ where
-				// the filesystem events are still listened to when
-				// a FileChooserButton is destroyed but not finalized
-				// and an event comes in that wants to update the child widgets.
-				Dialog.Destroy ();
-				uri_chooser.Dispose ();
-				uri_chooser = null;
-				return;
-			}
-
-			dest = GLib.FileFactory.NewForUri (uri_chooser.Uri);
-			open = open_check.Active;
-			scale = scale_check.Active;
-			exportTags = export_tags_check.Active;
-			exportTagIcons = export_tag_icons_check.Active;
-
-			gallery_name = name_entry.Text;
-
-			if (description_entry != null)
-				description = description_entry.Text;
-
-			if (scale)
-				size = size_spin.ValueAsInt;
-
-			command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (Upload));
-			command_thread.Name = Catalog.GetString ("Exporting Photos");
-
-			progress_dialog = new ThreadProgressDialog (command_thread, 1);
-			progress_dialog.Start ();
-		}
-
-		void LoadPreference (string key)
-		{
-			switch (key) {
-			case SCALE_KEY:
-				if (scale_check.Active != Preferences.Get<bool> (key))
-					scale_check.Active = Preferences.Get<bool> (key);
-				break;
-
-			case SIZE_KEY:
-				int size;
-				if (Preferences.TryGet<int> (key, out size))
-					size_spin.Value = (double) size;
-				else
-					size_spin.Value = 400;
-				break;
-
-			case OPEN_KEY:
-				if (open_check.Active != Preferences.Get<bool> (key))
-					open_check.Active = Preferences.Get<bool> (key);
-				break;
-
-			case EXPORT_TAGS_KEY:
-				if (export_tags_check.Active != Preferences.Get<bool> (key))
-					export_tags_check.Active = Preferences.Get<bool> (key);
-				break;
-
-			case EXPORT_TAG_ICONS_KEY:
-				if (export_tag_icons_check.Active != Preferences.Get<bool> (key))
-					export_tag_icons_check.Active = Preferences.Get<bool> (key);
-				break;
-
-			case METHOD_KEY:
-				static_radio.Active = (Preferences.Get<string> (key) == "static");
-				original_radio.Active = (Preferences.Get<string> (key) == "original");
-				plain_radio.Active = (Preferences.Get<string> (key) == "folder");
-				break;
-			}
-		}
-
-		private Gtk.Dialog Dialog {
-			get {
-				if (dialog == null)
-					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
-
-				return dialog;
-			}
-		}
-	}
-
-	internal class FolderGallery
-	{
-		protected IBrowsableCollection collection;
-		protected string gallery_name;
-		protected string gallery_path;
-		protected bool scale;
-		protected int size;
-		protected bool exportTags;
-		protected bool exportTagIcons;
-		protected string description;
-		protected string language;
-		protected System.Uri destination;
-
-		protected ScaleRequest [] requests;
-
-		protected string [] pixbuf_keys = { "quality", null };
-		protected string [] pixbuf_values = { "95", null };
-
-		protected struct ScaleRequest {
-			public string Name;
-			public int Width;
-			public int Height;
-			public bool Skip;
-			public bool CopyExif;
-
-			public ScaleRequest (string name, int width, int height, bool skip) : this (name, width, height, skip, false) {}
-
-			public ScaleRequest (string name, int width, int height, bool skip, bool exif)
-			{
-				this.Name = name != null ? name : String.Empty;
-				this.Width = width;
-				this.Height = height;
-				this.Skip = skip;
-				this.CopyExif = exif;
-			}
-
-			public static ScaleRequest Default = new ScaleRequest (String.Empty, 0, 0, false);
-
-			public bool AvoidScale (int size) {
-				return (size < this.Width && size < this.Height && this.Skip);
-			}
-		}
-
-		internal FolderGallery (IBrowsableCollection selection, string path, string gallery_name)
-		{
-			this.collection = selection;
-			this.gallery_name = gallery_name;
-			this.gallery_path = Path.Combine (path, gallery_name);
-			this.requests = new ScaleRequest [] { ScaleRequest.Default };
-		}
-
-		public virtual void GenerateLayout ()
-		{
-			MakeDir (gallery_path);
-
-		}
-
-		protected virtual string ImageName (int image_num)
-		{
-            var uri = collection [image_num].DefaultVersion.Uri;
-            var dest_uri = new SafeUri (gallery_path);
-
-            // Find an unused name
-            int i = 1;
-            var dest = dest_uri.Append (uri.GetFilename ());
-            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.GetFilename ();
-		}
-
-		public void ProcessImage (int image_num, FilterSet filter_set)
-		{
-			IBrowsableItem photo = collection [image_num];
-			string photo_path = photo.DefaultVersion.Uri.LocalPath;
-			string path;
-			ScaleRequest req;
-
-			req = requests [0];
-
-			MakeDir (SubdirPath (req.Name));
-			path = SubdirPath (req.Name, ImageName (image_num));
-
-			using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
-				filter_set.Convert (request);
-				if (request.Current.LocalPath == path)
-					request.Preserve(request.Current);
-				else
-					System.IO.File.Copy (request.Current.LocalPath, path, true);
-
-				if (photo != null && photo is Photo && App.Instance.Database != null) {
-					App.Instance.Database.Exports.Create ((photo as Photo).Id, (photo as Photo).DefaultVersionId,
-								      ExportStore.FolderExportType,
-								      // FIXME this is wrong, the final path is the one
-								      // after the Xfer.
-								      new SafeUri (path).ToString ());
-				}
-
-				for (int i = 1; i < requests.Length; i++) {
-
-					req = requests [i];
-					if (scale && req.AvoidScale (size))
-						continue;
-
-					FilterSet req_set = new FilterSet ();
-					req_set.Add (new ResizeFilter ((uint)Math.Max (req.Width, req.Height)));
-
-					bool sharpen;
-					try {
-						sharpen = Preferences.Get<bool> (FolderExport.SHARPEN_KEY);
-					} catch (NullReferenceException) {
-						sharpen = true;
-						Preferences.Set (FolderExport.SHARPEN_KEY, true);
-					}
-
-					if (sharpen) {
-						if (req.Name == "lq")
-							req_set.Add (new SharpFilter (0.1, 2, 4));
-						if (req.Name == "thumbs")
-							req_set.Add (new SharpFilter (0.1, 2, 5));
-					}
-					using (FilterRequest tmp_req = new FilterRequest (photo.DefaultVersion.Uri)) {
-						req_set.Convert (tmp_req);
-						MakeDir (SubdirPath (req.Name));
-						path = SubdirPath (req.Name, ImageName (image_num));
-						System.IO.File.Copy (tmp_req.Current.LocalPath, path, true);
-					}
-				}
-			}
-		}
-
-		protected string MakeDir (string path)
-		{
-			try {
-				Directory.CreateDirectory (path);
-			} catch {
-				Log.ErrorFormat ("Error in creating directory \"{0}\"", path);
-			}
-			return path;
-		}
-
-		protected string SubdirPath (string subdir)
-		{
-			return SubdirPath (subdir, null);
-		}
-
-		protected string SubdirPath (string subdir, string file)
-		{
-			string path = Path.Combine (gallery_path, subdir);
-			if (file != null)
-				path = Path.Combine (path, file);
-
-			return path;
-		}
-
-		public string GalleryPath {
-			get {
-				return gallery_path;
-			}
-		}
-
-		public string Description {
-			get {
-				return description;
-			}
-			set {
-				description = value;
-			}
-		}
-
-		public string Language {
-			get {
-				if (language == null)
-					language=GetLanguage();
-				return language;
-			}
-		}
-
-		public Uri Destination {
-			get {
-				return destination;
-			}
-			set {
-				this.destination = value;
-			}
-		}
-
-		public void SetScale (int size) {
-			this.scale = true;
-			this.size = size;
-			requests [0].Width = size;
-			requests [0].Height = size;
-		}
-
-		public void SetExportTags () {
-			this.exportTags = true;
-		}
-
-		public void SetExportTagIcons () {
-			this.exportTagIcons = true;
-		}
-
-		private string GetLanguage()
-		{
-			string language;
-
-			if ((language = Environment.GetEnvironmentVariable ("LC_ALL")) == null)
-				if ((language = Environment.GetEnvironmentVariable ("LC_MESSAGES")) == null)
-					if ((language = Environment.GetEnvironmentVariable ("LANG")) == null)
-						language = "en";
-
-			if (language.IndexOf('.') >= 0)
-				language = language.Substring(0,language.IndexOf('.'));
-			if (language.IndexOf('@') >= 0)
-				language = language.Substring(0,language.IndexOf('@'));
-			language = language.Replace('_','-');
-
-			return language;
-		}
-	}
-
-	class OriginalGallery : FolderGallery
-	{
-		public OriginalGallery (IBrowsableCollection selection, string path, string name) : base (selection, path, name)
-		{
-			requests = new ScaleRequest [] { new ScaleRequest ("hq", 0, 0, false),
-							 new ScaleRequest ("mq", 800, 600, true),
-							 new ScaleRequest ("lq", 640, 480, false, true),
-							 new ScaleRequest ("thumbs", 120, 120, false) };
-		}
-
-		public override void GenerateLayout ()
-		{
-			base.GenerateLayout ();
-			MakeDir (SubdirPath ("comments"));
-			CreateHtaccess();
-			CreateInfo();
-			SetTime ();
-		}
-
-		protected override string ImageName (int photo_index)
-		{
-			return String.Format ("img-{0}.jpg", photo_index + 1);
-		}
-
-		private void SetTime ()
-		{
-			try {
-				for (int i = 0; i < collection.Count; i++)
-					CreateComments (collection [i].DefaultVersion.Uri.LocalPath, i);
-
-				Directory.SetLastWriteTimeUtc(gallery_path, collection [0].Time);
-			} catch (System.Exception e) {
-				Log.Error (e.ToString ());
-			}
-		}
-
-		internal void CreateZip ()
-		{
-			MakeDir (SubdirPath ("zip"));
-			try {
-				if (System.IO.Directory.Exists (SubdirPath ("mq")))
-				    CreateZipFile("mq");
-
-				if (System.IO.Directory.Exists (SubdirPath ("hq")))
-				    CreateZipFile("hq");
-
-			} catch (System.Exception e) {
-				Log.Error (e.ToString ());
-			}
-		}
-
-		private void CreateComments(string photo_path, int photo_index)
-		{
-			StreamWriter comment = File.CreateText(SubdirPath  ("comments", photo_index + 1 + ".txt"));
-			comment.Write("<span>photo " + (photo_index + 1) + "</span> ");
-			comment.Write (collection [photo_index].Description + Environment.NewLine);
-			comment.Close();
-		}
-
-		private void CreateZipFile(string img_quality)
-		{
-			string[] filenames = Directory.GetFiles(SubdirPath (img_quality));
-			Crc32 crc = new Crc32();
-			ZipOutputStream s = new ZipOutputStream(File.Create(SubdirPath ("zip", img_quality + ".zip")));
-
-			s.SetLevel(0);
-			foreach (string file in filenames) {
-				FileStream fs = File.OpenRead(file);
-
-				byte[] buffer = new byte[fs.Length];
-				fs.Read(buffer, 0, buffer.Length);
-				ZipEntry entry = new ZipEntry(Path.GetFileName(file));
-
-				entry.DateTime = DateTime.Now;
-
-				// set Size and the crc, because the information
-				// about the size and crc should be stored in the header
-				// if it is not set it is automatically written in the footer.
-				// (in this case size == crc == -1 in the header)
-				// Some ZIP programs have problems with zip files that don't store
-				// the size and crc in the header.
-				entry.Size = fs.Length;
-				fs.Close();
-
-				crc.Reset();
-				crc.Update(buffer);
-
-				entry.Crc  = crc.Value;
-
-				s.PutNextEntry(entry);
-
-				s.Write(buffer, 0, buffer.Length);
-
-			}
-
-			s.Finish();
-			s.Close();
-		}
-
-		private void CreateHtaccess()
-		{
-			StreamWriter htaccess = File.CreateText(Path.Combine (gallery_path,".htaccess"));
-			htaccess.Write("<Files info.txt>" + Environment.NewLine + "\tdeny from all" + Environment.NewLine+ "</Files>" + Environment.NewLine);
-			htaccess.Close();
-		}
-
-		private void CreateInfo()
-		{
-			StreamWriter info = File.CreateText(Path.Combine (gallery_path, "info.txt"));
-			info.WriteLine("name|" + gallery_name);
-			info.WriteLine("date|" + collection [0].Time.Date.ToString ("dd.MM.yyyy"));
-			info.WriteLine("description|" + description);
-			info.Close();
-		}
-	}
-
-	class HtmlGallery : FolderGallery
-	{
-		int perpage = 16;
-		string stylesheet = "f-spot-simple.css";
-		string altstylesheet = "f-spot-simple-white.css";
-		string javascript = "f-spot.js";
-
-		//Note for translators: light as clear, opposite as dark
-		static string light = Catalog.GetString("Light");
-		static string dark = Catalog.GetString("Dark");
-
-		ArrayList allTagNames = new ArrayList ();
-		Hashtable allTags = new Hashtable ();
-		Hashtable tagSets = new Hashtable ();
-
-		public HtmlGallery (IBrowsableCollection selection, string path, string name) : base (selection, path, name)
-		{
-			requests = new ScaleRequest [] { new ScaleRequest ("hq", 0, 0, false),
-							 new ScaleRequest ("mq", 480, 320, false),
-							 new ScaleRequest ("thumbs", 120, 90, false) };
-		}
-
-		protected override string ImageName (int photo_index)
-		{
-			return String.Format ("img-{0}.jpg", photo_index + 1);
-		}
-
-		public override void GenerateLayout ()
-		{
-			if (collection.Count == 0)
-				return;
-
-			base.GenerateLayout ();
-
-			IBrowsableItem [] photos = collection.Items;
-
-			int i;
-			for (i = 0; i < photos.Length; i++)
-				SavePhotoHtmlIndex (i);
-
-			for (i = 0; i < PageCount; i++)
-				SaveHtmlIndex (i);
-
-			if (exportTags) {
-				// identify tags present in these photos
-				i = 0;
-				foreach (IBrowsableItem photo in photos) {
-					foreach (var tag in photo.Tags) {
-						if (!tagSets.ContainsKey (tag.Name)) {
-							tagSets.Add (tag.Name, new ArrayList ());
-							allTags.Add (tag.Name, tag);
-						}
-						((ArrayList) tagSets [tag.Name]).Add (i);
-					}
-					i++;
-				}
-				allTagNames = new ArrayList (tagSets.Keys);
-				allTagNames.Sort ();
-
-				// create tag pages
-				SaveTagsPage ();
-				foreach (string tag in allTagNames) {
-					for (i = 0; i < TagPageCount (tag); i++)
-						SaveTagIndex (tag, i);
-				}
-			}
-
-			if (exportTags && exportTagIcons) {
-				SaveTagIcons ();
-			}
-
-			MakeDir (SubdirPath ("style"));
-			System.Reflection.Assembly assembly = System.Reflection.Assembly.GetCallingAssembly ();
-			using (Stream s = assembly.GetManifestResourceStream (stylesheet)) {
-				using (Stream fs = System.IO.File.Open (SubdirPath ("style", stylesheet), System.IO.FileMode.Create)) {
-
-					byte [] buffer = new byte [8192];
-					int n;
-					while ((n = s.Read (buffer, 0, buffer.Length)) != 0)
-						fs.Write (buffer, 0,  n);
-
-				}
-			}
-			/* quick and stupid solution
-			   this should have been iterated over an array of stylesheets, really
-			*/
-			using (Stream s = assembly.GetManifestResourceStream (altstylesheet)) {
-				using (Stream fs = System.IO.File.Open (SubdirPath ("style", altstylesheet), System.IO.FileMode.Create)) {
-
-					byte [] buffer = new byte [8192];
-					int n = 0;
-					while ((n = s.Read (buffer, 0, buffer.Length)) != 0)
-						fs.Write (buffer, 0,  n);
-
-				}
-			}
-
-			/* Javascript for persistant style change */
-			MakeDir (SubdirPath ("script"));
-			using (Stream s = assembly.GetManifestResourceStream (javascript)) {
-				using (Stream fs = System.IO.File.Open (SubdirPath ("script", javascript), System.IO.FileMode.Create)) {
-
-					byte [] buffer = new byte [8192];
-					int n = 0;
-					while ((n = s.Read (buffer, 0, buffer.Length)) != 0)
-						fs.Write (buffer, 0,  n);
-
-				}
-			}
-		}
-
-		public int PageCount {
-			get {
-				return 	(int) System.Math.Ceiling (collection.Items.Length / (double)perpage);
-			}
-		}
-
-		public int TagPageCount (string tag)
-		{
-			return (int) System.Math.Ceiling (((ArrayList) tagSets [tag]).Count / (double)perpage);
-		}
-
-		public string PhotoThumbPath (int item)
-		{
-			return System.IO.Path.Combine (requests [2].Name, ImageName (item));
-		}
-
-		public string PhotoWebPath (int item)
-		{
-			return System.IO.Path.Combine (requests [1].Name, ImageName (item));
-		}
-
-		public string PhotoOriginalPath (int item)
-		{
-			return System.IO.Path.Combine (requests [0].Name, ImageName (item));
-		}
-
-		public string PhotoIndexPath (int item)
-		{
-			return (System.IO.Path.GetFileNameWithoutExtension (ImageName (item)) + ".html");
-		}
-
-		public static void WritePageNav (System.Web.UI.HtmlTextWriter writer, string id, string url, string name)
-		{
-			writer.AddAttribute ("id", id);
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("href", url);
-			writer.RenderBeginTag ("a");
-			writer.Write (name);
-			writer.RenderEndTag ();
-
-			writer.RenderEndTag ();
-		}
-
-		public void SavePhotoHtmlIndex (int i)
-		{
-			System.IO.StreamWriter stream = System.IO.File.CreateText (SubdirPath (PhotoIndexPath (i)));
-			System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter (stream);
-
-			//writer.Indent = 4;
-
-			//writer.Write ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
-			writer.WriteLine ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
-			writer.AddAttribute ("xmlns", "http://www.w3.org/1999/xhtml");
-			writer.AddAttribute ("xml:lang", this.Language);
-			writer.RenderBeginTag ("html");
-
-			WriteHeader (writer);
-
-			writer.AddAttribute ("onload", "checkForTheme()");
-			writer.RenderBeginTag ("body");
-
-			writer.AddAttribute ("class", "container1");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("class", "header");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("id", "title");
-			writer.RenderBeginTag ("div");
-			writer.Write (gallery_name);
-			writer.RenderEndTag ();
-
-			writer.AddAttribute ("class", "navi");
-			writer.RenderBeginTag ("div");
-
-			if (i > 0)
-				// Abbreviation of previous
-				WritePageNav (writer, "prev", PhotoIndexPath (i - 1), Catalog.GetString("Prev"));
-
-			WritePageNav (writer, "index", IndexPath (i / perpage), Catalog.GetString("Index"));
-
-			if (exportTags)
-				WritePageNav (writer, "tagpage", TagsIndexPath (), Catalog.GetString ("Tags"));
-
-			if (i < collection.Count -1)
-				WritePageNav (writer, "next", PhotoIndexPath (i + 1), Catalog.GetString("Next"));
-
-			writer.RenderEndTag (); //navi
-
-			writer.RenderEndTag (); //header
-
-			writer.AddAttribute ("class", "photo");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("href", PhotoOriginalPath (i));
-			writer.RenderBeginTag ("a");
-
-			writer.AddAttribute ("src", PhotoWebPath (i));
-			writer.AddAttribute ("alt", "#");
-			writer.AddAttribute ("class", "picture");
-			writer.RenderBeginTag ("img");
-			writer.RenderEndTag (); //img
-			writer.RenderEndTag (); //a
-
-			writer.AddAttribute ("id", "description");
-			writer.RenderBeginTag ("div");
-			writer.Write (collection [i].Description);
-			writer.RenderEndTag (); //div#description
-
-			writer.RenderEndTag (); //div.photo
-
-			WriteTagsLinks (writer, collection [i].Tags);
-
-			WriteStyleSelectionBox (writer);
-
-			writer.RenderEndTag (); //container1
-
-			WriteFooter (writer);
-
-			writer.RenderEndTag (); //body
-			writer.RenderEndTag (); // html
-
-			writer.Close ();
-			stream.Close ();
-		}
-
-		public static string IndexPath (int page_num)
-		{
-			if (page_num == 0)
-				return "index.html";
-			else
-				return String.Format ("index{0}.html", page_num);
-		}
-
-		public static string TagsIndexPath ()
-		{
-			return "tags.html";
-		}
-
-		public static string TagIndexPath (string tag, int page_num)
-		{
-			string name = "tag_"+tag;
-			name = name.Replace ("/", "_").Replace (" ","_");
-			if (page_num == 0)
-				return name + ".html";
-			else
-				return name + String.Format ("_{0}.html", page_num);
-		}
-
-		static string IndexTitle (int page)
-		{
-			return String.Format ("{0}", page + 1);
-		}
-
-		public void WriteHeader (System.Web.UI.HtmlTextWriter writer)
-		{
-			WriteHeader (writer, "");
-		}
-
-		public void WriteHeader (System.Web.UI.HtmlTextWriter writer, string titleExtension)
-		{
-			writer.RenderBeginTag ("head");
-			/* It seems HtmlTextWriter always uses UTF-8, unless told otherwise */
-			writer.Write ("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
-			writer.WriteLine ();
-			writer.RenderBeginTag ("title");
-			writer.Write (gallery_name + titleExtension);
-			writer.RenderEndTag ();
-
-			writer.Write ("<link type=\"text/css\" rel=\"stylesheet\" href=\"");
-			writer.Write (String.Format ("{0}", "style/" + stylesheet));
-			writer.Write ("\" title=\"" + dark + "\" media=\"screen\" />" + Environment.NewLine);
-
-			writer.Write ("<link type=\"text/css\" rel=\"prefetch ") ;
-			writer.Write ("alternate stylesheet\" href=\"");
-			writer.Write (String.Format ("{0}", "style/" + altstylesheet));
-			writer.Write ("\" title=\"" + light + "\" media=\"screen\" />" + Environment.NewLine);
-
-			writer.Write ("<script src=\"script/" + javascript + "\"");
-			writer.Write (" type=\"text/javascript\"></script>" + Environment.NewLine);
-
-			writer.RenderEndTag ();
-		}
-
-		public static void WriteFooter (System.Web.UI.HtmlTextWriter writer)
-		{
-			writer.AddAttribute ("class", "footer");
-			writer.RenderBeginTag ("div");
-
-			writer.Write (Catalog.GetString ("Gallery generated by") + " ");
-
-			writer.AddAttribute ("href", "http://f-spot.org");
-			writer.RenderBeginTag ("a");
-			writer.Write (String.Format ("{0} {1}", FSpot.Defines.PACKAGE, FSpot.Defines.VERSION));
-			writer.RenderEndTag ();
-
-			writer.RenderEndTag ();
-		}
-
-		public static void WriteStyleSelectionBox (System.Web.UI.HtmlTextWriter writer)
-		{
-			//Style Selection Box
-			writer.AddAttribute ("id", "styleboxcontainer");
-			writer.RenderBeginTag ("div");
-			writer.AddAttribute ("id", "stylebox");
-			writer.AddAttribute ("style", "display: none;");
-			writer.RenderBeginTag ("div");
-			writer.RenderBeginTag ("ul");
-			writer.RenderBeginTag ("li");
-			writer.AddAttribute ("href", "#");
-			writer.AddAttribute ("title", dark);
-			writer.AddAttribute ("onclick", "setActiveStyleSheet('" + dark + "')");
-			writer.RenderBeginTag ("a");
-			writer.Write (dark);
-			writer.RenderEndTag (); //a
-			writer.RenderEndTag (); //li
-			writer.RenderBeginTag ("li");
-			writer.AddAttribute ("href", "#");
-			writer.AddAttribute ("title", light);
-			writer.AddAttribute ("onclick", "setActiveStyleSheet('" + light + "')");
-			writer.RenderBeginTag ("a");
-			writer.Write (light);
-			writer.RenderEndTag (); //a
-			writer.RenderEndTag (); //li
-			writer.RenderEndTag (); //ul
-			writer.RenderEndTag (); //div stylebox
-			writer.RenderBeginTag ("div");
-			writer.Write ("<span class=\"style_toggle\">");
-			writer.Write ("<a href=\"javascript:toggle_stylebox()\">");
-			writer.Write ("<span id=\"showlink\">" + Catalog.GetString("Show Styles") + "</span><span id=\"hidelink\" ");
-			writer.Write ("style=\"display:none;\">" + Catalog.GetString("Hide Styles") + "</span></a></span>" + Environment.NewLine);
-			writer.RenderEndTag (); //div toggle
-			writer.RenderEndTag (); //div styleboxcontainer
-		}
-
-		public void WriteTagsLinks (System.Web.UI.HtmlTextWriter writer, FSpot.Tag[] tags)
-		{
-			ArrayList tagsList = new ArrayList (tags.Length);
-			foreach (var tag in tags) {
-				tagsList.Add (tag);
-			}
-			WriteTagsLinks (writer, tagsList);
-		}
-
-		public void WriteTagsLinks (System.Web.UI.HtmlTextWriter writer, System.Collections.ICollection tags)
-		{
-
-			// check if we should write tags
-			if (!exportTags && tags.Count>0)
-				return;
-
-			writer.AddAttribute ("id", "tagbox");
-			writer.RenderBeginTag ("div");
-			writer.RenderBeginTag ("h1");
-			writer.Write (Catalog.GetString ("Tags"));
-			writer.RenderEndTag (); //h1
-			writer.AddAttribute ("id", "innertagbox");
-			writer.RenderBeginTag ("ul");
-			foreach (FSpot.Tag tag in tags) {
-				writer.AddAttribute ("class", "tag");
-				writer.RenderBeginTag ("li");
-				writer.AddAttribute ("href", TagIndexPath (tag.Name, 0));
-				writer.RenderBeginTag ("a");
-				if (exportTagIcons) {
-					writer.AddAttribute ("alt", tag.Name);
-					writer.AddAttribute ("longdesc", Catalog.GetString ("Tags: ")+tag.Name);
-					writer.AddAttribute ("title", Catalog.GetString ("Tags: ")+tag.Name);
-					writer.AddAttribute ("src", TagPath (tag));
-					writer.RenderBeginTag ("img");
-					writer.RenderEndTag ();
-				}
-				writer.Write(" ");
-				if (exportTagIcons)
-					writer.AddAttribute ("class", "tagtext-icon");
-				else
-					writer.AddAttribute ("class", "tagtext-noicon");
-				writer.RenderBeginTag ("span");
-				writer.Write (tag.Name);
-				writer.RenderEndTag (); //span.tagtext
-				writer.RenderEndTag (); //a href
-				writer.RenderEndTag (); //div.tag
-			}
-			writer.RenderEndTag (); //div#tagbox
-		}
-
-		public void SaveTagsPage ()
-		{
-			System.IO.StreamWriter stream = System.IO.File.CreateText (SubdirPath (TagsIndexPath ()));
-			System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter (stream);
-
-			writer.WriteLine ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
-			writer.AddAttribute ("xmlns", "http://www.w3.org/1999/xhtml");
-			writer.AddAttribute ("xml:lang", this.Language);
-			writer.RenderBeginTag ("html");
-			string titleExtension = " " + Catalog.GetString ("Tags");
-			WriteHeader (writer, titleExtension);
-
-			writer.AddAttribute ("onload", "checkForTheme()");
-			writer.AddAttribute ("id", "tagpage");
-			writer.RenderBeginTag ("body");
-
-			writer.AddAttribute ("class", "container1");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("class", "header");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("id", "title");
-			writer.RenderBeginTag ("div");
-			writer.Write (gallery_name + titleExtension);
-			writer.RenderEndTag (); //title div
-
-			writer.AddAttribute ("class", "navi");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("class", "navipage");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("href", IndexPath (0));
-			writer.RenderBeginTag ("a");
-			writer.Write (Catalog.GetString ("Index"));
-			writer.RenderEndTag (); //a
-
-			writer.RenderEndTag (); //navipage
-			writer.RenderEndTag (); //navi
-			writer.RenderEndTag (); //header
-
-			WriteTagsLinks (writer, allTags.Values);
-
-			WriteStyleSelectionBox (writer);
-
-			writer.RenderEndTag (); //container1
-
-			WriteFooter (writer);
-
-			writer.RenderEndTag (); //body
-			writer.RenderEndTag (); //html
-
-			writer.Close ();
-			stream.Close ();
-		}
-
-		public void SaveTagIndex (string tag, int page_num)
-		{
-			System.IO.StreamWriter stream = System.IO.File.CreateText (SubdirPath (TagIndexPath (tag, page_num)));
-			System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter (stream);
-
-			writer.WriteLine ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
-			writer.AddAttribute ("xmlns", "http://www.w3.org/1999/xhtml");
-			writer.AddAttribute ("xml:lang", this.Language);
-			writer.RenderBeginTag ("html");
-			string titleExtension = ": " + tag;
-			WriteHeader (writer, titleExtension);
-
-			writer.AddAttribute ("onload", "checkForTheme()");
-			writer.RenderBeginTag ("body");
-
-			writer.AddAttribute ("class", "container1");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("class", "header");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("id", "title");
-			writer.RenderBeginTag ("div");
-			writer.Write (gallery_name + titleExtension);
-			writer.RenderEndTag (); //title div
-
-			writer.AddAttribute ("class", "navi");
-			writer.RenderBeginTag ("div");
-
-			// link to all photos
-			writer.AddAttribute ("class", "navipage");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("href", IndexPath (0));
-			writer.RenderBeginTag ("a");
-			writer.Write ("Index");
-			writer.RenderEndTag (); //a
-
-			writer.RenderEndTag (); //navipage
-			// end link to all photos
-
-			// link to all tags
-			writer.AddAttribute ("class", "navipage");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("href", TagsIndexPath ());
-			writer.RenderBeginTag ("a");
-			writer.Write ("Tags");
-			writer.RenderEndTag (); //a
-
-			writer.RenderEndTag (); //navipage
-			// end link to all tags
-
-			writer.AddAttribute ("class", "navilabel");
-			writer.RenderBeginTag ("div");
-			writer.Write (Catalog.GetString ("Page:"));
-			writer.RenderEndTag (); //pages div
-
-			int i;
-			for (i = 0; i < TagPageCount (tag); i++) {
-				writer.AddAttribute ("class", i == page_num ? "navipage-current" : "navipage");
-				writer.RenderBeginTag ("div");
-
-				writer.AddAttribute ("href", TagIndexPath (tag, i));
-				writer.RenderBeginTag ("a");
-				writer.Write (IndexTitle (i));
-				writer.RenderEndTag (); //a
-
-				writer.RenderEndTag (); //navipage
-			}
-			writer.RenderEndTag (); //navi
-			writer.RenderEndTag (); //header
-
-			writer.AddAttribute ("class", "thumbs");
-			writer.RenderBeginTag ("div");
-
-			int start = page_num * perpage;
-			ArrayList tagSet = (ArrayList) tagSets [tag];
-			int end = Math.Min (start + perpage, tagSet.Count);
-			for (i = start; i < end; i++) {
-				writer.AddAttribute ("href", PhotoIndexPath ((int) tagSet [i]));
-				writer.RenderBeginTag ("a");
-
-				writer.AddAttribute  ("src", PhotoThumbPath ((int) tagSet [i]));
-				writer.AddAttribute  ("alt", "#");
-				writer.RenderBeginTag ("img");
-				writer.RenderEndTag ();
-
-				writer.RenderEndTag (); //a
-			}
-
-			writer.RenderEndTag (); //thumbs
-
-			writer.AddAttribute ("id", "gallery_description");
-			writer.RenderBeginTag ("div");
-			writer.Write (description);
-			writer.RenderEndTag (); //description
-
-			WriteStyleSelectionBox (writer);
-
-			writer.RenderEndTag (); //container1
-
-			WriteFooter (writer);
-
-			writer.RenderEndTag (); //body
-			writer.RenderEndTag (); //html
-
-			writer.Close ();
-			stream.Close ();
-		}
-
-		public void SaveTagIcons ()
-		{
-			MakeDir (SubdirPath ("tags"));
-			foreach (FSpot.Tag tag in allTags.Values)
-				SaveTagIcon (tag);
-		}
-
-		public void SaveTagIcon (FSpot.Tag tag) {
-			Gdk.Pixbuf icon = tag.Icon;
-			Gdk.Pixbuf scaled = null;
-			if (icon.Height != 52 || icon.Width != 52) {
-				scaled=icon.ScaleSimple(52,52,Gdk.InterpType.Bilinear);
-			} else
-				scaled=icon.Copy ();
-			scaled.Save (SubdirPath("tags",TagName(tag)), "png");
-			scaled.Dispose ();
-		}
-
-		public string TagPath (FSpot.Tag tag)
-		{
-			return System.IO.Path.Combine("tags",TagName(tag));
-		}
-
-		public string TagName (FSpot.Tag tag)
-		{
-			return "tag_"+ ((DbItem)tag).Id+".png";
-		}
-
-		public void SaveHtmlIndex (int page_num)
-		{
-			System.IO.StreamWriter stream = System.IO.File.CreateText (SubdirPath (IndexPath (page_num)));
-			System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter (stream);
-
-			//writer.Indent = 4;
-
-			//writer.Write ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
-			writer.WriteLine ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
-			writer.AddAttribute ("xmlns", "http://www.w3.org/1999/xhtml");
-			writer.AddAttribute ("xml:lang", this.Language);
-			writer.RenderBeginTag ("html");
-			WriteHeader (writer);
-
-			writer.AddAttribute ("onload", "checkForTheme()");
-			writer.RenderBeginTag ("body");
-
-
-
-			writer.AddAttribute ("class", "container1");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("class", "header");
-			writer.RenderBeginTag ("div");
-
-			writer.AddAttribute ("id", "title");
-			writer.RenderBeginTag ("div");
-			writer.Write (gallery_name);
-			writer.RenderEndTag (); //title div
-
-			writer.AddAttribute ("class", "navi");
-			writer.RenderBeginTag ("div");
-
-			if (exportTags) {
-				// link to all tags
-				writer.AddAttribute ("class", "navipage");
-				writer.RenderBeginTag ("div");
-
-				writer.AddAttribute ("href", TagsIndexPath ());
-				writer.RenderBeginTag ("a");
-				writer.Write ("Tags");
-				writer.RenderEndTag (); //a
-
-				writer.RenderEndTag (); //navipage
-				// end link to all tags
-			}
-
-			writer.AddAttribute ("class", "navilabel");
-			writer.RenderBeginTag ("div");
-			writer.Write (Catalog.GetString ("Page:"));
-			writer.RenderEndTag (); //pages div
-
-			int i;
-			for (i = 0; i < PageCount; i++) {
-				writer.AddAttribute ("class", i == page_num ? "navipage-current" : "navipage");
-				writer.RenderBeginTag ("div");
-
-				writer.AddAttribute ("href", IndexPath (i));
-				writer.RenderBeginTag ("a");
-				writer.Write (IndexTitle (i));
-				writer.RenderEndTag (); //a
-
-				writer.RenderEndTag (); //navipage
-			}
-			writer.RenderEndTag (); //navi
-			writer.RenderEndTag (); //header
-
-			writer.AddAttribute ("class", "thumbs");
-			writer.RenderBeginTag ("div");
-
-			int start = page_num * perpage;
-			int end = Math.Min (start + perpage, collection.Count);
-			for (i = start; i < end; i++) {
-				writer.AddAttribute ("href", PhotoIndexPath (i));
-				writer.RenderBeginTag ("a");
-
-				writer.AddAttribute  ("src", PhotoThumbPath (i));
-				writer.AddAttribute  ("alt", "#");
-				writer.RenderBeginTag ("img");
-				writer.RenderEndTag ();
-
-				writer.RenderEndTag (); //a
-			}
-
-			writer.RenderEndTag (); //thumbs
-
-			writer.AddAttribute ("id", "gallery_description");
-			writer.RenderBeginTag ("div");
-			writer.Write (description);
-			writer.RenderEndTag (); //description
-
-			WriteStyleSelectionBox (writer);
-
-			writer.RenderEndTag (); //container1
-
-			WriteFooter (writer);
-
-			writer.RenderEndTag (); //body
-			writer.RenderEndTag (); //html
-
-			writer.Close ();
-			stream.Close ();
-		}
-
-	}
-}
diff --git a/extensions/Exporters/FolderExport/Makefile.am b/extensions/Exporters/FolderExport/Makefile.am
deleted file mode 100644
index f5d2148..0000000
--- a/extensions/Exporters/FolderExport/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-ASSEMBLY = FSpot.Exporters.FolderExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_FOLDEREXPORT)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = FolderExport.cs
-
-RESOURCES = \
-	FolderExport.addin.xml \
-	FolderExport.glade \
-	f-spot-simple-white.css \
-	f-spot-simple.css \
-	f-spot.js
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/FolderExport/Makefile.in b/extensions/Exporters/FolderExport/Makefile.in
deleted file mode 100644
index 870fcf6..0000000
--- a/extensions/Exporters/FolderExport/Makefile.in
+++ /dev/null
@@ -1,805 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/FolderExport
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.FolderExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_FOLDEREXPORT) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = FolderExport.cs
-RESOURCES = \
-	FolderExport.addin.xml \
-	FolderExport.glade \
-	f-spot-simple-white.css \
-	f-spot-simple.css \
-	f-spot.js
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/FolderExport/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/FolderExport/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/GalleryExport/FormClient.cs b/extensions/Exporters/GalleryExport/FormClient.cs
deleted file mode 100644
index 3595c71..0000000
--- a/extensions/Exporters/GalleryExport/FormClient.cs
+++ /dev/null
@@ -1,300 +0,0 @@
-using System;
-using System.Net;
-using System.IO;
-using System.Text;
-using System.Collections;
-using System.Collections.Specialized;
-using System.Web;
-using Hyena;
-
-namespace FSpot {
-	public class FormClient {
-		private struct FormItem {
-			public string Name;
-			public object Value;
-	
-			public FormItem (string name, object value) {
-				Name = name;
-				Value = value;
-			}
-		}
-	
-		private StreamWriter stream_writer;
-		private ArrayList Items;
-	
-		private string boundary;
-		private string start_boundary;
-		private string end_boundary;
-	
-		private bool multipart = false;
-		public bool Multipart {
-			set { multipart = value; }
-		}
-	
-		private bool first_item;
-	
-		public bool Buffer = false;
-		public bool SuppressCookiePath = false;
-	
-		public bool expect_continue = true;
-	
-		public HttpWebRequest Request;
-		public CookieContainer Cookies;
-	
-		public FSpot.ProgressItem Progress;
-	
-		public FormClient (CookieContainer cookies) 
-		{
-			this.Cookies = cookies;
-			this.Items = new ArrayList ();
-		}
-		
-		public FormClient ()
-		{
-			this.Items = new ArrayList ();
-			this.Cookies = new CookieContainer ();
-		}
-		
-		private void GenerateBoundary () 
-		{
-			Guid guid = Guid.NewGuid ();
-			boundary = "--------" + guid.ToString () + "-----";
-			start_boundary = "--" + boundary; 
-			end_boundary = start_boundary + "--";
-		}
-		
-		public void Add (string name, string value)
-		{
-			Items.Add (new FormItem (name, value));
-		}
-		
-		public void Add (string name, FileInfo fileinfo)
-		{
-			multipart = true;
-			Items.Add (new FormItem (name, fileinfo));
-		}
-	
-		private void Write (FormItem item) {
-			// The types we check here need to match the
-			// types we allow in .Add
-	
-			if (item.Value == null) {
-				Write (item.Name, (string)String.Empty);
-			} else if (item.Value is FileInfo) {
-				Write (item.Name, (FileInfo)item.Value);
-			} else if (item.Value is string) {
-				Write (item.Name, (string)item.Value);
-			} else {
-				throw new Exception ("Unknown value type");
-			}
-		}
-	
-		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);
-			} else if (item.Value is FileInfo) {
-				return MultipartLength (item.Name, (FileInfo)item.Value);
-			} else if (item.Value is string) {
-				return MultipartLength (item.Name, (string)item.Value);
-			} else {
-				throw new Exception ("Unknown value type");
-			}
-		}
-	
-		private string MultipartHeader (string name, string value)
-		{
-			return string.Format ("{0}\r\n" + 
-					      "Content-Disposition: form-data; name=\"{1}\"\r\n" +
-					      "\r\n", start_boundary, name);
-		}
-	
-		private long MultipartLength (string name, string value)
-		{
-			long length = MultipartHeader (name, value).Length;
-			length += value.Length + 2;
-			return length;
-		}
-	
-		private void Write (string name, string value) 
-		{
-			string cmd;
-			
-			if (multipart) {
-				cmd = String.Format ("{0}"
-						     + "{1}\r\n",
-						     MultipartHeader (name, value), value);
-			} else {
-				name = HttpUtility.UrlEncode (name.Replace(" ", "+"));
-				value = HttpUtility.UrlEncode (value.Replace(" ", "+"));
-				if (first_item) {
-					cmd = string.Format ("{0}={1}", name, value);
-					first_item = false;
-				} else {
-					cmd = string.Format ("&{0}={1}", name, value);
-				}
-			}
-			//Console.WriteLine (cmd);
-			stream_writer.Write  (cmd);
-		}
-	
-		private string MultipartHeader (string name, FileInfo file)
-		{
-			string cmd = string.Format ("{0}\r\n"
-						    + "Content-Disposition: form-data; name=\"{1}\"; filename=\"{2}\"\r\n"
-						    + "Content-Type: image/jpeg\r\n"
-						    + "\r\n", 
-						    start_boundary, name, file.Name);
-			return cmd;
-		}
-	
-		private long MultipartLength (string name, FileInfo file)
-		{
-			long length = MultipartHeader (name, file).Length;
-			length += file.Length + 2;
-			return length;
-		}
-	
-	       	private void Write (string name, FileInfo file)
-		{
-			if (multipart) {
-				stream_writer.Write (MultipartHeader (name, file));
-				stream_writer.Flush ();
-				Stream stream = stream_writer.BaseStream;
-				byte [] data = new byte [32768];
-				FileStream fs = file.OpenRead ();
-				long total = file.Length;
-				long total_read = 0;
-	
-				int count;			
-				while ((count = fs.Read (data, 0, data.Length)) > 0) {
-					stream.Write (data, 0, count);
-					total_read += count;
-					if (Progress != null)
-						Progress.Value = total_read / (double)total;
-	
-				}
-				fs.Close ();
-	
-				stream_writer.Write ("\r\n");
-			} else {
-				throw new Exception ("Can't write files in url-encoded submissions");
-			}
-		}
-	
-	
-		public void Clear () 
-		{
-			Items.Clear ();
-			multipart = false;
-		}
-	
-		public HttpWebResponse Submit (string url)
-		{
-			return Submit (url, null);
-		}
-	
-		public HttpWebResponse Submit (string url, FSpot.ProgressItem item)
-		{
-			return Submit (new Uri (url), item);
-		}
-		
-		public HttpWebResponse Submit (Uri uri)
-		{
-			return Submit (uri, null);
-		}
-	
-		public HttpWebResponse Submit (Uri uri, FSpot.ProgressItem progress_item) 
-		{
-			this.Progress = progress_item;
-			Request = (HttpWebRequest) WebRequest.Create (uri);
-			CookieCollection cookie_collection = Cookies.GetCookies (uri);
-	
-			if (uri.UserInfo != null && uri.UserInfo != String.Empty) {
-				NetworkCredential cred = new NetworkCredential ();
-				cred.GetCredential (uri, "basic");
-				CredentialCache credcache = new CredentialCache();
-				credcache.Add(uri, "basic", cred);
-				
-				Request.PreAuthenticate = true;
-				Request.Credentials = credcache;	
-			}
-	
-			Request.ServicePoint.Expect100Continue = expect_continue;
-	
-			Request.CookieContainer = new CookieContainer ();
-			foreach (Cookie c in cookie_collection) {
-				if (SuppressCookiePath) 
-					Request.CookieContainer.Add (new Cookie (c.Name, c.Value));
-				else
-					Request.CookieContainer.Add (c);
-			}
-	
-			Request.Method = "POST";
-			Request.Headers["Accept-Charset"] = "utf-8;";
-			Request.UserAgent = String.Format("F-Spot {0} (http://www.f-spot.org)", Defines.VERSION);
-	
-			if (multipart) {
-				GenerateBoundary ();
-				Request.ContentType = "multipart/form-data; boundary=" + boundary;
-				Request.Timeout = Request.Timeout * 3;
-	
-				long length = 0;
-				for (int i = 0; i < Items.Count; i++) {
-					FormItem item = (FormItem)Items[i];
-					
-					length += MultipartLength (item);
-				}
-				length += end_boundary.Length + 2;
-				
-				//Request.Headers["My-Content-Length"] = length.ToString ();
-				if (Buffer == false) {
-					Request.ContentLength = length;	
-					Request.AllowWriteStreamBuffering = false;
-				}
-			} else {
-				Request.ContentType = "application/x-www-form-urlencoded";
-			}
-			
-			stream_writer = new StreamWriter (Request.GetRequestStream ());
-			
-			first_item = true;
-			for (int i = 0; i < Items.Count; i++) {
-				FormItem item = (FormItem)Items[i];
-				
-				Write (item);
-			}
-			
-			if (multipart)
-				stream_writer.Write (end_boundary + "\r\n");
-			
-			stream_writer.Flush ();
-			stream_writer.Close ();
-	
-			HttpWebResponse response; 
-	
-			try {
-				response = (HttpWebResponse) Request.GetResponse ();
-				
-				//Console.WriteLine ("found {0} cookies", response.Cookies.Count);
-				
-				foreach (Cookie c in response.Cookies) {
-					Cookies.Add (c);
-				}
-			} catch (WebException e) {
-				if (e.Status == WebExceptionStatus.ProtocolError 
-				    && ((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.ExpectationFailed && expect_continue) {
-					e.Response.Close ();
-					expect_continue = false;
-					return Submit (uri, progress_item);
-				}
-				
-				throw new WebException (Mono.Unix.Catalog.GetString ("Unhandled exception"), e);
-			}
-	
-			return response;
-		}
-	}
-}
diff --git a/extensions/Exporters/GalleryExport/GalleryExport.addin.xml b/extensions/Exporters/GalleryExport/GalleryExport.addin.xml
deleted file mode 100644
index d1998e4..0000000
--- a/extensions/Exporters/GalleryExport/GalleryExport.addin.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<Addin namespace="FSpot"
-	version="0.7.0.0"
-	name="Gallery Export"
-	description="This extension allows you to export your photos to PHP Gallery (http://gallery.menalto.com)."
-	author="F-Spot team"
-	url="http://f-spot.org"
-	defaultEnabled="true"
-	category="Export">
-
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-
-	<Extension path = "/FSpot/Menus/Exports">
-		<ExportMenuItem id="Gallery" _label = "Web _Gallery..." class = "G2Export.GalleryExport" />
-	</Extension>
-</Addin>
diff --git a/extensions/Exporters/GalleryExport/GalleryExport.cs b/extensions/Exporters/GalleryExport/GalleryExport.cs
deleted file mode 100644
index 8d5f80a..0000000
--- a/extensions/Exporters/GalleryExport/GalleryExport.cs
+++ /dev/null
@@ -1,990 +0,0 @@
-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 FSpot;
-using FSpot.Filters;
-using FSpot.Widgets;
-using FSpot.Utils;
-using FSpot.UI.Dialog;
-using FSpot.Extensions;
-
-using GalleryRemote;
-using Hyena;
-using Hyena.Widgets;
-
-namespace G2Export {
-	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)
-		{
-			this.name = name;
-			this.username = username;
-			this.password = password;
-			this.Url = url;
-
-			if (version != GalleryVersion.VersionUnknown) {
-				this.version = version;
-			} else {
-				this.version = Gallery.DetectGalleryVersion(Url);
-			}
-		}
-
-		public const string EXPORT_SERVICE = "gallery/";
-		public const string LIGHTTPD_WORKAROUND_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "lighttpd_workaround";
-
-		public Gallery Connect ()
-		{
-			//System.Console.WriteLine ("GalleryAccount.Connect()");
-			Gallery gal = null;
-
-			if (version == GalleryVersion.VersionUnknown)
-				this.version = Gallery.DetectGalleryVersion(Url);
-
-			if (version == GalleryVersion.Version1) {
-				gal = new Gallery1 (url, url);
-			} else if (version == GalleryVersion.Version2) {
-				gal = new Gallery2 (url, url);
-			} else {
-				throw new GalleryException (Catalog.GetString("Cannot connect to a Gallery for which the version is unknown.\nPlease check that you have Remote plugin 1.0.8 or later"));
-			}
-
-			Log.Debug ("Gallery created: " + gal);
-
-			gal.Login (username, password);
-
-			gallery = gal;
-			connected = true;
-
-			gallery.expect_continue = Preferences.Get<bool> (LIGHTTPD_WORKAROUND_KEY);
-
-			return gallery;
-		}
-
-		GalleryVersion version;
-		public GalleryVersion Version{
-			get {
-				return version;
-			}
-		}
-
-		private bool connected;
-		public bool Connected {
-			get {
-				bool retVal = false;
-				if(gallery != null) {
-					retVal = gallery.IsConnected ();
-				}
-				if (connected != retVal) {
-					Log.Warning ("Connected and retVal for IsConnected() don't agree");
-				}
-				return retVal;
-			}
-		}
-
-		public void MarkChanged ()
-		{
-			connected = false;
-			gallery = null;
-		}
-
-		Gallery gallery;
-		public Gallery Gallery {
-			get {
-				return gallery;
-			}
-		}
-
-		string name;
-		public string Name {
-			get {
-				return name;
-			}
-			set {
-				name = value;
-			}
-		}
-
-		string url;
-		public string Url {
-			get {
-				return url;
-			}
-			set {
-				if (url != value) {
-					url = value;
-					MarkChanged ();
-				}
-			}
-		}
-
-		string username;
-		public string Username {
-			get {
-				return username;
-			}
-			set {
-				if (username != value) {
-					username = value;
-					MarkChanged ();
-				}
-			}
-		}
-
-		string password;
-		public string Password {
-			get {
-				return password;
-			}
-			set {
-				if (password != value) {
-					password = value;
-					MarkChanged ();
-				}
-			}
-		}
-	}
-
-
-	public class GalleryAccountManager
-	{
-		private static GalleryAccountManager instance;
-		string xml_path;
-		ArrayList accounts;
-
-		public delegate void AccountListChangedHandler (GalleryAccountManager manager, GalleryAccount changed_account);
-		public event AccountListChangedHandler AccountListChanged;
-
-		public static GalleryAccountManager GetInstance ()
-		{
-			if (instance == null) {
-				instance = new GalleryAccountManager ();
-			}
-
-			return instance;
-		}
-
-		private GalleryAccountManager ()
-		{
-			// FIXME this xml file path should be be retrieved from a central location not hard coded there
-			this.xml_path = System.IO.Path.Combine (FSpot.Global.BaseDirectory, "Accounts.xml");
-
-			accounts = new ArrayList ();
-			ReadAccounts ();
-		}
-
-		public void MarkChanged ()
-		{
-			MarkChanged (true, null);
-		}
-
-		public void MarkChanged (bool write, GalleryAccount changed_account)
-		{
-			if (write)
-				WriteAccounts ();
-
-			if (AccountListChanged != null)
-				AccountListChanged (this, changed_account);
-		}
-
-		public ArrayList GetAccounts ()
-		{
-			return accounts;
-		}
-
-		public void AddAccount (GalleryAccount account)
-		{
-			AddAccount (account, true);
-		}
-
-		public void AddAccount (GalleryAccount account, bool write)
-		{
-			accounts.Add (account);
-			MarkChanged (write, account);
-		}
-
-		public void RemoveAccount (GalleryAccount account)
-		{
-			accounts.Remove (account);
-			MarkChanged ();
-		}
-
-		public void WriteAccounts ()
-		{
-			System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter (xml_path, System.Text.Encoding.Default);
-
-			writer.Formatting = System.Xml.Formatting.Indented;
-			writer.Indentation = 2;
-			writer.IndentChar = ' ';
-
-			writer.WriteStartDocument (true);
-
-			writer.WriteStartElement ("GalleryRemote");
-			foreach (GalleryAccount account in accounts) {
-				writer.WriteStartElement ("Account");
-				writer.WriteElementString ("Name", account.Name);
-
-				writer.WriteElementString ("Url", account.Url);
-				writer.WriteElementString ("Username", account.Username);
-				writer.WriteElementString ("Password", account.Password);
-				writer.WriteElementString ("Version", account.Version.ToString());
-				writer.WriteEndElement (); //Account
-			}
-			writer.WriteEndElement ();
-			writer.WriteEndDocument ();
-			writer.Close ();
-		}
-
-		private GalleryAccount ParseAccount (System.Xml.XmlNode node)
-		{
-			if (node.Name != "Account")
-
-				return null;
-
-			string name = null;
-			string url = null;
-			string username = null;
-			string password = null;
-			GalleryVersion version = GalleryVersion.VersionUnknown;
-
-			foreach (System.Xml.XmlNode child in node.ChildNodes) {
-				if (child.Name == "Name") {
-					name = child.ChildNodes [0].Value;
-
-				} else if (child.Name == "Url") {
-					url = child.ChildNodes [0].Value;
-				} else if (child.Name == "Password") {
-					password = child.ChildNodes [0].Value;
-				} else if (child.Name == "Username") {
-					username = child.ChildNodes [0].Value;
-				} else if (child.Name == "Version") {
-					string versionString = child.ChildNodes [0].Value;
-					if (versionString == "Version1")
-						version = GalleryVersion.Version1;
-					else if (versionString == "Version2")
-						version = GalleryVersion.Version2;
-					else
-						Log.Error ("Unexpected versions string: " + versionString);
-				}
-			}
-			return new GalleryAccount (name, url, username, password, version);
-		}
-
-		private void ReadAccounts ()
-		{
-
-			if (! File.Exists (xml_path)) {
-				MarkChanged ();
-				return;
-			}
-
-			try {
-				string query = "//GalleryRemote/Account";
-				System.Xml.XmlDocument doc = new System.Xml.XmlDocument ();
-
-				//System.Console.WriteLine ("xml_path: " + xml_path);
-				doc.Load (xml_path);
-				System.Xml.XmlNodeList nodes = doc.SelectNodes (query);
-
-				//System.Console.WriteLine ("selected {0} nodes match {1}", nodes.Count, query);
-				foreach (System.Xml.XmlNode node in nodes) {
-					GalleryAccount account = ParseAccount (node);
-					if (account != null)
-						AddAccount (account, false);
-
-				}
-			} catch (System.Exception e) {
-				// FIXME do something
-				Log.Exception ("Exception loading gallery accounts", e);
-			}
-
-			MarkChanged ();
-		}
-	}
-
-	public class AccountDialog {
-		public AccountDialog (Gtk.Window parent) : this (parent, null, false) {
-			add_dialog.Response += HandleAddResponse;
-			add_button.Sensitive = false;
-		}
-
-		public AccountDialog (Gtk.Window parent, GalleryAccount account, bool show_error)
-		{
-			Glade.XML xml = new Glade.XML (null, "GalleryExport.glade", "gallery_add_dialog", "f-spot");
-			xml.Autoconnect (this);
-			add_dialog = (Gtk.Dialog) xml.GetWidget ("gallery_add_dialog");
-			add_dialog.Modal = false;
-			add_dialog.TransientFor = parent;
-			add_dialog.DefaultResponse = Gtk.ResponseType.Ok;
-
-			this.account = account;
-
-			status_area.Visible = show_error;
-
-			if (account != null) {
-				gallery_entry.Text = account.Name;
-				url_entry.Text = account.Url;
-				password_entry.Text = account.Password;
-				username_entry.Text = account.Username;
-				add_button.Label = Gtk.Stock.Ok;
-				add_dialog.Response += HandleEditResponse;
-			}
-
-			if (remove_button != null)
-				remove_button.Visible = account != null;
-
-			add_dialog.Show ();
-
-			gallery_entry.Changed += HandleChanged;
-			url_entry.Changed += HandleChanged;
-			password_entry.Changed += HandleChanged;
-			username_entry.Changed += HandleChanged;
-			HandleChanged (null, null);
-		}
-
-		private void HandleChanged (object sender, System.EventArgs args)
-		{
-			name = gallery_entry.Text;
-			url = url_entry.Text;
-			password = password_entry.Text;
-			username = username_entry.Text;
-
-			if (name == String.Empty || url == String.Empty || password == String.Empty || username == String.Empty)
-				add_button.Sensitive = false;
-			else
-				add_button.Sensitive = true;
-
-		}
-
-		[GLib.ConnectBefore]
-		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId == Gtk.ResponseType.Ok) {
-				try {
-					Uri uri = new Uri (url);
-					if (uri.Scheme != Uri.UriSchemeHttp &&
-					    uri.Scheme != Uri.UriSchemeHttps)
-						throw new System.UriFormatException ();
-
-					//Check for name uniqueness
-					foreach (GalleryAccount acc in GalleryAccountManager.GetInstance ().GetAccounts ())
-						if (acc.Name == name)
-							throw new ArgumentException ("name");
-					GalleryAccount created = new GalleryAccount (name,
-										     url,
-										     username,
-										     password);
-
-					created.Connect ();
-					GalleryAccountManager.GetInstance ().AddAccount (created);
-					account = created;
-				} catch (System.UriFormatException) {
-					HigMessageDialog md =
-						new HigMessageDialog (add_dialog,
-								      Gtk.DialogFlags.Modal |
-								      Gtk.DialogFlags.DestroyWithParent,
-								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-								      Catalog.GetString ("Invalid URL"),
-								      Catalog.GetString ("The gallery URL entry does not appear to be a valid URL"));
-					md.Run ();
-					md.Destroy ();
-					return;
-				} catch (GalleryRemote.GalleryException e) {
-					HigMessageDialog md =
-						new HigMessageDialog (add_dialog,
-								      Gtk.DialogFlags.Modal |
-								      Gtk.DialogFlags.DestroyWithParent,
-								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-								      Catalog.GetString ("Error while connecting to Gallery"),
-								      String.Format (Catalog.GetString ("The following error was encountered while attempting to log in: {0}"), e.Message));
-					if (e.ResponseText != null) {
-						Log.Debug (e.Message);
-						Log.Debug (e.ResponseText);
-					}
-					md.Run ();
-					md.Destroy ();
-					return;
-				} catch (ArgumentException ae) {
-					HigMessageDialog md =
-						new HigMessageDialog (add_dialog,
-								      Gtk.DialogFlags.Modal |
-								      Gtk.DialogFlags.DestroyWithParent,
-								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-								      Catalog.GetString ("A Gallery with this name already exists"),
-								      String.Format (Catalog.GetString ("There is already a Gallery with the same name in your registered Galleries. Please choose a unique name.")));
-					Log.Exception (ae);
-					md.Run ();
-					md.Destroy ();
-					return;
-				} catch (System.Net.WebException we) {
-					HigMessageDialog md =
-						new HigMessageDialog (add_dialog,
-								      Gtk.DialogFlags.Modal |
-								      Gtk.DialogFlags.DestroyWithParent,
-								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-								      Catalog.GetString ("Error while connecting to Gallery"),
-								      String.Format (Catalog.GetString ("The following error was encountered while attempting to log in: {0}"), we.Message));
-					md.Run ();
-					md.Destroy ();
-					return;
-				} catch (System.Exception se) {
-					HigMessageDialog md =
-						new HigMessageDialog (add_dialog,
-								      Gtk.DialogFlags.Modal |
-								      Gtk.DialogFlags.DestroyWithParent,
-								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-								      Catalog.GetString ("Error while connecting to Gallery"),
-								      String.Format (Catalog.GetString ("The following error was encountered while attempting to log in: {0}"), se.Message));
-					Log.Exception (se);
-					md.Run ();
-					md.Destroy ();
-					return;
-				}
-			}
-			add_dialog.Destroy ();
-		}
-
-		protected void HandleEditResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId == Gtk.ResponseType.Ok) {
-				account.Name = name;
-				account.Url = url;
-				account.Username = username;
-				account.Password = password;
-				GalleryAccountManager.GetInstance ().MarkChanged (true, account);
-			} else if (args.ResponseId == Gtk.ResponseType.Reject) {
-				// NOTE we are using Reject to signal the remove action.
-				GalleryAccountManager.GetInstance ().RemoveAccount (account);
-			}
-			add_dialog.Destroy ();
-		}
-
-		private GalleryAccount account;
-		private string name;
-		private string url;
-		private string password;
-		private string username;
-
-		// widgets
-		[Glade.Widget] Gtk.Dialog add_dialog;
-
-		[Glade.Widget] Gtk.Entry url_entry;
-		[Glade.Widget] Gtk.Entry password_entry;
-		[Glade.Widget] Gtk.Entry gallery_entry;
-		[Glade.Widget] Gtk.Entry username_entry;
-
-		[Glade.Widget] Gtk.Button add_button;
-		[Glade.Widget] Gtk.Button remove_button;
-		[Glade.Widget] Gtk.Button cancel_button;
-
-		[Glade.Widget] Gtk.HBox status_area;
-	}
-
-	public class GalleryAddAlbum
-	{
-		[Glade.Widget] Gtk.Dialog add_album_dialog;
-		[Glade.Widget] Gtk.OptionMenu album_optionmenu;
-
-		[Glade.Widget] Gtk.Entry name_entry;
-		[Glade.Widget] Gtk.Entry description_entry;
-		[Glade.Widget] Gtk.Entry title_entry;
-
-		[Glade.Widget] Gtk.Button add_button;
-		[Glade.Widget] Gtk.Button cancel_button;
-
-		private GalleryExport export;
-		private Gallery gallery;
-		private string parent;
-		private string name;
-		private string description;
-		private string title;
-
-		public GalleryAddAlbum (GalleryExport export, Gallery gallery)
-		{
-			Glade.XML xml = new Glade.XML (null, "GalleryExport.glade", "gallery_add_album_dialog", "f-spot");
-			xml.Autoconnect (this);
-			add_album_dialog = (Gtk.Dialog) xml.GetWidget ("gallery_add_album_dialog");
-			add_album_dialog.Modal = true;
-			this.export = export;
-			this.gallery = gallery;
-			PopulateAlbums ();
-
-			add_album_dialog.Response += HandleAddResponse;
-
-			name_entry.Changed += HandleChanged;
-			description_entry.Changed += HandleChanged;
-			title_entry.Changed += HandleChanged;
-			HandleChanged (null, null);
-		}
-
-		private void PopulateAlbums ()
-		{
-			Gtk.Menu menu = new Gtk.Menu ();
-			if (gallery.Version == GalleryVersion.Version1) {
-				Gtk.MenuItem top_item = new Gtk.MenuItem (Catalog.GetString ("(TopLevel)"));
-				menu.Append (top_item);
-			}
-
-			foreach (Album album in gallery.Albums) {
-				System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
-
-				for (int i=0; i < album.Parents.Count; i++) {
-					label_builder.Append ("  ");
-				}
-				label_builder.Append (album.Title);
-
-				Gtk.MenuItem item = new Gtk.MenuItem (label_builder.ToString ());
-				((Gtk.Label)item.Child).UseUnderline = false;
-				menu.Append (item);
-
-				AlbumPermission create_sub = album.Perms & AlbumPermission.CreateSubAlbum;
-
-				if (create_sub == 0)
-					item.Sensitive = false;
-			}
-
-			album_optionmenu.Sensitive = true;
-			menu.ShowAll ();
-			album_optionmenu.Menu = menu;
-		}
-
-		private void HandleChanged (object sender, EventArgs args)
-		{
-			if (gallery.Version == GalleryVersion.Version1) {
-				if (gallery.Albums.Count == 0 || album_optionmenu.History <= 0) {
-					parent = String.Empty;
-				} else {
-					parent = ((Album) gallery.Albums [album_optionmenu.History-1]).Name;
-				}
-			} else {
-				if (gallery.Albums.Count == 0 || album_optionmenu.History < 0) {
-					parent = String.Empty;
-				} else {
-					parent = ((Album) gallery.Albums [album_optionmenu.History]).Name;
-				}
-			}
-			name = name_entry.Text;
-			description = description_entry.Text;
-			title = title_entry.Text;
-
-			if (name == String.Empty || title == String.Empty)
-				add_button.Sensitive = false;
-			else
-				add_button.Sensitive = true;
-		}
-
-		[GLib.ConnectBefore]
-		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId == Gtk.ResponseType.Ok) {
-				if (!System.Text.RegularExpressions.Regex.IsMatch (name, "^[A-Za-z0-9_-]+$")) {
-					HigMessageDialog md =
-						new HigMessageDialog (add_album_dialog,
-								      Gtk.DialogFlags.Modal |
-								      Gtk.DialogFlags.DestroyWithParent,
-								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-								      Catalog.GetString ("Invalid Gallery name"),
-								      Catalog.GetString ("The gallery name contains invalid characters.\nOnly letters, numbers, - and _ are allowed"));
-					md.Run ();
-					md.Destroy ();
-					return;
-				}
-				try {
-					gallery.NewAlbum (parent, name, title, description);
-					export.HandleAlbumAdded (title);
-				} catch (GalleryCommandException e) {
-					gallery.PopupException(e, add_album_dialog);
-					return;
-				}
-			}
-			add_album_dialog.Destroy ();
-		}
-	}
-
-
-	public class GalleryExport : IExporter {
-		public GalleryExport ()
-		{
-		}
-
-		public void Run (IBrowsableCollection selection)
-		{
-			Glade.XML xml = new Glade.XML (null, "GalleryExport.glade", "gallery_export_dialog", "f-spot");
-			xml.Autoconnect (this);
-			export_dialog = (Gtk.Dialog) xml.GetWidget ("gallery_export_dialog");
-
-			this.items = selection.Items;
-			Array.Sort<IBrowsableItem> (this.items, new IBrowsableItemComparer.CompareDateName());
-			album_button.Sensitive = false;
-			IconView view = new IconView (selection);
-			view.DisplayDates = false;
-			view.DisplayTags = false;
-
-			export_dialog.Modal = false;
-			export_dialog.TransientFor = null;
-
-			thumb_scrolledwindow.Add (view);
-			view.Show ();
-			export_dialog.Show ();
-
-			GalleryAccountManager manager = GalleryAccountManager.GetInstance ();
-			manager.AccountListChanged += PopulateGalleryOptionMenu;
-			PopulateGalleryOptionMenu (manager, null);
-
-			if (edit_button != null)
-				edit_button.Clicked += HandleEditGallery;
-
-			export_dialog.Response += HandleResponse;
-			connect = true;
-			HandleSizeActive (null, null);
-			Connect ();
-
-			LoadPreference (SCALE_KEY);
-			LoadPreference (SIZE_KEY);
-			LoadPreference (BROWSER_KEY);
-			LoadPreference (META_KEY);
-		}
-
-		public const string EXPORT_SERVICE = "gallery/";
-		public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
-		public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
-		public const string BROWSER_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
-		public const string META_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "meta";
-		public const string LIGHTTPD_WORKAROUND_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "lighttpd_workaround";
-
-		private bool scale;
-		private int size;
-		private bool browser;
-		private bool meta;
-		private bool connect = false;
-
-		IBrowsableItem[] items;
-		int photo_index;
-		ThreadProgressDialog progress_dialog;
-
-		ArrayList accounts;
-		private GalleryAccount account;
-		private Album album;
-
-		private string xml_path;
-
-		// Widgets
-		[Glade.Widget] Gtk.Dialog export_dialog;
-		[Glade.Widget] Gtk.OptionMenu gallery_optionmenu;
-		[Glade.Widget] Gtk.OptionMenu album_optionmenu;
-
-		[Glade.Widget] Gtk.Entry width_entry;
-		[Glade.Widget] Gtk.Entry height_entry;
-
-		[Glade.Widget] Gtk.CheckButton browser_check;
-		[Glade.Widget] Gtk.CheckButton scale_check;
-		[Glade.Widget] Gtk.CheckButton meta_check;
-
-		[Glade.Widget] Gtk.SpinButton size_spin;
-
-		[Glade.Widget] Gtk.Button album_button;
-		[Glade.Widget] Gtk.Button add_button;
-		[Glade.Widget] Gtk.Button edit_button;
-
-		[Glade.Widget] Gtk.Button export_button;
-		[Glade.Widget] Gtk.Button cancel_button;
-
-		[Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
-
-		System.Threading.Thread command_thread;
-
-
-		private void HandleResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId != Gtk.ResponseType.Ok) {
-				export_dialog.Destroy ();
-				return;
-			}
-
-			if (scale_check != null) {
-				scale = scale_check.Active;
-				size = size_spin.ValueAsInt;
-			} else
-				scale = false;
-
-			browser = browser_check.Active;
-			meta = meta_check.Active;
-
-			if (account != null) {
-				//System.Console.WriteLine ("history = {0}", album_optionmenu.History);
-				album = (Album) account.Gallery.Albums [Math.Max (0, album_optionmenu.History)];
-				photo_index = 0;
-
-				export_dialog.Destroy ();
-
-				command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (this.Upload));
-				command_thread.Name = Catalog.GetString ("Uploading Pictures");
-
-				progress_dialog = new ThreadProgressDialog (command_thread, items.Length);
-				progress_dialog.Start ();
-
-				// Save these settings for next time
-				Preferences.Set (SCALE_KEY, scale);
-				Preferences.Set (SIZE_KEY, size);
-				Preferences.Set (BROWSER_KEY, browser);
-				Preferences.Set (META_KEY, meta);
-			}
-		}
-
-		private void HandleProgressChanged (ProgressItem item)
-		{
-			//System.Console.WriteLine ("Changed value = {0}", item.Value);
-			progress_dialog.Fraction = (photo_index - 1.0 + item.Value) / (double) items.Length;
-		}
-
-		public void HandleSizeActive (object sender, EventArgs args)
-		{
-			size_spin.Sensitive = scale_check.Active;
-		}
-
-
-		private void Upload ()
-		{
-				account.Gallery.Progress = new ProgressItem ();
-				account.Gallery.Progress.Changed += HandleProgressChanged;
-
-				Log.Debug ("Starting upload");
-
-				FilterSet filters = new FilterSet ();
-				if (account.Version == GalleryVersion.Version1)
-					filters.Add (new WhiteListFilter (new string []{".jpg", ".jpeg", ".png", ".gif"}));
-				if (scale)
-					filters.Add (new ResizeFilter ((uint) size));
-
-				while (photo_index < items.Length) {
-					IBrowsableItem item = items [photo_index];
-
-					Log.DebugFormat ("uploading {0}", photo_index);
-
-					progress_dialog.Message = System.String.Format (Catalog.GetString ("Uploading picture \"{0}\""), item.Name);
-					progress_dialog.Fraction = photo_index / (double) items.Length;
-					photo_index++;
-
-					progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of {1}"), photo_index, items.Length);
-
-
-					FilterRequest req = new FilterRequest (item.DefaultVersion.Uri);
-
-					filters.Convert (req);
-					try {
-						int id = album.Add (item, req.Current.LocalPath);
-
-						if (item != null && item is Photo && App.Instance.Database != null && id != 0) {
-							App.Instance.Database.Exports.Create ((item as Photo).Id, (item as Photo).DefaultVersionId,
-										      ExportStore.Gallery2ExportType,
-										      String.Format("{0}:{1}",album.Gallery.Uri.ToString (), id.ToString ()));
-						}
-					} catch (System.Exception e) {
-						progress_dialog.Message = String.Format (Catalog.GetString ("Error uploading picture \"{0}\" to Gallery: {1}"), item.Name, e.Message);
-						progress_dialog.ProgressText = Catalog.GetString ("Error");
-						Log.Exception (e);
-
-						if (progress_dialog.PerformRetrySkip ()) {
-							photo_index--;
-						}
-					}
-			}
-
-			progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
-			progress_dialog.Fraction = 1.0;
-			progress_dialog.ProgressText = Catalog.GetString ("Upload Complete");
-			progress_dialog.ButtonLabel = Gtk.Stock.Ok;
-
-			if (browser) {
-				GtkBeans.Global.ShowUri (export_dialog.Screen, album.GetUrl());
-			}
-		}
-
-		private void PopulateGalleryOptionMenu (GalleryAccountManager manager, GalleryAccount changed_account)
-		{
-			Gtk.Menu menu = new Gtk.Menu ();
-			this.account = changed_account;
-			int pos = -1;
-
-			accounts = manager.GetAccounts ();
-			if (accounts == null || accounts.Count == 0) {
-				Gtk.MenuItem item = new Gtk.MenuItem (Catalog.GetString ("(No Gallery)"));
-				menu.Append (item);
-				gallery_optionmenu.Sensitive = false;
-				edit_button.Sensitive = false;
-			} else {
-				int i = 0;
-				foreach (GalleryAccount account in accounts) {
-					if (account == changed_account)
-						pos = i;
-
-					Gtk.MenuItem item = new Gtk.MenuItem (account.Name);
-					menu.Append (item);
-					i++;
-				}
-				gallery_optionmenu.Sensitive = true;
-				edit_button.Sensitive = true;
-			}
-
-			menu.ShowAll ();
-			gallery_optionmenu.Menu = menu;
-			gallery_optionmenu.SetHistory ((uint)pos);
-		}
-
-		private void Connect ()
-		{
-			Connect (null);
-		}
-
-		private void Connect (GalleryAccount selected)
-		{
-			try {
-				if (accounts.Count != 0 && connect) {
-					if (selected == null)
-						account = (GalleryAccount) accounts [gallery_optionmenu.History];
-					else
-						account = selected;
-
-					if (!account.Connected)
-						account.Connect ();
-
-					PopulateAlbumOptionMenu (account.Gallery);
-					album_button.Sensitive = true;
-				}
-			} catch (System.Exception ex) {
-				if (selected != null)
-					account = selected;
-
-				Log.Exception (ex);
-				PopulateAlbumOptionMenu (account.Gallery);
-				album_button.Sensitive = false;
-
-				new AccountDialog (export_dialog, account, true);
-			}
-		}
-
-		private void HandleAccountSelected (object sender, System.EventArgs args)
-		{
-			Connect ();
-		}
-
-		public void HandleAlbumAdded (string title) {
-			GalleryAccount account = (GalleryAccount) accounts [gallery_optionmenu.History];
-			PopulateAlbumOptionMenu (account.Gallery);
-
-			// make the newly created album selected
-			ArrayList albums = account.Gallery.Albums;
-			for (int i=0; i < albums.Count; i++) {
-				if (((Album)albums[i]).Title == title) {
-					album_optionmenu.SetHistory((uint)i);
-				}
-			}
-		}
-
-		private void PopulateAlbumOptionMenu (Gallery gallery)
-		{
-			System.Collections.ArrayList albums = null;
-			if (gallery != null) {
-				//gallery.FetchAlbumsPrune ();
-				try {
-					gallery.FetchAlbums ();
-					albums = gallery.Albums;
-				} catch (GalleryCommandException e) {
-					gallery.PopupException (e, export_dialog);
-					return;
-				}
-			}
-
-			Gtk.Menu menu = new Gtk.Menu ();
-
-			bool disconnected = gallery == null || !account.Connected || albums == null;
-
-			if (disconnected || albums.Count == 0) {
-				string msg = disconnected ? Catalog.GetString ("(Not Connected)")
-					: Catalog.GetString ("(No Albums)");
-
-				Gtk.MenuItem item = new Gtk.MenuItem (msg);
-				menu.Append (item);
-
-				export_button.Sensitive = false;
-				album_optionmenu.Sensitive = false;
-				album_button.Sensitive = false;
-
-				if (disconnected)
-					album_button.Sensitive = false;
-			} else {
-				foreach (Album album in albums) {
-					System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
-
-					for (int i=0; i < album.Parents.Count; i++) {
-						label_builder.Append ("  ");
-					}
-					label_builder.Append (album.Title);
-
-					Gtk.MenuItem item = new Gtk.MenuItem (label_builder.ToString ());
-					((Gtk.Label)item.Child).UseUnderline = false;
-					menu.Append (item);
-
-				        AlbumPermission add_permission = album.Perms & AlbumPermission.Add;
-
-					if (add_permission == 0)
-						item.Sensitive = false;
-				}
-
-				export_button.Sensitive = items.Length > 0;
-				album_optionmenu.Sensitive = true;
-				album_button.Sensitive = true;
-			}
-
-			menu.ShowAll ();
-			album_optionmenu.Menu = menu;
-		}
-
-		public void HandleAddGallery (object sender, System.EventArgs args)
-		{
-			new AccountDialog (export_dialog);
-		}
-
-		public void HandleEditGallery (object sender, System.EventArgs args)
-		{
-			new AccountDialog (export_dialog, account, false);
-		}
-
-		public void HandleAddAlbum (object sender, System.EventArgs args)
-		{
-			if (account == null)
-				throw new GalleryException (Catalog.GetString ("No account selected"));
-
-			new GalleryAddAlbum (this, account.Gallery);
-		}
-
-		void LoadPreference (string key)
-		{
-			switch (key) {
-			case SCALE_KEY:
-				if (scale_check.Active != Preferences.Get<bool> (key))
-					scale_check.Active = Preferences.Get<bool> (key);
-				break;
-
-			case SIZE_KEY:
-				size_spin.Value = (double) Preferences.Get<int> (key);
-				break;
-
-			case BROWSER_KEY:
-				if (browser_check.Active != Preferences.Get<bool> (key))
-					browser_check.Active = Preferences.Get<bool> (key);
-				break;
-
-			case META_KEY:
-				if (meta_check.Active != Preferences.Get<bool> (key))
-					meta_check.Active = Preferences.Get<bool> (key);
-				break;
-			}
-		}
-	}
-}
diff --git a/extensions/Exporters/GalleryExport/GalleryRemote.cs b/extensions/Exporters/GalleryExport/GalleryRemote.cs
deleted file mode 100644
index 146000e..0000000
--- a/extensions/Exporters/GalleryExport/GalleryRemote.cs
+++ /dev/null
@@ -1,1172 +0,0 @@
-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 FSpot;
-using FSpot.UI.Dialog;
-using Hyena;
-using Hyena.Widgets;
-
-/* These classes are based off the documentation at
- *
- * http://codex.gallery2.org/index.php/Gallery_Remote:Protocol
- */
-
-namespace GalleryRemote {
-	public enum AlbumPermission : byte
-	{
-		None = 0,
-		Add = 1,
-		Write = 2,
-		Delete = 4,
-		DeleteAlbum = 8,
-		CreateSubAlbum = 16
-	}
-
-	public class Album : IComparable {
-		public int RefNum;
-		public string Name = null;
-		public string Title = null;
-		public string Summary = null;
-		public int ParentRefNum;
-		public int ResizeSize;
-		public int ThumbSize;
-		public ArrayList Images = null;
-		public string BaseURL;
-
-		Gallery gallery;
-
-		public AlbumPermission Perms = AlbumPermission.None;
-
-		public Album Parent {
-			get {
-				if (ParentRefNum != 0)
-					return gallery.LookupAlbum (ParentRefNum);
-				else
-					return null;
-			}
-		}
-
-		protected ArrayList parents = null;
-		public ArrayList Parents {
-			get {
-				if (parents != null)
-					return parents;
-
-				if (Parent == null) {
-				       parents = new ArrayList ();
-				} else {
-					parents = Parent.Parents.Clone () as ArrayList;
-					parents.Add (Parent.RefNum);
-				}
-
-				return parents;
-			}
-		}
-
-		public Gallery Gallery {
-			get { return gallery; }
-		}
-
-		public Album (Gallery gallery, string name, int ref_num)
-		{
-			Name = name;
-			this.gallery = gallery;
-			this.RefNum = ref_num;
-			Images = new ArrayList ();
-		}
-
-		public void Rename (string name)
-		{
-			gallery.MoveAlbum (this, name);
-		}
-
-		public void Add (FSpot.IBrowsableItem item)
-		{
-			Add (item, item.DefaultVersion.Uri.LocalPath);
-		}
-
-		public int Add (FSpot.IBrowsableItem item, string path)
-		{
-			if (item == null)
-				Log.Warning ("NO PHOTO");
-
-			return gallery.AddItem (this,
-					 path,
-					 Path.GetFileName (item.DefaultVersion.Uri.LocalPath),
-					 item.Name,
-					 item.Description,
-					 true);
-		}
-
-		public string GetUrl ()
-		{
-			return gallery.GetAlbumUrl(this);
-		}
-
-		public int CompareTo (Object obj)
-		{
-			Album other = obj as Album;
-
-			int numThis = this.Parents.Count;
-			int numOther = other.Parents.Count;
-			int thisVal = -1, otherVal = -1;
-
-			//find where they first differ
-			int maxIters = Math.Min (numThis, numOther);
-			int i = 0;
-			while (i < maxIters) {
-				thisVal = (int)this.Parents[i];
-				otherVal = (int)other.Parents[i];
-				if (thisVal != otherVal) {
-					break;
-				}
-				i++;
-			}
-
-			int retVal;
-			if (i < numThis && i < numOther) {
-				//Parentage differed
-				retVal = thisVal.CompareTo (otherVal);
-
-			} else if (i < numThis) {
-				//other shorter
-				thisVal = (int)this.Parents[i];
-				retVal = thisVal.CompareTo (other.RefNum);
-
-				//if equal, we want to make the shorter one come first
-				if (retVal == 0)
-					retVal = 1;
-
-			} else if (i < numOther) {
-				//this shorter
-				otherVal = (int)other.Parents[i];
-				retVal = this.RefNum.CompareTo (otherVal);
-
-				//if equal, we want to make the shorter one come first
-				if (retVal == 0)
-					retVal = -1;
-
-			} else {
-				//children of the same parent
-				retVal = this.RefNum.CompareTo (other.RefNum);
-			}
-
-			return retVal;
-		}
-	}
-
-	public class Image {
-		public string Name;
-		public int RawWidth;
-		public int RawHeight;
-		public string ResizedName;
-		public int ResizedWidth;
-		public int ResizedHeight;
-		public string ThumbName;
-		public int ThumbWidth;
-		public int ThumbHeight;
-		public int RawFilesize;
-
-		public string Caption;
-		public string Description;
-		public int Clicks;
-
-		public Album Owner;
-
-		public string Url;
-
-		public Image (Album album, string name) {
-			Name = name;
-			Owner = album;
-		}
-	}
-
-	public enum ResultCode {
-		Success = 0,
-		MajorVersionInvalid = 101,
-		MajorMinorVersionInvalid = 102,
-		VersionFormatInvalid = 103,
-		VersionMissing = 104,
-		PasswordWrong = 201,
-		LoginMissing = 202,
-		UnknownComand = 301,
-		NoAddPermission = 401,
-		NoFilename = 402,
-		UploadPhotoFailed = 403,
-		NoWritePermission = 404,
-		NoCreateAlbumPermission = 501,
-		CreateAlbumFailed = 502,
-		// This result is specific to this implementation
-		UnknownResponse = 1000
-	}
-
-	public class GalleryException : System.Exception {
-		string response_text;
-
-		public string ResponseText {
-			get { return response_text; }
-		}
-
-		public GalleryException (string text) : base (text)
-		{
-		}
-
-		public GalleryException (string text, string full_response) : base (text)
-		{
-			response_text = full_response;
-		}
-	}
-
-	public class GalleryCommandException : GalleryException {
-		ResultCode status;
-
-		public GalleryCommandException (string status_text, ResultCode result) : base (status_text) {
-			status = result;
-		}
-
-		public ResultCode Status {
-			get {
-				return status;
-			}
-		}
-	}
-
-	public abstract class Gallery
-	{
-		protected Uri uri;
-		public Uri Uri{
-			get {
-				return uri;
-			}
-		}
-
-
-		protected string name;
-		public string Name {
-			get {
-				return name;
-			}
-			set {
-				name = value;
-			}
-		}
-
-		string auth_token;
-		public string AuthToken {
-			get {
-				return auth_token;
-			}
-			set {
-				auth_token = value;
-			}
-		}
-
-		protected GalleryVersion version;
-
-		public GalleryVersion Version {
-			get {
-				return version;
-			}
-		}
-
-		protected ArrayList albums;
-		public ArrayList Albums{
-			get {
-				return albums;
-			}
-		}
-
-		public bool expect_continue = true;
-
-		protected CookieContainer cookies = null;
-		public FSpot.ProgressItem Progress = null;
-
-		public abstract void Login (string username, string passwd);
-		public abstract ArrayList FetchAlbums ();
-		public abstract ArrayList FetchAlbumsPrune ();
-		public abstract bool MoveAlbum (Album album, string end_name);
-		public abstract int AddItem (Album album, string path, string filename, string caption, string description, bool autorotate);
-		//public abstract Album AlbumProperties (string album);
-		public abstract bool NewAlbum (string parent_name, string name, string title, string description);
-		public abstract ArrayList FetchAlbumImages (Album album, bool include_ablums);
-
-		public abstract string GetAlbumUrl (Album album);
-
-		public Gallery (string name)
-		{
-			this.name = name;
-			cookies = new CookieContainer ();
-			albums = new ArrayList ();
-		}
-
-		public static GalleryVersion DetectGalleryVersion (string url)
-		{
-			//Figure out if the url is for G1 or G2
-			Log.Debug ("Detecting Gallery version");
-
-			GalleryVersion version;
-
-			if (url.EndsWith (Gallery1.script_name)) {
-				version = GalleryVersion.Version1;
-			} else if (url.EndsWith (Gallery2.script_name)) {
-				version = GalleryVersion.Version2;
-			} else {
-				//check what script is available on the server
-
-				FormClient client = new FormClient ();
-
-				try {
-					client.Submit (new Uri (Gallery.FixUrl (url, Gallery1.script_name)));
-					version =  GalleryVersion.Version1;
-
-				} catch (System.Net.WebException) {
-					try {
-						client.Submit (new Uri (Gallery.FixUrl (url, Gallery2.script_name)));
-						version =  GalleryVersion.Version2;
-
-					} catch (System.Net.WebException) {
-						//Uh oh, neither version detected
-						version = GalleryVersion.VersionUnknown;
-					}
-				}
-			}
-
-			Log.Debug ("Detected: " + version.ToString());
-			return version;
-		}
-
-
-		public bool IsConnected ()
-		{
-
-			bool retVal = true;
-			//Console.WriteLine ("^^^^^^^Checking IsConnected");
-			foreach (Cookie cookie in cookies.GetCookies(Uri)) {
-				bool isExpired = cookie.Expired;
-				//Console.WriteLine (cookie.Name + " " + (isExpired ? "expired" : "valid"));
-				if (isExpired)
-					retVal = false;
-			}
-			//return cookies.GetCookies(Uri).Count > 0;
-			return retVal;
-		}
-		//Reads until it finds the start of the response
-		protected StreamReader findResponse (HttpWebResponse response)
-		{
-			StreamReader reader = new StreamReader (response.GetResponseStream (), Encoding.UTF8);
-			if (reader == null)
-				throw new GalleryException (Catalog.GetString ("Error reading server response"));
-
-			string line;
-			string full_response = null;
-			while ((line = reader.ReadLine ()) != null) {
-				full_response += line;
-				if (line.IndexOf ("#__GR2PROTO__", 0) > -1)
-					break;
-			}
-
-			if (line == null) {
-				// failed to find the response
-				throw new GalleryException (Catalog.GetString ("Server returned response without Gallery content"), full_response);
-			}
-
-			return reader;
-
-		}
-
-		protected string [] GetNextLine (StreamReader reader)
-		{
-			char [] value_split = new char [1] {'='};
-			bool haveLine = false;
-			string[] array = null;
-			while(!haveLine) {
-				string line = reader.ReadLine ();
-				//Console.WriteLine ("READING: " + line);
-				if (line != null) {
-					array = line.Split (value_split, 2);
-					haveLine = !LineIgnored (array);
-				}
-				else {
-					//end of input
-					return null;
-				}
-			}
-
-			return array;
-		}
-
-		private bool LineIgnored (string[] line)
-		{
-			if (line[0].StartsWith ("debug")) {
-				return true;
-			} else if (line[0].StartsWith ("can_create_root")) {
-				return true;
-			} else {
-				return false;
-			}
-		}
-
-		protected bool ParseLogin (HttpWebResponse response)
-		{
-			string [] data;
-			StreamReader reader = null;
-			ResultCode status = ResultCode.UnknownResponse;
-			string status_text = "Error: Unable to parse server response";
-			try {
-
-				reader = findResponse (response);
-				while ((data = GetNextLine (reader)) != null) {
-					if (data[0] == "status") {
-						status = (ResultCode) int.Parse (data [1]);
-					} else if (data[0].StartsWith ("status_text")) {
-						status_text = data[1];
-						Log.DebugFormat ("StatusText : {0}", data[1]);
-					} else if (data[0].StartsWith ("server_version")) {
-						//FIXME we should use the to determine what capabilities the server has
-					} else if (data[0].StartsWith ("auth_token")) {
-						AuthToken = data[1];
-					} else {
-						Log.DebugFormat ("Unparsed Line in ParseLogin(): {0}={1}", data[0], data[1]);
-					}
-				}
-				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
-				if (status != ResultCode.Success) {
-					Log.Debug (status_text);
-					throw new GalleryCommandException (status_text, status);
-				}
-
-				return true;
-			} finally {
-				if (reader != null)
-					reader.Close ();
-
-				response.Close ();
-			}
-		}
-
-		public ArrayList ParseFetchAlbums (HttpWebResponse response)
-		{
-			//Console.WriteLine ("in ParseFetchAlbums()");
-			string [] data;
-			StreamReader reader = null;
-			ResultCode status = ResultCode.UnknownResponse;
-			string status_text = "Error: Unable to parse server response";
-			albums = new ArrayList ();
-			try {
-
-				Album current_album = null;
-				reader = findResponse (response);
-				while ((data = GetNextLine (reader)) != null) {
-					//Console.WriteLine ("Parsing Line: {0}={1}", data[0], data[1]);
-					if (data[0] == "status") {
-						status = (ResultCode) int.Parse (data [1]);
-					} else if (data[0].StartsWith ("status_text")) {
-						status_text = data[1];
-						Log.DebugFormat ("StatusText : {0}", data[1]);
-					} else if (data[0].StartsWith ("album.name")) {
-						//this is the URL name
-						int ref_num = -1;
-						if (this.Version == GalleryVersion.Version1) {
-							string [] segments = data[0].Split (new char[1]{'.'});
-							ref_num = int.Parse (segments[segments.Length -1]);
-						} else {
-							ref_num = int.Parse (data[1]);
-						}
-						current_album = new Album (this, data[1], ref_num);
-						albums.Add (current_album);
-						//Console.WriteLine ("current_album: " + data[1]);
-					} else if (data[0].StartsWith ("album.title")) {
-						//this is the display name
-						current_album.Title = data[1];
-					} else if (data[0].StartsWith ("album.summary")) {
-						current_album.Summary = data[1];
-					} else if (data[0].StartsWith ("album.parent")) {
-						//FetchAlbums and G2 FetchAlbumsPrune return ints
-						//G1 FetchAlbumsPrune returns album names (and 0 for root albums)
-						try {
-							current_album.ParentRefNum = int.Parse (data[1]);
-						} catch (System.FormatException) {
-							current_album.ParentRefNum = LookupAlbum (data[1]).RefNum;
-						}
-						//Console.WriteLine ("album.parent data[1]: " + data[1]);
-					} else if (data[0].StartsWith ("album.resize_size")) {
-						current_album.ResizeSize = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("album.thumb_size")) {
-						current_album.ThumbSize = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("album.info.extrafields")) {
-						//ignore, this is the album description
-					} else if (data[0].StartsWith ("album.perms.add")) {
-						if (data[1] == "true")
-							current_album.Perms |= AlbumPermission.Add;
-					} else if (data[0].StartsWith ("album.perms.write")) {
-						if (data[1] == "true")
-							current_album.Perms |= AlbumPermission.Write;
-					} else if (data[0].StartsWith ("album.perms.del_item")) {
-						if (data[1] == "true")
-							current_album.Perms |= AlbumPermission.Delete;
-					} else if (data[0].StartsWith ("album.perms.del_alb")) {
-						if (data[1] == "true")
-							current_album.Perms |= AlbumPermission.DeleteAlbum;
-					} else if (data[0].StartsWith ("album.perms.create_sub")) {
-						if (data[1] == "true")
-							current_album.Perms |= AlbumPermission.CreateSubAlbum;
-					} else if (data[0].StartsWith ("album_count")) {
-						if (Albums.Count != int.Parse (data[1]))
-							Log.Warning ("Parsed album count does not match album_count.  Something is amiss");
-					} else if (data[0].StartsWith ("auth_token")) {
-						AuthToken = data [1];
-					} else {
-						Log.DebugFormat ("Unparsed Line in ParseFetchAlbums(): {0}={1}", data[0], data[1]);
-					}
-				}
-				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
-				if (status != ResultCode.Success) {
-					Log.Debug (status_text);
-					throw new GalleryCommandException (status_text, status);
-				}
-
-				//Console.WriteLine (After parse albums.Count + " albums parsed");
-				return albums;
-			} finally {
-				if (reader != null)
-					reader.Close ();
-
-				response.Close ();
-			}
-		}
-
-		public int ParseAddItem (HttpWebResponse response)
-		{
-			string [] data;
-			StreamReader reader = null;
-			ResultCode status = ResultCode.UnknownResponse;
-			string status_text = "Error: Unable to parse server response";
-			int item_id = 0;
-			try {
-
-				reader = findResponse (response);
-				while ((data = GetNextLine (reader)) != null) {
-					if (data[0] == "status") {
-						status = (ResultCode) int.Parse (data [1]);
-					} else if (data[0].StartsWith ("status_text")) {
-						status_text = data[1];
-						Log.DebugFormat ("StatusText : {0}", data[1]);
-					} else if (data[0].StartsWith ("auth_token")) {
-						AuthToken = data[1];
-					} else if (data[0].StartsWith ("item_name")) {
-						item_id = int.Parse (data [1]);
-					} else {
-						Log.DebugFormat ("Unparsed Line in ParseAddItem(): {0}={1}", data[0], data[1]);
-					}
-				}
-				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
-				if (status != ResultCode.Success) {
-					Log.Debug (status_text);
-					throw new GalleryCommandException (status_text, status);
-				}
-
-				return item_id;
-			} finally {
-				if (reader != null)
-					reader.Close ();
-
-				response.Close ();
-			}
-		}
-
-		public bool ParseNewAlbum (HttpWebResponse response)
-		{
-			return ParseBasic (response);
-		}
-
-		public bool ParseMoveAlbum (HttpWebResponse response)
-		{
-			return ParseBasic (response);
-		}
-		/*
-		public Album ParseAlbumProperties (HttpWebResponse response)
-		{
-			string [] data;
-			StreamReader reader = null;
-			ResultCode status = ResultCode.UnknownResponse;
-			string status_text = "Error: Unable to parse server response";
-			try {
-
-				reader = findResponse (response);
-				while ((data = GetNextLine (reader)) != null) {
-					if (data[0] == "status") {
-						status = (ResultCode) int.Parse (data [1]);
-					} else if (data[0].StartsWith ("status_text")) {
-						status_text = data[1];
-						Log.Debug ("StatusText : {0}", data[1]);
-					} else if (data[0].StartsWith ("auto-resize")) {
-						//ignore
-					} else {
-						Log.Debug ("Unparsed Line in ParseBasic(): {0}={1}", data[0], data[1]);
-					}
-				}
-				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
-				if (status != ResultCode.Success) {
-					Log.Debug (status_text);
-					throw new GalleryCommandException (status_text, status);
-				}
-
-				return true;
-			} finally {
-				if (reader != null)
-					reader.Close ();
-
-				response.Close ();
-			}
-		}
-		*/
-
-		private bool ParseBasic (HttpWebResponse response)
-		{
-			string [] data;
-			StreamReader reader = null;
-			ResultCode status = ResultCode.UnknownResponse;
-			string status_text = "Error: Unable to parse server response";
-			try {
-
-				reader = findResponse (response);
-				while ((data = GetNextLine (reader)) != null) {
-					if (data[0] == "status") {
-						status = (ResultCode) int.Parse (data [1]);
-					} else if (data[0].StartsWith ("status_text")) {
-						status_text = data[1];
-						Log.DebugFormat ("StatusText : {0}", data[1]);
-					} else if (data[0].StartsWith ("auth_token")) {
-						AuthToken = data[1];
-					} else {
-						Log.DebugFormat ("Unparsed Line in ParseBasic(): {0}={1}", data[0], data[1]);
-					}
-				}
-				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
-				if (status != ResultCode.Success) {
-					Log.Debug (status_text + " Status: " + status);
-					throw new GalleryCommandException (status_text, status);
-				}
-
-				return true;
-			} finally {
-				if (reader != null)
-					reader.Close ();
-
-				response.Close ();
-			}
-		}
-
-		public Album LookupAlbum (string name)
-		{
-			Album match = null;
-
-			foreach (Album album in albums) {
-				if (album.Name == name) {
-					match = album;
-					break;
-				}
-			}
-			return match;
-		}
-
-		public Album LookupAlbum (int ref_num)
-		{
-			// FIXME this is really not the best way to do this
-			Album match = null;
-
-			foreach (Album album in albums) {
-				if (album.RefNum == ref_num) {
-					match = album;
-					break;
-				}
-			}
-			return match;
-		}
-
-		public static string FixUrl(string url, string end)
-		{
-			string fixedUrl = url;
-			if (!url.EndsWith (end)) {
-				if (!url.EndsWith ("/"))
-					fixedUrl = url + "/";
-				fixedUrl = fixedUrl + end;
-			}
-			return fixedUrl;
-
-		}
-
-		public void PopupException (GalleryCommandException e, Gtk.Dialog d)
-		{
-			Log.DebugFormat ("{0} : {1} ({2})", e.Message, e.ResponseText, e.Status);
-			HigMessageDialog md =
-				new HigMessageDialog (d,
-						      Gtk.DialogFlags.Modal |
-						      Gtk.DialogFlags.DestroyWithParent,
-						      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-						      Catalog.GetString ("Error while creating new album"),
-						      String.Format (Catalog.GetString ("The following error was encountered while attempting to perform the requested operation:\n{0} ({1})"), e.Message, e.Status));
-			md.Run ();
-			md.Destroy ();
-		}
-
-	}
-
-	public class Gallery1 : Gallery
-	{
-		public const string script_name = "gallery_remote2.php";
-		public Gallery1 (string url) : this (url, url) {}
-		public Gallery1 (string name, string url) : base (name)
-		{
-			this.uri = new Uri (FixUrl (url, script_name));
-			version = GalleryVersion.Version1;
-		}
-
-		public override void Login (string username, string passwd)
-		{
-			//Console.WriteLine ("Gallery1: Attempting to login");
-			FormClient client = new FormClient (cookies);
-
-			client.Add ("cmd", "login");
-			client.Add ("protocol_version", "2.3");
-			client.Add ("uname", username);
-			client.Add ("password", passwd);
-
-			ParseLogin (client.Submit (uri));
-		}
-
-		public override ArrayList FetchAlbums ()
-		{
-			FormClient client = new FormClient (cookies);
-
-			client.Add ("cmd", "fetch-albums");
-			client.Add ("protocol_version", "2.3");
-
-			return ParseFetchAlbums (client.Submit (uri));
-		}
-
-
-		public override bool MoveAlbum (Album album, string end_name)
-		{
-			FormClient client = new FormClient (cookies);
-
-			client.Add ("cmd", "move-album");
-			client.Add ("protocol_version", "2.7");
-			client.Add ("set_albumName", album.Name);
-			client.Add ("set_destalbumName", end_name);
-
-			return ParseMoveAlbum (client.Submit (uri));
-		}
-
-		public override int AddItem (Album album,
-				     string path,
-				     string filename,
-				     string caption,
-				     string description,
-				     bool autorotate)
-		{
-			FormClient client = new FormClient (cookies);
-
-			client.Add ("cmd", "add-item");
-			client.Add ("protocol_version", "2.9");
-			client.Add ("set_albumName", album.Name);
-			client.Add ("caption", caption);
-			client.Add ("userfile_name", filename);
-			client.Add ("force_filename", filename);
-			client.Add ("auto_rotate", autorotate ? "yes" : "no");
-			client.Add ("userfile", new FileInfo (path));
-			client.Add ("extrafield.Description", description);
-			client.expect_continue = expect_continue;
-
-			return ParseAddItem (client.Submit (uri, Progress));
-		}
-
-		/*
-		public override Album AlbumProperties (string album)
-		{
-			FormClient client = new FormClient (cookies);
-			client.Add ("cmd", "album-properties");
-			client.Add ("protocol_version", "2.3");
-			client.Add ("set_albumName", album);
-
-			return ParseAlbumProperties (client.Submit (uri));
-		}
-		*/
-
-		public override bool NewAlbum (string parent_name,
-				      string name,
-				      string title,
-				      string description)
-		{
-			FormClient client = new FormClient (cookies);
-			client.Multipart = true;
-			client.Add ("cmd", "new-album");
-			client.Add ("protocol_version", "2.8");
-			client.Add ("set_albumName", parent_name);
-			client.Add ("newAlbumName", name);
-			client.Add ("newAlbumTitle", title);
-			client.Add ("newAlbumDesc", description);
-
-			return ParseNewAlbum (client.Submit (uri));
-		}
-
-		public override ArrayList FetchAlbumImages (Album album, bool include_ablums)
-		{
-			FormClient client = new FormClient (cookies);
-			client.Add ("cmd", "fetch-album-images");
-			client.Add ("protocol_version","2.3");
-			client.Add ("set_albumName", album.Name);
-			client.Add ("albums_too", include_ablums ? "yes" : "no");
-
-			album.Images = ParseFetchAlbumImages (client.Submit (uri), album);
-			return album.Images;
-		}
-
-		public override ArrayList FetchAlbumsPrune ()
-		{
-			FormClient client = new FormClient (cookies);
-			client.Add ("cmd", "fetch-albums-prune");
-			client.Add ("protocol_version", "2.3");
-			client.Add ("check_writable", "no");
-			ArrayList a = ParseFetchAlbums (client.Submit (uri));
-			a.Sort();
-			return a;
-		}
-
-		public ArrayList ParseFetchAlbumImages (HttpWebResponse response, Album album)
-		{
-			string [] data;
-			StreamReader reader = null;
-			ResultCode status = ResultCode.UnknownResponse;
-			string status_text = "Error: Unable to parse server response";
-			try {
-				Image current_image = null;
-				reader = findResponse (response);
-				while ((data = GetNextLine (reader)) != null) {
-					if (data[0] == "status") {
-						status = (ResultCode) int.Parse (data [1]);
-					} else if (data[0].StartsWith ("status_text")) {
-						status_text = data[1];
-						Log.DebugFormat ("StatusText : {0}", data[1]);
-					} else if (data[0].StartsWith ("image.name")) {
-						current_image = new Image (album, data[1]);
-						album.Images.Add (current_image);
-					} else if (data[0].StartsWith ("image.raw_width")) {
-						current_image.RawWidth = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.raw_height")) {
-						current_image.RawHeight = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.raw_height")) {
-						current_image.RawHeight = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.raw_filesize")) {
-					} else if (data[0].StartsWith ("image.capturedate.year")) {
-					} else if (data[0].StartsWith ("image.capturedate.mon")) {
-					} else if (data[0].StartsWith ("image.capturedate.mday")) {
-					} else if (data[0].StartsWith ("image.capturedate.hours")) {
-					} else if (data[0].StartsWith ("image.capturedate.minutes")) {
-					} else if (data[0].StartsWith ("image.capturedate.seconds")) {
-					} else if (data[0].StartsWith ("image.hidden")) {
-					} else if (data[0].StartsWith ("image.resizedName")) {
-						current_image.ResizedName = data[1];
-					} else if (data[0].StartsWith ("image.resized_width")) {
-						current_image.ResizedWidth = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.resized_height")) {
-						current_image.ResizedHeight = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.thumbName")) {
-						current_image.ThumbName = data[1];
-					} else if (data[0].StartsWith ("image.thumb_width")) {
-						current_image.ThumbWidth = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.thumb_height")) {
-						current_image.ThumbHeight = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.caption")) {
-						current_image.Caption = data[1];
-					} else if (data[0].StartsWith ("image.extrafield.Description")) {
-						current_image.Description = data[1];
-					} else if (data[0].StartsWith ("image.clicks")) {
-						try {
-							current_image.Clicks = int.Parse (data[1]);
-						} catch (System.FormatException) {
-							current_image.Clicks = 0;
-						}
-					} else if (data[0].StartsWith ("baseurl")) {
-						album.BaseURL = data[1];
-					} else if (data[0].StartsWith ("image_count")) {
-						if (album.Images.Count != int.Parse (data[1]))
-							Log.Warning ("Parsed image count for " + album.Name + "(" + album.Images.Count + ") does not match image_count (" + data[1] + ").  Something is amiss");
-					} else {
-						Log.DebugFormat ("Unparsed Line in ParseFetchAlbumImages(): {0}={1}", data[0], data[1]);
-					}
-				}
-				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
-				if (status != ResultCode.Success) {
-					Log.Debug (status_text);
-					throw new GalleryCommandException (status_text, status);
-				}
-
-
-				//Set the Urls for downloading the images.
-				string baseUrl = album.BaseURL + "/";
-				foreach (Image image in album.Images) {
-					image.Url = baseUrl + image.Name;
-				}
-
-				return album.Images;
-			} finally {
-				if (reader != null)
-					reader.Close ();
-
-				response.Close ();
-			}
-		}
-
-		public override string GetAlbumUrl (Album album)
-		{
-			string url = Uri.ToString();
-			url = url.Remove (url.Length - script_name.Length, script_name.Length);
-
-			string path = album.Name;
-
-			url = url + path;
-			url = url.Replace (" ", "+");
-			return url;
-		}
-
-
-	}
-	public class Gallery2 : Gallery
-	{
-		public const string script_name = "main.php";
-
-		public Gallery2 (string url) : this (url, url) {}
-		public Gallery2 (string name, string url) : base (name)
-		{
-			this.uri = new Uri (FixUrl (url, script_name));
-			version = GalleryVersion.Version2;
-		}
-
-		public override void Login (string username, string passwd)
-		{
-			Log.Debug ("Gallery2: Attempting to login");
-			FormClient client = new FormClient (cookies);
-
-			client.Add ("g2_form[cmd]", "login");
-			client.Add ("g2_form[protocol_version]", "2.10");
-			client.Add ("g2_form[uname]", username);
-			client.Add ("g2_form[password]", passwd);
-			AddG2Specific (client);
-
-			ParseLogin (client.Submit (uri));
-		}
-
-		public override ArrayList FetchAlbums ()
-		{
-			//FetchAlbums doesn't exist for G2, we have to use FetchAlbumsPrune()
-			return FetchAlbumsPrune ();
-		}
-
-
-		public override bool MoveAlbum (Album album, string end_name)
-		{
-			FormClient client = new FormClient (cookies);
-
-			client.Add ("g2_form[cmd]", "move-album");
-			client.Add ("g2_form[protocol_version]", "2.10");
-			client.Add ("g2_form[set_albumName]", album.Name);
-			client.Add ("g2_form[set_destalbumName]", end_name);
-			AddG2Specific (client);
-
-			return ParseMoveAlbum (client.Submit (uri));
-		}
-
-		public override int AddItem (Album album,
-				     string path,
-				     string filename,
-				     string caption,
-				     string description,
-				     bool autorotate)
-		{
-			FormClient client = new FormClient (cookies);
-
-			client.Add ("g2_form[cmd]", "add-item");
-			client.Add ("g2_form[protocol_version]", "2.10");
-			client.Add ("g2_form[set_albumName]", album.Name);
-			client.Add ("g2_form[caption]", caption);
-			client.Add ("g2_form[userfile_name]", filename);
-			client.Add ("g2_form[force_filename]", filename);
-			client.Add ("g2_form[auto_rotate]", autorotate ? "yes" : "no");
-			client.Add ("g2_form[extrafield.Description]", description);
-			client.Add ("g2_userfile", new FileInfo (path));
-			client.expect_continue = expect_continue;
-			AddG2Specific (client);
-
-			return ParseAddItem (client.Submit (uri, Progress));
-		}
-
-		/*
-		public override Album AlbumProperties (string album)
-		{
-			FormClient client = new FormClient (cookies);
-			client.Add ("cmd", "album-properties");
-			client.Add ("protocol_version", "2.3");
-			client.Add ("set_albumName", album);
-
-			return ParseAlbumProperties (client.Submit (uri));
-		}
-		*/
-
-		public override bool NewAlbum (string parent_name,
-				      string name,
-				      string title,
-				      string description)
-		{
-			FormClient client = new FormClient (cookies);
-			client.Multipart = true;
-			client.Add ("g2_form[cmd]", "new-album");
-			client.Add ("g2_form[protocol_version]", "2.10");
-			client.Add ("g2_form[set_albumName]", parent_name);
-			client.Add ("g2_form[newAlbumName]", name);
-			client.Add ("g2_form[newAlbumTitle]", title);
-			client.Add ("g2_form[newAlbumDesc]", description);
-			AddG2Specific (client);
-
-			return ParseNewAlbum (client.Submit (uri));
-		}
-
-		public override ArrayList FetchAlbumImages (Album album, bool include_ablums)
-		{
-			FormClient client = new FormClient (cookies);
-			client.Add ("g2_form[cmd]", "fetch-album-images");
-			client.Add ("g2_form[protocol_version]","2.10");
-			client.Add ("g2_form[set_albumName]", album.Name);
-			client.Add ("g2_form[albums_too]", include_ablums ? "yes" : "no");
-			AddG2Specific (client);
-
-			album.Images = ParseFetchAlbumImages (client.Submit (uri), album);
-			return album.Images;
-		}
-
-		public override ArrayList FetchAlbumsPrune ()
-		{
-			FormClient client = new FormClient (cookies);
-			client.Add ("g2_form[cmd]", "fetch-albums-prune");
-			client.Add ("g2_form[protocol_version]", "2.10");
-			client.Add ("g2_form[check_writable]", "no");
-			AddG2Specific (client);
-
-			ArrayList a = ParseFetchAlbums (client.Submit (uri));
-			a.Sort();
-			return a;
-		}
-
-		private void AddG2Specific (FormClient client)
-		{
-			if (AuthToken != null && AuthToken != String.Empty)
-				client.Add("g2_authToken", AuthToken);
-			client.Add("g2_controller", "remote.GalleryRemote");
-		}
-
-		public ArrayList ParseFetchAlbumImages (HttpWebResponse response, Album album)
-		{
-			string [] data;
-			StreamReader reader = null;
-			ResultCode status = ResultCode.UnknownResponse;
-			string status_text = "Error: Unable to parse server response";
-			try {
-				Image current_image = null;
-				string baseUrl = Uri.ToString() + "?g2_view=core.DownloadItem&g2_itemId=";
-				reader = findResponse (response);
-				while ((data = GetNextLine (reader)) != null) {
-					if (data[0] == "status") {
-						status = (ResultCode) int.Parse (data [1]);
-					} else if (data[0].StartsWith ("status_text")) {
-						status_text = data[1];
-						Log.DebugFormat ("StatusText : {0}", data[1]);
-					} else if (data[0].StartsWith ("image.name")) {
-						//for G2 this is the number used to download the image.
-						current_image = new Image (album, "awaiting 'title'");
-						album.Images.Add (current_image);
-						current_image.Url = baseUrl + data[1];
-					} else if (data[0].StartsWith ("image.title")) {
-						//for G2 the "title" is the name"
-						current_image.Name = data[1];
-					} else if (data[0].StartsWith ("image.raw_width")) {
-						current_image.RawWidth = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.raw_height")) {
-						current_image.RawHeight = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.raw_height")) {
-						current_image.RawHeight = int.Parse (data[1]);
-					//ignore these for now
-					} else if (data[0].StartsWith ("image.raw_filesize")) {
-					} else if (data[0].StartsWith ("image.forceExtension")) {
-					} else if (data[0].StartsWith ("image.capturedate.year")) {
-					} else if (data[0].StartsWith ("image.capturedate.mon")) {
-					} else if (data[0].StartsWith ("image.capturedate.mday")) {
-					} else if (data[0].StartsWith ("image.capturedate.hours")) {
-					} else if (data[0].StartsWith ("image.capturedate.minutes")) {
-					} else if (data[0].StartsWith ("image.capturedate.seconds")) {
-					} else if (data[0].StartsWith ("image.hidden")) {
-					} else if (data[0].StartsWith ("image.resizedName")) {
-						current_image.ResizedName = data[1];
-					} else if (data[0].StartsWith ("image.resized_width")) {
-						current_image.ResizedWidth = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.resized_height")) {
-						current_image.ResizedHeight = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.thumbName")) {
-						current_image.ThumbName = data[1];
-					} else if (data[0].StartsWith ("image.thumb_width")) {
-						current_image.ThumbWidth = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.thumb_height")) {
-						current_image.ThumbHeight = int.Parse (data[1]);
-					} else if (data[0].StartsWith ("image.caption")) {
-						current_image.Caption = data[1];
-					} else if (data[0].StartsWith ("image.extrafield.Description")) {
-						current_image.Description = data[1];
-					} else if (data[0].StartsWith ("image.clicks")) {
-						try {
-							current_image.Clicks = int.Parse (data[1]);
-						} catch (System.FormatException) {
-							current_image.Clicks = 0;
-						}
-					} else if (data[0].StartsWith ("baseurl")) {
-						album.BaseURL = data[1];
-					} else if (data[0].StartsWith ("image_count")) {
-						if (album.Images.Count != int.Parse (data[1]))
-							Log.Warning ("Parsed image count for " + album.Name + "(" + album.Images.Count + ") does not match image_count (" + data[1] + ").  Something is amiss");
-					} else {
-						Log.DebugFormat ("Unparsed Line in ParseFetchAlbumImages(): {0}={1}", data[0], data[1]);
-					}
-				}
-				Log.DebugFormat ("Found: {0} cookies", response.Cookies.Count);
-				if (status != ResultCode.Success) {
-					Log.Debug (status_text);
-					throw new GalleryCommandException (status_text, status);
-				}
-
-				return album.Images;
-
-			} finally {
-				if (reader != null)
-					reader.Close ();
-
-				response.Close ();
-			}
-		}
-
-		public override string GetAlbumUrl (Album album)
-		{
-			return Uri.ToString() + "?g2_view=core.ShowItem&g2_itemId=" + album.Name;
-		}
-
-	}
-
-	public enum GalleryVersion : byte
-	{
-		VersionUnknown = 0,
-		Version1 = 1,
-		Version2 = 2
-	}
-}
diff --git a/extensions/Exporters/GalleryExport/Makefile.am b/extensions/Exporters/GalleryExport/Makefile.am
deleted file mode 100644
index f8153cb..0000000
--- a/extensions/Exporters/GalleryExport/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-ASSEMBLY = FSpot.Exporters.GalleryExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_GALLERYEXPORT)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	GalleryExport.cs \
-	GalleryRemote.cs \
-	FormClient.cs
-
-RESOURCES = \
-	GalleryExport.addin.xml \
-	GalleryExport.glade
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/GalleryExport/Makefile.in b/extensions/Exporters/GalleryExport/Makefile.in
deleted file mode 100644
index 38e1b5e..0000000
--- a/extensions/Exporters/GalleryExport/Makefile.in
+++ /dev/null
@@ -1,806 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/GalleryExport
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.GalleryExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_GALLERYEXPORT) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	GalleryExport.cs \
-	GalleryRemote.cs \
-	FormClient.cs
-
-RESOURCES = \
-	GalleryExport.addin.xml \
-	GalleryExport.glade
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/GalleryExport/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/GalleryExport/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/Makefile.am b/extensions/Exporters/Makefile.am
deleted file mode 100644
index d68e439..0000000
--- a/extensions/Exporters/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-SUBDIRS = 			\
-	CDExport		\
-	FacebookExport		\
-	FlickrExport		\
-	FolderExport		\
-	GalleryExport		\
-	PicasaWebExport		\
-	SmugMugExport		\
-	TabbloExport		\
-	ZipExport
diff --git a/extensions/Exporters/Makefile.in b/extensions/Exporters/Makefile.in
deleted file mode 100644
index fc25233..0000000
--- a/extensions/Exporters/Makefile.in
+++ /dev/null
@@ -1,678 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = extensions/Exporters
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = \
-	CDExport		\
-	FacebookExport		\
-	FlickrExport		\
-	FolderExport		\
-	GalleryExport		\
-	PicasaWebExport		\
-	SmugMugExport		\
-	TabbloExport		\
-	ZipExport
-
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-	install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive distclean distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/PicasaWebExport/Makefile.am b/extensions/Exporters/PicasaWebExport/Makefile.am
deleted file mode 100644
index dd801bc..0000000
--- a/extensions/Exporters/PicasaWebExport/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-ASSEMBLY = FSpot.Exporters.PicasaWeb
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_PICASAWEBEXPORT)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = PicasaWebExport.cs
-
-RESOURCES = \
-	PicasaWebExport.addin.xml \
-	PicasaWebExport.glade
-
-SUBDIRS = \
-	google-sharp
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/PicasaWebExport/Makefile.in b/extensions/Exporters/PicasaWebExport/Makefile.in
deleted file mode 100644
index 4cb76ad..0000000
--- a/extensions/Exporters/PicasaWebExport/Makefile.in
+++ /dev/null
@@ -1,1006 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/PicasaWebExport
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.PicasaWeb
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_PICASAWEBEXPORT) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = PicasaWebExport.cs
-RESOURCES = \
-	PicasaWebExport.addin.xml \
-	PicasaWebExport.glade
-
-SUBDIRS = \
-	google-sharp
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/PicasaWebExport/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/PicasaWebExport/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(SCRIPTS)
-installdirs: installdirs-recursive
-installdirs-am:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-	install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive distclean distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-data-local install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-moduleSCRIPTS \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags tags-recursive uninstall uninstall-am \
-	uninstall-local uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml b/extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml
deleted file mode 100644
index 880cedf..0000000
--- a/extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<Addin namespace="FSpot"
-	version="0.7.0.0"
-	name="PicasaWeb Export"
-	description="This extension allows you to export your photos to PicasaWeb."
-	author="F-Spot team"
-	url="http://f-spot.org"
-	defaultEnabled="true"
-	category="Export">
-
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-
-	<Extension path = "/FSpot/Menus/Exports">
-		<ExportMenuItem id="PicasaWeb" _label = "_PicasaWeb..." class = "FSpotGoogleExport.GoogleExport" />
-	</Extension>
-</Addin>
diff --git a/extensions/Exporters/PicasaWebExport/PicasaWebExport.cs b/extensions/Exporters/PicasaWebExport/PicasaWebExport.cs
deleted file mode 100644
index a27a6b7..0000000
--- a/extensions/Exporters/PicasaWebExport/PicasaWebExport.cs
+++ /dev/null
@@ -1,941 +0,0 @@
-/*
- * PicasaWebExport.cs
- *
- * Authors:
- *   Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (C) 2006 Stephane Delcroix
- */
-
-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.Filters;
-using FSpot.Widgets;
-using FSpot.Utils;
-using FSpot.Imaging;
-using FSpot.UI.Dialog;
-
-using Gnome.Keyring;
-
-using Mono.Google;
-using Mono.Google.Picasa;
-
-namespace FSpotGoogleExport {
-	public class GoogleAccount {
-
-		private string username;
-		private string password;
-		private string token;
-		private string unlock_captcha;
-		private GoogleConnection connection;
-		private PicasaWeb picasa;
-
-		public GoogleAccount (string username, string password)
-		{
-			this.username = username;
-			this.password = password;
-		}
-
-		public GoogleAccount (string username, string password, string token, string unlock_captcha)
-		{
-			this.username = username;
-			this.password = password;
-			this.token = token;
-			this.unlock_captcha = unlock_captcha;
-		}
-
-		public PicasaWeb Connect ()
-		{
-			Log.Debug ("GoogleAccount.Connect()");
-			GoogleConnection conn = new GoogleConnection (GoogleService.Picasa);
-			ServicePointManager.CertificatePolicy = new NoCheckCertificatePolicy ();
-			if (unlock_captcha == null || token == null)
-				conn.Authenticate(username, password);
-			else {
-				conn.Authenticate(username, password, token, unlock_captcha);
-				token = null;
-				unlock_captcha = null;
-			}
-			connection = conn;
-			PicasaWeb picasa = new PicasaWeb(conn);
-			this.picasa = picasa;
-			return picasa;
-		}
-
-		private void MarkChanged()
-		{
-			connection = null;
-		}
-
-		public bool Connected {
-			get {
-				return (connection != null);
-			}
-		}
-
-		public string Username {
-			get {
-				return username;
-			}
-			set {
-				if (username != value) {
-					username = value;
-					MarkChanged ();
-				}
-			}
-		}
-
-		public string Password {
-			get {
-				return password;
-			}
-			set {
-				if (password != value) {
-					password = value;
-					MarkChanged ();
-				}
-			}
-		}
-
-		public string Token {
-			get {
-				return token;
-			}
-			set {
-				token = value;
-			}
-		}
-
-		public string UnlockCaptcha {
-			get {
-				return unlock_captcha;
-			}
-			set {
-				unlock_captcha = value;
-			}
-		}
-
-		public PicasaWeb Picasa {
-			get {
-				return picasa;
-			}
-		}
-	}
-
-
-	public class GoogleAccountManager
-	{
-		private static GoogleAccountManager instance;
-		private const string keyring_item_name = "Google Account";
-		ArrayList accounts;
-
-		public delegate void AccountListChangedHandler (GoogleAccountManager manager, GoogleAccount changed_account);
-		public event AccountListChangedHandler AccountListChanged;
-
-		public static GoogleAccountManager GetInstance ()
-		{
-			if (instance == null) {
-				instance = new GoogleAccountManager ();
-			}
-
-			return instance;
-		}
-
-		private GoogleAccountManager ()
-		{
-			accounts = new ArrayList ();
-			ReadAccounts ();
-		}
-
-		public void MarkChanged ()
-		{
-			MarkChanged (true, null);
-		}
-
-		public void MarkChanged (bool write, GoogleAccount changed_account)
-		{
-			if (write)
-				WriteAccounts ();
-
-			if (AccountListChanged != null)
-				AccountListChanged (this, changed_account);
-		}
-
-		public ArrayList GetAccounts ()
-		{
-			return accounts;
-		}
-
-		public void AddAccount (GoogleAccount account)
-		{
-			AddAccount (account, true);
-		}
-
-		public void AddAccount (GoogleAccount account, bool write)
-		{
-			accounts.Add (account);
-			MarkChanged (write, account);
-		}
-
-		public void RemoveAccount (GoogleAccount account)
-		{
-			string keyring;
-			try {
-				keyring = Ring.GetDefaultKeyring();
-			} catch {
-				return;
-			}
-			Hashtable request_attributes = new Hashtable();
-			request_attributes["name"] = keyring_item_name;
-			request_attributes["username"] = account.Username;
-			try {
-				foreach(ItemData result in Ring.Find(ItemType.GenericSecret, request_attributes)) {
-					Ring.DeleteItem(keyring, result.ItemID);
-				}
-			} catch (Exception e) {
-				Log.DebugException (e);
-			}
-			accounts.Remove (account);
-			MarkChanged ();
-		}
-
-		public void WriteAccounts ()
-		{
-			string keyring;
-			try {
-				keyring = Ring.GetDefaultKeyring();
-			} catch {
-				return;
-			}
-			foreach (GoogleAccount account in accounts) {
-				Hashtable update_request_attributes = new Hashtable();
-				update_request_attributes["name"] = keyring_item_name;
-				update_request_attributes["username"] = account.Username;
-
-				try {
-					Ring.CreateItem(keyring, ItemType.GenericSecret, keyring_item_name, update_request_attributes, account.Password, true);
-				} catch {
-					continue;
-				}
-			}
-		}
-
-		private void ReadAccounts ()
-		{
-
-			Hashtable request_attributes = new Hashtable();
-			request_attributes["name"] = keyring_item_name;
-			try {
-				foreach(ItemData result in Ring.Find(ItemType.GenericSecret, request_attributes)) {
-					if(!result.Attributes.ContainsKey("name") || !result.Attributes.ContainsKey("username") ||
-						(result.Attributes["name"] as string) != keyring_item_name)
-						continue;
-
-					string username = (string)result.Attributes["username"];
-					string password = result.Secret;
-
-					if (username == null || username == String.Empty || password == null || password == String.Empty)
-						throw new ApplicationException ("Invalid username/password in keyring");
-
-					GoogleAccount account = new GoogleAccount(username, password);
-					if (account != null)
-						AddAccount (account, false);
-
-				}
-			} catch (Exception e) {
-				Log.DebugException (e);
-			}
-
-			MarkChanged ();
-		}
-	}
-
-	public class GoogleAccountDialog {
-		public GoogleAccountDialog (Gtk.Window parent) : this (parent, null, false, null) {
-			Dialog.Response += HandleAddResponse;
-			add_button.Sensitive = false;
-		}
-
-		public GoogleAccountDialog (Gtk.Window parent, GoogleAccount account, bool show_error, CaptchaException captcha_exception)
-		{
-			xml = new Glade.XML (null, "PicasaWebExport.glade", dialog_name, "f-spot");
-			xml.Autoconnect (this);
-			Dialog.Modal = false;
-			Dialog.TransientFor = parent;
-			Dialog.DefaultResponse = Gtk.ResponseType.Ok;
-
-			this.account = account;
-
-			bool show_captcha = (captcha_exception != null);
-			status_area.Visible = show_error;
-			locked_area.Visible = show_captcha;
-			captcha_label.Visible = show_captcha;
-			captcha_entry.Visible = show_captcha;
-			captcha_image.Visible = show_captcha;
-
-			password_entry.ActivatesDefault = true;
-			username_entry.ActivatesDefault = true;
-
-			if (show_captcha) {
-				try {
-					using  (var img = ImageFile.Create(new SafeUri(captcha_exception.CaptchaUrl, true))) {
-						captcha_image.Pixbuf = img.Load();
-						token = captcha_exception.Token;
-					}
-				} catch (Exception) {}
-			}
-
-			if (account != null) {
-				password_entry.Text = account.Password;
-				username_entry.Text = account.Username;
-				add_button.Label = Gtk.Stock.Ok;
-				Dialog.Response += HandleEditResponse;
-			}
-
-			if (remove_button != null)
-				remove_button.Visible = account != null;
-
-			this.Dialog.Show ();
-
-			password_entry.Changed += HandleChanged;
-			username_entry.Changed += HandleChanged;
-			HandleChanged (null, null);
-		}
-
-		private void HandleChanged (object sender, System.EventArgs args)
-		{
-			password = password_entry.Text;
-			username = username_entry.Text;
-
-			add_button.Sensitive = !(password == String.Empty || username == String.Empty);
-		}
-
-		[GLib.ConnectBefore]
-		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId == Gtk.ResponseType.Ok) {
-				GoogleAccount account = new GoogleAccount (username, password);
-				GoogleAccountManager.GetInstance ().AddAccount (account);
-			}
-			Dialog.Destroy ();
-		}
-
-		protected void HandleEditResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId == Gtk.ResponseType.Ok) {
-				account.Username = username;
-				account.Password = password;
-				account.Token = token;
-				account.UnlockCaptcha = captcha_entry.Text;
-				GoogleAccountManager.GetInstance ().MarkChanged (true, account);
-			} else if (args.ResponseId == Gtk.ResponseType.Reject) {
-				// NOTE we are using Reject to signal the remove action.
-				GoogleAccountManager.GetInstance ().RemoveAccount (account);
-			}
-			Dialog.Destroy ();
-		}
-
-		private Gtk.Dialog Dialog {
-			get {
-				if (dialog == null)
-					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
-
-				return dialog;
-			}
-		}
-
-		private GoogleAccount account;
-		private string password;
-		private string username;
-		private string token;
-
-		private Glade.XML xml;
-		private string dialog_name = "google_add_dialog";
-
-		// widgets
-		[Glade.Widget] Gtk.Dialog dialog;
-		[Glade.Widget] Gtk.Entry password_entry;
-		[Glade.Widget] Gtk.Entry username_entry;
-		[Glade.Widget] Gtk.Entry captcha_entry;
-
-		[Glade.Widget] Gtk.Button add_button;
-		[Glade.Widget] Gtk.Button remove_button;
-		[Glade.Widget] Gtk.Button cancel_button;
-
-		[Glade.Widget] Gtk.HBox status_area;
-		[Glade.Widget] Gtk.HBox locked_area;
-
-		[Glade.Widget] Gtk.Image captcha_image;
-		[Glade.Widget] Gtk.Label captcha_label;
-
-	}
-
-	public class GoogleAddAlbum {
-		[Glade.Widget] Gtk.Dialog dialog;
-		[Glade.Widget] Gtk.OptionMenu album_optionmenu;
-
-		[Glade.Widget] Gtk.Entry title_entry;
-		[Glade.Widget] Gtk.Entry description_entry;
-		[Glade.Widget] Gtk.CheckButton public_check;
-
-		[Glade.Widget] Gtk.Button add_button;
-		[Glade.Widget] Gtk.Button cancel_button;
-
-		private Glade.XML xml;
-		private string dialog_name = "google_add_album_dialog";
-
-		private GoogleExport export;
-		private PicasaWeb picasa;
-		private string description;
-		private string title;
-		private bool public_album;
-
-		public GoogleAddAlbum (GoogleExport export, PicasaWeb picasa)
-		{
-			xml = new Glade.XML (null, "PicasaWebExport.glade", dialog_name, "f-spot");
-			xml.Autoconnect (this);
-
-			this.export = export;
-			this.picasa = picasa;
-
-			Dialog.Response += HandleAddResponse;
-
-			description_entry.Changed += HandleChanged;
-			title_entry.Changed += HandleChanged;
-			HandleChanged (null, null);
-		}
-
-		private void HandleChanged (object sender, EventArgs args)
-		{
-			description = description_entry.Text;
-			title = title_entry.Text;
-			public_album = public_check.Active;
-
-			if (title == String.Empty)
-				add_button.Sensitive = false;
-			else
-				add_button.Sensitive = true;
-		}
-
-		[GLib.ConnectBefore]
-		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId == Gtk.ResponseType.Ok) {
-				public_album = public_check.Active;
-
-				try {
-					picasa.CreateAlbum (System.Web.HttpUtility.HtmlEncode (title), description, public_album ? AlbumAccess.Public : AlbumAccess.Private);
-				} catch (System.Exception e) {
-					HigMessageDialog md =
-					new HigMessageDialog (Dialog,
-							      Gtk.DialogFlags.Modal |
-							      Gtk.DialogFlags.DestroyWithParent,
-								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
-							      Catalog.GetString ("Error while creating Album"),
-							      String.Format (Catalog.GetString ("The following error was encountered while attempting to create an album: {0}"), e.Message));
-					md.Run ();
-					md.Destroy ();
-					return;
-				}
-				export.HandleAlbumAdded (title);
-			}
-			Dialog.Destroy ();
-		}
-
-		private Gtk.Dialog Dialog {
-			get {
-				if (dialog == null)
-					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
-
-				return dialog;
-			}
-		}
-	}
-
-
-	public class GoogleExport : FSpot.Extensions.IExporter {
-		public GoogleExport ()
-		{
-		}
-
-		public void Run (IBrowsableCollection selection)
-		{
-			xml = new Glade.XML (null, "PicasaWebExport.glade", dialog_name, "f-spot");
-			xml.Autoconnect (this);
-
-			this.items = selection.Items;
-			album_button.Sensitive = false;
-			IconView view = new IconView (selection);
-			view.DisplayDates = false;
-			view.DisplayTags = false;
-
-			Dialog.Modal = false;
-			Dialog.TransientFor = null;
-
-			thumb_scrolledwindow.Add (view);
-			view.Show ();
-			Dialog.Show ();
-
-
-			GoogleAccountManager manager = GoogleAccountManager.GetInstance ();
-			manager.AccountListChanged += PopulateGoogleOptionMenu;
-			PopulateGoogleOptionMenu (manager, null);
-			album_optionmenu.Changed += HandleAlbumOptionMenuChanged;
-
-			if (edit_button != null)
-				edit_button.Clicked += HandleEditGallery;
-
-			Dialog.Response += HandleResponse;
-			connect = true;
-			HandleSizeActive (null, null);
-			Connect ();
-
-			LoadPreference (SCALE_KEY);
-			LoadPreference (SIZE_KEY);
-			LoadPreference (BROWSER_KEY);
-//			LoadPreference (Preferences.EXPORT_PICASAWEB_META);
-			LoadPreference (TAG_KEY);
-		}
-
-		private bool scale;
-		private int size;
-		private bool browser;
-//		private bool meta;
-		private bool export_tag;
-		private bool connect = false;
-
-		private long approx_size = 0;
-		private long sent_bytes = 0;
-
-		IBrowsableItem [] items;
-		int photo_index;
-		ThreadProgressDialog progress_dialog;
-
-		ArrayList accounts;
-		private GoogleAccount account;
-		private PicasaAlbum album;
-		private PicasaAlbumCollection albums = null;
-
-		private string xml_path;
-
-		private Glade.XML xml;
-		private string dialog_name = "google_export_dialog";
-
-		public const string EXPORT_SERVICE = "picasaweb/";
-		public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
-		public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
-		public const string BROWSER_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
-		public const string TAG_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "tag";
-
-		// widgets
-		[Glade.Widget] Gtk.Dialog dialog;
-		[Glade.Widget] Gtk.OptionMenu gallery_optionmenu;
-		[Glade.Widget] Gtk.OptionMenu album_optionmenu;
-
-		[Glade.Widget] Gtk.Entry width_entry;
-		[Glade.Widget] Gtk.Entry height_entry;
-
-		[Glade.Widget] Gtk.Label status_label;
-		[Glade.Widget] Gtk.Label album_status_label;
-
-		[Glade.Widget] Gtk.CheckButton browser_check;
-		[Glade.Widget] Gtk.CheckButton scale_check;
-//		[Glade.Widget] Gtk.CheckButton meta_check;
-		[Glade.Widget] Gtk.CheckButton tag_check;
-
-		[Glade.Widget] Gtk.SpinButton size_spin;
-
-		[Glade.Widget] Gtk.Button album_button;
-		[Glade.Widget] Gtk.Button add_button;
-		[Glade.Widget] Gtk.Button edit_button;
-
-		[Glade.Widget] Gtk.Button export_button;
-		[Glade.Widget] Gtk.Button cancel_button;
-
-		[Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
-
-		System.Threading.Thread command_thread;
-
-		private void HandleResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId != Gtk.ResponseType.Ok) {
-				Dialog.Destroy ();
-				return;
-			}
-
-			if (scale_check != null) {
-				scale = scale_check.Active;
-				size = size_spin.ValueAsInt;
-			} else
-				scale = false;
-
-			browser = browser_check.Active;
-//			meta = meta_check.Active;
-			export_tag = tag_check.Active;
-
-			if (account != null) {
-				album = (PicasaAlbum) account.Picasa.GetAlbums() [Math.Max (0, album_optionmenu.History)];
-				photo_index = 0;
-
-				Dialog.Destroy ();
-
-				command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (this.Upload));
-				command_thread.Name = Catalog.GetString ("Uploading Pictures");
-
-				progress_dialog = new ThreadProgressDialog (command_thread, items.Length);
-				progress_dialog.Start ();
-
-				// Save these settings for next time
-				Preferences.Set (SCALE_KEY, scale);
-				Preferences.Set (SIZE_KEY, size);
-				Preferences.Set (BROWSER_KEY, browser);
-//				Preferences.Set (Preferences.EXPORT_GALLERY_META, meta);
-				Preferences.Set (TAG_KEY, export_tag);
-			}
-		}
-
-		public void HandleSizeActive (object sender, EventArgs args)
-		{
-			size_spin.Sensitive = scale_check.Active;
-		}
-
-		private void HandleUploadProgress(object o, UploadProgressEventArgs args)
-		{
-				if (approx_size == 0)
-					progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} Sent"), GLib.Format.SizeForDisplay (args.BytesSent));
-				else
-					progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of approx. {1}"), GLib.Format.SizeForDisplay (sent_bytes + args.BytesSent), GLib.Format.SizeForDisplay (approx_size));
-				progress_dialog.Fraction = ((photo_index - 1) / (double) items.Length) + (args.BytesSent / (args.BytesTotal * (double) items.Length));
-		}
-
-		private class DateComparer : IComparer
-		{
-			public int Compare (object left, object right)
-			{
-				return DateTime.Compare ((left as IBrowsableItem).Time, (right as IBrowsableItem).Time);
-			}
-		}
-
-		private void Upload ()
-		{
-			album.UploadProgress += HandleUploadProgress;
-			sent_bytes = 0;
-			approx_size = 0;
-
-			Log.Debug ("Starting Upload to Picasa");
-
-			FilterSet filters = new FilterSet ();
-			filters.Add (new JpegFilter ());
-
-			if (scale)
-				filters.Add (new ResizeFilter ((uint)size));
-
-			Array.Sort (items, new DateComparer ());
-
-			while (photo_index < items.Length) {
-				try {
-					IBrowsableItem item = items[photo_index];
-
-					FileInfo file_info;
-					Log.Debug ("Picasa uploading " + photo_index);
-
-					progress_dialog.Message = String.Format (Catalog.GetString ("Uploading picture \"{0}\" ({1} of {2})"),
-										 item.Name, photo_index+1, items.Length);
-					photo_index++;
-
-					PicasaPicture picture;
-					using (FilterRequest request = new FilterRequest (item.DefaultVersion.Uri)) {
-						filters.Convert (request);
-						file_info = new FileInfo (request.Current.LocalPath);
-
-						if (approx_size == 0) //first image
-							approx_size = file_info.Length * items.Length;
-						else
-							approx_size = sent_bytes * items.Length / (photo_index - 1);
-
-						picture = album.UploadPicture (request.Current.LocalPath, Path.ChangeExtension (item.Name, "jpg"), item.Description);
-						sent_bytes += file_info.Length;
-					}
-					if (App.Instance.Database != null && item is Photo)
-						App.Instance.Database.Exports.Create ((item as Photo).Id,
-									      (item as Photo).DefaultVersionId,
-									      ExportStore.PicasaExportType,
-									      picture.Link);
-
-					//tagging
-					if (item.Tags != null && export_tag)
-						foreach (Tag tag in item.Tags)
-							picture.AddTag (tag.Name);
-				} catch (System.Threading.ThreadAbortException te) {
-					Log.Exception (te);
-					System.Threading.Thread.ResetAbort ();
-				} catch (System.Exception e) {
-					progress_dialog.Message = String.Format (Catalog.GetString ("Error Uploading To Gallery: {0}"),
-										 e.Message);
-					progress_dialog.ProgressText = Catalog.GetString ("Error");
-					Log.DebugException (e);
-
-					if (progress_dialog.PerformRetrySkip ()) {
-						photo_index--;
-						if (photo_index == 0)
-							approx_size = 0;
-					}
-				}
-			}
-
-			progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
-			progress_dialog.Fraction = 1.0;
-			progress_dialog.ProgressText = Catalog.GetString ("Upload Complete");
-			progress_dialog.ButtonLabel = Gtk.Stock.Ok;
-
-			if (browser) {
-				GtkBeans.Global.ShowUri (Dialog.Screen, album.Link);
-			}
-		}
-
-		private void PopulateGoogleOptionMenu (GoogleAccountManager manager, GoogleAccount changed_account)
-		{
-			Gtk.Menu menu = new Gtk.Menu ();
-			this.account = changed_account;
-			int pos = -1;
-
-			accounts = manager.GetAccounts ();
-			if (accounts == null || accounts.Count == 0) {
-				Gtk.MenuItem item = new Gtk.MenuItem (Catalog.GetString ("(No Gallery)"));
-				menu.Append (item);
-				gallery_optionmenu.Sensitive = false;
-				edit_button.Sensitive = false;
-			} else {
-				int i = 0;
-				foreach (GoogleAccount account in accounts) {
-					if (account == changed_account)
-						pos = i;
-
-					Gtk.MenuItem item = new Gtk.MenuItem (account.Username);
-					menu.Append (item);
-					i++;
-				}
-				gallery_optionmenu.Sensitive = true;
-				edit_button.Sensitive = true;
-			}
-
-			menu.ShowAll ();
-			gallery_optionmenu.Menu = menu;
-			gallery_optionmenu.SetHistory ((uint)pos);
-		}
-
-		private void Connect ()
-		{
-			Connect (null);
-		}
-
-		private void Connect (GoogleAccount selected)
-		{
-			Connect (selected, null, null);
-		}
-
-		private void Connect (GoogleAccount selected, string token, string text)
-		{
-			try {
-				if (accounts.Count != 0 && connect) {
-					if (selected == null)
-						account = (GoogleAccount) accounts [gallery_optionmenu.History];
-					else
-						account = selected;
-
-					if (!account.Connected)
-						account.Connect ();
-
-					PopulateAlbumOptionMenu (account.Picasa);
-
-					long qu = account.Picasa.QuotaUsed;
-					long ql = account.Picasa.QuotaLimit;
-
-					StringBuilder sb = new StringBuilder("<small>");
-					sb.Append(String.Format (Catalog.GetString ("Available space: {0}, {1}% used out of {2}"),
-								GLib.Format.SizeForDisplay(ql - qu),
-								(100 * qu / ql),
-								GLib.Format.SizeForDisplay (ql)));
-					sb.Append("</small>");
-					status_label.Text = sb.ToString();
-					status_label.UseMarkup = true;
-
-					album_button.Sensitive = true;
-				}
-			} catch (CaptchaException exc){
-				Log.Debug ("Your Google account is locked");
-				if (selected != null)
-					account = selected;
-
-				PopulateAlbumOptionMenu (account.Picasa);
-				album_button.Sensitive = false;
-
-				new GoogleAccountDialog (this.Dialog, account, false, exc);
-
-				Log.Warning ("Your Google account is locked, you can unlock it by visiting: {0}", CaptchaException.UnlockCaptchaURL);
-
-			} catch (System.Exception) {
-				Log.Warning ("Can not connect to Picasa. Bad username? password? network connection?");
-				if (selected != null)
-					account = selected;
-
-				PopulateAlbumOptionMenu (account.Picasa);
-
-				status_label.Text = String.Empty;
-				album_button.Sensitive = false;
-
-				new GoogleAccountDialog (this.Dialog, account, true, null);
-			}
-		}
-
-		private void HandleAccountSelected (object sender, System.EventArgs args)
-		{
-			Connect ();
-		}
-
-		public void HandleAlbumAdded (string title) {
-			GoogleAccount account = (GoogleAccount) accounts [gallery_optionmenu.History];
-			PopulateAlbumOptionMenu (account.Picasa);
-
-			// make the newly created album selected
-//			PicasaAlbumCollection albums = account.Picasa.GetAlbums();
-			for (int i=0; i < albums.Count; i++) {
-				if (((PicasaAlbum)albums[i]).Title == title) {
-					album_optionmenu.SetHistory((uint)i);
-				}
-			}
-		}
-
-		private void PopulateAlbumOptionMenu (PicasaWeb picasa)
-		{
-			if (picasa != null) {
-				try {
-					albums = picasa.GetAlbums();
-				} catch {
-					Log.Warning ("Picasa: can't get the albums");
-					albums = null;
-					picasa = null;
-				}
-			}
-
-			Gtk.Menu menu = new Gtk.Menu ();
-
-			bool disconnected = picasa == null || !account.Connected || albums == null;
-
-			if (disconnected || albums.Count == 0) {
-				string msg = disconnected ? Catalog.GetString ("(Not Connected)")
-					: Catalog.GetString ("(No Albums)");
-
-				Gtk.MenuItem item = new Gtk.MenuItem (msg);
-				menu.Append (item);
-
-				export_button.Sensitive = false;
-				album_optionmenu.Sensitive = false;
-				album_button.Sensitive = false;
-
-				if (disconnected)
-					album_button.Sensitive = false;
-			} else {
-				foreach (PicasaAlbum album in albums.AllValues) {
-					System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
-
-					label_builder.Append (album.Title);
-					label_builder.Append (" (" + album.PicturesCount + ")");
-
-					Gtk.MenuItem item = new Gtk.MenuItem (label_builder.ToString ());
-					((Gtk.Label)item.Child).UseUnderline = false;
-					menu.Append (item);
-				}
-
-				export_button.Sensitive = items.Length > 0;
-				album_optionmenu.Sensitive = true;
-				album_button.Sensitive = true;
-			}
-
-			menu.ShowAll ();
-			album_optionmenu.Menu = menu;
-		}
-
-		public void HandleAlbumOptionMenuChanged (object sender, System.EventArgs args)
-		{
-			if (albums == null || albums.Count == 0)
-				return;
-
-			PicasaAlbum a = albums [album_optionmenu.History];
-			export_button.Sensitive = a.PicturesRemaining >= items.Length;
-			if (album_status_label.Visible = !export_button.Sensitive) {
-				StringBuilder sb = new StringBuilder("<small>");
-				sb.Append(String.Format (Catalog.GetString ("The selected album has a limit of {0} pictures,\n" +
-								"which would be passed with the current selection of {1} images"),
-								a.PicturesCount + a.PicturesRemaining, items.Length));
-				sb.Append("</small>");
-				album_status_label.Text = String.Format (sb.ToString());
-				album_status_label.UseMarkup = true;
-			} else {
-				album_status_label.Text = String.Empty;
-			}
-		}
-
-		public void HandleAddGallery (object sender, System.EventArgs args)
-		{
-			new GoogleAccountDialog (this.Dialog);
-		}
-
-		public void HandleEditGallery (object sender, System.EventArgs args)
-		{
-			new GoogleAccountDialog (this.Dialog, account, false, null);
-		}
-
-		public void HandleAddAlbum (object sender, System.EventArgs args)
-		{
-			if (account == null)
-				throw new Exception (Catalog.GetString ("No account selected"));
-
-			new GoogleAddAlbum (this, account.Picasa);
-		}
-
-		void LoadPreference (string key)
-		{
-			switch (key) {
-			case SCALE_KEY:
-				if (scale_check.Active != Preferences.Get<bool> (key)) {
-					scale_check.Active = Preferences.Get<bool> (key);
-				}
-				break;
-
-			case SIZE_KEY:
-				size_spin.Value = (double) Preferences.Get<int> (key);
-				break;
-
-			case BROWSER_KEY:
-				if (browser_check.Active != Preferences.Get<bool> (key))
-					browser_check.Active = Preferences.Get<bool> (key);
-				break;
-
-			case TAG_KEY:
-				if (tag_check.Active != Preferences.Get<bool> (key))
-					tag_check.Active = Preferences.Get<bool> (key);
-				break;
-			}
-		}
-
-		private Gtk.Dialog Dialog {
-			get {
-				if (dialog == null)
-					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
-
-				return dialog;
-			}
-		}
-	}
-}
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.am b/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.am
deleted file mode 100644
index fd516d5..0000000
--- a/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.am
+++ /dev/null
@@ -1,31 +0,0 @@
-ASSEMBLY = Mono.Google
-TARGET = library
-LINK = $(REF_MONO_GOOGLE)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	AlbumAccess.cs \
-	Authentication.cs \
-	CaptchaException.cs \
-	CreateAlbumException.cs\
-	DeleteAlbumException.cs \
-	GDataApi.cs \
-	GoogleConnection.cs \
-	GoogleService.cs \
-	MultipartRequest.cs \
-	NoCheckCertificatePolicy.cs \
-	PicasaAlbum.cs \
-	PicasaAlbumCollection.cs \
-	PicasaPicture.cs \
-	PicasaPictureCollection.cs \
-	PicasaWeb.cs \
-	UploadPictureException.cs \
-	UploadProgressEventArgs.cs \
-	UploadProgressEventHandler.cs \
-	XmlUtil.cs
-
-RESOURCES =
-
-ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.in b/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.in
deleted file mode 100644
index 8ae4e52..0000000
--- a/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.in
+++ /dev/null
@@ -1,820 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/PicasaWebExport/google-sharp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = Mono.Google
-TARGET = library
-LINK = $(REF_MONO_GOOGLE) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	AlbumAccess.cs \
-	Authentication.cs \
-	CaptchaException.cs \
-	CreateAlbumException.cs\
-	DeleteAlbumException.cs \
-	GDataApi.cs \
-	GoogleConnection.cs \
-	GoogleService.cs \
-	MultipartRequest.cs \
-	NoCheckCertificatePolicy.cs \
-	PicasaAlbum.cs \
-	PicasaAlbumCollection.cs \
-	PicasaPicture.cs \
-	PicasaPictureCollection.cs \
-	PicasaWeb.cs \
-	UploadPictureException.cs \
-	UploadProgressEventArgs.cs \
-	UploadProgressEventHandler.cs \
-	XmlUtil.cs
-
-RESOURCES = 
-ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/PicasaWebExport/google-sharp/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/PicasaWebExport/google-sharp/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/PicasaPicture.cs b/extensions/Exporters/PicasaWebExport/google-sharp/PicasaPicture.cs
deleted file mode 100644
index a5e559a..0000000
--- a/extensions/Exporters/PicasaWebExport/google-sharp/PicasaPicture.cs
+++ /dev/null
@@ -1,204 +0,0 @@
-//
-// Mono.Google.Picasa.PicasaPicture.cs:
-//
-// Authors:
-//	Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//	Stephane Delcroix (stephane at delcroix.org)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-// (C) Copyright 2007 S. Delcroix
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.IO;
-using System.Net;
-using System.Text;
-using System.Xml;
-using System.Globalization;
-
-namespace Mono.Google.Picasa {
-	public class PicasaPicture {
-		GoogleConnection conn;
-		PicasaAlbum album;
-		string title;
-		string description;
-		DateTime pub_date;
-		string thumbnail_url;
-		string image_url;
-		int width;
-		int height;
-		int index;
-		string id;
-		string link;
-		string tags;
-
-		internal PicasaPicture (GoogleConnection conn, PicasaAlbum album, XmlNode nodeitem, XmlNamespaceManager nsmgr)
-		{
-			this.conn = conn;
-			this.album = album;
-			ParsePicture (nodeitem, nsmgr);
-		}
-
-		public PicasaPicture (GoogleConnection conn, string aid, string pid)
-		{
-			if (conn == null)
-				throw new ArgumentNullException ("conn");
-			if (conn.User == null)
-				throw new ArgumentException ("Need authentication before being used.", "conn");
-			this.conn = conn;
-
-			if (aid == null || aid == String.Empty)
-				throw new ArgumentNullException ("aid");
-			this.album = new PicasaAlbum (conn, aid);
-
-			if (pid == null || pid == String.Empty)
-				throw new ArgumentNullException ("pid");
-
-			string received = conn.DownloadString (GDataApi.GetPictureEntry (conn.User, aid, pid));
-			XmlDocument doc = new XmlDocument ();
-			doc.LoadXml (received);
-			XmlNamespaceManager nsmgr = new XmlNamespaceManager (doc.NameTable);
-			XmlUtil.AddDefaultNamespaces (nsmgr);
-			XmlNode entry = doc.SelectSingleNode ("atom:entry", nsmgr);
-			ParsePicture (entry, nsmgr);
-		}
-
-		private void ParsePicture (XmlNode nodeitem, XmlNamespaceManager nsmgr)
-		{
-			title = nodeitem.SelectSingleNode ("atom:title", nsmgr).InnerText;
-			foreach (XmlNode xlink in nodeitem.SelectNodes ("atom:link", nsmgr)) {
-				if (xlink.Attributes.GetNamedItem ("rel").Value == "alternate") {
-					link = xlink.Attributes.GetNamedItem ("href").Value;
-					break;
-				}
-			}
-			description = nodeitem.SelectSingleNode ("media:group/media:description", nsmgr).InnerText;
-			CultureInfo info = CultureInfo.InvariantCulture;
-			pub_date = DateTime.ParseExact (nodeitem.SelectSingleNode ("atom:published", nsmgr).InnerText, GDataApi.DateFormat, info);
-			thumbnail_url = nodeitem.SelectSingleNode ("media:group/media:thumbnail", nsmgr).Attributes.GetNamedItem ("url").Value;
-			image_url = nodeitem.SelectSingleNode ("media:group/media:content", nsmgr).Attributes.GetNamedItem ("url").Value;
-			width = (int) UInt32.Parse (nodeitem.SelectSingleNode ("gphoto:width", nsmgr).InnerText);
-			height = (int) UInt32.Parse (nodeitem.SelectSingleNode ("gphoto:height", nsmgr).InnerText);
-
-			XmlNode node = nodeitem.SelectSingleNode ("gphoto:index", nsmgr);
-			index = (node != null) ? (int) UInt32.Parse (node.InnerText) : -1;
-			node = nodeitem.SelectSingleNode ("gphoto:id", nsmgr);
-			id = (node != null) ? node.InnerText : "auto" + title.GetHashCode ().ToString ();
-			tags = nodeitem.SelectSingleNode ("media:group/media:keywords", nsmgr).InnerText;
-		}
-
-		static string GetXmlForTagging (string tag)
-		{
-			XmlUtil xml = new XmlUtil ();
-			xml.WriteElementString ("title", tag);
-			xml.WriteElementStringWithAttributes ("category", null,
-					"scheme", "http://schemas.google.com/g/2005#kind",
-					"term", "http://schemas.google.com/photos/2007#tag");
-			return xml.GetDocumentString ();
-
-		}
-
-		public void AddTag (string tag)
-		{
-			if (tag == null)
-				throw new ArgumentNullException ("title");
-
-			string op_string = GetXmlForTagging (tag);
-			byte [] op_bytes = Encoding.UTF8.GetBytes (op_string);
-			string url = GDataApi.GetPictureFeed (conn.User, album.UniqueID, UniqueID);
-			HttpWebRequest request = conn.AuthenticatedRequest (url);
-			request.ContentType = "application/atom+xml; charset=UTF-8";
-			request.Method = "POST";
-			Stream output_stream = request.GetRequestStream ();
-			output_stream.Write (op_bytes, 0, op_bytes.Length);
-			output_stream.Close ();
-
-			HttpWebResponse response = (HttpWebResponse) request.GetResponse ();
-			string received = "";
-			using (Stream stream = response.GetResponseStream ()) {
-				StreamReader sr = new StreamReader (stream, Encoding.UTF8);
-				received = sr.ReadToEnd ();
-			}
-			response.Close ();
-
-		}
-
-		public void DownloadToStream (Stream stream)
-		{
-			conn.DownloadToStream (image_url, stream);
-		}
-
-		public void DownloadThumbnailToStream (Stream stream)
-		{
-			conn.DownloadToStream (thumbnail_url, stream);
-		}
-
-		public PicasaAlbum Album {
-			get { return album; }
-		}
-
-		public string Title {
-			get { return title; }
-		}
-
-		public string Description {
-			get { return description; }
-		}
-
-		public DateTime Date {
-			get { return pub_date; }
-		}
-
-		public string ThumbnailURL {
-			get { return thumbnail_url; }
-		}
-
-		public string ImageURL {
-			get { return image_url; }
-		}
-
-		public int Width {
-			get { return width; }
-		}
-
-		public int Height {
-			get { return height; }
-		}
-
-		public int Index {
-			get { return index; }
-		}
-
-		public string UniqueID {
-			get { return id; }
-		}
-
-		public string Link {
-			get { return link; }
-		}
-
-		public string Tags {
-			get { return tags; }
-		}
-	}
-}
diff --git a/extensions/Exporters/SmugMugExport/Makefile.am b/extensions/Exporters/SmugMugExport/Makefile.am
deleted file mode 100644
index d0b4fea..0000000
--- a/extensions/Exporters/SmugMugExport/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-ASSEMBLY = FSpot.Exporters.SmugMugExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_SMUGMUGEXPORT)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = SmugMugExport.cs
-
-RESOURCES = \
-	SmugMugExport.addin.xml \
-	SmugMugExport.glade
-
-SUBDIRS = \
-	SmugMugNet
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/SmugMugExport/Makefile.in b/extensions/Exporters/SmugMugExport/Makefile.in
deleted file mode 100644
index b55cd66..0000000
--- a/extensions/Exporters/SmugMugExport/Makefile.in
+++ /dev/null
@@ -1,1006 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/SmugMugExport
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.SmugMugExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_SMUGMUGEXPORT) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = SmugMugExport.cs
-RESOURCES = \
-	SmugMugExport.addin.xml \
-	SmugMugExport.glade
-
-SUBDIRS = \
-	SmugMugNet
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/SmugMugExport/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/SmugMugExport/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(SCRIPTS)
-installdirs: installdirs-recursive
-installdirs-am:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-	install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive distclean distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-data-local install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-moduleSCRIPTS \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags tags-recursive uninstall uninstall-am \
-	uninstall-local uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/SmugMugExport/SmugMugExport.addin.xml b/extensions/Exporters/SmugMugExport/SmugMugExport.addin.xml
deleted file mode 100644
index 3b624d9..0000000
--- a/extensions/Exporters/SmugMugExport/SmugMugExport.addin.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<Addin namespace="FSpot"
-	version="0.7.0.0"
-	name="SmugMug Export"
-	description="This extension allows you to export your photos to SmugMug."
-	author="F-Spot team"
-	url="http://f-spot.org"
-	defaultEnabled="true"
-	category="Export">
-
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-
-	<Extension path = "/FSpot/Menus/Exports">
-		<ExportMenuItem id="SmugMug" _label = "_SmugMug..." class = "FSpotSmugMugExport.SmugMugExport" />
-	</Extension>
-</Addin>
diff --git a/extensions/Exporters/SmugMugExport/SmugMugExport.cs b/extensions/Exporters/SmugMugExport/SmugMugExport.cs
deleted file mode 100644
index 87c256b..0000000
--- a/extensions/Exporters/SmugMugExport/SmugMugExport.cs
+++ /dev/null
@@ -1,791 +0,0 @@
-/*
- * SmugMugExport.cs
- *
- * Authors:
- *   Thomas Van Machelen <thomas.vanmachelen at gmail.com>
- *
- * Based on PicasaWebExport code from Stephane Delcroix.
- *
- * Copyright (C) 2006 Thomas Van Machelen
- */
-
-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.Filters;
-using FSpot.Widgets;
-using Hyena;
-using FSpot.UI.Dialog;
-
-using Gnome.Keyring;
-using SmugMugNet;
-
-namespace FSpotSmugMugExport {
-	public class SmugMugAccount {
-		private string username;
-		private string password;
-		private SmugMugApi smugmug_proxy;
-
-		public SmugMugAccount (string username, string password)
-		{
-			this.username = username;
-			this.password = password;
-		}
-
-		public SmugMugApi Connect ()
-		{
-			Log.Debug ("SmugMug.Connect() " + username);
-			SmugMugApi proxy = new SmugMugApi (username, password);
-			ServicePointManager.CertificatePolicy = new NoCheckCertificatePolicy ();
-			proxy.Login ();
-
-			this.smugmug_proxy = proxy;
-			return proxy;
-		}
-
-		private void MarkChanged()
-		{
-			smugmug_proxy = null;
-		}
-
-		public bool Connected {
-			get {
-				return (smugmug_proxy != null && smugmug_proxy.Connected);
-			}
-		}
-
-		public string Username {
-			get {
-				return username;
-			}
-			set {
-				if (username != value) {
-					username = value;
-					MarkChanged ();
-				}
-			}
-		}
-
-		public string Password {
-			get {
-				return password;
-			}
-			set {
-				if (password != value) {
-					password = value;
-					MarkChanged ();
-				}
-			}
-		}
-
-		public SmugMugApi SmugMug {
-			get {
-				return smugmug_proxy;
-			}
-		}
-	}
-
-
-	public class SmugMugAccountManager
-	{
-		private static SmugMugAccountManager instance;
-		private const string keyring_item_name = "SmugMug Account";
-		ArrayList accounts;
-
-		public delegate void AccountListChangedHandler (SmugMugAccountManager manager, SmugMugAccount changed_account);
-		public event AccountListChangedHandler AccountListChanged;
-
-		public static SmugMugAccountManager GetInstance ()
-		{
-			if (instance == null) {
-				instance = new SmugMugAccountManager ();
-			}
-
-			return instance;
-		}
-
-		private SmugMugAccountManager ()
-		{
-			accounts = new ArrayList ();
-			ReadAccounts ();
-		}
-
-		public void MarkChanged ()
-		{
-			MarkChanged (true, null);
-		}
-
-		public void MarkChanged (bool write, SmugMugAccount changed_account)
-		{
-			if (write)
-				WriteAccounts ();
-
-			if (AccountListChanged != null)
-				AccountListChanged (this, changed_account);
-		}
-
-		public ArrayList GetAccounts ()
-		{
-			return accounts;
-		}
-
-		public void AddAccount (SmugMugAccount account)
-		{
-			AddAccount (account, true);
-		}
-
-		public void AddAccount (SmugMugAccount account, bool write)
-		{
-			accounts.Add (account);
-			MarkChanged (write, account);
-		}
-
-		public void RemoveAccount (SmugMugAccount account)
-		{
-			string keyring = Ring.GetDefaultKeyring();
-			Hashtable request_attributes = new Hashtable();
-			request_attributes["name"] = keyring_item_name;
-			request_attributes["username"] = account.Username;
-			try {
-				foreach(ItemData result in Ring.Find(ItemType.GenericSecret, request_attributes)) {
-					Ring.DeleteItem(keyring, result.ItemID);
-				}
-			} catch (Exception e) {
-				Log.Exception (e);
-			}
-			accounts.Remove (account);
-			MarkChanged ();
-		}
-
-		public void WriteAccounts ()
-		{
-			string keyring = Ring.GetDefaultKeyring();
-			foreach (SmugMugAccount account in accounts) {
-				Hashtable update_request_attributes = new Hashtable();
-				update_request_attributes["name"] = keyring_item_name;
-				update_request_attributes["username"] = account.Username;
-
-				Ring.CreateItem(keyring, ItemType.GenericSecret, keyring_item_name, update_request_attributes, account.Password, true);
-			}
-		}
-
-		private void ReadAccounts ()
-		{
-
-			Hashtable request_attributes = new Hashtable();
-			request_attributes["name"] = keyring_item_name;
-			try {
-				foreach(ItemData result in Ring.Find(ItemType.GenericSecret, request_attributes)) {
-					if(!result.Attributes.ContainsKey("name") || !result.Attributes.ContainsKey("username") ||
-						(result.Attributes["name"] as string) != keyring_item_name)
-						continue;
-
-					string username = (string)result.Attributes["username"];
-					string password = result.Secret;
-
-					if (username == null || username == String.Empty || password == null || password == String.Empty)
-						throw new ApplicationException ("Invalid username/password in keyring");
-
-					SmugMugAccount account = new SmugMugAccount(username, password);
-					if (account != null)
-						AddAccount (account, false);
-
-				}
-			} catch (Exception e) {
-				Log.Exception (e);
-			}
-
-			MarkChanged ();
-		}
-	}
-
-	public class SmugMugAccountDialog {
-		public SmugMugAccountDialog (Gtk.Window parent) : this (parent, null) {
-			Dialog.Response += HandleAddResponse;
-			add_button.Sensitive = false;
-		}
-
-		public SmugMugAccountDialog (Gtk.Window parent, SmugMugAccount account)
-		{
-			xml = new Glade.XML (null, "SmugMugExport.glade", dialog_name, "f-spot");
-			xml.Autoconnect (this);
-
-			Dialog.Modal = false;
-			Dialog.TransientFor = parent;
-			Dialog.DefaultResponse = Gtk.ResponseType.Ok;
-
-			this.account = account;
-
-			password_entry.ActivatesDefault = true;
-			username_entry.ActivatesDefault = true;
-
-			if (account != null) {
-				password_entry.Text = account.Password;
-				username_entry.Text = account.Username;
-				add_button.Label = Gtk.Stock.Ok;
-				Dialog.Response += HandleEditResponse;
-			}
-
-			if (remove_button != null)
-				remove_button.Visible = account != null;
-
-			this.Dialog.Show ();
-
-			password_entry.Changed += HandleChanged;
-			username_entry.Changed += HandleChanged;
-			HandleChanged (null, null);
-		}
-
-		private void HandleChanged (object sender, System.EventArgs args)
-		{
-			password = password_entry.Text;
-			username = username_entry.Text;
-
-			add_button.Sensitive = !(password == String.Empty || username == String.Empty);
-		}
-
-		[GLib.ConnectBefore]
-		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId == Gtk.ResponseType.Ok) {
-				SmugMugAccount account = new SmugMugAccount (username, password);
-				SmugMugAccountManager.GetInstance ().AddAccount (account);
-			}
-			Dialog.Destroy ();
-		}
-
-		protected void HandleEditResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId == Gtk.ResponseType.Ok) {
-				account.Username = username;
-				account.Password = password;
-				SmugMugAccountManager.GetInstance ().MarkChanged (true, account);
-			} else if (args.ResponseId == Gtk.ResponseType.Reject) {
-				// NOTE we are using Reject to signal the remove action.
-				SmugMugAccountManager.GetInstance ().RemoveAccount (account);
-			}
-			Dialog.Destroy ();
-		}
-
-		private Gtk.Dialog Dialog {
-			get {
-				if (dialog == null)
-					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
-
-				return dialog;
-			}
-		}
-
-		private SmugMugAccount account;
-		private string password;
-		private string username;
-		private string dialog_name = "smugmug_add_dialog";
-		private Glade.XML xml;
-
-		// widgets
-		[Glade.Widget] Gtk.Dialog dialog;
-		[Glade.Widget] Gtk.Entry password_entry;
-		[Glade.Widget] Gtk.Entry username_entry;
-
-		[Glade.Widget] Gtk.Button add_button;
-		[Glade.Widget] Gtk.Button remove_button;
-	}
-
-	public class SmugMugAddAlbum {
-		//[Glade.Widget] Gtk.OptionMenu album_optionmenu;
-
-		[Glade.Widget] Gtk.Dialog dialog;
-		[Glade.Widget] Gtk.Entry title_entry;
-		[Glade.Widget] Gtk.CheckButton public_check;
-		[Glade.Widget] Gtk.ComboBox category_combo;
-
-		[Glade.Widget] Gtk.Button add_button;
-
-		private string dialog_name = "smugmug_add_album_dialog";
-		private Glade.XML xml;
-		private SmugMugExport export;
-		private SmugMugApi smugmug;
-		private string title;
-		private ListStore category_store;
-
-		public SmugMugAddAlbum (SmugMugExport export, SmugMugApi smugmug)
-		{
-			xml = new Glade.XML (null, "SmugMugExport.glade", dialog_name, "f-spot");
-			xml.Autoconnect (this);
-
-			this.export = export;
-			this.smugmug = smugmug;
-
-			this.category_store = new ListStore (typeof(int), typeof(string));
-			CellRendererText display_cell = new CellRendererText();
-			category_combo.PackStart (display_cell, true);
-			category_combo.SetCellDataFunc (display_cell, new CellLayoutDataFunc (CategoryDataFunc));
-			this.category_combo.Model = category_store;
-			PopulateCategoryCombo ();
-
-			Dialog.Response += HandleAddResponse;
-
-			title_entry.Changed += HandleChanged;
-			HandleChanged (null, null);
-		}
-
-		private void HandleChanged (object sender, EventArgs args)
-		{
-			title = title_entry.Text;
-
-			if (title == String.Empty)
-				add_button.Sensitive = false;
-			else
-				add_button.Sensitive = true;
-		}
-
-		[GLib.ConnectBefore]
-		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId == Gtk.ResponseType.Ok) {
-				smugmug.CreateAlbum (title, CurrentCategoryId, public_check.Active);
-				export.HandleAlbumAdded (title);
-			}
-			Dialog.Destroy ();
-		}
-
-		void CategoryDataFunc (CellLayout layout, CellRenderer renderer, TreeModel model, TreeIter iter)
-		{
-			string name = (string)model.GetValue (iter, 1);
-			(renderer as CellRendererText).Text = name;
-		}
-
-		protected void PopulateCategoryCombo ()
-		{
-			SmugMugNet.Category[] categories = smugmug.GetCategories ();
-
-			foreach (SmugMugNet.Category category in categories) {
-				category_store.AppendValues (category.CategoryID, category.Title);
-			}
-
-			category_combo.Active = 0;
-
-			category_combo.ShowAll ();
-		}
-
-		protected int CurrentCategoryId
-		{
-			get {
-				TreeIter current;
-				category_combo.GetActiveIter (out current);
-				return (int)category_combo.Model.GetValue (current, 0);
-			}
-		}
-
-		private Gtk.Dialog Dialog {
-			get {
-				if (dialog == null)
-					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
-
-				return dialog;
-			}
-		}
-	}
-
-
-	public class SmugMugExport : FSpot.Extensions.IExporter {
-		public SmugMugExport ()
-		{
-		}
-		public void Run (IBrowsableCollection selection)
-		{
-			xml = new Glade.XML (null, "SmugMugExport.glade", dialog_name, "f-spot");
-			xml.Autoconnect (this);
-
-			this.items = selection.Items;
-			album_button.Sensitive = false;
-			FSpot.Widgets.IconView view = new FSpot.Widgets.IconView (selection);
-			view.DisplayDates = false;
-			view.DisplayTags = false;
-
-			Dialog.Modal = false;
-			Dialog.TransientFor = null;
-			Dialog.Close += HandleCloseEvent;
-
-			thumb_scrolledwindow.Add (view);
-			view.Show ();
-			Dialog.Show ();
-
-			SmugMugAccountManager manager = SmugMugAccountManager.GetInstance ();
-			manager.AccountListChanged += PopulateSmugMugOptionMenu;
-			PopulateSmugMugOptionMenu (manager, null);
-
-			if (edit_button != null)
-				edit_button.Clicked += HandleEditGallery;
-
-			rh = new Gtk.ResponseHandler (HandleResponse);
-			Dialog.Response += HandleResponse;
-			connect = true;
-			HandleSizeActive (null, null);
-			Connect ();
-
-			LoadPreference (SCALE_KEY);
-			LoadPreference (SIZE_KEY);
-			LoadPreference (BROWSER_KEY);
-		}
-
-		Gtk.ResponseHandler rh;
-
-		private bool scale;
-		private int size;
-		private bool browser;
-//		private bool meta;
-		private bool connect = false;
-
-		private long approx_size = 0;
-		private long sent_bytes = 0;
-
-		IBrowsableItem [] items;
-		int photo_index;
-		ThreadProgressDialog progress_dialog;
-
-		ArrayList accounts;
-		private SmugMugAccount account;
-		private Album album;
-
-		private string dialog_name = "smugmug_export_dialog";
-		private Glade.XML xml;
-
-		// Dialogs
-		private SmugMugAccountDialog gallery_add;
-		private SmugMugAddAlbum album_add;
-
-		// Widgets
-		[Glade.Widget] Gtk.Dialog dialog;
-		[Glade.Widget] Gtk.OptionMenu gallery_optionmenu;
-		[Glade.Widget] Gtk.OptionMenu album_optionmenu;
-
-		[Glade.Widget] Gtk.CheckButton browser_check;
-		[Glade.Widget] Gtk.CheckButton scale_check;
-
-		[Glade.Widget] Gtk.SpinButton size_spin;
-
-		[Glade.Widget] Gtk.Button album_button;
-		[Glade.Widget] Gtk.Button edit_button;
-
-		[Glade.Widget] Gtk.Button export_button;
-
-		[Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
-
-		System.Threading.Thread command_thread;
-
-		public const string EXPORT_SERVICE = "smugmug/";
-		public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
-		public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
-		public const string BROWSER_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
-
-		private void HandleResponse (object sender, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId != Gtk.ResponseType.Ok) {
-				Dialog.Destroy ();
-				return;
-			}
-
-			if (scale_check != null) {
-				scale = scale_check.Active;
-				size = size_spin.ValueAsInt;
-			} else
-				scale = false;
-
-			browser = browser_check.Active;
-//			meta = meta_check.Active;
-
-			if (account != null) {
-				//System.Console.WriteLine ("history = {0}", album_optionmenu.History);
-				album = (Album) account.SmugMug.GetAlbums() [Math.Max (0, album_optionmenu.History)];
-				photo_index = 0;
-
-				Dialog.Destroy ();
-
-				command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (this.Upload));
-				command_thread.Name = Mono.Unix.Catalog.GetString ("Uploading Pictures");
-
-				progress_dialog = new ThreadProgressDialog (command_thread, items.Length);
-				progress_dialog.Start ();
-
-				// Save these settings for next time
-				Preferences.Set (SCALE_KEY, scale);
-				Preferences.Set (SIZE_KEY, size);
-				Preferences.Set (BROWSER_KEY, browser);
-			}
-		}
-
-		public void HandleSizeActive (object sender, EventArgs args)
-		{
-			size_spin.Sensitive = scale_check.Active;
-		}
-
-		private void Upload ()
-		{
-			sent_bytes = 0;
-			approx_size = 0;
-
-			System.Uri album_uri = null;
-
-			Log.Debug ("Starting Upload to Smugmug, album " + album.Title + " - " + album.AlbumID);
-
-			FilterSet filters = new FilterSet ();
-			filters.Add (new JpegFilter ());
-
-			if (scale)
-				filters.Add (new ResizeFilter ((uint)size));
-
-			while (photo_index < items.Length) {
-				try {
-					IBrowsableItem item = items[photo_index];
-
-					FileInfo file_info;
-					Log.Debug ("uploading " + photo_index);
-
-					progress_dialog.Message = String.Format (Catalog.GetString ("Uploading picture \"{0}\" ({1} of {2})"),
-										 item.Name, photo_index+1, items.Length);
-					progress_dialog.ProgressText = string.Empty;
-					progress_dialog.Fraction = ((photo_index) / (double) items.Length);
-					photo_index++;
-
-					FilterRequest request = new FilterRequest (item.DefaultVersion.Uri);
-
-					filters.Convert (request);
-
-					file_info = new FileInfo (request.Current.LocalPath);
-
-					if (approx_size == 0) //first image
-						approx_size = file_info.Length * items.Length;
-					else
-						approx_size = sent_bytes * items.Length / (photo_index - 1);
-
-					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 ());
-
-					sent_bytes += file_info.Length;
-
-					if (album_uri == null)
-						album_uri = account.SmugMug.GetAlbumUrl (image_id);
-				} catch (System.Exception e) {
-					progress_dialog.Message = String.Format (Mono.Unix.Catalog.GetString ("Error Uploading To Gallery: {0}"),
-										 e.Message);
-					progress_dialog.ProgressText = Mono.Unix.Catalog.GetString ("Error");
-					Log.DebugException (e);
-
-					if (progress_dialog.PerformRetrySkip ()) {
-						photo_index--;
-						if (photo_index == 0)
-							approx_size = 0;
-					}
-				}
-			}
-
-			progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
-			progress_dialog.Fraction = 1.0;
-			progress_dialog.ProgressText = Mono.Unix.Catalog.GetString ("Upload Complete");
-			progress_dialog.ButtonLabel = Gtk.Stock.Ok;
-
-			if (browser && album_uri != null) {
-				GtkBeans.Global.ShowUri (Dialog.Screen, album_uri.ToString ());
-			}
-		}
-
-		private void PopulateSmugMugOptionMenu (SmugMugAccountManager manager, SmugMugAccount changed_account)
-		{
-			Gtk.Menu menu = new Gtk.Menu ();
-			this.account = changed_account;
-			int pos = -1;
-
-			accounts = manager.GetAccounts ();
-			if (accounts == null || accounts.Count == 0) {
-				Gtk.MenuItem item = new Gtk.MenuItem (Mono.Unix.Catalog.GetString ("(No Gallery)"));
-				menu.Append (item);
-				gallery_optionmenu.Sensitive = false;
-				edit_button.Sensitive = false;
-			} else {
-				int i = 0;
-				foreach (SmugMugAccount account in accounts) {
-					if (account == changed_account)
-						pos = i;
-
-					Gtk.MenuItem item = new Gtk.MenuItem (account.Username);
-					menu.Append (item);
-					i++;
-				}
-				gallery_optionmenu.Sensitive = true;
-				edit_button.Sensitive = true;
-			}
-
-			menu.ShowAll ();
-			gallery_optionmenu.Menu = menu;
-			gallery_optionmenu.SetHistory ((uint)pos);
-		}
-
-		private void Connect ()
-		{
-			Connect (null);
-		}
-
-		private void Connect (SmugMugAccount selected)
-		{
-			Connect (selected, null);
-		}
-
-		private void Connect (SmugMugAccount selected, string text)
-		{
-			try {
-				if (accounts.Count != 0 && connect) {
-					if (selected == null)
-						account = (SmugMugAccount) accounts [gallery_optionmenu.History];
-					else
-						account = selected;
-
-					if (!account.Connected)
-						account.Connect ();
-
-					PopulateAlbumOptionMenu (account.SmugMug);
-				}
-			} catch (System.Exception) {
-				Log.Warning ("Can not connect to SmugMug. Bad username? Password? Network connection?");
-				//System.Console.WriteLine ("{0}",ex);
-				if (selected != null)
-					account = selected;
-
-				PopulateAlbumOptionMenu (account.SmugMug);
-
-				album_button.Sensitive = false;
-
-				new SmugMugAccountDialog (this.Dialog, account);
-			}
-		}
-
-		private void HandleAccountSelected (object sender, System.EventArgs args)
-		{
-			Connect ();
-		}
-
-		public void HandleAlbumAdded (string title) {
-			SmugMugAccount account = (SmugMugAccount) accounts [gallery_optionmenu.History];
-			PopulateAlbumOptionMenu (account.SmugMug);
-
-			// make the newly created album selected
-			Album[] albums = account.SmugMug.GetAlbums();
-			for (int i=0; i < albums.Length; i++) {
-				if (((Album)albums[i]).Title == title) {
-					album_optionmenu.SetHistory((uint)i);
-				}
-			}
-		}
-
-		private void PopulateAlbumOptionMenu (SmugMugApi smugmug)
-		{
-			Album[] albums = null;
-			if (smugmug != null) {
-				try {
-					albums = smugmug.GetAlbums();
-				} catch (Exception) {
-					Log.Debug ("Can't get the albums");
-					smugmug = null;
-				}
-			}
-
-			Gtk.Menu menu = new Gtk.Menu ();
-
-			bool disconnected = smugmug == null || !account.Connected || albums == null;
-
-			if (disconnected || albums.Length == 0) {
-				string msg = disconnected ? Mono.Unix.Catalog.GetString ("(Not Connected)")
-					: Mono.Unix.Catalog.GetString ("(No Albums)");
-
-				Gtk.MenuItem item = new Gtk.MenuItem (msg);
-				menu.Append (item);
-
-				export_button.Sensitive = false;
-				album_optionmenu.Sensitive = false;
-				album_button.Sensitive = false;
-			} else {
-				foreach (Album album in albums) {
-					System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
-
-					label_builder.Append (album.Title);
-
-					Gtk.MenuItem item = new Gtk.MenuItem (label_builder.ToString ());
-					((Gtk.Label)item.Child).UseUnderline = false;
-					menu.Append (item);
-				}
-
-				export_button.Sensitive = items.Length > 0;
-				album_optionmenu.Sensitive = true;
-				album_button.Sensitive = true;
-			}
-
-			menu.ShowAll ();
-			album_optionmenu.Menu = menu;
-		}
-
-		public void HandleAddGallery (object sender, System.EventArgs args)
-		{
-			gallery_add = new SmugMugAccountDialog (this.Dialog);
-		}
-
-		public void HandleEditGallery (object sender, System.EventArgs args)
-		{
-			gallery_add = new SmugMugAccountDialog (this.Dialog, account);
-		}
-
-		public void HandleAddAlbum (object sender, System.EventArgs args)
-		{
-			if (account == null)
-				throw new Exception (Catalog.GetString ("No account selected"));
-
-			album_add = new SmugMugAddAlbum (this, account.SmugMug);
-		}
-
-		void LoadPreference (string key)
-		{
-			switch (key) {
-			case SCALE_KEY:
-				if (scale_check.Active != Preferences.Get<bool> (key)) {
-					scale_check.Active = Preferences.Get<bool> (key);
-				}
-				break;
-
-			case SIZE_KEY:
-				size_spin.Value = (double) Preferences.Get<int> (key);
-				break;
-
-			case BROWSER_KEY:
-				if (browser_check.Active != Preferences.Get<bool> (key))
-					browser_check.Active = Preferences.Get<bool> (key);
-				break;
-			}
-		}
-
-		protected void HandleCloseEvent (object sender, System.EventArgs args)
-		{
-			account.SmugMug.Logout ();
-		}
-
-		private Gtk.Dialog Dialog {
-			get {
-				if (dialog == null)
-					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
-
-				return dialog;
-			}
-		}
-	}
-}
diff --git a/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.am b/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.am
deleted file mode 100644
index dd9899a..0000000
--- a/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-ASSEMBLY = SmugMugNet
-TARGET = library
-LINK = $(REF_SMUGMUGNET)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	SmugMugApi.cs \
-	NoCheckCertificatePolicy.cs
-
-RESOURCES =
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.in b/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.in
deleted file mode 100644
index 735b198..0000000
--- a/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.in
+++ /dev/null
@@ -1,802 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/SmugMugExport/SmugMugNet
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = SmugMugNet
-TARGET = library
-LINK = $(REF_SMUGMUGNET) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	SmugMugApi.cs \
-	NoCheckCertificatePolicy.cs
-
-RESOURCES = 
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/SmugMugExport/SmugMugNet/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/SmugMugExport/SmugMugNet/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/SmugMugExport/SmugMugNet/SmugMugApi.cs b/extensions/Exporters/SmugMugExport/SmugMugNet/SmugMugApi.cs
deleted file mode 100644
index 8947282..0000000
--- a/extensions/Exporters/SmugMugExport/SmugMugNet/SmugMugApi.cs
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- * SmugMugApi.cs
- *
- * Authors:
- *   Thomas Van Machelen <thomas.vanmachelen at gmail.com>
- *
- * Copyright (C) 2006 Thomas Van Machelen
- * This is free software. See COPYING for details.
- *
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Net;
-using System.IO;
-using System.Text.RegularExpressions;
-using System.Xml;
-using System.Collections.Specialized;
-using FSpot.Utils;
-using Hyena;
-
-namespace SmugMugNet
-{
-	public struct Credentials
-	{
-		public string session_id;
-		public int user_id;
-		public string password_hash;
-
-		public string SessionID {
-			get { return session_id; }
-			set { session_id = value; }
-		}
-
-		public int UserID {
-			get { return user_id; }
-		}
-
-		public string PasswordHash {
-			get { return password_hash; }
-		}
-
-		public Credentials(string session_id, int user_id, string password_hash)
-		{
-			this.session_id = session_id;
-			this.user_id = user_id;
-			this.password_hash = password_hash;
-		}
-	}
-
-	public struct Category
-	{
-		public Category( string title, int id)
-		{
-			this.title = title;
-			this.category_id = id;
-		}
-
-		private int category_id;
-		public int CategoryID
-		{
-			get { return category_id; }
-			set { category_id = value; }
-		}
-
-		private string title;
-		public string Title
-		{
-			get { return title; }
-			set { title = value; }
-		}
-	}
-
-	public struct Album
-	{
-		public Album(string title, int id)
-		{
-			this.album_id = id;
-			this.title = title;
-		}
-
-		private int album_id;
-		public int AlbumID
-		{
-			get { return album_id; }
-			set { album_id = value; }
-		}
-
-		private string title;
-		public string Title
-		{
-			get { return title; }
-			set { title = value; }
-		}
-	}
-
-	public class SmugMugApi
-	{
-		private string username = String.Empty;
-		private string password = String.Empty;
-		private bool connected = false;
-
-		private Credentials credentials;
-		private const string VERSION = "1.1.1";
-		private Category[] categories;
-
-		public bool Connected
-		{
-			get { return connected; }
-		}
-
-		public SmugMugApi (string email_address, string password)
-		{
-			this.username = email_address;
-			this.password = password;
-		}
-
-		public bool Login ()
-		{
-			if (this.username.Length == 0 | this.password.Length == 0)
-			{
-				throw new SmugMugException("There is no username or password.");
-			}
-
-			if (this.connected == false && this.credentials.UserID == 0)
-			{
-				try
-				{
-					this.credentials = SmugMugProxy.LoginWithPassword (this.username, this.password);
-					this.connected = true;
-				}
-				catch
-				{
-					return false;
-				}
-			}
-			else
-			{
-				LoginWithHash ();
-			}
-
-			return true;
-		}
-
-		private void LoginWithHash ()
-		{
-			try {
-				string session_id = SmugMugProxy.LoginWithHash (this.credentials.UserID, this.credentials.PasswordHash);
-
-				if (session_id != null && session_id.Length > 0)
-				{
-					this.credentials.SessionID = session_id;
-				}
-				else
-				{
-					throw new SmugMugException ("SessionID was empty");
-				}
-			}
-			catch (Exception ex) {
-				throw new SmugMugException ("A login error occured, SessionID may be invalid.", ex.InnerException);
-			}
-		}
-
-		public void Logout ()
-		{
-			if (!connected)
-				return;
-
-			if (this.credentials.SessionID == null && this.credentials.SessionID.Length == 0)
-				return;
-
-			SmugMugProxy.Logout (this.credentials.SessionID);
-			connected = false;
-			this.credentials = new Credentials (null, 0, null);
-		}
-
-		public Category[] GetCategories ()
-		{
-			if (this.categories == null)
-			{
-				try {
-					this.categories = SmugMugProxy.GetCategories (credentials.SessionID);
-				}
-				catch (Exception ex) {
-					throw new SmugMugException ("Could not retrieve Categories", ex.InnerException);
-				}
-			}
-			return this.categories;
-		}
-
-		public Album CreateAlbum (string title, int category_id, bool is_public)
-		{
-			try {
-				return SmugMugProxy.CreateAlbum (title, category_id, credentials.SessionID, is_public);
-			}
-			catch (Exception ex) {
-				throw new SmugMugException ("Could not create album", ex.InnerException);
-			}
-		}
-
-		public Album[] GetAlbums ()
-		{
-			try {
-				return SmugMugProxy.GetAlbums(credentials.SessionID);
-			}
-			catch (Exception ex) {
-				throw new SmugMugException ("Could not get albums", ex.InnerException);
-			}
-		}
-
-		public Uri GetAlbumUrl (int image_id)
-		{
-			try {
-				return SmugMugProxy.GetAlbumUrl (image_id, credentials.SessionID);
-			}
-			catch (Exception ex) {
-				throw new SmugMugException ("Could not get album url", ex.InnerException);
-			}
-		}
-
-		public int Upload (string path, int album_id)
-		{
-			try {
-				return SmugMugProxy.Upload (path, album_id, credentials.SessionID);
-			}
-			catch (Exception ex) {
-				throw new SmugMugException ("Could not upload file", ex.InnerException);
-			}
-		}
-	}
-
-	public class SmugMugProxy
-	{
-		// FIXME: this getting should be done over https
-		private const string GET_URL = "https://api.SmugMug.com/hack/rest/";
-		private const string POST_URL = "https://upload.SmugMug.com/hack/rest/";
-		// key from massis
-		private const string APIKEY = "umtr0zB2wzwTZDhF2BySidg0hY0le3K6";
-		private const string VERSION = "1.1.1";
-
-		// rest methods
-		private const string LOGIN_WITHPASS_METHOD = "smugmug.login.withPassword";
-		private const string LOGIN_WITHHASH_METHOD = "smugmug.login.withHash";
-		private const string LOGOUT_METHOD = "smugmug.logout";
-		private const string ALBUMS_CREATE_METHOD = "smugmug.albums.create";
-		private const string ALBUMS_GET_URLS_METHOD = "smugmug.images.getURLs";
-		private const string ALBUMS_GET_METHOD = "smugmug.albums.get";
-		private const string CATEGORIES_GET_METHOD = "smugmug.categories.get";
-
-		// parameter constants
-		private const string EMAIL = "EmailAddress";
-		private const string PASSWORD = "Password";
-		private const string USER_ID = "UserID";
-		private const string PASSWORD_HASH = "PasswordHash";
-		private const string SESSION_ID = "SessionID";
-		private const string CATEGORY_ID = "CategoryID";
-		private const string IMAGE_ID = "ImageID";
-		private const string TITLE = "Title";
-		private const string ID = "id";
-
-		public static Credentials LoginWithPassword (string username, string password)
-		{
-			string url = FormatGetUrl (LOGIN_WITHPASS_METHOD, new SmugMugParam (EMAIL, username), new SmugMugParam (PASSWORD, password));
-			XmlDocument doc = GetResponseXml (url);
-
-			string sessionId = doc.SelectSingleNode ("/rsp/Login/SessionID").InnerText;
-			int userId = int.Parse (doc.SelectSingleNode ("/rsp/Login/UserID").InnerText);
-			string passwordHash = doc.SelectSingleNode ("/rsp/Login/PasswordHash").InnerText;
-
-			return new Credentials (sessionId, userId, passwordHash);
-		}
-
-		public static string LoginWithHash (int user_id, string password_hash)
-		{
-			string url = FormatGetUrl (LOGIN_WITHHASH_METHOD, new SmugMugParam (USER_ID, user_id), new SmugMugParam (PASSWORD_HASH, password_hash));
-			XmlDocument doc = GetResponseXml(url);
-
-			return doc.SelectSingleNode ("/rsp/Login/SessionID").InnerText;
-		}
-
-		public static void Logout (string session_id)
-		{
-			string url = FormatGetUrl (LOGOUT_METHOD, new SmugMugParam (SESSION_ID, session_id));
-			GetResponseXml (url);
-		}
-
-		public static Album[] GetAlbums (string session_id)
-		{
-			string url = FormatGetUrl (ALBUMS_GET_METHOD, new SmugMugParam(SESSION_ID, session_id));
-			XmlDocument doc = GetResponseXml (url);
-			XmlNodeList albumNodes = doc.SelectNodes ("/rsp/Albums/Album");
-
-			Album[] albums = new Album[albumNodes.Count];
-
-			for (int i = 0; i < albumNodes.Count; i++)
-			{
-				XmlNode current = albumNodes[i];
-				albums[i] = new Album (current.SelectSingleNode (TITLE).InnerText, int.Parse (current.Attributes[ID].Value));
-			}
-			return albums;
-		}
-
-		public static Uri GetAlbumUrl (int image_id, string session_id)
-		{
-			string url = FormatGetUrl(ALBUMS_GET_URLS_METHOD, new SmugMugParam(IMAGE_ID, image_id), new SmugMugParam(SESSION_ID, session_id));
-			XmlDocument doc = GetResponseXml(url);
-
-			string album_url = doc.SelectSingleNode("/rsp/ImageURLs/Image/AlbumURL").InnerText;
-
-			return new Uri(album_url);
-		}
-
-		public static Category[] GetCategories (string session_id)
-		{
-			string url = FormatGetUrl(CATEGORIES_GET_METHOD, new SmugMugParam (SESSION_ID, session_id));
-			XmlDocument doc = GetResponseXml (url);
-
-			XmlNodeList categoryNodes = doc.SelectNodes ("/rsp/Categories/Category");
-			Category[] categories = new Category[categoryNodes.Count];
-
-			for (int i = 0; i < categoryNodes.Count; i++)
-			{
-				XmlNode current = categoryNodes[i];
-				categories[i] = new Category (current.SelectSingleNode (TITLE).InnerText, int.Parse (current.Attributes[ID].Value));
-			}
-			return categories;
-		}
-
-		public static Album CreateAlbum (string title, int category_id, string session_id)
-		{
-			return CreateAlbum (title, category_id, session_id, true);
-		}
-
-		public static Album CreateAlbum (string title, int category_id, string session_id, bool is_public)
-		{
-			int public_int = is_public ? 1 : 0;
-			string url = FormatGetUrl (ALBUMS_CREATE_METHOD, new SmugMugParam (TITLE, title), new SmugMugParam (CATEGORY_ID, category_id), new SmugMugParam (SESSION_ID, session_id), new SmugMugParam ("Public", public_int));
-			XmlDocument doc = GetResponseXml (url);
-
-			int id = int.Parse(doc.SelectSingleNode("/rsp/Create/Album").Attributes[ID].Value);
-
-			return new Album(title, id);
-		}
-
-		public static int Upload (string path, int album_id, string session_id)
-		{
-			FileInfo file = new FileInfo(path);
-
-			if (!file.Exists)
-				throw new ArgumentException("Image does not exist: " + file.FullName);
-
-			try
-			{
-				WebClient client = new WebClient ();
-				client.BaseAddress = "http://upload.smugmug.com";
-				client.Headers.Add ("Cookie:SMSESS=" + session_id);
-
-				NameValueCollection queryStringCollection = new NameValueCollection ();
-				queryStringCollection.Add ("AlbumID", album_id.ToString());
-				// Temporarily disabled because rest doesn't seem to return the ImageID anymore
-				// queryStringCollection.Add ("ResponseType", "REST");
-				// luckily JSON still holds it
-				queryStringCollection.Add ("ResponseType", "JSON");
-				client.QueryString = queryStringCollection;
-
-				byte[] responseArray = client.UploadFile ("http://upload.smugmug.com/photos/xmladd.mg", "POST", file.FullName);
-				string response = Encoding.ASCII.GetString (responseArray);
-
-				// JSon approach
-				Regex id_regex = new Regex ("\\\"id\\\":( )?(?<image_id>\\d+),");
-				Match m  = id_regex.Match (response);
-
-				int id = -1;
-
-				if (m.Success)
-					id = int.Parse (m.Groups["image_id"].Value);
-
-				return id;
-
-				// REST approach, disabled for now
-				//XmlDocument doc = new XmlDocument ();
-				//doc.LoadXml (response);
-				// return int.Parse (doc.SelectSingleNode ("/rsp/ImageID").InnerText);
-
-			}
-			catch (Exception ex)
-			{
-				throw new SmugMugUploadException ("Error uploading image: " + file.FullName, ex.InnerException);
-			}
-		}
-
-		private static string FormatGetUrl(string method_name, params SmugMugParam[] parameters)
-		{
-			StringBuilder builder = new StringBuilder (string.Format ("{0}{1}/?method={2}", GET_URL, VERSION, method_name));
-
-			foreach (SmugMugParam param in parameters)
-				builder.Append (param.ToString ());
-
-			builder.Append (new SmugMugParam ("APIKey", APIKEY));
-			return builder.ToString();
-		}
-
-		private static XmlDocument GetResponseXml (string url)
-		{
-			HttpWebRequest request = HttpWebRequest.Create (url) as HttpWebRequest;
-			request.Credentials = CredentialCache.DefaultCredentials;
-			WebResponse response = request.GetResponse ();
-
-			XmlDocument doc = new XmlDocument ();
-			doc.LoadXml (new StreamReader (response.GetResponseStream ()).ReadToEnd ());
-			CheckResponseXml (doc);
-
-			response.Close ();
-			return doc;
-		}
-
-		private static void CheckResponseXml (XmlDocument doc)
-		{
-			if (doc.SelectSingleNode("/rsp").Attributes["stat"].Value == "ok")
-				return;
-
-			string message = doc.SelectSingleNode ("/rsp/err").Attributes["msg"].Value;
-			throw new SmugMugException (message);
-		}
-
-		private class SmugMugParam
-		{
-			string name;
-			object value;
-
-			public SmugMugParam (string name, object value)
-			{
-				this.name = name;
-				this.value = (value is String ? System.Web.HttpUtility.UrlEncode ((string)value) : value);
-			}
-
-			public string Name
-			{
-				get {return name;}
-			}
-
-			public object Value
-			{
-				get {return value;}
-			}
-
-			public override string ToString()
-			{
-				return string.Format("&{0}={1}", Name, Value);
-			}
-		}
-	}
-
-	public class SmugMugException : ApplicationException
-	{
-		public SmugMugException(string message) : base (message)
-		{
-			Log.Debug (message);
-		}
-
-		public SmugMugException (string message, Exception innerException) : base (message, innerException)
-		{
-			Log.Debug (message, innerException.ToString());
-		}
-	}
-
-	public sealed class SmugMugUploadException : ApplicationException
-	{
-		public SmugMugUploadException (string message, Exception innerException) : base (message, innerException)
-		{
-			Log.Debug (message, innerException.ToString ());
-		}
-	}
-}
diff --git a/extensions/Exporters/TabbloExport/ApplicationCentricCertificatePolicy.cs b/extensions/Exporters/TabbloExport/ApplicationCentricCertificatePolicy.cs
deleted file mode 100644
index ef100d7..0000000
--- a/extensions/Exporters/TabbloExport/ApplicationCentricCertificatePolicy.cs
+++ /dev/null
@@ -1,167 +0,0 @@
-//
-// FSpotTabbloExport.ApplicationCentricCertificatePolicy
-//
-// Authors:
-//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
-//
-// (C) Copyright 2009 Wojciech Dzierzanowski
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Net;
-using System.Runtime.Serialization;
-using System.Runtime.Serialization.Formatters.Binary;
-using System.Security.Cryptography.X509Certificates;
-
-using Hyena;
-
-namespace FSpotTabbloExport {
-
-	class ApplicationCentricCertificatePolicy : ICertificatePolicy {
-
-		protected enum Decision {
-			DontTrust,
-			TrustOnce,
-			TrustAlways
-		};
-
-		private Dictionary<string, int> cert_hashes;
-
-		private static readonly IsolatedStorageFile isolated_store =
-				IsolatedStorageFile.GetUserStoreForAssembly ();
-
-		private const string StoreName = "cert_hashes";
-
-
-		public bool CheckValidationResult (ServicePoint service_point,
-		                                   X509Certificate certificate,
-		                                   WebRequest request,
-						   int problem)
-		{
-			Log.DebugFormat ("Checking validation result for {0}: "
-					+ "problem={1}",
-					request.RequestUri, problem);
-
-			if (0 == problem) {
-				return true;
-			}
-
-			// Only try to deal with the problem if it is a trust
-			// failure.
-			if (-2146762486 != problem) {
-				return false;
-			}
-
-			LoadCertificates ();
-
-			string hash = certificate.GetCertHashString ();
-			Log.Debug ("Certificate hash: " + hash);
-
-			int stored_problem = 0;
-			if (cert_hashes.TryGetValue (hash, out stored_problem)
-					&& problem == stored_problem) {
-				Log.Debug ("We already trust this site");
-				return true;
-			}
-
-			Decision decision = GetDecision (certificate, request);
-			Log.Debug ("Decision: " + decision);
-
-			switch (decision) {
-			case Decision.DontTrust:
-				return false;
-			case Decision.TrustOnce:
-				return true;
-			case Decision.TrustAlways:
-				SaveCertificate (hash, problem);
-				return true;
-			default:
-				Debug.Assert (false, "Unknown decision");
-				return false;
-			}
-		}
-
-
-		protected virtual Decision GetDecision (
-				X509Certificate certificate,
-				WebRequest request)
-		{
-			Decision decision = Decision.DontTrust;
-			Log.Debug ("Making the default decision: " + decision);
-			return decision;
-		}
-
-
-		private void LoadCertificates ()
-		{
-			using (IsolatedStorageFileStream isol_stream =
-					new IsolatedStorageFileStream (
-							StoreName,
-							FileMode.OpenOrCreate,
-							FileAccess.Read,
-			                                isolated_store)) {
-				try {
-					BinaryFormatter formatter =
-							new BinaryFormatter ();
-					cert_hashes = (Dictionary<string, int>)
-							formatter.Deserialize (
-								isol_stream);
-				} catch (SerializationException e) {
-					// FIXME: handle
-					Log.Exception (e);
-				}
-			}
-
-			if (null == cert_hashes) {
-				cert_hashes = new Dictionary<string,int> ();
-			}
-		}
-
-
-		private void SaveCertificate (string hash, int problem)
-		{
-			cert_hashes.Add (hash, problem);
-
-			using (IsolatedStorageFileStream isolated_stream =
-					new IsolatedStorageFileStream (
-							StoreName,
-							FileMode.OpenOrCreate,
-							FileAccess.Write,
-			                                isolated_store)) {
-				try {
-					BinaryFormatter formatter =
-							new BinaryFormatter ();
-					formatter.Serialize (isolated_stream,
-							cert_hashes);
-				} catch (SerializationException e) {
-					// FIXME: handle
-					Log.Exception (e);
-				}
-			}
-		}
-	}
-}
diff --git a/extensions/Exporters/TabbloExport/BlindTrustCertificatePolicy.cs b/extensions/Exporters/TabbloExport/BlindTrustCertificatePolicy.cs
deleted file mode 100644
index 3046d15..0000000
--- a/extensions/Exporters/TabbloExport/BlindTrustCertificatePolicy.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// FSpotTabbloExport.BlindTrustCertificatePolicy
-//
-// Authors:
-//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
-//
-// (C) Copyright 2009 Wojciech Dzierzanowski
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Net;
-using System.Security.Cryptography.X509Certificates;
-
-using Hyena;
-
-namespace FSpotTabbloExport {
-	class BlindTrustCertificatePolicy : ICertificatePolicy {
-		public bool CheckValidationResult (ServicePoint service_point,
-		                                   X509Certificate certificate,
-		                                   WebRequest request,
-						   int problem)
-		{
-			Log.Warning ("Blindly trusting " + request.RequestUri);
-			return true;
-		}
-	}
-}
diff --git a/extensions/Exporters/TabbloExport/FSpotTraceListener.cs b/extensions/Exporters/TabbloExport/FSpotTraceListener.cs
deleted file mode 100644
index a7484c1..0000000
--- a/extensions/Exporters/TabbloExport/FSpotTraceListener.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// FSpotTabbloExport.FSpotTraceListener
-//
-// Authors:
-//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
-//
-// (C) Copyright 2009 Wojciech Dzierzanowski
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using Hyena;
-
-namespace FSpotTabbloExport {
-
-	class FSpotTraceListener : System.Diagnostics.TraceListener {
-
-		public override void Write (string message)
-		{
-			Log.Debug ("Mono.Tabblo", message);
-		}
-
-		public override void WriteLine (string message)
-		{
-			Write (message);
-		}
-	}
-}
diff --git a/extensions/Exporters/TabbloExport/FSpotUploadProgress.cs b/extensions/Exporters/TabbloExport/FSpotUploadProgress.cs
deleted file mode 100644
index 669ecde..0000000
--- a/extensions/Exporters/TabbloExport/FSpotUploadProgress.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// FSpotTabbloExport.FSpotUploadProgress
-//
-// Authors:
-//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
-//
-// (C) Copyright 2008 Wojciech Dzierzanowski
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using Mono.Tabblo;
-using Mono.Unix;
-using System;
-using FSpot.UI.Dialog;
-using FSpot.Utils;
-
-namespace FSpotTabbloExport {
-
-	class FSpotUploadProgress : TotalUploadProgress	{
-
-		private ThreadProgressDialog progress_dialog;
-
-
-		internal FSpotUploadProgress (
-				Picture [] pictures,
-				ThreadProgressDialog progress_dialog)
-			: base (pictures)
-		{
-			this.progress_dialog = progress_dialog;
-		}
-
-
-		protected override void ShowProgress (string title,
-		                                      long bytes_sent)
-		{
-			progress_dialog.Message = title;
-			progress_dialog.ProgressText = String.Format (
-					Catalog.GetString (
-							"{0} of approx. {1}"),
-					GLib.Format.SizeForDisplay (bytes_sent),
-					GLib.Format.SizeForDisplay (
-							(long) TotalFileSize));
-			progress_dialog.Fraction =
-					(double) bytes_sent / TotalFileSize;
-		}
-	}
-}
diff --git a/extensions/Exporters/TabbloExport/Makefile.am b/extensions/Exporters/TabbloExport/Makefile.am
deleted file mode 100644
index 94a5d32..0000000
--- a/extensions/Exporters/TabbloExport/Makefile.am
+++ /dev/null
@@ -1,26 +0,0 @@
-ASSEMBLY = FSpot.Exporters.TabbloExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_TABBLOEXPORT)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	ApplicationCentricCertificatePolicy.cs \
-	BlindTrustCertificatePolicy.cs \
-	FSpotTraceListener.cs \
-	FSpotUploadProgress.cs \
-	TabbloExport.cs \
-	TabbloExportModel.cs \
-	TabbloExportView.cs \
-	UserDecisionCertificatePolicy.cs
-
-RESOURCES = \
-	TabbloExport.addin.xml \
-	ui/TabbloExport.ui \
-	ui/TrustError.ui
-
-ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
-
-SUBDIRS = \
-	Tabblo
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/TabbloExport/Makefile.in b/extensions/Exporters/TabbloExport/Makefile.in
deleted file mode 100644
index be23de7..0000000
--- a/extensions/Exporters/TabbloExport/Makefile.in
+++ /dev/null
@@ -1,1017 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/TabbloExport
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.TabbloExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_TABBLOEXPORT) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	ApplicationCentricCertificatePolicy.cs \
-	BlindTrustCertificatePolicy.cs \
-	FSpotTraceListener.cs \
-	FSpotUploadProgress.cs \
-	TabbloExport.cs \
-	TabbloExportModel.cs \
-	TabbloExportView.cs \
-	UserDecisionCertificatePolicy.cs
-
-RESOURCES = \
-	TabbloExport.addin.xml \
-	ui/TabbloExport.ui \
-	ui/TrustError.ui
-
-ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
-SUBDIRS = \
-	Tabblo
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/TabbloExport/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/TabbloExport/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(SCRIPTS)
-installdirs: installdirs-recursive
-installdirs-am:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-	install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive distclean distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-data-local install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-moduleSCRIPTS \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags tags-recursive uninstall uninstall-am \
-	uninstall-local uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/TabbloExport/Tabblo/Makefile.am b/extensions/Exporters/TabbloExport/Tabblo/Makefile.am
deleted file mode 100644
index 5283b77..0000000
--- a/extensions/Exporters/TabbloExport/Tabblo/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-ASSEMBLY = Mono.Tabblo
-TARGET = library
-LINK = $(REF_MONO_TABBLO)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	Connection.cs \
-	IPreferences.cs \
-	MultipartRequest.cs \
-	Picture.cs \
-	TabbloException.cs \
-	TotalUploadProgress.cs \
-	Uploader.cs \
-	UploadProgressEventArgs.cs \
-	UploadProgressEventHandler.cs
-
-RESOURCES =
-
-ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/TabbloExport/Tabblo/Makefile.in b/extensions/Exporters/TabbloExport/Tabblo/Makefile.in
deleted file mode 100644
index 786401c..0000000
--- a/extensions/Exporters/TabbloExport/Tabblo/Makefile.in
+++ /dev/null
@@ -1,810 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/TabbloExport/Tabblo
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = Mono.Tabblo
-TARGET = library
-LINK = $(REF_MONO_TABBLO) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	Connection.cs \
-	IPreferences.cs \
-	MultipartRequest.cs \
-	Picture.cs \
-	TabbloException.cs \
-	TotalUploadProgress.cs \
-	Uploader.cs \
-	UploadProgressEventArgs.cs \
-	UploadProgressEventHandler.cs
-
-RESOURCES = 
-ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/TabbloExport/Tabblo/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/TabbloExport/Tabblo/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/TabbloExport/TabbloExport.addin.xml b/extensions/Exporters/TabbloExport/TabbloExport.addin.xml
deleted file mode 100644
index 04e3307..0000000
--- a/extensions/Exporters/TabbloExport/TabbloExport.addin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Addin namespace="FSpot"
-	version="0.7.0.0"
-	name="Tabblo Export"
-	description="This extension allows you to export your photos to Tabblo."
- 	author="Wojciech Dzierżanowski"
-	defaultEnabled="false"
-	category="Export">
-
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-
-	<Extension path = "/FSpot/Menus/Exports">
-		<ExportMenuItem id="Tabblo" _label = "_Tabblo..." class = "FSpotTabbloExport.TabbloExport" />
-	</Extension>
-</Addin>
diff --git a/extensions/Exporters/TabbloExport/TabbloExport.cs b/extensions/Exporters/TabbloExport/TabbloExport.cs
deleted file mode 100644
index 6cfdf55..0000000
--- a/extensions/Exporters/TabbloExport/TabbloExport.cs
+++ /dev/null
@@ -1,410 +0,0 @@
-//
-// FSpotTabbloExport.TabbloExport
-//
-// Authors:
-//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
-//
-// (C) Copyright 2009 Wojciech Dzierzanowski
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using Mono.Tabblo;
-using Mono.Unix;
-
-using System;
-using System.Collections;
-using System.Diagnostics;
-using System.Net;
-using System.Threading;
-
-using Hyena;
-using FSpot.UI.Dialog;
-
-namespace FSpotTabbloExport {
-
-	public class TabbloExport : FSpot.Extensions.IExporter {
-
-		private readonly TabbloExportModel model;
-
-		private TabbloExportView main_dialog;
-		private ThreadProgressDialog progress_dialog;
-
-		private readonly Uploader uploader;
-		private TraceListener debug_listener;
-		private TotalUploadProgress upload_progress;
-
-
-		//
-		// Initialization
-		//
-
-		public TabbloExport ()
-		{
-			model = new TabbloExportModel ();
-			uploader = new Uploader (model);
-		}
-
-
-		public void Run (FSpot.IBrowsableCollection photos)
-		{
-			if (null == photos || null == photos.Items) {
-				throw new ArgumentNullException ("photos");
-			}
-
-			main_dialog = new TabbloExportView (photos);
-
-			InitBindings ();
-
-			model.Deserialize ();
-			model.PhotoCollection = photos;
-
-			// Model deserialization triggers the various event
-			// handlers, which can cause the default widget to lose
-			// focus (it can be invalid, and hence disabled, for a
-			// moment).
-			main_dialog.ResetFocus ();
-
-			main_dialog.Show ();
-		}
-
-
-		private void InitBindings ()
-		{
-			Debug.Assert (null != model);
-			Debug.Assert (null != main_dialog);
-
-			main_dialog.Response += HandleResponse;
-
-			// Account data
-			model.UsernameChanged += HandleUsernameChanged;
-			main_dialog.username_entry.Changed +=
-					HandleUsernameChanged;
-
-			model.PasswordChanged += HandlePasswordChanged;
-			main_dialog.password_entry.Changed +=
-					HandlePasswordChanged;
-
-			// Tags
-			model.AttachTagsChanged += HandleAttachTagsToggled;
-			main_dialog.attach_tags_button.Toggled +=
-					HandleAttachTagsToggled;
-
-			model.AttachedTagsChanged += HandleAttachedTagsChanged;
-
-			main_dialog.attached_tags_select_button.Clicked +=
-					HandleSelectAttachedTagsClicked;
-
-			model.RemoveTagsChanged += HandleRemoveTagsToggled;
-			main_dialog.remove_tags_button.Toggled +=
-					HandleRemoveTagsToggled;
-
-			model.RemovedTagsChanged += HandleRemovedTagsChanged;
-
-			main_dialog.removed_tags_select_button.Clicked +=
-					HandleSelectRemovedTagsClicked;
-		}
-
-
-		//
-		// Event handlers
-		//
-
-		private void HandleUsernameChanged (object sender,
-		                                    EventArgs args)
-		{
-			if (model == sender) {
-				main_dialog.username_entry.Text = model.Username;
-				OnAccountDataChanged ();
-			} else {
-				model.Username = main_dialog.username_entry.Text;
-			}
-		}
-
-		private void HandlePasswordChanged (object sender,
-		                                    EventArgs args)
-		{
-			if (model == sender) {
-				main_dialog.password_entry.Text = model.Password;
-				OnAccountDataChanged ();
-			} else {
-				model.Password = main_dialog.password_entry.Text;
-			}
-		}
-
-		private void OnAccountDataChanged ()
-		{
-			main_dialog.Validated =
-					model.Username.Length > 0
-					&& model.Password.Length > 0;
-		}
-
-
-		private void HandleAttachTagsToggled (object sender,
-		                                      EventArgs args)
-		{
-			if (model == sender) {
-				if (model.AttachTags && 0 == model
-							.AttachedTags.Length) {
-					model.AttachedTags = SelectTags ();
-					model.AttachTags =
-						0 < model.AttachedTags.Length;
-				}
-
-				main_dialog.attach_tags_button.Active =
-						model.AttachTags;
-				main_dialog.attached_tags_select_button
-						.Sensitive = model.AttachTags;
-
-			} else {
-				model.AttachTags =
-					main_dialog.attach_tags_button.Active;
-			}
-		}
-
-		private void HandleRemoveTagsToggled (object sender,
-		                                      EventArgs args)
-		{
-			if (model == sender) {
-				if (model.RemoveTags && 0 == model
-							.RemovedTags.Length) {
-					model.RemovedTags = SelectTags ();
-					model.RemoveTags =
-						0 < model.RemovedTags.Length;
-				}
-
-				main_dialog.remove_tags_button.Active =
-						model.RemoveTags;
-				main_dialog.removed_tags_select_button
-						.Sensitive = model.RemoveTags;
-			} else {
-				model.RemoveTags =
-					main_dialog.remove_tags_button.Active;
-			}
-		}
-
-
-		private void HandleSelectAttachedTagsClicked (object sender,
-		                                              EventArgs args)
-		{
-			Debug.Assert (model != sender);
-
-			FSpot.Tag [] tags = SelectTags ();
-			if (null != tags) {
-				model.AttachedTags = tags;
-			}
-		}
-
-		private void HandleSelectRemovedTagsClicked (object sender,
-		                                             EventArgs args)
-		{
-			Debug.Assert (model != sender);
-
-			FSpot.Tag [] tags = SelectTags ();
-			if (null != tags) {
-				model.RemovedTags = tags;
-			}
-		}
-
-
-		private void HandleAttachedTagsChanged (object sender,
-		                                        EventArgs args)
-		{
-			Debug.Assert (model == sender);
-
-			main_dialog.attached_tags_view.Tags =
-					model.AttachedTags;
-			main_dialog.attach_tags_button.Active =
-					model.AttachTags
-					&& model.AttachedTags.Length > 0;
-		}
-
-		private void HandleRemovedTagsChanged (object sender,
-		                                       EventArgs args)
-		{
-			Debug.Assert (model == sender);
-
-			main_dialog.removed_tags_view.Tags =
-					model.RemovedTags;
-			main_dialog.remove_tags_button.Active =
-					model.RemoveTags
-					&& model.RemovedTags.Length > 0;
-		}
-
-
-		private FSpot.Tag [] SelectTags ()
-		{
-			TagStore tag_store = FSpot.App.Instance.Database.Tags;
-			TagSelectionDialog tagDialog =
-					new TagSelectionDialog (tag_store);
-			FSpot.Tag [] tags = tagDialog.Run ();
-
-			tagDialog.Hide ();
-
-			return tags;
-		}
-
-
-		private void HandleResponse (object sender,
-		                             Gtk.ResponseArgs args)
-		{
-			main_dialog.Destroy ();
-
-			if (Gtk.ResponseType.Ok != args.ResponseId) {
-				Log.Information ("Tabblo export was canceled.");
-				return;
-			}
-			
-			model.Serialize ();
-			
-			Log.Information ("Starting Tabblo export");
-			
-			Thread upload_thread =
-					new Thread (new ThreadStart (Upload));
-			progress_dialog = new ThreadProgressDialog (
-					upload_thread, model.Photos.Length);
-			progress_dialog.Start ();
-		}
-		
-		
-		//
-		// Upload logic
-		// 
-
-		private void Upload ()
-		{
-			Debug.Assert (null != uploader);
-			
-			Picture [] pictures = GetPicturesForUpload (); 
-			Debug.Assert (pictures.Length == model.Photos.Length);
-
-			OnUploadStarted (pictures);
-				
-			try {
-				for (int i = 0; i < pictures.Length; ++i) {
-					uploader.Upload (pictures [i]);
-					OnPhotoUploaded (model.Photos [i]);
-				}
-				
-				progress_dialog.Message = Catalog.GetString (
-						"Done sending photos");
-				progress_dialog.ProgressText = Catalog
-						.GetString ("Upload complete");
-				progress_dialog.Fraction = 1;
-				progress_dialog.ButtonLabel = Gtk.Stock.Ok;
-				
-			} catch (TabbloException e) {
-				progress_dialog.Message = Catalog.GetString (
-						"Error uploading to Tabblo: ")
-						+ e.Message;
-				progress_dialog.ProgressText =
-						Catalog.GetString ("Error");
-				// FIXME:  Retry logic? 
-//				  progressDialog.PerformRetrySkip ();
-				Log.Exception (e);
-			} finally {
-				OnUploadFinished ();
-			}
-		}
-		
-
-		private void OnUploadStarted (Picture [] pictures)
-		{
-			Debug.Assert (null != pictures);
-			Debug.Assert (null != uploader);
-			Debug.Assert (null != progress_dialog);
-
-			// Initialize the debug output listener.
-			// `Mono.Tabblo' uses the standard
-			// `System.Diagnostics.Debug' facilities for debug
-			// output only.
-			debug_listener = new FSpotTraceListener ();
-			Debug.Listeners.Add (debug_listener);
-
-			// Initialize the progress handler.
-			upload_progress = new FSpotUploadProgress (
-					pictures, progress_dialog);
-			uploader.ProgressChanged +=
-					upload_progress.HandleProgress;
-			
-			// Set up the certificate policy.
-			ServicePointManager.CertificatePolicy =
-					new UserDecisionCertificatePolicy ();
-		}
-
-		private void OnUploadFinished ()
-		{
-			Debug.Assert (null != uploader);
-			Debug.Assert (null != debug_listener);
-			Debug.Assert (null != upload_progress);
-
-			uploader.ProgressChanged -=
-					upload_progress.HandleProgress;
-
-			Debug.Listeners.Remove (debug_listener);
-		}
-
-		
-		private void OnPhotoUploaded (FSpot.IBrowsableItem item)
-		{
-			Debug.Assert (null != item);
-
-			if (!model.AttachTags && !model.RemoveTags) {
-				return;
-			}
-
-			PhotoStore photo_store = FSpot.App.Instance.Database.Photos;
-			FSpot.Photo photo = photo_store.GetByUri (
-					item.DefaultVersion.Uri);
-			Debug.Assert (null != photo);
-			if (null == photo) {
-				return;
-			}
-
-			if (model.AttachTags) {
-				photo.AddTag (model.AttachedTags);
-			}
-			if (model.RemoveTags) {
-				photo.RemoveTag (model.RemovedTags);
-			}
-			photo_store.Commit (photo);
-		}
-
-		
-		private Picture [] GetPicturesForUpload ()
-		{
-			Picture [] pictures = new Picture [model.Photos.Length];
-			FSpot.IBrowsableItem [] items = model.Photos;
-
-			for (int i = 0; i < pictures.Length; ++i) {
-				string mime_type = GLib.FileFactory.NewForUri (items [i].DefaultVersion.Uri).
-							QueryInfo ("standard::content-type", GLib.FileQueryInfoFlags.None, null).ContentType;
-
-				pictures [i] = new Picture (items [i].Name,
-						new Uri (items [i].DefaultVersion.Uri.AbsoluteUri),
-						mime_type,
-						model.Privacy);
-			}
-
-			return pictures;
-		}
-	}
-}
diff --git a/extensions/Exporters/TabbloExport/TabbloExportModel.cs b/extensions/Exporters/TabbloExport/TabbloExportModel.cs
deleted file mode 100644
index bfc6728..0000000
--- a/extensions/Exporters/TabbloExport/TabbloExportModel.cs
+++ /dev/null
@@ -1,391 +0,0 @@
-//
-// FSpotTabbloExport.TabbloExportModel
-//
-// Authors:
-//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
-//
-// (C) Copyright 2009 Wojciech Dzierzanowski
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using Hyena;
-
-using Mono.Tabblo;
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-
-
-namespace FSpotTabbloExport {
-
-	class TabbloExportModel : Mono.Tabblo.IPreferences {
-
-		private FSpot.IBrowsableCollection photo_collection;
-
-		private string username;
-		private string password;
-
-		private bool attach_tags = false;
-		private FSpot.Tag [] attached_tags;
-		private bool remove_tags = false;
-		private FSpot.Tag [] removed_tags;
-
-		private static readonly FSpot.Tag [] no_tags = new FSpot.Tag [0];
-
-
-		// `FSpot.Preferences' constants.
-		private const string PrefPrefix =
-				FSpot.Preferences.APP_FSPOT_EXPORT + "tabblo/";
-		private const string PrefAttachTags =
-				PrefPrefix + "attach_tags";
-		private const string PrefAttachedTags =
-				PrefPrefix + "attached_tags";
-		private const string PrefRemoveTags =
-				PrefPrefix + "remove_tags";
-		private const string PrefRemovedTags =
-				PrefPrefix + "removed_tags";
-
-		// Keyring constants.
-		private const string KeyringItemName = "Tabblo Account";
-		private const string KeyringItemApp = "FSpotTabbloExport";
-		private const string KeyringItemNameAttr = "name";
-		private const string KeyringItemUsernameAttr = "username";
-		private const string KeyringItemAppAttr = "application";
-
-
-		// The photos.
-
-		internal FSpot.IBrowsableCollection PhotoCollection {
-			get {
-				return photo_collection;
-			}
-			set {
-				photo_collection = value;
-			}
-		}
-
-		internal FSpot.IBrowsableItem [] Photos {
-			get {
-				return photo_collection.Items;
-			}
-		}
-
-
-		// `Mono.Tabblo.IPreferences' implementation.
-
-		internal event EventHandler UsernameChanged;
-		public string Username {
-			get {
-				return null != username
-						? username : string.Empty;
-			}
-			internal set {
-				string old_value = username;
-				username = value;
-				OnMaybePropertyChanged (old_value, username,
-						UsernameChanged);
-			}
-		}
-
-		internal event EventHandler PasswordChanged;
-		public string Password {
-			get {
-				return null != password
-						? password : string.Empty;
-			}
-			internal set {
-				string old_value = password;
-				password = value;
-				OnMaybePropertyChanged (old_value, password,
-						PasswordChanged);
-			}
-		}
-
-		// FIXME:  Hopefully, we'll have a use for this one day.  Then
-		//         we'll have to actually implement the property.
-		public string Privacy {
-			get {
-				return "circle";
-			}
-		}
-
-
-		// The tags.
-
-		internal event EventHandler AttachTagsChanged;
-		internal bool AttachTags {
-			get {
-				return attach_tags;
-			}
-			set {
-				bool old_value = attach_tags;
-				attach_tags = value;
-				OnMaybePropertyChanged (old_value, attach_tags,
-						AttachTagsChanged);
-			}
-		}
-
-		internal event EventHandler AttachedTagsChanged;
-		internal FSpot.Tag [] AttachedTags {
-			get {
-				return null != attached_tags
-						? attached_tags	: no_tags;
-			}
-			set {
-				FSpot.Tag [] old_value = attached_tags;
-				attached_tags = value;
-				OnMaybePropertyChanged (old_value, attached_tags,
-						AttachedTagsChanged);
-			}
-		}
-
-		internal event EventHandler RemoveTagsChanged;
-		internal bool RemoveTags {
-			get {
-				return remove_tags;
-			}
-			set {
-				bool old_value = remove_tags;
-				remove_tags = value;
-				OnMaybePropertyChanged (old_value, remove_tags,
-						RemoveTagsChanged);
-			}
-		}
-
-		internal event EventHandler RemovedTagsChanged;
-		internal FSpot.Tag [] RemovedTags {
-			get {
-				return null != removed_tags
-						? removed_tags : no_tags;
-			}
-			set {
-				FSpot.Tag [] old_value = removed_tags;
-				removed_tags = value;
-				OnMaybePropertyChanged (old_value, removed_tags,
-						RemovedTagsChanged);
-			}
-		}
-
-
-		private void OnMaybePropertyChanged (object old_value,
-				object new_value, EventHandler handler)
-		{
-			if (!object.Equals (old_value, new_value)
-					&& null != handler) {
-				handler (this, EventArgs.Empty);
-			}
-
-		}
-
-
-
-		internal void Serialize ()
-		{
-			WriteAccountData ();
-			WriteTagPreferences ();
-		}
-
-		internal void Deserialize ()
-		{
-			ReadTagPreferences ();
-			ReadAccountData ();
-		}
-
-
-		private void WriteAccountData ()
-		{
-			try {
-				string keyring = Gnome.Keyring
-						.Ring.GetDefaultKeyring ();
-				
-				Hashtable attrs = new Hashtable ();
-				attrs [KeyringItemNameAttr] = KeyringItemName;
-				attrs [KeyringItemAppAttr] = KeyringItemApp;
-
-				Gnome.Keyring.ItemType type = Gnome.Keyring
-						.ItemType.GenericSecret;
-
-				try {
-					Gnome.Keyring.ItemData [] items = Gnome
-							.Keyring.Ring.Find (
-									type,
-									attrs);
-							
-					foreach (Gnome.Keyring.ItemData item
-							in items) {
-						Gnome.Keyring.Ring.DeleteItem (
-								keyring,
-								item.ItemID);
-					}
-				} catch (Gnome.Keyring.KeyringException e) {
-					Log.Exception ("Error deleting old "
-							+ "account data", e);
-				}
-				
-				attrs [KeyringItemUsernameAttr] = Username;
-
-				Gnome.Keyring.Ring.CreateItem (keyring, type,
-						KeyringItemName, attrs,
-						Password, true);
-				
-			} catch (Gnome.Keyring.KeyringException e) {
-				Log.Exception ("Error writing account data", e);
-			}
-		}
-
-		private void ReadAccountData ()
-		{
-			string new_username = string.Empty;
-			string new_password = string.Empty;
-
-			Hashtable attrs = new Hashtable ();
-			attrs [KeyringItemNameAttr] = KeyringItemName;
-			attrs [KeyringItemAppAttr] = KeyringItemApp;
-			
-			try {
-				Gnome.Keyring.ItemType type = Gnome.Keyring
-						.ItemType.GenericSecret;
-				Gnome.Keyring.ItemData [] items =
-						Gnome.Keyring.Ring.Find (
-								type, attrs);
-				if (1 < items.Length) {
-					Log.WarningFormat ("More than one {0} "
-							+ " found in keyring",
-							KeyringItemName);
-				}
-			
-				if (1 <= items.Length) {
-					Log.DebugFormat ("{0} data found in "
-							+ "keyring",
-							KeyringItemName);
-					attrs =	items [0].Attributes;
-					new_username = (string) attrs [
-						KeyringItemUsernameAttr];
-					new_password = items [0].Secret;
-				}
-				
-			} catch (Gnome.Keyring.KeyringException e) {
-				Log.Exception ("Error reading account data", e);
-			}
-
-			Username = new_username;
-			Password = new_password;
-		}
-
-
-		private void WriteTagPreferences ()
-		{
-			Debug.Assert (!AttachTags
-					|| (null != AttachedTags
-						&& AttachedTags.Length > 0));
-			FSpot.Preferences.Set (PrefAttachedTags,
-					ToIds (AttachedTags));
-			FSpot.Preferences.Set (PrefAttachTags, AttachTags);
-
-			Debug.Assert (!RemoveTags
-					|| (null != RemovedTags
-						&& RemovedTags.Length > 0));
-			FSpot.Preferences.Set (PrefRemovedTags,
-					ToIds (RemovedTags));
-			FSpot.Preferences.Set (PrefRemoveTags, RemoveTags);
-		}
-
-		private void ReadTagPreferences ()
-		{
-			int [] attached_tags_pref = null;
-			if (FSpot.Preferences.TryGet (PrefAttachedTags,
-						out attached_tags_pref)) {
-				AttachedTags = ToTags (attached_tags_pref);
-			}
-			// FIXME:  How do you `java.util.Arrays.toString(int[])'
-			//         in C#?
-			Log.Debug ("Read from prefs: attached_tags = "
-					+ AttachedTags);
-
-			bool attach_tags_pref = false;
-			if (FSpot.Preferences.TryGet (PrefAttachTags,
-						out attach_tags_pref)) {
-				AttachTags = attach_tags_pref
-						&& AttachedTags.Length > 0;
-			}
-			Log.Debug ("Read from prefs: attach_tags_pref = "
-					+ attach_tags_pref);
-
-			int [] removed_tags_pref = null;
-			if (FSpot.Preferences.TryGet (PrefRemovedTags,
-						out removed_tags_pref)) {
-				RemovedTags = ToTags (removed_tags_pref);
-			}
-			// FIXME:  How do you `java.util.Arrays.toString(int[])'
-			//         in C#?
-			Log.Debug ("Read from prefs: removed_tags_pref = "
-					+ removed_tags_pref);
-
-			bool remove_tags_pref = false;
-			if (FSpot.Preferences.TryGet (PrefRemoveTags,
-						out remove_tags_pref)) {
-				RemoveTags = remove_tags_pref
-						&& RemovedTags.Length > 0;
-			}
-			Log.Debug ("Read from prefs: remove_tags_pref = "
-					+ remove_tags_pref);
-		}
-		
-		
-		private static FSpot.Tag [] ToTags (int [] ids)
-		{
-			if (null == ids) {
-				return null;
-			}
-
-			List <FSpot.Tag> tags =
-					new List <FSpot.Tag> (ids.Length);
-			foreach (int id in ids) {
-				FSpot.Tag tag = FSpot.App.Instance.Database.Tags
-						.GetTagById (id);
-				if (null != tag) {
-					tags.Add (tag);
-				} else {
-					Log.Warning ("No such tag ID in DB: "
-							+ id);
-				}
-			}
-			return tags.ToArray ();
-		}
-
-		private static int [] ToIds (FSpot.Tag [] tags)
-		{
-			if (null == tags) {
-				return null;
-			}
-
-			int [] ids = new int [tags.Length];
-			for (int i = 0; i < ids.Length; ++i) {
-				ids [i] = (int) tags [i].Id;
-			}
-			return ids;
-		}
-
-	}
-}
diff --git a/extensions/Exporters/TabbloExport/TabbloExportView.cs b/extensions/Exporters/TabbloExport/TabbloExportView.cs
deleted file mode 100644
index 77659dd..0000000
--- a/extensions/Exporters/TabbloExport/TabbloExportView.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-//
-// FSpotTabbloExport.TabbloExportView
-//
-// Authors:
-//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
-//
-// (C) Copyright 2009 Wojciech Dzierzanowski
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Diagnostics;
-using System.Reflection;
-
-
-namespace FSpotTabbloExport {
-
-
-	class TabbloExportView : FSpot.UI.Dialog.BuilderDialog {
-
-		private const string DialogName = "tabblo_export_dialog";
-
-		[GtkBeans.Builder.Object]
-		private Gtk.ScrolledWindow thumb_scrolled_window;
-
-		[GtkBeans.Builder.Object]
-		internal Gtk.Entry username_entry;
-
-		[GtkBeans.Builder.Object]
-		internal Gtk.Entry password_entry;
-
-		[GtkBeans.Builder.Object]
-		internal Gtk.CheckButton attach_tags_button;
-
-		[GtkBeans.Builder.Object]
-		private Gtk.Alignment attached_tags_alignment;
-
-		internal FSpot.Widgets.TagView attached_tags_view; 
-
-		[GtkBeans.Builder.Object]
-		internal Gtk.Button attached_tags_select_button;
-
-		[GtkBeans.Builder.Object]
-		internal Gtk.CheckButton remove_tags_button;
-
-		[GtkBeans.Builder.Object]
-		private Gtk.Alignment removed_tags_alignment;
-
-		internal FSpot.Widgets.TagView removed_tags_view; 
-
-		[GtkBeans.Builder.Object]
-		internal Gtk.Button removed_tags_select_button;
-
-		[GtkBeans.Builder.Object]
-		private Gtk.Button export_button;
-
-
-		internal TabbloExportView (FSpot.IBrowsableCollection photos)
-			: base (Assembly.GetExecutingAssembly (),
-					"TabbloExport.ui", DialogName)
-		{
-			// Thumbnails
-			FSpot.Widgets.IconView icon_view =
-					new FSpot.Widgets.IconView (photos);
-			icon_view.DisplayDates = false;
-			icon_view.DisplayTags = false;
-
-			thumb_scrolled_window.Add (icon_view);
-			icon_view.Show ();
-
-			// Tags
-			attached_tags_view = new FSpot.Widgets.TagView ();
-			attached_tags_alignment.Add (attached_tags_view);
-			attached_tags_view.Show ();
-
-			removed_tags_view = new FSpot.Widgets.TagView ();
-			removed_tags_alignment.Add (removed_tags_view);
-			removed_tags_view.Show ();
-		}
-
-
-		internal void ResetFocus ()
-		{
-			export_button.HasFocus = true;
-		}
-
-
-		internal bool Validated {
-			set {
-				export_button.Sensitive = value;
-			}
-		}
-	}
-}
diff --git a/extensions/Exporters/TabbloExport/UserDecisionCertificatePolicy.cs b/extensions/Exporters/TabbloExport/UserDecisionCertificatePolicy.cs
deleted file mode 100644
index e5ea72a..0000000
--- a/extensions/Exporters/TabbloExport/UserDecisionCertificatePolicy.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// FSpotTabbloExport.UserDecisionCertificatePolicy
-//
-// Authors:
-//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
-//
-// (C) Copyright 2008 Wojciech Dzierzanowski
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Diagnostics;
-using System.Net;
-using System.Reflection;
-using System.Security.Cryptography.X509Certificates;
-using System.Threading;
-
-using Hyena;
-
-namespace FSpotTabbloExport {
-
-	class UserDecisionCertificatePolicy
-			: ApplicationCentricCertificatePolicy {
-
-		private const string DialogName = "trust_error_dialog";
-		[GtkBeans.Builder.Object] Gtk.Dialog dialog;
-		[GtkBeans.Builder.Object] Gtk.Label url_label;
-		[GtkBeans.Builder.Object] Gtk.RadioButton abort_radiobutton;
-		[GtkBeans.Builder.Object] Gtk.RadioButton once_radiobutton;
-		[GtkBeans.Builder.Object] Gtk.RadioButton always_radiobutton;
-
-		private X509Certificate certificate;
-		private WebRequest request;
-		private Decision decision;
-
-		private Object decision_lock = new Object ();
-		private ManualResetEvent decision_event;
-
-
-		protected override Decision GetDecision (
-				X509Certificate certificate,
-				WebRequest request)
-		{
-			this.certificate = certificate;
-			this.request = request;
-
-			lock (decision_lock) {
-				GLib.Idle.Add (this.DoGetDecision);
-				decision_event = new ManualResetEvent (false);
-				decision_event.WaitOne ();
-			}
-
-			return decision;
-		}
-
-		private bool DoGetDecision ()
-		{
-			GtkBeans.Builder builder = new GtkBeans.Builder (
-					Assembly.GetExecutingAssembly (),
-					"TrustError.ui", null);
-			builder.Autoconnect (this);
-			dialog = (Gtk.Dialog) builder.GetObject (DialogName);
-
-			url_label.Markup = String.Format (
-					url_label.Text, String.Format (
-							"<b>{0}</b>",
-							request.RequestUri));
-
-			Gtk.ResponseType response =
-					(Gtk.ResponseType) dialog.Run ();
-			Log.Debug ("Decision dialog response: " + response);
-
-			dialog.Destroy ();
-
-			decision = Decision.DontTrust;
-			if (0 == response) {
-				if (abort_radiobutton.Active) {
-					decision = Decision.DontTrust;
-				} else if (once_radiobutton.Active) {
-					decision = Decision.TrustOnce;
-				} else if (always_radiobutton.Active) {
-					decision = Decision.TrustAlways;
-				} else {
-					Debug.Assert (false,
-							"Unhandled decision");
-				}
-			}
-
-			decision_event.Set ();
-			return false;
-		}
-	}
-}
diff --git a/extensions/Exporters/ZipExport/Makefile.am b/extensions/Exporters/ZipExport/Makefile.am
deleted file mode 100644
index 4831935..0000000
--- a/extensions/Exporters/ZipExport/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-ASSEMBLY = FSpot.Exporters.ZipExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_ZIPEXPORT)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = ZipExport.cs
-
-RESOURCES = \
-	ZipExport.addin.xml \
-	ZipExport.glade
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/ZipExport/Makefile.in b/extensions/Exporters/ZipExport/Makefile.in
deleted file mode 100644
index 14558c0..0000000
--- a/extensions/Exporters/ZipExport/Makefile.in
+++ /dev/null
@@ -1,802 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Exporters/ZipExport
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.ZipExport
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_ZIPEXPORT) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = ZipExport.cs
-RESOURCES = \
-	ZipExport.addin.xml \
-	ZipExport.glade
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/ZipExport/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Exporters/ZipExport/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Exporters/ZipExport/ZipExport.addin.xml b/extensions/Exporters/ZipExport/ZipExport.addin.xml
deleted file mode 100644
index e1bdb50..0000000
--- a/extensions/Exporters/ZipExport/ZipExport.addin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Addin namespace="FSpot"
-	id="ZipExport"
-	version="0.7.0.0"
-	name="Zip export"
-	description="Simple export to Zip file"
-	author="Lorenzo Milesi"
-	url="http://f-spot.org/Extensions"
-	category="Export"
-	defaultEnabled="false">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Menus/Exports">
-		<ExportMenuItem id="ZipExport" _label = "Compressed fil_e..." class = "ZipExport.Zip" />
-	</Extension>
-</Addin>
diff --git a/extensions/Exporters/ZipExport/ZipExport.cs b/extensions/Exporters/ZipExport/ZipExport.cs
deleted file mode 100644
index 62cd97e..0000000
--- a/extensions/Exporters/ZipExport/ZipExport.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * ZipExport.cs
- * Simple zip exporter. Creates a zip file with unmodified pictures.
- *
- * Author(s)
- * 	Lorenzo Milesi <maxxer at yetopen.it>
- *
- * Many thanks to Stephane for his help and patience. :)
- *
- * This is free software. See COPYING for details
- * (c) YetOpen S.r.l.
- */
-
-
-using FSpot;
-using FSpot.UI.Dialog;
-using FSpot.Extensions;
-using FSpot.Filters;
-using Hyena;
-using Hyena.Widgets;
-using System;
-using System.IO;
-using System.Collections;
-using Mono.Unix;
-using Gtk;
-using ICSharpCode.SharpZipLib.Checksums;
-using ICSharpCode.SharpZipLib.Zip;
-using ICSharpCode.SharpZipLib.GZip;
-
-namespace ZipExport {
-	public class Zip : IExporter {
-
-		[Glade.Widget] Gtk.Dialog zipdiag;
-		[Glade.Widget] Gtk.HBox dirchooser_hbox;
-		[Glade.Widget] Gtk.CheckButton scale_check;
-		[Glade.Widget] Gtk.Entry filename;
-		[Glade.Widget] Gtk.SpinButton scale_size;
-		[Glade.Widget] Gtk.Button create_button;
-
-		IBrowsableItem [] photos;
-		Gtk.FileChooserButton uri_chooser;
-
-		public void Run (IBrowsableCollection p) {
-			Log.Information ("Executing ZipExport extension");
-			if (p.Count == 0) {
-				HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window, DialogFlags.DestroyWithParent,
-							  Gtk.MessageType.Error, ButtonsType.Ok,
-							  Catalog.GetString ("No selection available"),
-							  Catalog.GetString ("This tool requires an active selection. Please select one or more pictures and try again"));
-
-				md.Run ();
-				md.Destroy ();
-				return;
-			}
-			photos = p.Items;
-			ShowDialog ();
-		}
-
-		public void ShowDialog () {
-			Glade.XML xml = new Glade.XML (null, "ZipExport.glade", "zipdiag", "f-spot");
-			xml.Autoconnect (this);
-			zipdiag.Modal = false;
-			zipdiag.TransientFor = null;
-
-			uri_chooser = new Gtk.FileChooserButton (Catalog.GetString ("Select export folder"),
-								 Gtk.FileChooserAction.SelectFolder);
-			uri_chooser.LocalOnly = true;
-			uri_chooser.SetFilename (System.IO.Path.Combine (FSpot.Global.HomeDirectory, "Desktop"));
-			dirchooser_hbox.PackStart (uri_chooser, false, false, 2);
-			filename.Text = "f-spot_export.zip";
-
-			zipdiag.Response += on_dialog_response;
-			filename.Changed += on_filename_change;
-			scale_check.Toggled += on_scalecheck_change;
-			on_scalecheck_change (null, null);
-
-			zipdiag.ShowAll ();
-		}
-
-		private void on_dialog_response (object sender, ResponseArgs args) {
-			if (args.ResponseId != Gtk.ResponseType.Ok) {
-				// FIXME this is to work around a bug in gtk+ where
-				// the filesystem events are still listened to when
-				// a FileChooserButton is destroyed but not finalized
-				// and an event comes in that wants to update the child widgets.
-				uri_chooser.Dispose ();
-				uri_chooser = null;
-			} else if (args.ResponseId == Gtk.ResponseType.Ok) {
-				zip ();
-			}
-			zipdiag.Destroy ();
-		}
-
-		void zip () {
-			System.Uri dest = new System.Uri (uri_chooser.Uri);
-			Crc32 crc = new Crc32 ();
-			string filedest = dest.LocalPath + "/" + filename.Text;
-			Log.DebugFormat ("Creating zip file {0}", filedest);
-			ZipOutputStream s = new ZipOutputStream (File.Create(filedest));
-			if (scale_check.Active)
-				Log.DebugFormat ("Scaling to {0}", scale_size.ValueAsInt);
-
-			ProgressDialog progress_dialog = new ProgressDialog (Catalog.GetString ("Exporting files"),
-							      ProgressDialog.CancelButtonType.Stop,
-							      photos.Length, zipdiag);
-
-			//Pack up
-			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;
-				}
-				string f = null;
-				// FIXME: embed in a try/catch
-				if (scale_check.Active) {
-					FilterSet filters = new FilterSet ();
-					filters.Add (new JpegFilter ());
-					filters.Add (new ResizeFilter ((uint) scale_size.ValueAsInt));
-					FilterRequest freq = new FilterRequest (photos [i].DefaultVersion.Uri);
-					filters.Convert (freq);
-					f = freq.Current.LocalPath;
-				} else {
-					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 (photos [i].DefaultVersion.Uri.LocalPath));
-
-				entry.DateTime = DateTime.Now;
-
-				entry.Size = fs.Length;
-				fs.Close ();
-
-				crc.Reset ();
-				crc.Update (buffer);
-
-				entry.Crc = crc.Value;
-
-				s.PutNextEntry (entry);
-
-				s.Write (buffer, 0, buffer.Length);
-			}
-			s.Finish ();
-			s.Close ();
-			if (progress_dialog != null)
-				progress_dialog.Destroy ();
-
-		}
-
-		private void on_filename_change (object sender, System.EventArgs args) {
-			create_button.Sensitive = System.Text.RegularExpressions.Regex.IsMatch (filename.Text, "[.]zip$");
-		}
-
-		private void on_scalecheck_change (object sender, System.EventArgs args) {
-			scale_size.Sensitive = scale_check.Active;
-		}
-	}
-}
diff --git a/extensions/Makefile.am b/extensions/Makefile.am
deleted file mode 100644
index 628616f..0000000
--- a/extensions/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-SUBDIRS = 			\
-	Editors		\
-	Exporters		\
-	Tools			\
-	Transitions
-
-addinsdir = $(pkglibdir)
-addins_DATA = f-spot.global.addins
-
-EXTRA_DIST = f-spot.global.addins
-
diff --git a/extensions/Makefile.in b/extensions/Makefile.in
deleted file mode 100644
index eaffa53..0000000
--- a/extensions/Makefile.in
+++ /dev/null
@@ -1,724 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = extensions
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addinsdir)"
-DATA = $(addins_DATA)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = \
-	Editors		\
-	Exporters		\
-	Tools			\
-	Transitions
-
-addinsdir = $(pkglibdir)
-addins_DATA = f-spot.global.addins
-EXTRA_DIST = f-spot.global.addins
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-install-addinsDATA: $(addins_DATA)
-	@$(NORMAL_INSTALL)
-	test -z "$(addinsdir)" || $(MKDIR_P) "$(DESTDIR)$(addinsdir)"
-	@list='$(addins_DATA)'; test -n "$(addinsdir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addinsdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(addinsdir)" || exit $$?; \
-	done
-
-uninstall-addinsDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(addins_DATA)'; test -n "$(addinsdir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(addinsdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(addinsdir)" && rm -f $$files
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(DATA)
-installdirs: installdirs-recursive
-installdirs-am:
-	for dir in "$(DESTDIR)$(addinsdir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-addinsDATA
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-addinsDATA
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-	install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive distclean distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-addinsDATA install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs installdirs-am \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-addinsDATA \
-	uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Tools/ChangePhotoPath/ChangePhotoPath.addin.xml b/extensions/Tools/ChangePhotoPath/ChangePhotoPath.addin.xml
deleted file mode 100644
index f8e134b..0000000
--- a/extensions/Tools/ChangePhotoPath/ChangePhotoPath.addin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Addin namespace="FSpot"
-        id="ChangePath"
-        version="0.7"
-        name="ChangePath"
-        description="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."
-        author="Bengt Thuree"
-        url="http://f-spot.org/Extensions"
-        category="Tools"
-	defaultEnabled="false">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Menus/Tools">
-		<Command id="FileList" _label = "Change path to photos" command_type = "ChangePhotoPath.Dump" />
-	</Extension>
-</Addin>
diff --git a/extensions/Tools/ChangePhotoPath/ChangePhotoPathController.cs b/extensions/Tools/ChangePhotoPath/ChangePhotoPathController.cs
deleted file mode 100644
index 8d0378e..0000000
--- a/extensions/Tools/ChangePhotoPath/ChangePhotoPathController.cs
+++ /dev/null
@@ -1,310 +0,0 @@
-//
-// ChangePhotoPath.IChangePhotoPathController.cs: The logic to change the photo path in photos.db
-//
-// Author:
-//   Bengt Thuree (bengt at thuree.com)
-//
-// Copyright (C) 2007
-//
-
-
-using FSpot;
-using FSpot.Query;
-using System;
-using System.IO;
-using System.Collections;
-using System.Collections.Specialized;
-using Hyena;
-
-/*
-	Need to
-		1) Find old base path, assuming starting /YYYY/MM/DD so look for /YY (/19 or /20)
-		2) Confirm old base path and display new base path
-		3) For each Photo, check each version, and change every instance of old base path to new path
-
-Consider!!!
-photo_store.Commit(photo) is using db.ExecuteNonQuery, which is not waiting for the command to finish. On my test set of 20.000 photos,
-it took SQLite another 1 hour or so to commit all rows after this extension had finished its execution.
-
-Consider 2!!!
-A bit of mixture between URI and path. Old and New base path are in String path. Rest in URI.
-
-*/
-
-namespace ChangePhotoPath
-{
-
-	public enum ProcessResult {
-		Ok, Cancelled, Error, SamePath, NoPhotosFound, Processing
-	}
-
-	public class ChangePathController
-	{
-		PhotoStore photo_store = FSpot.App.Instance.Database.Photos;
-		ArrayList photo_id_array, version_id_array;
-		StringCollection old_path_array, new_path_array;
-		int total_photos;
-		string orig_base_path;
-
-		private const string BASE2000 = "/20";
-		private const string BASE1900 = "/19";
-		private const string BASE1800 = "/18";
-
-		private IChangePhotoPathGui gui_controller;
-
-
-		private bool user_cancelled;
-		public bool UserCancelled {
-		  get {return user_cancelled;}
-		  set {user_cancelled = value;}
-		}
-
-		public ChangePathController (IChangePhotoPathGui gui)
-		{
-			gui_controller = gui;
-			total_photos = photo_store.TotalPhotos;
-			orig_base_path = EnsureEndsWithOneDirectorySeparator (FindOrigBasePath());			// NOT URI
-			string new_base_path = EnsureEndsWithOneDirectorySeparator (FSpot.Global.PhotoUri.LocalPath);	// NOT URI
-			gui_controller.DisplayDefaultPaths (orig_base_path, new_base_path);
-			user_cancelled = false;
-		}
-
-		private string EnsureEndsWithOneDirectorySeparator (string 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);
-			return String.Format ("{0}{1}", tmp_str, Path.DirectorySeparatorChar);
-		}
-
-
-		// Should always return TRUE, since path always ends with "/"
-		public bool CanWeRun ()
-		{
-			return (orig_base_path != null);
-		}
-
-		private string IsThisPhotoOnOrigBasePath (string check_this_path)
-		{
-			int i;
-			i = check_this_path.IndexOf(BASE2000);
-			if (i > 0)
-				return (check_this_path.Substring(0, i));
-			i = check_this_path.IndexOf(BASE1900);
-			if (i > 0)
-				return (check_this_path.Substring(0, i));
-			i = check_this_path.IndexOf(BASE1800);
-			if (i > 0)
-				return (check_this_path.Substring(0, i));
-			return null;
-		}
-
-		private string FindOrigBasePath()
-		{
-			string res_path = null;
-
-			foreach ( IBrowsableItem photo in photo_store.Query ( "SELECT * FROM photos " ) ) {
-				string tmp_path = (photo as Photo).DefaultVersion.Uri.AbsolutePath;
-				res_path = IsThisPhotoOnOrigBasePath (tmp_path);
-				if (res_path != null)
-					break;
-			}
-			return res_path;
-		}
-
-		private void InitializeArrays()
-		{
-			photo_id_array = new ArrayList();
-			version_id_array = new ArrayList();
-			old_path_array = new StringCollection();
-			new_path_array = new StringCollection();
-		}
-
-		private void AddVersionToArrays ( uint photo_id, uint version_id, string old_path, string new_path)
-		{
-			photo_id_array.Add (photo_id);
-			version_id_array.Add (version_id);
-			old_path_array.Add (old_path);
-			new_path_array.Add (new_path);
-		}
-
-		private string CreateNewPath (string old_base, string new_base, PhotoVersion version)
-		{
-			return string.Format ("{0}{1}", new_base, version.Uri.AbsolutePath.Substring(old_base.Length));
-		}
-
-		private bool ChangeThisVersionUri (PhotoVersion version, string old_base, string new_base)
-		{
-			// Change to path from URI, since easier to compare with old_base which is not in URI format.
-			string tmp_path = System.IO.Path.GetDirectoryName (version.Uri.AbsolutePath);
-			return ( tmp_path.StartsWith (old_base) );
-		}
-
-		private void SearchVersionUriToChange (Photo photo, string old_base, string new_base)
-		{
-				foreach (uint version_id in photo.VersionIds) {
-
-					PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
-					if ( ChangeThisVersionUri (version, old_base, new_base) )
-						AddVersionToArrays (	photo.Id,
-									version_id,
-									version.Uri.AbsolutePath,
-									CreateNewPath (old_base, new_base, version));
-//					else
-//						System.Console.WriteLine ("L : {0}", version.Uri.AbsolutePath);
-				}
-		}
-
-		public bool SearchUrisToChange (string old_base, string new_base)
-		{
-			int count = 0;
-
-			foreach ( IBrowsableItem ibrows in photo_store.Query ( "SELECT * FROM photos " ) ) {
-				count++;
-				if (gui_controller.UpdateProgressBar ("Scanning through database", "Checking photo", total_photos))
-				    return false;
-				SearchVersionUriToChange ((ibrows as Photo), old_base, new_base);
-			}
-			return true;
-		}
-
-		public bool StillOnSamePhotoId (int old_index, int current_index, ArrayList array)
-		{
-			try {
-				return (array[old_index] == array[current_index]);
-			} catch {
-				return true; // return true if out of index.
-			}
-		}
-
-		public void UpdateThisUri (int index, string path, ref Photo photo)
-		{
-			if (photo == null)
-				photo = photo_store.Get ( (uint) photo_id_array[index]) as Photo;
-			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 ( (uint) version_id_array[index] );
-		}
-
-/// FIXME Refactor, try to use one common method....
-		public void RevertAllUris (int last_index)
-		{
-			gui_controller.remove_progress_dialog();
-			Photo photo = null;
-			for (int k = last_index; k >= 0; k--) {
-				if (gui_controller.UpdateProgressBar ("Reverting changes to database", "Reverting photo", last_index))
-					{} // do nothing, ignore trying to abort the revert...
-				if ( (photo != null) && !StillOnSamePhotoId (k+1, k, photo_id_array) ) {
-					photo_store.Commit (photo);
-					photo = null;
-				}
-
-				UpdateThisUri (k, old_path_array[k], ref photo);
-				Log.DebugFormat ("R : {0} - {1}", k, old_path_array[k]);
-			}
-			if (photo != null)
-				photo_store.Commit (photo);
-			Log.Debug ("Changing path failed due to above error. Have reverted any modification that took place.");
-		}
-
-		public ProcessResult ChangeAllUris ( ref int  last_index)
-		{
-			gui_controller.remove_progress_dialog();
-			Photo photo = null;
-			last_index = 0;
-			try {
-				photo = null;
-				for (last_index = 0; last_index < photo_id_array.Count; last_index++) {
-
-					if (gui_controller.UpdateProgressBar ("Changing photos base path", "Changing photo", photo_id_array.Count)) {
-						Log.Debug("User aborted the change of paths...");
-						return ProcessResult.Cancelled;
-					}
-
-					if ( (photo != null) && !StillOnSamePhotoId (last_index-1, last_index, photo_id_array) ) {
-						photo_store.Commit (photo);
-						photo = null;
-					}
-
-					UpdateThisUri (last_index, new_path_array[last_index], ref photo);
-					Log.DebugFormat ("U : {0} - {1}", last_index, new_path_array[last_index]);
-
-					// DEBUG ONLY
-					// Cause an TEST exception on 6'th URI to be changed.
-					// float apa = last_index / (last_index-6);
-				}
-				if (photo != null)
-					photo_store.Commit (photo);
-			} catch (Exception e) {
-				Log.Exception(e);
-				return ProcessResult.Error;
-			}
-			return ProcessResult.Ok;
-		}
-
-
-		public ProcessResult ProcessArrays()
-		{
-			int last_index = 0;
-			ProcessResult tmp_res;
-			tmp_res = ChangeAllUris(ref last_index);
-			if (!(tmp_res == ProcessResult.Ok))
-				RevertAllUris(last_index);
-			return tmp_res;
-		}
-
-/*
-		public void CheckIfUpdated (int test_index, StringCollection path_array)
-		{
-			Photo photo = photo_store.Get ( (uint) photo_id_array[test_index]) as Photo;
-			PhotoVersion version = photo.GetVersion ( (uint) version_id_array[test_index]) as PhotoVersion;
-			if (version.Uri.AbsolutePath.ToString() == path_array[ test_index ])
-				Log.DebugFormat ("Test URI ({0}) matches --- Should be finished", test_index);
-			else
-				Log.DebugFormat ("Test URI ({0}) DO NOT match --- Should NOT BE finished", test_index);
-		}
-*/
-
-/*
-Check paths are different
-If (Scan all photos) // user might cancel
-	If (Check there are photos on old path)
-		ChangePathsOnPhotos
-*/
-
-		public bool NewOldPathSame (ref string newpath, ref string oldpath)
-		{
-			string p1 = EnsureEndsWithOneDirectorySeparator(newpath);
-			string p2 = EnsureEndsWithOneDirectorySeparator(oldpath);
-			return (p1 == p2);
-		}
-
-		public ProcessResult ChangePathOnPhotos (string old_base, string new_base)
-		{
-			ProcessResult tmp_res = ProcessResult.Processing;
-			InitializeArrays();
-
-			if (NewOldPathSame (ref new_base, ref old_base))
-				tmp_res = ProcessResult.SamePath;
-
-			if ( (tmp_res == ProcessResult.Processing) && (!SearchUrisToChange (old_base, new_base)) )
-				tmp_res = ProcessResult.Cancelled;
-
-			if ( (tmp_res == ProcessResult.Processing) && (photo_id_array.Count == 0) )
-				tmp_res = ProcessResult.NoPhotosFound;
-
-			if (tmp_res == ProcessResult.Processing)
-				tmp_res = ProcessArrays();
-
-//			if (res)
-//				CheckIfUpdated (photo_id_array.Count-1, new_path_array);
-//			else
-//				CheckIfUpdated (0, old_path_array);
-
-			return tmp_res;
-		}
-	}
-}
diff --git a/extensions/Tools/ChangePhotoPath/ChangePhotoPathGui.cs b/extensions/Tools/ChangePhotoPath/ChangePhotoPathGui.cs
deleted file mode 100644
index 39b21a5..0000000
--- a/extensions/Tools/ChangePhotoPath/ChangePhotoPathGui.cs
+++ /dev/null
@@ -1,206 +0,0 @@
-//
-// ChangePhotoPath.IChangePhotoPathGui.cs: The Gui to change the photo path in photos.db
-//
-// Author:
-//   Bengt Thuree (bengt at thuree.com)
-//
-// Copyright (C) 2007
-//
-
-using FSpot.Extensions;
-using FSpot.UI.Dialog;
-using System;
-//using Gnome.Vfs;
-using Gtk;
-using Hyena;
-using Hyena.Widgets;
-
-namespace ChangePhotoPath
-{
-
-	public class Dump : Gtk.Dialog, ICommand, IChangePhotoPathGui
-	{
-		private string dialog_name = "ChangePhotoPath";
-		private Glade.XML xml;
-		private Gtk.Dialog dialog;
-		private ChangePathController contr;
-
-		private ProgressDialog progress_dialog;
-		private int progress_dialog_total = 0;
-
-		[Glade.Widget] Gtk.Entry old_common_uri;
-		[Glade.Widget] Gtk.Label new_common_uri;
-//		[Glade.Widget] Gtk.ProgressBar progress_bar;
-
-		private bool LaunchController()
-		{
-			try {
-				contr = new ChangePathController ( this );
-			} catch (Exception e) {
-				Log.Exception(e);
-				return false;
-			}
-			return true;
-		}
-
-		public void create_progress_dialog(string txt, int total)
-		{
-			progress_dialog = new ProgressDialog (txt,
-							      ProgressDialog.CancelButtonType.Stop,
-							      total,
-							      dialog);
-		}
-
-
-		public void LaunchDialog()
-		{
-			CreateDialog();
-			Dialog.Modal = false;
-			Dialog.TransientFor = null;
-			if (LaunchController() && contr.CanWeRun())
-			{
-				DisplayDoNotStopFSpotMsg();
-				Dialog.ShowAll();
-				Dialog.Response += HandleResponse;
-			} else {
-				DisplayOrigBasePathNotFoundMsg();
-				Dialog.Destroy();
-			}
-		}
-
-		private void CreateDialog()
-		{
-			xml = new Glade.XML (null, "ChangePhotoPath.glade", dialog_name, "f-spot");
-			xml.Autoconnect (this);
-		}
-
-		private Gtk.Dialog Dialog {
-			get {
-				if (dialog == null)
-					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
-				return dialog;
-			}
-		}
-
-		private void DisplayMsg(Gtk.MessageType MessageType, string msg)
-		{
-
-			HigMessageDialog.RunHigMessageDialog (	null,
-								Gtk.DialogFlags.Modal | Gtk.DialogFlags.DestroyWithParent,
-								MessageType,
-								Gtk.ButtonsType.Ok,
-								msg,
-								null);
-		}
-
-		private void DisplayDoNotStopFSpotMsg()
-		{
-			DisplayMsg (Gtk.MessageType.Info, "It will take a long time for SqLite to update the database if you have many photos." +
-							  "\nWe recommend you to let F-Spot be running during the night to ensure everything is written to disk."+
-							  "\nChanging path on 23000 photos took 2 hours until sqlite had updated all photos in the database.");
-		}
-
-		private void DisplayOrigBasePathNotFoundMsg()
-		{
-			DisplayMsg (Gtk.MessageType.Error, "Could not find an old base path. /YYYY/MM/DD need to start with /20, /19 or /18.");
-		}
-
-		private void DisplayCancelledMsg()
-		{
-			DisplayMsg (Gtk.MessageType.Warning, "Operation aborted. Database has not been modified.");
-		}
-
-		private void DisplaySamePathMsg()
-		{
-			DisplayMsg (Gtk.MessageType.Warning, "New and Old base path are the same.");
-		}
-
-		private void DisplayNoPhotosFoundMsg()
-		{
-			DisplayMsg (Gtk.MessageType.Warning, "Did not find any photos with the old base path.");
-		}
-
-		private void DisplayExecutionOkMsg()
-		{
-			DisplayMsg (Gtk.MessageType.Info, "Completed successfully. Please ensure you wait 1-2 hour before you exit f-spot. This to ensure the database cache is written to disk.");
-		}
-
-		private void DisplayExecutionNotOkMsg()
-		{
-			DisplayMsg (Gtk.MessageType.Error, "An error occured. Reverted all changes to the database.");
-		}
-
-
-		private void HandleResponse (object sender, Gtk.ResponseArgs args)
-		{
-			bool destroy_dialog = false;
-			ChangePhotoPath.ProcessResult tmp_res;
-			if (args.ResponseId == Gtk.ResponseType.Ok) {
-
-				tmp_res = contr.ChangePathOnPhotos (old_common_uri.Text, new_common_uri.Text);
-				switch (tmp_res) {
-				case ProcessResult.Ok 			: 	DisplayExecutionOkMsg();
-										destroy_dialog=true;
-										break;
-				case ProcessResult.Cancelled 		: 	DisplayCancelledMsg();
-										break;
-				case ProcessResult.Error 		: 	DisplayExecutionNotOkMsg();
-										break;
-				case ProcessResult.SamePath 		: 	DisplaySamePathMsg();
-										break;
-				case ProcessResult.NoPhotosFound 	: 	DisplayNoPhotosFoundMsg();
-										break;
-				case ProcessResult.Processing 		: 	Log.Debug ("processing");
-										break;
-				}
-			} else
-				destroy_dialog = true;
-
-			remove_progress_dialog();
-			if (destroy_dialog)
-				Dialog.Destroy();
-
-			return;
-		}
-
-		public void DisplayDefaultPaths (string oldpath, string newpath)
-		{
-			old_common_uri.Text = oldpath;
-			new_common_uri.Text = newpath;
-		}
-
-		public void remove_progress_dialog ()
-		{
-			if (progress_dialog != null) {
-				progress_dialog.Destroy();
-				progress_dialog = null;
-			}
-		}
-
-		public void check_if_remove_progress_dialog (int total)
-		{
-			if (total != progress_dialog_total)
-				remove_progress_dialog();
-		}
-
-
-		public bool UpdateProgressBar (string hdr_txt, string txt, int total)
-		{
-			if (progress_dialog != null)
-				check_if_remove_progress_dialog(total);
-			if (progress_dialog == null)
-				create_progress_dialog(hdr_txt, total);
-			progress_dialog_total = total;
-			return progress_dialog.Update (String.Format ("{0} ", txt));
-		}
-
-		public void Run (object sender, EventArgs args)
-		{
-			try {
-				LaunchDialog( );
-			} catch (Exception e) {
-				Log.Exception(e);
-			}
-		}
-	}
-}
diff --git a/extensions/Tools/ChangePhotoPath/IChangePhotoPathGui.cs b/extensions/Tools/ChangePhotoPath/IChangePhotoPathGui.cs
deleted file mode 100644
index 3acf81d..0000000
--- a/extensions/Tools/ChangePhotoPath/IChangePhotoPathGui.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-// ChangePhotoPath.IChangePhotoPathGui.cs: Interfaces to ChangePhotoPathGui
-//
-// Author:
-//   Bengt Thuree (bengt at thuree.com)
-//
-// Copyright (C) 2007
-//
-
-namespace ChangePhotoPath
-{
-	public interface IChangePhotoPathGui
-	{
-		void remove_progress_dialog();
-		bool UpdateProgressBar (string hdr_txt, string text, int total_photos);
-		void DisplayDefaultPaths (string oldpath, string newpath);
-	}
-}
diff --git a/extensions/Tools/ChangePhotoPath/Makefile.am b/extensions/Tools/ChangePhotoPath/Makefile.am
deleted file mode 100755
index 10fc230..0000000
--- a/extensions/Tools/ChangePhotoPath/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-ASSEMBLY = FSpot.Exporters.ChangePhotoPath
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_CHANGEPHOTOPATH)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	IChangePhotoPathGui.cs \
-	ChangePhotoPathGui.cs \
-	ChangePhotoPathController.cs
-
-RESOURCES = \
-	ChangePhotoPath.addin.xml \
-	ChangePhotoPath.glade
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/ChangePhotoPath/Makefile.in b/extensions/Tools/ChangePhotoPath/Makefile.in
deleted file mode 100644
index b52fdcc..0000000
--- a/extensions/Tools/ChangePhotoPath/Makefile.in
+++ /dev/null
@@ -1,806 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Tools/ChangePhotoPath
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.ChangePhotoPath
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_CHANGEPHOTOPATH) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	IChangePhotoPathGui.cs \
-	ChangePhotoPathGui.cs \
-	ChangePhotoPathController.cs
-
-RESOURCES = \
-	ChangePhotoPath.addin.xml \
-	ChangePhotoPath.glade
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Tools/ChangePhotoPath/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Tools/ChangePhotoPath/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Tools/DevelopInUFraw/DevelopInUFRaw.addin.xml b/extensions/Tools/DevelopInUFraw/DevelopInUFRaw.addin.xml
deleted file mode 100644
index 56381aa..0000000
--- a/extensions/Tools/DevelopInUFraw/DevelopInUFRaw.addin.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<Addin namespace="FSpot"
-	id="DevelopInUFraw"
-	version="0.7.0.0"
-	name="DevelopInUFRaw"
-	description="Develop the image in UFRaw, saves the result as a new version\n\nNote: Require ufraw 0.13 or CVS version newer than 2007-09-06 !!!"
-	author="Stephane Delcroix"
-	url="http://f-spot.org/Extensions"
-	category="Tools"
-	defaultEnabled="false">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Menus/PhotoPopup">
-		<Command id = "DevelopInUFRaw" _label = "Develop in UFRaw" command_type = "DevelopInUFRawExtension.DevelopInUFRaw" insertbefore="OpenWith"/>
-		<Condition id="PhotoSelection" selection="multiple">
-			<Command id = "DevelopInUFRawBatch" _label = "Batch Develop" command_type = "DevelopInUFRawExtension.DevelopInUFRawBatch" insertbefore="OpenWith"/>
-		</Condition>
-	</Extension>
-</Addin>
diff --git a/extensions/Tools/DevelopInUFraw/DevelopInUFRaw.cs b/extensions/Tools/DevelopInUFraw/DevelopInUFRaw.cs
deleted file mode 100644
index e477ad0..0000000
--- a/extensions/Tools/DevelopInUFraw/DevelopInUFRaw.cs
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * DevelopInUFraw.cs
- *
- * Author(s)
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.IO;
-
-using Mono.Unix;
-
-using Hyena;
-using FSpot;
-using FSpot.Utils;
-using FSpot.Extensions;
-using FSpot.Imaging;
-using FSpot.UI.Dialog;
-
-namespace DevelopInUFRawExtension
-{
-	// GUI Version
-	public class DevelopInUFRaw : AbstractDevelopInUFRaw {
-		public DevelopInUFRaw() : base("ufraw")
-		{
-		}
-
-		public override void Run (object o, EventArgs e)
-		{
-			Log.Information ("Executing DevelopInUFRaw extension");
-
-			foreach (Photo p in App.Instance.Organizer.SelectedPhotos ()) {
-				DevelopPhoto (p);
-			}
-		}
-	}
-
-	// Batch Version
-	public class DevelopInUFRawBatch : AbstractDevelopInUFRaw {
-		public DevelopInUFRawBatch() : base("ufraw-batch")
-		{
-		}
-
-		public override void Run (object o, EventArgs e)
-		{
-			ProgressDialog pdialog = new ProgressDialog(Catalog.GetString ("Developing photos"),
-														ProgressDialog.CancelButtonType.Cancel,
-														App.Instance.Organizer.SelectedPhotos ().Length,
-														App.Instance.Organizer.Window);
-			Log.Information ("Executing DevelopInUFRaw extension in batch mode");
-
-			foreach (Photo p in App.Instance.Organizer.SelectedPhotos ()) {
-				bool cancelled = pdialog.Update(String.Format(Catalog.GetString ("Developing {0}"), p.Name));
-				if (cancelled) {
-					break;
-				}
-
-				DevelopPhoto (p);
-			}
-			pdialog.Destroy();
-		}
-	}
-
-	// Abstract version, contains shared functionality
-	public abstract class AbstractDevelopInUFRaw : ICommand
-	{
-		// The executable used for developing RAWs
-		private string executable;
-
-		public const string APP_FSPOT_EXTENSION = Preferences.APP_FSPOT + "extension/";
-		public const string EXTENSION_DEVELOPINUFRAW = "developinufraw/";
-		public const string UFRAW_JPEG_QUALITY_KEY = APP_FSPOT_EXTENSION + EXTENSION_DEVELOPINUFRAW + "ufraw_jpeg_quality";
-		public const string UFRAW_ARGUMENTS_KEY = APP_FSPOT_EXTENSION + EXTENSION_DEVELOPINUFRAW + "ufraw_arguments";
-		public const string UFRAW_BATCH_ARGUMENTS_KEY = APP_FSPOT_EXTENSION + EXTENSION_DEVELOPINUFRAW + "ufraw_batch_arguments";
-
-		int ufraw_jpeg_quality;
-		string ufraw_args;
-		string ufraw_batch_args;
-
-		public AbstractDevelopInUFRaw(string executable)
-		{
-			this.executable = executable;
-		}
-
-		public abstract void Run (object o, EventArgs e);
-
-		protected void DevelopPhoto (Photo p)
-		{
-			LoadPreference (UFRAW_JPEG_QUALITY_KEY);
-			LoadPreference (UFRAW_ARGUMENTS_KEY);
-			LoadPreference (UFRAW_BATCH_ARGUMENTS_KEY);
-
-			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;
-			}
-
-			string name = GetVersionName (p);
-			System.Uri developed = GetUriForVersionName (p, name);
-			string idfile = "";
-
-
-			if (ufraw_jpeg_quality < 1 || ufraw_jpeg_quality > 100) {
-				Log.Debug ("Invalid JPEG quality specified, defaulting to quality 98");
-				ufraw_jpeg_quality = 98;
-			}
-
-			string args = "";
-			switch (executable) {
-				case "ufraw":
-					args += ufraw_args;
-					if (GLib.FileFactory.NewForUri (Path.ChangeExtension (raw.Uri.ToString (), ".ufraw")).Exists) {
-						// We found an ID file, use that instead of the raw file
-						idfile = "--conf=" + GLib.Shell.Quote (Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw"));
-					}
-					break;
-				case "ufraw-batch":
-					args += ufraw_batch_args;
-					if (GLib.FileFactory.NewForUri (Path.Combine (FSpot.Global.BaseDirectory, "batch.ufraw")).Exists) {
-						// We found an ID file, use that instead of the raw file
-						idfile = "--conf=" + GLib.Shell.Quote (Path.Combine (FSpot.Global.BaseDirectory, "batch.ufraw"));
-					}
-					break;
-			}
-
-			args += String.Format(" --overwrite --create-id=also --compression={0} --out-type=jpeg {1} --output={2} {3}",
-				ufraw_jpeg_quality,
-				idfile,
-				GLib.Shell.Quote (developed.LocalPath),
-				GLib.Shell.Quote (raw.Uri.LocalPath));
-			Log.Debug (executable + " " + args);
-
-			System.Diagnostics.Process ufraw = System.Diagnostics.Process.Start (executable, args);
-			ufraw.WaitForExit ();
-			if (!(GLib.FileFactory.NewForUri (developed.ToString ())).Exists) {
-				Log.Warning ("UFRaw quit with an error. Check that you have UFRaw 0.13 or newer. Or did you simply clicked on Cancel?");
-				return;
-			}
-
-			if (GLib.FileFactory.NewForUri (Path.ChangeExtension (developed.ToString (), ".ufraw")).Exists) {
-				// We save our own copy of the last ufraw settings, as ufraw can overwrite it's own last used settings outside f-spot
-				File.Delete (Path.Combine (FSpot.Global.BaseDirectory, "batch.ufraw"));
-				File.Copy (Path.ChangeExtension (developed.LocalPath, ".ufraw"), Path.Combine (FSpot.Global.BaseDirectory, "batch.ufraw"));
-
-				// Rename the ufraw file to match the original RAW filename, instead of the (Developed In UFRaw) filename
-				File.Delete (Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw"));
-				File.Move (Path.ChangeExtension (developed.LocalPath, ".ufraw"), Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw"));
-			}
-
-			p.DefaultVersionId = p.AddVersion (new SafeUri (developed).GetBaseUri (),new SafeUri (developed).GetFilename (), name, true);
-			p.Changes.DataChanged = true;
-			App.Instance.Database.Photos.Commit (p);
-		}
-
-		private static string GetVersionName (Photo p)
-		{
-			return GetVersionName (p, 1);
-		}
-
-		private static string GetVersionName (Photo p, int i)
-		{
-			string name = Catalog.GetPluralString ("Developed in UFRaw", "Developed in UFRaw ({0})", i);
-			name = String.Format (name, i);
-			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"));
-		}
-
-		private static string DirectoryPath (Photo p)
-		{
-			return p.VersionUri (Photo.OriginalVersionId).GetBaseUri ();
-		}
-
-		void LoadPreference (string key)
-		{
-			switch (key) {
-				case UFRAW_JPEG_QUALITY_KEY:
-					ufraw_jpeg_quality = Preferences.Get<int> (key);
-					break;
-				case UFRAW_ARGUMENTS_KEY:
-					ufraw_args = Preferences.Get<string> (key);
-					break;
-				case UFRAW_BATCH_ARGUMENTS_KEY:
-					ufraw_batch_args = Preferences.Get<string> (key);
-					break;
-			}
-		}
-
-	}
-}
diff --git a/extensions/Tools/DevelopInUFraw/Makefile.am b/extensions/Tools/DevelopInUFraw/Makefile.am
deleted file mode 100644
index a59d3d4..0000000
--- a/extensions/Tools/DevelopInUFraw/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-ASSEMBLY = FSpot.Exporters.DevelopInUFRaw
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_DEVELOPINUFRAW)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	DevelopInUFRaw.cs
-
-RESOURCES = \
-	DevelopInUFRaw.addin.xml
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/DevelopInUFraw/Makefile.in b/extensions/Tools/DevelopInUFraw/Makefile.in
deleted file mode 100644
index ddd71c2..0000000
--- a/extensions/Tools/DevelopInUFraw/Makefile.in
+++ /dev/null
@@ -1,803 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Tools/DevelopInUFraw
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.DevelopInUFRaw
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_DEVELOPINUFRAW) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	DevelopInUFRaw.cs
-
-RESOURCES = \
-	DevelopInUFRaw.addin.xml
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Tools/DevelopInUFraw/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Tools/DevelopInUFraw/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Tools/HashJob/HashJob.addin.xml b/extensions/Tools/HashJob/HashJob.addin.xml
deleted file mode 100644
index 74558f0..0000000
--- a/extensions/Tools/HashJob/HashJob.addin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Addin namespace="FSpot"
-	id="HashJob"
-	version="0.7"
-	description="Process your photo collection for duplicate detection"
-	author="Stephane Delcroix"
-	url="http://f-spot.org/Extensions"
-	name="Check for Duplicates"
-	category="Tools">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Menus/Tools">
-		<Command id = "HashDupes" _label = "Check for Duplicates..." command_type = "HashJobExtension.HashJob" />
-	</Extension>
-</Addin>
diff --git a/extensions/Tools/HashJob/HashJob.cs b/extensions/Tools/HashJob/HashJob.cs
deleted file mode 100644
index 2f36fe7..0000000
--- a/extensions/Tools/HashJob/HashJob.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * HashJob.cs
- *
- * Author(s)
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.Collections.Generic;
-using Mono.Unix;
-using Mono.Data.SqliteClient;
-
-using Gtk;
-
-using FSpot;
-using FSpot.Extensions;
-using FSpot.Jobs;
-
-namespace HashJobExtension {
-
-	public class HashJob : ICommand {
-		public void Run (object o, EventArgs e) {
-			HashJobDialog dialog = new HashJobDialog ();  
-			dialog.ShowDialog ();
-
-		}
-	}
-
-	public class HashJobDialog : Dialog 
-	{
-		private Gtk.Label status_label;
-
-		public void ShowDialog ()
-		{ 			
-			// This query is not very fast, but it's a 'one-time' so don't care much...
-			SqliteDataReader reader = FSpot.App.Instance.Database.Database.Query (
-				"SELECT COUNT(*) FROM photos p WHERE EXISTS " +
-					"(SELECT * FROM photo_versions pv WHERE p.id=pv.photo_id AND " +
-					"(pv.import_md5 IS NULL OR pv.import_md5 = ''))");
-			reader.Read ();
-			uint missing_md5 = Convert.ToUInt32 (reader[0]);
-			reader.Close ();
-
-			reader = FSpot.App.Instance.Database.Database.Query (String.Format (
-				"SELECT COUNT(*) FROM jobs WHERE job_type = '{0}' ", typeof(FSpot.Jobs.CalculateHashJob).ToString ()));
-			reader.Read ();
-			uint active_jobs = Convert.ToUInt32 (reader[0]);
-			reader.Close ();
-
-			VBox.Spacing = 6;
-			Label l = new Label (Catalog.GetString ("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."));
-			l.LineWrap = true;
-			VBox.PackStart (l);
-
-			Label l2 = new Label (String.Format (Catalog.GetString ("You currently have {0} photos needing md5 calculation, and {1} pending jobs"),
-				missing_md5, active_jobs));
-			l2.LineWrap = true;
-			VBox.PackStart (l2);
-
-			Button execute = new Button (Stock.Execute);
-			execute.Clicked += HandleExecuteClicked;
-			VBox.PackStart (execute);
-
-			Button stop = new Button (Stock.Stop);
-			stop.Clicked += HandleStopClicked;
-			VBox.PackStart (stop);
-
-			status_label = new Label ();
-			VBox.PackStart (status_label);
-
-			this.AddButton (Catalog.GetString ("_Close"), ResponseType.Close);
-			this.Response += HandleResponse;
-
-			ShowAll ();
-		}
-
-		void HandleResponse (object obj, ResponseArgs args)
-	        {
-			switch(args.ResponseId)
-			{
-				case ResponseType.Close:
-					this.Destroy ();
-					break;
-			}
-	        }
-
-		void HandleExecuteClicked (object o, EventArgs e)
-		{
-			SqliteDataReader reader = FSpot.App.Instance.Database.Database.Query (
-				"SELECT id FROM photos p WHERE EXISTS " +
-					"(SELECT * FROM photo_versions pv WHERE p.id=pv.photo_id AND " +
-					"(pv.import_md5 IS NULL OR pv.import_md5 = '') )");
-			FSpot.App.Instance.Database.Database.BeginTransaction ();
-			while (reader.Read ())
-				FSpot.Jobs.CalculateHashJob.Create (FSpot.App.Instance.Database.Jobs, Convert.ToUInt32 (reader[0]));
-			reader.Close ();
-			FSpot.App.Instance.Database.Database.CommitTransaction ();
-			status_label.Text = Catalog.GetString ("Processing images...");
-		}
-
-		void HandleStopClicked (object o, EventArgs e)
-		{
-			FSpot.App.Instance.Database.Database.ExecuteNonQuery (String.Format ("DELETE FROM jobs WHERE job_type = '{0}'", typeof(FSpot.Jobs.CalculateHashJob).ToString ()));
-			status_label.Text = Catalog.GetString ("Stopped");
-		}
-
-	}
-
-}
diff --git a/extensions/Tools/HashJob/Makefile.am b/extensions/Tools/HashJob/Makefile.am
deleted file mode 100644
index 051c1f2..0000000
--- a/extensions/Tools/HashJob/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-ASSEMBLY = FSpot.Exporters.HashJob
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_HASHJOB)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = HashJob.cs
-RESOURCES = HashJob.addin.xml
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/HashJob/Makefile.in b/extensions/Tools/HashJob/Makefile.in
deleted file mode 100644
index b300ec1..0000000
--- a/extensions/Tools/HashJob/Makefile.in
+++ /dev/null
@@ -1,799 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Tools/HashJob
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.HashJob
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_HASHJOB) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = HashJob.cs
-RESOURCES = HashJob.addin.xml
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Tools/HashJob/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Tools/HashJob/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs b/extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs
deleted file mode 100644
index a288403..0000000
--- a/extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * LiveWebGalleryExtension.GalleryRequestHandler.cs
- *
- * Author(s):
- *	Anton Keks  <anton at azib.net>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.IO;
-using System.Text;
-using System.Reflection;
-
-using FSpot;
-using Mono.Unix;
-
-namespace LiveWebGalleryExtension	
-{	
-	public abstract class PhotoAwareRequestHandler : RequestHandler
-	{
-		protected string TagsToString (Photo photo) 
-		{
-			string tags = "";
-			foreach (Tag tag in photo.Tags) {
-				tags += ", " + tag.Name;
-			}
-			return tags.Length > 1 ? tags.Substring (2) : tags;
-		}
-
-	}
-	
-	public abstract class TemplateRequestHandler : PhotoAwareRequestHandler
-	{
-		protected string template;
-		
-		public TemplateRequestHandler (string name)
-		{
-			template = LoadTemplate (name);
-		}
-
-		protected string GetSubTemplate (StringBuilder s, string begin, string end) 
-		{
-			int start_pos = template.IndexOf (begin);
-			string sub = template.Substring (start_pos, template.IndexOf (end, start_pos) - start_pos - 1);
-			s.Replace (sub, "");
-			return sub.Substring (begin.Length, sub.Length - begin.Length);
-		}
-		
-		protected string LoadTemplate (string name)
-		{
-			using (TextReader s = new StreamReader (Assembly.GetCallingAssembly ().GetManifestResourceStream (name))) {
-				return s.ReadToEnd ();
-			}
-		}
-		
-		protected string Escape (string s) {
-			// javascript-proof
-			return s.Replace ("\"", "\\\"");
-		}
-	}
-	
-	public class GalleryRequestHandler : TemplateRequestHandler, ILiveWebGalleryOptions
-	{			
-		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; }
-		}
-
-		private bool limit_max_photos = true;
-		public bool LimitMaxPhotos {
-			get { return limit_max_photos; }
-			set { limit_max_photos = value; }
-		}
-
-		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; }
-		}
-
-		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") 
-		{
-			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"));
-		}
-		
-		public override void Handle (string requested, Stream stream)
-		{
-			Photo[] photos = GetChosenPhotos ();
-			
-			StringBuilder s = new StringBuilder (4096);
-			s.Append (template);
-			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", tagging_allowed ? Escape (editable_tag.Name) : "");
-			
-			string photo_template = GetSubTemplate (s, "BEGIN_PHOTO", "END_PHOTO");
-			StringBuilder photos_s = new StringBuilder (4096);
-			
-			num_photos = 0;
-			foreach (Photo photo in photos) {
-				photos_s.Append (PreparePhoto (photo_template, photo));
-				
-				if (++num_photos >= max_photos && limit_max_photos)
-					break;
-			}
-			s.Replace ("END_PHOTO", photos_s.ToString ());
-			
-			SendHeadersAndStartContent(stream, "Content-Type: text/html; charset=UTF-8");
-			SendLine (stream, s.ToString ());
-			
-			stats.BytesSent += s.Length;
-			stats.GalleryViews++;
-		}
-		
-		private Photo[] GetChosenPhotos () 
-		{
-			switch (query_type) {
-			case QueryType.ByTag:
-				return App.Instance.Database.Photos.Query (new Tag[] {query_tag});
-			case QueryType.CurrentView:
-				return App.Instance.Organizer.Query.Photos;
-			case QueryType.Selected:
-			default:
-				return App.Instance.Organizer.SelectedPhotos ();
-			}
-		}
-		
-		private string QueryTypeToString ()
-		{
-			switch (query_type) {
-			case QueryType.ByTag:
-				return query_tag.Name;
-			case QueryType.CurrentView:
-				return Catalog.GetString ("Current View");
-			case QueryType.Selected:
-			default:
-				return Catalog.GetString ("Selected");
-			}
-		}
-				
-		private string PreparePhoto (string template, Photo photo) 
-		{
-			string photo_s = template.Replace ("PHOTO_ID", photo.Id.ToString ())
-									 .Replace ("PHOTO_NAME", Escape (photo.Name))
-									 .Replace ("PHOTO_DESCRIPTION", Escape (photo.Description))
-									 .Replace ("VERSION_NAME", Escape (photo.DefaultVersion.Name));
-			string tags = TagsToString(photo);
-			photo_s = photo_s.Replace ("PHOTO_TAGS", Escape (tags));
-			
-			return photo_s;
-		}
-	}
-	
-	public class PingRequestHandler : RequestHandler
-	{
-		public override void Handle (string requested, Stream stream)
-		{
-			SendHeadersAndStartContent (stream);
-		}	
-	}
-	
-	public class TagAddRemoveRequestHandler : PhotoAwareRequestHandler
-	{
-		private ILiveWebGalleryOptions options;	
-		
-		public TagAddRemoveRequestHandler (ILiveWebGalleryOptions options) 
-		{
-			this.options = options;
-		}
-		
-		public override void Handle (string requested, Stream stream)
-		{
-			bool addTag = requested.StartsWith ("add");
-			if (!addTag && !requested.StartsWith ("remove")) {
-				SendError (stream, "400 Bad request " + requested);
-				return;
-			}
-			int slash_pos = requested.IndexOf ('/');
-			requested = requested.Substring (slash_pos + 1);
-			slash_pos = requested.IndexOf ('/');
-			uint photo_id = uint.Parse (requested.Substring (0, slash_pos));
-			string tag_name = requested.Substring (slash_pos + 1);
-			
-			if (!options.TaggingAllowed || !options.EditableTag.Name.Equals (tag_name)) {
-				SendError (stream, "403 Forbidden to change tag " + tag_name);
-				return;
-			}
-			
-			Photo photo = App.Instance.Database.Photos.Get (photo_id);
-			if (addTag)
-				photo.AddTag (options.EditableTag);
-			else
-				photo.RemoveTag (options.EditableTag);
-			App.Instance.Database.Photos.Commit (photo);
-			
-			SendHeadersAndStartContent (stream, "Content-type: text/plain;charset=UTF-8");
-			SendLine (stream, TagsToString (photo));
-		}		
-	}
-}
diff --git a/extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml b/extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml
deleted file mode 100644
index aa254c7..0000000
--- a/extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Addin namespace="FSpot"
-	id="LiveWebGallery"
-	name="LiveWebGallery"
-	version="0.7.0.0"
-	description="Share photos with other people on the same network via Web Browser"
-	author="Anton Keks"
-	url="http://blog.azib.net/2009/08/announcing-f-spot-live-web-gallery.html"
-	category="Tools"
-	defaultEnabled="false">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Menus/Tools">
-		<Command id = "LiveWebGallery" _label = "Live Web Gallery" command_type = "LiveWebGalleryExtension.LiveWebGallery" />
-	</Extension>
-</Addin>
diff --git a/extensions/Tools/LiveWebGallery/LiveWebGallery.cs b/extensions/Tools/LiveWebGallery/LiveWebGallery.cs
deleted file mode 100644
index e0208a3..0000000
--- a/extensions/Tools/LiveWebGallery/LiveWebGallery.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * LiveWebGalleryExtension.LiveWebGallery.cs
- *
- * Author(s):
- *	Anton Keks  <anton at azib.net>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.IO;
-using System.Net;
-using System.Collections.Generic;
-
-using Gtk;
-
-using FSpot;
-using FSpot.Extensions;
-using FSpot.Utils;
-using FSpot.Query;
-using FSpot.UI.Dialog;
-using Mono.Unix;
-
-namespace LiveWebGalleryExtension
-{
-	public class LiveWebGallery : ICommand
-	{
-		private static SimpleWebServer web_server;
-		private static ILiveWebGalleryOptions options;
-		private static LiveWebGalleryStats stats;
-		private LiveWebGalleryDialog dialog;
-		
-		public LiveWebGallery () 
-		{
-		}
-
-		public void Run (object o, EventArgs e)
-		{
-			if (web_server == null) {
-				stats = new LiveWebGalleryStats ();
-				RequestHandler gallery = new GalleryRequestHandler (stats);
-				options = gallery as ILiveWebGalleryOptions;
-				
-				web_server = new SimpleWebServer ();
-				web_server.Stats = stats;
-				web_server.RegisterHandler ("", gallery);
-				web_server.RegisterHandler ("gallery", gallery);
-				web_server.RegisterHandler ("ui", new ResourceRequestHandler ());
-				web_server.RegisterHandler ("ping", new PingRequestHandler ());
-				web_server.RegisterHandler ("photo", new PhotoRequestHandler (stats));
-				web_server.RegisterHandler ("thumb", new ThumbnailRequestHandler (stats));
-				web_server.RegisterHandler ("tag", new TagAddRemoveRequestHandler (options));
-			}
-
-			dialog = new LiveWebGalleryDialog (web_server, options, stats);
-			dialog.Response += HandleResponse;
-			dialog.ShowAll ();
-		}
-
-		void HandleResponse (object obj, ResponseArgs args) 
-		{
-			dialog.Destroy ();
-		}
-	}
-	
-	public enum QueryType {ByTag, CurrentView, Selected}
-
-	public interface ILiveWebGalleryOptions
-	{
-		QueryType QueryType {get; set;}
-		Tag QueryTag {get; set;}
-		bool LimitMaxPhotos {get; set;}
-		int MaxPhotos {get; set;}
-		bool TaggingAllowed {get; set;}
-		Tag EditableTag {get; set;}
-	}
-	
-	public class LiveWebGalleryStats : IWebStats
-	{
-		public event EventHandler StatsChanged;
-		
-		private int gallery_views;
-		public int GalleryViews {
-			get { return gallery_views; }
-			set { gallery_views = value; StatsChanged(this, null); }
-		}
-		
-		private int photo_views;
-		public int PhotoViews {
-			get { return photo_views; }
-			set { photo_views = value; StatsChanged(this, null); }
-		}
-		
-		private IPAddress last_ip;
-		public IPAddress LastIP {
-			get { return last_ip; }
-			set { last_ip = value; StatsChanged(this, null); }
-		}
-		
-		public int BytesSent;
-
-		public void IncomingRequest (IPAddress ip)
-		{
-			LastIP = ip;
-		}
-	}
-}
diff --git a/extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs b/extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs
deleted file mode 100644
index 6244757..0000000
--- a/extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * LiveWebGalleryExtension.LiveWebGalleryDialog.cs
- *
- * Author(s):
- *	Anton Keks  <anton at azib.net>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.Net;
-using System.Reflection;
-using FSpot;
-using FSpot.Extensions;
-using FSpot.Query;
-using Gtk;
-using Mono.Unix;
-
-namespace LiveWebGalleryExtension
-{
-	internal class LiveWebGalleryDialog : FSpot.UI.Dialog.BuilderDialog
-	{
-		[GtkBeans.Builder.Object] Gtk.LinkButton url_button;
-		[GtkBeans.Builder.Object] Gtk.ToggleButton activate_button;
-		[GtkBeans.Builder.Object] Gtk.Button copy_button;
-		[GtkBeans.Builder.Object] Gtk.Label stats_label;
-		[GtkBeans.Builder.Object] Gtk.RadioButton current_view_radio;
-		[GtkBeans.Builder.Object] Gtk.RadioButton tagged_radio;
-		[GtkBeans.Builder.Object] Gtk.RadioButton selected_radio;
-		[GtkBeans.Builder.Object] Gtk.Button tag_button;
-		[GtkBeans.Builder.Object] Gtk.CheckButton limit_checkbox;
-		[GtkBeans.Builder.Object] Gtk.SpinButton limit_spin;
-		[GtkBeans.Builder.Object] Gtk.CheckButton allow_tagging_checkbox;
-		[GtkBeans.Builder.Object] Gtk.Button tag_edit_button;
-
-		private SimpleWebServer server;
-		private ILiveWebGalleryOptions options;
-		private LiveWebGalleryStats stats;
-		private IPAddress last_ip;
-		private string last_client;
-		
-		public LiveWebGalleryDialog (SimpleWebServer server, ILiveWebGalleryOptions options, LiveWebGalleryStats stats)
-			: base (Assembly.GetExecutingAssembly (), "LiveWebGallery.ui", "live_web_gallery_dialog")
-		{
-			this.server = server;
-			this.options = options;
-			this.stats = stats;
-			Modal = false;
-
-			activate_button.Active = server.Active;
-			UpdateGalleryURL ();
-			limit_checkbox.Active = options.LimitMaxPhotos;
-			limit_spin.Sensitive = options.LimitMaxPhotos;
-			limit_spin.Value = options.MaxPhotos;
-			UpdateQueryRadios ();
-			HandleQueryTagSelected (options.QueryTag != null ? options.QueryTag : App.Instance.Database.Tags.GetTagById(1));
-			allow_tagging_checkbox.Active = options.TaggingAllowed;
-			tag_edit_button.Sensitive = options.TaggingAllowed;			
-			HandleEditableTagSelected (options.EditableTag != null ? options.EditableTag : App.Instance.Database.Tags.GetTagById(3));
-			HandleStatsChanged (null, null);
-						
-			activate_button.Toggled += HandleActivated;
-			copy_button.Clicked +=HandleCopyClicked; 
-			current_view_radio.Toggled += HandleRadioChanged;
-			tagged_radio.Toggled += HandleRadioChanged;
-			selected_radio.Toggled += HandleRadioChanged;
-			tag_button.Clicked += HandleQueryTagClicked;
-			limit_checkbox.Toggled += HandleLimitToggled; 
-			limit_spin.ValueChanged += HandleLimitValueChanged;
-			allow_tagging_checkbox.Toggled += HandleAllowTaggingToggled;
-			tag_edit_button.Clicked += HandleTagForEditClicked;
-			stats.StatsChanged += HandleStatsChanged;
-		}
-
-		void HandleCopyClicked(object sender, EventArgs e)
-		{
-			Clipboard.Get(Gdk.Atom.Intern("CLIPBOARD", true)).Text = url_button.Uri;
-		}
-		
-		void HandleStatsChanged (object sender, EventArgs e)
-		{
-			Gtk.Application.Invoke (delegate {
-				if (last_ip == null || !last_ip.Equals (stats.LastIP)) {
-					last_ip = stats.LastIP;
-					try {
-						last_client = Dns.GetHostEntry (last_ip).HostName;
-					}
-					catch (Exception) {
-						last_client = last_ip != null ? last_ip.ToString () : Catalog.GetString ("none");
-					}
-				}
-				stats_label.Text = string.Format(Catalog.GetString (" Gallery: {0},  Photos: {1},  Last client: {3}"), 
-				                                 stats.GalleryViews, stats.PhotoViews, stats.BytesSent / 1024, last_client);
-			});
-		}
-
-		void HandleLimitToggled (object sender, EventArgs e)
-		{
-			options.LimitMaxPhotos = limit_checkbox.Active;
-			limit_spin.Sensitive = limit_checkbox.Active;
-			HandleLimitValueChanged (sender, e);
-		}
-
-		void HandleLimitValueChanged (object sender, EventArgs e)
-		{
-			options.MaxPhotos = limit_spin.ValueAsInt;
-		}
-
-		void HandleRadioChanged (object o, EventArgs e)
-		{
-			tag_button.Sensitive = tagged_radio.Active;
-			if (tagged_radio.Active)
-				options.QueryType = QueryType.ByTag;
-			else if (current_view_radio.Active)
-				options.QueryType = QueryType.CurrentView;
-			else
-				options.QueryType = QueryType.Selected;
-		}
-		
-		void UpdateQueryRadios () 
-		{
-			switch (options.QueryType)
-			{
-			case QueryType.ByTag:
-				tagged_radio.Active = true;
-				break;
-			case QueryType.CurrentView:
-				current_view_radio.Active = true;
-				break;
-			case QueryType.Selected:
-			default:
-				selected_radio.Active = true;
-				break;
-			}
-			HandleRadioChanged (null, null);
-		}
-		
-		void HandleActivated (object o, EventArgs e)
-		{
-			if (activate_button.Active)
-				server.Start ();
-			else
-				server.Stop ();
-			
-			UpdateGalleryURL ();
-		}
-		
-		void UpdateGalleryURL () 
-		{
-			url_button.Sensitive = server.Active;
-			copy_button.Sensitive = server.Active;
-			if (server.Active) {
-				url_button.Uri = "http://" + server.HostPort;
-				url_button.Label = url_button.Uri;
-			} else {
-				url_button.Label = Catalog.GetString ("Gallery is inactive");
-			}
-		}
-		
-		void ShowTagMenuFor (Widget widget, TagMenu.TagSelectedHandler handler) 
-		{
-			TagMenu tag_menu = new TagMenu (null, App.Instance.Database.Tags);
-			tag_menu.TagSelected += handler;
-			tag_menu.Populate ();
-			int x, y;
-			GetPosition (out x, out y);
-			x += widget.Allocation.X; y += widget.Allocation.Y;
-			tag_menu.Popup (null, null, delegate (Menu menu, out int x_, out int y_, out bool push_in) {x_ = x; y_ = y; push_in = true;}, 0, 0);
-		}
-				
-		void HandleQueryTagClicked (object sender, EventArgs e)
-		{
-			ShowTagMenuFor (tag_button, HandleQueryTagSelected);
-		}
-
-		void HandleQueryTagSelected (Tag tag)
-		{
-			options.QueryTag = tag;
-			tag_button.Label = tag.Name;
-			tag_button.Image = tag.Icon != null ? new Gtk.Image (PixbufUtils.ScaleDown (tag.Icon, 16, 16)) : null;
-		}
-		
-		void HandleAllowTaggingToggled (object sender, EventArgs e)
-		{
-			tag_edit_button.Sensitive = allow_tagging_checkbox.Active;
-			options.TaggingAllowed = allow_tagging_checkbox.Active;
-		}
-		
-		void HandleTagForEditClicked (object sender, EventArgs e)
-		{
-			ShowTagMenuFor (tag_edit_button, HandleEditableTagSelected);
-		}
-		
-		void HandleEditableTagSelected (Tag tag)
-		{
-			options.EditableTag = tag;
-			tag_edit_button.Label = tag.Name;
-			tag_edit_button.Image = tag.Icon != null ? new Gtk.Image (PixbufUtils.ScaleDown (tag.Icon, 16, 16)) : null;
-		}
-	}
-}
diff --git a/extensions/Tools/LiveWebGallery/Makefile.am b/extensions/Tools/LiveWebGallery/Makefile.am
deleted file mode 100644
index 8545e4d..0000000
--- a/extensions/Tools/LiveWebGallery/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-ASSEMBLY = FSpot.Exporters.LiveWebGallery
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_LIVEWEBGALLERY)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	GalleryRequestHandler.cs \
-	LiveWebGallery.cs \
-	LiveWebGalleryDialog.cs \
-	PhotoRequestHandler.cs \
-	ResourceRequestHandler.cs \
-	SimpleWebServer.cs
-
-RESOURCES = \
-	LiveWebGallery.addin.xml \
-	ui/LiveWebGallery.ui \
-	ui/gallery.html \
-	ui/f-spot.css \
-	ui/f-spot.js
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/LiveWebGallery/Makefile.in b/extensions/Tools/LiveWebGallery/Makefile.in
deleted file mode 100644
index 96087ed..0000000
--- a/extensions/Tools/LiveWebGallery/Makefile.in
+++ /dev/null
@@ -1,812 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Tools/LiveWebGallery
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.LiveWebGallery
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_LIVEWEBGALLERY) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	GalleryRequestHandler.cs \
-	LiveWebGallery.cs \
-	LiveWebGalleryDialog.cs \
-	PhotoRequestHandler.cs \
-	ResourceRequestHandler.cs \
-	SimpleWebServer.cs
-
-RESOURCES = \
-	LiveWebGallery.addin.xml \
-	ui/LiveWebGallery.ui \
-	ui/gallery.html \
-	ui/f-spot.css \
-	ui/f-spot.js
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Tools/LiveWebGallery/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Tools/LiveWebGallery/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Tools/LiveWebGallery/PhotoRequestHandler.cs b/extensions/Tools/LiveWebGallery/PhotoRequestHandler.cs
deleted file mode 100644
index f15d6a5..0000000
--- a/extensions/Tools/LiveWebGallery/PhotoRequestHandler.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * LiveWebGalleryExtension.PhotoRequestHandler.cs
- *
- * Author(s):
- *	Anton Keks  <anton at azib.net>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.IO;
-using System.Text;
-
-using FSpot;
-using FSpot.Filters;
-using FSpot.Utils;
-using Hyena;
-
-namespace LiveWebGalleryExtension
-{	
-	public class PhotoRequestHandler : RequestHandler
-	{	
-		private LiveWebGalleryStats stats;
-		
-		public PhotoRequestHandler (LiveWebGalleryStats stats)
-		{
-			this.stats = stats;
-		}
-		
-		public override void Handle (string requested, Stream stream)
-		{
-			uint photo_id = uint.Parse (requested);
-			Photo photo = App.Instance.Database.Photos.Get (photo_id);
-			
-			SendImage (photo, stream);
-					}
-		
-		protected virtual void SendImage (Photo photo, Stream stream) 
-		{
-			string path = photo.DefaultVersion.Uri.LocalPath;
-			FileInfo file_info = new FileInfo(path);
-			if (!file_info.Exists) {
-				SendError (stream, "404 The file is not on the disk");
-				return;
-			}
-
-			FilterSet filters = new FilterSet ();
-			filters.Add (new JpegFilter ());
-			filters.Add (new ResizeFilter (1600));
-
-			using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
-				filters.Convert (request);
-				file_info = new FileInfo (request.Current.LocalPath);
-				SendFile (file_info, photo, stream);
-			}
-
-			if (stats != null)
-				stats.PhotoViews++;
-		}
-		
-		protected void SendFile (FileInfo file, Photo photo, Stream dest)
-		{
-			stats.BytesSent += (int)file.Length;			
-			Log.DebugFormat ("Sending {0}, {1} kb", file.FullName, file.Length / 1024);
-			SendHeadersAndStartContent(dest, "Content-Type: " + MimeTypeForExt (file.Extension),
-											 "Content-Length: " + file.Length,
-								 "Last-Modified: " + photo.Time.ToString ("r"));
-			using (Stream src = file.OpenRead ()) {
-				byte[] buf = new byte[10240];
-				int read;
-				while((read = src.Read(buf, 0, buf.Length)) != 0) {
-					dest.Write (buf, 0, read);
-				}
-			}
-		}
-	}
-	
-	public class ThumbnailRequestHandler : PhotoRequestHandler
-	{	
-		public ThumbnailRequestHandler (LiveWebGalleryStats stats) 
-			: base (stats) {}
-		
-		protected override void SendImage (Photo photo, Stream dest) 
-		{
-			Gdk.Pixbuf thumb = XdgThumbnailSpec.LoadThumbnail (photo.DefaultVersion.Uri, ThumbnailSize.Large);
-			byte[] buf = thumb.SaveToBuffer ("png");
-			SendHeadersAndStartContent(dest, "Content-Type: " + MimeTypeForExt (".png"),
-											 "Content-Length: " + buf.Length,
-								 "Last-Modified: " + photo.Time.ToString ("r"));
-			dest.Write (buf, 0, buf.Length);
-		}
-	}
-}
diff --git a/extensions/Tools/LiveWebGallery/ResourceRequestHandler.cs b/extensions/Tools/LiveWebGallery/ResourceRequestHandler.cs
deleted file mode 100644
index 22ce27f..0000000
--- a/extensions/Tools/LiveWebGallery/ResourceRequestHandler.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * LiveWebGalleryExtension.ResourceRequestHandler.cs
- *
- * Author(s):
- *	Anton Keks  <anton at azib.net>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.IO;
-using System.Text;
-using System.Reflection;
-
-using FSpot;
-
-namespace LiveWebGalleryExtension
-{	
-	public class ResourceRequestHandler : RequestHandler
-	{	
-		public override void Handle (string requested, Stream stream)
-		{
-			string resource = requested;
-			using (Stream source = Assembly.GetCallingAssembly ().GetManifestResourceStream (resource)) {
-				string ext = Path.GetExtension (resource);				
-				SendHeadersAndStartContent(stream, "Content-Type: " + MimeTypeForExt (ext),
-									   "Last-Modified: Fri, 21 Oct 2005 04:58:08 GMT");	// for caching
-				byte[] buf = new byte[10240];
-				int read;
-				while((read = source.Read(buf, 0, buf.Length)) != 0) {
-					stream.Write (buf, 0, read);
-				}
-			}
-		}
-	}	
-}
diff --git a/extensions/Tools/LiveWebGallery/SimpleWebServer.cs b/extensions/Tools/LiveWebGallery/SimpleWebServer.cs
deleted file mode 100644
index 2cec0bd..0000000
--- a/extensions/Tools/LiveWebGallery/SimpleWebServer.cs
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * LiveWebGalleryExtension.SimpleWebServer.cs
- *
- * Author(s):
- *	Anton Keks  <anton at azib.net>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-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 LiveWebGalleryExtension
-{		
-	public class SimpleWebServer : IService
-	{
-		private Thread server_thread;
-		private TcpListener listener;
-		private Dictionary<string, RequestHandler> handlers = new Dictionary<string, RequestHandler> ();
-		
-		private IWebStats stats;
-		public IWebStats Stats {
-			set { stats = value; }
-		}
-
-		public bool Active {
-			get { return server_thread != null && server_thread.IsAlive; }
-		}
-		
-		public string HostPort {
-			get {
-				string host = Dns.GetHostName ();
-				// TODO: add support for .local hostnames
-				foreach (IPAddress addr in Dns.GetHostAddresses(host)) {
-					if (!IPAddress.IsLoopback (addr)) {
-						host = addr.ToString ();
-					}
-				}
-				return host + ":" + (listener.LocalEndpoint as IPEndPoint).Port;
-			}
-		}
-		
-		public void RegisterHandler (string request_prefix, RequestHandler handler) {
-			handlers.Add (request_prefix, handler);
-		}
-
-		public bool Start () {
-			try {
-				listener = new TcpListener (IPAddress.Any, 8080);
-				listener.Start ();
-			}			
-			catch (SocketException) {
-				// address already in use? choose a random port then
-				listener = new TcpListener (IPAddress.Any, 0);
-				listener.Start ();
-			}
-			server_thread = new Thread (new ThreadStart(ServerLoop));
-			server_thread.Start ();
-			return true;
-		}
-		
-		public bool Stop () {
-			server_thread.Abort ();
-			server_thread.Join ();
-			listener.Stop ();
-			return true;
-		}
-
-		public void ServerLoop () 
-		{
-			Log.Information ("Listening on " + listener.LocalEndpoint);
-			
-			while (true) {
-				TcpClient client = listener.AcceptTcpClient ();
-				if (client.Connected) {
-					if (stats != null)
-						stats.IncomingRequest ((client.Client.RemoteEndPoint as IPEndPoint).Address);
-
-					RequestProcessor parser = new RequestProcessor (client, handlers);
-					new Thread (new ThreadStart (parser.Process)).Start ();
-				}
-			}
-		}		
-	
-		class RequestProcessor
-		{
-			private TcpClient client;
-			private Dictionary<string, RequestHandler> handlers;
-			
-			public RequestProcessor (TcpClient client, Dictionary<string, RequestHandler> handlers) {
-				this.client = client;						
-				this.handlers = handlers;
-			}
-			
-			public void Process () {			
-				using (client)  {
-					NetworkStream stream = client.GetStream ();
-					TextReader reader = new StreamReader (stream, Encoding.UTF8);
-					
-					string line = reader.ReadLine ();
-					if (line == null)
-						return;
-					
-					Log.Debug ("Incoming request from " + (client.Client.RemoteEndPoint as IPEndPoint).Address + ": " + line);
-
-					string request_method = null, request_string = null;
-					int space_pos = line.IndexOf (' ');
-					if (space_pos > 0) {
-						request_method = line.Substring (0, space_pos);
-						request_string = line.Substring (space_pos + 1, line.LastIndexOf (' ') - space_pos - 1);				
-					}
-					while (!string.IsNullOrEmpty(line = reader.ReadLine ())) {
-						// process other request headers here if needed
-					}
-					
-					using (stream) {						
-						if (!"GET".Equals (request_method)) { 
-							RequestHandler.SendError (stream, "400 Bad Request");
-							return;
-						}
-						
-						if (request_string.StartsWith ("/"))
-							request_string = request_string.Substring (1);
-						
-						string request_prefix = request_string;
-						int slash_pos = request_string.IndexOf ("/");
-						if (slash_pos >= 0) 
-							request_prefix = request_string.Substring (0, slash_pos);						
-					
-						if (!handlers.ContainsKey (request_prefix)) {
-							RequestHandler.SendError (stream, "404 No handler for \"" + request_string + "\"");
-							return;
-						}
-
-						try {
-							handlers[request_prefix].Handle (request_string.Substring (slash_pos+1), stream);
-						}
-						catch (Exception e) {
-							Log.Exception (e);
-							try {
-								RequestHandler.SendError (stream, "500 " + e.Message);
-							}
-							catch (IOException) {
-								// ignore already closed connections
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	public abstract class RequestHandler
-	{		
-		public abstract void Handle (string requested, Stream stream);
-
-		public static void SendLine (Stream stream, string header) {
-			byte[] buf = Encoding.UTF8.GetBytes (header + "\r\n");
-			stream.Write (buf, 0, buf.Length);				
-		}
-		
-		public static void SendStatus (Stream stream, string status) {
-			SendLine (stream, "HTTP/1.0 " + status + "\r\nServer: F-Spot");
-		}
-
-		public static void SendError (Stream stream, string error) {
-			SendStatus (stream, error);
-			StartContent (stream);
-			SendLine (stream, error);  
-		}
-
-		public static void StartContent (Stream stream) {
-			// sends the last empty newline after headers
-			SendLine (stream, "");
-		}
-		
-		public static void SendHeadersAndStartContent (Stream stream, params string[] headers) {
-			SendStatus (stream, "200 OK");
-			foreach (string header in headers) {
-				SendLine (stream, header);
-			}
-			StartContent (stream);
-		}
-		
-		public string MimeTypeForExt (string ext)
-		{
-			switch (ext.ToLower ()) {
-			case ".jpg":
-			case ".jpeg":
-				return "image/jpeg";
-			case ".png":
-				return "image/png";
-			case ".gif":
-				return "image/gif";
-			case ".js":
-				return "text/javascript";
-			case ".css":
-				return "text/css";
-			default:
-				throw new Exception ("Unknown file type: " + ext);
-			}
-		}
-
-	}
-	
-	public interface IWebStats
-	{
-		void IncomingRequest (IPAddress addr);
-	}
-}
diff --git a/extensions/Tools/Makefile.am b/extensions/Tools/Makefile.am
deleted file mode 100644
index 0becd70..0000000
--- a/extensions/Tools/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-SUBDIRS = 			\
-	ChangePhotoPath		\
-	DevelopInUFraw		\
-	HashJob			\
-	LiveWebGallery		\
-	MergeDb			\
-	RawPlusJpeg		\
-	RetroactiveRoll		\
-	ScreensaverConfig
diff --git a/extensions/Tools/Makefile.in b/extensions/Tools/Makefile.in
deleted file mode 100644
index e3ba1b2..0000000
--- a/extensions/Tools/Makefile.in
+++ /dev/null
@@ -1,677 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = extensions/Tools
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = \
-	ChangePhotoPath		\
-	DevelopInUFraw		\
-	HashJob			\
-	LiveWebGallery		\
-	MergeDb			\
-	RawPlusJpeg		\
-	RetroactiveRoll		\
-	ScreensaverConfig
-
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Tools/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Tools/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-	install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive distclean distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Tools/MergeDb/Makefile.am b/extensions/Tools/MergeDb/Makefile.am
deleted file mode 100644
index 7aa6041..0000000
--- a/extensions/Tools/MergeDb/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-ASSEMBLY = FSpot.Exporters.MergeDb
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_MERGEDB)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = \
-	MergeDb.cs \
-	MergeDbDialog.cs \
-	PickFolderDialog.cs
-
-RESOURCES = \
-	MergeDb.addin.xml \
-	MergeDb.glade
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/MergeDb/Makefile.in b/extensions/Tools/MergeDb/Makefile.in
deleted file mode 100644
index 435c45a..0000000
--- a/extensions/Tools/MergeDb/Makefile.in
+++ /dev/null
@@ -1,806 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Tools/MergeDb
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.MergeDb
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_MERGEDB) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = \
-	MergeDb.cs \
-	MergeDbDialog.cs \
-	PickFolderDialog.cs
-
-RESOURCES = \
-	MergeDb.addin.xml \
-	MergeDb.glade
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Tools/MergeDb/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Tools/MergeDb/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Tools/MergeDb/MergeDb.addin.xml b/extensions/Tools/MergeDb/MergeDb.addin.xml
deleted file mode 100644
index 3cd7fd0..0000000
--- a/extensions/Tools/MergeDb/MergeDb.addin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Addin namespace="FSpot"
-	id="MergeDb"
-	name="MergeDb"
-	version="0.7"
-	description="Merge another db back to the main one"
-	author="Stephane Delcroix"
-	url="http://f-spot.org/Extensions"
-	category="Tools"
-	defaultEnabled="false">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Menus/Tools">
-		<Command id = "MergeDb" _label = "Merge Db" command_type = "MergeDbExtension.MergeDb" />
-	</Extension>
-</Addin>
diff --git a/extensions/Tools/MergeDb/MergeDb.cs b/extensions/Tools/MergeDb/MergeDb.cs
deleted file mode 100644
index 6e0dfbc..0000000
--- a/extensions/Tools/MergeDb/MergeDb.cs
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * FSpot.MergeDb.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.IO;
-using System.Collections.Generic;
-
-using Gtk;
-
-using FSpot;
-using FSpot.Extensions;
-using FSpot.Query;
-using FSpot.UI.Dialog;
-using Mono.Unix;
-using Hyena;
-using Hyena.Widgets;
-
-namespace MergeDbExtension
-{
-	public class MergeDb : ICommand
-	{
-
-		Db from_db;
-		Db to_db;
-		Roll [] new_rolls;
-		MergeDbDialog mdd;
-
-		Dictionary<uint, Tag> tag_map; //Key is a TagId from from_db, Value is a Tag from to_db
-		Dictionary<uint, uint> roll_map;
-
-		public void Run (object o, EventArgs e)
-		{
-			from_db = new Db ();
-			from_db.ExceptionThrown += HandleDbException;
-			to_db = App.Instance.Database;
-
-			//ShowDialog ();
-			mdd = new MergeDbDialog (this);
-			mdd.FileChooser.FileSet += HandleFileSet;
-			mdd.Dialog.Response += HandleResponse;
-			mdd.ShowAll ();
-		}
-
-		void HandleDbException (Exception e)
-		{
-			Log.Exception (e);
-		}
-
-
-		internal Db FromDb {
-			get { return from_db; }
-		}
-
-		void HandleFileSet (object o, EventArgs e)
-		{
-			try {
-				string tempfilename = System.IO.Path.GetTempFileName ();
-				System.IO.File.Copy (mdd.FileChooser.Filename, tempfilename, true);
-
-				from_db.Init (tempfilename, true);
-
-				FillRolls ();
-				mdd.Rolls = new_rolls;
-
-				mdd.SetSensitive ();
-
-			} catch (Exception ex) {
-				string msg = Catalog.GetString ("Error opening the selected file");
-				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);
-				md.Run ();
-				md.Destroy ();
-
-				Log.Exception (ex);
-			}
-		}
-
-		void FillRolls ()
-		{
-			List<Roll> from_rolls = new List<Roll> (from_db.Rolls.GetRolls ());
-			Roll [] to_rolls = to_db.Rolls.GetRolls ();
-			foreach (Roll tr in to_rolls)
-				foreach (Roll fr in from_rolls.ToArray ())
-					if (tr.Time == fr.Time)
-						from_rolls.Remove (fr);
-			new_rolls = from_rolls.ToArray ();
-
-		}
-
-		void HandleResponse (object obj, ResponseArgs args) {
-			if (args.ResponseId == ResponseType.Accept) {
-				PhotoQuery query = new PhotoQuery (from_db.Photos);
-				query.RollSet = mdd.ActiveRolls == null ? null : new RollSet (mdd.ActiveRolls);
-				DoMerge (query, mdd.ActiveRolls, mdd.Copy);
-			}
-			mdd.Dialog.Destroy ();
-		}
-
-
-		public static void Merge (string path, Db to_db)
-		{
-			Log.WarningFormat ("Will merge db {0} into main f-spot db {1}", path, FSpot.Global.BaseDirectory + "/photos.db" );
-			Db from_db = new Db ();
-			from_db.Init (path, true);
-			//MergeDb mdb = new MergeDb (from_db, to_db);
-
-		}
-
-		void DoMerge (PhotoQuery query, Roll [] rolls, bool copy)
-		{
-			tag_map = new Dictionary<uint, Tag> ();
-			roll_map = new Dictionary<uint, uint> ();
-
-			Log.Warning ("Merging tags");
-			MergeTags (from_db.Tags.RootCategory);
-
-			Log.Warning ("Creating the rolls");
-			CreateRolls (rolls);
-
-			Log.Warning ("Importing photos");
-			ImportPhotos (query, copy);
-
-		}
-
-		void MergeTags (Tag tag_to_merge)
-		{
-			TagStore from_store = from_db.Tags;
-			TagStore to_store = to_db.Tags;
-
-			if (tag_to_merge != from_store.RootCategory) { //Do not merge RootCategory
-				Tag dest_tag = to_store.GetTagByName (tag_to_merge.Name);
-				if (dest_tag == null) {
-					Category parent = (tag_to_merge.Category == from_store.RootCategory) ?
-							to_store.RootCategory :
-							to_store.GetTagByName (tag_to_merge.Category.Name) as Category;
-					dest_tag = to_store.CreateTag (parent, tag_to_merge.Name, false);
-					//FIXME: copy the tag icon and commit
-				}
-				tag_map [tag_to_merge.Id] = dest_tag;
-			}
-
-			if (!(tag_to_merge is Category))
-				return;
-
-			foreach (Tag t in (tag_to_merge as Category).Children)
-				MergeTags (t);
-		}
-
-		void CreateRolls (Roll [] rolls)
-		{
-			if (rolls == null)
-				rolls = from_db.Rolls.GetRolls ();
-			RollStore from_store = from_db.Rolls;
-			RollStore to_store = to_db.Rolls;
-
-			foreach (Roll roll in rolls) {
-				if (from_store.PhotosInRoll (roll) == 0)
-					continue;
-				roll_map [roll.Id] = (to_store.Create (roll.Time).Id);
-			}
-		}
-
-		void ImportPhotos (PhotoQuery query, bool copy)
-		{
-			foreach (Photo p in query.Photos)
-				ImportPhoto (p, copy);
-		}
-
-		Dictionary<string, string> path_map = null;
-		Dictionary<string, string> PathMap {
-			get {
-				if (path_map == null)
-					path_map = new Dictionary<string, string> ();
-				return path_map;
-			}
-		}
-
-		void ImportPhoto (Photo photo, bool copy)
-		{
-			Log.WarningFormat ("Importing {0}", photo.Name);
-			PhotoStore to_store = to_db.Photos;
-
-			string photo_path = photo.VersionUri (Photo.OriginalVersionId).AbsolutePath;
-
-			while (!System.IO.File.Exists (photo_path)) {
-				Log.Debug ("Not found, trying the mappings...");
-				foreach (string key in PathMap.Keys) {
-					string path = photo_path;
-					path = path.Replace (key, PathMap [key]);
-					Log.DebugFormat ("Replaced path {0}", path);
-					if (System.IO.File.Exists (path)) {
-						photo_path = path;
-						break;;
-					}
-				}
-
-				if (System.IO.File.Exists (photo_path)) {
-					Log.Debug ("Exists!!!");
-					continue;
-				}
-
-				string [] parts = photo_path.Split (new char[] {'/'});
-				if (parts.Length > 6) {
-					string folder = String.Join ("/", parts, 0, parts.Length - 4);
-					PickFolderDialog pfd = new PickFolderDialog (mdd.Dialog, folder);
-					string new_folder = pfd.Run ();
-					pfd.Dialog.Destroy ();
-					if (new_folder == null) //Skip
-						return;
-					Log.DebugFormat ("{0} maps to {1}", folder, new_folder);
-
-					PathMap[folder] = new_folder;
-
-				} else
-					Log.Debug ("point me to the file");
-				Log.DebugFormat ("FNF: {0}", photo_path);
-
-			}
-
-			string destination;
-			Photo newp;
-
-			if (copy)
-				destination = FindImportDestination (new SafeUri (photo_path), photo.Time).AbsolutePath;
-			else
-				destination = photo_path;
-			var dest_uri = new SafeUri (photo_path);
-
-			photo.DefaultVersionId = 1;
-			photo.DefaultVersion.Uri = dest_uri;
-
-			if (photo.DefaultVersion.ImportMD5 == String.Empty) {
-				(photo.DefaultVersion as PhotoVersion).ImportMD5 = HashUtils.GenerateMD5 (photo.DefaultVersion.Uri);
-			}
-
-			if (photo_path != destination) {
-				System.IO.File.Copy (photo_path, destination);
-
-				try {
-					File.SetAttributes (destination, File.GetAttributes (destination) & ~FileAttributes.ReadOnly);
-					DateTime create = File.GetCreationTime (photo_path);
-					File.SetCreationTime (destination, create);
-					DateTime mod = File.GetLastWriteTime (photo_path);
-					File.SetLastWriteTime (destination, mod);
-				} catch (IOException) {
-					// we don't want an exception here to be fatal.
-				}
-			}
-
-			newp = to_store.CreateFrom (photo, roll_map [photo.RollId]);
-
-			if (newp == null)
-				return;
-
-			foreach (Tag t in photo.Tags) {
-				Log.WarningFormat ("Tagging with {0}", t.Name);
-				newp.AddTag (tag_map [t.Id]);
-			}
-
-			foreach (uint version_id in photo.VersionIds)
-				if (version_id != Photo.OriginalVersionId) {
-					PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
-					uint newv = newp.AddVersion (version.BaseUri, version.Filename, version.Name, version.IsProtected);
-					if (version_id == photo.DefaultVersionId)
-						newp.DefaultVersionId = newv;
-				}
-
-			//FIXME Import extra info (time, description, rating)
-			newp.Time = photo.Time;
-			newp.Description = photo.Description;
-			newp.Rating = photo.Rating;
-
-			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.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/extensions/Tools/MergeDb/MergeDbDialog.cs b/extensions/Tools/MergeDb/MergeDbDialog.cs
deleted file mode 100644
index e2bcf0b..0000000
--- a/extensions/Tools/MergeDb/MergeDbDialog.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * FSpot.MergeDbDialog.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using FSpot;
-using FSpot.Query;
-
-namespace MergeDbExtension
-{
-	internal class MergeDbDialog
-	{
-		[Glade.Widget] Gtk.Dialog mergedb_dialog;
-		[Glade.Widget] Gtk.Button apply_button;
-		[Glade.Widget] Gtk.FileChooserButton db_filechooser;
-		[Glade.Widget] Gtk.RadioButton newrolls_radio;
-		[Glade.Widget] Gtk.RadioButton allrolls_radio;
-		[Glade.Widget] Gtk.RadioButton singleroll_radio;
-		[Glade.Widget] Gtk.ComboBox rolls_combo;
-		[Glade.Widget] Gtk.RadioButton copy_radio;
-		[Glade.Widget] Gtk.RadioButton keep_radio;
-
-		MergeDb parent;
-
-		public event EventHandler FileSet;
-
-		public MergeDbDialog (MergeDb parent) {
-			this.parent = parent;
-
-			Glade.XML xml = new Glade.XML (null, "MergeDb.glade", "mergedb_dialog", "f-spot");
-			xml.Autoconnect (this);
-			mergedb_dialog.Modal = false;
-			mergedb_dialog.TransientFor = null;
-
-			db_filechooser.LocalOnly = false;
-			db_filechooser.FileSet += OnFileSet;
-
-			newrolls_radio.Toggled += HandleRollsChanged;
-			allrolls_radio.Toggled += HandleRollsChanged;
-			singleroll_radio.Toggled += HandleRollsChanged;
-		}
-
-		void HandleRollsChanged (object o, EventArgs e)
-		{
-			rolls_combo.Sensitive = singleroll_radio.Active;
-		}
-
-		public Gtk.FileChooserButton FileChooser {
-			get { return db_filechooser; }
-		}
-
-		Roll [] rolls;
-		public Roll [] Rolls {
-			get { return rolls; }
-			set {
-				rolls = value;
-				foreach (Roll r in rolls) {
-					uint numphotos = parent.FromDb.Rolls.PhotosInRoll (r);
-					// Roll time is in UTC always
-					DateTime date = r.Time.ToLocalTime ();
-					rolls_combo.AppendText (String.Format ("{0} ({1})", date.ToString("%dd %MMM, %HH:%mm"), numphotos));
-					rolls_combo.Active = 0;
-				}
-			}
-		}
-
-		public Roll [] ActiveRolls {
-			get {
-				if (allrolls_radio.Active)
-					return null;
-				if (newrolls_radio.Active)
-					return rolls;
-				else
-					return new Roll [] {rolls [rolls_combo.Active]};
-			}
-		}
-
-		public bool Copy {
-			get { return copy_radio.Active; }
-		}
-
-		public void OnFileSet (object o, EventArgs e)
-		{
-			if (FileSet != null)
-				FileSet (o, e);
-		}
-
-		public void SetSensitive ()
-		{
-			newrolls_radio.Sensitive = true;
-			allrolls_radio.Sensitive = true;
-			singleroll_radio.Sensitive = true;
-			apply_button.Sensitive = true;
-			copy_radio.Sensitive = true;
-			keep_radio.Sensitive = true;
-		}
-
-		public Gtk.Dialog Dialog {
-			get { return mergedb_dialog; }
-		}
-
-		public void ShowAll ()
-		{
-			mergedb_dialog.ShowAll ();
-		}
-	}
-}
diff --git a/extensions/Tools/MergeDb/PickFolderDialog.cs b/extensions/Tools/MergeDb/PickFolderDialog.cs
deleted file mode 100644
index a416ca1..0000000
--- a/extensions/Tools/MergeDb/PickFolderDialog.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * FSpot.PickFolderDialog.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using FSpot;
-using FSpot.Query;
-using Mono.Unix;
-using Hyena;
-
-namespace MergeDbExtension
-{
-	internal class PickFolderDialog
-	{
-		[Glade.Widget] Gtk.Dialog pickfolder_dialog;
-		[Glade.Widget] Gtk.FileChooserWidget pickfolder_chooser;
-		[Glade.Widget] Gtk.Label pickfolder_label;
-
-		public PickFolderDialog (Gtk.Dialog parent, string folder)
-		{
-			Glade.XML xml = new Glade.XML (null, "MergeDb.glade", "pickfolder_dialog", "f-spot");
-			xml.Autoconnect (this);
-			Log.Debug ("new pickfolder");
-			pickfolder_dialog.Modal = false;
-			pickfolder_dialog.TransientFor = parent;
-
-			pickfolder_chooser.LocalOnly = false;
-
-			pickfolder_label.Text = String.Format (Catalog.GetString ("<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>"), folder);
-			pickfolder_label.UseMarkup = true;
-		}
-
-		public string Run ()
-		{
-			pickfolder_dialog.ShowAll ();
-			if (pickfolder_dialog.Run () == -6)
-				return pickfolder_chooser.Filename;
-			else
-				return null;
-		}
-
-		public Gtk.Dialog Dialog {
-			get { return pickfolder_dialog; }
-		}
-
-	}
-}
diff --git a/extensions/Tools/RawPlusJpeg/Makefile.am b/extensions/Tools/RawPlusJpeg/Makefile.am
deleted file mode 100644
index 7fe9b4c..0000000
--- a/extensions/Tools/RawPlusJpeg/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-ASSEMBLY = FSpot.Exporters.RawPlusJpeg
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_RAWPLUSJPEG)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = RawPlusJpeg.cs
-
-RESOURCES = RawPlusJpeg.addin.xml
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/RawPlusJpeg/Makefile.in b/extensions/Tools/RawPlusJpeg/Makefile.in
deleted file mode 100644
index b23552f..0000000
--- a/extensions/Tools/RawPlusJpeg/Makefile.in
+++ /dev/null
@@ -1,799 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Tools/RawPlusJpeg
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.RawPlusJpeg
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_RAWPLUSJPEG) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = RawPlusJpeg.cs
-RESOURCES = RawPlusJpeg.addin.xml
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Tools/RawPlusJpeg/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Tools/RawPlusJpeg/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Tools/RawPlusJpeg/RawPlusJpeg.addin.xml b/extensions/Tools/RawPlusJpeg/RawPlusJpeg.addin.xml
deleted file mode 100644
index cba8b57..0000000
--- a/extensions/Tools/RawPlusJpeg/RawPlusJpeg.addin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Addin namespace="FSpot"
-	id="RawPlusJpeg"
-	name="RawPlusJpeg"
-	version="0.7"
-	description="Merge RAW+Jpeg as multiple versions of the same photo"
-	author="Stephane Delcroix"
-	url="http://f-spot.org/Extensions"
-	category="Tools"
-	defaultEnabled="false">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Menus/Tools">
-		<Command id = "MergeRawJpeg" _label = "Merge Raw" command_type = "RawPlusJpegExtension.RawPlusJpeg" />
-	</Extension>
-</Addin>
diff --git a/extensions/Tools/RawPlusJpeg/RawPlusJpeg.cs b/extensions/Tools/RawPlusJpeg/RawPlusJpeg.cs
deleted file mode 100644
index ea208ee..0000000
--- a/extensions/Tools/RawPlusJpeg/RawPlusJpeg.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * RawPlusJpeg.cs
- *
- * Author(s)
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.Collections.Generic;
-
-using Gtk;
-
-using FSpot;
-using FSpot.UI.Dialog;
-using FSpot.Extensions;
-using FSpot.Imaging;
-
-using Hyena;
-using Hyena.Widgets;
-
-namespace RawPlusJpegExtension
-{
-	public class RawPlusJpeg : ICommand
-	{
-		public void Run (object o, EventArgs e)
-		{
-			Log.Debug ("EXECUTING RAW PLUS JPEG EXTENSION");
-
-			if (ResponseType.Ok != HigMessageDialog.RunHigConfirmation (
-				App.Instance.Organizer.Window,
-				DialogFlags.DestroyWithParent,
-				MessageType.Warning,
-				"Merge Raw+Jpegs",
-				"This operation will merge Raw and Jpegs versions of the same image as one unique image. The Raw image will be the Original version, the jpeg will be named 'Jpeg' and all subsequent versions will keep their original names (if possible).\n\nNote: only enabled for some formats right now.",
-				"Do it now"))
-				return;
-
-			Photo [] photos = App.Instance.Database.Photos.Query ((Tag [])null, null, null, null);
-			Array.Sort (photos, new IBrowsableItemComparer.CompareDirectory ());
-
-			Photo raw = null;
-			Photo jpeg = null;
-
-			IList<MergeRequest> merge_requests = new List<MergeRequest> ();
-
-			for (int i = 0; i < photos.Length; i++) {
-				Photo p = photos [i];
-
-				if (!ImageFile.IsRaw (p.DefaultVersion.Uri) && !ImageFile.IsJpeg (p.DefaultVersion.Uri))
-					continue;
-
-				if (ImageFile.IsJpeg (p.DefaultVersion.Uri))
-					jpeg = p;
-				if (ImageFile.IsRaw (p.DefaultVersion.Uri))
-					raw = p;
-
-				if (raw != null && jpeg != null && SamePlaceAndName (raw, jpeg))
-					merge_requests.Add (new MergeRequest (raw, jpeg));
-			}
-
-			if (merge_requests.Count == 0)
-				return;
-
-			foreach (MergeRequest mr in merge_requests)
-				mr.Merge ();
-
-			App.Instance.Organizer.UpdateQuery ();
-		}
-
-		private static bool SamePlaceAndName (Photo p1, Photo p2)
-		{
-			return DirectoryPath (p1) == DirectoryPath (p2) &&
-				System.IO.Path.GetFileNameWithoutExtension (p1.Name) == System.IO.Path.GetFileNameWithoutExtension (p2.Name);
-		}
-
-
-		private static string DirectoryPath (Photo p)
-		{
-			return p.VersionUri (Photo.OriginalVersionId).GetBaseUri ();
-		}
-
-		class MergeRequest
-		{
-			Photo raw;
-			Photo jpeg;
-
-			public MergeRequest (Photo raw, Photo jpeg)
-			{
-				this.raw = raw;
-				this.jpeg = jpeg;
-			}
-
-			public void Merge ()
-			{
-				Log.DebugFormat ("Merging {0} and {1}", raw.VersionUri (Photo.OriginalVersionId), jpeg.VersionUri (Photo.OriginalVersionId));
-				foreach (uint version_id in jpeg.VersionIds) {
-					string name = jpeg.GetVersion (version_id).Name;
-					try {
-						raw.DefaultVersionId = raw.CreateReparentedVersion (jpeg.GetVersion (version_id) as PhotoVersion, version_id == Photo.OriginalVersionId);
-						if (version_id == Photo.OriginalVersionId)
-							raw.RenameVersion (raw.DefaultVersionId, "Jpeg");
-						else
-							raw.RenameVersion (raw.DefaultVersionId, name);
-					} catch (Exception e) {
-						Log.Exception (e);
-					}
-				}
-				raw.AddTag (jpeg.Tags);
-				uint [] version_ids = jpeg.VersionIds;
-				Array.Reverse (version_ids);
-				foreach (uint version_id in version_ids) {
-					try {
-						jpeg.DeleteVersion (version_id, true, true);
-					} catch (Exception e) {
-						Log.Exception (e);
-					}
-				}
-				raw.Changes.DataChanged = true;
-				App.Instance.Database.Photos.Commit (raw);
-				App.Instance.Database.Photos.Remove (jpeg);
-			}
-		}
-	}
-}
diff --git a/extensions/Tools/RetroactiveRoll/Makefile.am b/extensions/Tools/RetroactiveRoll/Makefile.am
deleted file mode 100644
index 91e3a16..0000000
--- a/extensions/Tools/RetroactiveRoll/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-ASSEMBLY = FSpot.Exporters.RetroactiveRoll
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_RETROACTIVEROLL)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = RetroactiveRoll.cs
-
-RESOURCES = RetroactiveRoll.addin.xml
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/RetroactiveRoll/Makefile.in b/extensions/Tools/RetroactiveRoll/Makefile.in
deleted file mode 100644
index 301e300..0000000
--- a/extensions/Tools/RetroactiveRoll/Makefile.in
+++ /dev/null
@@ -1,799 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Tools/RetroactiveRoll
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.RetroactiveRoll
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_RETROACTIVEROLL) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = RetroactiveRoll.cs
-RESOURCES = RetroactiveRoll.addin.xml
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Tools/RetroactiveRoll/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Tools/RetroactiveRoll/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Tools/RetroactiveRoll/RetroactiveRoll.addin.xml b/extensions/Tools/RetroactiveRoll/RetroactiveRoll.addin.xml
deleted file mode 100644
index d8e1b77..0000000
--- a/extensions/Tools/RetroactiveRoll/RetroactiveRoll.addin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Addin namespace="FSpot"
-	id="RetroactiveRoll"
-	name="RetroactiveRoll"
-	version="0.7"
-	description="Retroactively assign old photos to import rolls"
-	author="Andy Wingo"
-	url="http://f-spot.org/Extensions"
-	category="Tools">
-	<Dependencies>
-		<Addin id="Core" version="0.7"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Menus/PhotoPopup">
-		<Command id = "RetroactiveRoll" _label = "Reassign to new import roll" command_type = "RetroactiveRoll.RetroactiveRoll"/>
-	</Extension>
-</Addin>
diff --git a/extensions/Tools/RetroactiveRoll/RetroactiveRoll.cs b/extensions/Tools/RetroactiveRoll/RetroactiveRoll.cs
deleted file mode 100644
index 310277f..0000000
--- a/extensions/Tools/RetroactiveRoll/RetroactiveRoll.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * RetroactiveRoll.cs
- *
- * Author(s)
- * 	Andy Wingo  <wingo at pobox.com>
- *
- * This is free software. See COPYING for details
- */
-
-
-using FSpot;
-using FSpot.Extensions;
-using Mono.Unix;
-using System;
-using Mono.Data.SqliteClient;
-using Banshee.Database;
-using Hyena;
-
-namespace RetroactiveRoll
-{
-	public class RetroactiveRoll: ICommand
-	{
-		public void Run (object o, EventArgs e)
-		{
-			Photo[] photos = App.Instance.Organizer.SelectedPhotos ();
-
-			if (photos.Length == 0) {
-				Log.Debug ("no photos selected, returning");
-				return;
-			}
-
-			DateTime import_time = photos[0].Time;
-			foreach (Photo p in photos)
-				if (p.Time > import_time)
-					import_time = p.Time;
-
-			RollStore rolls = App.Instance.Database.Rolls;
-			Roll roll = rolls.Create(import_time);
-			foreach (Photo p in photos) {
-				DbCommand cmd = new DbCommand ("UPDATE photos SET roll_id = :roll_id " +
-							       "WHERE id = :id ",
-							       "roll_id", roll.Id,
-							       "id", p.Id);
-				App.Instance.Database.Database.ExecuteNonQuery (cmd);
-				p.RollId = roll.Id;
-			}
-			Log.Debug ("RetroactiveRoll done: " + photos.Length + " photos in roll " + roll.Id);
-		}
-	}
-}
diff --git a/extensions/Tools/ScreensaverConfig/Makefile.am b/extensions/Tools/ScreensaverConfig/Makefile.am
deleted file mode 100644
index 1edc011..0000000
--- a/extensions/Tools/ScreensaverConfig/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-ASSEMBLY = FSpot.Exporters.ScreensaverConfig
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_SCREENSAVERCONFIG)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = ScreensaverConfig.cs
-
-RESOURCES = \
-	ScreensaverConfig.addin.xml \
-	ScreensaverConfigDialog.ui
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/ScreensaverConfig/Makefile.in b/extensions/Tools/ScreensaverConfig/Makefile.in
deleted file mode 100644
index 44febb4..0000000
--- a/extensions/Tools/ScreensaverConfig/Makefile.in
+++ /dev/null
@@ -1,802 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Tools/ScreensaverConfig
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.ScreensaverConfig
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_SCREENSAVERCONFIG) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = ScreensaverConfig.cs
-RESOURCES = \
-	ScreensaverConfig.addin.xml \
-	ScreensaverConfigDialog.ui
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Tools/ScreensaverConfig/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Tools/ScreensaverConfig/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Tools/ScreensaverConfig/ScreensaverConfig.addin.xml b/extensions/Tools/ScreensaverConfig/ScreensaverConfig.addin.xml
deleted file mode 100644
index 4f77fb7..0000000
--- a/extensions/Tools/ScreensaverConfig/ScreensaverConfig.addin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Addin namespace="FSpot"
-	id="ScreensaverConfig"
-	name="Screensaver Configuration"
-	version="0.7.0.0"
-	description="Screensaver options"
-	author="Stephane Delcroix"
-	url="http://f-spot.org/Extensions"
-	category="Tools"
-	defaultEnabled="true">
-	<Dependencies>
-		<Addin id="Core" version="0.7.0.0"/>
-	</Dependencies>
-	<Extension path = "/FSpot/Menus/Tools">
-		<Command id = "ScreensaverConfig" _label = "Configure Screensaver" command_type = "ScreensaverConfig.ScreensaverConfig" />
-	</Extension>
-</Addin>
diff --git a/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs b/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs
deleted file mode 100644
index 3a3644d..0000000
--- a/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-//
-// ScreensaverConfig.ScreensaverConfig.cs
-//
-// Author(s):
-//	Stephane Delcroix  <stephane at delcroix.org>
-//
-// Copyright (c) 2009 Novell, Inc.
-//
-// This is open source software. See COPYING for details.
-//
-
-using System;
-using System.Reflection;
-
-using Gtk;
-
-using FSpot;
-using FSpot.UI.Dialog;
-using FSpot.Extensions;
-using FSpot.Widgets;
-
-namespace ScreensaverConfig
-{
-	public class ScreensaverConfig : ICommand
-	{
-		const string SaverCommand = "screensavers-f-spot-screensaver";
-		const string SaverMode = "single";
-		const string GNOME_SCREENSAVER_THEME = "/apps/gnome-screensaver/themes";
-		const string GNOME_SCREENSAVER_MODE = "/apps/gnome-screensaver/mode";
-		const string SCREENSAVER_TAG = Preferences.SCREENSAVER_TAG;
-		const string SCREENSAVER_DELAY = Preferences.SCREENSAVER_DELAY;
-		const double default_delay = 2.0;
-
-		public void Run (object o, EventArgs e)
-		{
-			var d = new ScreensaverConfigDialog ();
-			d.Run ();
-			d.Destroy ();
-		}
-
-		class ScreensaverConfigDialog : BuilderDialog
-		{
-			[GtkBeans.Builder.Object] Range delay_scale;
-			[GtkBeans.Builder.Object] Table table;
-			[GtkBeans.Builder.Object] RadioButton all_radio;
-			[GtkBeans.Builder.Object] RadioButton tagged_radio;
-			[GtkBeans.Builder.Object] Button do_button;
-			Adjustment delay_adjustment;
-			MenuButton tag_button;
-
-			public ScreensaverConfigDialog () : base (Assembly.GetExecutingAssembly (), "ScreensaverConfigDialog.ui", "screensaver-config-dialog")
-			{
-				delay_adjustment = new Adjustment (default_delay, 1.0, 20.0, .5, 5, 0);
-				LoadPreference (SCREENSAVER_DELAY);
-				delay_scale.Adjustment = delay_adjustment;
-				delay_adjustment.ValueChanged += HandleDelayChanged;
-				
-				tag_button = new MenuButton ();
-				tag_button.SizeRequested += delegate (object sender, SizeRequestedArgs args) {
-					var req = args.Requisition;
-					req.Width += 100;
-					args.Requisition = req;
-				};
-				TagMenu menu = new TagMenu (null, App.Instance.Database.Tags);
-				menu.Populate (false);
-				menu.TagSelected += HandleTagSelected;
-				tag_button.Menu = menu;
-				tag_button.ShowAll ();
-				table.Attach (tag_button, 2, 3, 1, 2);
-				LoadPreference (SCREENSAVER_TAG);
-				all_radio.Toggled += HandleTagRadioToggled;
-
-				do_button.Clicked += HandleUseFSpot;
-			}
-
-			void LoadPreference (string key)
-			{
-				switch (key) {
-				case SCREENSAVER_DELAY:
-					var delay = Preferences.Get<double> (key);
-					if (delay == 0.0)
-						delay = default_delay;
-					if (delay < delay_adjustment.Lower)
-						delay = delay_adjustment.Lower;
-					if (delay > delay_adjustment.Upper)
-						delay = delay_adjustment.Upper;
-					delay_adjustment.Value = delay;
-					break;
-				case SCREENSAVER_TAG:
-					var screensaver_tag = Preferences.Get<int> (key);
-					Tag t = App.Instance.Database.Tags.GetTagById (screensaver_tag);
-					if (screensaver_tag == 0 || t == null) {
-						all_radio.Active = true;
-						tag_button.Sensitive = false;
-					} else {
-						tagged_radio.Active = true;
-						tag_button.Label = t.Name;
-					}
-					break;
-				}
-			}
-
-			void HandleDelayChanged (object sender, EventArgs e)
-			{
-				Preferences.Set (SCREENSAVER_DELAY, delay_adjustment.Value);
-			}
-
-			void HandleTagRadioToggled (object sender, EventArgs e)
-			{
-				tag_button.Sensitive = tagged_radio.Active;
-				if (all_radio.Active)
-					Preferences.Set (SCREENSAVER_TAG, 0);
-				else
-					HandleTagSelected (((tag_button.Menu as Menu).Active as TagMenu.TagMenuItem).Value);
-			}
-
-			void HandleTagSelected (Tag t)
-			{
-				tag_button.Label = t.Name;
-				Preferences.Set (SCREENSAVER_TAG, (int) t.Id);
-			}
-
-			void HandleUseFSpot (object sender, EventArgs e)
-			{
-				Preferences.Set (GNOME_SCREENSAVER_MODE, SaverMode);
-				Preferences.Set (GNOME_SCREENSAVER_THEME, new string [] { SaverCommand });
-			}
-		}
-	}
-}
diff --git a/extensions/Transitions/CoverTransition/CoverTransition.addin.xml b/extensions/Transitions/CoverTransition/CoverTransition.addin.xml
deleted file mode 100644
index 330d4c4..0000000
--- a/extensions/Transitions/CoverTransition/CoverTransition.addin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Addin namespace="FSpot"
-	id="CoverTransition"
-	version="0.7.0.0"
-	name="Cover Transition"
-	description="A Slideshow transition that covers images"
-	author="Stephane Delcroix"
-	url="http://f-spot.org/Extensions"
-	category="Transitions">
-	<Dependencies>
-		<Addin id="Core" version="0.7.0.0"/>
-	</Dependencies>
-	<Extension path = "/FSpot/SlideShow">
-		<Transition transition_type="CoverTransition.CoverTransition"/>
-	</Extension>
-</Addin>
diff --git a/extensions/Transitions/CoverTransition/CoverTransition.cs b/extensions/Transitions/CoverTransition/CoverTransition.cs
deleted file mode 100644
index 0164de2..0000000
--- a/extensions/Transitions/CoverTransition/CoverTransition.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// FSpot.Widgets.CoverTransition.cs
-//
-// Author(s):
-//	Stephane Delcroix  <stephane at delcroix.org>
-//
-// Copyright (c) 2009 Novell, Inc.
-//
-// This is open source software. See COPYING for details.
-//
-
-using System;
-
-using Cairo;
-using Gdk;
-
-using FSpot.Utils;
-using FSpot.Widgets;
-
-using Color = Cairo.Color;
-
-namespace CoverTransition
-{
-	public class CoverTransition : CairoTransition
-	{
-		public CoverTransition () : base ("Cover")
-		{
-		}
-
-		protected override void Draw (Context cr, Pixbuf prev, Pixbuf next, int width, int height, double progress)
-		{
-			cr.Color = new Color (0, 0, 0);
-			if (next != null) {
-				double scale = Math.Min ((double)width/(double)next.Width, (double)height/(double)next.Height);
-				cr.Save ();
-
-				cr.Translate (width * (1.0 - progress), 0);
-
-				cr.Rectangle (0, 0, width, .5 * (height - scale*next.Height));
-				cr.Fill ();
-
-				cr.Rectangle (0, height - .5 * (height - scale*next.Height), width, .5 * (height - scale*next.Height));
-				cr.Fill ();
-
-				cr.Rectangle (0, 0, .5 * (width - scale*next.Width), height);
-				cr.Fill ();
-
-				cr.Rectangle (width - .5 * (width - scale*next.Width), 0, .5 * (width - scale*next.Width), height);
-				cr.Fill ();
-
-				cr.Rectangle (0, 0, width, height);
-				cr.Scale (scale, scale);
-				CairoHelper.SetSourcePixbuf (cr, next, .5 * ((double)width/scale - next.Width), .5 * ((double)height/scale - next.Height));
-				cr.Paint ();
-				cr.Restore ();
-			}
-		}
-	}
-}
diff --git a/extensions/Transitions/CoverTransition/Makefile.am b/extensions/Transitions/CoverTransition/Makefile.am
deleted file mode 100644
index d55378a..0000000
--- a/extensions/Transitions/CoverTransition/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-ASSEMBLY = FSpot.Exporters.CoverTransition
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_COVERTRANSITION)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-
-SOURCES = CoverTransition.cs
-
-RESOURCES = CoverTransition.addin.xml
-
-include $(top_srcdir)/build/build.mk
diff --git a/extensions/Transitions/CoverTransition/Makefile.in b/extensions/Transitions/CoverTransition/Makefile.in
deleted file mode 100644
index ebe47e9..0000000
--- a/extensions/Transitions/CoverTransition/Makefile.in
+++ /dev/null
@@ -1,799 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = extensions/Transitions/CoverTransition
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Exporters.CoverTransition
-TARGET = library
-LINK = $(REF_FSPOT_EXTENSION_COVERTRANSITION) $(am__append_1)
-INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-SOURCES = CoverTransition.cs
-RESOURCES = CoverTransition.addin.xml
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Transitions/CoverTransition/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Transitions/CoverTransition/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/extensions/Transitions/Makefile.am b/extensions/Transitions/Makefile.am
deleted file mode 100644
index a07e737..0000000
--- a/extensions/Transitions/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-SUBDIRS = 			\
-	CoverTransition
diff --git a/extensions/Transitions/Makefile.in b/extensions/Transitions/Makefile.in
deleted file mode 100644
index 8921227..0000000
--- a/extensions/Transitions/Makefile.in
+++ /dev/null
@@ -1,670 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = extensions/Transitions
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = \
-	CoverTransition
-
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Transitions/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign extensions/Transitions/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-	install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive distclean distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/help/Makefile.am b/help/Makefile.am
index fb47cf6..39d0707 100644
--- a/help/Makefile.am
+++ b/help/Makefile.am
@@ -47,6 +47,6 @@ DOC_FIGURES = \
     figures/f-spot-soft-focus.png \
     figures/f-spot-straighten.png
 
-DOC_LINGUAS = de
+DOC_LINGUAS = de es
 dist-hook: doc-dist-hook
 endif
diff --git a/help/Makefile.in b/help/Makefile.in
index f0477f0..3939a58 100644
--- a/help/Makefile.in
+++ b/help/Makefile.in
@@ -70,6 +70,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -93,6 +94,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -102,9 +107,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -118,6 +120,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -145,6 +148,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -241,14 +245,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -455,7 +457,7 @@ top_srcdir = @top_srcdir@
 @HAVE_GNOME_DOC_UTILS_TRUE@    figures/f-spot-soft-focus.png \
 @HAVE_GNOME_DOC_UTILS_TRUE@    figures/f-spot-straighten.png
 
- at HAVE_GNOME_DOC_UTILS_TRUE@DOC_LINGUAS = de
+ at HAVE_GNOME_DOC_UTILS_TRUE@DOC_LINGUAS = de es
 all: all-am
 
 .SUFFIXES:
diff --git a/help/es/23hq.page b/help/es/23hq.page
new file mode 100644
index 0000000..53f5986
--- /dev/null
+++ b/help/es/23hq.page
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="23hq">
+
+  <info>
+    <link type="guide" xref="upload-to-web"/>
+    <desc>Upload photos to 23hq</desc>
+  </info>
+
+  <title>23hq</title>
+
+  <p>To upload photos to 23hq you will need a 23hq account, as well as
+     internet access.  Also, the 23hq
+     <link xref="extensions">extension</link> must be installed and enabled.
+     </p>
+</page>
diff --git a/help/es/adjust-color.page b/help/es/adjust-color.page
new file mode 100644
index 0000000..47659e0
--- /dev/null
+++ b/help/es/adjust-color.page
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="topic" id="adjust-color">
+  <info>
+    <link type="guide" xref="colors"/>
+    <desc>Adjusting the colors of a photo</desc>
+  </info>
+
+  <title>
+    Adjust Color
+  </title>
+  <p>As far as the editing tools in F-Spot, adjusting the color is easily the
+     most powerful.  The color editor allows you to adjust:</p>
+  <terms>
+    <item>
+      <title>Exposición</title>
+      <p>This adjustment simulates lengthening or shortening the exposure time.
+      </p>
+    </item>
+    <item>
+      <title>Saturación</title>
+      <p>This adjustment simulates adjusting the amount of color in the image, i.e.
+         sliding it to the left decrease color, making it black and white,
+         while sliding it to the right will increase the vibrancy of colors.
+      </p>
+    </item>
+    <item>
+      <title>Brillo</title>
+      <p>This adjustment increase the brightness of colors.  Increasing this
+           too much will make colors appear "washed out", while decreasing it
+           too much will make the image too dark and lacking in contrast. </p>
+    </item>
+    <item>
+      <title>Tono</title>
+      <p>This adjustment causes colors to "rotate" along the color wheel.</p>
+    </item>
+    <item>
+      <title>Contraste</title>
+      <p>This adjustment adjusts the contrast ratio, that is, the ratio of
+         difference between dark and light pixels.  Sliding to the left
+         decreases contrast, while sliding to the right will increase contrast.
+         </p>
+    </item>
+    <item>
+      <title>Temp</title>
+      <p>This adjust changes the color temperature, measured in degrees Kelvin.
+      </p>
+    </item>
+    <item>
+      <title>Tint</title>
+      <p>This adjustment allows you to tinge the photo with a color.</p>
+    </item>
+  </terms>
+</page>
diff --git a/help/es/cd.page b/help/es/cd.page
new file mode 100644
index 0000000..8cb772d
--- /dev/null
+++ b/help/es/cd.page
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="cd">
+
+  <info>
+    <link type="guide" xref="index#sharing"/>
+    <desc>Burn photos to a CD</desc>
+  </info>
+
+  <title>Exportar a CD</title>
+</page>
diff --git a/help/es/colors.page b/help/es/colors.page
new file mode 100644
index 0000000..fb2bf8d
--- /dev/null
+++ b/help/es/colors.page
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="guide" id="colors">
+  <info>
+    <link type="guide" xref="index#editing" group="colors"/>
+    <desc>Edit the colors of your photos</desc>
+  </info>
+
+  <title>Edición de color</title>
+  <p><app>F-Spot</app> supports several modes of color manipulation.</p>
+  <terms>
+    <item>
+      <title>Desaturar</title>
+      <p>This mode eliminates all saturation, turning a color image into a
+         black and white image.</p>
+    </item>
+    <item>
+      <title>Tono sepia</title>
+      <p>This mode simulates a photo being created with sepia toner.</p>
+    </item>
+    <item>
+      <title>Ajustar el color</title>
+      <p>This mode automatically adjusts the colors to a set profile.</p>
+    </item>
+  </terms>
+</page>
diff --git a/help/es/date-search.page b/help/es/date-search.page
new file mode 100644
index 0000000..c3f2b4c
--- /dev/null
+++ b/help/es/date-search.page
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="date-search">
+
+  <info>
+    <link type="guide" xref="index#searching"/>
+    <desc>Search photos by date</desc>
+  </info>
+
+  <title>Buscar por fecha</title>
+
+  <p>Para buscar por fecha:</p>
+  <steps>
+    <item>
+      <p>Select <guiseq><gui>Find</gui><gui>By Date</gui>
+      <gui>Set Date Range...</gui></guiseq>.</p>
+    </item>
+    <item>
+      <p>Select a time period to from which to view photos.
+         This can by done by selecting a set period, such as a week, or by
+         specifying dates.</p>
+    </item>
+    <item>
+      <p>Click <gui>Ok</gui>.</p>
+    </item>
+  </steps>
+  <p>Alternatively, you can use the timeline.  To use the timeline:</p>
+  <steps>
+    <item>
+      <p>Make sure the timeline is enabled by selecting <guiseq><gui>View</gui>
+      <gui>Components</gui></guiseq> and making sure that <gui>Timeline</gui>
+      is checked.</p>
+    </item>
+    <item>
+      <p>In the timeline, click the bar corresponding to the time period you
+         wish to look at.</p>
+    </item>
+  </steps>
+  <p>To stop searching by date:</p>
+  <steps>
+    <item>
+      <p>Select <guiseq><gui>Find</gui><gui>By Date</gui>
+      <gui>Clear Date Range</gui></guiseq>.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/enhancements.page b/help/es/enhancements.page
new file mode 100644
index 0000000..93dac97
--- /dev/null
+++ b/help/es/enhancements.page
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="topic" id="enhancements">
+  <info>
+    <link type="guide" xref="index#editing" group="enhancements"/>
+    <desc>Simple enhancements for your photos</desc>
+  </info>
+
+  <title>
+    Enhancements
+  </title>
+
+  <p>Currently, there are two main enhancements that <app>F-Spot</app>
+     supports: red-eye removal and the automatic enhancement of color.</p>
+  <p>To remove red-eye:</p>
+  <steps>
+    <item>
+      <p>By double-clicking, select the photo on which you wish to use the
+         red-eye removal tool.</p>
+    </item>
+    <item>
+      <p>Click <gui>Red-Eye Removal</gui> in the Edit panel.</p>
+    </item>
+    <item>
+      <p>Select the area from which you wish to remove red-eye.  Note:  If
+         the contains many red areas, you may wish to select each eye
+         individually.</p>
+    </item>
+    <item>
+      <p>Click <gui>Fix!</gui>.</p>
+    </item>
+  </steps>
+  <p>To automatically enhance the colors of the photo:</p>
+  <steps>
+    <item>
+      <p>By double-clicking, select the photo which you wish to enhance.</p>
+    </item>
+    <item>
+      <p>Click <gui>Auto Color</gui>.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/es.po b/help/es/es.po
new file mode 100644
index 0000000..983a015
--- /dev/null
+++ b/help/es/es.po
@@ -0,0 +1,1115 @@
+# translation of f-spot.help.master.po to Español
+# Spanish translation for f-spot.
+# Copyright (C) 2010 f-spot's COPYRIGHT HOLDER
+# This file is distributed under the same license as the f-spot package.
+# Jorge González <jorgegonz at svn.gnome.org>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: f-spot.help.master\n"
+"POT-Creation-Date: 2010-08-02 14:25+0000\n"
+"PO-Revision-Date: 2010-08-03 07:32+0200\n"
+"Last-Translator: Jorge González <jorgegonz at svn.gnome.org>\n"
+"Language-Team: Español <gnome-es-list at gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: C/zooomr.page:8(desc)
+msgid "Upload photos to Zooomr"
+msgstr ""
+
+#: C/zooomr.page:11(title)
+msgid "Zooomr"
+msgstr ""
+
+#: C/zooomr.page:15(p)
+msgid ""
+"To upload photos to Zooomr you will need a Zooomr account, as well as "
+"internet access. Also, the Zooomr <link xref=\"extensions\">extension</link> "
+"must be installed and enabled."
+msgstr ""
+
+#: C/versioning.page:8(desc)
+msgid "Track different versions of your photos"
+msgstr ""
+
+#: C/versioning.page:11(title)
+msgid "Versioning"
+msgstr "Versionado"
+
+#: C/versioning.page:14(p)
+msgid ""
+"<app>F-Spot</app> allows you to keep multiple versions of your photos. This "
+"is especially useful when editing photos, as you can quickly see the "
+"difference between the edited version and the original."
+msgstr ""
+
+#: C/versioning.page:17(p)
+msgid "To switch between versions while editing:"
+msgstr ""
+
+#: C/versioning.page:20(p)
+msgid "Double-click the photo you wish to edit."
+msgstr ""
+
+#: C/versioning.page:23(p)
+msgid ""
+"In the sidebar, you will see a drop-down box labeled <gui>Version:</gui>. To "
+"select a version to view, select it in the drop-down box."
+msgstr ""
+
+#: C/upload-to-web.page:8(desc)
+msgid "Upload photos to various web services"
+msgstr ""
+
+#: C/upload-to-web.page:11(title)
+msgid "Upload to Web"
+msgstr ""
+
+#: C/upload-to-web.page:14(p)
+msgid ""
+"<app>F-Spot</app> allows you to upload photos to popular web services, "
+"including Google's PicasaWeb and Flickr."
+msgstr ""
+
+#: C/tags.page:6(desc)
+msgid "A brief introduction to the tagging capabilities of F-Spot"
+msgstr ""
+
+#: C/tags.page:9(title)
+msgid "Tags"
+msgstr "Etiquetas"
+
+#: C/tags.page:12(p)
+msgid ""
+"Like certain other photo managers, <app>F-Spot</app> lets you tag your "
+"photos, allowing for quick, easy content-based searching of your photos. You "
+"can tag people, events, places, favorite things, or even make your own "
+"groups of tags."
+msgstr ""
+
+#: C/tags.page:17(title)
+msgid "Working with Tags"
+msgstr ""
+
+#: C/tag-search.page:8(desc)
+msgid "Search photos using tags"
+msgstr ""
+
+#: C/tag-search.page:11(title)
+msgid "Search by Tag"
+msgstr ""
+
+#: C/tag-search.page:15(p)
+msgid "There are several methods to search by tags."
+msgstr ""
+
+#: C/tag-search.page:16(p)
+msgid "Method One: Double-click the tags you wish to search for."
+msgstr ""
+
+#: C/tag-search.page:17(p) C/tag-remove.page:28(p) C/tag-creation.page:32(p)
+#: C/tag-attach.page:29(p) C/ratings.page:25(p)
+msgid "Method Two:"
+msgstr ""
+
+#: C/tag-search.page:20(p)
+msgid ""
+"Enable the Find bar by clicking <guiseq><gui>Find</gui><gui>Show Find bar</"
+"gui></guiseq>."
+msgstr ""
+
+#: C/tag-search.page:24(p)
+msgid "Drag the tags you wish to search for into the newly-enabled Find bar."
+msgstr ""
+
+#: C/tag-search.page:27(p)
+msgid ""
+"To remove a tag from your search, right-click the tag in the Find bar and "
+"click <gui>Remove From Search</gui>."
+msgstr ""
+
+#: C/tag-search.page:30(p)
+msgid "To exclude a tag from your search:"
+msgstr ""
+
+#: C/tag-search.page:33(p)
+msgid ""
+"In the tag pane, double-click the tag you wish to exclude. This will add it "
+"to the Find bar."
+msgstr ""
+
+#: C/tag-search.page:37(p)
+msgid "In the Find bar, double-click the tag you wish to exclude."
+msgstr ""
+
+#: C/tag-remove.page:6(desc)
+msgid "Removing tags from photos"
+msgstr ""
+
+#: C/tag-remove.page:9(title)
+msgid "Removing"
+msgstr "Eliminando"
+
+#: C/tag-remove.page:12(p)
+msgid ""
+"As with attaching tags, there are two main methods of removing tags from "
+"photos."
+msgstr ""
+
+#: C/tag-remove.page:14(p) C/tag-creation.page:14(p) C/tag-attach.page:15(p)
+#: C/ratings.page:14(p)
+msgid "Method One:"
+msgstr ""
+
+#: C/tag-remove.page:17(p) C/tag-remove.page:31(p)
+msgid "Select photos from which to remove a tag."
+msgstr ""
+
+#: C/tag-remove.page:20(p)
+msgid ""
+"In the tag pane, select a tag to remove from the photos you have selected."
+msgstr ""
+
+#: C/tag-remove.page:24(p)
+msgid ""
+"Click <guiseq><gui>Tags</gui><gui>Remove Tag From Selection</gui></guiseq>."
+msgstr ""
+
+#: C/tag-remove.page:34(p) C/tag-attach.page:35(p)
+msgid "Right click the photos."
+msgstr ""
+
+#: C/tag-remove.page:37(p)
+msgid "Select <gui>Remove Tag</gui> and select the tag you wish to remove."
+msgstr ""
+
+#: C/tag-delete.page:6(desc)
+msgid "Deleting tags from the system"
+msgstr ""
+
+#: C/tag-delete.page:9(title)
+msgid "Deleting"
+msgstr ""
+
+#: C/tag-delete.page:12(p)
+msgid ""
+"Deleting tags removes them entirely from your system, but leaves behind any "
+"photos to which that tag is attached."
+msgstr ""
+
+#: C/tag-delete.page:14(p)
+msgid "To delete a tag:"
+msgstr ""
+
+#: C/tag-delete.page:17(p)
+msgid "Select the tag you wish to delete from within the tag pane."
+msgstr ""
+
+#: C/tag-delete.page:20(p)
+msgid ""
+"Click <guiseq><gui>Tags</gui><gui>Delete Select Tag</gui></guiseq>. "
+"Alternatively, right click the tag within the pane, and click <gui>Delete "
+"Tag</gui>."
+msgstr ""
+
+#: C/tag-creation.page:6(desc)
+msgid "Creating tags to be attached to photos"
+msgstr ""
+
+#: C/tag-creation.page:9(title)
+msgid "Creating"
+msgstr "Crear"
+
+#: C/tag-creation.page:12(p)
+msgid ""
+"In order to use tags, you need to first create a set of tags which you wish "
+"to use. There are three main methods to create tags."
+msgstr ""
+
+#: C/tag-creation.page:17(p)
+msgid "Select <guiseq><gui>Tags</gui><gui>Create New Tag...</gui></guiseq>."
+msgstr ""
+
+#: C/tag-creation.page:21(p) C/tag-creation.page:39(p)
+#: C/tag-creation.page:61(p)
+msgid ""
+"Select a parent tag for the new tag to appear under, such as people or "
+"events. If you wish to create a new tag without a parent, select <gui>(None)"
+"</gui>."
+msgstr ""
+
+#: C/tag-creation.page:26(p) C/tag-creation.page:44(p)
+#: C/tag-creation.page:66(p)
+msgid "Name the tag."
+msgstr ""
+
+#: C/tag-creation.page:29(p) C/tag-creation.page:47(p)
+#: C/tag-creation.page:69(p)
+msgid "Click <gui>Create</gui>"
+msgstr ""
+
+#: C/tag-creation.page:35(p)
+msgid "In the tags page, right click, and select <gui>Create New Tag...</gui>"
+msgstr ""
+
+#: C/tag-creation.page:50(p)
+msgid ""
+"Method three has the advantage of also <link xref=\"tag-attach\"> attaching</"
+"link> the new tag to the photos selected. To do this:"
+msgstr ""
+
+#: C/tag-creation.page:54(p)
+msgid "Select the photos to which you wish to attach the new tag."
+msgstr ""
+
+#: C/tag-creation.page:57(p)
+msgid ""
+"Right-click on the photos, and select <guiseq><gui>Attach Tag</"
+"gui><gui>Create New Tag...</gui></guiseq>."
+msgstr ""
+
+#: C/tag-attach.page:6(desc)
+msgid "Attaching tags to photos"
+msgstr ""
+
+#: C/tag-attach.page:9(title)
+msgid "Attaching"
+msgstr ""
+
+#: C/tag-attach.page:12(p)
+msgid ""
+"By attaching tags you have <link xref=\"tag-creation\">created</link> you "
+"make it easier to search through your photos. As with creating tags, there "
+"is more than one method of attaching tags to photos."
+msgstr ""
+
+#: C/tag-attach.page:18(p) C/tag-attach.page:32(p)
+msgid "Select photos to which to attach a tag."
+msgstr ""
+
+#: C/tag-attach.page:21(p)
+msgid ""
+"In the tag pane, select a tag to attach to the photos you have selected."
+msgstr ""
+
+#: C/tag-attach.page:25(p)
+msgid ""
+"Click <guiseq><gui>Tags</gui><gui>Attach Tag to Selection</gui></guiseq>. "
+"Alternatively, press Ctrl+T."
+msgstr ""
+
+#: C/tag-attach.page:38(p)
+msgid "Select <gui>Attach Tag</gui> and select the tag you wish to attach."
+msgstr ""
+
+#: C/smugmug.page:8(desc)
+msgid "Upload photos to SmugMug"
+msgstr ""
+
+#: C/smugmug.page:11(title)
+msgid "SmugMug"
+msgstr "SmugMug"
+
+#: C/smugmug.page:15(p)
+msgid ""
+"To upload photos to SmugMug you will need a SmugMug account, as well as "
+"internet access. Also, the SmugMug <link xref=\"extensions\">extension</"
+"link> must be installed and enabled."
+msgstr ""
+
+#: C/ratings.page:6(desc)
+msgid "Rate your photos from one to five stars"
+msgstr ""
+
+#: C/ratings.page:9(title)
+msgid "Rating your photos"
+msgstr ""
+
+#: C/ratings.page:12(p)
+msgid ""
+"<app>F-Spot</app> allows you to rate your photos from one to five stars. "
+"There are two ways to rate photos."
+msgstr ""
+
+#: C/ratings.page:17(p)
+msgid "By double-clicking, select the photo you wish to rate."
+msgstr ""
+
+#: C/ratings.page:20(p)
+msgid ""
+"In the lower-right corner, you will see five dots, corresponding to the "
+"rating you wish to give; to give a rating of one star, for example, click "
+"the first dot."
+msgstr ""
+
+#: C/ratings.page:28(p)
+msgid "Select the photo(s) you wish to rate."
+msgstr ""
+
+#: C/ratings.page:31(p)
+msgid ""
+"Right-click the photo(s) you wish to rate, and select a rating at the bottom "
+"of the right-click menu by clicking the corresponding dot."
+msgstr ""
+
+#: C/rate-search.page:8(desc)
+msgid "Search photos by star rating"
+msgstr ""
+
+#: C/rate-search.page:11(title)
+msgid "Search by Rating"
+msgstr ""
+
+#: C/rate-search.page:15(p)
+msgid "To search by rating:"
+msgstr ""
+
+#: C/rate-search.page:18(p)
+msgid ""
+"Select <guiseq><gui>Find</gui><gui>By Rating</gui><gui>Set Rating Filter...</"
+"gui></guiseq>."
+msgstr ""
+
+#: C/rate-search.page:22(p)
+msgid "Select the rating range which you wish to view."
+msgstr ""
+
+#: C/rate-search.page:25(p) C/extensions.page:39(p) C/extensions.page:82(p)
+#: C/date-search.page:27(p)
+msgid "Click <gui>Ok</gui>."
+msgstr ""
+
+#: C/rate-search.page:28(p)
+msgid "To stop searching by rating:"
+msgstr ""
+
+#: C/rate-search.page:31(p)
+msgid ""
+"Select <guiseq><gui>Find</gui><gui>By Rating</gui><gui>Set Rating Filter</"
+"gui></guiseq>."
+msgstr ""
+
+#: C/picasa.page:8(desc)
+msgid "Upload photos to Google's PicasaWeb"
+msgstr ""
+
+#: C/picasa.page:11(title)
+msgid "Picasa"
+msgstr "Picasa"
+
+#: C/picasa.page:15(p)
+msgid ""
+"To upload photos to Picasa you will need a Picasa account, as well as "
+"internet access. Also, the PicasaWeb <link xref=\"extensions\">extension</"
+"link> must be installed and enabled."
+msgstr ""
+
+#: C/picasa.page:21(p)
+msgid "Select the photos you wish to upload."
+msgstr ""
+
+#: C/picasa.page:24(p)
+msgid ""
+"Click <guiseq><gui>Photo</gui><gui>Export To</gui><gui>PicasaWeb...</gui></"
+"guiseq>."
+msgstr ""
+
+#: C/picasa.page:28(p)
+msgid ""
+"Add a gallery by clicking <gui>Add</gui> and supplying a username and "
+"password."
+msgstr ""
+
+#: C/picasa.page:32(p)
+msgid ""
+"Select a gallery to export to, or click <gui>Add</gui> to create a new "
+"gallery."
+msgstr ""
+
+#: C/picasa.page:36(p) C/folder.page:39(p)
+msgid "Click <gui>Export</gui>."
+msgstr ""
+
+#: C/picasa.page:19(steps)
+msgid ""
+"<placeholder-1/><placeholder-2/><placeholder-3/>j <placeholder-4/"
+"><placeholder-5/>"
+msgstr ""
+
+#: C/introduction.page:6(desc)
+msgid "A brief introduction to F-Spot"
+msgstr ""
+
+#: C/introduction.page:9(title)
+msgid "Introduction"
+msgstr "Introducción"
+
+#: C/introduction.page:12(p)
+msgid ""
+"<app>F-Spot</app> is a full-featured photo manager for the GNOME Desktop, "
+"allowing you to tag, rate, and date photos, edit photo metadata, and even "
+"includes a simple in-program photo editor."
+msgstr ""
+
+#: C/introduction.page:15(p)
+msgid ""
+"For help getting started using <app>F-Spot</app>, check out the <link xref="
+"\"index#basic-functions\">basic functions</link> of the help file."
+msgstr ""
+
+#: C/index.page:7(title) C/index.page:8(title) C/index.page:11(title)
+msgid "F-Spot photo manager"
+msgstr ""
+
+#: C/index.page:16(title)
+msgid "Basic Functions"
+msgstr ""
+
+#: C/index.page:20(title)
+msgid "Searching"
+msgstr "Buscando"
+
+#: C/index.page:24(title)
+msgid "Photo Editing"
+msgstr ""
+
+#: C/index.page:28(title)
+msgid "Sharing"
+msgstr "Compartir"
+
+#: C/index.page:32(title)
+msgid "Advanced Options"
+msgstr "Opciones avanzadas"
+
+#: C/import-roll-search.page:8(desc)
+msgid "Searching by date of import"
+msgstr ""
+
+#: C/import-roll-search.page:11(title)
+msgid "Search by Import Roll"
+msgstr ""
+
+#: C/import-roll-search.page:15(p)
+msgid ""
+"Import rolls are \"batches\" of imported photos. Regardless of the date the "
+"photo was taken, the import roll timestamp is decided when you import photos."
+msgstr ""
+
+#: C/import-roll-search.page:18(p)
+msgid "To search by latest import roll:"
+msgstr ""
+
+#: C/import-roll-search.page:21(p)
+msgid ""
+"Select <guiseq><gui>Find</gui><gui>By Import Roll</gui><gui>Last Import "
+"Roll</gui></guiseq>."
+msgstr ""
+
+#: C/import-roll-search.page:25(p)
+msgid "To select a previous import roll:"
+msgstr ""
+
+#: C/import-roll-search.page:28(p)
+msgid ""
+"Select <guiseq><gui>Find</gui><gui>By Import Roll</gui><gui>Select Import "
+"Rolls</gui></guiseq>."
+msgstr ""
+
+#: C/import-roll-search.page:32(p)
+msgid ""
+"Select an import roll to search, or select a range by choosing <gui>Between</"
+"gui> and select the dates you wish to include."
+msgstr ""
+
+#: C/import-roll-search.page:36(p)
+msgid ""
+"To stop searching by import rolls, select <guiseq><gui>Find</gui><gui>By "
+"Import Roll</gui><gui>Clear Roll Filter</gui></guiseq>."
+msgstr ""
+
+#: C/import-photos.page:6(desc)
+msgid "Import photos to be managed"
+msgstr ""
+
+#: C/import-photos.page:9(title)
+msgid "Importing Photos"
+msgstr ""
+
+#: C/import-photos.page:12(p)
+msgid "Chances are, the first thing you will want to do is import photos."
+msgstr ""
+
+#: C/import-photos.page:15(p)
+msgid "To import photos:"
+msgstr ""
+
+#: C/import-photos.page:20(p)
+msgid ""
+"Select <guiseq><gui>Photo</gui><gui>Import...</gui></guiseq>. Alternatively, "
+"click the <gui>Import</gui> button."
+msgstr ""
+
+#: C/import-photos.page:24(p)
+msgid "Select a source from which to import, such as a device or a folder."
+msgstr ""
+
+#: C/import-photos.page:27(p)
+msgid ""
+"It may take a while for F-Spot to index the files. When it is done indexing, "
+"your photos will be presented to you. At this time, you can attach <link "
+"xref=\"tags\">tags</link> to all photos, or you can leave that task for "
+"later."
+msgstr ""
+
+#: C/import-photos.page:33(p)
+msgid "When you are ready to finish importing photos, click <gui>Import</gui>."
+msgstr ""
+
+#: C/general-editing.page:6(desc)
+msgid "Make simple edits to your photos"
+msgstr ""
+
+#: C/general-editing.page:9(title)
+msgid "General Editing"
+msgstr ""
+
+#: C/general-editing.page:13(p)
+msgid ""
+"<app>F-Spot</app> allows you to make simple general edits, including "
+"straightening, cropping, and rotating your photos."
+msgstr ""
+
+#: C/general-editing.page:15(p)
+msgid "There are three ways to rotate a selected photo:"
+msgstr ""
+
+#: C/general-editing.page:18(p)
+msgid "Click the appropriate rotate button, to the right of the import button."
+msgstr ""
+
+#: C/general-editing.page:22(p)
+msgid "Select the appropriate option from within the <gui>Edit</gui> menu."
+msgstr ""
+
+#: C/general-editing.page:26(p)
+msgid "Use the bracket keys to rotate the photo."
+msgstr ""
+
+#: C/general-editing.page:29(p)
+msgid "To straighten a selected photo:"
+msgstr ""
+
+#: C/general-editing.page:32(p)
+msgid "From within the editing pane, select <app>Straighten</app>."
+msgstr ""
+
+#: C/general-editing.page:35(p)
+msgid "Select a rotation, ranging from -45 to 45 degrees."
+msgstr ""
+
+#: C/general-editing.page:38(p)
+msgid "Click <gui>Straighten</gui>."
+msgstr ""
+
+#: C/general-editing.page:41(p)
+msgid "To crop a selected photo:"
+msgstr ""
+
+#: C/general-editing.page:44(p)
+msgid "Click the <gui>Crop</gui> button in the Edit pane."
+msgstr ""
+
+#: C/general-editing.page:47(p)
+msgid ""
+"Select a contraining aspect ratio, that is, a proportion of height to width "
+"to which the new photo must fit. Examples of contraining aspect ratios "
+"include 4x3, 4x6, and 5x7."
+msgstr ""
+
+#: C/general-editing.page:52(p)
+msgid ""
+"Click and drag to select the desired area to keep. This box can be dragged "
+"around after being sized."
+msgstr ""
+
+#: C/general-editing.page:56(p)
+msgid "When you have selected your area to crop to, click <gui>Crop</gui>."
+msgstr ""
+
+#: C/folder.page:8(desc)
+msgid "Send photos to a folder"
+msgstr ""
+
+#: C/folder.page:11(title)
+msgid "Folder Export"
+msgstr "Exportar carpeta"
+
+#: C/folder.page:15(p)
+msgid ""
+"<app>F-Spot</app> allows you to export to a folder. In order to do so, "
+"however, you will need to have the folder export <link xref=\"extensions"
+"\">extension</link> installed and enabled."
+msgstr ""
+
+#: C/folder.page:18(p)
+msgid "To export selected photos to a folder:"
+msgstr ""
+
+#: C/folder.page:21(p)
+msgid ""
+"Select <guiseq><gui>Photo</gui><gui>Export To</gui><gui>Folder...</gui></"
+"guiseq>."
+msgstr ""
+
+#: C/folder.page:25(p)
+msgid "Select a folder."
+msgstr ""
+
+#: C/folder.page:28(p)
+msgid "Name the gallery and give it a description."
+msgstr ""
+
+#: C/folder.page:31(p)
+msgid ""
+"Select an export method. <gui>Create Standalone Web Gallery</gui> will "
+"create a folder with contents fit to be uploaded to a web server to present "
+"pictures in a gallery. <gui>Save the files only</gui> will only move photos "
+"to the selected folder. <gui>Create gallery using \"Original\"</gui> will "
+"create a folder with contents suitable for using with Original Photo Gallery."
+msgstr ""
+
+#: C/flickr.page:8(desc)
+msgid "Upload photos to Flickr"
+msgstr "Subir fotos a Flickr"
+
+#: C/flickr.page:11(title)
+msgid "Flickr"
+msgstr "Flickr"
+
+#: C/flickr.page:15(p)
+msgid ""
+"To upload photos to Flickr you will need a Flickr account, as well as "
+"internet access. Also, the Flickr <link xref=\"extensions\">extension</link> "
+"must be installed and enabled."
+msgstr ""
+
+#: C/file-management.page:8(desc)
+msgid "Manage files already imported"
+msgstr ""
+
+#: C/file-management.page:11(title)
+msgid "File Management"
+msgstr "Gestión de archivos"
+
+#: C/file-management.page:15(p)
+msgid ""
+"<app>F-Spot</app> allows for some control over the contents of your catalog, "
+"that is, removing files from your catalog as well as deleting files from "
+"your catalog."
+msgstr ""
+
+#: C/file-management.page:18(p)
+msgid "To remove files from your catalog:"
+msgstr ""
+
+#: C/file-management.page:21(p)
+msgid "Select the photos you wish to remove from the catalog."
+msgstr ""
+
+#: C/file-management.page:24(p)
+msgid ""
+"Right-click the photos, select <gui>Remove From Catalog</gui>. "
+"Alternatively, select <guiseq><gui>Edit</gui><gui>Remove From Catalog</gui></"
+"guiseq> or press the Delete key on your keyboard."
+msgstr ""
+
+#: C/file-management.page:29(p)
+msgid "To delete photos from your computer:"
+msgstr ""
+
+#: C/file-management.page:32(p)
+msgid "Select the photos you wish to delete."
+msgstr ""
+
+#: C/file-management.page:35(p)
+msgid ""
+"Right-click the photos, select <gui>Delete From Drive</gui>. Alternatively, "
+"select <guiseq><gui>Edit</gui><gui>Delete From Drive</gui></guiseq> or press "
+"Shift+Delete on your keyboard."
+msgstr ""
+
+#: C/facebook.page:8(desc)
+msgid "Upload photos to Facebook"
+msgstr "Subir fotos a Facebook"
+
+#: C/facebook.page:11(title)
+msgid "Facebook"
+msgstr "Facebook"
+
+#: C/facebook.page:15(p)
+msgid ""
+"To upload photos to Facebook you will need a Facebook account, as well as "
+"internet access. Also, the Facebook <link xref=\"extensions\">extension</"
+"link> must be installed and enabled."
+msgstr ""
+
+#: C/facebook.page:20(p)
+msgid "To post selected photos to Facebook:"
+msgstr ""
+
+#: C/facebook.page:23(p)
+msgid ""
+"Select <guiseq><gui>Photo</gui><gui>Export To</gui><gui>Facebook</gui></"
+"guiseq>."
+msgstr ""
+
+#: C/facebook.page:27(p)
+msgid ""
+"Click <gui>Login</gui>. A browser window will be brought up. Log in to "
+"Facebook and click \"Allow\" to allow F-Spot access to your Facebook profile."
+msgstr ""
+
+#: C/facebook.page:32(p)
+msgid ""
+"Select whether to create a new album or add to an existing album. If you are "
+"creating a new album, fill in the relevant information."
+msgstr ""
+
+#: C/facebook.page:36(p)
+msgid "Edit captions for each photo, if so desired."
+msgstr ""
+
+#: C/facebook.page:39(p)
+msgid "When finished, click <gui>Add</gui>."
+msgstr ""
+
+#: C/extensions.page:8(desc)
+msgid "Working with <app>F-Spot</app> extensions"
+msgstr ""
+
+#: C/extensions.page:11(title)
+msgid "Extensions"
+msgstr "Extensiones"
+
+#: C/extensions.page:15(p)
+msgid ""
+"<app>F-Spot</app> allows for the use of extensions to provide additional "
+"functionality."
+msgstr ""
+
+#: C/extensions.page:18(p)
+msgid ""
+"To open the extension manager, select <guiseq><gui>Edit</gui><gui>Manage "
+"Extensions</gui></guiseq>."
+msgstr ""
+
+#: C/extensions.page:21(p)
+msgid "To install extensions:"
+msgstr ""
+
+#: C/extensions.page:24(p) C/extensions.page:46(p) C/extensions.page:58(p)
+#: C/extensions.page:70(p)
+msgid "Open the extension manager."
+msgstr ""
+
+#: C/extensions.page:27(p)
+msgid "Click <gui>Install Add-ins</gui>."
+msgstr ""
+
+#: C/extensions.page:30(p)
+msgid "Select an add-on to install from the list."
+msgstr ""
+
+#: C/extensions.page:33(p) C/extensions.page:79(p)
+msgid "Click <gui>Forward</gui>."
+msgstr ""
+
+#: C/extensions.page:36(p)
+msgid "Verify all information, and click <gui>Forward</gui> again."
+msgstr ""
+
+#: C/extensions.page:43(p)
+msgid "To enable plugins that are already installed:"
+msgstr ""
+
+#: C/extensions.page:49(p)
+msgid "Select the extension you wish to enable."
+msgstr ""
+
+#: C/extensions.page:52(p)
+msgid "Click <gui>Enable</gui>."
+msgstr ""
+
+#: C/extensions.page:55(p)
+msgid "To disable plugins that are installed:"
+msgstr ""
+
+#: C/extensions.page:61(p)
+msgid "Select the extension you wish to disable."
+msgstr ""
+
+#: C/extensions.page:64(p)
+msgid "Click <gui>Disable</gui>."
+msgstr ""
+
+#: C/extensions.page:67(p)
+msgid "To uninstall plugins:"
+msgstr ""
+
+#: C/extensions.page:73(p)
+msgid "Select the extension you wish to uninstall."
+msgstr ""
+
+#: C/extensions.page:76(p)
+msgid "Click <gui>Uninstall</gui>."
+msgstr ""
+
+#: C/enhancements.page:6(desc)
+msgid "Simple enhancements for your photos"
+msgstr ""
+
+#: C/enhancements.page:9(title)
+msgid "Enhancements"
+msgstr ""
+
+#: C/enhancements.page:13(p)
+msgid ""
+"Currently, there are two main enhancements that <app>F-Spot</app> supports: "
+"red-eye removal and the automatic enhancement of color."
+msgstr ""
+
+#: C/enhancements.page:15(p)
+msgid "To remove red-eye:"
+msgstr ""
+
+#: C/enhancements.page:18(p)
+msgid ""
+"By double-clicking, select the photo on which you wish to use the red-eye "
+"removal tool."
+msgstr ""
+
+#: C/enhancements.page:22(p)
+msgid "Click <gui>Red-Eye Removal</gui> in the Edit panel."
+msgstr ""
+
+#: C/enhancements.page:25(p)
+msgid ""
+"Select the area from which you wish to remove red-eye. Note: If the contains "
+"many red areas, you may wish to select each eye individually."
+msgstr ""
+
+#: C/enhancements.page:30(p)
+msgid "Click <gui>Fix!</gui>."
+msgstr ""
+
+#: C/enhancements.page:33(p)
+msgid "To automatically enhance the colors of the photo:"
+msgstr ""
+
+#: C/enhancements.page:36(p)
+msgid "By double-clicking, select the photo which you wish to enhance."
+msgstr ""
+
+#: C/enhancements.page:39(p)
+msgid "Click <gui>Auto Color</gui>."
+msgstr ""
+
+#: C/date-search.page:8(desc)
+msgid "Search photos by date"
+msgstr ""
+
+#: C/date-search.page:11(title)
+msgid "Search by Date"
+msgstr "Buscar por fecha"
+
+#: C/date-search.page:15(p)
+msgid "To search by date:"
+msgstr "Para buscar por fecha:"
+
+#: C/date-search.page:18(p)
+msgid ""
+"Select <guiseq><gui>Find</gui><gui>By Date</gui><gui>Set Date Range...</"
+"gui></guiseq>."
+msgstr ""
+
+#: C/date-search.page:22(p)
+msgid ""
+"Select a time period to from which to view photos. This can by done by "
+"selecting a set period, such as a week, or by specifying dates."
+msgstr ""
+
+#: C/date-search.page:30(p)
+msgid "Alternatively, you can use the timeline. To use the timeline:"
+msgstr ""
+
+#: C/date-search.page:33(p)
+msgid ""
+"Make sure the timeline is enabled by selecting <guiseq><gui>View</"
+"gui><gui>Components</gui></guiseq> and making sure that <gui>Timeline</gui> "
+"is checked."
+msgstr ""
+
+#: C/date-search.page:38(p)
+msgid ""
+"In the timeline, click the bar corresponding to the time period you wish to "
+"look at."
+msgstr ""
+
+#: C/date-search.page:42(p)
+msgid "To stop searching by date:"
+msgstr ""
+
+#: C/date-search.page:45(p)
+msgid ""
+"Select <guiseq><gui>Find</gui><gui>By Date</gui><gui>Clear Date Range</gui></"
+"guiseq>."
+msgstr ""
+
+#: C/colors.page:6(desc)
+msgid "Edit the colors of your photos"
+msgstr ""
+
+#: C/colors.page:9(title)
+msgid "Color Editing"
+msgstr "Edición de color"
+
+#: C/colors.page:12(p)
+msgid "<app>F-Spot</app> supports several modes of color manipulation."
+msgstr ""
+
+#: C/colors.page:15(title)
+msgid "Desaturate"
+msgstr "Desaturar"
+
+#: C/colors.page:16(p)
+msgid ""
+"This mode eliminates all saturation, turning a color image into a black and "
+"white image."
+msgstr ""
+
+#: C/colors.page:20(title)
+msgid "Sepia Tone"
+msgstr "Tono sepia"
+
+#: C/colors.page:21(p)
+msgid "This mode simulates a photo being created with sepia toner."
+msgstr ""
+
+#: C/colors.page:24(title)
+msgid "Auto Color"
+msgstr "Ajustar el color"
+
+#: C/colors.page:25(p)
+msgid "This mode automatically adjusts the colors to a set profile."
+msgstr ""
+
+#: C/cd.page:8(desc)
+msgid "Burn photos to a CD"
+msgstr ""
+
+#: C/cd.page:11(title)
+msgid "CD Export"
+msgstr "Exportar a CD"
+
+#: C/adjust-color.page:6(desc)
+msgid "Adjusting the colors of a photo"
+msgstr ""
+
+#: C/adjust-color.page:9(title)
+msgid "Adjust Color"
+msgstr ""
+
+#: C/adjust-color.page:12(p)
+msgid ""
+"As far as the editing tools in F-Spot, adjusting the color is easily the "
+"most powerful. The color editor allows you to adjust:"
+msgstr ""
+
+#: C/adjust-color.page:16(title)
+msgid "Exposure"
+msgstr "Exposición"
+
+#: C/adjust-color.page:17(p)
+msgid "This adjustment simulates lengthening or shortening the exposure time."
+msgstr ""
+
+#: C/adjust-color.page:21(title)
+msgid "Saturation"
+msgstr "Saturación"
+
+#: C/adjust-color.page:22(p)
+msgid ""
+"This adjustment simulates adjusting the amount of color in the image, i.e. "
+"sliding it to the left decrease color, making it black and white, while "
+"sliding it to the right will increase the vibrancy of colors."
+msgstr ""
+
+#: C/adjust-color.page:28(title)
+msgid "Brightness"
+msgstr "Brillo"
+
+#: C/adjust-color.page:29(p)
+msgid ""
+"This adjustment increase the brightness of colors. Increasing this too much "
+"will make colors appear \"washed out\", while decreasing it too much will "
+"make the image too dark and lacking in contrast."
+msgstr ""
+
+#: C/adjust-color.page:34(title)
+msgid "Hue"
+msgstr "Tono"
+
+#: C/adjust-color.page:35(p)
+msgid "This adjustment causes colors to \"rotate\" along the color wheel."
+msgstr ""
+
+#: C/adjust-color.page:38(title)
+msgid "Contrast"
+msgstr "Contraste"
+
+#: C/adjust-color.page:39(p)
+msgid ""
+"This adjustment adjusts the contrast ratio, that is, the ratio of difference "
+"between dark and light pixels. Sliding to the left decreases contrast, while "
+"sliding to the right will increase contrast."
+msgstr ""
+
+#: C/adjust-color.page:45(title)
+msgid "Temp"
+msgstr ""
+
+#: C/adjust-color.page:46(p)
+msgid "This adjust changes the color temperature, measured in degrees Kelvin."
+msgstr ""
+
+#: C/adjust-color.page:50(title)
+msgid "Tint"
+msgstr ""
+
+#: C/adjust-color.page:51(p)
+msgid "This adjustment allows you to tinge the photo with a color."
+msgstr ""
+
+#: C/23hq.page:8(desc)
+msgid "Upload photos to 23hq"
+msgstr ""
+
+#: C/23hq.page:11(title)
+msgid "23hq"
+msgstr "23hq"
+
+#: C/23hq.page:15(p)
+msgid ""
+"To upload photos to 23hq you will need a 23hq account, as well as internet "
+"access. Also, the 23hq <link xref=\"extensions\">extension</link> must be "
+"installed and enabled."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: C/index.page:0(None)
+msgid "translator-credits"
+msgstr "Jorge González <jorgegonz at svn.gnome.org>, 2010."
diff --git a/help/es/extensions.page b/help/es/extensions.page
new file mode 100644
index 0000000..a0fca98
--- /dev/null
+++ b/help/es/extensions.page
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="extensions">
+
+  <info>
+    <link type="guide" xref="index#advanced"/>
+    <desc>Working with <app>F-Spot</app> extensions</desc>
+  </info>
+
+  <title>Extensiones</title>
+
+  <p><app>F-Spot</app> allows for the use of extensions to provide additional
+     functionality.</p>
+
+  <p>To open the extension manager, select <guiseq><gui>Edit</gui>
+     <gui>Manage Extensions</gui></guiseq>.</p>
+
+  <p>To install extensions:</p>
+  <steps>
+    <item>
+      <p>Open the extension manager.</p>
+    </item>
+    <item>
+      <p>Click <gui>Install Add-ins</gui>.</p>
+    </item>
+    <item>
+      <p>Select an add-on to install from the list.</p>
+    </item>
+    <item>
+      <p>Click <gui>Forward</gui>.</p>
+    </item>
+    <item>
+      <p>Verify all information, and click <gui>Forward</gui> again.</p>
+    </item>
+    <item>
+      <p>Click <gui>Ok</gui>.</p>
+    </item>
+  </steps>
+
+  <p>To enable plugins that are already installed:</p>
+  <steps>
+    <item>
+      <p>Open the extension manager.</p>
+    </item>
+    <item>
+      <p>Select the extension you wish to enable.</p>
+    </item>
+    <item>
+      <p>Click <gui>Enable</gui>.</p>
+    </item>
+  </steps>
+  <p>To disable plugins that are installed:</p>
+  <steps>
+    <item>
+      <p>Open the extension manager.</p>
+    </item>
+    <item>
+      <p>Select the extension you wish to disable.</p>
+    </item>
+    <item>
+      <p>Click <gui>Disable</gui>.</p>
+    </item>
+  </steps>
+  <p>To uninstall plugins:</p>
+  <steps>
+    <item>
+      <p>Open the extension manager.</p>
+    </item>
+    <item>
+      <p>Select the extension you wish to uninstall.</p>
+    </item>
+    <item>
+      <p>Click <gui>Uninstall</gui>.</p>
+    </item>
+    <item>
+      <p>Click <gui>Forward</gui>.</p>
+    </item>
+    <item>
+      <p>Click <gui>Ok</gui>.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/facebook.page b/help/es/facebook.page
new file mode 100644
index 0000000..4b5f3b6
--- /dev/null
+++ b/help/es/facebook.page
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="facebook">
+
+  <info>
+    <link type="guide" xref="upload-to-web"/>
+    <desc>Subir fotos a Facebook</desc>
+  </info>
+
+  <title>Facebook</title>
+
+  <p>To upload photos to Facebook you will need a Facebook account, as well as
+     internet access.  Also, the Facebook
+     <link xref="extensions">extension</link> must be installed and enabled.
+     </p>
+
+  <p>To post selected photos to Facebook:</p>
+  <steps>
+    <item>
+      <p>Select <guiseq><gui>Photo</gui><gui>Export To</gui><gui>Facebook</gui>
+      </guiseq>.</p>
+    </item>
+    <item>
+      <p>Click <gui>Login</gui>.  A browser window will be brought up.  Log in
+         to Facebook and click "Allow" to allow F-Spot access to your Facebook
+         profile.</p>
+    </item>
+    <item>
+      <p>Select whether to create a new album or add to an existing album.  If
+         you are creating a new album, fill in the relevant information.</p>
+    </item>
+    <item>
+      <p>Edit captions for each photo, if so desired.</p>
+    </item>
+    <item>
+      <p>When finished, click <gui>Add</gui>.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/file-management.page b/help/es/file-management.page
new file mode 100644
index 0000000..d034498
--- /dev/null
+++ b/help/es/file-management.page
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="file-management">
+
+  <info>
+    <link type="guide" xref="index#basic-functions" group="management"/>
+    <desc>Manage files already imported</desc>
+  </info>
+
+  <title>Gestión de archivos</title>
+
+  <p><app>F-Spot</app> allows for some control over the contents of your
+     catalog, that is, removing files from your catalog as well as deleting
+     files from your catalog.</p>
+  <p>To remove files from your catalog:</p>
+  <steps>
+    <item>
+      <p>Select the photos you wish to remove from the catalog.</p>
+    </item>
+    <item>
+      <p>Right-click the photos, select <gui>Remove From Catalog</gui>.
+         Alternatively, select <guiseq><gui>Edit</gui><gui>Remove From
+         Catalog</gui></guiseq> or press the Delete key on your keyboard.</p>
+    </item>
+  </steps>
+  <p>To delete photos from your computer:</p>
+  <steps>
+    <item>
+      <p>Select the photos you wish to delete.</p>
+    </item>
+    <item>
+      <p>Right-click the photos, select <gui>Delete From Drive</gui>.
+         Alternatively, select <guiseq><gui>Edit</gui><gui>Delete
+         From Drive</gui></guiseq> or press Shift+Delete on your keyboard.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/flickr.page b/help/es/flickr.page
new file mode 100644
index 0000000..756106e
--- /dev/null
+++ b/help/es/flickr.page
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="flickr">
+
+  <info>
+    <link type="guide" xref="upload-to-web"/>
+    <desc>Subir fotos a Flickr</desc>
+  </info>
+
+  <title>Flickr</title>
+
+  <p>To upload photos to Flickr you will need a Flickr account, as well as
+     internet access.  Also, the Flickr
+     <link xref="extensions">extension</link> must be installed and enabled.
+     </p>
+</page>
diff --git a/help/es/folder.page b/help/es/folder.page
new file mode 100644
index 0000000..f76548f
--- /dev/null
+++ b/help/es/folder.page
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="folder">
+
+  <info>
+    <link type="guide" xref="index#sharing"/>
+    <desc>Send photos to a folder</desc>
+  </info>
+
+  <title>Exportar carpeta</title>
+
+  <p><app>F-Spot</app> allows you to export to a folder.  In order to do so,
+     however, you will need to have the folder export
+     <link xref="extensions">extension</link> installed and enabled.</p>
+  <p>To export selected photos to a folder:</p>
+  <steps>
+    <item>
+      <p>Select <guiseq><gui>Photo</gui><gui>Export To</gui><gui>Folder...</gui>
+      </guiseq>.</p>
+    </item>
+    <item>
+      <p>Select a folder.</p>
+    </item>
+    <item>
+      <p>Name the gallery and give it a description.</p>
+    </item>
+    <item>
+      <p>Select an export method.  <gui>Create Standalone Web Gallery</gui>
+         will create a folder with contents fit to be uploaded to a web
+         server to present pictures in a gallery.  <gui>Save the files
+         only</gui>  will only move photos to the selected folder.
+         <gui>Create gallery using "Original"</gui> will create a folder
+         with contents suitable for using with Original Photo Gallery.</p>
+    </item>
+    <item>
+      <p>Click <gui>Export</gui>.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/general-editing.page b/help/es/general-editing.page
new file mode 100644
index 0000000..87a6209
--- /dev/null
+++ b/help/es/general-editing.page
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="topic" id="general-editing">
+  <info>
+    <link type="guide" xref="index#editing" group="general"/>
+    <desc>Make simple edits to your photos</desc>
+  </info>
+
+  <title>
+    General Editing
+  </title>
+
+  <p><app>F-Spot</app> allows you to make simple general edits, including
+     straightening, cropping, and rotating your photos.</p>
+  <p>There are three ways to rotate a selected photo:</p>
+  <steps>
+    <item>
+      <p>Click the appropriate rotate button, to the right of the import
+         button.</p>
+    </item>
+    <item>
+      <p>Select the appropriate option from within the <gui>Edit</gui> menu.
+      </p>
+    </item>
+    <item>
+      <p>Use the bracket keys to rotate the photo.</p>
+    </item>
+  </steps>
+  <p>To straighten a selected photo:</p>
+  <steps>
+    <item>
+      <p>From within the editing pane, select <app>Straighten</app>.</p>
+    </item>
+    <item>
+      <p>Select a rotation, ranging from -45 to 45 degrees.</p>
+    </item>
+    <item>
+      <p>Click <gui>Straighten</gui>.</p>
+    </item>
+  </steps>
+  <p>To crop a selected photo:</p>
+  <steps>
+    <item>
+      <p>Click the <gui>Crop</gui> button in the Edit pane.</p>
+    </item>
+    <item>
+      <p>Select a contraining aspect ratio, that is, a proportion of height
+         to width to which the new photo must fit.  Examples of contraining
+         aspect ratios include 4x3, 4x6, and 5x7.</p>
+    </item>
+    <item>
+      <p>Click and drag to select the desired area to keep.  This box can be
+         dragged around after being sized.</p>
+    </item>
+    <item>
+      <p>When you have selected your area to crop to, click <gui>Crop</gui>.
+      </p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/import-photos.page b/help/es/import-photos.page
new file mode 100644
index 0000000..11e7459
--- /dev/null
+++ b/help/es/import-photos.page
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="topic" id="import-photos">
+  <info>
+    <link type="guide" xref="index#basic-functions" group="import"/>
+    <desc>Import photos to be managed</desc>
+  </info>
+
+  <title>
+    Importing Photos
+  </title>
+  <p>
+    Chances are, the first thing you will want to do is import photos.
+  </p>
+  <p>
+    To import photos:
+  </p>
+  <steps>
+    <item>
+      <p>Select <guiseq><gui>Photo</gui><gui>Import...</gui></guiseq>.
+      Alternatively, click the <gui>Import</gui> button.</p>
+    </item>
+    <item>
+      <p>Select a source from which to import, such as a device or a folder.</p>
+     </item>
+     <item>
+       <p>It may take a while for F-Spot to index the files.  When it is done
+          indexing, your photos will be presented to you.  At this time, you
+          can attach <link xref="tags">tags</link> to all photos, or you can
+          leave that task for later.</p>
+    </item>
+    <item>
+      <p>When you are ready to finish importing photos, click <gui>Import</gui>.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/import-roll-search.page b/help/es/import-roll-search.page
new file mode 100644
index 0000000..a81e236
--- /dev/null
+++ b/help/es/import-roll-search.page
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="import-roll-search">
+
+  <info>
+    <link type="guide" xref="index#searching"/>
+    <desc>Searching by date of import</desc>
+  </info>
+
+  <title>
+    Search by Import Roll
+  </title>
+
+  <p>Import rolls are "batches" of imported photos.  Regardless of the date the
+     photo was taken, the import roll timestamp is decided when you import photos.
+  </p>
+  <p>To search by latest import roll:</p>
+  <steps>
+    <item>
+      <p>Select <guiseq><gui>Find</gui><gui>By Import Roll</gui><gui>Last Import
+         Roll</gui></guiseq>.</p>
+    </item>
+  </steps>
+  <p>To select a previous import roll:</p>
+  <steps>
+    <item>
+      <p>Select <guiseq><gui>Find</gui><gui>By Import Roll</gui><gui>Select Import
+         Rolls</gui></guiseq>.</p>
+    </item>
+    <item>
+      <p>Select an import roll to search, or select a range by choosing
+      <gui>Between</gui> and select the dates you wish to include.</p>
+    </item>
+  </steps>
+  <p>To stop searching by import rolls, select <guiseq><gui>Find</gui><gui>By
+     Import Roll</gui><gui>Clear Roll Filter</gui></guiseq>.</p>
+</page>
diff --git a/help/es/index.page b/help/es/index.page
new file mode 100644
index 0000000..6002781
--- /dev/null
+++ b/help/es/index.page
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="guide" id="index">
+
+  <info>
+    <title type="link">F-Spot photo manager</title>
+    <title type="text">F-Spot photo manager</title>
+  </info>
+
+  <title>
+    F-Spot photo manager
+  </title>
+
+  <section id="basic-functions" style="2column" groups="import tag rate management">
+    <title>Basic Functions</title>
+  </section>
+
+  <section id="searching" style="2column">
+    <title>Buscando</title>
+  </section>
+
+  <section id="editing" style="2column" groups="general colors enhancements">
+    <title>Photo Editing</title>
+  </section>
+
+  <section id="sharing" style="2column">
+    <title>Compartir</title>
+  </section>
+
+  <section id="advanced" style="2column">
+    <title>Opciones avanzadas</title>
+  </section>
+</page>
diff --git a/help/es/introduction.page b/help/es/introduction.page
new file mode 100644
index 0000000..35ba632
--- /dev/null
+++ b/help/es/introduction.page
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="topic" id="introduction">
+  <info>
+    <link type="guide" xref="index"/>
+    <desc>A brief introduction to F-Spot</desc>
+  </info>
+
+  <title>Introducción</title>
+  <p><app>F-Spot</app> is a full-featured photo manager for the GNOME Desktop,
+     allowing you to tag, rate, and date photos, edit photo metadata, and
+     even includes a simple in-program photo editor.</p>
+  <p>For help getting started using <app>F-Spot</app>, check out the <link xref="index#basic-functions">basic functions</link> of the help file.</p>
+</page>
diff --git a/help/es/picasa.page b/help/es/picasa.page
new file mode 100644
index 0000000..59853a2
--- /dev/null
+++ b/help/es/picasa.page
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="picasa">
+
+  <info>
+    <link type="guide" xref="upload-to-web"/>
+    <desc>Upload photos to Google's PicasaWeb</desc>
+  </info>
+
+  <title>Picasa</title>
+
+  <p>To upload photos to Picasa you will need a Picasa account, as well as
+     internet access.  Also, the PicasaWeb
+     <link xref="extensions">extension</link> must be installed and enabled.
+     </p>
+  <steps>
+    <item>
+      <p>Select the photos you wish to upload.</p>
+    </item>
+    <item>
+      <p>Click <guiseq><gui>Photo</gui><gui>Export To</gui>
+      <gui>PicasaWeb...</gui></guiseq>.</p>
+    </item>
+    <item>
+      <p>Add a gallery by clicking <gui>Add</gui> and supplying a username and
+         password.</p>
+    </item>j
+    <item>
+      <p>Select a gallery to export to, or click <gui>Add</gui> to create a new
+         gallery.</p>
+    </item>
+    <item>
+      <p>Click <gui>Export</gui>.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/rate-search.page b/help/es/rate-search.page
new file mode 100644
index 0000000..01712a5
--- /dev/null
+++ b/help/es/rate-search.page
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="rate-search">
+
+  <info>
+    <link type="guide" xref="index#searching"/>
+    <desc>Search photos by star rating</desc>
+  </info>
+
+  <title>
+    Search by Rating
+  </title>
+
+  <p>To search by rating:</p>
+  <steps>
+    <item>
+      <p>Select <guiseq><gui>Find</gui><gui>By Rating</gui><gui>Set Rating
+         Filter...</gui></guiseq>.</p>
+    </item>
+    <item>
+      <p>Select the rating range which you wish to view.</p>
+    </item>
+    <item>
+      <p>Click <gui>Ok</gui>.</p>
+    </item>
+  </steps>
+  <p>To stop searching by rating:</p>
+  <steps>
+    <item>
+      <p>Select <guiseq><gui>Find</gui><gui>By Rating</gui><gui>Set Rating
+         Filter</gui></guiseq>.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/ratings.page b/help/es/ratings.page
new file mode 100644
index 0000000..f11f04a
--- /dev/null
+++ b/help/es/ratings.page
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="topic" id="ratings">
+  <info>
+    <link type="guide" xref="index#basic-functions" group="rate"/>
+    <desc>Rate your photos from one to five stars</desc>
+  </info>
+
+  <title>
+    Rating your photos
+  </title>
+  <p><app>F-Spot</app> allows you to rate your photos from one to five stars.
+     There are two ways to rate photos.</p>
+  <p>Method One:</p>
+  <steps>
+    <item>
+      <p>By double-clicking, select the photo you wish to rate.</p>
+    </item>
+    <item>
+      <p>In the lower-right corner, you will see five dots, corresponding to
+         the rating you wish to give; to give a rating of one star, for
+         example, click the first dot.</p>
+    </item>
+  </steps>
+  <p>Method Two:</p>
+  <steps>
+    <item>
+      <p>Select the photo(s) you wish to rate.</p>
+    </item>
+    <item>
+      <p>Right-click the photo(s) you wish to rate, and select a rating at the
+         bottom of the right-click menu by clicking the corresponding dot.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/smugmug.page b/help/es/smugmug.page
new file mode 100644
index 0000000..80d2701
--- /dev/null
+++ b/help/es/smugmug.page
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="smugmug">
+
+  <info>
+    <link type="guide" xref="upload-to-web"/>
+    <desc>Upload photos to SmugMug</desc>
+  </info>
+
+  <title>SmugMug</title>
+
+  <p>To upload photos to SmugMug you will need a SmugMug account, as well as
+     internet access.  Also, the SmugMug
+     <link xref="extensions">extension</link> must be installed and enabled.
+     </p>
+</page>
diff --git a/help/es/tag-attach.page b/help/es/tag-attach.page
new file mode 100644
index 0000000..c8a4073
--- /dev/null
+++ b/help/es/tag-attach.page
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="topic" id="tag-attach">
+  <info>
+    <link type="guide" xref="tags#tag-functions" group="attach"/>
+    <desc>Attaching tags to photos</desc>
+  </info>
+
+  <title>
+    Attaching
+  </title>
+  <p>By attaching tags you have <link xref="tag-creation">created</link> you
+     make it easier to search through your photos.  As with creating tags,
+     there is more than one method of attaching tags to photos.</p>
+  <p>Method One:</p>
+  <steps>
+    <item>
+      <p>Select photos to which to attach a tag.</p>
+    </item>
+    <item>
+      <p>In the tag pane, select a tag to attach to the photos you have
+         selected.</p>
+    </item>
+    <item>
+      <p>Click <guiseq><gui>Tags</gui><gui>Attach Tag to Selection</gui>
+      </guiseq>.  Alternatively, press Ctrl+T.</p>
+    </item>
+  </steps>
+  <p>Method Two:</p>
+  <steps>
+    <item>
+      <p>Select photos to which to attach a tag.</p>
+    </item>
+    <item>
+      <p>Right click the photos.</p>
+    </item>
+    <item>
+      <p>Select <gui>Attach Tag</gui> and select the tag you wish to attach.
+      </p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/tag-creation.page b/help/es/tag-creation.page
new file mode 100644
index 0000000..458cc87
--- /dev/null
+++ b/help/es/tag-creation.page
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="topic" id="tag-creation">
+  <info>
+    <link type="guide" xref="tags#tag-functions" group="create"/>
+    <desc>Creating tags to be attached to photos</desc>
+  </info>
+
+  <title>Crear</title>
+  <p>In order to use tags, you need to first create a set of tags which you
+     wish to use.  There are three main methods to create tags.</p>
+  <p>Method One:</p>
+  <steps>
+    <item>
+      <p>Select <guiseq><gui>Tags</gui><gui>Create New Tag...</gui></guiseq>.
+      </p>
+    </item>
+    <item>
+      <p>Select a parent tag for the new tag to appear under, such as people
+         or events.  If you wish to create a new tag without a parent, select
+         <gui>(None)</gui>.</p>
+    </item>
+    <item>
+      <p>Name the tag.</p>
+    </item>
+    <item>
+      <p>Click <gui>Create</gui></p>
+    </item>
+  </steps>
+  <p>Method Two:</p>
+  <steps>
+    <item>
+      <p>In the tags page, right click, and select <gui>Create New Tag...</gui>
+      </p>
+    </item>
+    <item>
+      <p>Select a parent tag for the new tag to appear under, such as people
+         or events.  If you wish to create a new tag without a parent, select
+         <gui>(None)</gui>.</p>
+    </item>
+    <item>
+      <p>Name the tag.</p>
+    </item>
+    <item>
+      <p>Click <gui>Create</gui></p>
+    </item>
+  </steps>
+  <p>Method three has the advantage of also <link xref="tag-attach">
+     attaching</link> the new tag to the photos selected.  To do this:</p>
+  <steps>
+    <item>
+      <p>Select the photos to which you wish to attach the new tag.</p>
+    </item>
+    <item>
+      <p>Right-click on the photos, and select <guiseq><gui>Attach Tag</gui>
+         <gui>Create New Tag...</gui></guiseq>.</p>
+    </item>
+    <item>
+      <p>Select a parent tag for the new tag to appear under, such as people
+         or events.  If you wish to create a new tag without a parent, select
+         <gui>(None)</gui>.</p>
+    </item>
+    <item>
+      <p>Name the tag.</p>
+    </item>
+    <item>
+      <p>Click <gui>Create</gui></p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/tag-delete.page b/help/es/tag-delete.page
new file mode 100644
index 0000000..f39a929
--- /dev/null
+++ b/help/es/tag-delete.page
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="topic" id="tag-delete">
+  <info>
+    <link type="guide" xref="tags#tag-functions" group="delete"/>
+    <desc>Deleting tags from the system</desc>
+  </info>
+
+  <title>
+    Deleting
+  </title>
+  <p>Deleting tags removes them entirely from your system, but leaves behind
+     any photos to which that tag is attached.</p>
+  <p>To delete a tag:</p>
+  <steps>
+    <item>
+      <p>Select the tag you wish to delete from within the tag pane.</p>
+    </item>
+    <item>
+      <p>Click <guiseq><gui>Tags</gui><gui>Delete Select Tag</gui></guiseq>.
+      Alternatively, right click the tag within the pane, and click
+      <gui>Delete Tag</gui>.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/tag-remove.page b/help/es/tag-remove.page
new file mode 100644
index 0000000..e84621d
--- /dev/null
+++ b/help/es/tag-remove.page
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="topic" id="tag-remove">
+  <info>
+    <link type="guide" xref="tags#tag-functions" group="remove"/>
+    <desc>Removing tags from photos</desc>
+  </info>
+
+  <title>Eliminando</title>
+  <p>As with attaching tags, there are two main methods of removing tags
+     from photos.</p>
+  <p>Method One:</p>
+  <steps>
+    <item>
+      <p>Select photos from which to remove a tag.</p>
+    </item>
+    <item>
+      <p>In the tag pane, select a tag to remove from the photos you have
+         selected.</p>
+    </item>
+    <item>
+      <p>Click <guiseq><gui>Tags</gui><gui>Remove Tag From Selection</gui>
+      </guiseq>.</p>
+    </item>
+  </steps>
+  <p>Method Two:</p>
+  <steps>
+    <item>
+      <p>Select photos from which to remove a tag.</p>
+    </item>
+    <item>
+      <p>Right click the photos.</p>
+    </item>
+    <item>
+      <p>Select <gui>Remove Tag</gui> and select the tag you wish to remove.
+      </p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/tag-search.page b/help/es/tag-search.page
new file mode 100644
index 0000000..19ceb5d
--- /dev/null
+++ b/help/es/tag-search.page
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="tag-search">
+
+  <info>
+    <link type="guide" xref="index#searching"/>
+    <desc>Search photos using tags</desc>
+  </info>
+
+  <title>
+    Search by Tag
+  </title>
+
+  <p>There are several methods to search by tags.</p>
+  <p>Method One:  Double-click the tags you wish to search for.</p>
+  <p>Method Two:</p>
+  <steps>
+    <item>
+      <p>Enable the Find bar by clicking <guiseq><gui>Find</gui>
+         <gui>Show Find bar</gui></guiseq>.</p>
+    </item>
+    <item>
+      <p>Drag the tags you wish to search for into the newly-enabled Find bar.
+      </p>
+    </item>
+  <p>To remove a tag from your search, right-click the tag in the Find bar and
+     click <gui>Remove From Search</gui>.</p>
+  </steps>
+  <p>To exclude a tag from your search:</p>
+  <steps>
+    <item>
+      <p>In the tag pane, double-click the tag you wish to exclude.  This will
+         add it to the Find bar.</p>
+    </item>
+    <item>
+      <p>In the Find bar, double-click the tag you wish to exclude.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/tags.page b/help/es/tags.page
new file mode 100644
index 0000000..a5f0717
--- /dev/null
+++ b/help/es/tags.page
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" type="guide" id="tags">
+  <info>
+    <link type="guide" xref="index#basic-functions" group="tag"/>
+    <desc>A brief introduction to the tagging capabilities of F-Spot</desc>
+  </info>
+
+  <title>Etiquetas</title>
+  <p>Like certain other photo managers, <app>F-Spot</app> lets you tag your photos,
+     allowing for quick, easy content-based searching of your photos.  You can
+     tag people, events, places, favorite things, or even make your own groups
+     of tags.</p>
+  <section id="tag-functions" style="2column" groups="create attach remove delete">
+    <title>Working with Tags</title>
+  </section>
+</page>
diff --git a/help/es/upload-to-web.page b/help/es/upload-to-web.page
new file mode 100644
index 0000000..e5bdb3a
--- /dev/null
+++ b/help/es/upload-to-web.page
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="guide" id="upload-to-web">
+
+  <info>
+    <link type="guide" xref="index#sharing"/>
+    <desc>Upload photos to various web services</desc>
+  </info>
+
+  <title>
+    Upload to Web
+  </title>
+  <p><app>F-Spot</app> allows you to upload photos to popular web services,
+     including Google's PicasaWeb and Flickr.</p>
+</page>
diff --git a/help/es/versioning.page b/help/es/versioning.page
new file mode 100644
index 0000000..f014ee1
--- /dev/null
+++ b/help/es/versioning.page
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="versions">
+
+  <info>
+    <link type="guide" xref="index#advanced"/>
+    <desc>Track different versions of your photos</desc>
+  </info>
+
+  <title>Versionado</title>
+  <p><app>F-Spot</app> allows you to keep multiple versions of your photos.
+     This is especially useful when editing photos, as you can quickly see the
+     difference between the edited version and the original.</p>
+  <p>To switch between versions while editing:</p>
+  <steps>
+    <item>
+      <p>Double-click the photo you wish to edit.</p>
+    </item>
+    <item>
+      <p>In the sidebar, you will see a drop-down box labeled
+         <gui>Version:</gui>.  To select a version to view, select it in the
+         drop-down box.</p>
+    </item>
+  </steps>
+</page>
diff --git a/help/es/zooomr.page b/help/es/zooomr.page
new file mode 100644
index 0000000..a0bec3f
--- /dev/null
+++ b/help/es/zooomr.page
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/" xmlns:e="http://projectmallard.org/experimental/" type="topic" id="zooomr">
+
+  <info>
+    <link type="guide" xref="upload-to-web"/>
+    <desc>Upload photos to Zooomr</desc>
+  </info>
+
+  <title>
+    Zooomr
+  </title>
+
+  <p>To upload photos to Zooomr you will need a Zooomr account, as well as
+     internet access.  Also, the Zooomr
+     <link xref="extensions">extension</link> must be installed and enabled.
+     </p>
+</page>
diff --git a/icons/Makefile.am b/icons/Makefile.am
index 422c081..483343d 100644
--- a/icons/Makefile.am
+++ b/icons/Makefile.am
@@ -59,12 +59,6 @@ theme_icons = 					\
 	actions,view-restore-22.png		\
 	actions,view-restore-24.png		\
 	actions,view-restore-32.png		\
-	apps,f-spot-16.png			\
-	apps,f-spot-22.png			\
-	apps,f-spot-24.png			\
-	apps,f-spot-32.png			\
-	apps,f-spot-128.png			\
-	apps,f-spot-256.png			\
 	devices,camera-photo-16.png		\
 	devices,camera-photo-22.png		\
 	devices,camera-photo-24.png		\
diff --git a/icons/Makefile.in b/icons/Makefile.in
index ad2e35d..5bd6cca 100644
--- a/icons/Makefile.in
+++ b/icons/Makefile.in
@@ -45,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -68,6 +69,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -77,9 +82,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -93,6 +95,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -120,6 +123,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -216,14 +220,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -335,12 +337,6 @@ theme_icons = \
 	actions,view-restore-22.png		\
 	actions,view-restore-24.png		\
 	actions,view-restore-32.png		\
-	apps,f-spot-16.png			\
-	apps,f-spot-22.png			\
-	apps,f-spot-24.png			\
-	apps,f-spot-32.png			\
-	apps,f-spot-128.png			\
-	apps,f-spot-256.png			\
 	devices,camera-photo-16.png		\
 	devices,camera-photo-22.png		\
 	devices,camera-photo-24.png		\
diff --git a/lib/GKeyFile/Makefile.in b/lib/GKeyFile/Makefile.in
index ff08034..589bffc 100644
--- a/lib/GKeyFile/Makefile.in
+++ b/lib/GKeyFile/Makefile.in
@@ -52,6 +52,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -98,6 +99,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -107,9 +112,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -123,6 +125,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -150,6 +153,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -246,14 +250,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/Hyena/Hyena.Data.Sqlite/Makefile.in b/lib/Hyena/Hyena.Data.Sqlite/Makefile.in
index 80c1fb5..efc180a 100644
--- a/lib/Hyena/Hyena.Data.Sqlite/Makefile.in
+++ b/lib/Hyena/Hyena.Data.Sqlite/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -95,6 +96,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -104,9 +109,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -120,6 +122,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -147,6 +150,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -243,14 +247,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -358,7 +360,6 @@ LINK_MONO_POSIX = -r:Mono.Posix
 LINK_MONO_CAIRO = -r:Mono.Cairo
 LINK_MONO_SIMD = -r:Mono.Simd
 LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
 LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
 LINK_KEYRING = $(KEYRINGSHARP_LIBS)
 LINK_GLIB = $(GLIBSHARP_LIBS)
@@ -419,7 +420,7 @@ LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
 LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
 
 # FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
 LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
 LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
 
@@ -428,6 +429,10 @@ REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
 LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
 LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
 
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
 # FSpot.JobScheduler
 REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
 LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
@@ -443,17 +448,18 @@ REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DB
 LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
 LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
 
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
 
 # FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
             $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
             $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
 
 # FIXME: do not link executables
 LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
@@ -474,10 +480,10 @@ REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
 LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
 LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
 REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
 LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
 LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
 REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
 LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
 LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
@@ -652,7 +658,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(SCRIPTS)
+all-am: Makefile $(SCRIPTS) all-local
 installdirs:
 	for dir in "$(DESTDIR)$(moduledir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
@@ -753,21 +759,21 @@ uninstall-am: uninstall-local uninstall-moduleSCRIPTS
 
 .MAKE: install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
 
 run: 
 	@pushd $(top_builddir); \
diff --git a/lib/Hyena/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs b/lib/Hyena/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs
index a5d17b6..e45a54a 100644
--- a/lib/Hyena/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs
+++ b/lib/Hyena/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs
@@ -43,6 +43,7 @@ namespace Hyena.Data.Gui
 
         public ColumnHeaderCellText (DataHandler data_handler) : base (null, true)
         {
+            UseMarkup = true;
             this.data_handler = data_handler;
         }
 
diff --git a/lib/Hyena/Hyena.Gui/Makefile.in b/lib/Hyena/Hyena.Gui/Makefile.in
index 30bfc3e..6ad666e 100644
--- a/lib/Hyena/Hyena.Gui/Makefile.in
+++ b/lib/Hyena/Hyena.Gui/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -95,6 +96,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -104,9 +109,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -120,6 +122,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -147,6 +150,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -243,14 +247,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -450,7 +452,6 @@ LINK_MONO_POSIX = -r:Mono.Posix
 LINK_MONO_CAIRO = -r:Mono.Cairo
 LINK_MONO_SIMD = -r:Mono.Simd
 LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
 LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
 LINK_KEYRING = $(KEYRINGSHARP_LIBS)
 LINK_GLIB = $(GLIBSHARP_LIBS)
@@ -511,7 +512,7 @@ LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
 LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
 
 # FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
 LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
 LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
 
@@ -520,6 +521,10 @@ REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
 LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
 LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
 
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
 # FSpot.JobScheduler
 REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
 LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
@@ -535,17 +540,18 @@ REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DB
 LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
 LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
 
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
 
 # FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
             $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
             $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
 
 # FIXME: do not link executables
 LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
@@ -566,10 +572,10 @@ REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
 LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
 LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
 REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
 LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
 LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
 REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
 LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
 LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
@@ -745,7 +751,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(SCRIPTS)
+all-am: Makefile $(SCRIPTS) all-local
 installdirs:
 	for dir in "$(DESTDIR)$(moduledir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
@@ -846,21 +852,21 @@ uninstall-am: uninstall-local uninstall-moduleSCRIPTS
 
 .MAKE: install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
 
 run: 
 	@pushd $(top_builddir); \
diff --git a/lib/Hyena/Hyena/Hyena.Data/ArrayModelCache.cs b/lib/Hyena/Hyena/Hyena.Data/ArrayModelCache.cs
index 09d09f1..23ebbdb 100644
--- a/lib/Hyena/Hyena/Hyena.Data/ArrayModelCache.cs
+++ b/lib/Hyena/Hyena/Hyena.Data/ArrayModelCache.cs
@@ -38,7 +38,7 @@ namespace Hyena.Data
 
         public ArrayModelCache (ICacheableModel model) : base (model)
         {
-            cache = new T [model.FetchCount];
+            cache = new T [Model.FetchCount];
         }
 
         public override bool ContainsKey (long i)
@@ -49,8 +49,8 @@ namespace Hyena.Data
 
         public override void Add (long i, T item)
         {
-            if (cache.Length != model.FetchCount) {
-                cache = new T [model.FetchCount];
+            if (cache.Length != Model.FetchCount) {
+                cache = new T [Model.FetchCount];
                 Clear ();
             }
 
diff --git a/lib/Hyena/Hyena/Hyena.Data/ModelCache.cs b/lib/Hyena/Hyena/Hyena.Data/ModelCache.cs
index fe610b2..9e47f47 100644
--- a/lib/Hyena/Hyena/Hyena.Data/ModelCache.cs
+++ b/lib/Hyena/Hyena/Hyena.Data/ModelCache.cs
@@ -33,7 +33,8 @@ namespace Hyena.Data
 {
     public abstract class ModelCache<T> where T : ICacheableItem, new ()
     {
-        protected ICacheableModel model;
+        private ICacheableModel model;
+        protected ICacheableModel Model { get { return model; } }
 
         public ModelCache (ICacheableModel model)
         {
diff --git a/lib/Hyena/Hyena/Hyena.Downloader/HttpDownloader.cs b/lib/Hyena/Hyena/Hyena.Downloader/HttpDownloader.cs
index a9026b7..26877db 100644
--- a/lib/Hyena/Hyena/Hyena.Downloader/HttpDownloader.cs
+++ b/lib/Hyena/Hyena/Hyena.Downloader/HttpDownloader.cs
@@ -27,6 +27,7 @@
 using System;
 using System.IO;
 using System.Net;
+using System.Threading;
 
 namespace Hyena.Downloader
 {
@@ -42,6 +43,7 @@ namespace Hyena.Downloader
         private Stream response_stream;
         private DateTime last_raised_percent_complete;
         private IAsyncResult async_begin_result;
+        private ManualResetEvent sync_event;
 
         public string UserAgent { get; set; }
         public Uri Uri { get; set; }
@@ -76,6 +78,14 @@ namespace Hyena.Downloader
             ProgressEventRaiseLimit = TimeSpan.FromSeconds (0.25);
         }
 
+        public void StartSync ()
+        {
+            sync_event = new ManualResetEvent (false);
+            Start ();
+            sync_event.WaitOne ();
+            sync_event = null;
+        }
+
         public void Start ()
         {
             lock (SyncRoot) {
@@ -261,8 +271,16 @@ namespace Hyena.Downloader
         {
             var handler = Finished;
             if (handler != null) {
-                handler (this);
+                try {
+                    handler (this);
+                } catch (Exception e) {
+                    Log.Exception (String.Format ("HttpDownloader.Finished handler ({0})", Uri), e);
+                }
             } 
+
+            if (sync_event != null) {
+                sync_event.Set ();
+            }
         }
 
         public override string ToString ()
@@ -270,4 +288,4 @@ namespace Hyena.Downloader
             return Name;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/lib/Hyena/Hyena/Hyena.Downloader/HttpFileDownloader.cs b/lib/Hyena/Hyena/Hyena.Downloader/HttpFileDownloader.cs
index 6c9e4e1..f613b1a 100644
--- a/lib/Hyena/Hyena/Hyena.Downloader/HttpFileDownloader.cs
+++ b/lib/Hyena/Hyena/Hyena.Downloader/HttpFileDownloader.cs
@@ -66,9 +66,13 @@ namespace Hyena.Downloader
         protected override void OnFinished ()
         {
             if (file_stream != null) {
-                file_stream.Close ();
-                file_stream = null;
-                OnFileFinished ();
+                try {
+                    file_stream.Close ();
+                    file_stream = null;
+                    OnFileFinished ();
+                } catch (Exception e) {
+                    Log.Exception (String.Format ("HttpFileDownloader.OnFinished ({0})", Uri), e);
+                }
             }
 
             base.OnFinished ();
@@ -82,4 +86,4 @@ namespace Hyena.Downloader
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/lib/Hyena/Hyena/Hyena.Downloader/HttpStringDownloader.cs b/lib/Hyena/Hyena/Hyena.Downloader/HttpStringDownloader.cs
index e1903cf..412d977 100644
--- a/lib/Hyena/Hyena/Hyena.Downloader/HttpStringDownloader.cs
+++ b/lib/Hyena/Hyena/Hyena.Downloader/HttpStringDownloader.cs
@@ -57,11 +57,16 @@ namespace Hyena.Downloader
 
         protected override void OnFinished ()
         {
-            base.OnFinished ();
             var handler = Finished;
             if (handler != null) {
-                handler (this);
+                try {
+                    handler (this);
+                } catch (Exception e) {
+                    Log.Exception (String.Format ("HttpStringDownloader.Finished handler ({0})", Uri), e);
+                }
             }
+
+            base.OnFinished ();
         }
     }
 }
diff --git a/src/Core/FSpot.Core.dll.config b/lib/Hyena/Hyena/Hyena.dll.config
similarity index 100%
copy from src/Core/FSpot.Core.dll.config
copy to lib/Hyena/Hyena/Hyena.dll.config
diff --git a/lib/Hyena/Hyena/Hyena/SafeUri.cs b/lib/Hyena/Hyena/Hyena/SafeUri.cs
new file mode 100644
index 0000000..a394c78
--- /dev/null
+++ b/lib/Hyena/Hyena/Hyena/SafeUri.cs
@@ -0,0 +1,209 @@
+/***************************************************************************
+ *  SafeUri.cs
+ *
+ *  Copyright (C) 2006 Novell, Inc.
+ *  Written by Aaron Bockover <aaron at abock.org>
+ ****************************************************************************/
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
+ *  Software is furnished to do so, subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in
+ *  all copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ *  DEALINGS IN THE SOFTWARE.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Hyena
+{
+    public class SafeUri
+    {
+        private enum LocalPathCheck {
+            NotPerformed,
+            Yes,
+            No
+        }
+
+        private static int MAX_SCHEME_LENGTH = 8;
+
+        private string uri;
+        private string local_path;
+        private string scheme;
+        private LocalPathCheck local_path_check = LocalPathCheck.NotPerformed;
+
+        public SafeUri (string uri)
+        {
+            int scheme_delimit_index = uri.IndexOf ("://");
+            if (scheme_delimit_index > 0 && scheme_delimit_index <= MAX_SCHEME_LENGTH) {
+                this.uri = uri;
+            } else {
+                this.uri = FilenameToUri (uri);
+            }
+        }
+
+        public SafeUri (string uri, bool isUri)
+        {
+            if (isUri) {
+                this.uri = uri;
+            } else {
+                this.uri = FilenameToUri (uri);
+            }
+        }
+
+        public SafeUri (Uri uri)
+        {
+            this.uri = uri.AbsoluteUri;
+        }
+
+        public static string FilenameToUri (string localPath)
+        {
+            // TODO: replace with managed conversion to avoid marshalling
+            IntPtr path_ptr = GLib.Marshaller.StringToPtrGStrdup (localPath);
+
+#if WIN32
+            IntPtr uri_ptr = g_filename_to_uri_utf8 (path_ptr, IntPtr.Zero, IntPtr.Zero);
+#else
+            IntPtr uri_ptr = g_filename_to_uri (path_ptr, IntPtr.Zero, IntPtr.Zero);
+#endif
+            GLib.Marshaller.Free (path_ptr);
+
+            if (uri_ptr == IntPtr.Zero) {
+                throw new ApplicationException ("Filename path must be absolute");
+            }
+
+            string uri = GLib.Marshaller.Utf8PtrToString (uri_ptr);
+            GLib.Marshaller.Free (uri_ptr);
+
+            return uri;
+        }
+
+        public static string UriToFilename (string uri)
+        {
+            // TODO: replace with managed conversion to avoid marshalling
+            IntPtr uri_ptr = GLib.Marshaller.StringToPtrGStrdup (uri);
+#if WIN32
+            IntPtr path_ptr = g_filename_from_uri_utf8 (uri_ptr, IntPtr.Zero, IntPtr.Zero);
+#else
+            IntPtr path_ptr = g_filename_from_uri (uri_ptr, IntPtr.Zero, IntPtr.Zero);
+#endif
+
+            GLib.Marshaller.Free (uri_ptr);
+
+            if (path_ptr == IntPtr.Zero) {
+                throw new ApplicationException ("URI could not be converted to local file location");
+            }
+
+            string path = GLib.Marshaller.Utf8PtrToString (path_ptr);
+            GLib.Marshaller.Free (path_ptr);
+
+            return path;
+        }
+
+        public static string UriToFilename (SafeUri uri)
+        {
+            return UriToFilename (uri.AbsoluteUri);
+        }
+
+        public override string ToString ()
+        {
+            return AbsoluteUri;
+        }
+
+        public static implicit operator string (SafeUri s)
+        {
+            return s.ToString ();
+        }
+
+        public override bool Equals (object o)
+        {
+            SafeUri s = o as SafeUri;
+            if (s != null) {
+                return s.AbsoluteUri == AbsoluteUri;
+            }
+
+            return false;
+        }
+
+        public override int GetHashCode ()
+        {
+            return AbsoluteUri.GetHashCode ();
+        }
+
+        public string AbsoluteUri {
+            get { return uri; }
+        }
+
+        public bool IsLocalPath {
+            get {
+                if (local_path_check == LocalPathCheck.NotPerformed) {
+                    if (IsFile) {
+                        local_path_check = LocalPathCheck.Yes;
+                        return true;
+                    } else {
+                        local_path_check = LocalPathCheck.No;
+                        return false;
+                    }
+                }
+
+                return local_path_check == LocalPathCheck.Yes;
+            }
+        }
+
+        public string AbsolutePath {
+            get {
+                if (local_path == null && IsLocalPath) {
+                    local_path = UriToFilename (uri);
+                }
+
+                return local_path;
+            }
+        }
+
+        public string LocalPath {
+            get { return AbsolutePath; }
+        }
+
+        public string Scheme {
+            get {
+                if (scheme == null) {
+                    scheme = uri.Substring (0, uri.IndexOf ("://"));
+                }
+
+                return scheme;
+            }
+        }
+
+        public bool IsFile {
+            get { return Scheme == System.Uri.UriSchemeFile; }
+        }
+
+#if WIN32
+        [DllImport ("libglib-2.0-0.dll")]
+        private static extern IntPtr g_filename_to_uri_utf8 (IntPtr filename, IntPtr hostname, IntPtr error);
+
+        [DllImport ("libglib-2.0-0.dll")]
+        private static extern IntPtr g_filename_from_uri_utf8 (IntPtr uri, IntPtr hostname, IntPtr error);
+#else
+        [DllImport ("libglib-2.0-0.dll")]
+        private static extern IntPtr g_filename_to_uri (IntPtr filename, IntPtr hostname, IntPtr error);
+
+        [DllImport ("libglib-2.0-0.dll")]
+        private static extern IntPtr g_filename_from_uri (IntPtr uri, IntPtr hostname, IntPtr error);
+#endif
+    }
+}
diff --git a/lib/Hyena/Hyena/Hyena/StringUtil.cs b/lib/Hyena/Hyena/Hyena/StringUtil.cs
index 232641e..8075a8c 100644
--- a/lib/Hyena/Hyena/Hyena/StringUtil.cs
+++ b/lib/Hyena/Hyena/Hyena/StringUtil.cs
@@ -337,5 +337,20 @@ namespace Hyena
             }
             return s;
         }
+
+        public static string Join (this IEnumerable<string> strings, string sep)
+        {
+            var sb = new StringBuilder ();
+            foreach (var str in strings) {
+                sb.Append (str);
+                sb.Append (sep);
+            }
+
+            if (sb.Length > 0 && sep != null) {
+                sb.Length -= sep.Length;
+            }
+
+            return sb.ToString ();
+        }
     }
 }
diff --git a/lib/Hyena/Hyena/Hyena/Tests/StringUtilTests.cs b/lib/Hyena/Hyena/Hyena/Tests/StringUtilTests.cs
index ecf331e..e7c940c 100644
--- a/lib/Hyena/Hyena/Hyena/Tests/StringUtilTests.cs
+++ b/lib/Hyena/Hyena/Hyena/Tests/StringUtilTests.cs
@@ -31,6 +31,7 @@
 
 using System;
 using System.IO;
+using System.Linq;
 using NUnit.Framework;
 using Hyena;
 
@@ -145,6 +146,19 @@ bar"));
             Assert.AreEqual ("foobaz foo bar", StringUtil.RemoveHtml (@"foo<a
 href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
         }
+
+        [Test]
+        public void TestJoin ()
+        {
+            var s = new string [] { "foo", "bar" };
+            Assert.AreEqual ("foo, bar", s.Join (", "));
+            Assert.AreEqual ("foobar", s.Join (""));
+            Assert.AreEqual ("foobar", s.Join (null));
+            Assert.AreEqual ("", new string [] {}.Join (", "));
+
+            s = new string [] { "foo", "bar", "baz" };
+            Assert.AreEqual ("foo -- bar -- baz", s.Join (" -- "));
+        }
     }
 
     [TestFixture]
diff --git a/lib/Hyena/Hyena/Makefile.am b/lib/Hyena/Hyena/Makefile.am
index 6825feb..d63bfc6 100644
--- a/lib/Hyena/Hyena/Makefile.am
+++ b/lib/Hyena/Hyena/Makefile.am
@@ -1,6 +1,6 @@
 ASSEMBLY = Hyena
 TARGET = library
-LINK = -r:Mono.Posix -r:System  -r:System.Core
+LINK = -r:Mono.Posix -r:System  -r:System.Core $(GLIBSHARP_LIBS)
 SOURCES =  \
 	Hyena.Collections/CollectionExtensions.cs \
 	Hyena.Collections/IntervalHeap.cs \
@@ -113,6 +113,7 @@ SOURCES =  \
 	Hyena/Log.cs \
 	Hyena/Paths.cs \
 	Hyena/PlatformDetection.cs \
+	Hyena/SafeUri.cs \
 	Hyena/StringUtil.cs \
 	Hyena/Tests/CryptoUtilTests.cs \
 	Hyena/Tests/DateTimeUtilTests.cs \
@@ -126,3 +127,6 @@ SOURCES =  \
 	System.Web/HttpUtility.cs
 
 include $(top_srcdir)/build/build.mk
+
+EXTRA_DIST += Hyena.dll.config
+module_SCRIPTS += Hyena.dll.config
diff --git a/lib/Hyena/Hyena/Makefile.in b/lib/Hyena/Hyena/Makefile.in
index 843a75e..51f49ae 100644
--- a/lib/Hyena/Hyena/Makefile.in
+++ b/lib/Hyena/Hyena/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -95,6 +96,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -104,9 +109,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -120,6 +122,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -147,6 +150,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -243,14 +247,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -304,7 +306,8 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 ASSEMBLY = Hyena
 TARGET = library
-LINK = -r:Mono.Posix -r:System -r:System.Core $(am__append_1)
+LINK = -r:Mono.Posix -r:System -r:System.Core $(GLIBSHARP_LIBS) \
+	$(am__append_1)
 SOURCES = \
 	Hyena.Collections/CollectionExtensions.cs \
 	Hyena.Collections/IntervalHeap.cs \
@@ -417,6 +420,7 @@ SOURCES = \
 	Hyena/Log.cs \
 	Hyena/Paths.cs \
 	Hyena/PlatformDetection.cs \
+	Hyena/SafeUri.cs \
 	Hyena/StringUtil.cs \
 	Hyena/Tests/CryptoUtilTests.cs \
 	Hyena/Tests/DateTimeUtilTests.cs \
@@ -457,7 +461,6 @@ LINK_MONO_POSIX = -r:Mono.Posix
 LINK_MONO_CAIRO = -r:Mono.Cairo
 LINK_MONO_SIMD = -r:Mono.Simd
 LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
 LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
 LINK_KEYRING = $(KEYRINGSHARP_LIBS)
 LINK_GLIB = $(GLIBSHARP_LIBS)
@@ -518,7 +521,7 @@ LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
 LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
 
 # FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
 LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
 LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
 
@@ -527,6 +530,10 @@ REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
 LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
 LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
 
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
 # FSpot.JobScheduler
 REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
 LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
@@ -542,17 +549,18 @@ REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DB
 LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
 LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
 
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
 
 # FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
             $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
             $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
 
 # FIXME: do not link executables
 LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
@@ -573,10 +581,10 @@ REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
 LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
 LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
 REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
 LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
 LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
 REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
 LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
 LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
@@ -634,8 +642,9 @@ OUTPUT_FILES = \
 	$(ASSEMBLY_FILE).mdb
 
 moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+module_SCRIPTS = $(OUTPUT_FILES) Hyena.dll.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+	$(THEME_ICONS_SOURCE) Hyena.dll.config
 CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
 DISTCLEANFILES = *.pidb
 MAINTAINERCLEANFILES = Makefile.in
@@ -751,7 +760,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(SCRIPTS)
+all-am: Makefile $(SCRIPTS) all-local
 installdirs:
 	for dir in "$(DESTDIR)$(moduledir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
@@ -852,21 +861,21 @@ uninstall-am: uninstall-local uninstall-moduleSCRIPTS
 
 .MAKE: install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
 
 run: 
 	@pushd $(top_builddir); \
diff --git a/lib/Hyena/Makefile.in b/lib/Hyena/Makefile.in
index 903f4b3..6a9c5f0 100644
--- a/lib/Hyena/Makefile.in
+++ b/lib/Hyena/Makefile.in
@@ -46,6 +46,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -109,6 +110,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -118,9 +123,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -134,6 +136,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -161,6 +164,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -257,14 +261,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/Hyena/Mono.Data.Sqlite/Makefile.in b/lib/Hyena/Mono.Data.Sqlite/Makefile.in
index 3634bcd..b0249ac 100644
--- a/lib/Hyena/Mono.Data.Sqlite/Makefile.in
+++ b/lib/Hyena/Mono.Data.Sqlite/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -95,6 +96,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -104,9 +109,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -120,6 +122,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -147,6 +150,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -243,14 +247,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -359,7 +361,6 @@ LINK_MONO_POSIX = -r:Mono.Posix
 LINK_MONO_CAIRO = -r:Mono.Cairo
 LINK_MONO_SIMD = -r:Mono.Simd
 LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
 LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
 LINK_KEYRING = $(KEYRINGSHARP_LIBS)
 LINK_GLIB = $(GLIBSHARP_LIBS)
@@ -420,7 +421,7 @@ LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
 LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
 
 # FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
 LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
 LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
 
@@ -429,6 +430,10 @@ REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
 LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
 LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
 
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
 # FSpot.JobScheduler
 REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
 LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
@@ -444,17 +449,18 @@ REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DB
 LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
 LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
 
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
 
 # FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
             $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
             $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
 
 # FIXME: do not link executables
 LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
@@ -475,10 +481,10 @@ REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
 LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
 LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
 REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
 LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
 LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
 REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
 LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
 LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
@@ -653,7 +659,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(SCRIPTS)
+all-am: Makefile $(SCRIPTS) all-local
 installdirs:
 	for dir in "$(DESTDIR)$(moduledir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
@@ -754,21 +760,21 @@ uninstall-am: uninstall-local uninstall-moduleSCRIPTS
 
 .MAKE: install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
 
 run: 
 	@pushd $(top_builddir); \
diff --git a/lib/Hyena/build/Makefile.in b/lib/Hyena/build/Makefile.in
index 5ddaa1e..8b7b054 100644
--- a/lib/Hyena/build/Makefile.in
+++ b/lib/Hyena/build/Makefile.in
@@ -47,6 +47,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -133,6 +134,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -142,9 +147,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -158,6 +160,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -185,6 +188,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -281,14 +285,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/Hyena/build/m4/Makefile.in b/lib/Hyena/build/m4/Makefile.in
index f22d389..c02326d 100644
--- a/lib/Hyena/build/m4/Makefile.in
+++ b/lib/Hyena/build/m4/Makefile.in
@@ -45,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -68,6 +69,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -77,9 +82,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -93,6 +95,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -120,6 +123,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -216,14 +220,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/Hyena/build/pkg-config/Makefile.in b/lib/Hyena/build/pkg-config/Makefile.in
index 5cac160..f2d568d 100644
--- a/lib/Hyena/build/pkg-config/Makefile.in
+++ b/lib/Hyena/build/pkg-config/Makefile.in
@@ -46,6 +46,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -92,6 +93,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -101,9 +106,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -117,6 +119,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -144,6 +147,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -240,14 +244,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 1d4a695..d568927 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -6,7 +6,10 @@ SUBDIRS = \
 	Hyena 				\
 	libfspot			\
 	TagLib 				\
-	unique-sharp
+	unique-sharp 		\
+	Mono.Google 		\
+	Mono.Tabblo 		\
+	SmugMugNet
 
 
 ### The stuff below takes care of embedding libraries. Build system hacks! ###
diff --git a/lib/Makefile.in b/lib/Makefile.in
index a114549..a97d4d4 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -45,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -108,6 +109,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -117,9 +122,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -133,6 +135,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -160,6 +163,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -256,14 +260,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -324,7 +326,10 @@ SUBDIRS = \
 	Hyena 				\
 	libfspot			\
 	TagLib 				\
-	unique-sharp
+	unique-sharp 		\
+	Mono.Google 		\
+	Mono.Tabblo 		\
+	SmugMugNet
 
 
 ### The stuff below takes care of embedding libraries. Build system hacks! ###
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/AssemblyInfo.cs b/lib/Mono.Google/AssemblyInfo.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/AssemblyInfo.cs
rename to lib/Mono.Google/AssemblyInfo.cs
diff --git a/lib/Mono.Google/Makefile.am b/lib/Mono.Google/Makefile.am
new file mode 100644
index 0000000..c436aec
--- /dev/null
+++ b/lib/Mono.Google/Makefile.am
@@ -0,0 +1,31 @@
+ASSEMBLY = Mono.Google
+TARGET = library
+LINK = $(REF_MONO_GOOGLE)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	Mono.Google.Picasa/AlbumAccess.cs \
+	Mono.Google.Picasa/CreateAlbumException.cs \
+	Mono.Google.Picasa/DeleteAlbumException.cs \
+	Mono.Google.Picasa/GDataApi.cs \
+	Mono.Google.Picasa/PicasaAlbum.cs \
+	Mono.Google.Picasa/PicasaAlbumCollection.cs \
+	Mono.Google.Picasa/PicasaPicture.cs \
+	Mono.Google.Picasa/PicasaPictureCollection.cs \
+	Mono.Google.Picasa/PicasaWeb.cs \
+	Mono.Google.Picasa/UploadPictureException.cs \
+	Mono.Google.Picasa/UploadProgressEventArgs.cs \
+	Mono.Google.Picasa/UploadProgressEventHandler.cs \
+	Mono.Google.Picasa/XmlUtil.cs \
+	Mono.Google/Authentication.cs \
+	Mono.Google/CaptchaException.cs \
+	Mono.Google/GoogleConnection.cs \
+	Mono.Google/GoogleService.cs \
+	Mono.Google/MultipartRequest.cs \
+	Mono.Google/NoCheckCertificatePolicy.cs
+
+RESOURCES =
+
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+include $(top_srcdir)/build/build.mk
diff --git a/lib/Mono.Google/Makefile.in b/lib/Mono.Google/Makefile.in
new file mode 100644
index 0000000..429cf26
--- /dev/null
+++ b/lib/Mono.Google/Makefile.in
@@ -0,0 +1,826 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = lib/Mono.Google
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = Mono.Google
+TARGET = library
+LINK = $(REF_MONO_GOOGLE) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	Mono.Google.Picasa/AlbumAccess.cs \
+	Mono.Google.Picasa/CreateAlbumException.cs \
+	Mono.Google.Picasa/DeleteAlbumException.cs \
+	Mono.Google.Picasa/GDataApi.cs \
+	Mono.Google.Picasa/PicasaAlbum.cs \
+	Mono.Google.Picasa/PicasaAlbumCollection.cs \
+	Mono.Google.Picasa/PicasaPicture.cs \
+	Mono.Google.Picasa/PicasaPictureCollection.cs \
+	Mono.Google.Picasa/PicasaWeb.cs \
+	Mono.Google.Picasa/UploadPictureException.cs \
+	Mono.Google.Picasa/UploadProgressEventArgs.cs \
+	Mono.Google.Picasa/UploadProgressEventHandler.cs \
+	Mono.Google.Picasa/XmlUtil.cs \
+	Mono.Google/Authentication.cs \
+	Mono.Google/CaptchaException.cs \
+	Mono.Google/GoogleConnection.cs \
+	Mono.Google/GoogleService.cs \
+	Mono.Google/MultipartRequest.cs \
+	Mono.Google/NoCheckCertificatePolicy.cs
+
+RESOURCES = 
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Mono.Google/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign lib/Mono.Google/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/AlbumAccess.cs b/lib/Mono.Google/Mono.Google.Picasa/AlbumAccess.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/AlbumAccess.cs
rename to lib/Mono.Google/Mono.Google.Picasa/AlbumAccess.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/CreateAlbumException.cs b/lib/Mono.Google/Mono.Google.Picasa/CreateAlbumException.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/CreateAlbumException.cs
rename to lib/Mono.Google/Mono.Google.Picasa/CreateAlbumException.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/DeleteAlbumException.cs b/lib/Mono.Google/Mono.Google.Picasa/DeleteAlbumException.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/DeleteAlbumException.cs
rename to lib/Mono.Google/Mono.Google.Picasa/DeleteAlbumException.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/GDataApi.cs b/lib/Mono.Google/Mono.Google.Picasa/GDataApi.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/GDataApi.cs
rename to lib/Mono.Google/Mono.Google.Picasa/GDataApi.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/PicasaAlbum.cs b/lib/Mono.Google/Mono.Google.Picasa/PicasaAlbum.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/PicasaAlbum.cs
rename to lib/Mono.Google/Mono.Google.Picasa/PicasaAlbum.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/PicasaAlbumCollection.cs b/lib/Mono.Google/Mono.Google.Picasa/PicasaAlbumCollection.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/PicasaAlbumCollection.cs
rename to lib/Mono.Google/Mono.Google.Picasa/PicasaAlbumCollection.cs
diff --git a/lib/Mono.Google/Mono.Google.Picasa/PicasaPicture.cs b/lib/Mono.Google/Mono.Google.Picasa/PicasaPicture.cs
new file mode 100644
index 0000000..81395b3
--- /dev/null
+++ b/lib/Mono.Google/Mono.Google.Picasa/PicasaPicture.cs
@@ -0,0 +1,202 @@
+//
+// Mono.Google.Picasa.PicasaPicture.cs:
+//
+// Authors:
+//	Gonzalo Paniagua Javier (gonzalo at ximian.com)
+//	Stephane Delcroix (stephane at delcroix.org)
+//
+// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
+// (C) Copyright 2007 S. Delcroix
+//
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Net;
+using System.Text;
+using System.Xml;
+using System.Globalization;
+
+namespace Mono.Google.Picasa {
+	public class PicasaPicture {
+		GoogleConnection conn;
+		PicasaAlbum album;
+		string title;
+		string description;
+		DateTime pub_date;
+		string thumbnail_url;
+		string image_url;
+		int width;
+		int height;
+		int index;
+		string id;
+		string link;
+		string tags;
+
+		internal PicasaPicture (GoogleConnection conn, PicasaAlbum album, XmlNode nodeitem, XmlNamespaceManager nsmgr)
+		{
+			this.conn = conn;
+			this.album = album;
+			ParsePicture (nodeitem, nsmgr);
+		}
+
+		public PicasaPicture (GoogleConnection conn, string aid, string pid)
+		{
+			if (conn == null)
+				throw new ArgumentNullException ("conn");
+			if (conn.User == null)
+				throw new ArgumentException ("Need authentication before being used.", "conn");
+			this.conn = conn;
+
+			if (aid == null || aid == String.Empty)
+				throw new ArgumentNullException ("aid");
+			this.album = new PicasaAlbum (conn, aid);
+
+			if (pid == null || pid == String.Empty)
+				throw new ArgumentNullException ("pid");
+
+			string received = conn.DownloadString (GDataApi.GetPictureEntry (conn.User, aid, pid));
+			XmlDocument doc = new XmlDocument ();
+			doc.LoadXml (received);
+			XmlNamespaceManager nsmgr = new XmlNamespaceManager (doc.NameTable);
+			XmlUtil.AddDefaultNamespaces (nsmgr);
+			XmlNode entry = doc.SelectSingleNode ("atom:entry", nsmgr);
+			ParsePicture (entry, nsmgr);
+		}
+
+		private void ParsePicture (XmlNode nodeitem, XmlNamespaceManager nsmgr)
+		{
+			title = nodeitem.SelectSingleNode ("atom:title", nsmgr).InnerText;
+			foreach (XmlNode xlink in nodeitem.SelectNodes ("atom:link", nsmgr)) {
+				if (xlink.Attributes.GetNamedItem ("rel").Value == "alternate") {
+					link = xlink.Attributes.GetNamedItem ("href").Value;
+					break;
+				}
+			}
+			description = nodeitem.SelectSingleNode ("media:group/media:description", nsmgr).InnerText;
+			CultureInfo info = CultureInfo.InvariantCulture;
+			pub_date = DateTime.ParseExact (nodeitem.SelectSingleNode ("atom:published", nsmgr).InnerText, GDataApi.DateFormat, info);
+			thumbnail_url = nodeitem.SelectSingleNode ("media:group/media:thumbnail", nsmgr).Attributes.GetNamedItem ("url").Value;
+			image_url = nodeitem.SelectSingleNode ("media:group/media:content", nsmgr).Attributes.GetNamedItem ("url").Value;
+			width = (int) UInt32.Parse (nodeitem.SelectSingleNode ("gphoto:width", nsmgr).InnerText);
+			height = (int) UInt32.Parse (nodeitem.SelectSingleNode ("gphoto:height", nsmgr).InnerText);
+
+			XmlNode node = nodeitem.SelectSingleNode ("gphoto:index", nsmgr);
+			index = (node != null) ? (int) UInt32.Parse (node.InnerText) : -1;
+			node = nodeitem.SelectSingleNode ("gphoto:id", nsmgr);
+			id = (node != null) ? node.InnerText : "auto" + title.GetHashCode ().ToString ();
+			tags = nodeitem.SelectSingleNode ("media:group/media:keywords", nsmgr).InnerText;
+		}
+
+		static string GetXmlForTagging (string tag)
+		{
+			XmlUtil xml = new XmlUtil ();
+			xml.WriteElementString ("title", tag);
+			xml.WriteElementStringWithAttributes ("category", null,
+					"scheme", "http://schemas.google.com/g/2005#kind",
+					"term", "http://schemas.google.com/photos/2007#tag");
+			return xml.GetDocumentString ();
+
+		}
+
+		public void AddTag (string tag)
+		{
+			if (tag == null)
+				throw new ArgumentNullException ("title");
+
+			string op_string = GetXmlForTagging (tag);
+			byte [] op_bytes = Encoding.UTF8.GetBytes (op_string);
+			string url = GDataApi.GetPictureFeed (conn.User, album.UniqueID, UniqueID);
+			HttpWebRequest request = conn.AuthenticatedRequest (url);
+			request.ContentType = "application/atom+xml; charset=UTF-8";
+			request.Method = "POST";
+			Stream output_stream = request.GetRequestStream ();
+			output_stream.Write (op_bytes, 0, op_bytes.Length);
+			output_stream.Close ();
+
+			HttpWebResponse response = (HttpWebResponse) request.GetResponse ();
+			using (Stream stream = response.GetResponseStream ()) {
+				StreamReader sr = new StreamReader (stream, Encoding.UTF8);
+				sr.ReadToEnd ();
+			}
+			response.Close ();
+		}
+
+		public void DownloadToStream (Stream stream)
+		{
+			conn.DownloadToStream (image_url, stream);
+		}
+
+		public void DownloadThumbnailToStream (Stream stream)
+		{
+			conn.DownloadToStream (thumbnail_url, stream);
+		}
+
+		public PicasaAlbum Album {
+			get { return album; }
+		}
+
+		public string Title {
+			get { return title; }
+		}
+
+		public string Description {
+			get { return description; }
+		}
+
+		public DateTime Date {
+			get { return pub_date; }
+		}
+
+		public string ThumbnailURL {
+			get { return thumbnail_url; }
+		}
+
+		public string ImageURL {
+			get { return image_url; }
+		}
+
+		public int Width {
+			get { return width; }
+		}
+
+		public int Height {
+			get { return height; }
+		}
+
+		public int Index {
+			get { return index; }
+		}
+
+		public string UniqueID {
+			get { return id; }
+		}
+
+		public string Link {
+			get { return link; }
+		}
+
+		public string Tags {
+			get { return tags; }
+		}
+	}
+}
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/PicasaPictureCollection.cs b/lib/Mono.Google/Mono.Google.Picasa/PicasaPictureCollection.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/PicasaPictureCollection.cs
rename to lib/Mono.Google/Mono.Google.Picasa/PicasaPictureCollection.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/PicasaWeb.cs b/lib/Mono.Google/Mono.Google.Picasa/PicasaWeb.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/PicasaWeb.cs
rename to lib/Mono.Google/Mono.Google.Picasa/PicasaWeb.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/UploadPictureException.cs b/lib/Mono.Google/Mono.Google.Picasa/UploadPictureException.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/UploadPictureException.cs
rename to lib/Mono.Google/Mono.Google.Picasa/UploadPictureException.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/UploadProgressEventArgs.cs b/lib/Mono.Google/Mono.Google.Picasa/UploadProgressEventArgs.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/UploadProgressEventArgs.cs
rename to lib/Mono.Google/Mono.Google.Picasa/UploadProgressEventArgs.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/UploadProgressEventHandler.cs b/lib/Mono.Google/Mono.Google.Picasa/UploadProgressEventHandler.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/UploadProgressEventHandler.cs
rename to lib/Mono.Google/Mono.Google.Picasa/UploadProgressEventHandler.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/XmlUtil.cs b/lib/Mono.Google/Mono.Google.Picasa/XmlUtil.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/XmlUtil.cs
rename to lib/Mono.Google/Mono.Google.Picasa/XmlUtil.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/Authentication.cs b/lib/Mono.Google/Mono.Google/Authentication.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/Authentication.cs
rename to lib/Mono.Google/Mono.Google/Authentication.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/CaptchaException.cs b/lib/Mono.Google/Mono.Google/CaptchaException.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/CaptchaException.cs
rename to lib/Mono.Google/Mono.Google/CaptchaException.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/GoogleConnection.cs b/lib/Mono.Google/Mono.Google/GoogleConnection.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/GoogleConnection.cs
rename to lib/Mono.Google/Mono.Google/GoogleConnection.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/GoogleService.cs b/lib/Mono.Google/Mono.Google/GoogleService.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/GoogleService.cs
rename to lib/Mono.Google/Mono.Google/GoogleService.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/MultipartRequest.cs b/lib/Mono.Google/Mono.Google/MultipartRequest.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/MultipartRequest.cs
rename to lib/Mono.Google/Mono.Google/MultipartRequest.cs
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/NoCheckCertificatePolicy.cs b/lib/Mono.Google/Mono.Google/NoCheckCertificatePolicy.cs
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/google-sharp/NoCheckCertificatePolicy.cs
rename to lib/Mono.Google/Mono.Google/NoCheckCertificatePolicy.cs
diff --git a/extensions/Exporters/TabbloExport/Tabblo/AssemblyInfo.cs b/lib/Mono.Tabblo/AssemblyInfo.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/Tabblo/AssemblyInfo.cs
rename to lib/Mono.Tabblo/AssemblyInfo.cs
diff --git a/lib/Mono.Tabblo/Makefile.am b/lib/Mono.Tabblo/Makefile.am
new file mode 100644
index 0000000..ec67590
--- /dev/null
+++ b/lib/Mono.Tabblo/Makefile.am
@@ -0,0 +1,21 @@
+ASSEMBLY = Mono.Tabblo
+TARGET = library
+LINK = $(REF_MONO_TABBLO)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	Mono.Tabblo/Connection.cs \
+	Mono.Tabblo/IPreferences.cs \
+	Mono.Tabblo/MultipartRequest.cs \
+	Mono.Tabblo/Picture.cs \
+	Mono.Tabblo/TabbloException.cs \
+	Mono.Tabblo/TotalUploadProgress.cs \
+	Mono.Tabblo/Uploader.cs \
+	Mono.Tabblo/UploadProgressEventArgs.cs \
+	Mono.Tabblo/UploadProgressEventHandler.cs
+
+RESOURCES =
+
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+include $(top_srcdir)/build/build.mk
diff --git a/lib/Mono.Tabblo/Makefile.in b/lib/Mono.Tabblo/Makefile.in
new file mode 100644
index 0000000..0e2ebc8
--- /dev/null
+++ b/lib/Mono.Tabblo/Makefile.in
@@ -0,0 +1,816 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = lib/Mono.Tabblo
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = Mono.Tabblo
+TARGET = library
+LINK = $(REF_MONO_TABBLO) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	Mono.Tabblo/Connection.cs \
+	Mono.Tabblo/IPreferences.cs \
+	Mono.Tabblo/MultipartRequest.cs \
+	Mono.Tabblo/Picture.cs \
+	Mono.Tabblo/TabbloException.cs \
+	Mono.Tabblo/TotalUploadProgress.cs \
+	Mono.Tabblo/Uploader.cs \
+	Mono.Tabblo/UploadProgressEventArgs.cs \
+	Mono.Tabblo/UploadProgressEventHandler.cs
+
+RESOURCES = 
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Mono.Tabblo/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign lib/Mono.Tabblo/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/extensions/Exporters/TabbloExport/Tabblo/Connection.cs b/lib/Mono.Tabblo/Mono.Tabblo/Connection.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/Tabblo/Connection.cs
rename to lib/Mono.Tabblo/Mono.Tabblo/Connection.cs
diff --git a/extensions/Exporters/TabbloExport/Tabblo/IPreferences.cs b/lib/Mono.Tabblo/Mono.Tabblo/IPreferences.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/Tabblo/IPreferences.cs
rename to lib/Mono.Tabblo/Mono.Tabblo/IPreferences.cs
diff --git a/extensions/Exporters/TabbloExport/Tabblo/MultipartRequest.cs b/lib/Mono.Tabblo/Mono.Tabblo/MultipartRequest.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/Tabblo/MultipartRequest.cs
rename to lib/Mono.Tabblo/Mono.Tabblo/MultipartRequest.cs
diff --git a/extensions/Exporters/TabbloExport/Tabblo/Picture.cs b/lib/Mono.Tabblo/Mono.Tabblo/Picture.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/Tabblo/Picture.cs
rename to lib/Mono.Tabblo/Mono.Tabblo/Picture.cs
diff --git a/extensions/Exporters/TabbloExport/Tabblo/TabbloException.cs b/lib/Mono.Tabblo/Mono.Tabblo/TabbloException.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/Tabblo/TabbloException.cs
rename to lib/Mono.Tabblo/Mono.Tabblo/TabbloException.cs
diff --git a/extensions/Exporters/TabbloExport/Tabblo/TotalUploadProgress.cs b/lib/Mono.Tabblo/Mono.Tabblo/TotalUploadProgress.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/Tabblo/TotalUploadProgress.cs
rename to lib/Mono.Tabblo/Mono.Tabblo/TotalUploadProgress.cs
diff --git a/extensions/Exporters/TabbloExport/Tabblo/UploadProgressEventArgs.cs b/lib/Mono.Tabblo/Mono.Tabblo/UploadProgressEventArgs.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/Tabblo/UploadProgressEventArgs.cs
rename to lib/Mono.Tabblo/Mono.Tabblo/UploadProgressEventArgs.cs
diff --git a/extensions/Exporters/TabbloExport/Tabblo/UploadProgressEventHandler.cs b/lib/Mono.Tabblo/Mono.Tabblo/UploadProgressEventHandler.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/Tabblo/UploadProgressEventHandler.cs
rename to lib/Mono.Tabblo/Mono.Tabblo/UploadProgressEventHandler.cs
diff --git a/extensions/Exporters/TabbloExport/Tabblo/Uploader.cs b/lib/Mono.Tabblo/Mono.Tabblo/Uploader.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/Tabblo/Uploader.cs
rename to lib/Mono.Tabblo/Mono.Tabblo/Uploader.cs
diff --git a/lib/SmugMugNet/Makefile.am b/lib/SmugMugNet/Makefile.am
new file mode 100644
index 0000000..7a48187
--- /dev/null
+++ b/lib/SmugMugNet/Makefile.am
@@ -0,0 +1,18 @@
+ASSEMBLY = SmugMugNet
+TARGET = library
+LINK = $(REF_SMUGMUGNET)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	SmugMugNet/Album.cs \
+	SmugMugNet/Category.cs \
+	SmugMugNet/Credentials.cs \
+	SmugMugNet/NoCheckCertificatePolicy.cs \
+	SmugMugNet/SmugMugApi.cs \
+	SmugMugNet/SmugMugException.cs \
+	SmugMugNet/SmugMugProxy.cs \
+	SmugMugNet/SmugMugUploadException.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
diff --git a/lib/SmugMugNet/Makefile.in b/lib/SmugMugNet/Makefile.in
new file mode 100644
index 0000000..4059f85
--- /dev/null
+++ b/lib/SmugMugNet/Makefile.in
@@ -0,0 +1,814 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = lib/SmugMugNet
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = SmugMugNet
+TARGET = library
+LINK = $(REF_SMUGMUGNET) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	SmugMugNet/Album.cs \
+	SmugMugNet/Category.cs \
+	SmugMugNet/Credentials.cs \
+	SmugMugNet/NoCheckCertificatePolicy.cs \
+	SmugMugNet/SmugMugApi.cs \
+	SmugMugNet/SmugMugException.cs \
+	SmugMugNet/SmugMugProxy.cs \
+	SmugMugNet/SmugMugUploadException.cs
+
+RESOURCES = 
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/SmugMugNet/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign lib/SmugMugNet/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/SmugMugNet/SmugMugNet/Album.cs b/lib/SmugMugNet/SmugMugNet/Album.cs
new file mode 100644
index 0000000..fc45faa
--- /dev/null
+++ b/lib/SmugMugNet/SmugMugNet/Album.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Xml;
+using System.Collections.Specialized;
+using Hyena;
+
+namespace SmugMugNet
+{
+	public struct Album
+	{
+		public Album(string title, int id)
+		{
+			this.album_id = id;
+			this.title = title;
+		}
+
+		private int album_id;
+		public int AlbumID
+		{
+			get { return album_id; }
+			set { album_id = value; }
+		}
+
+		private string title;
+		public string Title
+		{
+			get { return title; }
+			set { title = value; }
+		}
+	}
+}
diff --git a/lib/SmugMugNet/SmugMugNet/Category.cs b/lib/SmugMugNet/SmugMugNet/Category.cs
new file mode 100644
index 0000000..9994f54
--- /dev/null
+++ b/lib/SmugMugNet/SmugMugNet/Category.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Xml;
+using System.Collections.Specialized;
+using Hyena;
+
+namespace SmugMugNet
+{
+	public struct Category
+	{
+		public Category( string title, int id)
+		{
+			this.title = title;
+			this.category_id = id;
+		}
+
+		private int category_id;
+		public int CategoryID
+		{
+			get { return category_id; }
+			set { category_id = value; }
+		}
+
+		private string title;
+		public string Title
+		{
+			get { return title; }
+			set { title = value; }
+		}
+	}
+}
diff --git a/lib/SmugMugNet/SmugMugNet/Credentials.cs b/lib/SmugMugNet/SmugMugNet/Credentials.cs
new file mode 100644
index 0000000..1a8c225
--- /dev/null
+++ b/lib/SmugMugNet/SmugMugNet/Credentials.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Xml;
+using System.Collections.Specialized;
+using Hyena;
+
+namespace SmugMugNet
+{
+	public struct Credentials
+	{
+		public string session_id;
+		public int user_id;
+		public string password_hash;
+
+		public string SessionID {
+			get { return session_id; }
+			set { session_id = value; }
+		}
+
+		public int UserID {
+			get { return user_id; }
+		}
+
+		public string PasswordHash {
+			get { return password_hash; }
+		}
+
+		public Credentials(string session_id, int user_id, string password_hash)
+		{
+			this.session_id = session_id;
+			this.user_id = user_id;
+			this.password_hash = password_hash;
+		}
+	}
+}
diff --git a/extensions/Exporters/SmugMugExport/SmugMugNet/NoCheckCertificatePolicy.cs b/lib/SmugMugNet/SmugMugNet/NoCheckCertificatePolicy.cs
similarity index 100%
rename from extensions/Exporters/SmugMugExport/SmugMugNet/NoCheckCertificatePolicy.cs
rename to lib/SmugMugNet/SmugMugNet/NoCheckCertificatePolicy.cs
diff --git a/lib/SmugMugNet/SmugMugNet/SmugMugApi.cs b/lib/SmugMugNet/SmugMugNet/SmugMugApi.cs
new file mode 100644
index 0000000..0b4a3f7
--- /dev/null
+++ b/lib/SmugMugNet/SmugMugNet/SmugMugApi.cs
@@ -0,0 +1,158 @@
+/*
+ * SmugMugApi.cs
+ *
+ * Authors:
+ *   Thomas Van Machelen <thomas.vanmachelen at gmail.com>
+ *
+ * Copyright (C) 2006 Thomas Van Machelen
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Xml;
+using System.Collections.Specialized;
+using Hyena;
+
+namespace SmugMugNet
+{
+	public class SmugMugApi
+	{
+		private string username = String.Empty;
+		private string password = String.Empty;
+		private bool connected = false;
+
+		private Credentials credentials;
+		private const string VERSION = "1.1.1";
+		private Category[] categories;
+
+		public bool Connected
+		{
+			get { return connected; }
+		}
+
+		public SmugMugApi (string email_address, string password)
+		{
+			this.username = email_address;
+			this.password = password;
+		}
+
+		public bool Login ()
+		{
+			if (this.username.Length == 0 | this.password.Length == 0)
+			{
+				throw new SmugMugException("There is no username or password.");
+			}
+
+			if (this.connected == false && this.credentials.UserID == 0)
+			{
+				try
+				{
+					this.credentials = SmugMugProxy.LoginWithPassword (this.username, this.password);
+					this.connected = true;
+				}
+				catch
+				{
+					return false;
+				}
+			}
+			else
+			{
+				LoginWithHash ();
+			}
+
+			return true;
+		}
+
+		private void LoginWithHash ()
+		{
+			try {
+				string session_id = SmugMugProxy.LoginWithHash (this.credentials.UserID, this.credentials.PasswordHash);
+
+				if (session_id != null && session_id.Length > 0)
+				{
+					this.credentials.SessionID = session_id;
+				}
+				else
+				{
+					throw new SmugMugException ("SessionID was empty");
+				}
+			}
+			catch (Exception ex) {
+				throw new SmugMugException ("A login error occured, SessionID may be invalid.", ex.InnerException);
+			}
+		}
+
+		public void Logout ()
+		{
+			if (!connected)
+				return;
+
+			if (this.credentials.SessionID == null && this.credentials.SessionID.Length == 0)
+				return;
+
+			SmugMugProxy.Logout (this.credentials.SessionID);
+			connected = false;
+			this.credentials = new Credentials (null, 0, null);
+		}
+
+		public Category[] GetCategories ()
+		{
+			if (this.categories == null)
+			{
+				try {
+					this.categories = SmugMugProxy.GetCategories (credentials.SessionID);
+				}
+				catch (Exception ex) {
+					throw new SmugMugException ("Could not retrieve Categories", ex.InnerException);
+				}
+			}
+			return this.categories;
+		}
+
+		public Album CreateAlbum (string title, int category_id, bool is_public)
+		{
+			try {
+				return SmugMugProxy.CreateAlbum (title, category_id, credentials.SessionID, is_public);
+			}
+			catch (Exception ex) {
+				throw new SmugMugException ("Could not create album", ex.InnerException);
+			}
+		}
+
+		public Album[] GetAlbums ()
+		{
+			try {
+				return SmugMugProxy.GetAlbums(credentials.SessionID);
+			}
+			catch (Exception ex) {
+				throw new SmugMugException ("Could not get albums", ex.InnerException);
+			}
+		}
+
+		public Uri GetAlbumUrl (int image_id)
+		{
+			try {
+				return SmugMugProxy.GetAlbumUrl (image_id, credentials.SessionID);
+			}
+			catch (Exception ex) {
+				throw new SmugMugException ("Could not get album url", ex.InnerException);
+			}
+		}
+
+		public int Upload (string path, int album_id)
+		{
+			try {
+				return SmugMugProxy.Upload (path, album_id, credentials.SessionID);
+			}
+			catch (Exception ex) {
+				throw new SmugMugException ("Could not upload file", ex.InnerException);
+			}
+		}
+	}
+}
diff --git a/lib/SmugMugNet/SmugMugNet/SmugMugException.cs b/lib/SmugMugNet/SmugMugNet/SmugMugException.cs
new file mode 100644
index 0000000..4eed3ba
--- /dev/null
+++ b/lib/SmugMugNet/SmugMugNet/SmugMugException.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Xml;
+using System.Collections.Specialized;
+using Hyena;
+
+namespace SmugMugNet
+{
+	public class SmugMugException : ApplicationException
+	{
+		public SmugMugException(string message) : base (message)
+		{
+			Log.Debug (message);
+		}
+
+		public SmugMugException (string message, Exception innerException) : base (message, innerException)
+		{
+			Log.Debug (message, innerException.ToString());
+		}
+	}
+}
diff --git a/lib/SmugMugNet/SmugMugNet/SmugMugProxy.cs b/lib/SmugMugNet/SmugMugNet/SmugMugProxy.cs
new file mode 100644
index 0000000..9fbad62
--- /dev/null
+++ b/lib/SmugMugNet/SmugMugNet/SmugMugProxy.cs
@@ -0,0 +1,234 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Xml;
+using System.Collections.Specialized;
+using Hyena;
+
+namespace SmugMugNet
+{
+	public class SmugMugProxy
+	{
+		// FIXME: this getting should be done over https
+		private const string GET_URL = "https://api.SmugMug.com/hack/rest/";
+		private const string POST_URL = "https://upload.SmugMug.com/hack/rest/";
+		// key from massis
+		private const string APIKEY = "umtr0zB2wzwTZDhF2BySidg0hY0le3K6";
+		private const string VERSION = "1.1.1";
+
+		// rest methods
+		private const string LOGIN_WITHPASS_METHOD = "smugmug.login.withPassword";
+		private const string LOGIN_WITHHASH_METHOD = "smugmug.login.withHash";
+		private const string LOGOUT_METHOD = "smugmug.logout";
+		private const string ALBUMS_CREATE_METHOD = "smugmug.albums.create";
+		private const string ALBUMS_GET_URLS_METHOD = "smugmug.images.getURLs";
+		private const string ALBUMS_GET_METHOD = "smugmug.albums.get";
+		private const string CATEGORIES_GET_METHOD = "smugmug.categories.get";
+
+		// parameter constants
+		private const string EMAIL = "EmailAddress";
+		private const string PASSWORD = "Password";
+		private const string USER_ID = "UserID";
+		private const string PASSWORD_HASH = "PasswordHash";
+		private const string SESSION_ID = "SessionID";
+		private const string CATEGORY_ID = "CategoryID";
+		private const string IMAGE_ID = "ImageID";
+		private const string TITLE = "Title";
+		private const string ID = "id";
+
+		public static Credentials LoginWithPassword (string username, string password)
+		{
+			string url = FormatGetUrl (LOGIN_WITHPASS_METHOD, new SmugMugParam (EMAIL, username), new SmugMugParam (PASSWORD, password));
+			XmlDocument doc = GetResponseXml (url);
+
+			string sessionId = doc.SelectSingleNode ("/rsp/Login/SessionID").InnerText;
+			int userId = int.Parse (doc.SelectSingleNode ("/rsp/Login/UserID").InnerText);
+			string passwordHash = doc.SelectSingleNode ("/rsp/Login/PasswordHash").InnerText;
+
+			return new Credentials (sessionId, userId, passwordHash);
+		}
+
+		public static string LoginWithHash (int user_id, string password_hash)
+		{
+			string url = FormatGetUrl (LOGIN_WITHHASH_METHOD, new SmugMugParam (USER_ID, user_id), new SmugMugParam (PASSWORD_HASH, password_hash));
+			XmlDocument doc = GetResponseXml(url);
+
+			return doc.SelectSingleNode ("/rsp/Login/SessionID").InnerText;
+		}
+
+		public static void Logout (string session_id)
+		{
+			string url = FormatGetUrl (LOGOUT_METHOD, new SmugMugParam (SESSION_ID, session_id));
+			GetResponseXml (url);
+		}
+
+		public static Album[] GetAlbums (string session_id)
+		{
+			string url = FormatGetUrl (ALBUMS_GET_METHOD, new SmugMugParam(SESSION_ID, session_id));
+			XmlDocument doc = GetResponseXml (url);
+			XmlNodeList albumNodes = doc.SelectNodes ("/rsp/Albums/Album");
+
+			Album[] albums = new Album[albumNodes.Count];
+
+			for (int i = 0; i < albumNodes.Count; i++)
+			{
+				XmlNode current = albumNodes[i];
+				albums[i] = new Album (current.SelectSingleNode (TITLE).InnerText, int.Parse (current.Attributes[ID].Value));
+			}
+			return albums;
+		}
+
+		public static Uri GetAlbumUrl (int image_id, string session_id)
+		{
+			string url = FormatGetUrl(ALBUMS_GET_URLS_METHOD, new SmugMugParam(IMAGE_ID, image_id), new SmugMugParam(SESSION_ID, session_id));
+			XmlDocument doc = GetResponseXml(url);
+
+			string album_url = doc.SelectSingleNode("/rsp/ImageURLs/Image/AlbumURL").InnerText;
+
+			return new Uri(album_url);
+		}
+
+		public static Category[] GetCategories (string session_id)
+		{
+			string url = FormatGetUrl(CATEGORIES_GET_METHOD, new SmugMugParam (SESSION_ID, session_id));
+			XmlDocument doc = GetResponseXml (url);
+
+			XmlNodeList categoryNodes = doc.SelectNodes ("/rsp/Categories/Category");
+			Category[] categories = new Category[categoryNodes.Count];
+
+			for (int i = 0; i < categoryNodes.Count; i++)
+			{
+				XmlNode current = categoryNodes[i];
+				categories[i] = new Category (current.SelectSingleNode (TITLE).InnerText, int.Parse (current.Attributes[ID].Value));
+			}
+			return categories;
+		}
+
+		public static Album CreateAlbum (string title, int category_id, string session_id)
+		{
+			return CreateAlbum (title, category_id, session_id, true);
+		}
+
+		public static Album CreateAlbum (string title, int category_id, string session_id, bool is_public)
+		{
+			int public_int = is_public ? 1 : 0;
+			string url = FormatGetUrl (ALBUMS_CREATE_METHOD, new SmugMugParam (TITLE, title), new SmugMugParam (CATEGORY_ID, category_id), new SmugMugParam (SESSION_ID, session_id), new SmugMugParam ("Public", public_int));
+			XmlDocument doc = GetResponseXml (url);
+
+			int id = int.Parse(doc.SelectSingleNode("/rsp/Create/Album").Attributes[ID].Value);
+
+			return new Album(title, id);
+		}
+
+		public static int Upload (string path, int album_id, string session_id)
+		{
+			FileInfo file = new FileInfo(path);
+
+			if (!file.Exists)
+				throw new ArgumentException("Image does not exist: " + file.FullName);
+
+			try
+			{
+				WebClient client = new WebClient ();
+				client.BaseAddress = "http://upload.smugmug.com";
+				client.Headers.Add ("Cookie:SMSESS=" + session_id);
+
+				NameValueCollection queryStringCollection = new NameValueCollection ();
+				queryStringCollection.Add ("AlbumID", album_id.ToString());
+				// Temporarily disabled because rest doesn't seem to return the ImageID anymore
+				// queryStringCollection.Add ("ResponseType", "REST");
+				// luckily JSON still holds it
+				queryStringCollection.Add ("ResponseType", "JSON");
+				client.QueryString = queryStringCollection;
+
+				byte[] responseArray = client.UploadFile ("http://upload.smugmug.com/photos/xmladd.mg", "POST", file.FullName);
+				string response = Encoding.ASCII.GetString (responseArray);
+
+				// JSon approach
+				Regex id_regex = new Regex ("\\\"id\\\":( )?(?<image_id>\\d+),");
+				Match m  = id_regex.Match (response);
+
+				int id = -1;
+
+				if (m.Success)
+					id = int.Parse (m.Groups["image_id"].Value);
+
+				return id;
+
+				// REST approach, disabled for now
+				//XmlDocument doc = new XmlDocument ();
+				//doc.LoadXml (response);
+				// return int.Parse (doc.SelectSingleNode ("/rsp/ImageID").InnerText);
+
+			}
+			catch (Exception ex)
+			{
+				throw new SmugMugUploadException ("Error uploading image: " + file.FullName, ex.InnerException);
+			}
+		}
+
+		private static string FormatGetUrl(string method_name, params SmugMugParam[] parameters)
+		{
+			StringBuilder builder = new StringBuilder (string.Format ("{0}{1}/?method={2}", GET_URL, VERSION, method_name));
+
+			foreach (SmugMugParam param in parameters)
+				builder.Append (param.ToString ());
+
+			builder.Append (new SmugMugParam ("APIKey", APIKEY));
+			return builder.ToString();
+		}
+
+		private static XmlDocument GetResponseXml (string url)
+		{
+			HttpWebRequest request = HttpWebRequest.Create (url) as HttpWebRequest;
+			request.Credentials = CredentialCache.DefaultCredentials;
+			WebResponse response = request.GetResponse ();
+
+			XmlDocument doc = new XmlDocument ();
+			doc.LoadXml (new StreamReader (response.GetResponseStream ()).ReadToEnd ());
+			CheckResponseXml (doc);
+
+			response.Close ();
+			return doc;
+		}
+
+		private static void CheckResponseXml (XmlDocument doc)
+		{
+			if (doc.SelectSingleNode("/rsp").Attributes["stat"].Value == "ok")
+				return;
+
+			string message = doc.SelectSingleNode ("/rsp/err").Attributes["msg"].Value;
+			throw new SmugMugException (message);
+		}
+
+		private class SmugMugParam
+		{
+			string name;
+			object value;
+
+			public SmugMugParam (string name, object value)
+			{
+				this.name = name;
+				this.value = (value is String ? System.Web.HttpUtility.UrlEncode ((string)value) : value);
+			}
+
+			public string Name
+			{
+				get {return name;}
+			}
+
+			public object Value
+			{
+				get {return value;}
+			}
+
+			public override string ToString()
+			{
+				return string.Format("&{0}={1}", Name, Value);
+			}
+		}
+	}
+}
diff --git a/lib/SmugMugNet/SmugMugNet/SmugMugUploadException.cs b/lib/SmugMugNet/SmugMugNet/SmugMugUploadException.cs
new file mode 100644
index 0000000..4bdde5b
--- /dev/null
+++ b/lib/SmugMugNet/SmugMugNet/SmugMugUploadException.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Xml;
+using System.Collections.Specialized;
+using Hyena;
+
+namespace SmugMugNet
+{
+	public sealed class SmugMugUploadException : ApplicationException
+	{
+		public SmugMugUploadException (string message, Exception innerException) : base (message, innerException)
+		{
+			Log.Debug (message, innerException.ToString ());
+		}
+	}
+}
diff --git a/lib/TagLib/Makefile.in b/lib/TagLib/Makefile.in
index f340d67..1701c6d 100644
--- a/lib/TagLib/Makefile.in
+++ b/lib/TagLib/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -95,6 +96,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -104,9 +109,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -120,6 +122,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -147,6 +150,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -243,14 +247,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -314,128 +316,99 @@ SOURCES = \
 	TagLib/src/TagLib/Aac/File.cs \
 	TagLib/src/TagLib/Aiff/File.cs \
 	TagLib/src/TagLib/Aiff/StreamHeader.cs \
-	TagLib/src/TagLib/Ape/Tag.cs \
-	TagLib/src/TagLib/Ape/Item.cs \
-	TagLib/src/TagLib/Ape/Footer.cs \
 	TagLib/src/TagLib/Ape/File.cs \
+	TagLib/src/TagLib/Ape/Footer.cs \
+	TagLib/src/TagLib/Ape/Item.cs \
 	TagLib/src/TagLib/Ape/StreamHeader.cs \
-	TagLib/src/TagLib/Asf/Guid.cs \
-	TagLib/src/TagLib/Asf/StreamPropertiesObject.cs \
-	TagLib/src/TagLib/Asf/UnknownObject.cs \
-	TagLib/src/TagLib/Asf/Tag.cs \
-	TagLib/src/TagLib/Asf/Object.cs \
-	TagLib/src/TagLib/Asf/ExtendedContentDescriptionObject.cs \
+	TagLib/src/TagLib/Ape/Tag.cs \
 	TagLib/src/TagLib/Asf/ContentDescriptionObject.cs \
-	TagLib/src/TagLib/Asf/MetadataLibraryObject.cs \
-	TagLib/src/TagLib/Asf/HeaderObject.cs \
-	TagLib/src/TagLib/Asf/HeaderExtensionObject.cs \
+	TagLib/src/TagLib/Asf/ContentDescriptor.cs \
+	TagLib/src/TagLib/Asf/DescriptionRecord.cs \
+	TagLib/src/TagLib/Asf/ExtendedContentDescriptionObject.cs \
 	TagLib/src/TagLib/Asf/File.cs \
 	TagLib/src/TagLib/Asf/FilePropertiesObject.cs \
+	TagLib/src/TagLib/Asf/Guid.cs \
+	TagLib/src/TagLib/Asf/HeaderExtensionObject.cs \
+	TagLib/src/TagLib/Asf/HeaderObject.cs \
+	TagLib/src/TagLib/Asf/MetadataLibraryObject.cs \
+	TagLib/src/TagLib/Asf/Object.cs \
 	TagLib/src/TagLib/Asf/PaddingObject.cs \
-	TagLib/src/TagLib/Asf/ContentDescriptor.cs \
-	TagLib/src/TagLib/Asf/DescriptionRecord.cs \
-	TagLib/src/TagLib/Mpc/StreamHeader.cs \
-	TagLib/src/TagLib/Mpc/File.cs \
-	TagLib/src/TagLib/Ogg/GroupedComment.cs \
-	TagLib/src/TagLib/Ogg/Bitstream.cs \
-	TagLib/src/TagLib/Ogg/Paginator.cs \
-	TagLib/src/TagLib/Ogg/Codec.cs \
-	TagLib/src/TagLib/Ogg/Codecs/Vorbis.cs \
-	TagLib/src/TagLib/Ogg/Codecs/Theora.cs \
-	TagLib/src/TagLib/Ogg/Page.cs \
-	TagLib/src/TagLib/Ogg/XiphComment.cs \
-	TagLib/src/TagLib/Ogg/PageHeader.cs \
-	TagLib/src/TagLib/Ogg/File.cs \
-	TagLib/src/TagLib/Png/Codec.cs \
-	TagLib/src/TagLib/Png/File.cs \
-	TagLib/src/TagLib/Png/PngTag.cs \
+	TagLib/src/TagLib/Asf/StreamPropertiesObject.cs \
+	TagLib/src/TagLib/Asf/Tag.cs \
+	TagLib/src/TagLib/Asf/UnknownObject.cs \
+	TagLib/src/TagLib/ByteVector.cs \
+	TagLib/src/TagLib/ByteVectorList.cs \
+	TagLib/src/TagLib/CombinedTag.cs \
+	TagLib/src/TagLib/CorruptFileException.cs \
+	TagLib/src/TagLib/File.cs \
+	TagLib/src/TagLib/FileTypes.cs \
 	TagLib/src/TagLib/Flac/Block.cs \
 	TagLib/src/TagLib/Flac/BlockHeader.cs \
-	TagLib/src/TagLib/Flac/StreamHeader.cs \
-	TagLib/src/TagLib/Flac/Picture.cs \
 	TagLib/src/TagLib/Flac/File.cs \
+	TagLib/src/TagLib/Flac/Picture.cs \
+	TagLib/src/TagLib/Flac/StreamHeader.cs \
+	TagLib/src/TagLib/Genres.cs \
 	TagLib/src/TagLib/Gif/Codec.cs \
 	TagLib/src/TagLib/Gif/File.cs \
 	TagLib/src/TagLib/Gif/GifCommentTag.cs \
-	TagLib/src/TagLib/Image/Codec.cs \
-	TagLib/src/TagLib/Image/CombinedImageTag.cs \
-	TagLib/src/TagLib/Image/File.cs \
-	TagLib/src/TagLib/Image/ImageBlockFile.cs \
-	TagLib/src/TagLib/Image/ImageTag.cs \
-	TagLib/src/TagLib/Image/ImageOrientation.cs \
-	TagLib/src/TagLib/Image/NoMetadata/File.cs \
-	TagLib/src/TagLib/Jpeg/Codec.cs \
-	TagLib/src/TagLib/Jpeg/File.cs \
-	TagLib/src/TagLib/Jpeg/JpegCommentTag.cs \
-	TagLib/src/TagLib/Jpeg/Marker.cs \
-	TagLib/src/TagLib/Jpeg/Table.cs \
-	TagLib/src/TagLib/Mpeg/XingHeader.cs \
-	TagLib/src/TagLib/Mpeg/VBRIHeader.cs \
-	TagLib/src/TagLib/Mpeg/File.cs \
-	TagLib/src/TagLib/Mpeg/AudioFile.cs \
-	TagLib/src/TagLib/Mpeg/AudioHeader.cs \
-	TagLib/src/TagLib/Mpeg/VideoHeader.cs \
-	TagLib/src/TagLib/NonContainer/EndTag.cs \
-	TagLib/src/TagLib/NonContainer/File.cs \
-	TagLib/src/TagLib/NonContainer/StartTag.cs \
-	TagLib/src/TagLib/NonContainer/Tag.cs \
-	TagLib/src/TagLib/Id3v1/Tag.cs \
+	TagLib/src/TagLib/ICodec.cs \
 	TagLib/src/TagLib/Id3v1/StringHandler.cs \
-	TagLib/src/TagLib/Id3v2/Frames/PopularimeterFrame.cs \
+	TagLib/src/TagLib/Id3v1/Tag.cs \
+	TagLib/src/TagLib/Id3v2/ExtendedHeader.cs \
+	TagLib/src/TagLib/Id3v2/Footer.cs \
+	TagLib/src/TagLib/Id3v2/Frame.cs \
+	TagLib/src/TagLib/Id3v2/FrameFactory.cs \
+	TagLib/src/TagLib/Id3v2/FrameHeader.cs \
+	TagLib/src/TagLib/Id3v2/Frames/AttachedPictureFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/CommentsFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/GeneralEncapsulatedObjectFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/MusicCdIdentifierFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/PlayCountFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/PopularimeterFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/PrivateFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/RelativeVolumeFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/SynchronizedLyricsFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/TermsOfUseFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/TextIdentificationFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/UniqueFileIdentifierFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/UnknownFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/CommentsFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/TextIdentificationFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/AttachedPictureFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/GeneralEncapsulatedObjectFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/UnsynchronisedLyricsFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/SynchronizedLyricsFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/MusicCdIdentifierFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/TermsOfUseFrame.cs \
-	TagLib/src/TagLib/Id3v2/FrameFactory.cs \
-	TagLib/src/TagLib/Id3v2/Frame.cs \
 	TagLib/src/TagLib/Id3v2/FrameTypes.cs \
-	TagLib/src/TagLib/Id3v2/Tag.cs \
-	TagLib/src/TagLib/Id3v2/FrameHeader.cs \
-	TagLib/src/TagLib/Id3v2/ExtendedHeader.cs \
-	TagLib/src/TagLib/Id3v2/SynchData.cs \
 	TagLib/src/TagLib/Id3v2/Header.cs \
-	TagLib/src/TagLib/Id3v2/Footer.cs \
+	TagLib/src/TagLib/Id3v2/SynchData.cs \
+	TagLib/src/TagLib/Id3v2/Tag.cs \
 	TagLib/src/TagLib/IFD/Entries/ByteIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/ByteVectorIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/LongArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/LongIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/MakernoteIFDEntry.cs \
+	TagLib/src/TagLib/IFD/Entries/Rational.cs \
 	TagLib/src/TagLib/IFD/Entries/RationalArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/RationalIFDEntry.cs \
-	TagLib/src/TagLib/IFD/Entries/Rational.cs \
 	TagLib/src/TagLib/IFD/Entries/SByteIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/ShortArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/ShortIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SLongArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SLongIFDEntry.cs \
+	TagLib/src/TagLib/IFD/Entries/SRational.cs \
 	TagLib/src/TagLib/IFD/Entries/SRationalArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SRationalIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SShortArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SShortIFDEntry.cs \
-	TagLib/src/TagLib/IFD/Entries/SRational.cs \
 	TagLib/src/TagLib/IFD/Entries/StringIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/StripOffsetsIFDEntry.cs \
-	TagLib/src/TagLib/IFD/Entries/SubIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SubIFDArrayEntry.cs \
+	TagLib/src/TagLib/IFD/Entries/SubIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/ThumbnailDataIFDEntry.cs \
-	TagLib/src/TagLib/IFD/Entries/UserCommentIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/UndefinedIFDEntry.cs \
+	TagLib/src/TagLib/IFD/Entries/UserCommentIFDEntry.cs \
+	TagLib/src/TagLib/IFD/IFDDirectory.cs \
 	TagLib/src/TagLib/IFD/IFDEntry.cs \
 	TagLib/src/TagLib/IFD/IFDEntryType.cs \
-	TagLib/src/TagLib/IFD/IFDTag.cs \
-	TagLib/src/TagLib/IFD/IFDDirectory.cs \
-	TagLib/src/TagLib/IFD/IFDStructure.cs \
 	TagLib/src/TagLib/IFD/IFDReader.cs \
 	TagLib/src/TagLib/IFD/IFDRenderer.cs \
+	TagLib/src/TagLib/IFD/IFDStructure.cs \
+	TagLib/src/TagLib/IFD/IFDTag.cs \
 	TagLib/src/TagLib/IFD/Makernotes/Nikon3MakernoteReader.cs \
 	TagLib/src/TagLib/IFD/Tags/CanonFileInfoEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/CanonMakerNoteEntryTag.cs \
@@ -444,46 +417,87 @@ SOURCES = \
 	TagLib/src/TagLib/IFD/Tags/GPSEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/IFDEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/IOPEntryTag.cs \
-	TagLib/src/TagLib/IFD/Tags/OlympusMakerNoteEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/Nikon3MakerNoteEntryTag.cs \
-	TagLib/src/TagLib/IFD/Tags/NikonLensData3EntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/NikonIsoInfoEntryTag.cs \
-	TagLib/src/TagLib/IFD/Tags/NikonPreviewMakerNoteEntryTag.cs \
+	TagLib/src/TagLib/IFD/Tags/NikonLensData3EntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/NikonPictureControlEntryTag.cs \
+	TagLib/src/TagLib/IFD/Tags/NikonPreviewMakerNoteEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/NikonShotInfoEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/NikonVibrationReductionEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/NikonWorldTimeEntryTag.cs \
+	TagLib/src/TagLib/IFD/Tags/OlympusMakerNoteEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/PanasonicMakerNoteEntryTag.cs \
+	TagLib/src/TagLib/IFD/Tags/PentaxMakerNoteEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/SonyMakerNoteEntryTag.cs \
+	TagLib/src/TagLib/Image/Codec.cs \
+	TagLib/src/TagLib/Image/CombinedImageTag.cs \
+	TagLib/src/TagLib/Image/File.cs \
+	TagLib/src/TagLib/Image/ImageBlockFile.cs \
+	TagLib/src/TagLib/Image/ImageOrientation.cs \
+	TagLib/src/TagLib/Image/ImageTag.cs \
+	TagLib/src/TagLib/Image/NoMetadata/File.cs \
+	TagLib/src/TagLib/Jpeg/Codec.cs \
+	TagLib/src/TagLib/Jpeg/File.cs \
+	TagLib/src/TagLib/Jpeg/JpegCommentTag.cs \
+	TagLib/src/TagLib/Jpeg/Marker.cs \
+	TagLib/src/TagLib/Jpeg/Table.cs \
+	TagLib/src/TagLib/ListBase.cs \
+	TagLib/src/TagLib/Mpc/File.cs \
+	TagLib/src/TagLib/Mpc/StreamHeader.cs \
+	TagLib/src/TagLib/Mpeg/AudioFile.cs \
+	TagLib/src/TagLib/Mpeg/AudioHeader.cs \
+	TagLib/src/TagLib/Mpeg/File.cs \
+	TagLib/src/TagLib/Mpeg/VBRIHeader.cs \
+	TagLib/src/TagLib/Mpeg/VideoHeader.cs \
+	TagLib/src/TagLib/Mpeg/XingHeader.cs \
 	TagLib/src/TagLib/Mpeg4/AppleTag.cs \
 	TagLib/src/TagLib/Mpeg4/Box.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/AppleAdditionalInfoBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/AppleAnnotationBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/AppleDataBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/AppleElementaryStreamDescriptor.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/AppleItemListBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/FullBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoAudioSampleEntry.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoChunkLargeOffsetBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoChunkOffsetBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoFreeSpaceBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoHandlerBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoMetaBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoMovieHeaderBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleDescriptionBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleEntry.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleTableBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoUserDataBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoVisualSampleEntry.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/UnknownBox.cs \
 	TagLib/src/TagLib/Mpeg4/BoxFactory.cs \
 	TagLib/src/TagLib/Mpeg4/BoxHeader.cs \
 	TagLib/src/TagLib/Mpeg4/BoxTypes.cs \
 	TagLib/src/TagLib/Mpeg4/File.cs \
 	TagLib/src/TagLib/Mpeg4/FileParser.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoFreeSpaceBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/UnknownBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoUserDataBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoChunkOffsetBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoChunkLargeOffsetBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/AppleItemListBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/AppleAnnotationBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleTableBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleEntry.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoAudioSampleEntry.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoVisualSampleEntry.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoMetaBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleDescriptionBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/AppleAdditionalInfoBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoHandlerBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoMovieHeaderBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/FullBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/AppleElementaryStreamDescriptor.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/AppleDataBox.cs \
+	TagLib/src/TagLib/NonContainer/EndTag.cs \
+	TagLib/src/TagLib/NonContainer/File.cs \
+	TagLib/src/TagLib/NonContainer/StartTag.cs \
+	TagLib/src/TagLib/NonContainer/Tag.cs \
+	TagLib/src/TagLib/Ogg/Bitstream.cs \
+	TagLib/src/TagLib/Ogg/Codec.cs \
+	TagLib/src/TagLib/Ogg/Codecs/Theora.cs \
+	TagLib/src/TagLib/Ogg/Codecs/Vorbis.cs \
+	TagLib/src/TagLib/Ogg/File.cs \
+	TagLib/src/TagLib/Ogg/GroupedComment.cs \
+	TagLib/src/TagLib/Ogg/Page.cs \
+	TagLib/src/TagLib/Ogg/PageHeader.cs \
+	TagLib/src/TagLib/Ogg/Paginator.cs \
+	TagLib/src/TagLib/Ogg/XiphComment.cs \
+	TagLib/src/TagLib/Picture.cs \
+	TagLib/src/TagLib/Png/Codec.cs \
+	TagLib/src/TagLib/Png/File.cs \
+	TagLib/src/TagLib/Png/PngTag.cs \
+	TagLib/src/TagLib/Properties.cs \
+	TagLib/src/TagLib/ReadOnlyByteVector.cs \
 	TagLib/src/TagLib/Riff/AviHeaderList.cs \
 	TagLib/src/TagLib/Riff/AviStream.cs \
-	TagLib/src/TagLib/Riff/WaveFormatEx.cs \
 	TagLib/src/TagLib/Riff/BitmapInfoHeader.cs \
 	TagLib/src/TagLib/Riff/DivXTag.cs \
 	TagLib/src/TagLib/Riff/File.cs \
@@ -491,39 +505,29 @@ SOURCES = \
 	TagLib/src/TagLib/Riff/List.cs \
 	TagLib/src/TagLib/Riff/ListTag.cs \
 	TagLib/src/TagLib/Riff/MovieIdTag.cs \
+	TagLib/src/TagLib/Riff/WaveFormatEx.cs \
+	TagLib/src/TagLib/StringList.cs \
+	TagLib/src/TagLib/SupportedMimeType.cs \
+	TagLib/src/TagLib/Tag.cs \
+	TagLib/src/TagLib/Tiff/Arw/File.cs \
 	TagLib/src/TagLib/Tiff/BaseTiffFile.cs \
 	TagLib/src/TagLib/Tiff/Codec.cs \
-	TagLib/src/TagLib/Tiff/File.cs \
-	TagLib/src/TagLib/Tiff/Arw/File.cs \
 	TagLib/src/TagLib/Tiff/Cr2/File.cs \
 	TagLib/src/TagLib/Tiff/Dng/File.cs \
+	TagLib/src/TagLib/Tiff/File.cs \
 	TagLib/src/TagLib/Tiff/Nef/File.cs \
+	TagLib/src/TagLib/Tiff/Pef/File.cs \
 	TagLib/src/TagLib/Tiff/Rw2/File.cs \
 	TagLib/src/TagLib/Tiff/Rw2/IFDReader.cs \
 	TagLib/src/TagLib/Tiff/Rw2/IFDTag.cs \
+	TagLib/src/TagLib/UnsupportedFormatException.cs \
 	TagLib/src/TagLib/WavPack/File.cs \
 	TagLib/src/TagLib/WavPack/StreamHeader.cs \
 	TagLib/src/TagLib/Xmp/XmlNodeExtensions.cs \
-	TagLib/src/TagLib/Xmp/XmpTag.cs \
 	TagLib/src/TagLib/Xmp/XmpNode.cs \
 	TagLib/src/TagLib/Xmp/XmpNodeType.cs \
 	TagLib/src/TagLib/Xmp/XmpNodeVisitor.cs \
-	TagLib/src/TagLib/ICodec.cs \
-	TagLib/src/TagLib/Tag.cs \
-	TagLib/src/TagLib/ReadOnlyByteVector.cs \
-	TagLib/src/TagLib/ByteVector.cs \
-	TagLib/src/TagLib/ByteVectorList.cs \
-	TagLib/src/TagLib/CombinedTag.cs \
-	TagLib/src/TagLib/Genres.cs \
-	TagLib/src/TagLib/Properties.cs \
-	TagLib/src/TagLib/File.cs \
-	TagLib/src/TagLib/StringList.cs \
-	TagLib/src/TagLib/SupportedMimeType.cs \
-	TagLib/src/TagLib/UnsupportedFormatException.cs \
-	TagLib/src/TagLib/Picture.cs \
-	TagLib/src/TagLib/ListBase.cs \
-	TagLib/src/TagLib/FileTypes.cs \
-	TagLib/src/TagLib/CorruptFileException.cs
+	TagLib/src/TagLib/Xmp/XmpTag.cs
 
 
 # Initializers
@@ -553,7 +557,6 @@ LINK_MONO_POSIX = -r:Mono.Posix
 LINK_MONO_CAIRO = -r:Mono.Cairo
 LINK_MONO_SIMD = -r:Mono.Simd
 LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
 LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
 LINK_KEYRING = $(KEYRINGSHARP_LIBS)
 LINK_GLIB = $(GLIBSHARP_LIBS)
@@ -614,7 +617,7 @@ LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
 LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
 
 # FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
 LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
 LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
 
@@ -623,6 +626,10 @@ REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
 LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
 LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
 
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
 # FSpot.JobScheduler
 REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
 LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
@@ -638,17 +645,18 @@ REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DB
 LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
 LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
 
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
 
 # FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
             $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
             $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
 
 # FIXME: do not link executables
 LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
@@ -669,10 +677,10 @@ REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
 LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
 LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
 REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
 LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
 LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
 REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
 LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
 LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
@@ -847,7 +855,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(SCRIPTS)
+all-am: Makefile $(SCRIPTS) all-local
 installdirs:
 	for dir in "$(DESTDIR)$(moduledir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
@@ -948,21 +956,21 @@ uninstall-am: uninstall-local uninstall-moduleSCRIPTS
 
 .MAKE: install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
 
 run: 
 	@pushd $(top_builddir); \
diff --git a/lib/TagLib/TagLib/src/TagLib/ByteVector.cs b/lib/TagLib/TagLib/src/TagLib/ByteVector.cs
index 5ff55ee..146ae5a 100644
--- a/lib/TagLib/TagLib/src/TagLib/ByteVector.cs
+++ b/lib/TagLib/TagLib/src/TagLib/ByteVector.cs
@@ -1122,15 +1122,15 @@ namespace TagLib {
 		{
 			int ret = 0;
 			int last = Count > 4 ? 3 : Count - 1;
-			
+
 			for (int i = 0; i <= last; i++) {
 				int offset = mostSignificantByteFirst ? last-i : i;
 				ret |= (int) this[i] << (offset * 8);
 			}
-			
+
 			return ret;
 		}
-		
+
 		/// <summary>
 		///    Converts an first four bytes of the current instance to
 		///    a <see cref="int" /> value using big-endian format.
@@ -1143,7 +1143,7 @@ namespace TagLib {
 		{
 			return ToInt (true);
 		}
-		
+
 		/// <summary>
 		///    Converts an first four bytes of the current instance to
 		///    a <see cref="uint" /> value.
@@ -1729,10 +1729,10 @@ namespace TagLib {
 				int offset = mostSignificantByteFirst ? 3-i : i;
 				vector.Add ((byte)(value >> (offset * 8) & 0xFF));
 			}
-			
+
 			return vector;
 		}
-		
+
 		/// <summary>
 		///    Converts an value into a big-endian data representation.
 		/// </summary>
@@ -1747,7 +1747,7 @@ namespace TagLib {
 		{
 			return FromInt (value, true);
 		}
-		
+
 		/// <summary>
 		///    Converts an unsigned value into a data representation.
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/File.cs b/lib/TagLib/TagLib/src/TagLib/File.cs
index ae78704..2e8f38c 100644
--- a/lib/TagLib/TagLib/src/TagLib/File.cs
+++ b/lib/TagLib/TagLib/src/TagLib/File.cs
@@ -197,12 +197,12 @@ namespace TagLib {
 		///    the file ends.
 		/// </summary>
 		private long invariant_end_position = -1;
-		
+
 		/// <summary>
 		///    Whether or not this file might be corrupt.
 		/// </summary>
 		private bool possibly_corrupt = false;
-		
+
 		#endregion
 		
 		
@@ -457,7 +457,7 @@ namespace TagLib {
 		public virtual bool Writeable {
 			get { return !PossiblyCorrupt; }
 		}
-		
+
 		/// <summary>
 		///   Indicates whether or not this file may be corrupt.
 		/// </summary>
@@ -475,7 +475,7 @@ namespace TagLib {
 				possibly_corrupt = value;
 			}
 		}
-		
+
 		#endregion
 		
 		
@@ -970,7 +970,7 @@ namespace TagLib {
 				
 				read_size = (int) Math.Min (buffer_offset, buffer_size);
 				buffer_offset -= read_size;
-			
+
 				file_stream.Position = buffer_offset;
 			}
 			
diff --git a/lib/TagLib/TagLib/src/TagLib/FileTypes.cs b/lib/TagLib/TagLib/src/TagLib/FileTypes.cs
index d0ac0d6..bf39143 100644
--- a/lib/TagLib/TagLib/src/TagLib/FileTypes.cs
+++ b/lib/TagLib/TagLib/src/TagLib/FileTypes.cs
@@ -78,6 +78,7 @@ namespace TagLib {
 			typeof(TagLib.Tiff.Dng.File),
 			typeof(TagLib.Tiff.File),
 			typeof(TagLib.Tiff.Nef.File),
+			typeof(TagLib.Tiff.Pef.File),
 			typeof(TagLib.Tiff.Rw2.File),
 			typeof(TagLib.WavPack.File)
 		};
diff --git a/lib/TagLib/TagLib/src/TagLib/ICodec.cs b/lib/TagLib/TagLib/src/TagLib/ICodec.cs
index 6198ac9..7f930c8 100644
--- a/lib/TagLib/TagLib/src/TagLib/ICodec.cs
+++ b/lib/TagLib/TagLib/src/TagLib/ICodec.cs
@@ -192,7 +192,7 @@ namespace TagLib {
 		/// </value>
 		int VideoHeight {get;}
 	}
-	
+
 	/// <summary>
 	///    This interface inherits <see cref="ICodec" /> to provide
 	///    information about a photo.
@@ -214,7 +214,7 @@ namespace TagLib {
 		///    photo represented by the current instance.
 		/// </value>
 		int PhotoWidth  {get;}
-		
+
 		/// <summary>
 		///    Gets the height of the photo represented by the current
 		///    instance.
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ByteIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ByteIFDEntry.cs
index 2cb7bcc..d969168 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ByteIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ByteIFDEntry.cs
@@ -30,19 +30,19 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class ByteIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The value which is stored by the current instance
 		/// </value>
 		public byte Value { get; private set; }
-		
+
 #endregion
 
 #region Constructors
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -90,7 +90,7 @@ namespace TagLib.IFD.Entries
 		{
 			type = (ushort) IFDEntryType.Byte;
 			count = 1;
-			
+
 			return Value;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ByteVectorIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ByteVectorIFDEntry.cs
index 8bc83b1..3e4d0ba 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ByteVectorIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ByteVectorIFDEntry.cs
@@ -30,19 +30,19 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class ByteVectorIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The data which is stored by the current instance
 		/// </value>
 		public ByteVector Data { get; private set; }
-		
+
 #endregion
 
 #region Constructors
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -90,7 +90,7 @@ namespace TagLib.IFD.Entries
 		{
 			type = (ushort) IFDEntryType.Byte;
 			count = (uint) Data.Count;
-			
+
 			return Data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/LongArrayIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/LongArrayIFDEntry.cs
index b672dc4..82c3b3f 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/LongArrayIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/LongArrayIFDEntry.cs
@@ -30,9 +30,9 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class LongArrayIFDEntry : ArrayIFDEntry<uint>
 	{
-		
+
 #region Constructors
-		
+
 		/// <summary>
 		///    Construcor.
 		/// </summary>
@@ -51,7 +51,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -75,11 +75,11 @@ namespace TagLib.IFD.Entries
 		{
 			type = (ushort) IFDEntryType.Long;
 			count = (uint) Values.Length;
-			
+
 			ByteVector data = new ByteVector ();
 			foreach (uint value in Values)
 				data.Add (ByteVector.FromUInt (value, is_bigendian));
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/LongIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/LongIFDEntry.cs
index feec5b5..f6188bd 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/LongIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/LongIFDEntry.cs
@@ -30,23 +30,23 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class LongIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The value which is stored by the current instance
 		/// </value>
 		public uint Value { get; private set; }
-		
+
 #endregion
 
 #region Constructors
-		
+
 		/// <summary>
 		///    Construcor.
 		/// </summary>
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/MakernoteIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/MakernoteIFDEntry.cs
index 050d959..d8a66c3 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/MakernoteIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/MakernoteIFDEntry.cs
@@ -25,52 +25,52 @@
 
 namespace TagLib.IFD.Entries
 {
-	
+
 	/// <summary>
 	///    An enum to represent the manufactor of the makernote
 	///    The information of the makernote types is from:
 	///    http://exiv2.org/makernote.html
 	/// </summary>
 	public enum MakernoteType {
-		
+
 		/// <summary>
 		///    The manufactor could not be determined
 		/// </summary>
 		Unknown,
-		
+
 		/// <summary>
 		///    Canon makernote.
 		///    Standard IFD without a special prefix.
 		/// </summary>
 		Canon,
-		
+
 		/// <summary>
 		///    Panasonic makernote.
 		///    "Panasonic\0\0\0" prefix and IFD starting at offset 12.
 		///    The next-IFD pointer is missing
 		/// </summary>
 		Panasonic,
-		
+
 		/// <summary>
 		///    Pentax makernote.
 		///    "AOC\0" + 2 unknown bytes as prefix. The IFD starts at
 		///    offset 6.
 		/// </summary>
 		Pentax,
-		
+
 		/// <summary>
 		///    Nikon makernote (type 1).
 		///    Standard IFD without a special prefix.
 		/// </summary>
 		Nikon1,
-		
+
 		/// <summary>
 		///    Nikon makernote (type 2).
 		///    "Nikon\0" + 2 unknown bytes prefix. The IFD starts at
 		///    offset 8.
 		/// </summary>
 		Nikon2,
-		
+
 		/// <summary>
 		///    Nikon makernote (type 3).
 		///    "Nikon\0" + 4 bytes with verison code + Tiff header.
@@ -78,14 +78,14 @@ namespace TagLib.IFD.Entries
 		///    are relative to start of the Tiff header (byte 10)
 		/// </summary>
 		Nikon3,
-		
+
 		/// <summary>
 		///    Olympus makernote (type 1).
 		///    "OLYMP\0" + 2 unknown bytes as prefix. The IFD starts at
 		///    offset 8.
 		/// </summary>
 		Olympus1,
-		
+
 		/// <summary>
 		///    Olympus makernote (type 2)
 		///    "OLYMPUS\0II" + 2 unknown bytes as prefix. The IFD starts at
@@ -93,7 +93,7 @@ namespace TagLib.IFD.Entries
 		///    beginning of the makernote.
 		/// </summary>
 		Olympus2,
-		
+
 		/// <summary>
 		///    Sony makernote (type 1).
 		///    "SONY DSC \0\0\0" as prefix. The IFD starts at offset 12. A
@@ -101,8 +101,8 @@ namespace TagLib.IFD.Entries
 		/// </summary>
 		Sony
 	}
-	
-	
+
+
 	/// <summary>
 	///    Contains a Makernote IFD.
 	/// </summary>
@@ -120,56 +120,56 @@ namespace TagLib.IFD.Entries
 	/// </remarks>
 	public class MakernoteIFDEntry : IFDEntry
 	{
-		
+
 #region Private Fields
-		
+
 		/// <value>
 		///    Stores the prefix of the makernote
 		/// </value>
 		private ByteVector prefix;
-		
+
 		/// <value>
 		///    Stores the offset of the IFD contained in makernote
 		/// </value>
 		private uint ifd_offset;
-		
+
 		/// <value>
 		///    Indicates, if the offsets are relative to the current makernote
 		///    or absolut to the base_offset of the surrounding IFD.
 		/// </value>
 		private bool absolute_offset;
-		
+
 		/// <value>
 		///    Stores, if the makernote is encoded in big- or little endian.
 		///    If the field is <see langword="null"/>, the endianess of the
 		///    surrounding IFD is used.
 		/// </value>
 		private bool? is_bigendian;
-		
+
 #endregion
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The type of the makernote the current instance represents
 		/// </value>
 		public MakernoteType MakernoteType { get; private set; }
-		
+
 		/// <value>
 		///    The pure <see cref="IFDStructure"/> which is stored by the
 		///    makernote.
 		/// </value>
 		public IFDStructure Structure { get; private set; }
-		
+
 #endregion
 
 #region Constructors
-		
+
 		/// <summary>
 		///    Construcor.
 		/// </summary>
@@ -212,7 +212,7 @@ namespace TagLib.IFD.Entries
 			this.absolute_offset = absolute_offset;
 			this.is_bigendian = is_bigendian;
 		}
-		
+
 		/// <summary>
 		///    Constructor. Creates a makernote instance just containing an IFD and
 		///    without any special prefix or offset behavior.
@@ -234,7 +234,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -257,17 +257,17 @@ namespace TagLib.IFD.Entries
 		public ByteVector Render (bool is_bigendian, uint offset, out ushort type, out uint count)
 		{
 			type = (ushort) IFDEntryType.Undefined;
-			
+
 			var renderer =
 				new IFDRenderer (this.is_bigendian ?? is_bigendian, Structure, absolute_offset ? offset + ifd_offset : ifd_offset);
-			
+
 			ByteVector data = renderer.Render ();
 			data.Insert (0, prefix);
 			count = (uint) data.Count;
 			return data;
 		}
-		
+
 #endregion
-		
+
 	}
 }
\ No newline at end of file
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/Rational.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/Rational.cs
index 7298efe..e8a69c5 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/Rational.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/Rational.cs
@@ -27,24 +27,24 @@ using System;
 
 namespace TagLib.IFD.Entries
 {
-	
+
 	/// <summary>
 	///    Representation of an unsigned rational value
 	/// </summary>
 	public struct Rational : IFormattable
 	{
 #region Private Fields
-		
+
 		/// <summary>
 		///    The numerator of the rational value
 		/// </summary>
 		private uint numerator;
-		
+
 		/// <summary>
 		///    The denominator of the rational value
 		/// </summary>
 		private uint denominator;
-		
+
 #endregion
 
 #region Constructor
@@ -65,11 +65,11 @@ namespace TagLib.IFD.Entries
 			Numerator = numerator;
 			Denominator = denominator;
 		}
-		
+
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Returns a rational value with reduced nominator and denominator
 		/// </summary>
@@ -86,10 +86,10 @@ namespace TagLib.IFD.Entries
 				gcd = b;
 				b = tmp;
 			}
-			
+
 			return new Rational (Numerator / gcd, Denominator / gcd);
 		}
-		
+
 		/// <summary>
 		///    Formatprovider to allow formatting of a value. <see cref="IFormattable"/>
 		/// </summary>
@@ -103,12 +103,12 @@ namespace TagLib.IFD.Entries
 		///    A <see cref="System.String"/> formated according to the given parameter
 		/// </returns>
 		public string ToString (string format, IFormatProvider provider) {
-			
+
 			Rational reduced = Reduce ();
-			
+
 			return String.Format ("{0}/{1}", reduced.Numerator, reduced.Denominator);
 		}
-		
+
 		/// <summary>
 		///    Converts the value to a <see cref="System.String"/>.
 		/// </summary>
@@ -119,11 +119,11 @@ namespace TagLib.IFD.Entries
 		{
 			return String.Format ("{0}", this);
 		}
-		
+
 #endregion
 
 #region Public Properties
-		
+
 		/// <value>
 		///    The numerator of the rational value
 		/// </value>
@@ -131,7 +131,7 @@ namespace TagLib.IFD.Entries
 			get { return numerator; }
 			set { numerator = value; }
 		}
-		
+
 		/// <value>
 		///    The denominator of the rational value
 		/// </value>
@@ -143,15 +143,15 @@ namespace TagLib.IFD.Entries
 			set {
 				if (value == 0)
 					throw new ArgumentException ("denominator");
-				
+
 				denominator = value;
 			}
 		}
-		
+
 #endregion
 
 #region Public Static Methods
-		
+
 		/// <summary>
 		///    Cast the <see cref="Rational"/> value to a <see cref="System.Double"/>.
 		/// </summary>
@@ -165,8 +165,8 @@ namespace TagLib.IFD.Entries
 		{
 			return (double) rat.Numerator / (double) rat.Denominator;
 		}
-		
+
 #endregion
-			
+
 	}
 }
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/RationalArrayIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/RationalArrayIFDEntry.cs
index eb87589..eba68dc 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/RationalArrayIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/RationalArrayIFDEntry.cs
@@ -30,7 +30,7 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class RationalArrayIFDEntry : ArrayIFDEntry<Rational>
 	{
-		
+
 #region Constructors
 
 		/// <summary>
@@ -52,7 +52,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -82,7 +82,7 @@ namespace TagLib.IFD.Entries
 				data.Add (ByteVector.FromUInt (rational.Numerator, is_bigendian));
 				data.Add (ByteVector.FromUInt (rational.Denominator, is_bigendian));
 			}
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/RationalIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/RationalIFDEntry.cs
index f85b9bf..10cc308 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/RationalIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/RationalIFDEntry.cs
@@ -30,23 +30,23 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class RationalIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The value which is stored by the current instance
 		/// </value>
 		public Rational Value { get; private set; }
-		
+
 #endregion
 
 #region Constructors
-		
+
 		/// <summary>
 		///    Construcor.
 		/// </summary>
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -90,11 +90,11 @@ namespace TagLib.IFD.Entries
 		{
 			type = (ushort) IFDEntryType.Rational;
 			count = 1;
-			
+
 			ByteVector data = new ByteVector ();
 			data.Add (ByteVector.FromUInt (Value.Numerator, is_bigendian));
 			data.Add (ByteVector.FromUInt (Value.Denominator, is_bigendian));
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SByteIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SByteIFDEntry.cs
index a07ac77..06297c5 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SByteIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SByteIFDEntry.cs
@@ -30,19 +30,19 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class SByteIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The value which is stored by the current instance
 		/// </value>
 		public sbyte Value { get; private set; }
-		
+
 #endregion
 
 #region Constructors
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SLongArrayIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SLongArrayIFDEntry.cs
index 51f4ea5..6dbaac3 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SLongArrayIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SLongArrayIFDEntry.cs
@@ -30,7 +30,7 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class SLongArrayIFDEntry : ArrayIFDEntry<int>
 	{
-		
+
 #region Constructors
 
 		/// <summary>
@@ -51,7 +51,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -75,11 +75,11 @@ namespace TagLib.IFD.Entries
 		{
 			type = (ushort) IFDEntryType.Long;
 			count = (uint) Values.Length;
-			
+
 			ByteVector data = new ByteVector ();
 			foreach (int value in Values)
 				data.Add (ByteVector.FromInt (value, is_bigendian));
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SLongIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SLongIFDEntry.cs
index 90a22ed..c184f15 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SLongIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SLongIFDEntry.cs
@@ -30,19 +30,19 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class SLongIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The value which is stored by the current instance
 		/// </value>
 		public int Value { get; private set; }
-		
+
 #endregion
 
 #region Constructors
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRational.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRational.cs
index 2efff19..f80dee8 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRational.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRational.cs
@@ -27,24 +27,24 @@ using System;
 
 namespace TagLib.IFD.Entries
 {
-	
+
 	/// <summary>
 	///    Representation of a signed rational value
 	/// </summary>
 	public struct SRational : IFormattable
 	{
 #region Private Fields
-		
+
 		/// <summary>
 		///    The numerator of the rational value
 		/// </summary>
 		private int numerator;
-		
+
 		/// <summary>
 		///    The denominator of the rational value
 		/// </summary>
 		private int denominator;
-		
+
 #endregion
 
 #region Constructor
@@ -65,11 +65,11 @@ namespace TagLib.IFD.Entries
 			Numerator = numerator;
 			Denominator = denominator;
 		}
-		
+
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Returns a rational value with reduced nominator and denominator
 		/// </summary>
@@ -87,10 +87,10 @@ namespace TagLib.IFD.Entries
 				gcd = b;
 				b = tmp;
 			}
-			
+
 			return new SRational (den_sign * (Numerator / gcd), Math.Abs (Denominator) / gcd);
 		}
-		
+
 		/// <summary>
 		///    Formatprovider to allow formatting of a value. <see cref="IFormattable"/>
 		/// </summary>
@@ -104,12 +104,12 @@ namespace TagLib.IFD.Entries
 		///    A <see cref="System.String"/> formated according to the given parameter
 		/// </returns>
 		public string ToString (string format, IFormatProvider provider) {
-			
+
 			SRational reduced = Reduce ();
-			
+
 			return String.Format ("{0}/{1}", reduced.Numerator, reduced.Denominator);
 		}
-				
+
 		/// <summary>
 		///    Converts the value to a <see cref="System.String"/>.
 		/// </summary>
@@ -120,11 +120,11 @@ namespace TagLib.IFD.Entries
 		{
 			return String.Format ("{0}", this);
 		}
-		
+
 #endregion
 
 #region Public Properties
-		
+
 		/// <value>
 		///    The numerator of the rational value
 		/// </value>
@@ -132,7 +132,7 @@ namespace TagLib.IFD.Entries
 			get { return numerator; }
 			set { numerator = value; }
 		}
-		
+
 		/// <value>
 		///    The denominator of the rational value
 		/// </value>
@@ -144,15 +144,15 @@ namespace TagLib.IFD.Entries
 			set {
 				if (value == 0)
 					throw new ArgumentException ("denominator");
-				
+
 				denominator = value;
 			}
 		}
-		
+
 #endregion
 
 #region Public Static Methods
-		
+
 		/// <summary>
 		///    Cast the <see cref="Rational"/> value to a <see cref="System.Double"/>.
 		/// </summary>
@@ -166,8 +166,8 @@ namespace TagLib.IFD.Entries
 		{
 			return (double) rat.Numerator / (double) rat.Denominator;
 		}
-		
+
 #endregion
-			
+
 	}
 }
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRationalArrayIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRationalArrayIFDEntry.cs
index f4859c5..4e02c49 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRationalArrayIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRationalArrayIFDEntry.cs
@@ -30,7 +30,7 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class SRationalArrayIFDEntry : ArrayIFDEntry<SRational>
 	{
-		
+
 #region Constructors
 
 		/// <summary>
@@ -52,7 +52,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -82,7 +82,7 @@ namespace TagLib.IFD.Entries
 				data.Add (ByteVector.FromInt (rational.Numerator, is_bigendian));
 				data.Add (ByteVector.FromInt (rational.Denominator, is_bigendian));
 			}
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRationalIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRationalIFDEntry.cs
index c6f3cdf..29095d6 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRationalIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SRationalIFDEntry.cs
@@ -30,23 +30,23 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class SRationalIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The value which is stored by the current instance
 		/// </value>
 		public SRational Value { get; private set; }
-		
+
 #endregion
 
 #region Constructors
-		
+
 		/// <summary>
 		///    Construcor.
 		/// </summary>
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -90,11 +90,11 @@ namespace TagLib.IFD.Entries
 		{
 			type = (ushort) IFDEntryType.SRational;
 			count = 1;
-			
+
 			ByteVector data = new ByteVector ();
 			data.Add (ByteVector.FromInt (Value.Numerator, is_bigendian));
 			data.Add (ByteVector.FromInt (Value.Denominator, is_bigendian));
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SShortArrayIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SShortArrayIFDEntry.cs
index 91f9eb3..5769ef7 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SShortArrayIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SShortArrayIFDEntry.cs
@@ -30,7 +30,7 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class SShortArrayIFDEntry : ArrayIFDEntry<short>
 	{
-		
+
 #region Constructors
 
 		/// <summary>
@@ -51,7 +51,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -75,11 +75,11 @@ namespace TagLib.IFD.Entries
 		{
 			type = (ushort) IFDEntryType.SShort;
 			count = (uint) Values.Length;
-			
+
 			ByteVector data = new ByteVector ();
 			foreach (ushort value in Values)
 				data.Add (ByteVector.FromUShort ((ushort) value, is_bigendian));
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SShortIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SShortIFDEntry.cs
index 9f96cca..4bf3e09 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SShortIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SShortIFDEntry.cs
@@ -30,19 +30,19 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class SShortIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The value which is stored by the current instance
 		/// </value>
 		public short Value { get; private set; }
-		
+
 #endregion
 
 #region Constructors
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ShortArrayIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ShortArrayIFDEntry.cs
index c50835f..6993983 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ShortArrayIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ShortArrayIFDEntry.cs
@@ -30,7 +30,7 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class ShortArrayIFDEntry : ArrayIFDEntry<ushort>
 	{
-		
+
 #region Constructors
 
 		/// <summary>
@@ -51,7 +51,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -75,11 +75,11 @@ namespace TagLib.IFD.Entries
 		{
 			type = (ushort) IFDEntryType.Short;
 			count = (uint) Values.Length;
-			
+
 			ByteVector data = new ByteVector ();
 			foreach (ushort value in Values)
 				data.Add (ByteVector.FromUShort (value, is_bigendian));
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ShortIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ShortIFDEntry.cs
index 9c1d909..0031d9d 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ShortIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ShortIFDEntry.cs
@@ -30,19 +30,19 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class ShortIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The value which is stored by the current instance
 		/// </value>
 		public ushort Value { get; private set; }
-		
+
 #endregion
 
 #region Constructors
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/StringIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/StringIFDEntry.cs
index 0c31351..73ba8c6 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/StringIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/StringIFDEntry.cs
@@ -30,19 +30,19 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class StringIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The value which is stored by the current instance
 		/// </value>
 		public string Value { get; private set; }
-		
+
 #endregion
 
 #region Constructors
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -89,12 +89,12 @@ namespace TagLib.IFD.Entries
 		public ByteVector Render (bool is_bigendian, uint offset, out ushort type, out uint count)
 		{
 			type = (ushort) IFDEntryType.Ascii;
-			
+
 			ByteVector data = Value;
 			data.Add ("\0");
-			
+
 			count = (uint) data.Count;
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/StripOffsetsIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/StripOffsetsIFDEntry.cs
index 27e8e78..c460cce 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/StripOffsetsIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/StripOffsetsIFDEntry.cs
@@ -34,21 +34,21 @@ namespace TagLib.IFD.Entries
 	{
 
 #region Private Fields
-		
+
 		/// <value>
 		///    Store the strip length to read them before writing.
 		/// </value>
 		private uint[] byte_counts;
-		
+
 		/// <value>
 		///    The file the offsets belong to
 		/// </value>
 		private File file;
-		
+
 #endregion
-		
+
 #region Constructors
-		
+
 		/// <summary>
 		///    Constructor.
 		/// </summary>
@@ -70,7 +70,7 @@ namespace TagLib.IFD.Entries
 			Values = values;
 			this.byte_counts = byte_counts;
 			this.file = file;
-			
+
 			if (values.Length != byte_counts.Length)
 				throw new Exception ("strip offsets and strip byte counts do not have the same length");
 		}
@@ -78,7 +78,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -106,22 +106,22 @@ namespace TagLib.IFD.Entries
 			// collected by offset_data. Then both are concatenated.
 			ByteVector data = new ByteVector ();
 			ByteVector offset_data = new ByteVector ();
-			
+
 			// every offset needs 4 byte, we need to reserve the bytes.
 			uint data_offset = offset + (uint) (4 * Values.Length);
-			
+
 			for (int i = 0; i < Values.Length; i++) {
 				uint new_offset = (uint) (data_offset + data.Count);
-				
+
 				file.Seek (Values[i], SeekOrigin.Begin);
 				data.Add (file.ReadBlock ((int) byte_counts[i]));
-				
+
 				// update strip offset data to new offset
 				Values[i] = new_offset;
-				
+
 				offset_data.Add (ByteVector.FromUInt (new_offset, is_bigendian));
 			}
-			
+
 			// If the StripOffsets only consists of one offset, this doesn't work, because this offset
 			// should be stored inside the IFD as a value. But, because of the additional image data,
 			// it is not stored there. We need to fix this, that the offset is adjusted correctly.
@@ -133,15 +133,15 @@ namespace TagLib.IFD.Entries
 				data.Insert (0, offset_data);
 			else
 				Values[0] = offset;
-			
+
 			while (data.Count < 4)
 				data.Add (0x00);
-			
+
 			// the entry is a single long entry where the value is an offset to the data
 			// the offset is automatically updated by the renderer.
 			type = (ushort) IFDEntryType.Long;
 			count = (uint) Values.Length;
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SubIFDArrayEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SubIFDArrayEntry.cs
index 0d9b3a4..64cef33 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SubIFDArrayEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SubIFDArrayEntry.cs
@@ -44,9 +44,9 @@ namespace TagLib.IFD.Entries
 		///    The structures of the IFDs to which this entry points.
 		/// </value>
 		public IFDStructure [] Entries { get; private set; }
-		
+
 #region Constructors
-		
+
 		/// <summary>
 		///    Constructor.
 		/// </summary>
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SubIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SubIFDEntry.cs
index ee3abb7..5664fd6 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SubIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/SubIFDEntry.cs
@@ -30,19 +30,19 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class SubIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The type of the IFD entry.
 		/// </value>
 		public ushort Type { get; private set; }
-		
+
 		/// <value>
 		///    The count of the IFD entry.
 		/// </value>
@@ -65,7 +65,7 @@ namespace TagLib.IFD.Entries
 				return sum;
 			}
 		}
-		
+
 		/// <summary>
 		///    Construcor.
 		/// </summary>
@@ -93,7 +93,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -117,7 +117,7 @@ namespace TagLib.IFD.Entries
 		{
 			type = (ushort) Type;
 			count = 1;
-			
+
 			count = Count;
 			return new IFDRenderer (is_bigendian, Structure, offset).Render ();
 		}
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ThumbnailDataIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ThumbnailDataIFDEntry.cs
index e199f78..2a25e0c 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ThumbnailDataIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/ThumbnailDataIFDEntry.cs
@@ -34,23 +34,23 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class ThumbnailDataIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The data of the thumbnail which is stored by the current instance
 		/// </value>
 		public ByteVector Data { get; private set; }
-		
+
 #endregion
 
 #region Constructors
-		
+
 		/// <summary>
 		///    Construcor.
 		/// </summary>
@@ -70,7 +70,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -96,7 +96,7 @@ namespace TagLib.IFD.Entries
 			// the offset is automatically updated by the renderer.
 			type = (ushort) IFDEntryType.Long;
 			count = 1;
-			
+
 			return Data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/UndefinedIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/UndefinedIFDEntry.cs
index 5a5c210..442bab3 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/UndefinedIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/UndefinedIFDEntry.cs
@@ -30,23 +30,23 @@ namespace TagLib.IFD.Entries
 	/// </summary>
 	public class UndefinedIFDEntry : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The data which is stored by the current instance
 		/// </value>
 		public ByteVector Data { get; private set; }
-		
+
 #endregion
 
 #region Constructors
-		
+
 		/// <summary>
 		///    Construcor.
 		/// </summary>
@@ -66,7 +66,7 @@ namespace TagLib.IFD.Entries
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -90,7 +90,7 @@ namespace TagLib.IFD.Entries
 		{
 			type = (ushort) IFDEntryType.Undefined;
 			count = (uint) Data.Count;
-			
+
 			return Data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/UserCommentIFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/UserCommentIFDEntry.cs
index 5a0f316..f665ed9 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Entries/UserCommentIFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Entries/UserCommentIFDEntry.cs
@@ -34,7 +34,7 @@ namespace TagLib.IFD.Entries
 	{
 
 #region Constant Values
-		
+
 		/// <summary>
 		///   Marker for an ASCII-encoded UserComment tag.
 		/// </summary>
@@ -56,19 +56,19 @@ namespace TagLib.IFD.Entries
 		public static readonly ByteVector COMMENT_UNDEFINED_CODE = new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
 
 #endregion
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The value which is stored by the current instance
 		/// </value>
 		public string Value { get; private set; }
-		
+
 #endregion
 
 #region Constructors
@@ -104,12 +104,12 @@ namespace TagLib.IFD.Entries
 			Tag = tag;
 
 			if (data.StartsWith (COMMENT_ASCII_CODE)) {
-				Value = data.ToString (StringType.Latin1, COMMENT_ASCII_CODE.Count, data.Count - COMMENT_ASCII_CODE.Count);
+				Value = TrimNull (data.ToString (StringType.Latin1, COMMENT_ASCII_CODE.Count, data.Count - COMMENT_ASCII_CODE.Count));
 				return;
 			}
 
 			if (data.StartsWith (COMMENT_UNICODE_CODE)) {
-				Value = data.ToString (StringType.UTF8, COMMENT_UNICODE_CODE.Count, data.Count - COMMENT_UNICODE_CODE.Count);
+				Value = TrimNull (data.ToString (StringType.UTF8, COMMENT_UNICODE_CODE.Count, data.Count - COMMENT_UNICODE_CODE.Count));
 				return;
 			}
 
@@ -118,11 +118,11 @@ namespace TagLib.IFD.Entries
 				Value = String.Empty;
 				return;
 			}
-				
+
 			// Some programs like e.g. CanonZoomBrowser inserts just the first 0x00-byte
 			// followed by 7-bytes of trash.
 			if (data.StartsWith ((byte) 0x00) && data.Count >= 8) {
-					
+
 				// And CanonZoomBrowser fills some trailing bytes of the comment field
 				// with '\0'. So we return only the characters before the first '\0'.
 				int term = data.Find ("\0", 8);
@@ -138,14 +138,22 @@ namespace TagLib.IFD.Entries
 				Value = String.Empty;
 				return;
 			}
-			
+
 			throw new NotImplementedException ("UserComment with other encoding than Latin1 or Unicode");
 		}
 
+		private string TrimNull (string value)
+		{
+			int term = value.IndexOf ('\0');
+			if (term > -1)
+				value = value.Substring (0, term);
+			return value;
+		}
+
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -168,13 +176,13 @@ namespace TagLib.IFD.Entries
 		public ByteVector Render (bool is_bigendian, uint offset, out ushort type, out uint count)
 		{
 			type = (ushort) IFDEntryType.Undefined;
-			
+
 			ByteVector data = new ByteVector ();
 			data.Add (COMMENT_UNICODE_CODE);
 			data.Add (ByteVector.FromString (Value, StringType.UTF8));
-			
+
 			count = (uint) data.Count;
-			
+
 			return data;
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/IFDEntry.cs b/lib/TagLib/TagLib/src/TagLib/IFD/IFDEntry.cs
index 042551a..63c5388 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/IFDEntry.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/IFDEntry.cs
@@ -30,7 +30,7 @@ namespace TagLib.IFD
 	/// </summary>
 	public interface IFDEntry
 	{
-		
+
 #region Properties
 
 		/// <value>
@@ -39,9 +39,9 @@ namespace TagLib.IFD
 		ushort Tag {
 			get;
 		}
-		
+
 #endregion
-		
+
 #region Methods
 
 		/// <summary>
@@ -64,32 +64,32 @@ namespace TagLib.IFD
 		///    A <see cref="ByteVector"/> with the rendered data.
 		/// </returns>
 		ByteVector Render (bool is_bigendian, uint offset, out ushort type, out uint count);
-		
+
 #endregion
-	
+
 	}
 
-	
+
 	/// <summary>
 	///    This class abstracts common stuff for array IFD entries
 	/// </summary>
 	public abstract class ArrayIFDEntry<T> : IFDEntry
 	{
-		
+
 #region Properties
-		
+
 		/// <value>
 		///    The ID of the tag, the current instance belongs to
 		/// </value>
 		public ushort Tag { get; private set; }
-		
+
 		/// <value>
 		///    The values stored by the current instance.
 		/// </value>
 		public T [] Values { get; protected set; }
-		
+
 #endregion
-		
+
 #region Constructors
 
 		/// <summary>
@@ -105,9 +105,9 @@ namespace TagLib.IFD
 		}
 
 #endregion
-		
+
 #region Public Methods
-		
+
 		/// <summary>
 		///    Renders the current instance to a <see cref="ByteVector"/>
 		/// </summary>
@@ -128,8 +128,8 @@ namespace TagLib.IFD
 		///    A <see cref="ByteVector"/> with the rendered data.
 		/// </returns>
 		public abstract ByteVector Render (bool is_bigendian, uint offset, out ushort type, out uint count);
-		
+
 #endregion
-		
+
 	}
 }
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/IFDEntryType.cs b/lib/TagLib/TagLib/src/TagLib/IFD/IFDEntryType.cs
index d304b37..aa141d8 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/IFDEntryType.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/IFDEntryType.cs
@@ -99,7 +99,7 @@ namespace TagLib.IFD
 		///    Double precision (8-byte) IEEE format.
 		/// </summary>
 		Double = 12,
-		
+
 		/// <summary>
 		///    IFD
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/IFDReader.cs b/lib/TagLib/TagLib/src/TagLib/IFD/IFDReader.cs
index 11e1689..8253bd1 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/IFDReader.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/IFDReader.cs
@@ -39,17 +39,17 @@ namespace TagLib.IFD
 
 #region Private Constants
 
-		private static readonly string PANASONIC_HEADER = "Panasonic\0\0\0";	
-		private static readonly string PENTAX_HEADER = "AOC\0";	
+		private static readonly string PANASONIC_HEADER = "Panasonic\0\0\0";
+		private static readonly string PENTAX_HEADER = "AOC\0";
 		private static readonly string NIKON_HEADER = "Nikon\0";
 		private static readonly string OLYMPUS1_HEADER = "OLYMP\0";
 		private static readonly string OLYMPUS2_HEADER = "OLYMPUS\0";
 		private static readonly string SONY_HEADER = "SONY DSC \0\0\0";
-		
-#endregion		
+
+#endregion
 
 #region Protected Fields
-		
+
 		/// <summary>
 		///    The <see cref="File" /> where this IFD is found in.
 		/// </summary>
@@ -74,11 +74,11 @@ namespace TagLib.IFD
 		protected readonly long base_offset;
 
 		/// <summary>
-		///     A <see cref="System.UInt32"/> value with the beginning of the IFD relative to 
+		///     A <see cref="System.UInt32"/> value with the beginning of the IFD relative to
 		///     base_offset.
 		/// </summary>
 		protected readonly uint ifd_offset;
-		
+
 		/// <summary>
 		///    A <see cref="System.UInt32"/> with the maximal offset, which should occur in the
 		///    IFD. Greater offsets, would reference beyond the considered data.
@@ -99,7 +99,7 @@ namespace TagLib.IFD
 			get { return parse_makernote; }
 			set { parse_makernote = value; }
 		}
-		
+
 #region Constructors
 
 		/// <summary>
@@ -122,7 +122,7 @@ namespace TagLib.IFD
 		///     name="base_offset"/> must contain the beginning of the segment.
 		/// </param>
 		/// <param name="ifd_offset">
-		///     A <see cref="System.UInt32"/> value with the beginning of the IFD relative to 
+		///     A <see cref="System.UInt32"/> value with the beginning of the IFD relative to
 		///     <paramref name="base_offset"/>.
 		/// </param>
 		/// <param name="max_offset">
@@ -150,7 +150,7 @@ namespace TagLib.IFD
 		{
 			Read (-1);
 		}
-		
+
 		/// <summary>
 		///    Read IFD segments from the file.
 		/// </summary>
@@ -172,16 +172,18 @@ namespace TagLib.IFD
 			uint next_offset = ifd_offset;
 			int i = 0;
 
-			StartIFDLoopDetect ();
-			do {
-				if (DetectIFDLoop (base_offset + next_offset)) {
-					file.PossiblyCorrupt = true; // IFD loop
-					break;
-				}
-				next_offset = ReadIFD (base_offset, next_offset, max_offset);
-			} while (next_offset > 0 && (count == -1 || ++i < count));
+			lock (file) {
+				StartIFDLoopDetect ();
+				do {
+					if (DetectIFDLoop (base_offset + next_offset)) {
+						file.PossiblyCorrupt = true; // IFD loop
+						break;
+					}
+					next_offset = ReadIFD (base_offset, next_offset, max_offset);
+				} while (next_offset > 0 && (count == -1 || ++i < count));
 
-			StopIFDLoopDetect ();
+				StopIFDLoopDetect ();
+			}
 		}
 
 #endregion
@@ -258,8 +260,11 @@ namespace TagLib.IFD
 		/// </returns>
 		private uint ReadIFD (long base_offset, uint offset, uint max_offset)
 		{
-			if (base_offset + offset > file.Length)
-				throw new Exception (String.Format ("Invalid IFD offset {0}, length: {1}", offset, file.Length));
+			if (base_offset + offset > file.Length) {
+				// Invalid IFD offset
+				file.PossiblyCorrupt = true;
+				return 0;
+			}
 
 			var directory = new IFDDirectory ();
 
@@ -271,31 +276,31 @@ namespace TagLib.IFD
 				file.PossiblyCorrupt = true;
 				return 0;
 			}
-			
+
 			ByteVector entry_datas = file.ReadBlock (12 * entry_count);
 			uint next_offset = ReadUInt ();
-			
+
 			for (int i = 0; i < entry_count; i++) {
 				ByteVector entry_data = entry_datas.Mid (i * 12, 12);
-				
+
 				ushort entry_tag = entry_data.Mid (0, 2).ToUShort (is_bigendian);
 				ushort type = entry_data.Mid (2, 2).ToUShort (is_bigendian);
 				uint value_count = entry_data.Mid (4, 4).ToUInt (is_bigendian);
 				ByteVector offset_data = entry_data.Mid (8, 4);
 
 				IFDEntry entry = CreateIFDEntry (entry_tag, type, value_count, base_offset, offset_data, max_offset);
-				
+
 				if (entry == null)
 					continue;
-				
+
 				if (directory.ContainsKey (entry.Tag))
 					directory.Remove (entry.Tag);
-				
+
 				directory.Add (entry.Tag, entry);
 			}
 
 			FixupDirectory (base_offset, directory);
-			
+
 			structure.directories.Add (directory);
 			return next_offset;
 		}
@@ -341,7 +346,7 @@ namespace TagLib.IFD
 			if (tag == (ushort) IFDEntryTag.IPTC && type == (ushort) IFDEntryType.Long) {
 				type = (ushort) IFDEntryType.Byte;
 			}
-			
+
 			var ifd_entry = ParseIFDEntry (tag, type, count, base_offset, offset);
 			if (ifd_entry != null)
 				return ifd_entry;
@@ -356,130 +361,137 @@ namespace TagLib.IFD
 			if (count == 1) {
 				if (type == (ushort) IFDEntryType.Byte)
 					return new ByteIFDEntry (tag, offset_data[0]);
-				
+
 				if (type == (ushort) IFDEntryType.SByte)
 					return new SByteIFDEntry (tag, (sbyte)offset_data[0]);
-				
+
 				if (type == (ushort) IFDEntryType.Short)
 					return new ShortIFDEntry (tag, offset_data.Mid (0, 2).ToUShort (is_bigendian));
-				
+
 				if (type == (ushort) IFDEntryType.SShort)
 					return new SShortIFDEntry (tag, (short) offset_data.Mid (0, 2).ToUShort (is_bigendian));
-				
+
 				if (type == (ushort) IFDEntryType.Long)
 					return new LongIFDEntry (tag, offset_data.ToUInt (is_bigendian));
-				
+
 				if (type == (ushort) IFDEntryType.SLong)
 					return new SLongIFDEntry (tag, offset_data.ToInt (is_bigendian));
-				
+
 			}
-			
+
 			if (count == 2) {
 				if (type == (ushort) IFDEntryType.Short) {
 					ushort [] data = new ushort [] {
 						offset_data.Mid (0, 2).ToUShort (is_bigendian),
 						offset_data.Mid (2, 2).ToUShort (is_bigendian)
 					};
-					
+
 					return new ShortArrayIFDEntry (tag, data);
 				}
-				
+
 				if (type == (ushort) IFDEntryType.SShort) {
 					short [] data = new short [] {
 						(short) offset_data.Mid (0, 2).ToUShort (is_bigendian),
 						(short) offset_data.Mid (2, 2).ToUShort (is_bigendian)
 					};
-					
+
 					return new SShortArrayIFDEntry (tag, data);
 				}
 			}
-			
+
 			if (count <= 4) {
 				if (type == (ushort) IFDEntryType.Undefined)
 					return new UndefinedIFDEntry (tag, offset_data.Mid (0, (int)count));
-				
-				if (type == (ushort) IFDEntryType.Ascii)
-					return new StringIFDEntry (tag, offset_data.Mid (0, (int)count - 1).ToString ());
-				
+
+				if (type == (ushort) IFDEntryType.Ascii) {
+					string data = offset_data.Mid (0, (int)count).ToString ();
+					int term = data.IndexOf ('\0');
+
+					if (term > -1)
+						data = data.Substring (0, term);
+
+					return new StringIFDEntry (tag, data);
+				}
+
 				if (type == (ushort) IFDEntryType.Byte)
 					return new ByteVectorIFDEntry (tag, offset_data.Mid (0, (int)count));
 			}
-			
-			
+
+
 			// FIXME: create correct type.
 			if (offset > max_offset)
-				return new UndefinedIFDEntry (tag, new ByteVector ()); 
-			
+				return new UndefinedIFDEntry (tag, new ByteVector ());
+
 			// then handle data referenced by the offset
 			file.Seek (base_offset + offset, SeekOrigin.Begin);
-			
+
 			if (count == 1) {
 				if (type == (ushort) IFDEntryType.Rational)
 					return new RationalIFDEntry (tag, ReadRational ());
-				
+
 				if (type == (ushort) IFDEntryType.SRational)
 					return new SRationalIFDEntry (tag, ReadSRational ());
 			}
-			
+
 			if (count > 1) {
 				if (type == (ushort) IFDEntryType.Long) {
 					uint [] data = ReadUIntArray (count);
-					
+
 					return new LongArrayIFDEntry (tag, data);
 				}
-				
+
 				if (type == (ushort) IFDEntryType.SLong) {
 					int [] data = ReadIntArray (count);
-					
+
 					return new SLongArrayIFDEntry (tag, data);
 				}
-				
+
 				if (type == (ushort) IFDEntryType.Rational) {
 					Rational[] entries = new Rational [count];
-					
+
 					for (int i = 0; i < count; i++)
 						entries[i] = ReadRational ();
 
 					return new RationalArrayIFDEntry (tag, entries);
 				}
-				
+
 				if (type == (ushort) IFDEntryType.SRational) {
 					SRational[] entries = new SRational [count];
-					
+
 					for (int i = 0; i < count; i++)
 						entries[i] = ReadSRational ();
 
 					return new SRationalArrayIFDEntry (tag, entries);
 				}
 			}
-			
+
 			if (count > 2) {
 				if (type == (ushort) IFDEntryType.Short) {
 					ushort [] data = ReadUShortArray (count);
 
 					return new ShortArrayIFDEntry (tag, data);
 				}
-				
+
 				if (type == (ushort) IFDEntryType.SShort) {
 					short [] data = ReadShortArray (count);
 
 					return new SShortArrayIFDEntry (tag, data);
 				}
 			}
-			
+
 			if (count > 4) {
 				if (type == (ushort) IFDEntryType.Long) {
 					uint [] data = ReadUIntArray (count);
 
 					return new LongArrayIFDEntry (tag, data);
-				} 
-				
+				}
+
 				if (type == (ushort) IFDEntryType.Byte) {
 					ByteVector data = file.ReadBlock ((int) count);
 
 					return new ByteVectorIFDEntry (tag, data);
 				}
-				
+
 				if (type == (ushort) IFDEntryType.Ascii) {
 					string data = ReadAsciiString ((int) count);
 
@@ -491,7 +503,7 @@ namespace TagLib.IFD
 
 					return new UserCommentIFDEntry (tag, data);
 				}
-				
+
 				if (type == (ushort) IFDEntryType.Undefined) {
 					ByteVector data = file.ReadBlock ((int) count);
 
@@ -501,11 +513,17 @@ namespace TagLib.IFD
 
 			if (type == (ushort) IFDEntryType.Float)
 				return null;
-			
+
+			if (type == 0) {
+				// Invalid type
+				file.PossiblyCorrupt = true;
+				return null;
+			}
+
 			// TODO: We should ignore unreadable values, erroring for now until we have sufficient coverage.
 			throw new NotImplementedException (String.Format ("Unknown type/count {0}/{1} ({2})", type, count, offset));
 		}
-		
+
 		/// <summary>
 		///    Reads a 2-byte signed short from the current file.
 		/// </summary>
@@ -517,7 +535,7 @@ namespace TagLib.IFD
 		{
 			return (short) file.ReadBlock (2).ToUShort (is_bigendian);
 		}
-		
+
 		/// <summary>
 		///    Reads a 2-byte unsigned short from the current file.
 		/// </summary>
@@ -529,7 +547,7 @@ namespace TagLib.IFD
 		{
 			return file.ReadBlock (2).ToUShort (is_bigendian);
 		}
-		
+
 		/// <summary>
 		///    Reads a 4-byte int from the current file.
 		/// </summary>
@@ -541,7 +559,7 @@ namespace TagLib.IFD
 		{
 			return file.ReadBlock (4).ToInt (is_bigendian);
 		}
-		
+
 		/// <summary>
 		///    Reads a 4-byte unsigned int from the current file.
 		/// </summary>
@@ -553,7 +571,7 @@ namespace TagLib.IFD
 		{
 			return file.ReadBlock (4).ToUInt (is_bigendian);
 		}
-		
+
 		/// <summary>
 		///    Reads a <see cref="Rational"/> by two following unsigned
 		///    int from the current file.
@@ -571,10 +589,10 @@ namespace TagLib.IFD
 				numerator = 0;
 				denominator = 1;
 			}
-			
+
 			return new Rational (numerator, denominator);
 		}
-		
+
 		/// <summary>
 		///    Reads a <see cref="SRational"/> by two following unsigned
 		///    int from the current file.
@@ -586,13 +604,13 @@ namespace TagLib.IFD
 		{
 			int numerator = ReadInt ();
 			int denominator = ReadInt ();
-			
+
 			// correct illegal value
 			if (denominator == 0) {
 				numerator = 0;
 				denominator = 1;
 			}
-			
+
 			return new SRational (numerator, denominator);
 		}
 
@@ -610,7 +628,7 @@ namespace TagLib.IFD
 				data [i] = ReadUShort ();
 			return data;
 		}
-		
+
 		/// <summary>
 		///    Reads an array of 2-byte signed shorts from the current file.
 		/// </summary>
@@ -625,7 +643,7 @@ namespace TagLib.IFD
 				data [i] = ReadShort ();
 			return data;
 		}
-		
+
 		/// <summary>
 		///    Reads an array of 4-byte int from the current file.
 		/// </summary>
@@ -640,7 +658,7 @@ namespace TagLib.IFD
 				data [i] = ReadInt ();
 			return data;
 		}
-		
+
 		/// <summary>
 		///    Reads an array of 4-byte unsigned int from the current file.
 		/// </summary>
@@ -673,16 +691,15 @@ namespace TagLib.IFD
 		/// </remarks>
 		private string ReadAsciiString (int count)
 		{
-			// The last character is \0
-			string str = file.ReadBlock (count - 1).ToString ();
+			string str = file.ReadBlock (count).ToString ();
 			int term = str.IndexOf ('\0');
-			
-			if (term == -1)
-				return str;
-			else
-				return str.Substring (0, term);
+
+			if (term > -1)
+				str = str.Substring (0, term);
+
+			return str;
 		}
-		
+
 		/// <summary>
 		///    Performs some fixups to a read <see cref="IFDDirectory"/>. For some
 		///    special cases multiple <see cref="IFDEntry"/> instances contained
@@ -707,60 +724,60 @@ namespace TagLib.IFD
 			ushort offset_tag = (ushort) IFDEntryTag.JPEGInterchangeFormat;
 			ushort length_tag = (ushort) IFDEntryTag.JPEGInterchangeFormatLength;
 			if (directory.ContainsKey (offset_tag) && directory.ContainsKey (length_tag)) {
-				
+
 				var offset_entry = directory [offset_tag] as LongIFDEntry;
 				var length_entry = directory [length_tag] as LongIFDEntry;
-				
+
 				if (offset_entry != null && length_entry != null) {
 					uint offset = offset_entry.Value;
 					uint length = length_entry.Value;
-					
+
 					file.Seek (base_offset + offset, SeekOrigin.Begin);
 					ByteVector data = file.ReadBlock ((int) length);
-					
+
 					directory.Remove (offset_tag);
 					directory.Add (offset_tag, new ThumbnailDataIFDEntry (offset_tag, data));
 				}
 			}
-			
-			
+
+
 			// create a StripOffsetIFDEntry if necessary
 			ushort strip_offsets_tag = (ushort) IFDEntryTag.StripOffsets;
 			ushort strip_byte_counts_tag = (ushort) IFDEntryTag.StripByteCounts;
 			if (directory.ContainsKey (strip_offsets_tag) && directory.ContainsKey (strip_byte_counts_tag)) {
-				
+
 				uint [] strip_offsets = null;
 				uint [] strip_byte_counts = null;
-				
+
 				var strip_offsets_entry = directory [strip_offsets_tag];
 				var strip_byte_counts_entry = directory [strip_byte_counts_tag];
-				
+
 				if (strip_offsets_entry is LongIFDEntry)
 					strip_offsets = new uint[] {(strip_offsets_entry as LongIFDEntry).Value};
 				else if (strip_offsets_entry is LongArrayIFDEntry)
 					strip_offsets = (strip_offsets_entry as LongArrayIFDEntry).Values;
-				
+
 				if (strip_offsets == null)
 					return;
-				
+
 				if (strip_byte_counts_entry is LongIFDEntry)
 					strip_byte_counts = new uint[] {(strip_byte_counts_entry as LongIFDEntry).Value};
 				else if (strip_byte_counts_entry is LongArrayIFDEntry)
 					strip_byte_counts = (strip_byte_counts_entry as LongArrayIFDEntry).Values;
-				
+
 				if (strip_byte_counts == null)
 					return;
-				
+
 				directory.Remove (strip_offsets_tag);
 				directory.Add (strip_offsets_tag, new StripOffsetsIFDEntry (strip_offsets_tag, strip_offsets, strip_byte_counts, file));
 			}
 		}
-		
+
 		private IFDEntry ParseMakernote (ushort tag, ushort type, uint count, long base_offset, uint offset)
 		{
 			long makernote_offset = base_offset + offset;
 			IFDStructure ifd_structure = new IFDStructure ();
-			
+
 			// This is the minimum size a makernote should have
 			// The shortest header is PENTAX_HEADER (4)
 			// + IFD entry count (2)
@@ -770,17 +787,17 @@ namespace TagLib.IFD
 			// we use this number to read a header which is big used
 			// to identify the makernote types
 			int header_size = 18;
-			
+
 			if (file.Length < makernote_offset)
 			    throw new Exception ("offset to makernote is beyond file size");
-			
+
 			if (file.Length < makernote_offset + header_size)
 				throw new Exception ("data is to short to contain a maker note ifd");
-			
+
 			// read header
 			file.Seek (makernote_offset, SeekOrigin.Begin);
 			ByteVector header = file.ReadBlock (header_size);
-			
+
 			if (header.StartsWith (PANASONIC_HEADER)) {
 				IFDReader reader =
 					new IFDReader (file, is_bigendian, ifd_structure, base_offset, offset + 12, max_offset);
@@ -788,7 +805,7 @@ namespace TagLib.IFD
 				reader.ReadIFD (base_offset, offset + 12, max_offset);
 				return new MakernoteIFDEntry (tag, ifd_structure, MakernoteType.Panasonic, PANASONIC_HEADER, 12, true, null);
 			}
-			
+
 			if (header.StartsWith (PENTAX_HEADER)) {
 				IFDReader reader =
 					new IFDReader (file, is_bigendian, ifd_structure, base_offset, offset + 6, max_offset);
@@ -796,7 +813,7 @@ namespace TagLib.IFD
 				reader.ReadIFD (base_offset, offset + 6, max_offset);
 				return new MakernoteIFDEntry (tag, ifd_structure, MakernoteType.Pentax, header.Mid (0, 6), 6, true, null);
 			}
-			
+
 			if (header.StartsWith (OLYMPUS1_HEADER)) {
 				IFDReader reader =
 					new IFDReader (file, is_bigendian, ifd_structure, base_offset, offset + 8, max_offset);
@@ -804,7 +821,7 @@ namespace TagLib.IFD
 				reader.Read ();
 				return new MakernoteIFDEntry (tag, ifd_structure, MakernoteType.Olympus1, header.Mid (0, 8), 8, true, null);
 			}
-			
+
 			if (header.StartsWith (OLYMPUS2_HEADER)) {
 				IFDReader reader =
 					new IFDReader (file, is_bigendian, ifd_structure, makernote_offset, 12, count);
@@ -812,7 +829,7 @@ namespace TagLib.IFD
 				reader.Read ();
 				return new MakernoteIFDEntry (tag, ifd_structure, MakernoteType.Olympus2, header.Mid (0, 12), 12, false, null);
 			}
-			
+
 			if (header.StartsWith (SONY_HEADER)) {
 				IFDReader reader =
 					new IFDReader (file, is_bigendian, ifd_structure, base_offset, offset + 12, max_offset);
@@ -820,30 +837,30 @@ namespace TagLib.IFD
 				reader.ReadIFD (base_offset, offset + 12, max_offset);
 				return new MakernoteIFDEntry (tag, ifd_structure, MakernoteType.Sony, SONY_HEADER, 12, true, null);
 			}
-			
+
 			if (header.StartsWith (NIKON_HEADER)) {
-				
+
 				ByteVector endian_bytes = header.Mid (10, 2);
-				
+
 				if (endian_bytes.ToString () == "II" || endian_bytes.ToString () == "MM") {
-					
+
 					bool makernote_endian = endian_bytes.ToString ().Equals ("MM");
 					ushort magic = header.Mid (12, 2).ToUShort (is_bigendian);
-					
+
 					if (magic == 42) {
-						
+
 						// TODO: the max_offset value is not correct here. However, some nikon files have offsets to a sub-ifd
 						// (preview image) which are not stored with the other makernote data. Therfore, we keep the max_offset
 						// for now. (It is just an upper bound for some checks. So if it is too big, it doesn't matter)
 						var reader =
 							new Nikon3MakernoteReader (file, makernote_endian, ifd_structure, makernote_offset + 10, 8, max_offset - offset - 10);
-						
+
 						reader.Read ();
 						return new MakernoteIFDEntry (tag, ifd_structure, MakernoteType.Nikon3, header.Mid (0, 18), 8, false, makernote_endian);
 					}
 				}
 			}
-			
+
 			try {
 				IFDReader reader =
 					new IFDReader (file, is_bigendian, ifd_structure, base_offset, offset, max_offset);
@@ -895,7 +912,7 @@ namespace TagLib.IFD
 					file.Seek (base_offset + offset, SeekOrigin.Begin);
 					data = ReadUIntArray (count);
 				} else {
-					data = new uint [] { offset }; 
+					data = new uint [] { offset };
 				}
 
 				foreach (var sub_offset in data) {
@@ -907,11 +924,11 @@ namespace TagLib.IFD
 				}
 				return new SubIFDArrayEntry (tag, entries);
 			}
-			
-			
+
+
 			IFDStructure ifd_structure = new IFDStructure ();
 			IFDReader reader = CreateSubIFDReader (file, is_bigendian, ifd_structure, base_offset, offset, max_offset);
-			
+
 			// Sub IFDs are either identified by the IFD-type ...
 			if (type == (ushort) IFDEntryType.IFD) {
 				reader.Read ();
@@ -925,12 +942,12 @@ namespace TagLib.IFD
 			case (ushort) IFDEntryTag.GPSIFD:
 				reader.Read ();
 				return new SubIFDEntry (tag, (ushort) IFDEntryType.Long, 1, ifd_structure);
-			
+
 			default:
 				return null;
 			}
 		}
-		
+
 		/// <summary>
 		///    Create a reader for Sub IFD entries.
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/IFDRenderer.cs b/lib/TagLib/TagLib/src/TagLib/IFD/IFDRenderer.cs
index a50b0c4..c779745 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/IFDRenderer.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/IFDRenderer.cs
@@ -54,7 +54,7 @@ namespace TagLib.IFD
 		private readonly uint ifd_offset;
 
 #endregion
-		
+
 #region Constructors
 
 		/// <summary>
@@ -94,13 +94,13 @@ namespace TagLib.IFD
 
 			uint current_offset = ifd_offset;
 			var directories = structure.directories;
-			
+
 			for (int index = 0; index < directories.Count; index++) {
 				ByteVector data = RenderIFD (directories [index], current_offset, index == directories.Count - 1);
 				current_offset += (uint) data.Count;
 				ifd_data.Add (data);
 			}
-			
+
 			return ifd_data;
 		}
 
@@ -142,40 +142,40 @@ namespace TagLib.IFD
 					directory.Remove (tag);
 				}
 			}
-		
+
 			ushort entry_count = (ushort) directory.Count;
-			
+
 			// ifd_offset + size of entry_count + entries + next ifd offset
 			uint data_offset = ifd_offset + 2 + 12 * (uint) entry_count + 4;
-						
+
 			// store the entries itself
 			ByteVector entry_data = new ByteVector ();
-			
+
 			// store the data referenced by the entries
 			ByteVector offset_data = new ByteVector ();
-			
+
 			entry_data.Add (ByteVector.FromUShort (entry_count, is_bigendian));
-			
+
 			foreach (IFDEntry entry in directory.Values)
 				RenderEntryData (entry, entry_data, offset_data, data_offset);
-			
+
 			if (last)
 				entry_data.Add ("\0\0\0\0");
 			else
 				entry_data.Add (ByteVector.FromUInt ((uint) (data_offset + offset_data.Count), is_bigendian));
-						
+
 			if (data_offset - ifd_offset != entry_data.Count)
 				throw new Exception (String.Format ("Expected IFD data size was {0} but is {1}", data_offset - ifd_offset, entry_data.Count));
-				
+
 			entry_data.Add (offset_data);
-			
+
 			return entry_data;
 		}
 
 #endregion
 
 #region Protected Methods
-		
+
 		/// <summary>
 		///    Adds the data of a single entry to <paramref name="entry_data"/>.
 		/// </summary>
@@ -201,12 +201,12 @@ namespace TagLib.IFD
 			entry_data.Add (ByteVector.FromUInt (count, is_bigendian));
 			entry_data.Add (ByteVector.FromUInt (offset, is_bigendian));
 		}
-		
+
 		/// <summary>
 		///    Renders a complete entry together with the data. The entry itself
 		///    is stored in <paramref name="entry_data"/> and the data of the
 		///    entry is stored in <paramref name="offset_data"/> if it cannot be
-		///    stored in the offset. This method is called for every <see 
+		///    stored in the offset. This method is called for every <see
 		///    cref="IFDEntry"/> of this IFD and can be overwritten in subclasses
 		///    to provide special behavior.
 		/// </summary>
@@ -229,25 +229,25 @@ namespace TagLib.IFD
 		{
 			ushort tag = (ushort) entry.Tag;
 			uint offset = (uint) (data_offset + offset_data.Count);
-			
+
 			ushort type;
 			uint count;
 			ByteVector data = entry.Render (is_bigendian, offset, out type, out count);
-			
+
 			// store data in offset, if it is smaller than 4 byte
 			if (data.Count <= 4) {
-				
+
 				while (data.Count < 4)
 					data.Add ("\0");
-				
+
 				offset = data.ToUInt (is_bigendian);
 				data = null;
 			}
-			
+
 			// preserve word boundary of offsets
 			if (data != null && data.Count % 2 != 0)
 				data.Add ("\0");
-			
+
 			RenderEntry (entry_data, tag, type, count, offset);
 			offset_data.Add (data);
 		}
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/IFDStructure.cs b/lib/TagLib/TagLib/src/TagLib/IFD/IFDStructure.cs
index a637408..d27b8ae 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/IFDStructure.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/IFDStructure.cs
@@ -47,7 +47,7 @@ namespace TagLib.IFD
 		///    Contains the IFD directories in this tag.
 		/// </summary>
 		internal readonly List<IFDDirectory> directories = new List<IFDDirectory> ();
-		
+
 #endregion
 
 #region Public Properties
@@ -103,7 +103,7 @@ namespace TagLib.IFD
 				directories [directory].Remove (tag);
 			}
 		}
-		
+
 		/// <summary>
 		///    Removes a given tag from the IFD.
 		/// </summary>
@@ -118,7 +118,7 @@ namespace TagLib.IFD
 		{
 			RemoveTag (directory, (ushort) entry_tag);
 		}
-		
+
 		/// <summary>
 		///    Adds an <see cref="IFDEntry"/> to the IFD, if it is not already
 		///    contained in, it fails otherwise.
@@ -137,7 +137,7 @@ namespace TagLib.IFD
 
 			directories [directory].Add (entry.Tag, entry);
 		}
-		
+
 		/// <summary>
 		///    Adds an <see cref="IFDEntry"/> to the IFD. If it is already contained
 		///    in the IFD, it is overwritten.
@@ -153,10 +153,10 @@ namespace TagLib.IFD
 		{
 			if (ContainsTag (directory, entry.Tag))
 				RemoveTag (directory, entry.Tag);
-			
+
 			AddEntry (directory, entry);
 		}
-		
+
 		/// <summary>
 		///   Returns the <see cref="IFDEntry"/> belonging to the given tag.
 		/// </summary>
@@ -175,10 +175,10 @@ namespace TagLib.IFD
 		{
 			if (!ContainsTag (directory, tag))
 				return null;
-			
+
 			return directories [directory] [tag];
 		}
-		
+
 		/// <summary>
 		///   Returns the <see cref="IFDEntry"/> belonging to the given tag.
 		/// </summary>
@@ -197,9 +197,9 @@ namespace TagLib.IFD
 		{
 			return GetEntry (directory, (ushort) entry_tag);
 		}
-		
+
 		/// <summary>
-		///    Returns the <see cref="System.String"/> stored in the 
+		///    Returns the <see cref="System.String"/> stored in the
 		///    entry defined by <paramref name="entry_tag"/>.
 		/// </summary>
 		/// <param name="directory">
@@ -217,13 +217,13 @@ namespace TagLib.IFD
 		public string GetStringValue (int directory, ushort entry_tag)
 		{
 			var entry = GetEntry (directory, entry_tag);
-			
+
 			if (entry != null && entry is StringIFDEntry)
 				return (entry as StringIFDEntry).Value;
-			
+
 			return null;
 		}
-		
+
 		/// <summary>
 		///    Returns a <see cref="System.Nullable"/> containing the
 		///    <see cref="System.Byte"/> stored in the entry defined
@@ -245,13 +245,13 @@ namespace TagLib.IFD
 		public byte? GetByteValue (int directory, ushort entry_tag)
 		{
 			var entry = GetEntry (directory, entry_tag);
-			
+
 			if (entry != null && entry is ByteIFDEntry)
 				return (entry as ByteIFDEntry).Value;
-			
+
 			return null;
 		}
-		
+
 		/// <summary>
 		///    Returns a <see cref="System.Nullable"/> containing the
 		///    <see cref="System.UInt32"/> stored in the entry defined
@@ -273,16 +273,16 @@ namespace TagLib.IFD
 		public uint? GetLongValue (int directory, ushort entry_tag)
 		{
 			var entry = GetEntry (directory, entry_tag);
-			
+
 			if (entry is LongIFDEntry)
 				return (entry as LongIFDEntry).Value;
-				
+
 			if (entry is ShortIFDEntry)
 				return (entry as ShortIFDEntry).Value;
-			
+
 			return null;
 		}
-		
+
 		/// <summary>
 		///    Returns a <see cref="System.Nullable"/> containing the
 		///    <see cref="System.Double"/> stored in the entry defined
@@ -305,16 +305,16 @@ namespace TagLib.IFD
 		public double? GetRationalValue (int directory, ushort entry_tag)
 		{
 			var entry = GetEntry (directory, entry_tag);
-			
+
 			if (entry is RationalIFDEntry)
 				return (entry as RationalIFDEntry).Value;
-				
+
 			if (entry is SRationalIFDEntry)
 				return (entry as SRationalIFDEntry).Value;
-			
+
 			return null;
 		}
-		
+
 		/// <summary>
 		///    Returns a <see cref="System.Nullable"/> containing the
 		///    <see cref="System.DateTime"/> stored in the entry defined
@@ -338,17 +338,17 @@ namespace TagLib.IFD
 		public DateTime? GetDateTimeValue (int directory, ushort entry_tag)
 		{
 			string date_string = GetStringValue (directory, entry_tag);
-				
+
 			try {
 				DateTime date_time = DateTime.ParseExact (date_string,
 						DATETIME_FORMAT, System.Globalization.CultureInfo.InvariantCulture);
-				
+
 				return date_time;
 			} catch {}
-				
+
 			return null;
 		}
-		
+
 		/// <summary>
 		///    Adds a <see cref="Entries.StringIFDEntry"/> to the directory with tag
 		///    given by <paramref name="entry_tag"/> and value given by <paramref name="value"/>
@@ -370,7 +370,7 @@ namespace TagLib.IFD
 				RemoveTag (directory, entry_tag);
 				return;
 			}
-			
+
 			SetEntry (directory, new StringIFDEntry (entry_tag, value));
 		}
 
@@ -392,7 +392,7 @@ namespace TagLib.IFD
 		{
 			SetEntry (directory, new ByteIFDEntry (entry_tag, value));
 		}
-		
+
 		/// <summary>
 		///    Adds a <see cref="Entries.LongIFDEntry"/> to the directory with tag
 		///    given by <paramref name="entry_tag"/> and value given by <paramref name="value"/>
@@ -411,7 +411,7 @@ namespace TagLib.IFD
 		{
 			SetEntry (directory, new LongIFDEntry (entry_tag, value));
 		}
-		
+
 		/// <summary>
 		///    Adds a <see cref="Entries.RationalIFDEntry"/> to the directory with tag
 		///    given by <paramref name="entry_tag"/> and value given by <paramref name="value"/>
@@ -431,14 +431,14 @@ namespace TagLib.IFD
 		{
 			if (value < 0.0d || value > (double)UInt32.MaxValue)
 				throw new ArgumentException ("value");
-			
+
 			uint scale = (value >= 1.0d) ? 1 : UInt32.MaxValue;
-			
+
 			Rational rational = new Rational ((uint) (scale * value), scale);
-			
+
 			SetEntry (directory, new RationalIFDEntry (entry_tag, rational));
 		}
-		
+
 		/// <summary>
 		///    Adds a <see cref="Entries.StringIFDEntry"/> to the directory with tag
 		///    given by <paramref name="entry_tag"/> and value given by <paramref name="value"/>.
@@ -457,7 +457,7 @@ namespace TagLib.IFD
 		public void SetDateTimeValue (int directory, ushort entry_tag, DateTime value)
 		{
 			string date_string = value.ToString (DATETIME_FORMAT);
-				
+
 			SetStringValue (directory, entry_tag, date_string);
 		}
 
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/IFDTag.cs b/lib/TagLib/TagLib/src/TagLib/IFD/IFDTag.cs
index 9def929..fd46387 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/IFDTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/IFDTag.cs
@@ -56,7 +56,7 @@ namespace TagLib.IFD
 		///    directly, use the <see cref="GPSIFD"/> property instead.
 		/// </summary>
 		private IFDStructure gps_ifd = null;
-		
+
 #endregion
 
 #region Public Properties
@@ -65,7 +65,7 @@ namespace TagLib.IFD
 		///    The IFD structure referenced by the current instance
 		/// </value>
 		public IFDStructure Structure { get; private set; }
-		
+
 		/// <summary>
 		///    The Exif IFD. Will create one if the file doesn't alread have it.
 		/// </summary>
@@ -90,7 +90,7 @@ namespace TagLib.IFD
 				return exif_ifd;
 			}
 		}
-		
+
 		/// <summary>
 		///    The GPS IFD. Will create one if the file doesn't alread have it.
 		/// </summary>
@@ -125,13 +125,13 @@ namespace TagLib.IFD
 		public override TagTypes TagTypes {
 			get { return TagTypes.TiffIFD; }
 		}
-		
+
 #endregion
 
 #region Constructors
 
 		/// <summary>
-		///    Constructor. Creates an empty IFD tag. Can be populated manually, or via 
+		///    Constructor. Creates an empty IFD tag. Can be populated manually, or via
 		///    <see cref="IFDReader"/>.
 		/// </summary>
 		public IFDTag ()
@@ -140,9 +140,9 @@ namespace TagLib.IFD
 		}
 
 #endregion
-		
+
 #region Public Methods
-		
+
 		/// <summary>
 		///    Clears the values stored in the current instance.
 		/// </summary>
@@ -150,7 +150,7 @@ namespace TagLib.IFD
 		{
 			throw new NotImplementedException ();
 		}
-		
+
 #endregion
 
 #region Metadata fields
@@ -166,7 +166,7 @@ namespace TagLib.IFD
 		public override string Comment {
 			get {
 				var comment_entry = ExifIFD.GetEntry (0, (ushort) ExifEntryTag.UserComment) as UserCommentIFDEntry;
-				
+
 				if (comment_entry == null) {
 					var description = Structure.GetEntry (0, IFDEntryTag.ImageDescription) as StringIFDEntry;
 					return description == null ? null : description.Value;
@@ -180,7 +180,7 @@ namespace TagLib.IFD
 					Structure.RemoveTag (0, (ushort) IFDEntryTag.ImageDescription);
 					return;
 				}
-				
+
 				ExifIFD.SetEntry (0, new UserCommentIFDEntry ((ushort) ExifEntryTag.UserComment, value));
 				Structure.SetEntry (0, new StringIFDEntry ((ushort) IFDEntryTag.ImageDescription, value));
 			}
@@ -268,7 +268,7 @@ namespace TagLib.IFD
 					ExifIFD.RemoveTag (0, (ushort) ExifEntryTag.DateTimeOriginal);
 					return;
 				}
-				
+
 				ExifIFD.SetDateTimeValue (0, (ushort) ExifEntryTag.DateTimeOriginal, value.Value);
 			}
 		}
@@ -288,7 +288,7 @@ namespace TagLib.IFD
 					ExifIFD.RemoveTag (0, (ushort) ExifEntryTag.DateTimeDigitized);
 					return;
 				}
-				
+
 				ExifIFD.SetDateTimeValue (0, (ushort) ExifEntryTag.DateTimeDigitized, value.Value);
 			}
 		}
@@ -306,46 +306,46 @@ namespace TagLib.IFD
 				var gps_ifd = GPSIFD;
 				var degree_entry = gps_ifd.GetEntry (0, (ushort) GPSEntryTag.GPSLatitude) as RationalArrayIFDEntry;
 				var degree_ref = gps_ifd.GetStringValue (0, (ushort) GPSEntryTag.GPSLatitudeRef);
-				
+
 				if (degree_entry == null || degree_ref == null)
 					return null;
-				
+
 				Rational [] values  = degree_entry.Values;
 				if (values.Length != 3)
 					return null;
-				
+
 				double deg = values[0] + values[1] / 60.0d + values[2] / 3600.0d;
-				
+
 				if (degree_ref == "S")
 					deg *= -1.0d;
-				
+
 				return Math.Max (Math.Min (deg, 90.0d), -90.0d);
 			}
 			set {
 				var gps_ifd = GPSIFD;
-				
+
 				if (value == null) {
 					gps_ifd.RemoveTag (0, (ushort) GPSEntryTag.GPSLatitudeRef);
 					gps_ifd.RemoveTag (0, (ushort) GPSEntryTag.GPSLatitude);
 					return;
 				}
-				
+
 				double angle = value.Value;
-				
+
 				if (angle < -90.0d || angle > 90.0d)
 					throw new ArgumentException ("value");
-				
+
 				InitGpsDirectory ();
-				
+
 				gps_ifd.SetStringValue (0, (ushort) GPSEntryTag.GPSLatitudeRef, angle < 0 ? "S" : "N");
-				
+
 				var entry =
 					new RationalArrayIFDEntry ((ushort) GPSEntryTag.GPSLatitude,
 					                           DegreeToRationals (Math.Abs (angle)));
 				gps_ifd.SetEntry (0, entry);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the longitude of the GPS coordinate the current
 		///    image was taken.
@@ -359,46 +359,46 @@ namespace TagLib.IFD
 				var gps_ifd = GPSIFD;
 				var degree_entry = gps_ifd.GetEntry (0, (ushort) GPSEntryTag.GPSLongitude) as RationalArrayIFDEntry;
 				var degree_ref = gps_ifd.GetStringValue (0, (ushort) GPSEntryTag.GPSLongitudeRef);
-				
+
 				if (degree_entry == null || degree_ref == null)
 					return null;
-				
+
 				Rational [] values  = degree_entry.Values;
 				if (values.Length != 3)
 					return null;
-				
+
 				double deg = values[0] + values[1] / 60.0d + values[2] / 3600.0d;
-				
+
 				if (degree_ref == "W")
 					deg *= -1.0d;
-				
+
 				return Math.Max (Math.Min (deg, 180.0d), -180.0d);
 			}
 			set {
 				var gps_ifd = GPSIFD;
-				
+
 				if (value == null) {
 					gps_ifd.RemoveTag (0, (ushort) GPSEntryTag.GPSLongitudeRef);
 					gps_ifd.RemoveTag (0, (ushort) GPSEntryTag.GPSLongitude);
 					return;
 				}
-				
+
 				double angle = value.Value;
-				
+
 				if (angle < -180.0d || angle > 180.0d)
 					throw new ArgumentException ("value");
-				
+
 				InitGpsDirectory ();
-				
+
 				gps_ifd.SetStringValue (0, (ushort) GPSEntryTag.GPSLongitudeRef, angle < 0 ? "W" : "E");
-				
+
 				var entry =
 					new RationalArrayIFDEntry ((ushort) GPSEntryTag.GPSLongitude,
 					                           DegreeToRationals (Math.Abs (angle)));
 				gps_ifd.SetEntry (0, entry);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the altitude of the GPS coordinate the current
 		///    image was taken. The unit is meter.
@@ -412,33 +412,33 @@ namespace TagLib.IFD
 				var gps_ifd = GPSIFD;
 				var altitude = gps_ifd.GetRationalValue (0, (ushort) GPSEntryTag.GPSAltitude);
 				var ref_entry = gps_ifd.GetByteValue (0, (ushort) GPSEntryTag.GPSAltitudeRef);
-				
+
 				if (altitude == null || ref_entry == null)
 					return null;
 
 				if (ref_entry.Value == 1)
 					altitude *= -1.0d;
-				
+
 				return altitude;
 			}
 			set {
 				var gps_ifd = GPSIFD;
-				
+
 				if (value == null) {
 					gps_ifd.RemoveTag (0, (ushort) GPSEntryTag.GPSAltitudeRef);
 					gps_ifd.RemoveTag (0, (ushort) GPSEntryTag.GPSAltitude);
 					return;
 				}
-				
+
 				double altitude = value.Value;
-				
+
 				InitGpsDirectory ();
-				
+
 				gps_ifd.SetByteValue (0, (ushort) GPSEntryTag.GPSAltitudeRef, (byte)(altitude < 0 ? 1 : 0));
 				gps_ifd.SetRationalValue (0, (ushort) GPSEntryTag.GPSAltitude, Math.Abs (altitude));
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the exposure time the image, the current instance belongs
 		///    to, was taken with.
@@ -454,7 +454,7 @@ namespace TagLib.IFD
 				ExifIFD.SetRationalValue (0, (ushort) ExifEntryTag.ExposureTime, value.HasValue ? (double) value : 0);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the FNumber the image, the current instance belongs
 		///    to, was taken with.
@@ -470,7 +470,7 @@ namespace TagLib.IFD
 				ExifIFD.SetRationalValue (0, (ushort) ExifEntryTag.FNumber, value.HasValue ? (double) value : 0);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the ISO speed the image, the current instance belongs
 		///    to, was taken with.
@@ -486,7 +486,7 @@ namespace TagLib.IFD
 				ExifIFD.SetLongValue (0, (ushort) ExifEntryTag.ISOSpeedRatings, value.HasValue ? (uint) value : 0);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the focal length the image, the current instance belongs
 		///    to, was taken with.
@@ -502,7 +502,7 @@ namespace TagLib.IFD
 				ExifIFD.SetRationalValue (0, (ushort) ExifEntryTag.FocalLength, value.HasValue ? (double) value : 0);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the focal length the image, the current instance belongs
 		///    to, was taken with, assuming a 35mm film camera.
@@ -538,18 +538,18 @@ namespace TagLib.IFD
 				if (orientation.HasValue)
 					return (ImageOrientation) orientation;
 
-				return ImageOrientation.TopLeft;
+				return ImageOrientation.None;
 			}
 			set {
 				if ((uint) value < 1U || (uint) value > 8U) {
 					Structure.RemoveTag (0, (ushort) IFDEntryTag.Orientation);
 					return;
 				}
-				
+
 				Structure.SetLongValue (0, (ushort) IFDEntryTag.Orientation, (uint) value);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the manufacture of the recording equipment the image, the
 		///    current instance belongs to, was taken with.
@@ -565,7 +565,7 @@ namespace TagLib.IFD
 				Structure.SetStringValue (0, (ushort) IFDEntryTag.Make, value);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the model name of the recording equipment the image, the
 		///    current instance belongs to, was taken with.
@@ -585,7 +585,7 @@ namespace TagLib.IFD
 #endregion
 
 #region Private Methods
-		
+
 		/// <summary>
 		///    Initilazies the GPS IFD with some basic entries.
 		/// </summary>
@@ -594,7 +594,7 @@ namespace TagLib.IFD
 			GPSIFD.SetStringValue (0, (ushort) GPSEntryTag.GPSVersionID, "2 0 0 0");
 			GPSIFD.SetStringValue (0, (ushort) GPSEntryTag.GPSMapDatum, "WGS-84");
 		}
-		
+
 		/// <summary>
 		///    Converts a given (positive) angle value to three rationals like they
 		///    are used to store an angle for GPS data.
@@ -611,21 +611,21 @@ namespace TagLib.IFD
 		{
 			if (angle < 0.0 || angle > 180.0)
 				throw new ArgumentException ("angle");
-			
+
 			uint deg = (uint) Math.Floor (angle);
 			uint min = (uint) ((angle - Math.Floor (angle)) * 60.0);
 			uint sec = (uint) ((angle - Math.Floor (angle) - (min / 60.0))  * 360000000.0);
-				
+
 			Rational[] rationals = new Rational [] {
 				new Rational (deg, 1),
 				new Rational (min, 1),
 				new Rational (sec, 100000)
 			};
-				
+
 			return rationals;
 		}
-		
+
 #endregion
-		
+
 	}
 }
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Makernotes/Nikon3MakernoteReader.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Makernotes/Nikon3MakernoteReader.cs
index d1e9654..bd26e1b 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Makernotes/Nikon3MakernoteReader.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Makernotes/Nikon3MakernoteReader.cs
@@ -53,7 +53,7 @@ namespace TagLib.IFD.Makernotes
 		///     name="base_offset"/> must contain the beginning of the segment.
 		/// </param>
 		/// <param name="ifd_offset">
-		///     A <see cref="System.UInt32"/> value with the beginning of the IFD relative to 
+		///     A <see cref="System.UInt32"/> value with the beginning of the IFD relative to
 		///     <paramref name="base_offset"/>.
 		/// </param>
 		/// <param name="max_offset">
@@ -98,7 +98,7 @@ namespace TagLib.IFD.Makernotes
 				// SubIFD with Preview Image
 				// The entry itself is usually a long
 				// TODO: handle JPEGInterchangeFormat and JPEGInterchangeFormatLength correctly
-				
+
 				// The preview field contains a long with an offset to an IFD
 				// that contains the preview image. We need to be careful
 				// though: this IFD does not contain a valid next-offset
@@ -107,10 +107,10 @@ namespace TagLib.IFD.Makernotes
 				// starting after the IFD entries).
 
 				type = (ushort) IFDEntryType.IFD;
-				
+
 				IFDStructure ifd_structure = new IFDStructure ();
 				IFDReader reader = CreateSubIFDReader (file, is_bigendian, ifd_structure, base_offset, offset, max_offset);
-			
+
 				reader.Read (1);
 				return new SubIFDEntry (tag, type, (uint) ifd_structure.Directories.Length, ifd_structure);
 			}
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/ExifEntryTag.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/ExifEntryTag.cs
index 0d3304d..7b394e0 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/ExifEntryTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/ExifEntryTag.cs
@@ -38,344 +38,344 @@ namespace TagLib.IFD.Tags
 		///     (Hex: 0x828D)
 		/// </summary>
 		CFARepeatPatternDim                                = 33421,
-		
+
 		/// <summary>
 		///     Contains two values representing the minimum rows and columns
 		///     to define the repeating patterns of the color filter array.
 		///     (Hex: 0x828E)
 		/// </summary>
 		CFAPattern                                         = 33422,
-		
+
 		/// <summary>
 		///     Exposure time, given in seconds. (Hex: 0x829A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/exposuretime.html
 		/// </summary>
 		ExposureTime                                       = 33434,
-		
+
 		/// <summary>
 		///     The F number. (Hex: 0x829D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/fnumber.html
 		/// </summary>
 		FNumber                                            = 33437,
-		
+
 		/// <summary>
 		///     The class of the program used by the camera to set exposure when the picture is taken. (Hex: 0x8822)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/exposureprogram.html
 		/// </summary>
 		ExposureProgram                                    = 34850,
-		
+
 		/// <summary>
 		///     Indicates the spectral sensitivity of each channel of the camera used. (Hex: 0x8824)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/spectralsensitivity.html
 		/// </summary>
 		SpectralSensitivity                                = 34852,
-		
+
 		/// <summary>
 		///     Indicates the ISO Speed and ISO Latitude of the camera or input device as specified in ISO 12232. (Hex: 0x8827)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/isospeedratings.html
 		/// </summary>
 		ISOSpeedRatings                                    = 34855,
-		
+
 		/// <summary>
 		///     Indicates the Opto-Electric Conversion Function (OECF) specified in ISO 14524. (Hex: 0x8828)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/oecf.html
 		/// </summary>
 		OECF                                               = 34856,
-		
+
 		/// <summary>
 		///     The version of the supported Exif standard. (Hex: 0x9000)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/exifversion.html
 		/// </summary>
 		ExifVersion                                        = 36864,
-		
+
 		/// <summary>
 		///     The date and time when the original image data was generated. (Hex: 0x9003)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/datetimeoriginal.html
 		/// </summary>
 		DateTimeOriginal                                   = 36867,
-		
+
 		/// <summary>
 		///     The date and time when the image was stored as digital data. (Hex: 0x9004)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/datetimedigitized.html
 		/// </summary>
 		DateTimeDigitized                                  = 36868,
-		
+
 		/// <summary>
 		///     Specific to compressed data; specifies the channels and complements PhotometricInterpretation (Hex: 0x9101)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/componentsconfiguration.html
 		/// </summary>
 		ComponentsConfiguration                            = 37121,
-		
+
 		/// <summary>
 		///     Specific to compressed data; states the compressed bits per pixel. (Hex: 0x9102)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/compressedbitsperpixel.html
 		/// </summary>
 		CompressedBitsPerPixel                             = 37122,
-		
+
 		/// <summary>
 		///     Shutter speed. (Hex: 0x9201)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/shutterspeedvalue.html
 		/// </summary>
 		ShutterSpeedValue                                  = 37377,
-		
+
 		/// <summary>
 		///     The lens aperture. (Hex: 0x9202)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/aperturevalue.html
 		/// </summary>
 		ApertureValue                                      = 37378,
-		
+
 		/// <summary>
 		///     The value of brightness. (Hex: 0x9203)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/brightnessvalue.html
 		/// </summary>
 		BrightnessValue                                    = 37379,
-		
+
 		/// <summary>
 		///     The exposure bias. (Hex: 0x9204)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/exposurebiasvalue.html
 		/// </summary>
 		ExposureBiasValue                                  = 37380,
-		
+
 		/// <summary>
 		///     The smallest F number of the lens. (Hex: 0x9205)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/maxaperturevalue.html
 		/// </summary>
 		MaxApertureValue                                   = 37381,
-		
+
 		/// <summary>
 		///     The distance to the subject, given in meters. (Hex: 0x9206)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/subjectdistance.html
 		/// </summary>
 		SubjectDistance                                    = 37382,
-		
+
 		/// <summary>
 		///     The metering mode. (Hex: 0x9207)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/meteringmode.html
 		/// </summary>
 		MeteringMode                                       = 37383,
-		
+
 		/// <summary>
 		///     The kind of light source. (Hex: 0x9208)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/lightsource.html
 		/// </summary>
 		LightSource                                        = 37384,
-		
+
 		/// <summary>
 		///     Indicates the status of flash when the image was shot. (Hex: 0x9209)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/flash.html
 		/// </summary>
 		Flash                                              = 37385,
-		
+
 		/// <summary>
 		///     The actual focal length of the lens, in mm. (Hex: 0x920A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/focallength.html
 		/// </summary>
 		FocalLength                                        = 37386,
-		
+
 		/// <summary>
 		///     Indicates the location and area of the main subject in the overall scene. (Hex: 0x9214)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/subjectarea.html
 		/// </summary>
 		SubjectArea                                        = 37396,
-		
+
 		/// <summary>
 		///     Manufacturer specific information. (Hex: 0x927C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/makernote.html
 		/// </summary>
 		MakerNote                                          = 37500,
-		
+
 		/// <summary>
 		///     Keywords or comments on the image; complements ImageDescription. (Hex: 0x9286)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/usercomment.html
 		/// </summary>
 		UserComment                                        = 37510,
-		
+
 		/// <summary>
 		///     A tag used to record fractions of seconds for the DateTime tag. (Hex: 0x9290)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/subsectime.html
 		/// </summary>
 		SubsecTime                                         = 37520,
-		
+
 		/// <summary>
 		///     A tag used to record fractions of seconds for the DateTimeOriginal tag. (Hex: 0x9291)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/subsectimeoriginal.html
 		/// </summary>
 		SubsecTimeOriginal                                 = 37521,
-		
+
 		/// <summary>
 		///     A tag used to record fractions of seconds for the DateTimeDigitized tag. (Hex: 0x9292)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/subsectimedigitized.html
 		/// </summary>
 		SubsecTimeDigitized                                = 37522,
-		
+
 		/// <summary>
 		///     The Flashpix format version supported by a FPXR file. (Hex: 0xA000)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/flashpixversion.html
 		/// </summary>
 		FlashpixVersion                                    = 40960,
-		
+
 		/// <summary>
 		///     The color space information tag is always recorded as the color space specifier. (Hex: 0xA001)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/colorspace.html
 		/// </summary>
 		ColorSpace                                         = 40961,
-		
+
 		/// <summary>
 		///     Specific to compressed data; the valid width of the meaningful image. (Hex: 0xA002)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/pixelxdimension.html
 		/// </summary>
 		PixelXDimension                                    = 40962,
-		
+
 		/// <summary>
 		///     Specific to compressed data; the valid height of the meaningful image. (Hex: 0xA003)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/pixelydimension.html
 		/// </summary>
 		PixelYDimension                                    = 40963,
-		
+
 		/// <summary>
 		///     Used to record the name of an audio file related to the image data. (Hex: 0xA004)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/relatedsoundfile.html
 		/// </summary>
 		RelatedSoundFile                                   = 40964,
-		
+
 		/// <summary>
 		///     Indicates the strobe energy at the time the image is captured, as measured in Beam Candle Power Seconds (Hex: 0xA20B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/flashenergy.html
 		/// </summary>
 		FlashEnergy                                        = 41483,
-		
+
 		/// <summary>
 		///     Records the camera or input device spatial frequency table and SFR values in the direction of image width, image height, and diagonal direction, as specified in ISO 12233. (Hex: 0xA20C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/spatialfrequencyresponse.html
 		/// </summary>
 		SpatialFrequencyResponse                           = 41484,
-		
+
 		/// <summary>
 		///     Indicates the number of pixels in the image width (X) direction per FocalPlaneResolutionUnit on the camera focal plane. (Hex: 0xA20E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/focalplanexresolution.html
 		/// </summary>
 		FocalPlaneXResolution                              = 41486,
-		
+
 		/// <summary>
 		///     Indicates the number of pixels in the image height (Y) direction per FocalPlaneResolutionUnit on the camera focal plane. (Hex: 0xA20F)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/focalplaneyresolution.html
 		/// </summary>
 		FocalPlaneYResolution                              = 41487,
-		
+
 		/// <summary>
 		///     Indicates the unit for measuring FocalPlaneXResolution and FocalPlaneYResolution. (Hex: 0xA210)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/focalplaneresolutionunit.html
 		/// </summary>
 		FocalPlaneResolutionUnit                           = 41488,
-		
+
 		/// <summary>
 		///     Indicates the location of the main subject in the scene. (Hex: 0xA214)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/subjectlocation.html
 		/// </summary>
 		SubjectLocation                                    = 41492,
-		
+
 		/// <summary>
 		///     Indicates the exposure index selected on the camera or input device at the time the image is captured. (Hex: 0xA215)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/exposureindex.html
 		/// </summary>
 		ExposureIndex                                      = 41493,
-		
+
 		/// <summary>
 		///     Indicates the image sensor type on the camera or input device. (Hex: 0xA217)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/sensingmethod.html
 		/// </summary>
 		SensingMethod                                      = 41495,
-		
+
 		/// <summary>
 		///     Indicates the image source. (Hex: 0xA300)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/filesource.html
 		/// </summary>
 		FileSource                                         = 41728,
-		
+
 		/// <summary>
 		///     Indicates the type of scene. (Hex: 0xA301)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/scenetype.html
 		/// </summary>
 		SceneType                                          = 41729,
-		
+
 		/// <summary>
 		///     Indicates the color filter array (CFA) geometric pattern of the image sensor when a one-chip color area sensor is used. (Hex: 0xA302)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/cfapattern.html
 		/// </summary>
 		CFAPattern2                                        = 41730,
-		
+
 		/// <summary>
 		///     Indicates the use of special processing on image data, such as rendering geared to output. (Hex: 0xA401)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/customrendered.html
 		/// </summary>
 		CustomRendered                                     = 41985,
-		
+
 		/// <summary>
 		///     Indicates the exposure mode set when the image was shot. (Hex: 0xA402)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/exposuremode.html
 		/// </summary>
 		ExposureMode                                       = 41986,
-		
+
 		/// <summary>
 		///     Indicates the white balance mode set when the image was shot. (Hex: 0xA403)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/whitebalance.html
 		/// </summary>
 		WhiteBalance                                       = 41987,
-		
+
 		/// <summary>
 		///     Indicates the digital zoom ratio when the image was shot. (Hex: 0xA404)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/digitalzoomratio.html
 		/// </summary>
 		DigitalZoomRatio                                   = 41988,
-		
+
 		/// <summary>
 		///     Indicates the equivalent focal length assuming a 35mm film camera, in mm. (Hex: 0xA405)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/focallengthin35mmfilm.html
 		/// </summary>
 		FocalLengthIn35mmFilm                              = 41989,
-		
+
 		/// <summary>
 		///     Indicates the type of scene that was shot. (Hex: 0xA406)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/scenecapturetype.html
 		/// </summary>
 		SceneCaptureType                                   = 41990,
-		
+
 		/// <summary>
 		///     Indicates the degree of overall image gain adjustment. (Hex: 0xA407)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/gaincontrol.html
 		/// </summary>
 		GainControl                                        = 41991,
-		
+
 		/// <summary>
 		///     Indicates the direction of contrast processing applied by the camera when the image was shot. (Hex: 0xA408)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/contrast.html
 		/// </summary>
 		Contrast                                           = 41992,
-		
+
 		/// <summary>
 		///     Indicates the direction of saturation processing applied by the camera when the image was shot. (Hex: 0xA409)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/saturation.html
 		/// </summary>
 		Saturation                                         = 41993,
-		
+
 		/// <summary>
 		///     Indicates the direction of sharpness processing applied by the camera when the image was shot. (Hex: 0xA40A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/sharpness.html
 		/// </summary>
 		Sharpness                                          = 41994,
-		
+
 		/// <summary>
 		///     This tag indicates information on the picture-taking conditions of a particular camera model. (Hex: 0xA40B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/devicesettingdescription.html
 		/// </summary>
 		DeviceSettingDescription                           = 41995,
-		
+
 		/// <summary>
 		///     Indicates the distance to the subject. (Hex: 0xA40C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/subjectdistancerange.html
 		/// </summary>
 		SubjectDistanceRange                               = 41996,
-		
+
 		/// <summary>
 		///     Indicates an identifier assigned uniquely to each image. (Hex: 0xA420)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/imageuniqueid.html
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/GPSEntryTag.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/GPSEntryTag.cs
index 8eabe90..80d5eda 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/GPSEntryTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/GPSEntryTag.cs
@@ -32,187 +32,187 @@ namespace TagLib.IFD.Tags
 	/// </summary>
 	public enum GPSEntryTag : ushort
 	{
-		
+
 		/// <summary>
 		///     Indicates the version of GPSInfoIFD. (Hex: 0x0000)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsversionid.html
 		/// </summary>
 		GPSVersionID                                       = 0,
-		
+
 		/// <summary>
 		///     Indicates whether the latitude is north or south latitude. (Hex: 0x0001)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpslatituderef.html
 		/// </summary>
 		GPSLatitudeRef                                     = 1,
-		
+
 		/// <summary>
 		///     Indicates the latitude. (Hex: 0x0002)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpslatitude.html
 		/// </summary>
 		GPSLatitude                                        = 2,
-		
+
 		/// <summary>
 		///     Indicates whether the longitude is east or west longitude. (Hex: 0x0003)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpslongituderef.html
 		/// </summary>
 		GPSLongitudeRef                                    = 3,
-		
+
 		/// <summary>
 		///     Indicates the longitude. (Hex: 0x0004)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpslongitude.html
 		/// </summary>
 		GPSLongitude                                       = 4,
-		
+
 		/// <summary>
 		///     Indicates the altitude used as the reference altitude. (Hex: 0x0005)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsaltituderef.html
 		/// </summary>
 		GPSAltitudeRef                                     = 5,
-		
+
 		/// <summary>
 		///     Indicates the altitude based on the reference in GPSAltitudeRef. (Hex: 0x0006)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsaltitude.html
 		/// </summary>
 		GPSAltitude                                        = 6,
-		
+
 		/// <summary>
 		///     Indicates the time as UTC (Coordinated Universal Time). (Hex: 0x0007)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpstimestamp.html
 		/// </summary>
 		GPSTimeStamp                                       = 7,
-		
+
 		/// <summary>
 		///     Indicates the GPS satellites used for measurements. (Hex: 0x0008)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpssatellites.html
 		/// </summary>
 		GPSSatellites                                      = 8,
-		
+
 		/// <summary>
 		///     Indicates the status of the GPS receiver when the image is recorded. (Hex: 0x0009)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsstatus.html
 		/// </summary>
 		GPSStatus                                          = 9,
-		
+
 		/// <summary>
 		///     Indicates the GPS measurement mode. (Hex: 0x000A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsmeasuremode.html
 		/// </summary>
 		GPSMeasureMode                                     = 10,
-		
+
 		/// <summary>
 		///     Indicates the GPS DOP (data degree of precision). (Hex: 0x000B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdop.html
 		/// </summary>
 		GPSDOP                                             = 11,
-		
+
 		/// <summary>
 		///     Indicates the unit used to express the GPS receiver speed of movement. (Hex: 0x000C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsspeedref.html
 		/// </summary>
 		GPSSpeedRef                                        = 12,
-		
+
 		/// <summary>
 		///     Indicates the speed of GPS receiver movement. (Hex: 0x000D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsspeed.html
 		/// </summary>
 		GPSSpeed                                           = 13,
-		
+
 		/// <summary>
 		///     Indicates the reference for giving the direction of GPS receiver movement. (Hex: 0x000E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpstrackref.html
 		/// </summary>
 		GPSTrackRef                                        = 14,
-		
+
 		/// <summary>
 		///     Indicates the direction of GPS receiver movement. (Hex: 0x000F)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpstrack.html
 		/// </summary>
 		GPSTrack                                           = 15,
-		
+
 		/// <summary>
 		///     Indicates the reference for giving the direction of the image when it is captured. (Hex: 0x0010)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsimgdirectionref.html
 		/// </summary>
 		GPSImgDirectionRef                                 = 16,
-		
+
 		/// <summary>
 		///     Indicates the direction of the image when it was captured. (Hex: 0x0011)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsimgdirection.html
 		/// </summary>
 		GPSImgDirection                                    = 17,
-		
+
 		/// <summary>
 		///     Indicates the geodetic survey data used by the GPS receiver. (Hex: 0x0012)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsmapdatum.html
 		/// </summary>
 		GPSMapDatum                                        = 18,
-		
+
 		/// <summary>
 		///     Indicates whether the latitude of the destination point is north or south latitude. (Hex: 0x0013)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdestlatituderef.html
 		/// </summary>
 		GPSDestLatitudeRef                                 = 19,
-		
+
 		/// <summary>
 		///     Indicates the latitude of the destination point. (Hex: 0x0014)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdestlatitude.html
 		/// </summary>
 		GPSDestLatitude                                    = 20,
-		
+
 		/// <summary>
 		///     Indicates whether the longitude of the destination point is east or west longitude. (Hex: 0x0015)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdestlongituderef.html
 		/// </summary>
 		GPSDestLongitudeRef                                = 21,
-		
+
 		/// <summary>
 		///     Indicates the longitude of the destination point. (Hex: 0x0016)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdestlongitude.html
 		/// </summary>
 		GPSDestLongitude                                   = 22,
-		
+
 		/// <summary>
 		///     Indicates the reference used for giving the bearing to the destination point. (Hex: 0x0017)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdestbearingref.html
 		/// </summary>
 		GPSDestBearingRef                                  = 23,
-		
+
 		/// <summary>
 		///     Indicates the bearing to the destination point. (Hex: 0x0018)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdestbearing.html
 		/// </summary>
 		GPSDestBearing                                     = 24,
-		
+
 		/// <summary>
 		///     Indicates the unit used to express the distance to the destination point. (Hex: 0x0019)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdestdistanceref.html
 		/// </summary>
 		GPSDestDistanceRef                                 = 25,
-		
+
 		/// <summary>
 		///     Indicates the distance to the destination point. (Hex: 0x001A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdestdistance.html
 		/// </summary>
 		GPSDestDistance                                    = 26,
-		
+
 		/// <summary>
 		///     A character string recording the name of the method used for location finding. (Hex: 0x001B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsprocessingmethod.html
 		/// </summary>
 		GPSProcessingMethod                                = 27,
-		
+
 		/// <summary>
 		///     A character string recording the name of the GPS area. (Hex: 0x001C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsareainformation.html
 		/// </summary>
 		GPSAreaInformation                                 = 28,
-		
+
 		/// <summary>
 		///     A character string recording date and time information relative to UTC (Coordinated Universal Time). (Hex: 0x001D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdatestamp.html
 		/// </summary>
 		GPSDateStamp                                       = 29,
-		
+
 		/// <summary>
 		///     Indicates whether differential correction is applied to the GPS receiver. (Hex: 0x001E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsdifferential.html
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/IFDEntryTag.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/IFDEntryTag.cs
index bbf64a0..5e34284 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/IFDEntryTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/IFDEntryTag.cs
@@ -34,565 +34,565 @@ namespace TagLib.IFD.Tags
 	/// </summary>
 	public enum IFDEntryTag : ushort
 	{
-		
+
 		/// <summary>
 		///     A general indication of the kind of data contained in this subfile. (Hex: 0x00FE)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/newsubfiletype.html
 		/// </summary>
 		NewSubfileType                                     = 254,
-		
+
 		/// <summary>
 		///     A general indication of the kind of data contained in this subfile. (Hex: 0x00FF)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/subfiletype.html
 		/// </summary>
 		SubfileType                                        = 255,
-		
+
 		/// <summary>
 		///     The number of columns in the image, i.e., the number of pixels per row. (Hex: 0x0100)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/imagewidth.html
 		/// </summary>
 		ImageWidth                                         = 256,
-		
+
 		/// <summary>
 		///     The number of rows of pixels in the image. (Hex: 0x0101)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/imagelength.html
 		/// </summary>
 		ImageLength                                        = 257,
-		
+
 		/// <summary>
 		///     Number of bits per component. (Hex: 0x0102)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/bitspersample.html
 		/// </summary>
 		BitsPerSample                                      = 258,
-		
+
 		/// <summary>
 		///     Compression scheme used on the image data. (Hex: 0x0103)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/compression.html
 		/// </summary>
 		Compression                                        = 259,
-		
+
 		/// <summary>
 		///     The color space of the image data. (Hex: 0x0106)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/photometricinterpretation.html
 		/// </summary>
 		PhotometricInterpretation                          = 262,
-		
+
 		/// <summary>
 		///     For black and white TIFF files that represent shades of gray, the technique used to convert from gray to black and white pixels. (Hex: 0x0107)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/threshholding.html
 		/// </summary>
 		Threshholding                                      = 263,
-		
+
 		/// <summary>
 		///     The width of the dithering or halftoning matrix used to create a dithered or halftoned bilevel file. (Hex: 0x0108)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/cellwidth.html
 		/// </summary>
 		CellWidth                                          = 264,
-		
+
 		/// <summary>
 		///     The length of the dithering or halftoning matrix used to create a dithered or halftoned bilevel file. (Hex: 0x0109)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/celllength.html
 		/// </summary>
 		CellLength                                         = 265,
-		
+
 		/// <summary>
 		///     The logical order of bits within a byte. (Hex: 0x010A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/fillorder.html
 		/// </summary>
 		FillOrder                                          = 266,
-		
+
 		/// <summary>
 		///     The name of the document from which this image was scanned. (Hex: 0x010D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/documentname.html
 		/// </summary>
 		DocumentName                                       = 269,
-		
+
 		/// <summary>
 		///     A string that describes the subject of the image. (Hex: 0x010E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/imagedescription.html
 		/// </summary>
 		ImageDescription                                   = 270,
-		
+
 		/// <summary>
 		///     The scanner manufacturer. (Hex: 0x010F)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/make.html
 		/// </summary>
 		Make                                               = 271,
-		
+
 		/// <summary>
 		///     The scanner model name or number. (Hex: 0x0110)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/model.html
 		/// </summary>
 		Model                                              = 272,
-		
+
 		/// <summary>
 		///     For each strip, the byte offset of that strip. (Hex: 0x0111)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/stripoffsets.html
 		/// </summary>
 		StripOffsets                                       = 273,
-		
+
 		/// <summary>
 		///     The orientation of the image with respect to the rows and columns. (Hex: 0x0112)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/orientation.html
 		/// </summary>
 		Orientation                                        = 274,
-		
+
 		/// <summary>
 		///     The number of components per pixel. (Hex: 0x0115)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/samplesperpixel.html
 		/// </summary>
 		SamplesPerPixel                                    = 277,
-		
+
 		/// <summary>
 		///     The number of rows per strip. (Hex: 0x0116)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/rowsperstrip.html
 		/// </summary>
 		RowsPerStrip                                       = 278,
-		
+
 		/// <summary>
 		///     For each strip, the number of bytes in the strip after compression. (Hex: 0x0117)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/stripbytecounts.html
 		/// </summary>
 		StripByteCounts                                    = 279,
-		
+
 		/// <summary>
 		///     The minimum component value used. (Hex: 0x0118)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/minsamplevalue.html
 		/// </summary>
 		MinSampleValue                                     = 280,
-		
+
 		/// <summary>
 		///     The maximum component value used. (Hex: 0x0119)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/maxsamplevalue.html
 		/// </summary>
 		MaxSampleValue                                     = 281,
-		
+
 		/// <summary>
 		///     The number of pixels per ResolutionUnit in the ImageWidth direction. (Hex: 0x011A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/xresolution.html
 		/// </summary>
 		XResolution                                        = 282,
-		
+
 		/// <summary>
 		///     The number of pixels per ResolutionUnit in the ImageLength direction. (Hex: 0x011B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/yresolution.html
 		/// </summary>
 		YResolution                                        = 283,
-		
+
 		/// <summary>
 		///     How the components of each pixel are stored. (Hex: 0x011C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/planarconfiguration.html
 		/// </summary>
 		PlanarConfiguration                                = 284,
-		
+
 		/// <summary>
 		///     The name of the page from which this image was scanned. (Hex: 0x011D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/pagename.html
 		/// </summary>
 		PageName                                           = 285,
-		
+
 		/// <summary>
 		///     X position of the image. (Hex: 0x011E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/xposition.html
 		/// </summary>
 		XPosition                                          = 286,
-		
+
 		/// <summary>
 		///     Y position of the image. (Hex: 0x011F)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/yposition.html
 		/// </summary>
 		YPosition                                          = 287,
-		
+
 		/// <summary>
 		///     For each string of contiguous unused bytes in a TIFF file, the byte offset of the string. (Hex: 0x0120)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/freeoffsets.html
 		/// </summary>
 		FreeOffsets                                        = 288,
-		
+
 		/// <summary>
 		///     For each string of contiguous unused bytes in a TIFF file, the number of bytes in the string. (Hex: 0x0121)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/freebytecounts.html
 		/// </summary>
 		FreeByteCounts                                     = 289,
-		
+
 		/// <summary>
 		///     The precision of the information contained in the GrayResponseCurve. (Hex: 0x0122)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/grayresponseunit.html
 		/// </summary>
 		GrayResponseUnit                                   = 290,
-		
+
 		/// <summary>
 		///     For grayscale data, the optical density of each possible pixel value. (Hex: 0x0123)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/grayresponsecurve.html
 		/// </summary>
 		GrayResponseCurve                                  = 291,
-		
+
 		/// <summary>
 		///     Options for Group 3 Fax compression (Hex: 0x0124)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/t4options.html
 		/// </summary>
 		T4Options                                          = 292,
-		
+
 		/// <summary>
 		///     Options for Group 4 Fax compression (Hex: 0x0125)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/t6options.html
 		/// </summary>
 		T6Options                                          = 293,
-		
+
 		/// <summary>
 		///     The unit of measurement for XResolution and YResolution. (Hex: 0x0128)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/resolutionunit.html
 		/// </summary>
 		ResolutionUnit                                     = 296,
-		
+
 		/// <summary>
 		///     The page number of the page from which this image was scanned. (Hex: 0x0129)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/pagenumber.html
 		/// </summary>
 		PageNumber                                         = 297,
-		
+
 		/// <summary>
 		///     Describes a transfer function for the image in tabular style. (Hex: 0x012D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/transferfunction.html
 		/// </summary>
 		TransferFunction                                   = 301,
-		
+
 		/// <summary>
 		///     Name and version number of the software package(s) used to create the image. (Hex: 0x0131)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/software.html
 		/// </summary>
 		Software                                           = 305,
-		
+
 		/// <summary>
 		///     Date and time of image creation. (Hex: 0x0132)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/datetime.html
 		/// </summary>
 		DateTime                                           = 306,
-		
+
 		/// <summary>
 		///     Person who created the image. (Hex: 0x013B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/artist.html
 		/// </summary>
 		Artist                                             = 315,
-		
+
 		/// <summary>
 		///     The computer and/or operating system in use at the time of image creation. (Hex: 0x013C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/hostcomputer.html
 		/// </summary>
 		HostComputer                                       = 316,
-		
+
 		/// <summary>
 		///     A mathematical operator that is applied to the image data before an encoding scheme is applied. (Hex: 0x013D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/predictor.html
 		/// </summary>
 		Predictor                                          = 317,
-		
+
 		/// <summary>
 		///     The chromaticity of the white point of the image. (Hex: 0x013E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/whitepoint.html
 		/// </summary>
 		WhitePoint                                         = 318,
-		
+
 		/// <summary>
 		///     The chromaticities of the primaries of the image. (Hex: 0x013F)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/primarychromaticities.html
 		/// </summary>
 		PrimaryChromaticities                              = 319,
-		
+
 		/// <summary>
 		///     A color map for palette color images. (Hex: 0x0140)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/colormap.html
 		/// </summary>
 		ColorMap                                           = 320,
-		
+
 		/// <summary>
 		///     Conveys to the halftone function the range of gray levels within a colorimetrically-specified image that should retain tonal detail. (Hex: 0x0141)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/halftonehints.html
 		/// </summary>
 		HalftoneHints                                      = 321,
-		
+
 		/// <summary>
 		///     The tile width in pixels. This is the number of columns in each tile. (Hex: 0x0142)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/tilewidth.html
 		/// </summary>
 		TileWidth                                          = 322,
-		
+
 		/// <summary>
 		///     The tile length (height) in pixels. This is the number of rows in each tile. (Hex: 0x0143)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/tilelength.html
 		/// </summary>
 		TileLength                                         = 323,
-		
+
 		/// <summary>
 		///     For each tile, the byte offset of that tile, as compressed and stored on disk. (Hex: 0x0144)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/tileoffsets.html
 		/// </summary>
 		TileOffsets                                        = 324,
-		
+
 		/// <summary>
 		///     For each tile, the number of (compressed) bytes in that tile. (Hex: 0x0145)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/tilebytecounts.html
 		/// </summary>
 		TileByteCounts                                     = 325,
-		
+
 		/// <summary>
 		///     Used in the TIFF-F standard, denotes the number of 'bad' scan lines encountered by the facsimile device. (Hex: 0x0146)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/badfaxlines.html
 		/// </summary>
 		BadFaxLines                                        = 326,
-		
+
 		/// <summary>
 		///     Used in the TIFF-F standard, indicates if 'bad' lines encountered during reception are stored in the data, or if 'bad' lines have been replaced by the receiver. (Hex: 0x0147)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/cleanfaxdata.html
 		/// </summary>
 		CleanFaxData                                       = 327,
-		
+
 		/// <summary>
 		///     Used in the TIFF-F standard, denotes the maximum number of consecutive 'bad' scanlines received. (Hex: 0x0148)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/consecutivebadfaxlines.html
 		/// </summary>
 		ConsecutiveBadFaxLines                             = 328,
-		
+
 		/// <summary>
 		///     Offset to child IFDs. (Hex: 0x014A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/subifds.html
 		/// </summary>
 		SubIFDs                                            = 330,
-		
+
 		/// <summary>
 		///     The set of inks used in a separated (PhotometricInterpretation=5) image. (Hex: 0x014C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/inkset.html
 		/// </summary>
 		InkSet                                             = 332,
-		
+
 		/// <summary>
 		///     The name of each ink used in a separated image. (Hex: 0x014D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/inknames.html
 		/// </summary>
 		InkNames                                           = 333,
-		
+
 		/// <summary>
 		///     The number of inks. (Hex: 0x014E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/numberofinks.html
 		/// </summary>
 		NumberOfInks                                       = 334,
-		
+
 		/// <summary>
 		///     The component values that correspond to a 0% dot and 100% dot. (Hex: 0x0150)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/dotrange.html
 		/// </summary>
 		DotRange                                           = 336,
-		
+
 		/// <summary>
 		///     A description of the printing environment for which this separation is intended. (Hex: 0x0151)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/targetprinter.html
 		/// </summary>
 		TargetPrinter                                      = 337,
-		
+
 		/// <summary>
 		///     Description of extra components. (Hex: 0x0152)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/extrasamples.html
 		/// </summary>
 		ExtraSamples                                       = 338,
-		
+
 		/// <summary>
 		///     Specifies how to interpret each data sample in a pixel. (Hex: 0x0153)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/sampleformat.html
 		/// </summary>
 		SampleFormat                                       = 339,
-		
+
 		/// <summary>
 		///     Specifies the minimum sample value. (Hex: 0x0154)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/sminsamplevalue.html
 		/// </summary>
 		SMinSampleValue                                    = 340,
-		
+
 		/// <summary>
 		///     Specifies the maximum sample value. (Hex: 0x0155)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/smaxsamplevalue.html
 		/// </summary>
 		SMaxSampleValue                                    = 341,
-		
+
 		/// <summary>
 		///     Expands the range of the TransferFunction. (Hex: 0x0156)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/transferrange.html
 		/// </summary>
 		TransferRange                                      = 342,
-		
+
 		/// <summary>
 		///     Mirrors the essentials of PostScript's path creation functionality. (Hex: 0x0157)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/clippath.html
 		/// </summary>
 		ClipPath                                           = 343,
-		
+
 		/// <summary>
 		///     The number of units that span the width of the image, in terms of integer ClipPath coordinates. (Hex: 0x0158)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/xclippathunits.html
 		/// </summary>
 		XClipPathUnits                                     = 344,
-		
+
 		/// <summary>
 		///     The number of units that span the height of the image, in terms of integer ClipPath coordinates. (Hex: 0x0159)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/yclippathunits.html
 		/// </summary>
 		YClipPathUnits                                     = 345,
-		
+
 		/// <summary>
 		///     Aims to broaden the support for indexed images to include support for any color space. (Hex: 0x015A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/indexed.html
 		/// </summary>
 		Indexed                                            = 346,
-		
+
 		/// <summary>
 		///     JPEG quantization and/or Huffman tables. (Hex: 0x015B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/jpegtables.html
 		/// </summary>
 		JPEGTables                                         = 347,
-		
+
 		/// <summary>
 		///     OPI-related. (Hex: 0x015F)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/opiproxy.html
 		/// </summary>
 		OPIProxy                                           = 351,
-		
+
 		/// <summary>
 		///     Used in the TIFF-FX standard to point to an IFD containing tags that are globally applicable to the complete TIFF file. (Hex: 0x0190)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/globalparametersifd.html
 		/// </summary>
 		GlobalParametersIFD                                = 400,
-		
+
 		/// <summary>
 		///     Used in the TIFF-FX standard, denotes the type of data stored in this file or IFD. (Hex: 0x0191)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/profiletype.html
 		/// </summary>
 		ProfileType                                        = 401,
-		
+
 		/// <summary>
 		///     Used in the TIFF-FX standard, denotes the 'profile' that applies to this file. (Hex: 0x0192)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/faxprofile.html
 		/// </summary>
 		FaxProfile                                         = 402,
-		
+
 		/// <summary>
 		///     Used in the TIFF-FX standard, indicates which coding methods are used in the file. (Hex: 0x0193)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/codingmethods.html
 		/// </summary>
 		CodingMethods                                      = 403,
-		
+
 		/// <summary>
 		///     Used in the TIFF-FX standard, denotes the year of the standard specified by the FaxProfile field. (Hex: 0x0194)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/versionyear.html
 		/// </summary>
 		VersionYear                                        = 404,
-		
+
 		/// <summary>
 		///     Used in the TIFF-FX standard, denotes the mode of the standard specified by the FaxProfile field. (Hex: 0x0195)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/modenumber.html
 		/// </summary>
 		ModeNumber                                         = 405,
-		
+
 		/// <summary>
 		///     Used in the TIFF-F and TIFF-FX standards, holds information about the ITULAB (PhotometricInterpretation = 10) encoding. (Hex: 0x01B1)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/decode.html
 		/// </summary>
 		Decode                                             = 433,
-		
+
 		/// <summary>
 		///     Defined in the Mixed Raster Content part of RFC 2301, is the default color needed in areas where no image is available. (Hex: 0x01B2)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/defaultimagecolor.html
 		/// </summary>
 		DefaultImageColor                                  = 434,
-		
+
 		/// <summary>
 		///     Old-style JPEG compression field. TechNote2 invalidates this part of the specification. (Hex: 0x0200)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/jpegproc.html
 		/// </summary>
 		JPEGProc                                           = 512,
-		
+
 		/// <summary>
 		///     Old-style JPEG compression field. TechNote2 invalidates this part of the specification. (Hex: 0x0201)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/jpeginterchangeformat.html
 		/// </summary>
 		JPEGInterchangeFormat                              = 513,
-		
+
 		/// <summary>
 		///     Old-style JPEG compression field. TechNote2 invalidates this part of the specification. (Hex: 0x0202)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/jpeginterchangeformatlength.html
 		/// </summary>
 		JPEGInterchangeFormatLength                        = 514,
-		
+
 		/// <summary>
 		///     Old-style JPEG compression field. TechNote2 invalidates this part of the specification. (Hex: 0x0203)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/jpegrestartinterval.html
 		/// </summary>
 		JPEGRestartInterval                                = 515,
-		
+
 		/// <summary>
 		///     Old-style JPEG compression field. TechNote2 invalidates this part of the specification. (Hex: 0x0205)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/jpeglosslesspredictors.html
 		/// </summary>
 		JPEGLosslessPredictors                             = 517,
-		
+
 		/// <summary>
 		///     Old-style JPEG compression field. TechNote2 invalidates this part of the specification. (Hex: 0x0206)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/jpegpointtransforms.html
 		/// </summary>
 		JPEGPointTransforms                                = 518,
-		
+
 		/// <summary>
 		///     Old-style JPEG compression field. TechNote2 invalidates this part of the specification. (Hex: 0x0207)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/jpegqtables.html
 		/// </summary>
 		JPEGQTables                                        = 519,
-		
+
 		/// <summary>
 		///     Old-style JPEG compression field. TechNote2 invalidates this part of the specification. (Hex: 0x0208)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/jpegdctables.html
 		/// </summary>
 		JPEGDCTables                                       = 520,
-		
+
 		/// <summary>
 		///     Old-style JPEG compression field. TechNote2 invalidates this part of the specification. (Hex: 0x0209)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/jpegactables.html
 		/// </summary>
 		JPEGACTables                                       = 521,
-		
+
 		/// <summary>
 		///     The transformation from RGB to YCbCr image data. (Hex: 0x0211)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/ycbcrcoefficients.html
 		/// </summary>
 		YCbCrCoefficients                                  = 529,
-		
+
 		/// <summary>
 		///     Specifies the subsampling factors used for the chrominance components of a YCbCr image. (Hex: 0x0212)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/ycbcrsubsampling.html
 		/// </summary>
 		YCbCrSubSampling                                   = 530,
-		
+
 		/// <summary>
 		///     Specifies the positioning of subsampled chrominance components relative to luminance samples. (Hex: 0x0213)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/ycbcrpositioning.html
 		/// </summary>
 		YCbCrPositioning                                   = 531,
-		
+
 		/// <summary>
 		///     Specifies a pair of headroom and footroom image data values (codes) for each pixel component. (Hex: 0x0214)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/referenceblackwhite.html
 		/// </summary>
 		ReferenceBlackWhite                                = 532,
-		
+
 		/// <summary>
 		///     Defined in the Mixed Raster Content part of RFC 2301, used to replace RowsPerStrip for IFDs with variable-sized strips. (Hex: 0x022F)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/striprowcounts.html
 		/// </summary>
 		StripRowCounts                                     = 559,
-		
+
 		/// <summary>
 		///     XML packet containing XMP metadata (Hex: 0x02BC)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/xmp.html
 		/// </summary>
 		XMP                                                = 700,
-		
+
 		/// <summary>
 		///     Rating tag used by Windows (Hex: 0x4746)
 		/// </summary>
@@ -608,451 +608,451 @@ namespace TagLib.IFD.Tags
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/imageid.html
 		/// </summary>
 		ImageID                                            = 32781,
-		
+
 		/// <summary>
 		///     Annotation data, as used in 'Imaging for Windows'. (Hex: 0x80A4)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/wangannotation.html
 		/// </summary>
 		WangAnnotation                                     = 32932,
-		
+
 		/// <summary>
 		///     Copyright notice. (Hex: 0x8298)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/copyright.html
 		/// </summary>
 		Copyright                                          = 33432,
-		
+
 		/// <summary>
 		///     Specifies the pixel data format encoding in the Molecular Dynamics GEL file format. (Hex: 0x82A5)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/mdfiletag.html
 		/// </summary>
 		MDFileTag                                          = 33445,
-		
+
 		/// <summary>
 		///     Specifies a scale factor in the Molecular Dynamics GEL file format. (Hex: 0x82A6)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/mdscalepixel.html
 		/// </summary>
 		MDScalePixel                                       = 33446,
-		
+
 		/// <summary>
 		///     Used to specify the conversion from 16bit to 8bit in the Molecular Dynamics GEL file format. (Hex: 0x82A7)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/mdcolortable.html
 		/// </summary>
 		MDColorTable                                       = 33447,
-		
+
 		/// <summary>
 		///     Name of the lab that scanned this file, as used in the Molecular Dynamics GEL file format. (Hex: 0x82A8)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/mdlabname.html
 		/// </summary>
 		MDLabName                                          = 33448,
-		
+
 		/// <summary>
 		///     Information about the sample, as used in the Molecular Dynamics GEL file format. (Hex: 0x82A9)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/mdsampleinfo.html
 		/// </summary>
 		MDSampleInfo                                       = 33449,
-		
+
 		/// <summary>
 		///     Date the sample was prepared, as used in the Molecular Dynamics GEL file format. (Hex: 0x82AA)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/mdprepdate.html
 		/// </summary>
 		MDPrepDate                                         = 33450,
-		
+
 		/// <summary>
 		///     Time the sample was prepared, as used in the Molecular Dynamics GEL file format. (Hex: 0x82AB)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/mdpreptime.html
 		/// </summary>
 		MDPrepTime                                         = 33451,
-		
+
 		/// <summary>
 		///     Units for data in this file, as used in the Molecular Dynamics GEL file format. (Hex: 0x82AC)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/mdfileunits.html
 		/// </summary>
 		MDFileUnits                                        = 33452,
-		
+
 		/// <summary>
 		///     Used in interchangeable GeoTIFF files. (Hex: 0x830E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/modelpixelscaletag.html
 		/// </summary>
 		ModelPixelScaleTag                                 = 33550,
-		
+
 		/// <summary>
 		///     IPTC (International Press Telecommunications Council) metadata. (Hex: 0x83BB)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/iptc.html
 		/// </summary>
 		IPTC                                               = 33723,
-		
+
 		/// <summary>
 		///     Intergraph Application specific storage. (Hex: 0x847E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/ingrpacketdatatag.html
 		/// </summary>
 		INGRPacketDataTag                                  = 33918,
-		
+
 		/// <summary>
 		///     Intergraph Application specific flags. (Hex: 0x847F)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/ingrflagregisters.html
 		/// </summary>
 		INGRFlagRegisters                                  = 33919,
-		
+
 		/// <summary>
 		///     Originally part of Intergraph's GeoTIFF tags, but likely understood by IrasB only. (Hex: 0x8480)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/irasbtransformationmatrix.html
 		/// </summary>
 		IrasBTransformationMatrix                          = 33920,
-		
+
 		/// <summary>
 		///     Originally part of Intergraph's GeoTIFF tags, but now used in interchangeable GeoTIFF files. (Hex: 0x8482)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/modeltiepointtag.html
 		/// </summary>
 		ModelTiepointTag                                   = 33922,
-		
+
 		/// <summary>
 		///     Used in interchangeable GeoTIFF files. (Hex: 0x85D8)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/modeltransformationtag.html
 		/// </summary>
 		ModelTransformationTag                             = 34264,
-		
+
 		/// <summary>
 		///     Collection of Photoshop 'Image Resource Blocks'. (Hex: 0x8649)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/photoshop.html
 		/// </summary>
 		Photoshop                                          = 34377,
-		
+
 		/// <summary>
 		///     A pointer to the Exif IFD. (Hex: 0x8769)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/exififd.html
 		/// </summary>
 		ExifIFD                                            = 34665,
-		
+
 		/// <summary>
 		///     ICC profile data. (Hex: 0x8773)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/iccprofile.html
 		/// </summary>
 		ICCProfile                                         = 34675,
-		
+
 		/// <summary>
 		///     Defined in the Mixed Raster Content part of RFC 2301, used to denote the particular function of this Image in the mixed raster scheme. (Hex: 0x87AC)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/imagelayer.html
 		/// </summary>
 		ImageLayer                                         = 34732,
-		
+
 		/// <summary>
 		///     Used in interchangeable GeoTIFF files. (Hex: 0x87AF)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/geokeydirectorytag.html
 		/// </summary>
 		GeoKeyDirectoryTag                                 = 34735,
-		
+
 		/// <summary>
 		///     Used in interchangeable GeoTIFF files. (Hex: 0x87B0)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/geodoubleparamstag.html
 		/// </summary>
 		GeoDoubleParamsTag                                 = 34736,
-		
+
 		/// <summary>
 		///     Used in interchangeable GeoTIFF files. (Hex: 0x87B1)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/geoasciiparamstag.html
 		/// </summary>
 		GeoAsciiParamsTag                                  = 34737,
-		
+
 		/// <summary>
 		///     A pointer to the Exif-related GPS Info IFD. (Hex: 0x8825)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/gpsifd.html
 		/// </summary>
 		GPSIFD                                             = 34853,
-		
+
 		/// <summary>
 		///     Used by HylaFAX. (Hex: 0x885C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/hylafaxfaxrecvparams.html
 		/// </summary>
 		HylaFAXFaxRecvParams                               = 34908,
-		
+
 		/// <summary>
 		///     Used by HylaFAX. (Hex: 0x885D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/hylafaxfaxsubaddress.html
 		/// </summary>
 		HylaFAXFaxSubAddress                               = 34909,
-		
+
 		/// <summary>
 		///     Used by HylaFAX. (Hex: 0x885E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/hylafaxfaxrecvtime.html
 		/// </summary>
 		HylaFAXFaxRecvTime                                 = 34910,
-		
+
 		/// <summary>
 		///     Used by Adobe Photoshop. (Hex: 0x935C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/imagesourcedata.html
 		/// </summary>
 		ImageSourceData                                    = 37724,
-		
+
 		/// <summary>
 		///     A pointer to the Exif-related Interoperability IFD. (Hex: 0xA005)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/interoperabilityifd.html
 		/// </summary>
 		InteroperabilityIFD                                = 40965,
-		
+
 		/// <summary>
 		///     Used by the GDAL library, holds an XML list of name=value 'metadata' values about the image as a whole, and about specific samples. (Hex: 0xA480)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/gdal_metadata.html
 		/// </summary>
 		GDAL_METADATA                                      = 42112,
-		
+
 		/// <summary>
 		///     Used by the GDAL library, contains an ASCII encoded nodata or background pixel value. (Hex: 0xA481)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/gdal_nodata.html
 		/// </summary>
 		GDAL_NODATA                                        = 42113,
-		
+
 		/// <summary>
 		///     Used in the Oce scanning process. (Hex: 0xC427)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/ocescanjobdescription.html
 		/// </summary>
 		OceScanjobDescription                              = 50215,
-		
+
 		/// <summary>
 		///     Used in the Oce scanning process. (Hex: 0xC428)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/oceapplicationselector.html
 		/// </summary>
 		OceApplicationSelector                             = 50216,
-		
+
 		/// <summary>
 		///     Used in the Oce scanning process. (Hex: 0xC429)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/oceidentificationnumber.html
 		/// </summary>
 		OceIdentificationNumber                            = 50217,
-		
+
 		/// <summary>
 		///     Used in the Oce scanning process. (Hex: 0xC42A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/oceimagelogiccharacteristics.html
 		/// </summary>
 		OceImageLogicCharacteristics                       = 50218,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC612)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/dngversion.html
 		/// </summary>
 		DNGVersion                                         = 50706,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC613)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/dngbackwardversion.html
 		/// </summary>
 		DNGBackwardVersion                                 = 50707,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC614)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/uniquecameramodel.html
 		/// </summary>
 		UniqueCameraModel                                  = 50708,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC615)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/localizedcameramodel.html
 		/// </summary>
 		LocalizedCameraModel                               = 50709,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC616)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/cfaplanecolor.html
 		/// </summary>
 		CFAPlaneColor                                      = 50710,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC617)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/cfalayout.html
 		/// </summary>
 		CFALayout                                          = 50711,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC618)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/linearizationtable.html
 		/// </summary>
 		LinearizationTable                                 = 50712,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC619)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/blacklevelrepeatdim.html
 		/// </summary>
 		BlackLevelRepeatDim                                = 50713,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC61A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/blacklevel.html
 		/// </summary>
 		BlackLevel                                         = 50714,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC61B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/blackleveldeltah.html
 		/// </summary>
 		BlackLevelDeltaH                                   = 50715,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC61C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/blackleveldeltav.html
 		/// </summary>
 		BlackLevelDeltaV                                   = 50716,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC61D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/whitelevel.html
 		/// </summary>
 		WhiteLevel                                         = 50717,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC61E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/defaultscale.html
 		/// </summary>
 		DefaultScale                                       = 50718,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC61F)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/defaultcroporigin.html
 		/// </summary>
 		DefaultCropOrigin                                  = 50719,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC620)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/defaultcropsize.html
 		/// </summary>
 		DefaultCropSize                                    = 50720,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC621)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/colormatrix1.html
 		/// </summary>
 		ColorMatrix1                                       = 50721,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC622)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/colormatrix2.html
 		/// </summary>
 		ColorMatrix2                                       = 50722,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC623)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/cameracalibration1.html
 		/// </summary>
 		CameraCalibration1                                 = 50723,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC624)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/cameracalibration2.html
 		/// </summary>
 		CameraCalibration2                                 = 50724,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC625)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/reductionmatrix1.html
 		/// </summary>
 		ReductionMatrix1                                   = 50725,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC626)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/reductionmatrix2.html
 		/// </summary>
 		ReductionMatrix2                                   = 50726,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC627)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/analogbalance.html
 		/// </summary>
 		AnalogBalance                                      = 50727,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC628)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/asshotneutral.html
 		/// </summary>
 		AsShotNeutral                                      = 50728,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC629)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/asshotwhitexy.html
 		/// </summary>
 		AsShotWhiteXY                                      = 50729,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC62A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/baselineexposure.html
 		/// </summary>
 		BaselineExposure                                   = 50730,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC62B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/baselinenoise.html
 		/// </summary>
 		BaselineNoise                                      = 50731,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC62C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/baselinesharpness.html
 		/// </summary>
 		BaselineSharpness                                  = 50732,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC62D)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/bayergreensplit.html
 		/// </summary>
 		BayerGreenSplit                                    = 50733,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC62E)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/linearresponselimit.html
 		/// </summary>
 		LinearResponseLimit                                = 50734,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC62F)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/cameraserialnumber.html
 		/// </summary>
 		CameraSerialNumber                                 = 50735,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC630)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/lensinfo.html
 		/// </summary>
 		LensInfo                                           = 50736,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC631)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/chromablurradius.html
 		/// </summary>
 		ChromaBlurRadius                                   = 50737,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC632)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/antialiasstrength.html
 		/// </summary>
 		AntiAliasStrength                                  = 50738,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC634)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/dngprivatedata.html
 		/// </summary>
 		DNGPrivateData                                     = 50740,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC635)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/makernotesafety.html
 		/// </summary>
 		MakerNoteSafety                                    = 50741,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC65A)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/calibrationilluminant1.html
 		/// </summary>
 		CalibrationIlluminant1                             = 50778,
-		
+
 		/// <summary>
 		///     Used in IFD 0 of DNG files. (Hex: 0xC65B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/calibrationilluminant2.html
 		/// </summary>
 		CalibrationIlluminant2                             = 50779,
-		
+
 		/// <summary>
 		///     Used in Raw IFD of DNG files. (Hex: 0xC65C)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/bestqualityscale.html
 		/// </summary>
 		BestQualityScale                                   = 50780,
-		
+
 		/// <summary>
 		///     Alias Sketchbook Pro layer usage description. (Hex: 0xC660)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/aliaslayermetadata.html
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/NikonPreviewMakerNoteEntryTag.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/NikonPreviewMakerNoteEntryTag.cs
index 91b828c..c95bb01 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/NikonPreviewMakerNoteEntryTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/NikonPreviewMakerNoteEntryTag.cs
@@ -46,7 +46,7 @@ namespace TagLib.IFD.Tags
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/xresolution.html
 		/// </summary>
 		XResolution                                        = 282,
-		
+
 		/// <summary>
 		///     The number of pixels per ResolutionUnit in the ImageLength direction. (Hex: 0x011B)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/yresolution.html
@@ -58,19 +58,19 @@ namespace TagLib.IFD.Tags
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/resolutionunit.html
 		/// </summary>
 		ResolutionUnit                                     = 296,
-		
+
 		/// <summary>
 		///     Start of the preview image data. (Hex: 0x0201)
 		///     http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html#PreviewImage
 		/// </summary>
 		PreviewImageStart                                  = 513,
-		
+
 		/// <summary>
 		///     Length of the preview image data. (Hex: 0x0202)
 		///     http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html#PreviewImage
 		/// </summary>
 		PreviewImageLength                                 = 514,
-		
+
 		/// <summary>
 		///     Specifies the positioning of subsampled chrominance components relative to luminance samples. (Hex: 0x0213)
 		///     http://www.awaresystems.be/imaging/tiff/tifftags/ycbcrpositioning.html
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/PanasonicMakerNoteEntryTag.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/PanasonicMakerNoteEntryTag.cs
index b460870..0e14adc 100644
--- a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/PanasonicMakerNoteEntryTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/PanasonicMakerNoteEntryTag.cs
@@ -60,6 +60,11 @@ namespace TagLib.IFD.Tags
 		AFMode                                              = 15,
 
 		/// <summary>
+		///    ISO Speed. (Hex: 0X0017)
+		/// </summary>
+		ISO                                                 = 23,
+
+		/// <summary>
 		///    Image stabilization. (Hex: 0X001A)
 		/// </summary>
 		ImageStabilization                                  = 26,
@@ -101,7 +106,7 @@ namespace TagLib.IFD.Tags
 
 		/// <summary>
 		///    This number is unique, and contains the date of manufacture, but
-		///    is not the same as the number printed on the camera body. 
+		///    is not the same as the number printed on the camera body.
 		///    (Hex: 0X0025)
 		/// </summary>
 		InternalSerialNumber                                = 37,
diff --git a/lib/TagLib/TagLib/src/TagLib/IFD/Tags/PentaxMakerNoteEntryTag.cs b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/PentaxMakerNoteEntryTag.cs
new file mode 100644
index 0000000..2c4e34d
--- /dev/null
+++ b/lib/TagLib/TagLib/src/TagLib/IFD/Tags/PentaxMakerNoteEntryTag.cs
@@ -0,0 +1,437 @@
+//
+// PentaxMakerNoteEntryTag.cs:
+//
+// Author:
+//   Ruben Vermeersch (ruben at savanne.be)
+//
+// Copyright (C) 2010 Ruben Vermeersch
+//
+// This library is free software; you can redistribute it and/or modify
+// it  under the terms of the GNU Lesser General Public License version
+// 2.1 as published by the Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+// USA
+//
+
+namespace TagLib.IFD.Tags
+{
+	/// <summary>
+	///    Pentax makernote tags.
+	///    Based on http://www.exiv2.org/tags-pentax.html
+	/// </summary>
+	public enum PentaxMakerNoteEntryTag : ushort
+	{
+		/// <summary>
+		///    Pentax Makernote version. (Hex: 0X0000)
+		/// </summary>
+		Version                                             = 0,
+
+		/// <summary>
+		///    Camera shooting mode. (Hex: 0X0001)
+		/// </summary>
+		Mode                                                = 1,
+
+		/// <summary>
+		///    Resolution of a preview image. (Hex: 0X0002)
+		/// </summary>
+		PreviewResolution                                   = 2,
+
+		/// <summary>
+		///    Size of an IFD containing a preview image. (Hex: 0X0003)
+		/// </summary>
+		PreviewLength                                       = 3,
+
+		/// <summary>
+		///    Offset to an IFD containing a preview image. (Hex: 0X0004)
+		/// </summary>
+		PreviewOffset                                       = 4,
+
+		/// <summary>
+		///    Pentax model idenfication. (Hex: 0X0005)
+		/// </summary>
+		ModelID                                             = 5,
+
+		/// <summary>
+		///    Date. (Hex: 0X0006)
+		/// </summary>
+		Date                                                = 6,
+
+		/// <summary>
+		///    Time. (Hex: 0X0007)
+		/// </summary>
+		Time                                                = 7,
+
+		/// <summary>
+		///    Image quality settings. (Hex: 0X0008)
+		/// </summary>
+		Quality                                             = 8,
+
+		/// <summary>
+		///    Image size settings. (Hex: 0X0009)
+		/// </summary>
+		Size                                                = 9,
+
+		/// <summary>
+		///    Flash mode settings. (Hex: 0X000C)
+		/// </summary>
+		Flash                                               = 12,
+
+		/// <summary>
+		///    Focus mode settings. (Hex: 0X000D)
+		/// </summary>
+		Focus                                               = 13,
+
+		/// <summary>
+		///    Selected AF point. (Hex: 0X000E)
+		/// </summary>
+		AFPoint                                             = 14,
+
+		/// <summary>
+		///    AF point in focus. (Hex: 0X000F)
+		/// </summary>
+		AFPointInFocus                                      = 15,
+
+		/// <summary>
+		///    Exposure time. (Hex: 0X0012)
+		/// </summary>
+		ExposureTime                                        = 18,
+
+		/// <summary>
+		///    F-Number. (Hex: 0X0013)
+		/// </summary>
+		FNumber                                             = 19,
+
+		/// <summary>
+		///    ISO sensitivity settings. (Hex: 0X0014)
+		/// </summary>
+		ISO                                                 = 20,
+
+		/// <summary>
+		///    Exposure compensation. (Hex: 0X0016)
+		/// </summary>
+		ExposureCompensation                                = 22,
+
+		/// <summary>
+		///    MeteringMode. (Hex: 0X0017)
+		/// </summary>
+		MeteringMode                                        = 23,
+
+		/// <summary>
+		///    AutoBracketing. (Hex: 0X0018)
+		/// </summary>
+		AutoBracketing                                      = 24,
+
+		/// <summary>
+		///    White ballance. (Hex: 0X0019)
+		/// </summary>
+		WhiteBallance                                       = 25,
+
+		/// <summary>
+		///    White ballance mode. (Hex: 0X001A)
+		/// </summary>
+		WhiteBallanceMode                                   = 26,
+
+		/// <summary>
+		///    Blue color balance. (Hex: 0X001B)
+		/// </summary>
+		BlueBalance                                         = 27,
+
+		/// <summary>
+		///    Red color balance. (Hex: 0X001C)
+		/// </summary>
+		RedBalance                                          = 28,
+
+		/// <summary>
+		///    FocalLength. (Hex: 0X001D)
+		/// </summary>
+		FocalLength                                         = 29,
+
+		/// <summary>
+		///    Digital zoom. (Hex: 0X001E)
+		/// </summary>
+		DigitalZoom                                         = 30,
+
+		/// <summary>
+		///    Saturation. (Hex: 0X001F)
+		/// </summary>
+		Saturation                                          = 31,
+
+		/// <summary>
+		///    Contrast. (Hex: 0X0020)
+		/// </summary>
+		Contrast                                            = 32,
+
+		/// <summary>
+		///    Sharpness. (Hex: 0X0021)
+		/// </summary>
+		Sharpness                                           = 33,
+
+		/// <summary>
+		///    Location. (Hex: 0X0022)
+		/// </summary>
+		Location                                            = 34,
+
+		/// <summary>
+		///    Home town. (Hex: 0X0023)
+		/// </summary>
+		Hometown                                            = 35,
+
+		/// <summary>
+		///    Destination. (Hex: 0X0024)
+		/// </summary>
+		Destination                                         = 36,
+
+		/// <summary>
+		///    Whether day saving time is active in home town. (Hex: 0X0025)
+		/// </summary>
+		HometownDST                                         = 37,
+
+		/// <summary>
+		///    Whether day saving time is active in destination. (Hex: 0X0026)
+		/// </summary>
+		DestinationDST                                      = 38,
+
+		/// <summary>
+		///    DSPFirmwareVersion. (Hex: 0X0027)
+		/// </summary>
+		DSPFirmwareVersion                                  = 39,
+
+		/// <summary>
+		///    CPUFirmwareVersion. (Hex: 0X0028)
+		/// </summary>
+		CPUFirmwareVersion                                  = 40,
+
+		/// <summary>
+		///    Frame number. (Hex: 0X0029)
+		/// </summary>
+		FrameNumber                                         = 41,
+
+		/// <summary>
+		///    Camera calculated light value, includes exposure compensation. (Hex: 0X002D)
+		/// </summary>
+		EffectiveLV                                         = 45,
+
+		/// <summary>
+		///    Image processing. (Hex: 0X0032)
+		/// </summary>
+		ImageProcessing                                     = 50,
+
+		/// <summary>
+		///    Picture mode. (Hex: 0X0033)
+		/// </summary>
+		PictureMode                                         = 51,
+
+		/// <summary>
+		///    Drive mode. (Hex: 0X0034)
+		/// </summary>
+		DriveMode                                           = 52,
+
+		/// <summary>
+		///    Color space. (Hex: 0X0037)
+		/// </summary>
+		ColorSpace                                          = 55,
+
+		/// <summary>
+		///    Image area offset. (Hex: 0X0038)
+		/// </summary>
+		ImageAreaOffset                                     = 56,
+
+		/// <summary>
+		///    Raw image size. (Hex: 0X0039)
+		/// </summary>
+		RawImageSize                                        = 57,
+
+		/// <summary>
+		///    Preview image borders. (Hex: 0X003E)
+		/// </summary>
+		PreviewImageBorders                                 = 62,
+
+		/// <summary>
+		///    Lens type. (Hex: 0X003F)
+		/// </summary>
+		LensType                                            = 63,
+
+		/// <summary>
+		///    Sensitivity adjust. (Hex: 0X0040)
+		/// </summary>
+		SensitivityAdjust                                   = 64,
+
+		/// <summary>
+		///    Digital filter. (Hex: 0X0041)
+		/// </summary>
+		DigitalFilter                                       = 65,
+
+		/// <summary>
+		///    Camera temperature. (Hex: 0X0047)
+		/// </summary>
+		Temperature                                         = 71,
+
+		/// <summary>
+		///    AE lock. (Hex: 0X0048)
+		/// </summary>
+		AELock                                              = 72,
+
+		/// <summary>
+		///    Noise reduction. (Hex: 0X0049)
+		/// </summary>
+		NoiseReduction                                      = 73,
+
+		/// <summary>
+		///    Flash exposure compensation. (Hex: 0X004D)
+		/// </summary>
+		FlashExposureCompensation                           = 77,
+
+		/// <summary>
+		///    Image tone. (Hex: 0X004F)
+		/// </summary>
+		ImageTone                                           = 79,
+
+		/// <summary>
+		///    Colort temperature. (Hex: 0X0050)
+		/// </summary>
+		ColorTemperature                                    = 80,
+
+		/// <summary>
+		///    Shake reduction information. (Hex: 0X005C)
+		/// </summary>
+		ShakeReduction                                      = 92,
+
+		/// <summary>
+		///    Shutter count. (Hex: 0X005D)
+		/// </summary>
+		ShutterCount                                        = 93,
+
+		/// <summary>
+		///    Dynamic range expansion. (Hex: 0X0069)
+		/// </summary>
+		DynamicRangeExpansion                               = 105,
+
+		/// <summary>
+		///    High ISO noise reduction. (Hex: 0X0071)
+		/// </summary>
+		HighISONoiseReduction                               = 113,
+
+		/// <summary>
+		///    AF Adjustment. (Hex: 0X0072)
+		/// </summary>
+		AFAdjustment                                        = 114,
+
+		/// <summary>
+		///    Black point. (Hex: 0X0200)
+		/// </summary>
+		BlackPoint                                          = 512,
+
+		/// <summary>
+		///    White point. (Hex: 0X0201)
+		/// </summary>
+		WhitePoint                                          = 513,
+
+		/// <summary>
+		///    ShotInfo. (Hex: 0X0205)
+		/// </summary>
+		ShotInfo                                            = 517,
+
+		/// <summary>
+		///    AEInfo. (Hex: 0X0206)
+		/// </summary>
+		AEInfo                                              = 518,
+
+		/// <summary>
+		///    LensInfo. (Hex: 0X0207)
+		/// </summary>
+		LensInfo                                            = 519,
+
+		/// <summary>
+		///    FlashInfo. (Hex: 0X0208)
+		/// </summary>
+		FlashInfo                                           = 520,
+
+		/// <summary>
+		///    AEMeteringSegments. (Hex: 0X0209)
+		/// </summary>
+		AEMeteringSegments                                  = 521,
+
+		/// <summary>
+		///    FlashADump. (Hex: 0X020A)
+		/// </summary>
+		FlashADump                                          = 522,
+
+		/// <summary>
+		///    FlashBDump. (Hex: 0X020B)
+		/// </summary>
+		FlashBDump                                          = 523,
+
+		/// <summary>
+		///    WB_RGGBLevelsDaylight. (Hex: 0X020D)
+		/// </summary>
+		WB_RGGBLevelsDaylight                               = 525,
+
+		/// <summary>
+		///    WB_RGGBLevelsShade. (Hex: 0X020E)
+		/// </summary>
+		WB_RGGBLevelsShade                                  = 526,
+
+		/// <summary>
+		///    WB_RGGBLevelsCloudy. (Hex: 0X020F)
+		/// </summary>
+		WB_RGGBLevelsCloudy                                 = 527,
+
+		/// <summary>
+		///    WB_RGGBLevelsTungsten. (Hex: 0X0210)
+		/// </summary>
+		WB_RGGBLevelsTungsten                               = 528,
+
+		/// <summary>
+		///    WB_RGGBLevelsFluorescentD. (Hex: 0X0211)
+		/// </summary>
+		WB_RGGBLevelsFluorescentD                           = 529,
+
+		/// <summary>
+		///    WB_RGGBLevelsFluorescentN. (Hex: 0X0212)
+		/// </summary>
+		WB_RGGBLevelsFluorescentN                           = 530,
+
+		/// <summary>
+		///    WB_RGGBLevelsFluorescentW. (Hex: 0X0213)
+		/// </summary>
+		WB_RGGBLevelsFluorescentW                           = 531,
+
+		/// <summary>
+		///    WB_RGGBLevelsFlash. (Hex: 0X0214)
+		/// </summary>
+		WB_RGGBLevelsFlash                                  = 532,
+
+		/// <summary>
+		///    CameraInfo. (Hex: 0X0215)
+		/// </summary>
+		CameraInfo                                          = 533,
+
+		/// <summary>
+		///    BatteryInfo. (Hex: 0X0216)
+		/// </summary>
+		BatteryInfo                                         = 534,
+
+		/// <summary>
+		///    AFInfo. (Hex: 0X021F)
+		/// </summary>
+		AFInfo                                              = 543,
+
+		/// <summary>
+		///    ColorInfo. (Hex: 0X0222)
+		/// </summary>
+		ColorInfo                                           = 546,
+
+		/// <summary>
+		///    Serial Number. (Hex: 0X0229)
+		/// </summary>
+		SerialNumber                                        = 553,
+	}
+}
diff --git a/lib/TagLib/TagLib/src/TagLib/Image/Codec.cs b/lib/TagLib/TagLib/src/TagLib/Image/Codec.cs
index 22598ba..f5919eb 100644
--- a/lib/TagLib/TagLib/src/TagLib/Image/Codec.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Image/Codec.cs
@@ -33,7 +33,7 @@ namespace TagLib.Image
 	public abstract class Codec : IPhotoCodec
 	{
 #region Properties
-		
+
 		/// <summary>
 		///    Gets the duration of the media represented by the current
 		///    instance.
@@ -43,7 +43,7 @@ namespace TagLib.Image
 		///    media represented by the current instance.
 		/// </value>
 		public TimeSpan Duration { get { return TimeSpan.Zero; } }
-		
+
 		/// <summary>
 		///    Gets the types of media represented by the current
 		///    instance.
@@ -53,7 +53,7 @@ namespace TagLib.Image
 		///    the types of media represented by the current instance.
 		/// </value>
 		public MediaTypes MediaTypes { get { return MediaTypes.Photo; } }
-		
+
 		/// <summary>
 		///    Gets a text description of the media represented by the
 		///    current instance.
@@ -63,7 +63,7 @@ namespace TagLib.Image
 		///    of the media represented by the current instance.
 		/// </value>
 		public abstract string Description { get; }
-		
+
 		/// <summary>
 		///    Gets the width of the photo represented by the current
 		///    instance.
@@ -73,7 +73,7 @@ namespace TagLib.Image
 		///    photo represented by the current instance.
 		/// </value>
 		public int PhotoWidth  { get; protected set; }
-		
+
 		/// <summary>
 		///    Gets the height of the photo represented by the current
 		///    instance.
@@ -96,9 +96,9 @@ namespace TagLib.Image
 		public int PhotoQuality { get; protected set; }
 
 #endregion
-		
+
 #region Constructors
-		
+
 		/// <summary>
 		///    Constructs a new <see cref="Codec" /> with the given width
 		///    and height.
@@ -113,7 +113,7 @@ namespace TagLib.Image
 		///    A new <see cref="Codec" /> instance.
 		/// </returns>
 		public Codec (int width, int height) : this (width, height, 0)
-		{	
+		{
 		}
 
 		/// <summary>
@@ -140,6 +140,6 @@ namespace TagLib.Image
 		}
 
 #endregion
-		
+
 	}
 }
diff --git a/lib/TagLib/TagLib/src/TagLib/Image/CombinedImageTag.cs b/lib/TagLib/TagLib/src/TagLib/Image/CombinedImageTag.cs
index 6377c14..b7d79ed 100644
--- a/lib/TagLib/TagLib/src/TagLib/Image/CombinedImageTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Image/CombinedImageTag.cs
@@ -31,7 +31,7 @@ using TagLib.Xmp;
 
 namespace TagLib.Image
 {
-	
+
 	/// <summary>
 	///    Combines some <see cref="ImageTag"/> instance to behave as one.
 	/// </summary>
@@ -39,7 +39,7 @@ namespace TagLib.Image
 	{
 
 #region Private Fields
-		
+
 		/// <summary>
 		///    Direct access to the Exif (IFD) tag (if any)
 		/// </summary>
@@ -54,7 +54,7 @@ namespace TagLib.Image
 		///    Other image tags available in this tag.
 		/// </summary>
 		public List<ImageTag> OtherTags { get; private set; }
-		
+
 		/// <summary>
 		///    Stores the types of the tags, which are allowed for
 		///    the current instance.
@@ -81,11 +81,11 @@ namespace TagLib.Image
 		}
 
 		private List<ImageTag> all_tags = null;
-		
+
 #endregion
-		
+
 #region Constructors
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="CombinedImageTag" /> with a restriction on the
@@ -101,11 +101,11 @@ namespace TagLib.Image
 			AllowedTypes = allowed_types;
 			OtherTags = new List<ImageTag> ();
 		}
-		
+
 #endregion
-		
+
 #region Protected Methods
-		
+
 		internal void AddTag (ImageTag tag)
 		{
 			if ((tag.TagTypes & AllowedTypes) != tag.TagTypes)
@@ -120,7 +120,7 @@ namespace TagLib.Image
 
 			all_tags = null;
 		}
-		
+
 		internal void RemoveTag (ImageTag tag)
 		{
 			if (tag is IFDTag)
@@ -132,7 +132,7 @@ namespace TagLib.Image
 
 			all_tags = null;
 		}
-		
+
 #endregion
 
 #region Public Methods (Tag)
@@ -155,7 +155,7 @@ namespace TagLib.Image
 				return types;
 			}
 		}
-		
+
 		/// <summary>
 		///    Clears all of the child tags.
 		/// </summary>
@@ -166,7 +166,7 @@ namespace TagLib.Image
 		}
 
 #endregion
-		
+
 #region Public Properties (ImageTag)
 
 		/// <summary>
@@ -184,7 +184,7 @@ namespace TagLib.Image
 					if (value != null && value.Length > 0)
 						return value;
 				}
-				
+
 				return new string[] {};
 			}
 			set {
@@ -192,7 +192,7 @@ namespace TagLib.Image
 					tag.Keywords = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the rating for the image described
 		///    by the current instance.
@@ -205,11 +205,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					uint? value = tag.Rating;
-					
+
 					if (value != null)
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -217,7 +217,7 @@ namespace TagLib.Image
 					tag.Rating = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the time when the image, the current instance
 		///    belongs to, was taken.
@@ -229,11 +229,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					DateTime? value = tag.DateTime;
-					
+
 					if (value != null)
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -241,7 +241,7 @@ namespace TagLib.Image
 					tag.DateTime = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the orientation of the image described
 		///    by the current instance.
@@ -254,19 +254,19 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					ImageOrientation value = tag.Orientation;
-					
+
 					if ((uint) value >= 1U && (uint) value <= 8U)
 						return value;
 				}
-				
-				return ImageOrientation.TopLeft;
+
+				return ImageOrientation.None;
 			}
 			set {
 				foreach (ImageTag tag in AllTags)
 					tag.Orientation = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the software the image, the current instance
 		///    belongs to, was created with.
@@ -279,11 +279,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					string value = tag.Software;
-					
+
 					if (!string.IsNullOrEmpty(value))
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -291,7 +291,7 @@ namespace TagLib.Image
 					tag.Software = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the latitude of the GPS coordinate the current
 		///    image was taken.
@@ -304,11 +304,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					double? value = tag.Latitude;
-					
+
 					if (value != null)
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -316,24 +316,24 @@ namespace TagLib.Image
 					tag.Latitude = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the longitude of the GPS coordinate the current
 		///    image was taken.
 		/// </summary>
 		/// <value>
-		///    A <see cref="System.Nullable"/> with the longitude ranging from -180.0 
+		///    A <see cref="System.Nullable"/> with the longitude ranging from -180.0
 		///    to +180.0 degrees.
 		/// </value>
 		public override double? Longitude {
 			get {
 				foreach (ImageTag tag in AllTags) {
 					double? value = tag.Longitude;
-					
+
 					if (value != null)
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -341,7 +341,7 @@ namespace TagLib.Image
 					tag.Longitude = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the altitude of the GPS coordinate the current
 		///    image was taken. The unit is meter.
@@ -354,11 +354,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					double? value = tag.Altitude;
-					
+
 					if (value != null)
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -366,7 +366,7 @@ namespace TagLib.Image
 					tag.Altitude = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the exposure time the image, the current instance belongs
 		///    to, was taken with.
@@ -378,11 +378,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					double? value = tag.ExposureTime;
-					
+
 					if (value != null)
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -390,7 +390,7 @@ namespace TagLib.Image
 					tag.ExposureTime = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the FNumber the image, the current instance belongs
 		///    to, was taken with.
@@ -402,11 +402,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					double? value = tag.FNumber;
-					
+
 					if (value != null)
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -414,7 +414,7 @@ namespace TagLib.Image
 					tag.FNumber = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the ISO speed the image, the current instance belongs
 		///    to, was taken with.
@@ -426,11 +426,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					uint? value = tag.ISOSpeedRatings;
-					
+
 					if (value != null)
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -438,7 +438,7 @@ namespace TagLib.Image
 					tag.ISOSpeedRatings = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the focal length the image, the current instance belongs
 		///    to, was taken with.
@@ -450,11 +450,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					double? value = tag.FocalLength;
-					
+
 					if (value != null)
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -462,7 +462,7 @@ namespace TagLib.Image
 					tag.FocalLength = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the focal length the image, the current instance belongs
 		///    to, was taken with, assuming a 35mm film camera.
@@ -474,11 +474,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					uint? value = tag.FocalLengthIn35mmFilm;
-					
+
 					if (value != null)
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -486,7 +486,7 @@ namespace TagLib.Image
 					tag.FocalLengthIn35mmFilm = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the manufacture of the recording equipment the image, the
 		///    current instance belongs to, was taken with.
@@ -498,11 +498,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					string value = tag.Make;
-					
+
 					if (!string.IsNullOrEmpty(value))
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -510,7 +510,7 @@ namespace TagLib.Image
 					tag.Make = value;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the model name of the recording equipment the image, the
 		///    current instance belongs to, was taken with.
@@ -522,11 +522,11 @@ namespace TagLib.Image
 			get {
 				foreach (ImageTag tag in AllTags) {
 					string value = tag.Model;
-					
+
 					if (!string.IsNullOrEmpty(value))
 						return value;
 				}
-				
+
 				return null;
 			}
 			set {
@@ -642,6 +642,6 @@ namespace TagLib.Image
 		}
 
 #endregion
-		
+
 	}
 }
diff --git a/lib/TagLib/TagLib/src/TagLib/Image/File.cs b/lib/TagLib/TagLib/src/TagLib/Image/File.cs
index ed91a52..2e1f2db 100644
--- a/lib/TagLib/TagLib/src/TagLib/Image/File.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Image/File.cs
@@ -40,7 +40,7 @@ namespace TagLib.Image
 	{
 		private CombinedImageTag image_tag;
 
-#region Constructors		
+#region Constructors
 
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
@@ -57,7 +57,7 @@ namespace TagLib.Image
 		protected File (string path) : base (path)
 		{
 		}
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="File" /> for a specified file abstraction.
@@ -73,11 +73,11 @@ namespace TagLib.Image
 		protected File (IFileAbstraction abstraction) : base (abstraction)
 		{
 		}
-		
+
 #endregion
 
 #region Public Properties
-		
+
 		/// <summary>
 		///    Gets a abstract representation of all tags stored in the
 		///    current instance.
@@ -93,7 +93,7 @@ namespace TagLib.Image
 		///    current instance.
 		/// </summary>
 		/// <value>
-		///    A <see cref="TagLib.Image.CombinedImageTag" /> object 
+		///    A <see cref="TagLib.Image.CombinedImageTag" /> object
 		///    representing all image tags stored in the current instance.
 		/// </value>
 		public CombinedImageTag ImageTag {
@@ -104,7 +104,7 @@ namespace TagLib.Image
 #endregion
 
 #region Public Methods
-		
+
 		/// <summary>
 		///    The method creates all tags which are allowed for the current
 		///    instance of the image file. This method can be used to ensure,
@@ -185,11 +185,11 @@ namespace TagLib.Image
 			case TagTypes.Png:
 				new_tag = new PngTag ();
 				break;
-				
+
 			case TagTypes.TiffIFD:
 				new_tag = new IFDTag ();
 				break;
-				
+
 			case TagTypes.XMP:
 				new_tag = new XmpTag ();
 				break;
@@ -202,7 +202,7 @@ namespace TagLib.Image
 
 			throw new NotImplementedException (String.Format ("Adding tag of type {0} not supported!", type));
 		}
-		
+
 		/// <summary>
 		/// 	Copies metadata from the given file..
 		/// </summary>
@@ -217,7 +217,7 @@ namespace TagLib.Image
 			foreach (var prop in typeof (TagLib.Image.ImageTag).GetProperties ()) {
 				if (!prop.CanWrite || prop.Name == "TagTypes")
 					continue;
-				
+
 				var value = prop.GetValue (from_tag, null);
 				prop.SetValue (to_tag, value, null);
 			}
diff --git a/lib/TagLib/TagLib/src/TagLib/Image/ImageOrientation.cs b/lib/TagLib/TagLib/src/TagLib/Image/ImageOrientation.cs
index ce7c2a8..86beeff 100644
--- a/lib/TagLib/TagLib/src/TagLib/Image/ImageOrientation.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Image/ImageOrientation.cs
@@ -25,19 +25,19 @@ using System;
 namespace TagLib.Image
 {
 	/**
-	
+
 	  1        2       3      4         5            6           7          8
-	
+
 	888888  888888      88  88      8888888888  88                  88  8888888888
 	88          88      88  88      88  88      88  88          88  88      88  88
 	8888      8888    8888  8888    88          8888888888  8888888888          88
 	88          88      88  88
 	88          88  888888  888888
-	
+
 	t-l     t-r     b-r     b-l     l-t         r-t         r-b             l-b
-	
+
 	**/
-	
+
 	/// <summary>
 	/// Describes the orientation of an image.
 	/// Values are viewed in terms of rows and columns.
@@ -45,40 +45,45 @@ namespace TagLib.Image
 	public enum ImageOrientation : uint
 	{
 		/// <summary>
+		/// No value is known.
+		/// </summary>
+		None = 0,
+
+		/// <summary>
 		/// No need to do any transformations.
 		/// </summary>
 		TopLeft = 1,
-		
+
 		/// <summary>
 		/// Mirror image vertically.
 		/// </summary>
 		TopRight = 2,
-		
+
 		/// <summary>
 		/// Rotate image 180 degrees.
 		/// </summary>
 		BottomRight = 3,
-		
+
 		/// <summary>
 		/// Mirror image horizontally
 		/// </summary>
 		BottomLeft = 4,
-		
+
 		/// <summary>
 		/// Mirror image horizontally and rotate 90 degrees clockwise.
 		/// </summary>
 		LeftTop = 5,
-		
+
 		/// <summary>
 		/// Rotate image 90 degrees clockwise.
 		/// </summary>
 		RightTop = 6,
-		
+
 		/// <summary>
 		/// Mirror image vertically and rotate 90 degrees clockwise.
 		/// </summary>
 		RightBottom = 7,
-		
+
 		/// <summary>
 		/// Rotate image 270 degrees clockwise.
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/Image/ImageTag.cs b/lib/TagLib/TagLib/src/TagLib/Image/ImageTag.cs
index bc8ecfd..811984a 100644
--- a/lib/TagLib/TagLib/src/TagLib/Image/ImageTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Image/ImageTag.cs
@@ -27,7 +27,7 @@ using System;
 
 namespace TagLib.Image
 {
-	
+
 	/// <summary>
 	///    A class to abstract the image tags. It extends the <see cref="Tag"/>
 	///    class and adds some image specific propties.
@@ -36,7 +36,7 @@ namespace TagLib.Image
 	{
 
 #region Public Properties
-	
+
 		/// <summary>
 		///    Gets or sets the keywords for the image described
 		///    by the current instance.
@@ -49,7 +49,7 @@ namespace TagLib.Image
 			get { return new string [] {}; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the rating for the image described
 		///    by the current instance.
@@ -62,7 +62,7 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the time when the image, the current instance
 		///    belongs to, was taken.
@@ -74,7 +74,7 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the orientation of the image described
 		///    by the current instance.
@@ -84,10 +84,10 @@ namespace TagLib.Image
 		///    image
 		/// </value>
 		public virtual ImageOrientation Orientation {
-			get { return ImageOrientation.TopLeft; }
+			get { return ImageOrientation.None; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the software the image, the current instance
 		///    belongs to, was created with.
@@ -100,7 +100,7 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the latitude of the GPS coordinate the current
 		///    image was taken.
@@ -113,20 +113,20 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the longitude of the GPS coordinate the current
 		///    image was taken.
 		/// </summary>
 		/// <value>
-		///    A <see cref="System.Nullable"/> with the longitude ranging from -180.0 
+		///    A <see cref="System.Nullable"/> with the longitude ranging from -180.0
 		///    to +180.0 degrees.
 		/// </value>
 		public virtual double? Longitude {
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the altitude of the GPS coordinate the current
 		///    image was taken. The unit is meter.
@@ -139,7 +139,7 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets the exposure time the image, the current instance belongs
 		///    to, was taken with.
@@ -151,7 +151,7 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets the FNumber the image, the current instance belongs
 		///    to, was taken with.
@@ -163,7 +163,7 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets the ISO speed the image, the current instance belongs
 		///    to, was taken with.
@@ -175,7 +175,7 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets the focal length the image, the current instance belongs
 		///    to, was taken with.
@@ -187,7 +187,7 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets the focal length the image, the current instance belongs
 		///    to, was taken with, assuming a 35mm film camera.
@@ -199,7 +199,7 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets the manufacture of the recording equipment the image, the
 		///    current instance belongs to, was taken with.
@@ -211,7 +211,7 @@ namespace TagLib.Image
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets the model name of the recording equipment the image, the
 		///    current instance belongs to, was taken with.
@@ -236,6 +236,6 @@ namespace TagLib.Image
 		}
 
 #endregion
-		
+
 	}
 }
diff --git a/lib/TagLib/TagLib/src/TagLib/Image/NoMetadata/File.cs b/lib/TagLib/TagLib/src/TagLib/Image/NoMetadata/File.cs
index d099260..e61ffe7 100644
--- a/lib/TagLib/TagLib/src/TagLib/Image/NoMetadata/File.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Image/NoMetadata/File.cs
@@ -78,7 +78,7 @@ namespace TagLib.Image.NoMetadata
 
 #endregion
 
-#region Constructors		
+#region Constructors
 
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
@@ -102,7 +102,7 @@ namespace TagLib.Image.NoMetadata
 				propertiesStyle)
 		{
 		}
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="File" /> for a specified path in the local file
@@ -118,7 +118,7 @@ namespace TagLib.Image.NoMetadata
 		public File (string path) : this (path, ReadStyle.Average)
 		{
 		}
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="File" /> for a specified file abstraction and
@@ -142,7 +142,7 @@ namespace TagLib.Image.NoMetadata
 		{
 			ImageTag = new CombinedImageTag (TagTypes.XMP);
 		}
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="File" /> for a specified file abstraction.
diff --git a/lib/TagLib/TagLib/src/TagLib/Jpeg/Codec.cs b/lib/TagLib/TagLib/src/TagLib/Jpeg/Codec.cs
index cedc281..14f8eef 100644
--- a/lib/TagLib/TagLib/src/TagLib/Jpeg/Codec.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Jpeg/Codec.cs
@@ -32,7 +32,7 @@ namespace TagLib.Jpeg
 	/// </summary>
 	public class Codec : Image.Codec
 	{
-		
+
 		/// <summary>
 		///    Gets a text description of the media represented by the
 		///    current instance.
@@ -43,7 +43,7 @@ namespace TagLib.Jpeg
 		/// </value>
 		public override string Description { get { return "JFIF File"; } }
 
-		
+
 		/// <summary>
 		///    Constructs a new <see cref="Codec" /> with the given width
 		///    and height.
diff --git a/lib/TagLib/TagLib/src/TagLib/Jpeg/File.cs b/lib/TagLib/TagLib/src/TagLib/Jpeg/File.cs
index 38e5ccb..cc41276 100644
--- a/lib/TagLib/TagLib/src/TagLib/Jpeg/File.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Jpeg/File.cs
@@ -50,41 +50,41 @@ namespace TagLib.Jpeg
 	[SupportedMimeType("image/jpeg")]
 	public class File : TagLib.Image.ImageBlockFile
 	{
-		
+
 		/// <summary>
 		///    The magic bits used to recognize an Exif segment
 		/// </summary>
 		private static readonly string EXIF_IDENTIFIER = "Exif\0\0";
-		
+
 		/// <summary>
 		///    Standard (empty) JFIF header to add, if no one is contained
 		/// </summary>
 		private static readonly byte [] BASIC_JFIF_HEADER = new byte [] {
 			// segment maker
 			0xFF, (byte) Marker.APP0,
-			
+
 			// segment size
 			0x00, 0x10,
-			
+
 			// segment data
 			0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01,
 			0x01, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00
 		};
 
-		
+
 #region Private Fields
-		
+
 		/// <summary>
 		///    Contains the media properties.
 		/// </summary>
 		private Properties properties;
-		
+
 		/// <summary>
 		///    For now, we do not allow to change the jfif header. As long as this is
 		///    the case, the header is kept as it is.
 		/// </summary>
 		private ByteVector jfif_header = null;
-		
+
 		/// <summary>
 		///    The image width, as parsed from the Frame
 		/// </summary>
@@ -96,13 +96,13 @@ namespace TagLib.Jpeg
 		ushort height;
 
 		/// <summary>
-		///    Quality of the image, stored as we parse the file 
+		///    Quality of the image, stored as we parse the file
 		/// </summary>
 		int quality;
-		
-#endregion		
-		
-#region Constructors		
+
+#endregion
+
+#region Constructors
 
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
@@ -126,7 +126,7 @@ namespace TagLib.Jpeg
 				propertiesStyle)
 		{
 		}
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="File" /> for a specified path in the local file
@@ -142,7 +142,7 @@ namespace TagLib.Jpeg
 		public File (string path) : this (path, ReadStyle.Average)
 		{
 		}
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="File" /> for a specified file abstraction and
@@ -166,7 +166,7 @@ namespace TagLib.Jpeg
 		{
 			Read (propertiesStyle);
 		}
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="File" /> for a specified file abstraction.
@@ -183,11 +183,11 @@ namespace TagLib.Jpeg
 			: this (abstraction, ReadStyle.Average)
 		{
 		}
-		
+
 #endregion
 
 #region Public Properties
-		
+
 		/// <summary>
 		///    Gets the media properties of the file represented by the
 		///    current instance.
@@ -200,9 +200,9 @@ namespace TagLib.Jpeg
 		public override TagLib.Properties Properties {
 			get { return properties; }
 		}
-		
+
 #endregion
-		
+
 #region Public Methods
 
 		/// <summary>
@@ -213,17 +213,17 @@ namespace TagLib.Jpeg
 		{
 			if (!Writeable || PossiblyCorrupt)
 				throw new InvalidOperationException ("File not writeable. Corrupt metadata?");
-			
+
 			Mode = AccessMode.Write;
 			try {
 				WriteMetadata ();
-				
+
 				TagTypesOnDisk = TagTypes;
 			} finally {
 				Mode = AccessMode.Closed;
 			}
 		}
-		
+
 #endregion
 
 #region Private Methods
@@ -241,20 +241,20 @@ namespace TagLib.Jpeg
 			Mode = AccessMode.Read;
 			try {
 				ImageTag = new CombinedImageTag (TagTypes.XMP | TagTypes.TiffIFD | TagTypes.JpegComment);
-				
+
 				ValidateHeader ();
 				ReadMetadata ();
-				
+
 				TagTypesOnDisk = TagTypes;
-				
+
 				if (propertiesStyle != ReadStyle.None)
 					properties = ExtractProperties ();
-				
+
 			} finally {
 				Mode = AccessMode.Closed;
 			}
 		}
-		
+
 		/// <summary>
 		///    Attempts to extract the media properties of the main
 		///    photo.
@@ -266,13 +266,13 @@ namespace TagLib.Jpeg
 		/// </returns>
 		private Properties ExtractProperties ()
 		{
-			if (width > 0 && height > 0) 
+			if (width > 0 && height > 0)
 				return new Properties (TimeSpan.Zero, new Codec (width, height, quality));
 
 			return null;
 
 		}
-		
+
 		/// <summary>
 		///    Validates if the opened file is actually a JPEG.
 		/// </summary>
@@ -282,8 +282,8 @@ namespace TagLib.Jpeg
 			if (segment.ToUShort () != 0xFFD8)
 				throw new CorruptFileException ("Expected SOI marker at the start of the file.");
 		}
-		
-		
+
+
 		/// <summary>
 		///    Reads a segment marker for a segment starting at current position.
 		///    The second byte of the marker is returned, since the first is equal
@@ -293,19 +293,19 @@ namespace TagLib.Jpeg
 		///    A <see cref="TagLib.Jpeg.Marker"/> with the second byte of the segment marker.
 		/// </returns>
 		private Marker ReadSegmentMarker ()
-		{			
+		{
 			ByteVector segment_header = ReadBlock (2);
-			
+
 			if (segment_header.Count != 2)
 				throw new CorruptFileException ("Could not read enough bytes for segment maker");
-			
+
 			if (segment_header[0] != 0xFF)
 				throw new CorruptFileException ("Start of Segment expected at " + (Tell - 2));
-			
+
 			return (Marker)segment_header[1];
 		}
-		
-		
+
+
 		/// <summary>
 		///    Reads the size of a segment at the current position.
 		/// </summary>
@@ -315,26 +315,33 @@ namespace TagLib.Jpeg
 		private ushort ReadSegmentSize ()
 		{
 			long position = Tell;
-			
+
 			ByteVector segment_size_bytes = ReadBlock (2);
-			
+
 			if (segment_size_bytes.Count != 2)
 				throw new CorruptFileException ("Could not read enough bytes to determine segment size");
-			
+
 			ushort segment_size = segment_size_bytes.ToUShort ();
-			
+
 			// the size itself must be contained in the segment size
 			// so the smallest (theoretically) possible number of bytes if 2
 			if (segment_size < 2)
 				throw new CorruptFileException (String.Format ("Invalid segment size ({0} bytes)", segment_size));
-			
-			if (position + segment_size >= Length)
+
+			long length = 0;
+			try {
+				length = Length;
+			} catch (Exception) {
+				// Probably not supported by stream.
+			}
+
+			if (length > 0 && position + segment_size >= length)
 				throw new CorruptFileException ("Segment size exceeds file size");
-			
+
 			return segment_size;
 		}
-		
-		
+
+
 		/// <summary>
 		///    Extracts the metadata from the current file by reading every segment in file.
 		///    Method should be called with read position at first segment marker.
@@ -344,25 +351,25 @@ namespace TagLib.Jpeg
 			// loop while marker is not EOI and not the data segment
 			while (true) {
 				Marker marker = ReadSegmentMarker ();
-				
+
 				// we stop parsing when the end of file (EOI) or the begin of the
 				// data segment is reached (SOS)
 				// the second case is a trade-off between tolerant and fast parsing
-			 	if (marker == Marker.EOI || marker == Marker.SOS)
+				if (marker == Marker.EOI || marker == Marker.SOS)
 					break;
 
 				long position = Tell;
 				ushort segment_size = ReadSegmentSize ();
-				
+
 				// segment size contains 2 bytes of the size itself, so the
 				// pure data size is this (and the cast is save)
 				ushort data_size = (ushort) (segment_size - 2);
-				
+
 				switch (marker) {
 				case Marker.APP0:	// possibly JFIF header
 					ReadJFIFHeader (data_size);
 					break;
-				
+
 				case Marker.APP1:	// possibly Exif or Xmp data found
 					ReadAPP1Segment (data_size);
 					break;
@@ -390,7 +397,7 @@ namespace TagLib.Jpeg
 				Seek (position + segment_size, SeekOrigin.Begin);
 			}
 		}
-				
+
 		/// <summary>
 		///    Reads a JFIF header at current position
 		/// </summary>
@@ -400,16 +407,16 @@ namespace TagLib.Jpeg
 			// SOI marker + APP0 Marker + segment size = 6 bytes
 			if (Tell != 6)
 				return;
-			
+
 			if (ReadBlock (5).ToString ().Equals ("JFIF\0")) {
-				
+
 				// store the JFIF header as it is
 				Seek (2, SeekOrigin.Begin);
 				jfif_header = ReadBlock (length + 2 + 2);
-				
+
 				AddMetadataBlock (2, length + 2 + 2);
 			}
-			
+
 		}
 
 		/// <summary>
@@ -422,7 +429,7 @@ namespace TagLib.Jpeg
 		{
 			long position = Tell;
 			ByteVector data = null;
-			
+
 			// for an Exif segment, the data block consists of 14 bytes of:
 			//    * 6 bytes Exif identifier string
 			//    * 2 bytes bigendian indication MM (or II)
@@ -432,23 +439,23 @@ namespace TagLib.Jpeg
 			//    the last two points are alreay encoded according to
 			//    big- or littleendian
 			int exif_header_length = 14;
-			
+
 			// could be an Exif segment
 			if ((ImageTag.TagTypes & TagLib.TagTypes.TiffIFD) == 0x00 && length >= exif_header_length) {
-				
+
 				data = ReadBlock (exif_header_length);
-				
+
 				if (data.Count == exif_header_length
 				    && data.Mid (0, 6).ToString ().Equals (EXIF_IDENTIFIER)) {
-					
+
 					bool is_bigendian = data.Mid (6, 2).ToString ().Equals ("MM");
-					
+
 					ushort magic = data.Mid (8, 2).ToUShort (is_bigendian);
 					if (magic != 42)
 						throw new Exception (String.Format ("Invalid TIFF magic: {0}", magic));
-					
+
 					uint ifd_offset = data.Mid (10, 4).ToUInt (is_bigendian);
-					
+
 					var exif = new IFDTag ();
 					var reader = new IFDReader (this, is_bigendian, exif.Structure, position + 6, ifd_offset, (uint) (length - 6));
 					reader.Read ();
@@ -459,12 +466,12 @@ namespace TagLib.Jpeg
 					return;
 				}
 			}
-			
+
 			int xmp_header_length = XmpTag.XAP_NS.Length + 1;
-			
+
 			// could be an Xmp segment
 			if ((ImageTag.TagTypes & TagLib.TagTypes.XMP) == 0x00 && length >= xmp_header_length) {
-				
+
 				// if already data is read for determining the Exif segment,
 				// just read the remaining bytes.
 				// NOTE: that (exif_header_length < xmp_header_length) holds
@@ -472,18 +479,18 @@ namespace TagLib.Jpeg
 					data = ReadBlock (xmp_header_length);
 				else
 					data.Add (ReadBlock (xmp_header_length - exif_header_length));
-				
+
 				if (data.ToString ().Equals (XmpTag.XAP_NS + "\0")) {
 					ByteVector xmp_data = ReadBlock (length - xmp_header_length);
-					
+
 					ImageTag.AddTag (new XmpTag (xmp_data.ToString ()));
-					
+
 					AddMetadataBlock (position - 4, length + 4);
 				}
 			}
 		}
-		
-		
+
+
 		/// <summary>
 		///    Writes the metadata back to file. All metadata is stored in the first segments
 		///    of the file.
@@ -493,21 +500,21 @@ namespace TagLib.Jpeg
 			// first render all metadata segments to a ByteVector before the
 			// file is touched ...
 			ByteVector data = new ByteVector ();
-			
+
 			// existing jfif header is retained, otherwise a standard one
 			// is created
 			if (jfif_header != null)
 				data.Add (jfif_header);
 			else
 				data.Add (BASIC_JFIF_HEADER);
-			
+
 			data.Add (RenderExifSegment ());
 			data.Add (RenderXMPSegment ());
 			data.Add (RenderCOMSegment ());
-			
+
 			SaveMetadata (data, 2);
 		}
-		
+
 		/// <summary>
 		///    Creates a <see cref="ByteVector"/> for the Exif segment of this file
 		/// </summary>
@@ -521,21 +528,21 @@ namespace TagLib.Jpeg
 			IFDTag exif = ImageTag.Exif;
 			if (exif == null)
 				return null;
-			
+
 			// first IFD starts at 8
 			uint first_ifd_offset = 8;
-			
+
 			// Render IFD0
 			// FIXME: store endianess and use it here
 			var renderer = new IFDRenderer (true, exif.Structure, first_ifd_offset);
 			ByteVector exif_data = renderer.Render ();
-			
+
 			uint segment_size = (uint) (first_ifd_offset + exif_data.Count + 2 + 6);
-			
+
 			// do not render data segments, which cannot fit into the possible segment size
 			if (segment_size > ushort.MaxValue)
 				throw new Exception ("Exif Segment is too big to render");
-			
+
 			// Create whole segment
 			ByteVector data = new ByteVector (new byte [] { 0xFF, (byte) Marker.APP1 });
 			data.Add (ByteVector.FromUShort ((ushort) segment_size));
@@ -543,14 +550,14 @@ namespace TagLib.Jpeg
 			data.Add (ByteVector.FromString ("MM", StringType.Latin1));
 			data.Add (ByteVector.FromUShort (42));
 			data.Add (ByteVector.FromUInt (first_ifd_offset));
-			
+
 			// Add ifd data itself
 			data.Add (exif_data);
-			
+
 			return data;
 		}
-		
-		
+
+
 		/// <summary>
 		///    Creates a <see cref="ByteVector"/> for the Xmp segment of this file
 		/// </summary>
@@ -564,25 +571,25 @@ namespace TagLib.Jpeg
 			XmpTag xmp = ImageTag.Xmp;
 			if (xmp == null)
 				return null;
-			
+
 			ByteVector xmp_data = XmpTag.XAP_NS + "\0";
 			xmp_data.Add (xmp.Render ());
-			
+
 			uint segment_size = (uint) (2 + xmp_data.Count);
-			
+
 			// do not render data segments, which cannot fit into the possible segment size
 			if (segment_size > ushort.MaxValue)
 				throw new Exception ("XMP Segment is too big to render");
-			
+
 			// Create whole segment
 			ByteVector data = new ByteVector (new byte [] { 0xFF, (byte) Marker.APP1 });
 			data.Add (ByteVector.FromUShort ((ushort) segment_size));
 			data.Add (xmp_data);
-			
+
 			return data;
 		}
-		
-		
+
+
 		/// <summary>
 		///    Reads a COM segment to find the JPEG comment.
 		/// </summary>
@@ -593,11 +600,11 @@ namespace TagLib.Jpeg
 		{
 			if ((ImageTag.TagTypes & TagLib.TagTypes.JpegComment) != 0x00)
 				return;
-			
+
 			long position = Tell;
-			
+
 			JpegCommentTag com_tag;
-			
+
 			if (length == 0) {
 				 com_tag = new JpegCommentTag ();
 			} else {
@@ -610,11 +617,11 @@ namespace TagLib.Jpeg
 				else
 					com_tag = new JpegCommentTag (data.Mid (0, terminator).ToString ());
 			}
-			
+
 			ImageTag.AddTag (com_tag);
 			AddMetadataBlock (position - 4, length + 4);
 		}
-		
+
 		/// <summary>
 		///    Creates a <see cref="ByteVector"/> for the comment segment of this file
 		/// </summary>
@@ -628,23 +635,23 @@ namespace TagLib.Jpeg
 			JpegCommentTag com_tag = GetTag (TagTypes.JpegComment) as JpegCommentTag;
 			if (com_tag == null)
 				return null;
-			
+
 			// create comment data
 			ByteVector com_data =
 				ByteVector.FromString (com_tag.Value + "\0", StringType.Latin1);
-			
+
 			uint segment_size = (uint) (2 + com_data.Count);
-			
+
 			// do not render data segments, which cannot fit into the possible segment size
 			if (segment_size > ushort.MaxValue)
 				throw new Exception ("Comment Segment is too big to render");
-			
+
 			// create segment
 			ByteVector data = new ByteVector (new byte [] { 0xFF, (byte) Marker.COM });
 			data.Add (ByteVector.FromUShort ((ushort) segment_size));
-			
+
 			data.Add (com_data);
-			
+
 			return data;
 		}
 
@@ -662,7 +669,7 @@ namespace TagLib.Jpeg
 #pragma warning disable 219 // Assigned, never read
 			byte p = ReadBlock (1)[0];	//precision
 #pragma warning restore 219
-			
+
 			//FIXME: according to specs, height could be 0 here, and should be retrieved from the DNL marker
 			height = ReadBlock (2).ToUShort ();
 			width = ReadBlock (2).ToUShort ();
@@ -706,14 +713,14 @@ namespace TagLib.Jpeg
 						}
 					}
 				}
-				
+
 				if (table != null) {
 					double local_q;
 					cumsf /= 64.0;		// mean scale factor
 					//cumfs2 /= 64.0;
 					//double variance = cumsf2 - (cumsf * cumsf);
 
-					if (allones) 
+					if (allones)
 						local_q = 100.0;
 					else if (cumsf <= 100.0)
 						local_q = (200.0 - cumsf) / 2.0;
diff --git a/lib/TagLib/TagLib/src/TagLib/Jpeg/JpegCommentTag.cs b/lib/TagLib/TagLib/src/TagLib/Jpeg/JpegCommentTag.cs
index 5421d43..8369386 100644
--- a/lib/TagLib/TagLib/src/TagLib/Jpeg/JpegCommentTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Jpeg/JpegCommentTag.cs
@@ -44,7 +44,7 @@ namespace TagLib.Jpeg
 		{
 			Value = value;
 		}
-		
+
 		/// <summary>
 		///    Constructor. Creates a new empty comment.
 		/// </summary>
@@ -55,12 +55,12 @@ namespace TagLib.Jpeg
 #endregion
 
 #region Public Properties
-		
+
 		/// <summary>
 		///    The value of the comment represented by the current instance.
 		/// </summary>
 		public string Value { get; set; }
-		
+
 		/// <summary>
 		///    Gets or sets the comment for the image described
 		///    by the current instance.
@@ -73,7 +73,7 @@ namespace TagLib.Jpeg
 			get { return Value; }
 			set { Value = value; }
 		}
-		
+
 #endregion
 
 #region Public Methods
@@ -87,7 +87,7 @@ namespace TagLib.Jpeg
 		public override TagTypes TagTypes {
 			get { return TagTypes.JpegComment; }
 		}
-		
+
 		/// <summary>
 		///    Clears the values stored in the current instance.
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/Jpeg/Marker.cs b/lib/TagLib/TagLib/src/TagLib/Jpeg/Marker.cs
index 3c1bed5..457acde 100644
--- a/lib/TagLib/TagLib/src/TagLib/Jpeg/Marker.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Jpeg/Marker.cs
@@ -104,7 +104,7 @@ namespace TagLib.Jpeg
 		///    Define Huffman table(s)
 		/// </summary>
 		DHT = 0xc4,
-		
+
 		/// <summary>
 		///    Define arithmetic coding conditioning(s)
 		/// </summary>
@@ -342,7 +342,7 @@ namespace TagLib.Jpeg
 		JPG13,
 
 		/// <summary>
-		///   Comment 
+		///   Comment
 		/// </summary>
 		COM = 0xfe,
 	}
diff --git a/lib/TagLib/TagLib/src/TagLib/Jpeg/Table.cs b/lib/TagLib/TagLib/src/TagLib/Jpeg/Table.cs
index cc5bf55..89ed164 100644
--- a/lib/TagLib/TagLib/src/TagLib/Jpeg/Table.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Jpeg/Table.cs
@@ -42,8 +42,8 @@ namespace TagLib.Jpeg
 			87,  69,  55,  56,  80, 109,  81,  87,
 			95,  98, 103, 104, 103,  62,  77, 113,
 			121, 112, 100, 120,  92, 101, 103, 99
-		};              
-                        
+		};
+
 		/// <summary>
 		///    Standard Chrominance Quantization table
 		///
@@ -58,7 +58,6 @@ namespace TagLib.Jpeg
 			99,  99,  99,  99,  99,  99,  99,  99,
 			99,  99,  99,  99,  99,  99,  99,  99,
 			99,  99,  99,  99,  99,  99,  99,  99
-		};                      
+		};
 	}
 }
-
diff --git a/lib/TagLib/TagLib/src/TagLib/Png/File.cs b/lib/TagLib/TagLib/src/TagLib/Png/File.cs
index 43a00e3..5a6daee 100644
--- a/lib/TagLib/TagLib/src/TagLib/Png/File.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Png/File.cs
@@ -574,8 +574,8 @@ namespace TagLib.Png
 			byte compression_flag = data[terminator_index + 1];
 			byte compression_method = data[terminator_index + 2];
 
-			string language = ReadTerminatedString (data, terminator_index + 3, out terminator_index);
-			string translated_keyword = ReadTerminatedString (data, terminator_index + 1, out terminator_index);
+			//string language = ReadTerminatedString (data, terminator_index + 3, out terminator_index);
+			//string translated_keyword = ReadTerminatedString (data, terminator_index + 1, out terminator_index);
 
 			ByteVector txt_data = data.Mid (terminator_index + 1);
 
diff --git a/lib/TagLib/TagLib/src/TagLib/Properties.cs b/lib/TagLib/TagLib/src/TagLib/Properties.cs
index be3bc8b..bc7cad4 100644
--- a/lib/TagLib/TagLib/src/TagLib/Properties.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Properties.cs
@@ -416,17 +416,17 @@ namespace TagLib {
 					if (codec == null ||
 						(codec.MediaTypes & MediaTypes.Photo) == 0)
 						continue;
-					
+
 					IPhotoCodec photo = codec as IPhotoCodec;
-					
+
 					if (photo != null && photo.PhotoWidth != 0)
 						return photo.PhotoWidth;
 				}
-				
+
 				return 0;
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the height of the photo represented by the current
 		///    instance.
@@ -441,13 +441,13 @@ namespace TagLib {
 					if (codec == null ||
 						(codec.MediaTypes & MediaTypes.Photo) == 0)
 						continue;
-					
+
 					IPhotoCodec photo = codec as IPhotoCodec;
-					
+
 					if (photo != null && photo.PhotoHeight != 0)
 						return photo.PhotoHeight;
 				}
-				
+
 				return 0;
 			}
 		}
@@ -467,17 +467,17 @@ namespace TagLib {
 					if (codec == null ||
 						(codec.MediaTypes & MediaTypes.Photo) == 0)
 						continue;
-					
+
 					IPhotoCodec photo = codec as IPhotoCodec;
-					
+
 					if (photo != null && photo.PhotoQuality != 0)
 						return photo.PhotoQuality;
 				}
-				
+
 				return 0;
 			}
 		}
-	
+
 
 		#endregion
 	}
diff --git a/lib/TagLib/TagLib/src/TagLib/Tag.cs b/lib/TagLib/TagLib/src/TagLib/Tag.cs
index 8046783..e155cd2 100644
--- a/lib/TagLib/TagLib/src/TagLib/Tag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Tag.cs
@@ -94,17 +94,17 @@ namespace TagLib {
 		///    TIFF IFD Tag
 		/// </summary>
 		TiffIFD = 0x00000400,
-		
+
 		/// <summary>
 		///    XMP Tag
 		/// </summary>
 		XMP = 0x00000800,
-		
+
 		/// <summary>
 		///    Jpeg Comment Tag
 		/// </summary>
 		JpegComment = 0x00001000,
-		
+
 		/// <summary>
 		///    Gif Comment Tag
 		/// </summary>
diff --git a/lib/TagLib/TagLib/src/TagLib/Tiff/Codec.cs b/lib/TagLib/TagLib/src/TagLib/Tiff/Codec.cs
index 935b941..acb753f 100644
--- a/lib/TagLib/TagLib/src/TagLib/Tiff/Codec.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Tiff/Codec.cs
@@ -31,7 +31,7 @@ namespace TagLib.Tiff
 	public class Codec : Image.Codec
 	{
 		private string description = "TIFF File";
-		
+
 		/// <summary>
 		///    Gets a text description of the media represented by the
 		///    current instance.
@@ -42,7 +42,7 @@ namespace TagLib.Tiff
 		/// </value>
 		public override string Description { get { return description; } }
 
-		
+
 		/// <summary>
 		///    Constructs a new <see cref="Codec" /> with the given width
 		///    and height.
@@ -58,7 +58,7 @@ namespace TagLib.Tiff
 		/// </returns>
 		public Codec (int width, int height)
 			: base (width, height) {}
-		
+
 		/// <summary>
 		///    Constructs a new <see cref="Codec" /> with the given width
 		///    and height.
diff --git a/lib/TagLib/TagLib/src/TagLib/Tiff/Cr2/File.cs b/lib/TagLib/TagLib/src/TagLib/Tiff/Cr2/File.cs
index 23afabb..921bad1 100644
--- a/lib/TagLib/TagLib/src/TagLib/Tiff/Cr2/File.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Tiff/Cr2/File.cs
@@ -38,7 +38,7 @@ namespace TagLib.Tiff.Cr2
 	/// </summary>
 	[SupportedMimeType("taglib/cr2", "cr2")]
 	[SupportedMimeType("image/cr2")]
-	[SupportedMimeType("image/x-canon-cr")]
+	[SupportedMimeType("image/x-canon-cr2")]
 	public class File : TagLib.Tiff.BaseTiffFile
 	{
 #region private fields
diff --git a/lib/TagLib/TagLib/src/TagLib/Tiff/File.cs b/lib/TagLib/TagLib/src/TagLib/Tiff/File.cs
index f7dc008..97ca7d9 100644
--- a/lib/TagLib/TagLib/src/TagLib/Tiff/File.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Tiff/File.cs
@@ -43,15 +43,15 @@ namespace TagLib.Tiff
 	public class File : BaseTiffFile
 	{
 #region Private Fields
-		
+
 		/// <summary>
 		///    Contains the media properties.
 		/// </summary>
 		private Properties properties;
-		
-#endregion		
-		
-#region Constructors		
+
+#endregion
+
+#region Constructors
 
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
@@ -75,7 +75,7 @@ namespace TagLib.Tiff
 				propertiesStyle)
 		{
 		}
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="File" /> for a specified path in the local file
@@ -91,7 +91,7 @@ namespace TagLib.Tiff
 		public File (string path) : base (path)
 		{
 		}
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="File" /> for a specified file abstraction and
@@ -114,7 +114,7 @@ namespace TagLib.Tiff
 		             ReadStyle propertiesStyle) : base (abstraction)
 		{
 			ImageTag = new CombinedImageTag (TagTypes.TiffIFD | TagTypes.XMP);
-			
+
 			Mode = AccessMode.Read;
 			try {
 				Read (propertiesStyle);
@@ -123,7 +123,7 @@ namespace TagLib.Tiff
 				Mode = AccessMode.Closed;
 			}
 		}
-		
+
 		/// <summary>
 		///    Constructs and initializes a new instance of <see
 		///    cref="File" /> for a specified file abstraction.
@@ -139,11 +139,11 @@ namespace TagLib.Tiff
 		protected File (IFileAbstraction abstraction) : base (abstraction)
 		{
 		}
-		
+
 #endregion
-		
+
 #region Public Properties
-		
+
 		/// <summary>
 		///    Gets the media properties of the file represented by the
 		///    current instance.
@@ -156,11 +156,11 @@ namespace TagLib.Tiff
 		public override TagLib.Properties Properties {
 			get { return properties; }
 		}
-		
+
 #endregion
-		
+
 #region Public Methods
-		
+
 		/// <summary>
 		///    Saves the changes made in the current instance to the
 		///    file it represents.
@@ -170,7 +170,7 @@ namespace TagLib.Tiff
 			Mode = AccessMode.Write;
 			try {
 				WriteFile ();
-				
+
 				TagTypesOnDisk = TagTypes;
 			} finally {
 				Mode = AccessMode.Closed;
@@ -190,20 +190,20 @@ namespace TagLib.Tiff
 			IFDTag exif = ImageTag.Exif;
 			if (exif == null)
 				throw new Exception ("Tiff file without tags");
-			
+
 			UpdateTags (exif);
-			
+
 			// first IFD starts at 8
 			uint first_ifd_offset = 8;
 			ByteVector data = RenderHeader (first_ifd_offset);
-			
+
 			var renderer = new IFDRenderer (IsBigEndian, exif.Structure, first_ifd_offset);
-			
+
 			data.Add (renderer.Render ());
-			
+
 			Insert (data, 0, Length);
 		}
-		
+
 		/// <summary>
 		///    Update the XMP stored in the Tiff IFD
 		/// </summary>
@@ -214,12 +214,12 @@ namespace TagLib.Tiff
 		{
 			// update the XMP entry
 			exif.Structure.RemoveTag (0, (ushort) IFDEntryTag.XMP);
-			
+
 			XmpTag xmp = ImageTag.Xmp;
 			if (xmp != null)
 				exif.Structure.AddEntry (0, new ByteVectorIFDEntry ((ushort) IFDEntryTag.XMP, xmp.Render ()));
 		}
-		
+
 		/// <summary>
 		///    Reads the file with a specified read style.
 		/// </summary>
@@ -234,7 +234,7 @@ namespace TagLib.Tiff
 			try {
 				uint first_ifd_offset = ReadHeader ();
 				ReadIFD (first_ifd_offset);
-				
+
 				// Find XMP data
 				var xmp_entry = ImageTag.Exif.Structure.GetEntry (0, (ushort) IFDEntryTag.XMP) as ByteVectorIFDEntry;
 				if (xmp_entry != null) {
@@ -265,7 +265,7 @@ namespace TagLib.Tiff
 
 			IFDTag tag = GetTag (TagTypes.TiffIFD) as IFDTag;
 			IFDStructure structure = tag.Structure;
-			
+
 			width = (int) (structure.GetLongValue (0, (ushort) IFDEntryTag.ImageWidth) ?? 0);
 			height = (int) (structure.GetLongValue (0, (ushort) IFDEntryTag.ImageLength) ?? 0);
 
diff --git a/lib/TagLib/TagLib/src/TagLib/Tiff/Nef/File.cs b/lib/TagLib/TagLib/src/TagLib/Tiff/Nef/File.cs
index 6c959a7..fc2127e 100644
--- a/lib/TagLib/TagLib/src/TagLib/Tiff/Nef/File.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Tiff/Nef/File.cs
@@ -165,6 +165,5 @@ namespace TagLib.Tiff.Nef
 			return new Codec (width, height, "Nikon Raw File");
 		}
 
-
 	}
 }
diff --git a/lib/TagLib/TagLib/src/TagLib/Tiff/Pef/File.cs b/lib/TagLib/TagLib/src/TagLib/Tiff/Pef/File.cs
new file mode 100644
index 0000000..9014862
--- /dev/null
+++ b/lib/TagLib/TagLib/src/TagLib/Tiff/Pef/File.cs
@@ -0,0 +1,169 @@
+//
+// File.cs: Provides tagging for Pentax CR2 files
+//
+// Author:
+//   Ruben Vermeersch (ruben at savanne.be)
+//
+// Copyright (C) 2010 Ruben Vermeersch
+//
+// This library is free software; you can redistribute it and/or modify
+// it  under the terms of the GNU Lesser General Public License version
+// 2.1 as published by the Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+// USA
+//
+
+using System;
+using System.Collections.Generic;
+
+using TagLib;
+using TagLib.Image;
+using TagLib.IFD;
+using TagLib.IFD.Tags;
+
+namespace TagLib.Tiff.Pef
+{
+
+	/// <summary>
+	///    This class extends <see cref="TagLib.Tiff.BaseTiffFile" /> to provide tagging
+	///    for PEF image files.
+	/// </summary>
+	[SupportedMimeType("taglib/pef", "pef")]
+	[SupportedMimeType("image/pef")]
+	[SupportedMimeType("image/x-pentax-pef")]
+	public class File : TagLib.Tiff.File
+	{
+
+#region public Properties
+
+		/// <summary>
+		///    Indicates if tags can be written back to the current file or not
+		/// </summary>
+		/// <value>
+		///    A <see cref="bool" /> which is true if tags can be written to the
+		///    current file, otherwise false.
+		/// </value>
+		public override bool Writeable {
+			get { return false; }
+		}
+
+
+#endregion
+
+#region constructors
+
+		/// <summary>
+		///    Constructs and initializes a new instance of <see
+		///    cref="File" /> for a specified path in the local file
+		///    system and specified read style.
+		/// </summary>
+		/// <param name="path">
+		///    A <see cref="string" /> object containing the path of the
+		///    file to use in the new instance.
+		/// </param>
+		/// <param name="propertiesStyle">
+		///    A <see cref="ReadStyle" /> value specifying at what level
+		///    of accuracy to read the media properties, or <see
+		///    cref="ReadStyle.None" /> to ignore the properties.
+		/// </param>
+		/// <exception cref="ArgumentNullException">
+		///    <paramref name="path" /> is <see langword="null" />.
+		/// </exception>
+		public File (string path, ReadStyle propertiesStyle)
+			: this (new File.LocalFileAbstraction (path),
+				propertiesStyle)
+		{
+		}
+
+		/// <summary>
+		///    Constructs and initializes a new instance of <see
+		///    cref="File" /> for a specified path in the local file
+		///    system.
+		/// </summary>
+		/// <param name="path">
+		///    A <see cref="string" /> object containing the path of the
+		///    file to use in the new instance.
+		/// </param>
+		/// <exception cref="ArgumentNullException">
+		///    <paramref name="path" /> is <see langword="null" />.
+		/// </exception>
+		public File (string path) : this (path, ReadStyle.Average)
+		{
+		}
+
+		/// <summary>
+		///    Constructs and initializes a new instance of <see
+		///    cref="File" /> for a specified file abstraction and
+		///    specified read style.
+		/// </summary>
+		/// <param name="abstraction">
+		///    A <see cref="IFileAbstraction" /> object to use when
+		///    reading from and writing to the file.
+		/// </param>
+		/// <param name="propertiesStyle">
+		///    A <see cref="ReadStyle" /> value specifying at what level
+		///    of accuracy to read the media properties, or <see
+		///    cref="ReadStyle.None" /> to ignore the properties.
+		/// </param>
+		/// <exception cref="ArgumentNullException">
+		///    <paramref name="abstraction" /> is <see langword="null"
+		///    />.
+		/// </exception>
+		public File (File.IFileAbstraction abstraction,
+		             ReadStyle propertiesStyle) : base (abstraction, propertiesStyle)
+		{
+		}
+
+		/// <summary>
+		///    Constructs and initializes a new instance of <see
+		///    cref="File" /> for a specified file abstraction.
+		/// </summary>
+		/// <param name="abstraction">
+		///    A <see cref="IFileAbstraction" /> object to use when
+		///    reading from and writing to the file.
+		/// </param>
+		/// <exception cref="ArgumentNullException">
+		///    <paramref name="abstraction" /> is <see langword="null"
+		///    />.
+		/// </exception>
+		protected File (IFileAbstraction abstraction)
+			: this (abstraction, ReadStyle.Average)
+		{
+		}
+
+#endregion
+
+#region Public Methods
+
+		/// <summary>
+		///    Saves the changes made in the current instance to the
+		///    file it represents.
+		/// </summary>
+		public override void Save ()
+		{
+			throw new NotSupportedException ();
+		}
+
+#endregion
+
+		/// <summary>
+		///    Create a codec that describes the photo properties.
+		/// </summary>
+		/// <returns>
+		///    A <see cref="Codec" /> object.
+		/// </returns>
+		protected override Codec CreateCodec (int width, int height)
+		{
+			return new Codec (width, height, "Pentax Raw File");
+		}
+
+	}
+}
diff --git a/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/File.cs b/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/File.cs
index 30aebe2..a1d98bc 100644
--- a/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/File.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/File.cs
@@ -38,7 +38,10 @@ namespace TagLib.Tiff.Rw2
 	/// </summary>
 	[SupportedMimeType("taglib/rw2", "rw2")]
 	[SupportedMimeType("image/rw2")]
+	[SupportedMimeType("taglib/raw", "raw")]
+	[SupportedMimeType("image/raw")]
 	[SupportedMimeType("image/x-raw")]
+	[SupportedMimeType("image/x-panasonic-raw")]
 	public class File : TagLib.Tiff.BaseTiffFile
 	{
 #region private fields
@@ -214,7 +217,7 @@ namespace TagLib.Tiff.Rw2
 			if (type != TagTypes.TiffIFD)
 				return base.GetTag (type, create);
 
-			ImageTag new_tag = new IFDTag ();
+			ImageTag new_tag = new IFDTag (this);
 			ImageTag.AddTag (new_tag);
 			return new_tag;
 		}
@@ -298,11 +301,16 @@ namespace TagLib.Tiff.Rw2
 			IFDTag tag = GetTag (TagTypes.TiffIFD) as IFDTag;
 			IFDStructure structure = tag.Structure;
 
-			width = (int) (structure.GetLongValue (0, (ushort) IFDEntryTag.ImageWidth) ?? 0);
-			height = (int) (structure.GetLongValue (0, (ushort) IFDEntryTag.ImageLength) ?? 0);
+			width = (int) (structure.GetLongValue (0, 0x07) ?? 0);
+			height = (int) (structure.GetLongValue (0, 0x06) ?? 0);
+
+			var vendor = ImageTag.Make;
+			if (vendor == "LEICA")
+				vendor = "Leica";
+			var desc = String.Format ("{0} RAW File", vendor);
 
 			if (width > 0 && height > 0) {
-				return new Properties (TimeSpan.Zero, new Codec (width, height, "Panasonic RAW File"));
+				return new Properties (TimeSpan.Zero, new Codec (width, height, desc));
 			}
 
 			return null;
diff --git a/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/IFDReader.cs b/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/IFDReader.cs
index 9a77ed0..97eb690 100644
--- a/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/IFDReader.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/IFDReader.cs
@@ -97,7 +97,7 @@ namespace TagLib.Tiff.Rw2
 
 				file.Seek (base_offset + offset, SeekOrigin.Begin);
 				var data = file.ReadBlock ((int) count);
-				var mem_stream = new MemoryStream (data.Data); 
+				var mem_stream = new MemoryStream (data.Data);
 				var res = new StreamJPGAbstraction (mem_stream);
 				(file as Rw2.File).JpgFromRaw = new Jpeg.File (res, ReadStyle.Average);
 
diff --git a/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/IFDTag.cs b/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/IFDTag.cs
index d1acc5f..da949ab 100644
--- a/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/IFDTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Tiff/Rw2/IFDTag.cs
@@ -21,6 +21,8 @@
 // USA
 //
 
+using TagLib.IFD.Tags;
+
 namespace TagLib.Tiff.Rw2
 {
 	/// <summary>
@@ -28,6 +30,56 @@ namespace TagLib.Tiff.Rw2
 	/// </summary>
 	public class IFDTag : TagLib.IFD.IFDTag
 	{
+		private File file;
+
+		internal IFDTag (File file) : base ()
+		{
+			this.file = file;
+		}
+
+		/// <summary>
+		///    Gets the ISO speed the image, the current instance belongs
+		///    to, was taken with.
+		/// </summary>
+		/// <value>
+		///    A <see cref="System.Nullable"/> with the ISO speed as defined in ISO 12232.
+		/// </value>
+		/// <remarks>
+		///    <para>Panasonic stores these in a somewhat unstandard location.</para>
+		/// </remarks>
+		public override uint? ISOSpeedRatings {
+			// TODO: The value in JPGFromRAW should probably be used as well.
+			get {
+				return Structure.GetLongValue (0, (ushort) PanasonicMakerNoteEntryTag.ISO);
+			}
+			set {
+				Structure.SetLongValue (0, (ushort) PanasonicMakerNoteEntryTag.ISO, value.HasValue ? (uint) value : 0);
+			}
+		}
 
+		/// <summary>
+		///    Gets the focal length the image, the current instance belongs
+		///    to, was taken with, assuming a 35mm film camera.
+		/// </summary>
+		/// <value>
+		///    A <see cref="System.Nullable"/> with the focal length in 35mm equivalent in millimeters.
+		/// </value>
+		/// <remarks>
+		///    <para>Panasonic stores these in a somewhat unstandard location.</para>
+		/// </remarks>
+		public override uint? FocalLengthIn35mmFilm {
+			get {
+				var jpg = file.JpgFromRaw;
+				if (jpg == null)
+					return base.FocalLengthIn35mmFilm;
+				var tag = jpg.GetTag (TagTypes.TiffIFD, true) as Image.ImageTag;
+				if (tag == null)
+					return base.FocalLengthIn35mmFilm;
+				return tag.FocalLengthIn35mmFilm ?? base.FocalLengthIn35mmFilm;
+			}
+			set {
+				(file.JpgFromRaw.GetTag (TagTypes.TiffIFD, true) as Image.ImageTag).FocalLengthIn35mmFilm = value;
+			}
+		}
 	}
 }
diff --git a/lib/TagLib/TagLib/src/TagLib/Xmp/XmlNodeExtensions.cs b/lib/TagLib/TagLib/src/TagLib/Xmp/XmlNodeExtensions.cs
index 0accef5..38aff68 100644
--- a/lib/TagLib/TagLib/src/TagLib/Xmp/XmlNodeExtensions.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Xmp/XmlNodeExtensions.cs
@@ -87,7 +87,7 @@ namespace TagLib.Xmp
 		//		anyURI - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms )
 		public static bool IsPropertyAttribute (this XmlNode node)
 		{
-			return node is XmlAttribute && 
+			return node is XmlAttribute &&
 				!node.IsCoreSyntax () &&
 				!node.Is (XmpTag.RDF_NS, XmpTag.DESCRIPTION_URI) &&
 				!node.Is (XmpTag.RDF_NS, XmpTag.LI_URI) &&
diff --git a/lib/TagLib/TagLib/src/TagLib/Xmp/XmpNode.cs b/lib/TagLib/TagLib/src/TagLib/Xmp/XmpNode.cs
index d8c233f..73ff820 100644
--- a/lib/TagLib/TagLib/src/TagLib/Xmp/XmpNode.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Xmp/XmpNode.cs
@@ -35,17 +35,17 @@ namespace TagLib.Xmp
 	{
 
 #region Private Fields
-		
+
 		/// <value>
 		///    The children of the current node
 		/// </value>
 		private List<XmpNode> children;
-	
+
 		/// <value>
 		///    The qualifiers of the current node
 		/// </value>
 		private Dictionary<string, Dictionary<string, XmpNode>> qualifiers;
-		
+
 		/// <value>
 		///    The name of the current node
 		/// </value>
@@ -54,12 +54,12 @@ namespace TagLib.Xmp
 #endregion
 
 #region Properties
-		
+
 		/// <value>
 		///    The namespace the current instance belongs to
 		/// </value>
 		public string Namespace { get; private set; }
-		
+
 		/// <value>
 		///    The name of the current node instance
 		/// </value>
@@ -68,25 +68,25 @@ namespace TagLib.Xmp
 			internal set {
 				if (name != null)
 					throw new Exception ("Cannot change named node");
-				
+
 				if (value == null)
 					throw new ArgumentException ("value");
-				
+
 				name = value;
 			}
 		}
-		
+
 		/// <value>
 		///    The text value of the current node
 		/// </value>
 		public string Value { get; set; }
-		
+
 		/// <value>
 		///    The type of the current node
 		/// </value>
 		public XmpNodeType Type { get; internal set; }
 
-		
+
 		/// <value>
 		///    The number of qualifiers of the current instance
 		/// </value>
@@ -101,7 +101,7 @@ namespace TagLib.Xmp
 				return count;
 			}
 		}
-		
+
 		/// <value>
 		///    The children of the current instance.
 		/// </value>
@@ -111,9 +111,9 @@ namespace TagLib.Xmp
 		}
 
 #endregion
-		
+
 #region Constructors
-		
+
 		/// <summary>
 		///    Constructor.
 		/// </summary>
@@ -155,7 +155,7 @@ namespace TagLib.Xmp
 		}
 
 #endregion
-		
+
 #region Public Methods
 
 		/// <summary>
@@ -168,13 +168,13 @@ namespace TagLib.Xmp
 		{
 			if (node == null || node == this)
 				throw new ArgumentException ("node");
-			
+
 			if (children == null)
 				children = new List<XmpNode> ();
-			
+
 			children.Add (node);
 		}
-		
+
 		/// <summary>
 		///    Removes the given node as child of the current instance
 		/// </summary>
@@ -185,7 +185,7 @@ namespace TagLib.Xmp
 		{
 			if (children == null)
 				return;
-			
+
 			children.Remove (node);
 		}
 
@@ -220,13 +220,13 @@ namespace TagLib.Xmp
 		{
 			if (node == null || node == this)
 				throw new ArgumentException ("node");
-			
+
 			if (qualifiers == null)
 				qualifiers = new Dictionary<string, Dictionary<string, XmpNode>> ();
-			
+
 			if (!qualifiers.ContainsKey (node.Namespace))
 				qualifiers [node.Namespace] = new Dictionary<string, XmpNode> ();
-			
+
 			qualifiers [node.Namespace][node.Name] = node;
 		}
 
@@ -253,7 +253,7 @@ namespace TagLib.Xmp
 				return null;
 			return qualifiers [ns][name];
 		}
-		
+
 		/// <summary>
 		///    Print a debug output of the node.
 		/// </summary>
@@ -261,7 +261,7 @@ namespace TagLib.Xmp
 		{
 			Dump ("");
 		}
-		
+
 		/// <summary>
 		///    Calls the Visitor for this node and every child node.
 		/// </summary>
@@ -271,7 +271,7 @@ namespace TagLib.Xmp
 		public void Accept (XmpNodeVisitor visitor)
 		{
 			visitor.Visit (this);
-			
+
 			// TODO: what is with the qualifiers ?
 			// either add them to be also visited, or add a comment
 			if (children != null) {
@@ -280,7 +280,7 @@ namespace TagLib.Xmp
 				}
 			}
 		}
-		
+
 		/// <summary>
 		///    Renders the current instance as child of the given node to the
 		///    given <see cref="XmlNode"/>
@@ -360,7 +360,7 @@ namespace TagLib.Xmp
 #endregion
 
 #region Internal Methods
-		
+
 		internal void Dump (string prefix) {
 			Console.WriteLine ("{0}{1}{2} ({4}) = \"{3}\"", prefix, Namespace, Name, Value, Type);
 			if (qualifiers != null) {
@@ -379,10 +379,10 @@ namespace TagLib.Xmp
 					child.Dump (prefix+"  ->  ");
 				}
 			}
-		}	
-		
+		}
+
 #endregion
-		
+
 #region Private Methods
 
 		/// <summary>
@@ -392,7 +392,7 @@ namespace TagLib.Xmp
 		/// </summary>
 		private bool IsReallySimpleType {
 			get {
-				return Type == XmpNodeType.Simple && (children == null || children.Count == 0) 
+				return Type == XmpNodeType.Simple && (children == null || children.Count == 0)
 					&& QualifierCount == 0 && (Name != XmpTag.LI_URI || Namespace != XmpTag.RDF_NS);
 			}
 		}
@@ -416,7 +416,7 @@ namespace TagLib.Xmp
 				}
 			}
 		}
-		
+
 		private void AddAllChildrenTo (XmlNode parent)
 		{
 			if (children == null)
@@ -425,7 +425,7 @@ namespace TagLib.Xmp
 				child.RenderInto (parent);
 		}
 #endregion
-		
-		
+
+
 	}
 }
diff --git a/lib/TagLib/TagLib/src/TagLib/Xmp/XmpTag.cs b/lib/TagLib/TagLib/src/TagLib/Xmp/XmpTag.cs
index 1fb0e69..e30a4ca 100644
--- a/lib/TagLib/TagLib/src/TagLib/Xmp/XmpTag.cs
+++ b/lib/TagLib/TagLib/src/TagLib/Xmp/XmpTag.cs
@@ -242,7 +242,7 @@ namespace TagLib.Xmp
 			NodeTree = new XmpNode (String.Empty, String.Empty);
 			nodes = new Dictionary<string, Dictionary<string, XmpNode>> ();
 		}
-		
+
 		/// <summary>
 		///    Construct a new <see cref="XmpTag"/>, using the data parsed from the given string.
 		/// </summary>
@@ -270,7 +270,7 @@ namespace TagLib.Xmp
 		}
 
 #endregion
-		
+
 #region Private Methods
 
 		// 7.2.9 RDF
@@ -283,7 +283,7 @@ namespace TagLib.Xmp
 			foreach (XmlNode node in rdf_node.ChildNodes) {
 				if (node is XmlWhitespace)
 					continue;
-				
+
 				if (node.Is (RDF_NS, DESCRIPTION_URI)) {
 					var attr = node.Attributes.GetNamedItem (RDF_NS, ABOUT_URI) as XmlAttribute;
 					if (attr != null) {
@@ -495,7 +495,7 @@ namespace TagLib.Xmp
 
 			var rdf_value = node.Attributes.GetNamedItem (VALUE_URI, RDF_NS) as XmlAttribute;
 			var rdf_resource = node.Attributes.GetNamedItem (RESOURCE_URI, RDF_NS) as XmlAttribute;
-			
+
 			// Options 1 and 2
 			var simple_prop_val = rdf_value ?? rdf_resource ?? null;
 			if (simple_prop_val != null) {
@@ -531,18 +531,18 @@ namespace TagLib.Xmp
 			}
 			return t;
 		}
-		
+
 		private XmpNode NewNode (string ns, string name)
 		{
 			Dictionary <string, XmpNode> ns_nodes = null;
-			
+
 			if (!nodes.ContainsKey (ns)) {
 				ns_nodes = new Dictionary <string, XmpNode> ();
 				nodes.Add (ns, ns_nodes);
-			
+
 			} else
 				ns_nodes = nodes [ns];
-			
+
 			if (ns_nodes.ContainsKey (name)) {
 				foreach (XmpNode child_node in NodeTree.Children) {
 					if (child_node.Namespace == ns && child_node.Name == name) {
@@ -550,38 +550,38 @@ namespace TagLib.Xmp
 						break;
 					}
 				}
-				
+
 				ns_nodes.Remove (name);
 			}
-			
+
 			XmpNode node = new XmpNode (ns, name);
 			ns_nodes.Add (name, node);
-			
+
 			NodeTree.AddChild (node);
-			
+
 			return node;
 		}
-		
+
 		private XmpNode NewNode (string ns, string name, XmpNodeType type)
 		{
 			XmpNode node = NewNode (ns, name);
 			node.Type = type;
-			
+
 			return node;
 		}
-		
+
 		private void RemoveNode (string ns, string name)
 		{
 			if (!nodes.ContainsKey (ns))
 				return;
-			
+
 			foreach (XmpNode node in NodeTree.Children) {
 				if (node.Namespace == ns && node.Name == name) {
 					NodeTree.RemoveChild (node);
 					break;
 				}
 			}
-			
+
 			nodes[ns].Remove (name);
 		}
 
@@ -633,7 +633,7 @@ namespace TagLib.Xmp
 			nodes = new Dictionary<string, Dictionary<string, XmpNode>> ();
 			AcceptVisitors ();
 		}
-		
+
 		/// <summary>
 		///    Clears the values stored in the current instance.
 		/// </summary>
@@ -665,7 +665,7 @@ namespace TagLib.Xmp
 			return nodes [ns][name];
 
 		}
-		
+
 		/// <summary>
 		///    Returns the text of the node associated with the namespace
 		///    <param name="ns"/> and the name <paramref name="name"/>.
@@ -684,13 +684,13 @@ namespace TagLib.Xmp
 		public string GetTextNode (string ns, string name)
 		{
 			var node = FindNode (ns, name);
-			
+
 			if (node == null || node.Type != XmpNodeType.Simple)
 				return null;
-			
+
 			return node.Value;
 		}
-		
+
 		/// <summary>
 		///    Creates a new text node associated with the namespace
 		///    <paramref name="ns"/> and the name <paramref name="name"/>.
@@ -712,11 +712,11 @@ namespace TagLib.Xmp
 				RemoveNode (ns, name);
 				return;
 			}
-			
+
 			var node = NewNode (ns, name);
 			node.Value = value;
 		}
-		
+
 		/// <summary>
 		///    Searches for a node holding language alternatives. The return value
 		///    is the value of the default language stored by the node. The node is
@@ -739,29 +739,29 @@ namespace TagLib.Xmp
 		public string GetLangAltNode (string ns, string name)
 		{
 			var node = FindNode (ns, name);
-			
+
 			if (node == null)
 				return null;
-			
+
 			if (node.Type == XmpNodeType.Simple)
 				return node.Value;
-			
+
 			if (node.Type != XmpNodeType.Alt)
 				return null;
-			
+
 			var children = node.Children;
 			foreach (XmpNode child_node in children) {
 				var qualifier = child_node.GetQualifier (XML_NS, "lang");
 				if (qualifier != null && qualifier.Value == "x-default")
 					return child_node.Value;
 			}
-			
+
 			if (children.Count > 0 && children[0].Type == XmpNodeType.Simple)
 				return children[0].Value;
-			
+
 			return null;
 		}
-		
+
 		/// <summary>
 		///    Stores a the given <paramref name="value"/> as the default language
 		///    value for the alt-node associated with the namespace
@@ -785,15 +785,15 @@ namespace TagLib.Xmp
 				RemoveNode (ns, name);
 				return;
 			}
-			
+
 			var node = NewNode (ns, name, XmpNodeType.Alt);
-			
+
 			var child_node = new XmpNode (RDF_NS, LI_URI, value);
 			child_node.AddQualifier (new XmpNode (XML_NS, "lang", "x-default"));
-			
+
 			node.AddChild (child_node);
 		}
-		
+
 		/// <summary>
 		///    The method returns an array of <see cref="System.String"/> values
 		///    which are the stored text of the child nodes of the node associated
@@ -811,22 +811,22 @@ namespace TagLib.Xmp
 		public string[] GetCollectionNode (string ns, string name)
 		{
 			var node = FindNode (ns, name);
-			
+
 			if (node == null)
 				return null;
-			
+
 			List<string> items = new List<string> ();
-				
+
 			foreach (XmpNode child in node.Children) {
-				
+
 				string item = child.Value;
 				if (item != null)
 					items.Add (item);
 			}
-			
+
 			return items.ToArray ();
 		}
-		
+
 		/// <summary>
 		///    Sets a <see cref="System.String[]"/> as texts to the children of the
 		///    node associated with the namespace <paramref name="ns"/> and the name
@@ -848,12 +848,12 @@ namespace TagLib.Xmp
 		{
 			if (type == XmpNodeType.Simple || type == XmpNodeType.Alt)
 				throw new ArgumentException ("type");
-			
+
 			if (values == null) {
 				RemoveNode (ns, name);
 				return;
 			}
-			
+
 			var node = NewNode (ns, name, type);
 			foreach (string value in values)
 				node.AddChild (new XmpNode (RDF_NS, LI_URI, value));
@@ -921,7 +921,7 @@ namespace TagLib.Xmp
 		/// </param>
 		public void SetRationalNode (string ns, string name, double value)
 		{
-			
+
 			string fraction = DecimalToFraction (value, (long) Math.Pow (10, 10));
 			SetTextNode (ns, name, fraction);
 		}
@@ -1082,7 +1082,7 @@ namespace TagLib.Xmp
 				SetLangAltNode (EXIF_NS, "UserComment", value);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the keywords for the image described
 		///    by the current instance.
@@ -1095,7 +1095,7 @@ namespace TagLib.Xmp
 			get { return GetCollectionNode (DC_NS, "subject") ?? new string [] {}; }
 			set { SetCollectionNode (DC_NS, "subject", value, XmpNodeType.Bag); }
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the rating for the image described
 		///    by the current instance.
@@ -1109,7 +1109,7 @@ namespace TagLib.Xmp
 			set { SetTextNode (XAP_NS, "Rating", value != null ? value.ToString () : null);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the time when the image, the current instance
 		///    belongs to, was taken.
@@ -1123,7 +1123,7 @@ namespace TagLib.Xmp
 				try {
 					return System.DateTime.Parse (GetTextNode (XAP_NS, "CreateDate"));
 				} catch {}
-				
+
 				return null;
 			}
 			set {
@@ -1131,7 +1131,7 @@ namespace TagLib.Xmp
 				SetTextNode (XAP_NS, "CreateDate", value != null ? value.ToString () : null);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the orientation of the image described
 		///    by the current instance.
@@ -1147,7 +1147,7 @@ namespace TagLib.Xmp
 				if (orientation.HasValue)
 					return (ImageOrientation) orientation;
 
-				return ImageOrientation.TopLeft;
+				return ImageOrientation.None;
 			}
 			set {
 				if ((uint) value < 1U || (uint) value > 8U) {
@@ -1171,7 +1171,7 @@ namespace TagLib.Xmp
 			get { return GetTextNode (XAP_NS, "CreatorTool"); }
 			set { SetTextNode (XAP_NS, "CreatorTool", value); }
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the latitude of the GPS coordinate the current
 		///    image was taken.
@@ -1184,20 +1184,20 @@ namespace TagLib.Xmp
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the longitude of the GPS coordinate the current
 		///    image was taken.
 		/// </summary>
 		/// <value>
-		///    A <see cref="System.Nullable"/> with the longitude ranging from -180.0 
+		///    A <see cref="System.Nullable"/> with the longitude ranging from -180.0
 		///    to +180.0 degrees.
 		/// </value>
 		public override double? Longitude {
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the altitude of the GPS coordinate the current
 		///    image was taken. The unit is meter.
@@ -1210,7 +1210,7 @@ namespace TagLib.Xmp
 			get { return null; }
 			set {}
 		}
-		
+
 		/// <summary>
 		///    Gets the exposure time the image, the current instance belongs
 		///    to, was taken with.
@@ -1222,7 +1222,7 @@ namespace TagLib.Xmp
 			get { return GetRationalNode (EXIF_NS, "ExposureTime"); }
 			set { SetRationalNode (EXIF_NS, "ExposureTime", value.HasValue ? (double) value : 0); }
 		}
-		
+
 		/// <summary>
 		///    Gets the FNumber the image, the current instance belongs
 		///    to, was taken with.
@@ -1244,7 +1244,7 @@ namespace TagLib.Xmp
 				SetRationalNode (EXIF_NS, "FNumber", value.HasValue ? (double) value : 0);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the ISO speed the image, the current instance belongs
 		///    to, was taken with.
@@ -1273,7 +1273,7 @@ namespace TagLib.Xmp
 				SetCollectionNode (EXIF_NS, "ISOSpeedRatings", new string [] { value.ToString () }, XmpNodeType.Seq);
 			}
 		}
-		
+
 		/// <summary>
 		///    Gets the focal length the image, the current instance belongs
 		///    to, was taken with.
@@ -1297,7 +1297,7 @@ namespace TagLib.Xmp
 			get { return GetUIntNode (EXIF_NS, "FocalLengthIn35mmFilm"); }
 			set { SetTextNode (EXIF_NS, "FocalLengthIn35mmFilm", value.HasValue ? value.Value.ToString () : String.Empty); }
 		}
-		
+
 		/// <summary>
 		///    Gets the manufacture of the recording equipment the image, the
 		///    current instance belongs to, was taken with.
@@ -1309,7 +1309,7 @@ namespace TagLib.Xmp
 			get { return GetTextNode (TIFF_NS, "Make"); }
 			set { SetTextNode (TIFF_NS, "Make", value); }
 		}
-		
+
 		/// <summary>
 		///    Gets the model name of the recording equipment the image, the
 		///    current instance belongs to, was taken with.
@@ -1321,7 +1321,7 @@ namespace TagLib.Xmp
 			get { return GetTextNode (TIFF_NS, "Model"); }
 			set { SetTextNode (TIFF_NS, "Model", value); }
 		}
-		
+
 		/// <summary>
 		///    Gets or sets the creator of the image.
 		/// </summary>
diff --git a/lib/TagLib/sources.mk b/lib/TagLib/sources.mk
index 166c4a0..f0bcb8c 100644
--- a/lib/TagLib/sources.mk
+++ b/lib/TagLib/sources.mk
@@ -1,132 +1,103 @@
 # This file is autogenerated, do not edit!
-SOURCES = \
+SOURCES =  \
 	TagLib/src/TagLib/Aac/AudioHeader.cs \
 	TagLib/src/TagLib/Aac/BitStream.cs \
 	TagLib/src/TagLib/Aac/File.cs \
 	TagLib/src/TagLib/Aiff/File.cs \
 	TagLib/src/TagLib/Aiff/StreamHeader.cs \
-	TagLib/src/TagLib/Ape/Tag.cs \
-	TagLib/src/TagLib/Ape/Item.cs \
-	TagLib/src/TagLib/Ape/Footer.cs \
 	TagLib/src/TagLib/Ape/File.cs \
+	TagLib/src/TagLib/Ape/Footer.cs \
+	TagLib/src/TagLib/Ape/Item.cs \
 	TagLib/src/TagLib/Ape/StreamHeader.cs \
-	TagLib/src/TagLib/Asf/Guid.cs \
-	TagLib/src/TagLib/Asf/StreamPropertiesObject.cs \
-	TagLib/src/TagLib/Asf/UnknownObject.cs \
-	TagLib/src/TagLib/Asf/Tag.cs \
-	TagLib/src/TagLib/Asf/Object.cs \
-	TagLib/src/TagLib/Asf/ExtendedContentDescriptionObject.cs \
+	TagLib/src/TagLib/Ape/Tag.cs \
 	TagLib/src/TagLib/Asf/ContentDescriptionObject.cs \
-	TagLib/src/TagLib/Asf/MetadataLibraryObject.cs \
-	TagLib/src/TagLib/Asf/HeaderObject.cs \
-	TagLib/src/TagLib/Asf/HeaderExtensionObject.cs \
+	TagLib/src/TagLib/Asf/ContentDescriptor.cs \
+	TagLib/src/TagLib/Asf/DescriptionRecord.cs \
+	TagLib/src/TagLib/Asf/ExtendedContentDescriptionObject.cs \
 	TagLib/src/TagLib/Asf/File.cs \
 	TagLib/src/TagLib/Asf/FilePropertiesObject.cs \
+	TagLib/src/TagLib/Asf/Guid.cs \
+	TagLib/src/TagLib/Asf/HeaderExtensionObject.cs \
+	TagLib/src/TagLib/Asf/HeaderObject.cs \
+	TagLib/src/TagLib/Asf/MetadataLibraryObject.cs \
+	TagLib/src/TagLib/Asf/Object.cs \
 	TagLib/src/TagLib/Asf/PaddingObject.cs \
-	TagLib/src/TagLib/Asf/ContentDescriptor.cs \
-	TagLib/src/TagLib/Asf/DescriptionRecord.cs \
-	TagLib/src/TagLib/Mpc/StreamHeader.cs \
-	TagLib/src/TagLib/Mpc/File.cs \
-	TagLib/src/TagLib/Ogg/GroupedComment.cs \
-	TagLib/src/TagLib/Ogg/Bitstream.cs \
-	TagLib/src/TagLib/Ogg/Paginator.cs \
-	TagLib/src/TagLib/Ogg/Codec.cs \
-	TagLib/src/TagLib/Ogg/Codecs/Vorbis.cs \
-	TagLib/src/TagLib/Ogg/Codecs/Theora.cs \
-	TagLib/src/TagLib/Ogg/Page.cs \
-	TagLib/src/TagLib/Ogg/XiphComment.cs \
-	TagLib/src/TagLib/Ogg/PageHeader.cs \
-	TagLib/src/TagLib/Ogg/File.cs \
-	TagLib/src/TagLib/Png/Codec.cs \
-	TagLib/src/TagLib/Png/File.cs \
-	TagLib/src/TagLib/Png/PngTag.cs \
+	TagLib/src/TagLib/Asf/StreamPropertiesObject.cs \
+	TagLib/src/TagLib/Asf/Tag.cs \
+	TagLib/src/TagLib/Asf/UnknownObject.cs \
+	TagLib/src/TagLib/ByteVector.cs \
+	TagLib/src/TagLib/ByteVectorList.cs \
+	TagLib/src/TagLib/CombinedTag.cs \
+	TagLib/src/TagLib/CorruptFileException.cs \
+	TagLib/src/TagLib/File.cs \
+	TagLib/src/TagLib/FileTypes.cs \
 	TagLib/src/TagLib/Flac/Block.cs \
 	TagLib/src/TagLib/Flac/BlockHeader.cs \
-	TagLib/src/TagLib/Flac/StreamHeader.cs \
-	TagLib/src/TagLib/Flac/Picture.cs \
 	TagLib/src/TagLib/Flac/File.cs \
+	TagLib/src/TagLib/Flac/Picture.cs \
+	TagLib/src/TagLib/Flac/StreamHeader.cs \
+	TagLib/src/TagLib/Genres.cs \
 	TagLib/src/TagLib/Gif/Codec.cs \
 	TagLib/src/TagLib/Gif/File.cs \
 	TagLib/src/TagLib/Gif/GifCommentTag.cs \
-	TagLib/src/TagLib/Image/Codec.cs \
-	TagLib/src/TagLib/Image/CombinedImageTag.cs \
-	TagLib/src/TagLib/Image/File.cs \
-	TagLib/src/TagLib/Image/ImageBlockFile.cs \
-	TagLib/src/TagLib/Image/ImageTag.cs \
-	TagLib/src/TagLib/Image/ImageOrientation.cs \
-	TagLib/src/TagLib/Image/NoMetadata/File.cs \
-	TagLib/src/TagLib/Jpeg/Codec.cs \
-	TagLib/src/TagLib/Jpeg/File.cs \
-	TagLib/src/TagLib/Jpeg/JpegCommentTag.cs \
-	TagLib/src/TagLib/Jpeg/Marker.cs \
-	TagLib/src/TagLib/Jpeg/Table.cs \
-	TagLib/src/TagLib/Mpeg/XingHeader.cs \
-	TagLib/src/TagLib/Mpeg/VBRIHeader.cs \
-	TagLib/src/TagLib/Mpeg/File.cs \
-	TagLib/src/TagLib/Mpeg/AudioFile.cs \
-	TagLib/src/TagLib/Mpeg/AudioHeader.cs \
-	TagLib/src/TagLib/Mpeg/VideoHeader.cs \
-	TagLib/src/TagLib/NonContainer/EndTag.cs \
-	TagLib/src/TagLib/NonContainer/File.cs \
-	TagLib/src/TagLib/NonContainer/StartTag.cs \
-	TagLib/src/TagLib/NonContainer/Tag.cs \
-	TagLib/src/TagLib/Id3v1/Tag.cs \
+	TagLib/src/TagLib/ICodec.cs \
 	TagLib/src/TagLib/Id3v1/StringHandler.cs \
-	TagLib/src/TagLib/Id3v2/Frames/PopularimeterFrame.cs \
+	TagLib/src/TagLib/Id3v1/Tag.cs \
+	TagLib/src/TagLib/Id3v2/ExtendedHeader.cs \
+	TagLib/src/TagLib/Id3v2/Footer.cs \
+	TagLib/src/TagLib/Id3v2/Frame.cs \
+	TagLib/src/TagLib/Id3v2/FrameFactory.cs \
+	TagLib/src/TagLib/Id3v2/FrameHeader.cs \
+	TagLib/src/TagLib/Id3v2/Frames/AttachedPictureFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/CommentsFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/GeneralEncapsulatedObjectFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/MusicCdIdentifierFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/PlayCountFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/PopularimeterFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/PrivateFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/RelativeVolumeFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/SynchronizedLyricsFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/TermsOfUseFrame.cs \
+	TagLib/src/TagLib/Id3v2/Frames/TextIdentificationFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/UniqueFileIdentifierFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/UnknownFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/CommentsFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/TextIdentificationFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/AttachedPictureFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/GeneralEncapsulatedObjectFrame.cs \
 	TagLib/src/TagLib/Id3v2/Frames/UnsynchronisedLyricsFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/SynchronizedLyricsFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/MusicCdIdentifierFrame.cs \
-	TagLib/src/TagLib/Id3v2/Frames/TermsOfUseFrame.cs \
-	TagLib/src/TagLib/Id3v2/FrameFactory.cs \
-	TagLib/src/TagLib/Id3v2/Frame.cs \
 	TagLib/src/TagLib/Id3v2/FrameTypes.cs \
-	TagLib/src/TagLib/Id3v2/Tag.cs \
-	TagLib/src/TagLib/Id3v2/FrameHeader.cs \
-	TagLib/src/TagLib/Id3v2/ExtendedHeader.cs \
-	TagLib/src/TagLib/Id3v2/SynchData.cs \
 	TagLib/src/TagLib/Id3v2/Header.cs \
-	TagLib/src/TagLib/Id3v2/Footer.cs \
+	TagLib/src/TagLib/Id3v2/SynchData.cs \
+	TagLib/src/TagLib/Id3v2/Tag.cs \
 	TagLib/src/TagLib/IFD/Entries/ByteIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/ByteVectorIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/LongArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/LongIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/MakernoteIFDEntry.cs \
+	TagLib/src/TagLib/IFD/Entries/Rational.cs \
 	TagLib/src/TagLib/IFD/Entries/RationalArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/RationalIFDEntry.cs \
-	TagLib/src/TagLib/IFD/Entries/Rational.cs \
 	TagLib/src/TagLib/IFD/Entries/SByteIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/ShortArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/ShortIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SLongArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SLongIFDEntry.cs \
+	TagLib/src/TagLib/IFD/Entries/SRational.cs \
 	TagLib/src/TagLib/IFD/Entries/SRationalArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SRationalIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SShortArrayIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SShortIFDEntry.cs \
-	TagLib/src/TagLib/IFD/Entries/SRational.cs \
 	TagLib/src/TagLib/IFD/Entries/StringIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/StripOffsetsIFDEntry.cs \
-	TagLib/src/TagLib/IFD/Entries/SubIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/SubIFDArrayEntry.cs \
+	TagLib/src/TagLib/IFD/Entries/SubIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/ThumbnailDataIFDEntry.cs \
-	TagLib/src/TagLib/IFD/Entries/UserCommentIFDEntry.cs \
 	TagLib/src/TagLib/IFD/Entries/UndefinedIFDEntry.cs \
+	TagLib/src/TagLib/IFD/Entries/UserCommentIFDEntry.cs \
+	TagLib/src/TagLib/IFD/IFDDirectory.cs \
 	TagLib/src/TagLib/IFD/IFDEntry.cs \
 	TagLib/src/TagLib/IFD/IFDEntryType.cs \
-	TagLib/src/TagLib/IFD/IFDTag.cs \
-	TagLib/src/TagLib/IFD/IFDDirectory.cs \
-	TagLib/src/TagLib/IFD/IFDStructure.cs \
 	TagLib/src/TagLib/IFD/IFDReader.cs \
 	TagLib/src/TagLib/IFD/IFDRenderer.cs \
+	TagLib/src/TagLib/IFD/IFDStructure.cs \
+	TagLib/src/TagLib/IFD/IFDTag.cs \
 	TagLib/src/TagLib/IFD/Makernotes/Nikon3MakernoteReader.cs \
 	TagLib/src/TagLib/IFD/Tags/CanonFileInfoEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/CanonMakerNoteEntryTag.cs \
@@ -135,46 +106,87 @@ SOURCES = \
 	TagLib/src/TagLib/IFD/Tags/GPSEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/IFDEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/IOPEntryTag.cs \
-	TagLib/src/TagLib/IFD/Tags/OlympusMakerNoteEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/Nikon3MakerNoteEntryTag.cs \
-	TagLib/src/TagLib/IFD/Tags/NikonLensData3EntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/NikonIsoInfoEntryTag.cs \
-	TagLib/src/TagLib/IFD/Tags/NikonPreviewMakerNoteEntryTag.cs \
+	TagLib/src/TagLib/IFD/Tags/NikonLensData3EntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/NikonPictureControlEntryTag.cs \
+	TagLib/src/TagLib/IFD/Tags/NikonPreviewMakerNoteEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/NikonShotInfoEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/NikonVibrationReductionEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/NikonWorldTimeEntryTag.cs \
+	TagLib/src/TagLib/IFD/Tags/OlympusMakerNoteEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/PanasonicMakerNoteEntryTag.cs \
+	TagLib/src/TagLib/IFD/Tags/PentaxMakerNoteEntryTag.cs \
 	TagLib/src/TagLib/IFD/Tags/SonyMakerNoteEntryTag.cs \
+	TagLib/src/TagLib/Image/Codec.cs \
+	TagLib/src/TagLib/Image/CombinedImageTag.cs \
+	TagLib/src/TagLib/Image/File.cs \
+	TagLib/src/TagLib/Image/ImageBlockFile.cs \
+	TagLib/src/TagLib/Image/ImageOrientation.cs \
+	TagLib/src/TagLib/Image/ImageTag.cs \
+	TagLib/src/TagLib/Image/NoMetadata/File.cs \
+	TagLib/src/TagLib/Jpeg/Codec.cs \
+	TagLib/src/TagLib/Jpeg/File.cs \
+	TagLib/src/TagLib/Jpeg/JpegCommentTag.cs \
+	TagLib/src/TagLib/Jpeg/Marker.cs \
+	TagLib/src/TagLib/Jpeg/Table.cs \
+	TagLib/src/TagLib/ListBase.cs \
+	TagLib/src/TagLib/Mpc/File.cs \
+	TagLib/src/TagLib/Mpc/StreamHeader.cs \
+	TagLib/src/TagLib/Mpeg/AudioFile.cs \
+	TagLib/src/TagLib/Mpeg/AudioHeader.cs \
+	TagLib/src/TagLib/Mpeg/File.cs \
+	TagLib/src/TagLib/Mpeg/VBRIHeader.cs \
+	TagLib/src/TagLib/Mpeg/VideoHeader.cs \
+	TagLib/src/TagLib/Mpeg/XingHeader.cs \
 	TagLib/src/TagLib/Mpeg4/AppleTag.cs \
 	TagLib/src/TagLib/Mpeg4/Box.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/AppleAdditionalInfoBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/AppleAnnotationBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/AppleDataBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/AppleElementaryStreamDescriptor.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/AppleItemListBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/FullBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoAudioSampleEntry.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoChunkLargeOffsetBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoChunkOffsetBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoFreeSpaceBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoHandlerBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoMetaBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoMovieHeaderBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleDescriptionBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleEntry.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleTableBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoUserDataBox.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/IsoVisualSampleEntry.cs \
+	TagLib/src/TagLib/Mpeg4/Boxes/UnknownBox.cs \
 	TagLib/src/TagLib/Mpeg4/BoxFactory.cs \
 	TagLib/src/TagLib/Mpeg4/BoxHeader.cs \
 	TagLib/src/TagLib/Mpeg4/BoxTypes.cs \
 	TagLib/src/TagLib/Mpeg4/File.cs \
 	TagLib/src/TagLib/Mpeg4/FileParser.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoFreeSpaceBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/UnknownBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoUserDataBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoChunkOffsetBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoChunkLargeOffsetBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/AppleItemListBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/AppleAnnotationBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleTableBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleEntry.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoAudioSampleEntry.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoVisualSampleEntry.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoMetaBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoSampleDescriptionBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/AppleAdditionalInfoBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoHandlerBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/IsoMovieHeaderBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/FullBox.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/AppleElementaryStreamDescriptor.cs \
-	TagLib/src/TagLib/Mpeg4/Boxes/AppleDataBox.cs \
+	TagLib/src/TagLib/NonContainer/EndTag.cs \
+	TagLib/src/TagLib/NonContainer/File.cs \
+	TagLib/src/TagLib/NonContainer/StartTag.cs \
+	TagLib/src/TagLib/NonContainer/Tag.cs \
+	TagLib/src/TagLib/Ogg/Bitstream.cs \
+	TagLib/src/TagLib/Ogg/Codec.cs \
+	TagLib/src/TagLib/Ogg/Codecs/Theora.cs \
+	TagLib/src/TagLib/Ogg/Codecs/Vorbis.cs \
+	TagLib/src/TagLib/Ogg/File.cs \
+	TagLib/src/TagLib/Ogg/GroupedComment.cs \
+	TagLib/src/TagLib/Ogg/Page.cs \
+	TagLib/src/TagLib/Ogg/PageHeader.cs \
+	TagLib/src/TagLib/Ogg/Paginator.cs \
+	TagLib/src/TagLib/Ogg/XiphComment.cs \
+	TagLib/src/TagLib/Picture.cs \
+	TagLib/src/TagLib/Png/Codec.cs \
+	TagLib/src/TagLib/Png/File.cs \
+	TagLib/src/TagLib/Png/PngTag.cs \
+	TagLib/src/TagLib/Properties.cs \
+	TagLib/src/TagLib/ReadOnlyByteVector.cs \
 	TagLib/src/TagLib/Riff/AviHeaderList.cs \
 	TagLib/src/TagLib/Riff/AviStream.cs \
-	TagLib/src/TagLib/Riff/WaveFormatEx.cs \
 	TagLib/src/TagLib/Riff/BitmapInfoHeader.cs \
 	TagLib/src/TagLib/Riff/DivXTag.cs \
 	TagLib/src/TagLib/Riff/File.cs \
@@ -182,37 +194,27 @@ SOURCES = \
 	TagLib/src/TagLib/Riff/List.cs \
 	TagLib/src/TagLib/Riff/ListTag.cs \
 	TagLib/src/TagLib/Riff/MovieIdTag.cs \
+	TagLib/src/TagLib/Riff/WaveFormatEx.cs \
+	TagLib/src/TagLib/StringList.cs \
+	TagLib/src/TagLib/SupportedMimeType.cs \
+	TagLib/src/TagLib/Tag.cs \
+	TagLib/src/TagLib/Tiff/Arw/File.cs \
 	TagLib/src/TagLib/Tiff/BaseTiffFile.cs \
 	TagLib/src/TagLib/Tiff/Codec.cs \
-	TagLib/src/TagLib/Tiff/File.cs \
-	TagLib/src/TagLib/Tiff/Arw/File.cs \
 	TagLib/src/TagLib/Tiff/Cr2/File.cs \
 	TagLib/src/TagLib/Tiff/Dng/File.cs \
+	TagLib/src/TagLib/Tiff/File.cs \
 	TagLib/src/TagLib/Tiff/Nef/File.cs \
+	TagLib/src/TagLib/Tiff/Pef/File.cs \
 	TagLib/src/TagLib/Tiff/Rw2/File.cs \
 	TagLib/src/TagLib/Tiff/Rw2/IFDReader.cs \
 	TagLib/src/TagLib/Tiff/Rw2/IFDTag.cs \
+	TagLib/src/TagLib/UnsupportedFormatException.cs \
 	TagLib/src/TagLib/WavPack/File.cs \
 	TagLib/src/TagLib/WavPack/StreamHeader.cs \
 	TagLib/src/TagLib/Xmp/XmlNodeExtensions.cs \
-	TagLib/src/TagLib/Xmp/XmpTag.cs \
 	TagLib/src/TagLib/Xmp/XmpNode.cs \
 	TagLib/src/TagLib/Xmp/XmpNodeType.cs \
 	TagLib/src/TagLib/Xmp/XmpNodeVisitor.cs \
-	TagLib/src/TagLib/ICodec.cs \
-	TagLib/src/TagLib/Tag.cs \
-	TagLib/src/TagLib/ReadOnlyByteVector.cs \
-	TagLib/src/TagLib/ByteVector.cs \
-	TagLib/src/TagLib/ByteVectorList.cs \
-	TagLib/src/TagLib/CombinedTag.cs \
-	TagLib/src/TagLib/Genres.cs \
-	TagLib/src/TagLib/Properties.cs \
-	TagLib/src/TagLib/File.cs \
-	TagLib/src/TagLib/StringList.cs \
-	TagLib/src/TagLib/SupportedMimeType.cs \
-	TagLib/src/TagLib/UnsupportedFormatException.cs \
-	TagLib/src/TagLib/Picture.cs \
-	TagLib/src/TagLib/ListBase.cs \
-	TagLib/src/TagLib/FileTypes.cs \
-	TagLib/src/TagLib/CorruptFileException.cs
+	TagLib/src/TagLib/Xmp/XmpTag.cs
 
diff --git a/lib/gio-sharp/Makefile.in b/lib/gio-sharp/Makefile.in
index 538147a..3c86deb 100644
--- a/lib/gio-sharp/Makefile.in
+++ b/lib/gio-sharp/Makefile.in
@@ -45,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -108,6 +109,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -117,9 +122,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -133,6 +135,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -160,6 +163,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -256,14 +260,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/gio-sharp/generator/Makefile.in b/lib/gio-sharp/generator/Makefile.in
index 97e8e71..2ddf4a2 100644
--- a/lib/gio-sharp/generator/Makefile.in
+++ b/lib/gio-sharp/generator/Makefile.in
@@ -51,6 +51,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -74,6 +75,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -83,9 +88,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -99,6 +101,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -126,6 +129,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -222,14 +226,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/gio-sharp/gio/Makefile.in b/lib/gio-sharp/gio/Makefile.in
index 24c58d0..3e6650a 100644
--- a/lib/gio-sharp/gio/Makefile.in
+++ b/lib/gio-sharp/gio/Makefile.in
@@ -52,6 +52,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -98,6 +99,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -107,9 +112,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -123,6 +125,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -150,6 +153,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -246,14 +250,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/gtk-sharp-beans/Makefile.in b/lib/gtk-sharp-beans/Makefile.in
index 8b86c4f..e7857a7 100644
--- a/lib/gtk-sharp-beans/Makefile.in
+++ b/lib/gtk-sharp-beans/Makefile.in
@@ -52,6 +52,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -98,6 +99,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -107,9 +112,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -123,6 +125,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -150,6 +153,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -246,14 +250,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/libfspot/Makefile.am b/lib/libfspot/Makefile.am
index 4d70fd0..a002d13 100644
--- a/lib/libfspot/Makefile.am
+++ b/lib/libfspot/Makefile.am
@@ -8,7 +8,6 @@ INCLUDES =							\
 	-DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES			\
 	-DGTK_DISABLE_SINGLE_INCLUDES				\
 	$(F_CFLAGS)						\
-	$(EXIF_CFLAGS)						\
 	$(LCMS_CFLAGS)						\
 	$(WERROR)
 
@@ -19,11 +18,12 @@ libfspot_la_SOURCES =				\
 	f-image-surface.c			\
 	f-image-surface.h			\
 	f-pixbuf-unsharp.c			\
+	f-pixbuf-utils.c			\
+	f-pixbuf-utils.h			\
 	f-screen-utils.c
 
 libfspot_la_LIBADD = 					\
 	-lX11						\
 	$(F_LIBS)					\
 	$(LCMS_LIBS)					\
-	$(EXIF_LIBS)					\
 	$(GIO_LIBS)
diff --git a/lib/libfspot/Makefile.in b/lib/libfspot/Makefile.in
index 39aa6bc..915b372 100644
--- a/lib/libfspot/Makefile.in
+++ b/lib/libfspot/Makefile.in
@@ -46,6 +46,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -81,7 +82,7 @@ am__DEPENDENCIES_1 =
 libfspot_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1)
 am_libfspot_la_OBJECTS = f-image-surface.lo f-pixbuf-unsharp.lo \
-	f-screen-utils.lo
+	f-pixbuf-utils.lo f-screen-utils.lo
 libfspot_la_OBJECTS = $(am_libfspot_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -113,6 +114,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -122,9 +127,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -138,6 +140,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -165,6 +168,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -261,14 +265,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -330,7 +332,6 @@ INCLUDES = \
 	-DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES			\
 	-DGTK_DISABLE_SINGLE_INCLUDES				\
 	$(F_CFLAGS)						\
-	$(EXIF_CFLAGS)						\
 	$(LCMS_CFLAGS)						\
 	$(WERROR)
 
@@ -340,13 +341,14 @@ libfspot_la_SOURCES = \
 	f-image-surface.c			\
 	f-image-surface.h			\
 	f-pixbuf-unsharp.c			\
+	f-pixbuf-utils.c			\
+	f-pixbuf-utils.h			\
 	f-screen-utils.c
 
 libfspot_la_LIBADD = \
 	-lX11						\
 	$(F_LIBS)					\
 	$(LCMS_LIBS)					\
-	$(EXIF_LIBS)					\
 	$(GIO_LIBS)
 
 all: all-am
@@ -425,6 +427,7 @@ distclean-compile:
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/f-image-surface.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/f-pixbuf-unsharp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/f-pixbuf-utils.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/f-screen-utils.Plo at am__quote@
 
 .c.o:
diff --git a/lib/libfspot/f-pixbuf-utils.c b/lib/libfspot/f-pixbuf-utils.c
new file mode 100644
index 0000000..bc5090a
--- /dev/null
+++ b/lib/libfspot/f-pixbuf-utils.c
@@ -0,0 +1,228 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/* f-pixbuf-utils.c
+ *
+ * Copyright (C) 2001, 2002, 2003 The Free Software Foundation, Inc.
+ * Copyright (C) 2003 Ettore Perazzoli
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * 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.
+ *
+ * Author: Paolo Bacchilega <paolo.bacch at tin.it>
+ *
+ * Adapted by Ettore Perazzoli <ettore at perazzoli.org>
+ */
+
+/* Some bits are based upon the GIMP source code, the original copyright
+ * note follows:
+ *
+ * The GIMP -- an image manipulation program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ */
+
+
+#include <config.h>
+
+#include "f-pixbuf-utils.h"
+
+#include <string.h>
+#include <math.h>
+#include <stdio.h>
+#include <errno.h>
+#include <gdk/gdk.h>
+#include "f-image-surface.h"
+
+/* Public functions.  */
+
+int
+f_pixbuf_get_image_size (GdkPixbuf *pixbuf)
+{
+	int width, height;
+
+	width = gdk_pixbuf_get_width (pixbuf);
+	height = gdk_pixbuf_get_height (pixbuf);
+
+	return MAX (width, height);
+}
+
+int
+f_pixbuf_get_scaled_width (GdkPixbuf *pixbuf,
+			   int size)
+{
+	int orig_width, orig_height;
+
+	orig_width = gdk_pixbuf_get_width (pixbuf);
+	orig_height = gdk_pixbuf_get_height (pixbuf);
+
+	if (orig_width > orig_height)
+		return size;
+	else
+		return size * ((double) orig_width / orig_height);
+}
+
+int
+f_pixbuf_get_scaled_height (GdkPixbuf *pixbuf,
+			    int size)
+{
+	int orig_width, orig_height;
+
+	orig_width = gdk_pixbuf_get_width (pixbuf);
+	orig_height = gdk_pixbuf_get_height (pixbuf);
+
+	if (orig_width > orig_height)
+		return size * ((double) orig_height / orig_width);
+	else
+		return size;
+}
+
+cairo_surface_t *
+f_pixbuf_to_cairo_surface (GdkPixbuf *pixbuf)
+{
+  gint width = gdk_pixbuf_get_width (pixbuf);
+  gint height = gdk_pixbuf_get_height (pixbuf);
+  guchar *gdk_pixels = gdk_pixbuf_get_pixels (pixbuf);
+  int gdk_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+  int n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+  guchar *cairo_pixels;
+  cairo_format_t format;
+  cairo_surface_t *surface;
+  int j;
+
+  if (n_channels == 3)
+    format = CAIRO_FORMAT_RGB24;
+  else
+    format = CAIRO_FORMAT_ARGB32;
+
+  surface = f_image_surface_create (format, width, height);
+  cairo_pixels = (guchar *)f_image_surface_get_data (surface);
+
+  for (j = height; j; j--)
+    {
+      guchar *p = gdk_pixels;
+      guchar *q = cairo_pixels;
+
+      if (n_channels == 3)
+	{
+	  guchar *end = p + 3 * width;
+	  
+	  while (p < end)
+	    {
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+	      q[0] = p[2];
+	      q[1] = p[1];
+	      q[2] = p[0];
+#else	  
+	      q[1] = p[0];
+	      q[2] = p[1];
+	      q[3] = p[2];
+#endif
+	      p += 3;
+	      q += 4;
+	    }
+	}
+      else
+	{
+	  guchar *end = p + 4 * width;
+	  guint t1,t2,t3;
+	    
+#define MULT(d,c,a,t) G_STMT_START { t = c * a + 0x7f; d = ((t >> 8) + t) >> 8; } G_STMT_END
+
+	  while (p < end)
+	    {
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+	      MULT(q[0], p[2], p[3], t1);
+	      MULT(q[1], p[1], p[3], t2);
+	      MULT(q[2], p[0], p[3], t3);
+	      q[3] = p[3];
+#else	  
+	      q[0] = p[3];
+	      MULT(q[1], p[0], p[3], t1);
+	      MULT(q[2], p[1], p[3], t2);
+	      MULT(q[3], p[2], p[3], t3);
+#endif
+	      
+	      p += 4;
+	      q += 4;
+	    }
+	  
+#undef MULT
+	}
+
+      gdk_pixels += gdk_rowstride;
+      cairo_pixels += 4 * width;
+    }
+
+  return surface;
+}
+
+GdkPixbuf *
+f_pixbuf_from_cairo_surface (cairo_surface_t *source)
+{
+  gint width = cairo_image_surface_get_width (source);
+  gint height = cairo_image_surface_get_height (source);
+  GdkPixbuf *pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+				      TRUE,
+				      8,
+				      width,
+				      height);
+
+  guchar *gdk_pixels = gdk_pixbuf_get_pixels (pixbuf);
+  int gdk_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+  int n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+  cairo_format_t format;
+  cairo_surface_t *surface;
+  cairo_t *ctx;
+  static const cairo_user_data_key_t key;
+  int j;
+
+  format = f_image_surface_get_format (source);
+  surface = cairo_image_surface_create_for_data (gdk_pixels,
+						 format,
+						 width, height, gdk_rowstride);
+  ctx = cairo_create (surface);
+  cairo_set_source_surface (ctx, source, 0, 0);
+  if (format == CAIRO_FORMAT_ARGB32)
+	  cairo_mask_surface (ctx, source, 0, 0);
+  else
+	  cairo_paint (ctx);
+
+  for (j = height; j; j--)
+    {
+      guchar *p = gdk_pixels;
+      guchar *end = p + 4 * width;
+      guchar tmp;
+
+      while (p < end)
+	{
+	  tmp = p[0];
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+	  p[0] = p[2];
+	  p[2] = tmp;
+#else	  
+	  p[0] = p[1];
+	  p[1] = p[2];
+	  p[2] = p[3];
+	  p[3] = tmp;
+#endif
+	  p += 4;
+	}
+
+      gdk_pixels += gdk_rowstride;
+    }
+
+  cairo_destroy (ctx);
+  cairo_surface_destroy (surface);
+  return pixbuf;
+}
diff --git a/lib/libfspot/f-pixbuf-utils.h b/lib/libfspot/f-pixbuf-utils.h
new file mode 100644
index 0000000..a0ae7dd
--- /dev/null
+++ b/lib/libfspot/f-pixbuf-utils.h
@@ -0,0 +1,41 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/* f-pixbuf-utils.h
+ *
+ * Copyright (C) 2003  Ettore Perazzoli
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * 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.
+ *
+ * Author: Ettore Perazzoli <ettore at ximian.com>
+ */
+
+#ifndef _F_PIXBUF_UTILS_H_
+#define _F_PIXBUF_UTILS_H_
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+
+/* Return the largest between height and width of the specified PIXBUF.  */
+int f_pixbuf_get_image_size (GdkPixbuf *pixbuf);
+
+/* Return the normalized width for the specified PIXBUF at the specified
+   thumbnail SIZE.  */
+int f_pixbuf_get_scaled_width (GdkPixbuf *pixbuf, int size);
+
+/* Return the normalized height for the specified PIXBUF at the specified
+   thumbnail SIZE.  */
+int f_pixbuf_get_scaled_height (GdkPixbuf *pixbuf, int size);
+
+#endif
diff --git a/lib/unique-sharp/Makefile.in b/lib/unique-sharp/Makefile.in
index 29a9801..2a6a1d8 100644
--- a/lib/unique-sharp/Makefile.in
+++ b/lib/unique-sharp/Makefile.in
@@ -45,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -108,6 +109,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -117,9 +122,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -133,6 +135,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -160,6 +163,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -256,14 +260,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/unique-sharp/generator/Makefile.in b/lib/unique-sharp/generator/Makefile.in
index 92a2b69..0063a64 100644
--- a/lib/unique-sharp/generator/Makefile.in
+++ b/lib/unique-sharp/generator/Makefile.in
@@ -51,6 +51,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -74,6 +75,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -83,9 +88,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -99,6 +101,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -126,6 +129,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -222,14 +226,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/lib/unique-sharp/unique/Makefile.in b/lib/unique-sharp/unique/Makefile.in
index ea86015..2b7a31a 100644
--- a/lib/unique-sharp/unique/Makefile.in
+++ b/lib/unique-sharp/unique/Makefile.in
@@ -52,6 +52,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -98,6 +99,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -107,9 +112,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -123,6 +125,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -150,6 +153,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -246,14 +250,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 19fdf63..7eec0d8 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -6,134 +6,123 @@ data/desktop-files/f-spot.desktop.in.in
 data/desktop-files/f-spot.desktop.in.in
 data/desktop-files/f-spot-import.desktop.in.in
 data/desktop-files/f-spot-view.desktop.in.in
-extensions/Exporters/CDExport/CDExport.addin.xml
-extensions/Exporters/CDExport/CDExport.cs
-[type: gettext/glade]extensions/Exporters/CDExport/CDExport.ui
-extensions/Exporters/FacebookExport/FacebookExport.addin.xml
-extensions/Exporters/FacebookExport/FacebookExport.cs
-extensions/Exporters/FacebookExport/FacebookExportDialog.cs
-[type: gettext/glade]extensions/Exporters/FacebookExport/FacebookExport.ui
-extensions/Exporters/FlickrExport/FlickrExport.addin.xml
-extensions/Exporters/FlickrExport/FlickrExport.cs
-extensions/Exporters/FlickrExport/FlickrExport.glade
-extensions/Exporters/FolderExport/FolderExport.addin.xml
-extensions/Exporters/FolderExport/FolderExport.cs
-extensions/Exporters/FolderExport/FolderExport.glade
-extensions/Exporters/GalleryExport/FormClient.cs
-extensions/Exporters/GalleryExport/GalleryExport.addin.xml
-extensions/Exporters/GalleryExport/GalleryExport.cs
-extensions/Exporters/GalleryExport/GalleryExport.glade
-extensions/Exporters/GalleryExport/GalleryRemote.cs
-extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml
-extensions/Exporters/PicasaWebExport/PicasaWebExport.cs
-extensions/Exporters/PicasaWebExport/PicasaWebExport.glade
-extensions/Exporters/SmugMugExport/SmugMugExport.addin.xml
-extensions/Exporters/SmugMugExport/SmugMugExport.cs
-extensions/Exporters/SmugMugExport/SmugMugExport.glade
-extensions/Exporters/TabbloExport/Tabblo/Connection.cs
-extensions/Exporters/TabbloExport/TabbloExport.addin.xml
-extensions/Exporters/TabbloExport/TabbloExport.cs
-[type: gettext/glade]extensions/Exporters/TabbloExport/ui/TabbloExport.ui
-[type: gettext/glade]extensions/Exporters/TabbloExport/ui/TrustError.ui
-extensions/Exporters/ZipExport/ZipExport.addin.xml
-extensions/Exporters/ZipExport/ZipExport.cs
-extensions/Exporters/ZipExport/ZipExport.glade
-extensions/Tools/HashJob/HashJob.addin.xml
-extensions/Tools/HashJob/HashJob.cs
-extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs
-extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml
-extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs
-[type: gettext/glade]extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui
-extensions/Tools/MergeDb/MergeDb.addin.xml
-extensions/Tools/MergeDb/MergeDb.cs
-extensions/Tools/MergeDb/MergeDb.glade
-extensions/Tools/MergeDb/PickFolderDialog.cs
-extensions/Tools/ScreensaverConfig/ScreensaverConfig.addin.xml
-[type: gettext/glade]extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui
 f-spot.schemas.in
-src/Core/App.cs
-src/Core/Photo.cs
-src/Editors/AutoStretchEditor.cs
-src/Editors/ColorEditor.cs
-src/Editors/CropEditor.cs
-src/Editors/DesaturateEditor.cs
-src/Editors/RedEyeEditor.cs
-src/Editors/SepiaEditor.cs
-src/Editors/SoftFocusEditor.cs
-src/Editors/TiltEditor.cs
-src/Filters/ResizeFilter.cs
-src/Filters/SharpFilter.cs
-src/FSpot.addin.xml
-src/f-spot.glade
-src/FullScreenView.cs
-src/GroupSelector.cs
-src/Imaging/ImageFile.cs
-src/Import/ImportController.cs
-src/Import/MetadataImporter.cs
-src/ItemAction.cs
-src/Jobs/SyncMetadataJob.cs
-src/Loupe.cs
-src/MainWindow.cs
-src/PhotoPopup.cs
-src/PhotoStore.cs
-src/PhotoTagMenu.cs
-src/PhotoVersionCommands.cs
-src/PhotoVersionMenu.cs
-src/PhotoView.cs
-src/Preferences.cs
-src/PrintOperation.cs
-src/QueryWidget.cs
-src/RotateCommand.cs
-src/SendEmail.cs
-src/Sharpener.cs
-src/SingleView.cs
-src/TagCommands.cs
-src/TagPopup.cs
-src/TagQueryWidget.cs
-src/TagSelectionWidget.cs
-src/TagStore.cs
-src/Term.cs
-src/ThumbnailCommand.cs
-src/UI.Dialog/AboutDialog.cs
-src/UI.Dialog/AdjustTimeDialog.cs
-src/UI.Dialog/DateRangeDialog.cs
-src/UI.Dialog/EditExceptionDialog.cs
-src/UI.Dialog/EditTagDialog.cs
-src/UI.Dialog/EditTagIconDialog.cs
-src/UI.Dialog/ExceptionDialog.cs
-src/UI.Dialog/ImportDialog.cs
-src/UI.Dialog/PreferenceDialog.cs
-src/UI.Dialog/ProgressDialog.cs
-src/UI.Dialog/RepairDbDialog.cs
-src/UI.Dialog/SelectionRatioDialog.cs
-src/UI.Dialog/ThreadProgressDialog.cs
-[type: gettext/glade]src/UI.Dialog/ui/AdjustTimeDialog.ui
-[type: gettext/glade]src/UI.Dialog/ui/CreateTagDialog.ui
-[type: gettext/glade]src/UI.Dialog/ui/DateRangeDialog.ui
-[type: gettext/glade]src/UI.Dialog/ui/EditTagDialog.ui
-[type: gettext/glade]src/UI.Dialog/ui/EditTagIconDialog.ui
-[type: gettext/glade]src/UI.Dialog/ui/LastImportRollFilterDialog.ui
-[type: gettext/glade]src/UI.Dialog/ui/PreferenceDialog.ui
-[type: gettext/glade]src/UI.Dialog/ui/RatingFilterDialog.ui
-[type: gettext/glade]src/UI.Dialog/ui/RepairDialog.ui
-[type: gettext/glade]src/ui/import.ui
-[type: gettext/glade]src/ui/mail_dialog.ui
-[type: gettext/glade]src/ui/main_window.ui
-[type: gettext/glade]src/ui/single_view.ui
-[type: gettext/glade]src/ui/viewer_preferences.ui
-src/Updater.cs
-src/Util.cs
-src/Utils/Unix.cs
-src/Widgets/CustomPrintWidget.cs
-src/Widgets/EditorPage.cs
-src/Widgets/Filmstrip.cs
-src/Widgets/FindBar.cs
-src/Widgets/FolderTreePage.cs
-src/Widgets/FolderTreeView.cs
-src/Widgets/InfoBox.cs
-src/Widgets/MetadataDisplay.cs
-src/Widgets/OpenWithMenu.cs
-src/Widgets/RatingMenuItem.cs
-src/Widgets/Sidebar.cs
-src/Widgets/TagMenu.cs
+lib/Mono.Google/Mono.Google/CaptchaException.cs
+lib/Mono.Tabblo/Mono.Tabblo/Connection.cs
+src/Clients/MainApp/FSpot.addin.xml
+src/Clients/MainApp/FSpot/App.cs
+src/Clients/MainApp/FSpot.Database/Updater.cs
+src/Clients/MainApp/FSpot.Editors/AutoStretchEditor.cs
+src/Clients/MainApp/FSpot.Editors/ColorEditor.cs
+src/Clients/MainApp/FSpot.Editors/CropEditor.cs
+src/Clients/MainApp/FSpot.Editors/DesaturateEditor.cs
+src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs
+src/Clients/MainApp/FSpot.Editors/SepiaEditor.cs
+src/Clients/MainApp/FSpot.Editors/SoftFocusEditor.cs
+src/Clients/MainApp/FSpot.Editors/TiltEditor.cs
+src/Clients/MainApp/FSpot/FullScreenView.cs
+[type: gettext/glade]src/Clients/MainApp/f-spot.glade
+src/Clients/MainApp/FSpot/GroupSelector.cs
+src/Clients/MainApp/FSpot.Import/ImportController.cs
+src/Clients/MainApp/FSpot.Import/MetadataImporter.cs
+src/Clients/MainApp/FSpot/ItemAction.cs
+src/Clients/MainApp/FSpot.Jobs/SyncMetadataJob.cs
+src/Clients/MainApp/FSpot/MainWindow.cs
+src/Clients/MainApp/FSpot/Photo.cs
+src/Clients/MainApp/FSpot/PhotoStore.cs
+src/Clients/MainApp/FSpot/PhotoView.cs
+src/Clients/MainApp/FSpot/Preferences.cs
+src/Clients/MainApp/FSpot/PrintOperation.cs
+src/Clients/MainApp/FSpot/QueryWidget.cs
+src/Clients/MainApp/FSpot/RotateCommand.cs
+src/Clients/MainApp/FSpot/SendEmail.cs
+src/Clients/MainApp/FSpot/SingleView.cs
+src/Clients/MainApp/FSpot/TagQueryWidget.cs
+src/Clients/MainApp/FSpot/TagSelectionWidget.cs
+src/Clients/MainApp/FSpot/TagStore.cs
+src/Clients/MainApp/FSpot/Term.cs
+src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/EditTagDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/ProgressDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs
+src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs
+[type: gettext/glade]src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui
+[type: gettext/glade]src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui
+[type: gettext/glade]src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui
+[type: gettext/glade]src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui
+[type: gettext/glade]src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui
+[type: gettext/glade]src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui
+[type: gettext/glade]src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui
+[type: gettext/glade]src/Clients/MainApp/FSpot.UI.Dialog/ui/RatingFilterDialog.ui
+[type: gettext/glade]src/Clients/MainApp/FSpot.UI.Dialog/ui/RepairDialog.ui
+src/Clients/MainApp/FSpot.Widgets/EditorPage.cs
+src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs
+src/Clients/MainApp/FSpot.Widgets/FindBar.cs
+src/Clients/MainApp/FSpot.Widgets/FolderTreePage.cs
+src/Clients/MainApp/FSpot.Widgets/FolderTreeView.cs
+src/Clients/MainApp/FSpot.Widgets/InfoBox.cs
+src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs
+src/Clients/MainApp/FSpot.Widgets/RatingMenuItem.cs
+src/Clients/MainApp/FSpot.Widgets/Sharpener.cs
+src/Clients/MainApp/FSpot.Widgets/Sidebar.cs
+src/Clients/MainApp/FSpot.Widgets/TagMenu.cs
+src/Clients/MainApp/PhotoTagMenu.cs
+src/Clients/MainApp/PhotoVersionCommands.cs
+src/Clients/MainApp/PhotoVersionMenu.cs
+src/Clients/MainApp/TagCommands.cs
+src/Clients/MainApp/TagPopup.cs
+src/Clients/MainApp/ThumbnailCommand.cs
+[type: gettext/glade]src/Clients/MainApp/ui/import.ui
+[type: gettext/glade]src/Clients/MainApp/ui/mail_dialog.ui
+[type: gettext/glade]src/Clients/MainApp/ui/main_window.ui
+[type: gettext/glade]src/Clients/MainApp/ui/single_view.ui
+[type: gettext/glade]src/Clients/MainApp/ui/tag_selection_dialog.ui
+[type: gettext/glade]src/Clients/MainApp/ui/viewer_preferences.ui
+src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs
+src/Core/FSpot.Gui/FSpot.Widgets/OpenWithMenu.cs
+src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs
+src/Extensions/Editors/FSpot.Editors.BW/FSpot.Addins.Editors/BWEditor.cs
+src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Addins.Editors/FlipEditor.cs
+src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs
+src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Addins.Editors/ResizeEditor.cs
+src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs
+[type: gettext/glade]src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui
+src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs
+src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs
+[type: gettext/glade]src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui
+src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs
+[type: gettext/glade]src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/FlickrExport.glade
+src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs
+[type: gettext/glade]src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/FolderExport.glade
+src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/FormClient.cs
+src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs
+src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs
+[type: gettext/glade]src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/GalleryExport.glade
+src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs
+[type: gettext/glade]src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/PicasaWebExport.glade
+src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs
+[type: gettext/glade]src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/SmugMugExport.glade
+src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs
+[type: gettext/glade]src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui
+[type: gettext/glade]src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui
+src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs
+[type: gettext/glade]src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/ZipExport.glade
+[type: gettext/glade]src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.glade
+src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs
+src/Extensions/Tools/FSpot.Tools.HashJob/FSpot.Tools.HashJob/HashJob.cs
+src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs
+src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs
+[type: gettext/glade]src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui
+src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDb.cs
+[type: gettext/glade]src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/MergeDb.glade
+src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/PickFolderDialog.cs
+[type: gettext/glade]src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui
 tools/f-spot-screensaver.desktop.in
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index 56a3c3d..5c97088 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -1,57 +1,8 @@
 data/desktop-files/f-spot.desktop.in
-data/desktop-files/f-spot-view.desktop.in
 data/desktop-files/f-spot-import.desktop.in
-src/Widgets/DateEdit.cs
-src/InfoDisplay.cs
-extensions/Exporters/PicasaWebExport/google-sharp/CaptchaException.cs
-extensions/RawPlusJpeg/RawPlusJpeg.addin.xml
-extensions/DevelopInUFraw/DevelopInUFRaw.addin.xml
-extensions/FacebookExport/FacebookExport.addin.xml
-extensions/FacebookExport/FacebookExport.cs
-extensions/FacebookExport/FacebookExport.glade
-extensions/LightTable/LightTable.addin.xml
-extensions/SyncCatalog/SyncCatalog.addin.xml
-extensions/ZipExport/ZipExport.addin.xml
-extensions/ZipExport/ZipExport.cs
-extensions/ZipExport/ZipExport.glade
-extensions/PictureTile/PictureTile.addin.xml
-extensions/PictureTile/PictureTile.glade
-extensions/PictureTile/PictureTile.cs
-extensions/MetaPixel/MetaPixel.addin.xml
-extensions/MetaPixel/MetaPixel.glade
-extensions/MetaPixel/MetaPixel.cs
-extensions/ChangePhotoPath/ChangePhotoPath.addin.xml
-extensions/ChangePhotoPath/ChangePhotoPath.glade
-extensions/DevelopInUFraw/DevelopInUFRaw.cs
-extensions/RetroactiveRoll/RetroactiveRoll.addin.xml
-extensions/Editors/BWEditor/BWEditor.cs
-extensions/Editors/FlipEditor/FlipEditor.cs
-extensions/Editors/ResizeEditor/ResizeEditor.cs
-extensions/Editors/BlackoutEditor/BlackoutEditor.cs
-extensions/Editors/PixelateEditor/PixelateEditor.cs
-extensions/Misc/LightTable/LightTable.addin.xml
-extensions/Tools/ChangePhotoPath/ChangePhotoPath.addin.xml
-extensions/Tools/ChangePhotoPath/ChangePhotoPath.glade
-extensions/Tools/DevelopInUFraw/DevelopInUFRaw.addin.xml
-extensions/Tools/DevelopInUFraw/DevelopInUFRaw.cs
-extensions/Tools/HashJob/HashJob.addin.xml
-extensions/Tools/MetaPixel/MetaPixel.addin.xml
-extensions/Tools/MetaPixel/MetaPixel.cs
-extensions/Tools/MetaPixel/MetaPixel.glade
-extensions/Tools/PictureTile/PictureTile.addin.xml
-extensions/Tools/PictureTile/PictureTile.cs
-extensions/Tools/PictureTile/PictureTile.glade
-extensions/Tools/RawPlusJpeg/RawPlusJpeg.addin.xml
-extensions/Tools/RetroactiveRoll/RetroactiveRoll.addin.xml
-extensions/Tools/SyncCatalog/SyncCatalog.addin.xml
-extensions/Tools/SyncCatalog/SyncCatalog.cs
+data/desktop-files/f-spot-view.desktop.in
 gtk-sharp-beans/gtk_generated/Builder.cs
-lib/libfspotraw/LibRaw/dcraw/dcraw.c
-lib/libfspotraw/LibRaw/internal/dcraw_common.cpp
-lib/libfspotraw/LibRaw/internal/dcraw_fileio.cpp
-lib/libfspotraw/LibRaw/internal/foveon.cpp
 lib/gtk-sharp-beans/gtk_generated/Builder.cs
-lib/Hyena/Mono.Data.Sqlite/Mono.Data.Sqlite/SR.Designer.cs
 lib/Hyena/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnHeaderCellTextAccessible.cs
 lib/Hyena/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs
 lib/Hyena/Hyena.Gui/Hyena.Gui.Dialogs/ExceptionDialog.cs
@@ -68,3 +19,30 @@ lib/Hyena/Hyena/Hyena.Query/IntegerQueryValue.cs
 lib/Hyena/Hyena/Hyena.Query/NullQueryValue.cs
 lib/Hyena/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
 lib/Hyena/Hyena/Hyena.Query/StringQueryValue.cs
+lib/Hyena/Mono.Data.Sqlite/Mono.Data.Sqlite/SR.Designer.cs
+src/Core/FSpot.Gui/FSpot.Widgets/DateEdit.cs
+src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.addin.xml
+src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Resources/DevelopInUFRaw.addin.xml
+src/Extensions/Tools/FSpot.Tools.HashJob/Resources/HashJob.addin.xml
+src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/LiveWebGallery.addin.xml
+src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/MergeDb.addin.xml
+src/Extensions/Tools/FSpot.Tools.MetaPixel/MetaPixel.addin.xml
+src/Extensions/Tools/FSpot.Tools.MetaPixel/MetaPixel.cs
+src/Extensions/Tools/FSpot.Tools.MetaPixel/MetaPixel.glade
+src/Extensions/Tools/FSpot.Tools.PictureTile/PictureTile.addin.xml
+src/Extensions/Tools/FSpot.Tools.PictureTile/PictureTile.cs
+src/Extensions/Tools/FSpot.Tools.PictureTile/PictureTile.glade
+src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Resources/RawPlusJpeg.addin.xml
+src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Resources/RetroactiveRoll.addin.xml
+src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfig.addin.xml
+src/Extensions/Tools/FSpot.Tools.SyncCatalog/SyncCatalog.addin.xml
+src/Extensions/Tools/FSpot.Tools.SyncCatalog/SyncCatalog.cs
+src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.addin.xml
+src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.addin.xml
+src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/FlickrExport.addin.xml
+src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/FolderExport.addin.xml
+src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/GalleryExport.addin.xml
+src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/PicasaWebExport.addin.xml
+src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/SmugMugExport.addin.xml
+src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/TabbloExport.addin.xml
+src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/ZipExport.addin.xml
diff --git a/po/cs.po b/po/cs.po
index 503f48f..3c21f08 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -6,19 +6,21 @@
 # Copyright (C) 2008 Petr Kovar <pknbe at volny.cz>.
 # Copyright (C) 2008, 2009 Zdeněk Hataš <zdenek.hatas at gmail.com>.
 # This file is distributed under the same license as the f-spot package.
+#
 # Miloslav Trmac <mitr at volny.cz>, 2004, 2005, 2006.
 # Jakub Friedl <jfriedl at suse.cz>, 2006, 2007.
 # Pavel Šefránek <ps at pjoul.cz>, 2008.
 # Petr Kovar <pknbe at volny.cz>, 2008.
 # Zdeněk Hataš <zdenek.hatas at gmail.com>, 2008, 2009, 2010.
+# Marek Černocký <marek at manet.cz>, 2010 (just fixes).
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: f-spot\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
 "spot&component=General\n"
-"POT-Creation-Date: 2010-03-08 11:57+0000\n"
-"PO-Revision-Date: 2010-03-11 11:01+0100\n"
+"POT-Creation-Date: 2010-07-14 20:17+0000\n"
+"PO-Revision-Date: 2010-07-17 10:28+0200\n"
 "Last-Translator: Zdeněk Hataš <zdenek.hatas at gmail.com>\n"
 "Language-Team: Czech <gnome-cs-list at gnome.org>\n"
 "MIME-Version: 1.0\n"
@@ -29,63 +31,90 @@ msgstr ""
 "X-Poedit-Country: CZECH REPUBLIC\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
+#: ../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 "Správce fotografií F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Organizuje, prohlíží a sdílí vaše fotografie"
+
+#: ../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 "Správce fotografií"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Importovat do F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "Prohlížeč fotografií F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Prohlížeč fotografií"
+
 #: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
 msgid "_CD..."
-msgstr "_CD..."
+msgstr "_CD…"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
+#: ../extensions/Exporters/CDExport/CDExport.cs:155
 msgid "Transferring Pictures"
 msgstr "Přenáší se obrázky"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:218
+#: ../extensions/Exporters/CDExport/CDExport.cs:208
 #, csharp-format
 msgid "Transferring picture \"{0}\" To CD"
-msgstr "Na CD se přenáší obrázek \"{0}\""
+msgstr "Na CD se přenáší obrázek „{0}“"
 
 #. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../extensions/Exporters/CDExport/CDExport.cs:210
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:362
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:209
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:773
+#: ../src/MainWindow.cs:645 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
 #, csharp-format
 msgid "{0} of {1}"
 msgstr "{0} z {1}"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
+#: ../extensions/Exporters/CDExport/CDExport.cs:223
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:378
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:696
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
 msgid "Done Sending Photos"
 msgstr "Odesílání fotografií ukončeno"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
+#: ../extensions/Exporters/CDExport/CDExport.cs:225
 msgid "Transfer Complete"
 msgstr "Přenos byl dokončen"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
+#: ../extensions/Exporters/CDExport/CDExport.cs:232
 msgid "Error While Transferring"
 msgstr "Chyba při přenosu"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/CDExport/CDExport.cs:240
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:266
 msgid "Error Transferring"
 msgstr "Chyba přenosu"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:263
+#: ../extensions/Exporters/CDExport/CDExport.cs:253
 msgid "copying..."
-msgstr "kopíruje se..."
+msgstr "kopíruje se…"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:1
-msgid "<b><i>There is some previously scheduled items to write</i></b>"
+msgid "<b><i>There are some previously scheduled items to write</i></b>"
 msgstr "<b><i>Ve frontě pro zápis jsou dříve plánované objekty</i></b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:2
@@ -93,54 +122,46 @@ msgid "<b>Photos to Burn</b>"
 msgstr "<b>Fotografie k vypálení</b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
-msgid "Autorotate"
-msgstr "Automatické otočení"
-
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 msgid "Create CD"
 msgstr "Vytvořit CD"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 #: ../src/Widgets/InfoBox.cs:221
 msgid "Size"
 msgstr "Velikost"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
 msgid "Size of the exported selection:"
 msgstr "Velikost exportovaného výběru:"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
 msgid "_Browse Previously Scheduled Files"
 msgstr "Procházet frontu plánovaných sou_borů"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/ui/single_view.ui.h:12
 msgid "_Export"
 msgstr "_Exportovat"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:9
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
 msgid "_Write only these photos to CD"
 msgstr "Na CD zapsat p_ouze tyto fotografie"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.addin.xml.h:1
 msgid "F_acebook..."
-msgstr "F_acebook..."
+msgstr "F_acebook…"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
 msgid "Waiting for authorization"
 msgstr "Čeká se na autorizaci"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:101
 msgid ""
 "F-Spot will now launch your browser so that you can enable the permission "
 "you just selected.\n"
@@ -151,13 +172,13 @@ msgstr ""
 "F-Spot nyní spustí váš prohlížeč, abyste mohli udělit zvolené oprávnění. \n"
 "\n"
 "Poté co vás Facebook nasměruje k návratu do této aplikace, klikněte na "
-"tlačítko \"OK\" níže."
+"tlačítko „OK“ níže."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
 msgid "Too many images to export"
 msgstr "Příliš mnoho obrázků k exportu"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:283
 #, csharp-format
 msgid ""
 "Facebook only permits {0} photographs per album.  Please refine your "
@@ -167,26 +188,18 @@ msgstr ""
 "výběr a zkuste to znovu."
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Přenášejí se obrázky"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
 msgid "Album must have a name"
 msgstr "Album musí mít název"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:299
 msgid "Please name your album or choose an existing album."
 msgstr "Pojmenujte prosím své album, nebo zvolte existující."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
 msgid "Creating a new album failed"
 msgstr "Vytváření nového alba selhalo"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:314
 #, csharp-format
 msgid ""
 "An error occurred creating a new album.\n"
@@ -197,45 +210,53 @@ msgstr ""
 "\n"
 "{0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:327
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:488
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:726
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:593
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:515
+msgid "Uploading Pictures"
+msgstr "Přenášejí se obrázky"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:355
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:652
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:554
 #, csharp-format
 msgid "Uploading picture \"{0}\" ({1} of {2})"
-msgstr "Nahrává se obrázek \"{0}\" ({1} z {2})"
+msgstr "Nahrává se obrázek „{0}“ ({1} z {2})"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
 #, csharp-format
 msgid "Error Uploading To Facebook: {0}"
 msgstr "Chyba při nahrávání na Facebook: {0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:383
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:215
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:789
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:685
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:585
 #: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
 msgid "Error"
 msgstr "Chyba"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:394
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:800
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:698
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:598
 msgid "Upload Complete"
 msgstr "Nahrávání dokončeno"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:383
 msgid "Visit F-Spot group on Facebook"
 msgstr "Navštivte Facebook skupinu F-Spot"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
 msgid "Waiting for authentication"
 msgstr "Čeká se na autentizaci"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:214
 msgid ""
 "F-Spot will now launch your browser so that you can log into Facebook.\n"
 "\n"
@@ -246,18 +267,18 @@ msgstr ""
 "F-Spot nyní spustí váš prohlížeč, abyste se mohli přihlásit na Facebook.\n"
 "\n"
 "Poté, co vás Facebook nasměruje k návratu do tého aplikace, klikněte na "
-"tlačítko \"OK\" níže. F-Spot uloží vaši relaci do klíčenky GNOME a pokud to "
+"tlačítko „OK“ níže. F-Spot uloží vaši relaci do klíčenky GNOME a pokud to "
 "bude možné, použije ji při příštích exportů na Facebook."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:219
 msgid "Authenticating..."
-msgstr "Probíhá autentizace..."
+msgstr "Probíhá autentizace…"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
 msgid "Error logging into Facebook"
 msgstr "Chyba při přihlašování k Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:230
 msgid ""
 "There was a problem logging into Facebook.  Check your credentials and try "
 "again."
@@ -265,37 +286,37 @@ msgstr ""
 "Při pokusu o přihlášení k Facebook došlo k chybě. Zkontrolujte prosím své "
 "přihlašovací údaje a zkuste to znovu."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:239
 msgid "Authorizing Session"
 msgstr "Relace se autorizuje"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:248
 msgid "Session established, fetching user info..."
-msgstr "Relace navázána, stahují se informace o uživateli..."
+msgstr "Relace navázána, stahují se informace o uživateli…"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:254
 msgid "Session established, fetching friend list..."
-msgstr "Relace navázána, stahuje se seznam přátel..."
+msgstr "Relace navázána, stahuje se seznam přátel…"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:264
 msgid "Session established, fetching friend details..."
-msgstr "Relace navázána, stahují se podrobnosti přátel..."
+msgstr "Relace navázána, stahují se podrobnosti přátel…"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:276
 msgid "Session established, fetching photo albums..."
-msgstr "Relace navázána, stahují se fotoalba..."
+msgstr "Relace navázána, stahují se fotoalba…"
 
 #. Note for translators: {0} and {1} are respectively firstname and surname of the user
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:286
 #, csharp-format
 msgid "{0} {1} is logged into Facebook"
 msgstr "{0} {1} je přihlášen na Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
 msgid "Facebook Connection Error"
 msgstr "Chyba připojení k Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:296
 #, csharp-format
 msgid ""
 "There was an error when downloading your information from Facebook.\n"
@@ -306,7 +327,7 @@ msgstr ""
 "\n"
 "Facebook říká: {0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:325
 msgid "You are not logged in."
 msgstr "Nejste přihlášen."
 
@@ -335,7 +356,6 @@ msgid "In this photo"
 msgstr "Na této fotografii"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:7
-#: ../src/XmpTagsImporter.cs:90
 msgid "Location"
 msgstr "Umístění"
 
@@ -374,84 +394,84 @@ msgstr "Kdo je to?"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:1
 msgid "_23hq..."
-msgstr "_23hq..."
+msgstr "_23hq…"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:2
 msgid "_Flickr..."
-msgstr "_Flickr..."
+msgstr "_Flickr…"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:3
 msgid "_Zooomr..."
-msgstr "_Zooomr..."
+msgstr "_Zooomr…"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:107
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
 msgid "Authorize"
 msgstr "Autorizovat"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
 #, csharp-format
 msgid ""
 "Return to this window after you have finished the authorization process on "
 "{0} and click the \"Complete Authorization\" button below"
 msgstr ""
 "Poté, co jste dokončili autorizační proces v {0}, vraťte se do tohoto okna a "
-"stiskněte tlačítko \"Dokončit autorizaci\" umístěné níže"
+"stiskněte tlačítko „Dokončit autorizaci“ umístěné níže"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:114
 msgid "Complete Authorization"
 msgstr "Dokončit autorizaci"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
 #, csharp-format
 msgid "Logging into {0}"
 msgstr "Přihlášen k {0}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:120
 msgid "Checking credentials..."
-msgstr "Ověřují se doklady..."
+msgstr "Ověřují se doklady…"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:127
 #, csharp-format
 msgid "Welcome {0} you are connected to {1}"
 msgstr "Vítejte {0}, jste připojeni k {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:130
 #, csharp-format
 msgid "Sign in as a different user"
 msgstr "Přihlásit jako jiný uživatel"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:135
 #, csharp-format
 msgid "Used {0} of your allowed {1} monthly quota"
 msgstr "Využito {0} z vaší celkové povolené měsíční kvóty {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:239
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:310
 msgid "Unable to log on"
 msgstr "Nelze přihlásit"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:330
 #, csharp-format
 msgid "Waiting for response {0} of {1}"
 msgstr "Čeká se na odpověď {0} z {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:357
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:769
 #, csharp-format
 msgid "Uploading picture \"{0}\""
-msgstr "Nahrává se obrázek \"{0}\""
+msgstr "Nahrává se obrázek „{0}“"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
 #, csharp-format
 msgid "Error Uploading To {0}: {1}"
 msgstr "Chyba nahrávání do {0}: {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:467
 msgid "Unable to log on."
 msgstr "Nelze přihlásit."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:468
 #, csharp-format
 msgid ""
 "F-Spot was unable to log on to {0}.  Make sure you have given the "
@@ -461,26 +481,24 @@ msgstr ""
 "autentizaci prostřednictvím {0} rozhraní webového prohlížeče."
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
 msgid "<b>Account</b>"
 msgstr "<b>Účet</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5 ../src/ui/mail_dialog.ui.h:6
 msgid "<b>Photos</b>"
 msgstr "<b>Fotografie</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
 msgid "<b>Style</b>"
 msgstr "<b>Styl</b>"
 
@@ -489,11 +507,10 @@ msgid "<b>Viewing permissions</b>"
 msgstr "<b>Oprávnění k prohlížení</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
 msgid "Export"
 msgstr "Exportovat"
 
@@ -508,7 +525,7 @@ msgid ""
 "Spot the authorization. "
 msgstr ""
 "Pro nahrávání fotografií potřebuje F-Spot autorizaci k vašemu účtu na {0}. "
-"Stisknutím tlačítka \"Autorizovat\" otevřete webový prohlížeč a udělte "
+"Stisknutím tlačítka „Autorizovat“ otevřete webový prohlížeč a udělte "
 "programu autorizaci."
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:9
@@ -536,17 +553,15 @@ msgid "Visible to Friends"
 msgstr "Viditelné pro přátele"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
 msgid "_Export tags"
 msgstr "_Exportovat štítky"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:18
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
 msgid "_Resize to: "
 msgstr "Změnit _velikost na: "
 
@@ -555,153 +570,169 @@ msgid "_View photos in browser when done uploading"
 msgstr "Po nahrání otevřít fotografie _v prohlížeči"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
 msgid "pixels"
 msgstr "pixelů"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.addin.xml.h:1
 msgid "F_older..."
-msgstr "Sl_ožka..."
+msgstr "Sl_ožka…"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:117
 msgid "Select Export Folder"
 msgstr "Vybrat složku pro export"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:169
 msgid "Building Gallery"
 msgstr "Vytváří se galerie"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:206
 #, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Chyba při nahrávání obrázku \"{0}\" do galerie:{2}{1}"
+msgid "Exporting \"{0}\"..."
+msgstr "Exportuje se „{0}“…"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Chyba: Chyba při přenosu: Přerušuji"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:213
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Chyba při kopírování „{0}“ do galerie:{2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:239
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "Přenáší se do „{0}“"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:240
+msgid "Transferring..."
+msgstr "Přenáší se…"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Chyba: Soubor už existuje; ruším"
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+msgid "Export Complete."
+msgstr "Export byl dokončen"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:247
+msgid "Exporting Photos Completed."
+msgstr "Export fotografií byl ukončen."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:312
+msgid "Exporting Photos"
+msgstr "Exportují se fotografie"
 
 #. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
 msgid "Light"
 msgstr "Světlé"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:718
 msgid "Dark"
 msgstr "Tmavé"
 
 #. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:898
 msgid "Prev"
 msgstr "Předchozí"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:900
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
 msgid "Index"
 msgstr "Index"
 
 #. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:903
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1075
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1115
+#: ../src/MainWindow.cs:349 ../src/Widgets/Sidebar.cs:56
 msgid "Tags"
 msgstr "Štítky"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:906
+#: ../src/ItemAction.cs:102
 msgid "Next"
 msgstr "Následující"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1010
 msgid "Gallery generated by"
 msgstr "Galerie generovaná programem"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
 msgid "Show Styles"
 msgstr "Ukázat styly"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1051
 msgid "Hide Styles"
 msgstr "Skrýt styly"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1086
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1087
 #: ../src/ui/main_window.ui.h:24
 msgid "Tags: "
 msgstr "Štítky: "
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1218
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1351
 msgid "Page:"
 msgstr "Strana:"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
-msgid "\n"
-msgstr "\n"
-
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
 msgid "<b>Destination</b>"
 msgstr "<b>Cíl</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:2
 msgid "<b>Export Method</b>"
 msgstr "<b>Metoda exportu</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
 msgid "Create _gallery using \"Original\""
-msgstr "Vytvořit _galerii použitím \"Originálu\""
+msgstr "Vytvořit _galerii použitím „Originálu“"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
 msgid "Create standalone _web gallery"
 msgstr "Vytvořit samostatnou _webovou galerii"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
 msgid "D_escription:"
 msgstr "_Popisek:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
 msgid "Export _tags"
 msgstr "Exportovat š_títky"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
 msgid "Export tag _icons"
 msgstr "Exportovat _ikony štítků"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
 msgid "Folder Export"
 msgstr "Export složky"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
 msgid "G_allery Name:"
 msgstr "Název _galerie:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
 msgid "Open _destination when done exporting"
 msgstr "Po _dokončení exportu otevřít cíl"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
 msgid "_Folder:"
 msgstr "_Složka:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:19
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
 msgid "_Save the files only"
 msgstr "Pouze uložit _soubory"
 
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Neobsloužená výjimka"
+
 #: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
 msgid "Web _Gallery..."
-msgstr "Webová _galerie..."
+msgstr "Webová _galerie…"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:54
 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"
@@ -709,32 +740,32 @@ msgstr ""
 "Nelze se připojit ke galerii, jejíž verze není známa.\n"
 "Ujistěte se, že používáte Remote plugin verze 1.0.8 nebo novější"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:391
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
 msgid "Invalid URL"
 msgstr "Neplatné URL"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:393
 msgid "The gallery URL entry does not appear to be a valid URL"
 msgstr "URL záznam galerie zřejmě není validní."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:402
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:440
-msgid "Error while connecting to Gallery"
-msgstr "Chyba při připojování ke Gallery"
-
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
+msgid "Error while connecting to Gallery"
+msgstr "Chyba při připojování ke Gallery"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:404
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:431
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:442
 #, csharp-format
 msgid "The following error was encountered while attempting to log in: {0}"
 msgstr "Při pokusu o přihlášení došlo k následující chybě: {0}"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:417
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
 msgid "A Gallery with this name already exists"
 msgstr "Galerie tohoto jména už existuje"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:419
 #, csharp-format
 msgid ""
 "There is already a Gallery with the same name in your registered Galleries. "
@@ -742,15 +773,15 @@ msgid ""
 msgstr ""
 "Galerie tohoto jména je již registrována. Zvolte prosím unikátní název."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:529
 msgid "(TopLevel)"
 msgstr "(Nejvyšší úroveň)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:590
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
 msgid "Invalid Gallery name"
 msgstr "Neplatný název galerie"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:592
 msgid ""
 "The gallery name contains invalid characters.\n"
 "Only letters, numbers, - and _ are allowed"
@@ -758,44 +789,42 @@ msgstr ""
 "Název galerie obsahuje neplatné znaky.\n"
 "Jsou povolena pouze písmena, čísla, znaky pomlčka a podtržítko"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:796
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:788
 #, csharp-format
 msgid "Error uploading picture \"{0}\" to Gallery: {1}"
-msgstr "Chyba při nahrávání obrázku  \"{0}\" do galerie: {1}"
+msgstr "Chyba při nahrávání obrázku „{0}“ do galerie: {1}"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:816
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:714
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:614
 msgid "(No Gallery)"
 msgstr "(Žádná Galerie)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:908
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:836
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:710
 msgid "(Not Connected)"
 msgstr "(Nepřipojen)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:909
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:837
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:711
 msgid "(No Albums)"
 msgstr "(Žádná alba)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:961
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:902
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:752
 msgid "No account selected"
 msgstr "Není vybrán žádný účet"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
 msgid "<b>Album</b>"
 msgstr "<b>Album</b>"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
 msgid "<b>Gallery</b>"
 msgstr "<b>Galerie</b>"
 
@@ -805,87 +834,86 @@ msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
 msgstr ""
 "<span weight='bold' size='larger'>Chyba při připojení ke galerii</span>\n"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
 msgid "Export _titles and comments"
 msgstr "Exportovat _titulky a poznámky"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
 msgid "Open _album in browser when done uploading"
 msgstr "Po nahrání otevřít _album v prohlížeči"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
 msgid "Please verify that the settings for this gallery are correct."
 msgstr "Ověřte prosím, že nastavení této galerie jsou v pořádku."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
 msgid "U_RL:"
 msgstr "U_RL:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
 msgid "_Album Name:"
 msgstr "Název _alba:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
 msgid "_Description:"
 msgstr "_Popisek:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
 msgid "_Export to Album:"
 msgstr "_Exportovat do alba:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
 msgid "_Gallery Name:"
 msgstr "Název _galerie:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
 msgid "_Gallery:"
 msgstr "_Galerie:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
 msgid "_Parent Album:"
 msgstr "Nadřazené alb_um:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
 msgid "_Password:"
 msgstr "_Heslo:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
 msgid "_Title:"
 msgstr "_Titulek:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
 msgid "_Username:"
 msgstr "_Uživatelské jméno:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:363
 msgid "Error reading server response"
 msgstr "Chyba při čtení odpovědi serveru"
 
 #. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:375
 msgid "Server returned response without Gallery content"
 msgstr "Server vrátil odpověď bez obsahu galerie"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
 msgid "Error while creating new album"
 msgstr "Chyba při vytváření nového alba"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:713
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to perform the "
@@ -897,40 +925,40 @@ msgstr ""
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml.h:1
 msgid "_PicasaWeb..."
-msgstr "_PicasaWeb..."
+msgstr "_PicasaWeb…"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:444
 msgid "Error while creating Album"
 msgstr "Chyba při vytváření alba."
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:445
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to create an album: {0}"
 msgstr "Při pokusu o vytvoření alba došlo k následující chybě: {0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:615
 #, csharp-format
 msgid "{0} Sent"
 msgstr "Odesláno {0} "
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:617
 #, csharp-format
 msgid "{0} of approx. {1}"
 msgstr "{0} z cca {1}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:683
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:583
 #, csharp-format
 msgid "Error Uploading To Gallery: {0}"
 msgstr "Chyba při nahrávání do Galerie: {0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:765
 #, csharp-format
 msgid "Available space: {0}, {1}% used out of {2}"
 msgstr "Dostupný prostor: {0}, využito {1}% z {2}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:878
 #, csharp-format
 msgid ""
 "The selected album has a limit of {0} pictures,\n"
@@ -958,42 +986,38 @@ msgid ""
 msgstr ""
 "Ověřte prosím, že nastavení pro tuto galerii jsou správná.\n"
 "Vložte znaky tak, jak jsou zobrazeny na obrázku\n"
-"v poli 'Captcha'. <i>Velká a malá písmena se nerozlišují</i>"
+"v poli „Captcha“. <i>Velká a malá písmena se nerozlišují</i>"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
 msgid "Public Album"
 msgstr "Veřejné album"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
 msgid "_Album Title:"
 msgstr "Název _alba:"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
-msgid "_Autorotate"
-msgstr "_Automatické otočení"
-
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
 msgid "_Captcha:"
 msgstr "_Captcha:"
 
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.addin.xml.h:1
 msgid "_SmugMug..."
-msgstr "_SmugMug..."
+msgstr "_SmugMug…"
 
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:3
 msgid "<b>SmugMug Export</b>"
 msgstr "<b>Export do SmugMug</b>"
 
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
 msgid "_Account:"
 msgstr "Úče_t:"
 
 #: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:132
 #, csharp-format
 msgid "Uploading photo \"{0}\""
-msgstr "Nahrávám fotografii \"{0}\""
+msgstr "Nahrává se fotografie „{0}“"
 
 #: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:206
 msgid "Logging into Tabblo"
@@ -1005,7 +1029,7 @@ msgstr "Získat URL pro nahrávání"
 
 #: ../extensions/Exporters/TabbloExport/TabbloExport.addin.xml.h:1
 msgid "_Tabblo..."
-msgstr "_Tabblo..."
+msgstr "_Tabblo…"
 
 #: ../extensions/Exporters/TabbloExport/TabbloExport.cs:308
 msgid "Done sending photos"
@@ -1045,50 +1069,46 @@ msgstr "_Odstranit exportované fotografie:"
 
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
 msgid "Select..."
-msgstr "Vybrat..."
+msgstr "Vybrat…"
 
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
 msgid "_Attach to exported photos:"
 msgstr "Připojit exportov_ané fotografie:"
 
 #: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
-msgid "<b>{0}</b>."
-msgstr "<b>{0}</b>."
-
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "A trust error occured while attempting to access"
 msgstr "Při pokusu o přístup došlo k chybě důvěryhodnosti"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "Abort this session"
 msgstr "Zrušit toto sezení"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
 msgid "Always trust this site's certificate"
 msgstr "Vždy věřit cerifikátu tohoto serveru"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
 msgid "Do you wish to:"
 msgstr "Přejete si:"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
 msgid "Trust Error"
 msgstr "Chyba důvěryhodnosti"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
 msgid "Trust the site's certificate this once"
 msgstr "Věřit certifikátu tohoto serveru pouze nyní"
 
 #: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
 msgid "Compressed fil_e..."
-msgstr "Komprimova_ný soubor..."
+msgstr "Komprimova_ný soubor…"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../src/Widgets/EditorPage.cs:199
 msgid "No selection available"
 msgstr "Žádný výběr není k dispozici"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:49
 msgid ""
 "This tool requires an active selection. Please select one or more pictures "
 "and try again"
@@ -1096,18 +1116,18 @@ msgstr ""
 "Tento nástroj vyžaduje aktivní výběr. Vyberte prosím jednu nebo více "
 "fotografií a zkuste to znovu"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:64
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:65
 msgid "Select export folder"
 msgstr "Vybrat složku pro export"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:102
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:103
 msgid "Exporting files"
 msgstr "Exportují se soubory"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:109
 #, csharp-format
 msgid "Preparing photo \"{0}\""
-msgstr "Připravuje se fotografie \"{0}\""
+msgstr "Připravuje se fotografie „{0}“"
 
 #: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
 msgid "_Create"
@@ -1125,6 +1145,10 @@ msgstr "_Umístění:"
 msgid "_Scale:"
 msgstr "Měřítk_o:"
 
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "Zjistit duplicity…"
+
 #: ../extensions/Tools/HashJob/HashJob.cs:53
 msgid ""
 "In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1150,16 +1174,12 @@ msgstr "_Zavřít"
 
 #: ../extensions/Tools/HashJob/HashJob.cs:102
 msgid "Processing images..."
-msgstr "Obrázky jsou zpracovávány..."
+msgstr "Obrázky jsou zpracovávány…"
 
 #: ../extensions/Tools/HashJob/HashJob.cs:108
 msgid "Stopped"
 msgstr "Zastaveno"
 
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Check for Duplicates..."
-msgstr "Zjistit duplicity..."
-
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
 msgid "F-Spot Gallery"
 msgstr "Galerie F-Spot"
@@ -1193,6 +1213,19 @@ msgstr "Vybrané"
 msgid "Live Web Gallery"
 msgstr "Živá webová galerie"
 
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "není"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
+msgstr " Galerie: {0},  Fotografií: {1},  Poslední uživatel: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "Galerie není aktivní"
+
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
 msgid ""
 "<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1208,7 +1241,7 @@ 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>Pokud je galerie aktivní, použijte pro přístupke sdíleným "
+"<small><i>Pokud je galerie aktivní, použijte pro přístup ke sdíleným "
 "fotografiím \n"
 "z jiného počítače níže uvedené URL.</i></small>"
 
@@ -1257,28 +1290,15 @@ msgstr "Sdílení:"
 msgid "Views:"
 msgstr "Zobrazení:"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "není"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
-msgstr " Galerie: {0},  Fotografií: {1},  Poslední uživatel: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "Galerie není aktivní"
-
 #: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
 msgid "Merge Db"
 msgstr "Sloučit Db"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:73
+#: ../extensions/Tools/MergeDb/MergeDb.cs:74
 msgid "Error opening the selected file"
 msgstr "Chyba při otevírání zvoleného souboru"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:74
+#: ../extensions/Tools/MergeDb/MergeDb.cs:75
 #, csharp-format
 msgid ""
 "The file you selected is not a valid or supported database.\n"
@@ -1287,7 +1307,7 @@ msgid ""
 msgstr ""
 "Soubor, který jste vybrali, není validní nebo podporovanou databází.\n"
 "\n"
-"Zachycena výjimka \"{0}\"."
+"Zachycena výjimka „{0}“."
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:1
 msgid ""
@@ -1306,11 +1326,11 @@ msgid ""
 "imported from that database.</i></small>"
 msgstr ""
 "<small><i>Vyberte, co importovat ze zvolené databáze.\n"
-"\"Pouze nové filmy\" je volba vhodná v případě, že chcete předejít vložení "
+"„Pouze nové filmy“ je volba vhodná v případě, že chcete předejít vložení "
 "fotografií, které jste importovali dříve.\n"
-"\"Samostatný film\" vás nechá vybrat, jaká data importovat.\n"
-"Volba \"Všechno\"  bude importovat všechny obrázky a pokud jste již "
-"importovali z této databáze, vzniknou duplicity.</i></small>"
+"„Samostatný film“ vás nechá vybrat, jaká data importovat.\n"
+"Volba „Všechno“ bude importovat všechny obrázky a pokud jste již importovali "
+"z této databáze, vzniknou duplicity.</i></small>"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:6
 msgid ""
@@ -1354,11 +1374,11 @@ msgid "New Rolls Only"
 msgstr "Pouze nové filmy"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291 ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
 msgid "Skip"
 msgstr "Přeskočit"
 
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
 #, csharp-format
 msgid ""
 "<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1396,124 +1416,218 @@ msgstr "Nastavit F-Spot jako spořič obrazovky"
 msgid "Screensaver Configuration"
 msgstr "Nastavení spořiče obrazovky"
 
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Zobrazení průhledných částí."
 
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "Správce fotografií F-Spot"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "Toto povolí interpolaci na zvětšených obrázcích."
 
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Organizuje, prohlíží a sdílí vaše fotografie"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Výška dialogu importu."
 
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Správce fotografií"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Výška hlavního okna."
 
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "Importovat do F-Spot"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Výška okna prohlížeče obrázku."
 
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "Prohlížeč fotografií F-Spot"
+#: ../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 ""
+"Pokud je zapnuta volba „průhlednost“, bude barva zde specifikovaná použita "
+"při prohlížení obrázků jako průhledná."
 
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Prohlížeč fotografií"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "Interpolovat obrázek při přiblížení."
 
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "Soubor nenalezen"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Zvětšit hlavní okno na celou obrazovku."
 
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Neznámý typ transformace %d"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Zvětšit okno prohlížeče fotografií na celou obrazovku."
 
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Operace selhala"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "Cesta k souboru gtkrc pro vlastní motiv F-Spot."
 
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Náhled"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Zobrazit datum v pohledu náhledů."
 
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Cesta"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Zobrazit hodnocení v pohledu náhledů."
 
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "Soubor"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Zobrazit štítky v pohledu náhledů."
 
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Vybrat štítek"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Zobrazit název souboru v okně prohlížeče."
 
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Stahuji náhledy"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Zobrazit filmový pás v hlavním okně."
 
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Stahuji náhled {0}"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Zobrazit postranní lištu v hlavním okně."
 
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Kopíruji soubor {0} z {1}"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Zobrazit časovou osu v hlavním okně."
 
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Chyba při přenosu souboru"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Zobrazit lištu nástrojů v hlavním okně."
 
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "Stahování hotovo"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "Zobrazit lištu nástrojů v okně prohlížeče obrázků"
 
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Dokončeno kopírování souborů"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Velikost ikon štítků zobrazených v postranní liště."
 
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Přenáším z fotoaparátu \"{0}\""
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "Pozice X použitá pro hlavní okno."
 
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "Fotoaparát"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "Pozice X použitá pro okno prohlížeče fotografií."
 
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Port"
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "Pozice Y použitá pro hlavní okno."
 
-#: ../src/Core/App.cs:278
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "Pozice Y použitá pro okno prohlížeče fotografií."
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "Barva použitá pro průhledné cesty."
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "Výška importního dialogu."
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "Výška hlavního okna."
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "Výška prohlížeče fotografií."
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "Orientace filmového pásu pokud je zobrazen."
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "Orientace filmového pásu."
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "Velikost (šířka) postranní lišty v hlavním okně."
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "Velikost postranní lišty v hlavním okně."
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "Šířka dialogu importu."
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "Šířka hlavního okna."
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "Šířka prohlížeče fotografií."
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "Použít název souboru aktuální fotografie jako titulek okna prohlížeče."
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Šířka dialogu importu."
+
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Šířka hlavního okna."
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Šířka okna prohlížeče obrázků."
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "Šířka pole náhledu v dialogu importu."
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "Pozice X hlavního okna."
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "Pozice X okna prohlížeče fotogafií."
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Pozice Y hlavního okna."
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Pozice Y okna prohlížeče fotogafií."
+
+#: ../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 ""
+"Můžete zvolit, jak se mají zobrazovat průhledné části obrázků. Tato volba "
+"nemá žádný vliv na fotografie, ale zobrazení průhlednosti v podobě "
+"šachovnice nebo zvolené barvy může být užitečné při prohlížení ikon a "
+"dalších grafických souborů s průhlednými částmi."
+
+#: ../src/Core/App.cs:290
 #, csharp-format
 msgid "No photos matching {0} found"
 msgstr "Nenalezena žádná fotografie odpovídající {0}"
 
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:291
 #, 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 ""
-"Štítkem \"{0}\" není označena žádná fotografie. Zkuste jím\n"
+"Štítkem „{0}“ není označena žádná fotografie. Zkuste jím\n"
 "označit některé fotografie nebo vyberte jiný\n"
-"v dialogu nastavení."
+"v dialogovém okně nastavení."
 
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:295
 msgid "Search returned no results"
 msgstr "Hledání nevrátilo žádné výsledky"
 
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:296
 msgid ""
 "The tag F-Spot is looking for does not exist. Try\n"
 "selecting a different tag in the F-Spot preference\n"
@@ -1523,16 +1637,11 @@ msgstr ""
 "zvolit jiný štítek v dialogu nastavení."
 
 #. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:359
 msgid "Reparented"
 msgstr "Podřízená"
 
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Podřízená ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:376
 #, csharp-format
 msgid "Modified"
 msgid_plural "Modified ({0})"
@@ -1540,22 +1649,16 @@ msgstr[0] "Změněn"
 msgstr[1] "Změněny ({0})"
 msgstr[2] "Změněno ({0})"
 
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:399
 #, csharp-format
 msgid "Modified in {1}"
 msgstr "Změněn v {1}"
 
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:399
 #, csharp-format
 msgid "Modified in {1} ({0})"
 msgstr "Změněn v {1} ({0})"
 
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:62
-msgid "Original"
-msgstr "Originál"
-
 #: ../src/Editors/AutoStretchEditor.cs:17
 msgid "Auto Color"
 msgstr "Automatické barvy"
@@ -1568,45 +1671,45 @@ msgstr "Úprava barev"
 msgid "Adjust"
 msgstr "Přizpůsobit"
 
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
 msgid "4 x 3 (Book)"
 msgstr "4 × 3 (kniha)"
 
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
 msgid "4 x 6 (Postcard)"
 msgstr "4 × 6 (pohlednice)"
 
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
 msgid "5 x 7 (L, 2L)"
 msgstr "5 × 7 (L, 2L)"
 
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
 msgid "8 x 10"
 msgstr "8 × 10"
 
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
 msgid "Square"
 msgstr "Čtverec"
 
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
 msgid "Crop"
 msgstr "Ořez"
 
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
 msgid "Select the area that needs cropping."
 msgstr "Zvolte oblast, kterou je potřeba oříznout."
 
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
 msgid "No Constraint"
 msgstr "Žádné omezení"
 
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
 msgid "Same as photo"
 msgstr "Stejné jako fotka"
 
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
 msgid "Custom Ratios..."
-msgstr "Vlastní poměry..."
+msgstr "Vlastní poměry…"
 
 #: ../src/Editors/DesaturateEditor.cs:17
 msgid "Desaturate"
@@ -1636,24 +1739,6 @@ msgstr "Změkčení okrajů"
 msgid "Straighten"
 msgstr "Narovnání"
 
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "Chyba importu"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Chyba importu {0}{2}{2}{1}"
-
-#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
-#, csharp-format
-msgid "No way to save files of type \"{0}\""
-msgstr "Neexistuje možnost uložení souborů typu \"{0}\""
-
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Neobsloužená výjimka"
-
 #: ../src/FSpot.addin.xml.h:1
 msgid "Copy Photo"
 msgstr "Kopírovat fotografii"
@@ -1670,13 +1755,13 @@ msgstr "Otevřít _v"
 msgid "Rem_ove Tag"
 msgstr "_Odstranit štítek"
 
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/SingleView.cs:428
+#: ../src/ui/main_window.ui.h:16
 msgid "Rotate _Left"
 msgstr "Otočit do_leva"
 
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:70
-#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/SingleView.cs:429
+#: ../src/ui/main_window.ui.h:17
 msgid "Rotate _Right"
 msgstr "Otočit do_prava"
 
@@ -1684,483 +1769,85 @@ msgstr "Otočit do_prava"
 msgid "Tools"
 msgstr "Nástroje"
 
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Připojit štítek"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:41
 msgid "_Delete From Drive"
 msgstr "Vymazat z _disku"
 
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:60
 msgid "_Remove From Catalog"
 msgstr "Odst_ranit z katalogu"
 
 #: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
-msgid "1024 px"
-msgstr "1024 px"
-
-#: ../src/f-spot.glade.h:3
-msgid "320 px"
-msgstr "320 px"
-
-#: ../src/f-spot.glade.h:4
-msgid "480 px"
-msgstr "480 px"
-
-#: ../src/f-spot.glade.h:5
-msgid "640 px"
-msgstr "640 px"
-
-#: ../src/f-spot.glade.h:6
-msgid "800 px"
-msgstr "800 px"
-
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
 msgid "<b>Co_rrections</b>"
 msgstr "<b>Ko_rekce</b>"
 
-#: ../src/f-spot.glade.h:13
-msgid "<b>Image Interpolation</b>"
-msgstr "<b>Interpolace obrázku</b>"
-
-#: ../src/f-spot.glade.h:15
-msgid "<b>Size</b>"
-msgstr "<b>Velikost</b>"
-
-#: ../src/f-spot.glade.h:17
-msgid "<b>Summary</b>"
-msgstr "<b>Souhrn</b>"
-
-#: ../src/f-spot.glade.h:18
-msgid "<b>Transparent Parts</b>"
-msgstr "<b>Průhledné části</b>"
-
-#: ../src/f-spot.glade.h:19
-msgid "<b>View all pictures imported</b>"
-msgstr "<b>Zobrazit všechny importované obrázky</b>"
-
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:2
 msgid "<b>_White Balance</b>"
 msgstr "<b>_Vyvážení bílé</b>"
 
-#: ../src/f-spot.glade.h:21
-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>Tuto volbu povolte, chcete-li používat interpolaci při "
-"přibližování obrázků. Pro prohlížení fotografií by volba neměla být "
-"zakázána, zákaz interpolace však může být užitečný například při návrhu "
-"ikonek.</i></small>"
-
-#: ../src/f-spot.glade.h:22
-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>Můžete zvolit, jak se mají zobrazovat průhledné části obrázků. "
-"Tato volba nemá žádný vliv na fotografie, ale zobrazení průhlednosti v "
-"podobě šachovnice nebo zvolené barvy může být užitečné při prohlížení ikon a "
-"dalších grafických souborů s průhlednými částmi.</i></small>"
-
-#: ../src/f-spot.glade.h:23
-msgid "As _background"
-msgstr "Jako _pozadí"
-
-#: ../src/f-spot.glade.h:24
-msgid "As _custom color: "
-msgstr "Jako v_lastní barva: "
-
-#: ../src/f-spot.glade.h:25
-msgid "As check _pattern"
-msgstr "Jako ša_chovnice"
-
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Připojit štítky:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Připojit štítek:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:3
 msgid "C_ontrast:"
 msgstr "K_ontrast:"
 
-#: ../src/f-spot.glade.h:31
-msgid "C_reate"
-msgstr "Vy_tvořit"
-
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "Výběr fotoaparátu"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "Kopírovat soubory do složky Photos"
-
-#: ../src/f-spot.glade.h:34
-msgid "Create Mail"
-msgstr "Vytvořit e-mail"
-
-#: ../src/f-spot.glade.h:35
-msgid "Create _icon for this tag when first used"
-msgstr "Vytvořit _ikonu pro tento štítek poté, co bude prvně použit"
-
-#: ../src/f-spot.glade.h:36
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr ""
-"Vytvořit e-mail s přiloženými zvolenými fotografiemi (s možností změny "
-"velikosti)"
-
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr "Detekovat duplicity"
-
-#: ../src/f-spot.glade.h:38
-msgid "Display File _Names"
-msgstr "Zobrazovat _názvy souborů"
-
-#: ../src/f-spot.glade.h:39
-msgid "Display only those photos that were imported in specified Rolls."
-msgstr "Zobrazit pouze fotografie ze zadaných filmů."
-
-#: ../src/f-spot.glade.h:40
-msgid "Do not send a mail"
-msgstr "Neodesílat e-mail"
-
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "E-_mail:"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "E_xportovat popisky a poznámky"
-
-#: ../src/f-spot.glade.h:43
-msgid "Estimated new size"
-msgstr "Odhadovaná nová velikost"
-
-#: ../src/f-spot.glade.h:45
-msgid "Extra large"
-msgstr "Extra velký"
-
-#: ../src/f-spot.glade.h:46
-msgid "F-Spot View"
-msgstr "Pohled F-Spot"
-
-#: ../src/f-spot.glade.h:48
-msgid "Filter on selected rolls"
-msgstr "Použít filtr hledání na vyfotografované filmy"
-
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "G_alerie:"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "Galerie"
-
-#: ../src/f-spot.glade.h:51 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "Import"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "Zdroj importu:"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "Včetně podadresářů"
-
-#: ../src/f-spot.glade.h:55
-msgid "Large"
-msgstr "Velké"
-
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:4
 msgid "Manage your custom selection ratios"
 msgstr "Spravovat vaše vlastní poměry výběru"
 
-#: ../src/f-spot.glade.h:57
-msgid "Medium"
-msgstr "Střední"
-
-#: ../src/f-spot.glade.h:59
-msgid "Number of photos in selected rolls:"
-msgstr "Počet fotografií ve zvolených filmech:"
-
-#: ../src/f-spot.glade.h:60
-msgid "Number of pictures"
-msgstr "Počet obrázků"
-
-#: ../src/f-spot.glade.h:61
-msgid "Open _Folder..."
-msgstr "Otevřít _složku..."
-
-#: ../src/f-spot.glade.h:63
-msgid "Original size (possible very large file size)"
-msgstr "Původní velikost (pravděpodobně velmi velký soubor)"
-
-#: ../src/f-spot.glade.h:64 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
-msgid "P_arent Tag:"
-msgstr "_Rodičovský štítek:"
-
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "Pozastavit"
-
-#: ../src/f-spot.glade.h:66
-msgid "Preferences"
-msgstr "Nastavení"
-
-#: ../src/f-spot.glade.h:67 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Předchozí"
-
-#: ../src/f-spot.glade.h:68
-msgid "Repair"
-msgstr "Opravit"
-
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "Zvolte fotografie, které se mají kopírovat z fotoaparátu..."
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:5
 msgid "Select a Tag..."
-msgstr "Vyberte štítek..."
-
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr "Vyberte fotoaparát, ze kterého chcete přenést soubory"
+msgstr "Vyberte štítek…"
 
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "Zvolený fotoaparát: "
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:6
 msgid "Selection Constraints"
 msgstr "Omezení výběru"
 
-#: ../src/f-spot.glade.h:76 ../src/ui/main_window.ui.h:21
-msgid "Set as _Background"
-msgstr "Nastavit jako _pozadí"
-
-#: ../src/f-spot.glade.h:77
-msgid "Show all photos."
-msgstr "Zobrazit všechny fotografie."
-
-#: ../src/f-spot.glade.h:78
-msgid "Show or hide the side pane"
-msgstr "Zobrazit nebo skrýt boční panel"
-
-#: ../src/f-spot.glade.h:79
-msgid "Show or hide the toolbar"
-msgstr "Zobrazit nebo skrýt lištu nástrojů"
-
-#: ../src/f-spot.glade.h:80
-msgid "Side _pane"
-msgstr "Boční _panel"
-
-#: ../src/f-spot.glade.h:81
-msgid "Small"
-msgstr "Malé"
-
-#: ../src/f-spot.glade.h:82
-msgid ""
-"Specify if an original size picture should be rotated or not. Smaller sizes "
-"are automatically rotated."
-msgstr ""
-"Zvolte, zda má být obrázek v původní velikosti otočen či nikoliv. Menší "
-"velikosti jsou otočeny automaticky."
-
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "Odstranit _metadata obrázku"
-
 #. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:8
 msgid "Te_mp:"
 msgstr "Tep_lota:"
 
-#: ../src/f-spot.glade.h:86
-msgid "Tiny"
-msgstr "Drobný"
-
-#: ../src/f-spot.glade.h:87
-msgid "Total original size"
-msgstr "Celková původní velikost"
-
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:28
-msgid "Zoom _in"
-msgstr "Zvětš_it"
-
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:29
-msgid "Zoom _out"
-msgstr "Z_menšit"
-
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:30
-msgid "Zoom in"
-msgstr "Zvětšit"
-
-#: ../src/f-spot.glade.h:91 ../src/ui/main_window.ui.h:31
-msgid "Zoom out"
-msgstr "Zmenšit"
-
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:9
 msgid "_Brightness:"
 msgstr "_Jas:"
 
-#: ../src/f-spot.glade.h:93
-msgid "_Create Mail"
-msgstr "Vy_tvořit e-mail"
-
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
-msgid "_Edit"
-msgstr "U_pravit"
-
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:10
 msgid "_Exposure:"
 msgstr "_Expozice:"
 
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
-msgid "_Fullscreen"
-msgstr "_Celá obrazovka"
-
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Galerie"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
-msgid "_Help"
-msgstr "_Nápověda"
-
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:11
 msgid "_Hue:"
 msgstr "_Odstín:"
 
-#: ../src/f-spot.glade.h:104
-msgid "_Interpolate image on zoom"
-msgstr "_Interpolovat obrázek při přiblížení"
-
-#: ../src/f-spot.glade.h:105
-msgid "_New Window"
-msgstr "_Nové okno"
-
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "Po nahrání _otevřít album v prohlížeči"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "Po dokončení exportu _otevřít cíl"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
-msgid "_Photo"
-msgstr "_Fotografie"
-
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:12
 msgid "_Saturation:"
 msgstr "_Sytost:"
 
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "Změnit _měřítko fotografií, aby nebyly větší než: "
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
-msgid "_Slideshow"
-msgstr "_Promítání snímků"
-
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "_Odstranit metadata"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
-msgid "_Tag Name:"
-msgstr "Název š_títku:"
-
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:13
 msgid "_Tint:"
 msgstr "_Tón:"
 
-#: ../src/f-spot.glade.h:116
-msgid "_Toolbar"
-msgstr "Lišta nás_trojů"
-
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
-msgid "_View"
-msgstr "_Zobrazit"
-
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "_Virtuální systém souborů"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
-msgid "and"
-msgstr "a"
-
-#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
-msgid ""
-"at\n"
-"after\n"
-"between"
-msgstr ""
-"v\n"
-"po\n"
-"mezi"
-
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
 #: ../src/FullScreenView.cs:58
 msgid "Hide"
 msgstr "Skrýt"
 
 #: ../src/FullScreenView.cs:60
-msgid "Hide Toolbar"
+msgid "Hide toolbar"
 msgstr "Skrýt lištu nástrojů"
 
 #: ../src/FullScreenView.cs:66
 msgid "Info"
 msgstr "Informace"
 
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:201
-msgid "Image Information"
+#: ../src/FullScreenView.cs:68
+msgid "Image information"
 msgstr "Informace o obrázku"
 
 #: ../src/FullScreenView.cs:73
 msgid "Exit fullscreen"
 msgstr "Ukončit celou obrazovku"
 
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:341
-#: ../src/SingleView.cs:88
+#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:314
+#: ../src/SingleView.cs:92
 msgid "Slideshow"
 msgstr "Promítání snímků"
 
@@ -2180,205 +1867,16 @@ msgstr "Více dat"
 msgid "More"
 msgstr "Více"
 
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:34
 msgid "_Clear Date Range"
 msgstr "_Vymazat rozsah data"
 
-#: ../src/Imaging/Exif.cs:228
-msgid "Image Directory"
-msgstr "Základní informace"
-
-#: ../src/Imaging/Exif.cs:230
-msgid "Thumbnail Directory"
-msgstr "Náhled obrázku"
-
-#: ../src/Imaging/Exif.cs:232
-msgid "Exif Directory"
-msgstr "Informace EXIF"
-
-#: ../src/Imaging/Exif.cs:234
-msgid "GPS Directory"
-msgstr "Informace GPS"
-
-#: ../src/Imaging/Exif.cs:236
-msgid "InterOperability Directory"
-msgstr "Informace InterOperability"
-
-#: ../src/Imaging/Exif.cs:238
-msgid "Unknown Directory"
-msgstr "Neznámé informace"
-
-#: ../src/Imaging/ImageFile.cs:117
-msgid "Writing to this file format is not supported"
-msgstr "Zápis do tohoto formátu souboru není podporován"
-
-#: ../src/Imaging/IptcFile.cs:145
-msgid "IPTC Information Interchange Model (IIM) Version number"
-msgstr "Číslo verze IIM (IPTC Information Interchange Model)"
-
-#: ../src/Imaging/IptcFile.cs:147
-msgid "OSI Destination routing information"
-msgstr "Směrovací informace cíle OSI"
-
-#: ../src/Imaging/IptcFile.cs:149
-msgid "IPTC file format"
-msgstr "Formát souboru IPTC"
-
-#: ../src/Imaging/IptcFile.cs:151
-msgid "Identifies the provider and product"
-msgstr "Identifikuje poskytovatele a produkt"
-
-#: ../src/Imaging/IptcFile.cs:153
-msgid "A unique number identifying the envelope"
-msgstr "Jedinečné číslo identifikující obálku"
-
-#: ../src/Imaging/IptcFile.cs:155
-msgid "A unique number"
-msgstr "Jedinečné číslo"
-
-#: ../src/Imaging/IptcFile.cs:157
-msgid ""
-"The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
-msgstr ""
-"Priorita obsluhování obálky mezi 1 (nejurgentnější) a 9 (nejméně urgentní)"
-
-#: ../src/Imaging/IptcFile.cs:159
-msgid "The year, month and day (CCYYMMDD) the service sent the material"
-msgstr "Rok, měsíc a den (SSRRMMDD), kdy služba odeslala materiál"
-
-#: ../src/Imaging/IptcFile.cs:161
-msgid "The hour, minute and second (HHMMSS) the service sent the material"
-msgstr "Hodina, minuta a sekunda (HHMMSS), kdy služba odeslala materiál"
-
-#: ../src/Imaging/IptcFile.cs:163
-msgid "The character set designation"
-msgstr "Určení znakové sady"
-
-#: ../src/Imaging/IptcFile.cs:165
-msgid "External globally unique object identifier"
-msgstr "Externí, globálně jedinečný identifikátor objektu"
-
-#: ../src/Imaging/IptcFile.cs:170
-msgid "Abstract Relationship Method (ARM) identifier"
-msgstr "Identifikátor ARM (Abstract Relationship Method)"
-
-#: ../src/Imaging/IptcFile.cs:172
-msgid "Abstract Relationship Method (ARM) version number."
-msgstr "Verze ARM (Abstract Relationship Method)."
-
-#: ../src/Imaging/IptcFile.cs:175
-msgid "Number identifying the IIM version this application record uses"
-msgstr "Číslo určující verzi IIM, kterou používá tento záznam aplikace"
-
-#: ../src/Imaging/IptcFile.cs:177
-msgid "Object type reference"
-msgstr "Odkaz na typ objektu"
-
-#: ../src/Imaging/IptcFile.cs:182
-msgid "Object attribute reference"
-msgstr "Odkaz na atribut objektu"
-
-#: ../src/Imaging/IptcFile.cs:188 ../src/Imaging/IptcFile.cs:192
-msgid "Object name"
-msgstr "Název objektu"
-
-#: ../src/Imaging/IptcFile.cs:190
-msgid "Status of the objectdata according to the provider"
-msgstr "Stav dat objektu podle poskytovatele"
-
-#: ../src/Imaging/IptcFile.cs:194
-msgid "Location within a city or area where the object originates"
-msgstr "Místo ve městě či oblast původu objektu"
-
-#: ../src/Imaging/IptcFile.cs:197
-msgid "Name of the city the content is focussing on"
-msgstr "Název města, na které se obsah zaměřuje"
-
-#: ../src/Imaging/IptcFile.cs:200
-msgid "Copyright information for"
-msgstr "Informace o copyrightu pro"
-
-#: ../src/Imaging/IptcFile.cs:203
-msgid "Full name of the country of the focus of the content"
-msgstr "Plný název země, na kterou se obsah zaměřuje"
-
-#: ../src/Imaging/IptcFile.cs:206
-msgid ""
-"Two or three letter ISO3166 code of the country of the focus of the content"
-msgstr "Dvou nebo třípísmenný kód ISO 3166 země, na kterou se obsah zaměřuje"
-
-#: ../src/Imaging/IptcFile.cs:209
-msgid "Creator of the content"
-msgstr "Tvůrce obsahu"
-
-#: ../src/Imaging/IptcFile.cs:212
-msgid "Provider of the object"
-msgstr "Poskytovatel objektu"
-
-#: ../src/Imaging/IptcFile.cs:215
-msgid "The title of the author or creator"
-msgstr "Název autora nebo tvůrce"
-
-#: ../src/Imaging/IptcFile.cs:218
-msgid ""
-"The person involved in writing, editing or correcting the object data or "
-"caption/abstract"
-msgstr ""
-"Osoba, která se podílela na psaní, redakci nebo opravě dat objektu nebo "
-"popisku/shrnutí"
-
-#: ../src/Imaging/IptcFile.cs:222
-msgid "Headline of the content"
-msgstr "Nadpis obsahu"
-
-#: ../src/Imaging/IptcFile.cs:225
-msgid ""
-"Instructions from the creator to the receiver not covered by other fields"
-msgstr "Instrukce od tvůrce příjemci, nepokryté jinými poli"
-
-#: ../src/Imaging/IptcFile.cs:228
-msgid "Intellectual genre of the object"
-msgstr "Intelektuální žánr objektu"
-
-#: ../src/Imaging/IptcFile.cs:241
-msgid "Unknown IIM DataSet"
-msgstr "Neznámý DataSet IIMF"
-
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "Vybrat složku"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Nedetekován žádný fotoaparát)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Načítám {0} z {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Načítání dokončeno"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "Adresář neexistuje."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist.  Please choose a "
-"different directory"
-msgstr ""
-"Adresář {0}, který jste vybrali, neexistuje. Zvolte prosím jiný adresář"
-
-#: ../src/ImportCommand.cs:738 ../src/ImportCommand.cs:740
-#: ../src/XmpTagsImporter.cs:89
+#: ../src/Import/ImportController.cs:450 ../src/Import/ImportController.cs:452
+#: ../src/Import/MetadataImporter.cs:50
 msgid "Imported Tags"
 msgstr "Importované štítky"
 
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:308 ../src/SingleView.cs:71
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:281 ../src/SingleView.cs:75
 msgid "Rotate Left"
 msgstr "Otočit doleva"
 
@@ -2386,7 +1884,7 @@ msgstr "Otočit doleva"
 msgid "Rotate picture left"
 msgstr "Otočit obrázek doleva"
 
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:312 ../src/SingleView.cs:76
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:285 ../src/SingleView.cs:80
 msgid "Rotate Right"
 msgstr "Otočit doprava"
 
@@ -2398,73 +1896,78 @@ msgstr "Otočit obrázek doprava"
 msgid "Next picture"
 msgstr "Další obrázek"
 
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Předchozí"
+
 #: ../src/ItemAction.cs:124
 msgid "Previous picture"
 msgstr "Předchozí obrázek"
 
-#: ../src/MainWindow.cs:303
+#: ../src/Jobs/SyncMetadataJob.cs:69
+#, csharp-format
+msgid ""
+"Metadata of file {0} may be corrupt, refusing to write to it, falling back "
+"to XMP sidecar."
+msgstr ""
+"Nelze zapsat do metadat v souboru {0}, mohou být porušena. Bude se zapisovat "
+"do přidruženého souboru XMP."
+
+#: ../src/MainWindow.cs:274 ../src/UI.Dialog/ImportDialog.cs:193
+#: ../src/ui/import.ui.h:4
+msgid "Import"
+msgstr "Import"
+
+#: ../src/MainWindow.cs:276
 msgid "Import new images"
 msgstr "Importovat nové fotografie"
 
-#: ../src/MainWindow.cs:319 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:292 ../src/ui/main_window.ui.h:3
 msgid "Browse"
 msgstr "Procházet"
 
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:296
 msgid "Browse many photos simultaneously"
 msgstr "Proházet mnoho fotografií zároveň"
 
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:300
 msgid "Edit Image"
 msgstr "Upravit obrázek"
 
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:304
 msgid "View and edit a photo"
 msgstr "Zobrazit a upravit fotografii"
 
-#: ../src/MainWindow.cs:336 ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:309 ../src/SingleView.cs:87
 msgid "Fullscreen"
 msgstr "Celá obrazovka"
 
-#: ../src/MainWindow.cs:338 ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:311 ../src/SingleView.cs:89
 msgid "View photos fullscreen"
 msgstr "Zobrazit fotografie na celé obrazovce"
 
-#: ../src/MainWindow.cs:343 ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:316 ../src/SingleView.cs:94
 msgid "View photos in a slideshow"
 msgstr "Zobrazovat fotografie jako prezentaci"
 
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:331
 msgid "Previous photo"
 msgstr "Předchozí fotografie"
 
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:336
 msgid "Next photo"
 msgstr "Následující fotografie"
 
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "Nedetekován žádný fotoaparát."
-
-#: ../src/MainWindow.cs:1519
-msgid ""
-"F-Spot was unable to find any cameras attached to this system.  Double check "
-"that the camera is connected and has power"
-msgstr ""
-"F-Spot nenalezl žádný fotoaparát připojený k tomuto systému. Zkontrolujte, "
-"že fotoaparát je připojen a je napájen"
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "Chyba při připojování k fotoaparátu"
+#: ../src/MainWindow.cs:413
+msgid "Show _Find Bar"
+msgstr "Zobrazit _lištu hledání"
 
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Zachycena chyba \"{0}\" při připojování k fotoaparátu"
+#: ../src/MainWindow.cs:416
+msgid "Hide _Find Bar"
+msgstr "Skrýt _lištu hledání"
 
 #. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1723
 #, csharp-format
 msgid "Merge the selected tag"
 msgid_plural "Merge the {0} selected tags?"
@@ -2472,7 +1975,7 @@ msgstr[0] "Sloučit zvolený štítek"
 msgstr[1] "Sloučit zvolené {0} štítky?"
 msgstr[2] "Sloučit zvolených {0} štítků?"
 
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1750
 msgid ""
 "This operation will merge the selected tags and any sub-tags into a single "
 "tag."
@@ -2480,11 +1983,11 @@ msgstr ""
 "Tato operace sloučí zvolené štítky a všechny podřízené štítky do jednoho "
 "štítku."
 
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1752
 msgid "_Merge Tags"
 msgstr "_Sloučit štítky"
 
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1957
 #, csharp-format
 msgid "{0} Photo out of {1}"
 msgid_plural "{0} Photos out of {1}"
@@ -2492,7 +1995,7 @@ msgstr[0] "Fotografie {0} z {1}"
 msgstr[1] "Fotografie {0} z {1}"
 msgstr[2] "Fotografie {0} z {1}"
 
-#: ../src/MainWindow.cs:2082 ../src/SingleView.cs:467
+#: ../src/MainWindow.cs:1959 ../src/SingleView.cs:470
 #, csharp-format
 msgid "{0} Photo"
 msgid_plural "{0} Photos"
@@ -2500,7 +2003,7 @@ msgstr[0] "{0} fotografie"
 msgstr[1] "{0} fotografie"
 msgstr[2] "{0} fotografií"
 
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1962
 #, csharp-format
 msgid " ({0} selected)"
 msgid_plural " ({0} selected)"
@@ -2508,25 +2011,25 @@ msgstr[0] " ({0} vybrána)"
 msgstr[1] " ({0} vybrány)"
 msgstr[2] " ({0} vybráno)"
 
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2043
 msgid "_Ok"
 msgstr "_Budiž"
 
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2044
 msgid "Error Deleting Picture"
 msgstr "Chyba při odstraňování obrázků"
 
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2049
 #, csharp-format
 msgid "No permission to delete the file:{1}{0}"
 msgstr "Chybí oprávnění ke smazání souboru:{1}{0}"
 
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2053
 #, csharp-format
 msgid "An error of type {0} occurred while deleting the file:{2}{1}"
 msgstr "Při mazání souboru {2}{1} došlo k chybě typu {0}"
 
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2085
 #, csharp-format
 msgid "Delete the selected photo permanently?"
 msgid_plural "Delete the {0} selected photos permanently?"
@@ -2534,7 +2037,7 @@ msgstr[0] "Natrvalo odstranit zvolenou fotografii?"
 msgstr[1] "Natrvalo odstranit zvolené {0} fotografie?"
 msgstr[2] "Natrvalo odstranit zvolených {0} fotografií?"
 
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2089
 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."
@@ -2543,14 +2046,14 @@ msgstr[1] "To odstraní všechny verze zvolených fotografií z vašeho disku."
 msgstr[2] "To odstraní všechny verze zvolených fotografií z vašeho disku."
 
 #
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2092
 msgid "_Delete photo"
 msgid_plural "_Delete photos"
 msgstr[0] "_Odstranit fotografii"
 msgstr[1] "_Odstranit fotografie"
 msgstr[2] "_Odstranit fotografie"
 
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2128
 #, csharp-format
 msgid "Remove the selected photo from F-Spot?"
 msgid_plural "Remove the {0} selected photos from F-Spot?"
@@ -2558,7 +2061,7 @@ msgstr[0] "Odstranit zvolenou fotografii z F-Spot?"
 msgstr[1] "Odstranit zvolené {0} fotografie z F-Spot?"
 msgstr[2] "Odstranit zvolených {0} fotografií z F-Spot?"
 
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2133
 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 "
@@ -2568,28 +2071,28 @@ msgstr ""
 "budou ztraceny. Fotografie zůstávají ve vašem počítači a lze je do F-Spot "
 "znovu importovat."
 
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2134
 msgid "_Remove from Catalog"
 msgstr "_Odstranit z katalogu"
 
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2208
 #, csharp-format
 msgid "Delete tag \"{0}\"?"
-msgstr "Odstranit štítek \"{0}\"?"
+msgstr "Odstranit štítek „{0}“?"
 
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2210
 #, csharp-format
 msgid "Delete the {0} selected tags?"
 msgstr "Odstranit {0} zvolených štítků?"
 
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2215
 msgid "photo"
 msgid_plural "photos"
 msgstr[0] "fotografie"
 msgstr[1] "fotografie"
 msgstr[2] "fotografie"
 
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2217
 #, csharp-format
 msgid "If you delete this tag, the association with {0} {1} will be lost."
 msgid_plural ""
@@ -2598,7 +2101,7 @@ msgstr[0] "Pokud odstraníte tento štítek, asociace s {0} {1} bude ztracena."
 msgstr[1] "Pokud odstraníte tyto štítky, asociace s {0} {1} bude ztracena."
 msgstr[2] "Pokud odstraníte tyto štítky, asociace s {0} {1} bude ztracena."
 
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2222
 msgid "_Delete tag"
 msgid_plural "_Delete tags"
 msgstr[0] "O_dstranit štítek"
@@ -2606,34 +2109,34 @@ msgstr[1] "O_dstranit štítky"
 msgstr[2] "O_dstranit štítků"
 
 #. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2236
 msgid "Tag is not empty"
 msgstr "Štítek není prázdný"
 
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2237
 #, csharp-format
 msgid ""
 "Can not delete tags that have tags within them.  Please delete tags under "
 "\"{0}\" first"
 msgstr ""
-"Nemohu odstranit štítky, které obsahují štítky. Nejdříve prosím odstraňte "
-"štítky pod \"{0}\""
+"Nelze odstranit štítky, které v sobě obsahují štítky. Nejdříve prosím "
+"odstraňte štítky pod „{0}“"
 
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2677
 msgid "Rotate selected photo left"
 msgid_plural "Rotate selected photos left"
 msgstr[0] "Otočit zvolenou fotografii doleva"
 msgstr[1] "Otočit zvolené fotografie doleva"
 msgstr[2] "Otočit zvolené fotografie doleva"
 
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2690
 msgid "Rotate selected photo right"
 msgid_plural "Rotate selected photos right"
 msgstr[0] "Otočit zvolenou fotografii doprava"
 msgstr[1] "Otočit zvolené fotografie doprava"
 msgstr[2] "Otočit zvolené fotografie doprava"
 
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2701
 #, csharp-format
 msgid "Find _Selected Tag"
 msgid_plural "Find _Selected Tags"
@@ -2641,7 +2144,7 @@ msgstr[0] "Na_jít zvolený štítek"
 msgstr[1] "Na_jít zvolené štítky"
 msgstr[2] "Na_jít zvolené štítky"
 
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2705
 #, csharp-format
 msgid "Find Selected Tag _With"
 msgid_plural "Find Selected Tags _With"
@@ -2649,14 +2152,14 @@ msgstr[0] "Vyhledat zvolený štítek _s"
 msgstr[1] "Vyhledat zvolené štítky _s"
 msgstr[2] "Vyhledat zvolené štítky _s"
 
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2746
 msgid "Create New Version?"
 msgid_plural "Create New Versions?"
 msgstr[0] "Vytvořit novou verzi?"
 msgstr[1] "Vytvořit nové verze?"
 msgstr[2] "Vytvořit nové verze?"
 
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2748
 #, csharp-format
 msgid ""
 "Before launching {1}, should F-Spot create a new version of the selected "
@@ -2674,280 +2177,171 @@ msgstr[2] ""
 "Má F-Spot vytvořit novou verzi zvolené fotografie před spuštěním {1} pro "
 "zachování originálů?"
 
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2770
 msgid "XCF version"
 msgstr "Verze XCF"
 
-#: ../src/MetadataStore.cs:19
-msgid "Creator"
-msgstr "Tvůrce"
-
-#: ../src/MetadataStore.cs:20
-msgid "Title"
-msgstr "Popisek"
-
-#: ../src/MetadataStore.cs:21
-msgid "Copyright"
-msgstr "Copyright"
-
-#: ../src/MetadataStore.cs:22
-msgid "Subject and Keywords"
-msgstr "Předmět a klíčová slova"
-
-#: ../src/MetadataStore.cs:23
-msgid "Compression"
-msgstr "Komprese"
-
-#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
-#. "when Planar Configuration=1, this implies that all components must have
-#. the same BitsPerSample value; when Planar Configuration=2, different
-#. components could have different bit depths."
-#: ../src/MetadataStore.cs:29
-msgid "Planar Configuration"
-msgstr "Plošná konfigurace"
-
-#: ../src/MetadataStore.cs:31
-msgid "Orientation"
-msgstr "Orientace"
-
-#: ../src/MetadataStore.cs:33
-msgid "Photometric Interpretation"
-msgstr "Fotometrická interpretace"
-
-#: ../src/MetadataStore.cs:35
-msgid "Resolution Unit"
-msgstr "Jednotka rozlišení"
-
-#: ../src/MetadataStore.cs:37
-msgid "Exposure Program"
-msgstr "Program expozice:"
-
-#: ../src/MetadataStore.cs:39
-msgid "Metering Mode"
-msgstr "Režim měření"
-
-#: ../src/MetadataStore.cs:41
-msgid "Exposure Mode"
-msgstr "Režim expozice"
-
-#: ../src/MetadataStore.cs:43
-msgid "Custom Rendered"
-msgstr "Vlastní vykreslení"
-
-#: ../src/MetadataStore.cs:45
-msgid "Components Configuration"
-msgstr "Nastavení součástí"
-
-#: ../src/MetadataStore.cs:47
-msgid "Light Source"
-msgstr "Zdroj světla"
-
-#: ../src/MetadataStore.cs:49
-msgid "Sensing Method"
-msgstr "Metoda zachycování"
-
-#: ../src/MetadataStore.cs:51
-msgid "Color Space"
-msgstr "Prostor barev"
-
-#: ../src/MetadataStore.cs:53
-msgid "White Balance"
-msgstr "Vyvážení bílé"
-
-#: ../src/MetadataStore.cs:55
-msgid "Focal Plane Resolution Unit"
-msgstr "Jednotka rozlišení roviny zaostření"
-
-#: ../src/MetadataStore.cs:57
-msgid "File Source Type"
-msgstr "Typ zdroje souboru"
-
-#: ../src/MetadataStore.cs:59
-msgid "Scene Capture Type"
-msgstr "Typ zachycení scény"
-
-#. Translators: Gain Control is the label for the exif:GainControl tag
-#. "This tag indicates the degree of overall image gain adjustment."
-#: ../src/MetadataStore.cs:63
-msgid "Gain Control"
-msgstr "Ovládání zisku"
-
-#: ../src/MetadataStore.cs:65
-msgid "Contrast"
-msgstr "Kontrast"
-
-#: ../src/MetadataStore.cs:67
-msgid "Saturation"
-msgstr "Sytost"
-
-#: ../src/MetadataStore.cs:69
-msgid "Sharpness"
-msgstr "Ostrost"
-
-#: ../src/MetadataStore.cs:71
-msgid "Scene Type"
-msgstr "Typ scény"
+#: ../src/PhotoStore.cs:166 ../src/ui/mail_dialog.ui.h:17
+msgid "Original"
+msgstr "Originál"
 
 #. Fixme this should really set parent menu
 #. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
 msgid "(No Tags)"
 msgstr "(Žádné štítky)"
 
-#: ../src/PhotoVersionCommands.cs:58
+#: ../src/PhotoVersionCommands.cs:59
 msgid "Create New Version"
 msgstr "Vytvořit novou verzi"
 
-#: ../src/PhotoVersionCommands.cs:59
+#: ../src/PhotoVersionCommands.cs:60
 msgid "Name:"
 msgstr "Název:"
 
-#: ../src/PhotoVersionCommands.cs:63
+#: ../src/PhotoVersionCommands.cs:64
 msgid "Rename Version"
 msgstr "Přejmenovat verzi"
 
-#: ../src/PhotoVersionCommands.cs:64
+#: ../src/PhotoVersionCommands.cs:65
 msgid "New name:"
 msgstr "Nový název:"
 
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Nemohu vytvořit novou verzi"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Zachycena výjimka \"{0}\". Nelze vytvořit verzi \"{1}\""
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Opravdu odstranit?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Zrušit"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:125
 msgid "Delete"
 msgstr "Smazat"
 
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:126
 #, csharp-format
 msgid "Really delete version \"{0}\"?"
-msgstr "Opravdu odstranit verzi \"{0}\"?"
+msgstr "Opravdu odstranit verzi „{0}“?"
+
+#: ../src/PhotoVersionCommands.cs:127
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "Toto odstraní verzi a vymaže odpovídající soubor z disku."
 
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Nemohu odstranit verzi"
+#: ../src/PhotoVersionCommands.cs:172
+msgid "De_tach"
+msgstr "Odpoji_t"
 
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:173
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Zachycena výjimka \"{0}\". Nelze odstranit verzi \"{1}\""
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Opravdu odpojit verzi „{0}“ od „{1}“?"
+
+#: ../src/PhotoVersionCommands.cs:174
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"Toto způsobí, že se verze bude v knihovně jevit jako samostatná fotografie. "
+"Přetažením nové fotografie zpět na její rodičovskou bude toto chování "
+"odvoláno."
 
 #: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Nemohu přejmenovat verzi"
+msgid "Re_parent"
+msgstr "Osa_mostatnit"
 
 #: ../src/PhotoVersionCommands.cs:197
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "Zachycena výjimka \"{0}\". Nelze přejmenovat verzi na \"{1}\""
-
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
-msgid "(No Edits)"
-msgstr "(Žádné úpravy)"
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Opravdu osamostatnit „{0}“ jako verzi „{1}“?"
+msgstr[1] "Opravdu osamostatnit „{2}“ jako verzi „{1}“?"
+msgstr[2] "Opravdu osamostatnit „{2}“ jako verzi „{1}“?"
 
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Chyba při upravování fotografie"
+#: ../src/PhotoVersionCommands.cs:200
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+"Toto způsobí, že se fotografie v knihovně budou jevit jako jedna. Verze "
+"mohou být odpojeny použitím nabídky Fotografie."
 
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
+#: ../src/PhotoVersionCommands.cs:240
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Zachycena výjimka \"{0}\". Nelze uložit fotografii {1}"
+msgid "Received exception \"{0}\"."
+msgstr "Zachycena výjimka „{0}“. "
+
+#: ../src/PhotoVersionMenu.cs:54 ../src/Widgets/InfoBox.cs:470
+msgid "(No Edits)"
+msgstr "(Žádné úpravy)"
 
-#: ../src/PhotoView.cs:356
-msgid "Comment:"
-msgstr "Poznámka:"
+#: ../src/PhotoView.cs:339
+msgid "Description:"
+msgstr "Popisek:"
 
-#: ../src/Preferences.cs:152
+#: ../src/Preferences.cs:157
 msgid "Photos"
 msgstr "Fotografie"
 
-#: ../src/PrintOperation.cs:32
+#: ../src/PrintOperation.cs:33
 msgid "Image Settings"
 msgstr "Nastavení obrázku"
 
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
 msgid "Find: "
 msgstr "Hledat: "
 
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
 msgid "Untagged photos"
 msgstr "Fotografie bez štítků"
 
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
 msgid "Rated photos"
 msgstr "Hodnocené fotografie"
 
 #. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
 msgid "Import roll"
 msgstr "Importované filmy"
 
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
 msgid "Clear search"
 msgstr "Vymazat hledání"
 
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
 msgid "Refresh search"
 msgstr "Aktualizovat vyhledávání"
 
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
 msgid "No matching photos found"
 msgstr "Nenalezeny žádné odpovídající fotografie"
 
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Skrýt _lištu hledání"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Zobrazit _lištu hledání"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:73
 msgid "Unable to rotate this type of photo"
-msgstr "Nemohu otočit tuto fotografii"
+msgstr "Nelze otočit tuto fotografii"
 
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:92
 msgid "Unable to rotate readonly file"
-msgstr "Nemohu otočit tuto fotografii pouze pro čtení"
+msgstr "Nelze otočit tuto fotografii pouze pro čtení"
 
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:155
 msgid "Rotating photos"
-msgstr "Rotuji fotografie"
+msgstr "Otáčí se fotografie"
 
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:166
 #, csharp-format
 msgid "Rotating photo \"{0}\""
-msgstr "Rotuji fotografii \"{0}\""
+msgstr "Otáčí se fotografii „{0}“"
 
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:179
 msgid "Directory not found"
 msgstr "Adresář nenalezen"
 
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:181
+msgid "File not found"
+msgstr "Soubor nenalezen"
+
+#: ../src/RotateCommand.cs:199
 #, csharp-format
 msgid "Unable to rotate photo"
 msgid_plural "Unable to rotate {0} photos"
-msgstr[0] "Nemohu otočit fotografii"
-msgstr[1] "Nemohu otočit {0} fotografie"
-msgstr[2] "Nemohu otočit {0} fotografií"
+msgstr[0] "Nelze otočit fotografii"
+msgstr[1] "Nelze otočit {0} fotografie"
+msgstr[2] "Nelze otočit {0} fotografií"
 
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:201
 #, csharp-format
 msgid ""
 "The photo could not be rotated because it is on a read only file system or "
@@ -2967,88 +2361,97 @@ msgstr[2] ""
 "médiu jen pro čtení, například CD-ROM. Zkontrolujte prosím oprávnění a "
 "zkuste to znovu."
 
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:228
 #, csharp-format
 msgid "Received error \"{0}\" while attempting to rotate {1}"
-msgstr "Přijata chyba \"{0}\" při pokusu otočit {1}"
+msgstr "Přijata chyba „{0}“ při pokusu otočit {1}"
 
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:233
 msgid "Error while rotating photo."
 msgstr "Chyba při rotování fotografie."
 
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:211
 msgid "Preparing email"
 msgstr "Příprava e-mailu"
 
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:255
 #, csharp-format
 msgid "Exporting picture \"{0}\""
-msgstr "Exportuji obrázek \"{0}\""
+msgstr "Exportuje se obrázek „{0}“"
 
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:274
 msgid "Error processing image"
 msgstr "Chyba při zpracování obrázku"
 
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:275
 #, csharp-format
 msgid "An error occured while processing \"{0}\": {1}"
-msgstr "Při zpracovávání \"{0}\" došlo k chybě: {1}"
+msgstr "Při zpracovávání „{0}“ došlo k chybě: {1}"
 
 #. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:288
 msgid "My Photos"
 msgstr "Mé fotografie"
 
-#: ../src/Sharpener.cs:72
+#: ../src/Sharpener.cs:73
 msgid "Error saving sharpened photo"
 msgstr "Chyba při ukládání zaostřené fotografie"
 
-#: ../src/Sharpener.cs:102
+#: ../src/Sharpener.cs:74 ../src/UI.Dialog/EditExceptionDialog.cs:27
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Zachycena výjimka „{0}“. Nelze uložit fotografii {1}"
+
+#: ../src/Sharpener.cs:103
 msgid "Sharpen"
 msgstr "Zaostřit"
 
-#: ../src/Sharpener.cs:112
+#: ../src/Sharpener.cs:113
 msgid "Amount:"
 msgstr "Úroveň:"
 
-#: ../src/Sharpener.cs:113
+#: ../src/Sharpener.cs:114
 msgid "Radius:"
 msgstr "Poloměr:"
 
-#: ../src/Sharpener.cs:114
+#: ../src/Sharpener.cs:115
 msgid "Threshold:"
 msgstr "Práh:"
 
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:77
 msgid "Rotate photo left"
 msgstr "Otočit fotografii doleva"
 
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:82
 msgid "Rotate photo right"
 msgstr "Otočit fotografii doprava"
 
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:119
 msgid "Folder"
 msgstr "Složka"
 
-#: ../src/SingleView.cs:341
+#: ../src/SingleView.cs:344
 msgid "Open"
 msgstr "Otevřít"
 
-#: ../src/SingleView.cs:428
+#: ../src/SingleView.cs:347
+msgid "Select Folder"
+msgstr "Vybrat složku"
+
+#: ../src/SingleView.cs:431
 msgid "Set as Background"
 msgstr "Nastavit jako pozadí"
 
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:120 ../src/TagSelectionWidget.cs:492
+#: ../src/UI.Dialog/EditTagDialog.cs:76
 msgid "This name is already in use"
 msgstr "Tento název se již používá"
 
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:170
 msgid "Create New Tag"
 msgstr "Vytvořit nový štítek"
 
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:171
 msgid "Name of New Tag:"
 msgstr "Název nového štítku:"
 
@@ -3060,13 +2463,13 @@ msgstr[0] "Hledat"
 msgstr[1] "Hledat"
 msgstr[2] "Hledat"
 
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
 msgid "Create New Tag..."
-msgstr "Vytvořit nový štítek..."
+msgstr "Vytvořit nový štítek…"
 
 #: ../src/TagPopup.cs:42
 msgid "Edit Tag..."
-msgstr "Upravit štítek..."
+msgstr "Upravit štítek…"
 
 #: ../src/TagPopup.cs:46
 msgid "Delete Tag"
@@ -3096,12 +2499,12 @@ msgstr "Sloučit štítky"
 #: ../src/TagQueryWidget.cs:34
 #, csharp-format
 msgid "Include Photos Tagged \"{0}\""
-msgstr "Zahrnout fotografie označené \"{0}\""
+msgstr "Zahrnout fotografie označené „{0}“"
 
 #: ../src/TagQueryWidget.cs:39
 #, csharp-format
 msgid "Exclude Photos Tagged \"{0}\""
-msgstr "Vyřadit fotografie označené \"{0}\""
+msgstr "Vyřadit fotografie označené „{0}“"
 
 #: ../src/TagQueryWidget.cs:44
 msgid "Remove From Search"
@@ -3119,41 +2522,41 @@ msgstr[2] "Vyhledat _s"
 msgid "All"
 msgstr "Vše"
 
-#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:592
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
 #, csharp-format
 msgid "Not {0}"
 msgstr "Ne {0}"
 
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
 msgid "Drag tags here to search for them"
 msgstr "Sem přetáhněte štítky, které chcete hledat"
 
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:491
 msgid "Error renaming tag"
 msgstr "Chyba při přejmenovávání štítku"
 
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
 msgid "Favorites"
 msgstr "Oblíbené"
 
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
 msgid "Hidden"
 msgstr "Skryté"
 
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
 msgid "People"
 msgstr "Lidé"
 
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
 msgid "Places"
 msgstr "Místa"
 
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
 msgid "Events"
 msgstr "Události"
 
 #. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:344
 msgid "(None)"
 msgstr "(Není)"
 
@@ -3173,28 +2576,28 @@ msgstr " nebo "
 #. OPS The operators we support, case insensitive
 #. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
 #: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:533
 msgid "or"
 msgstr "nebo"
 
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
 msgid "Updating Thumbnails"
 msgstr "Aktualizují se náhledy"
 
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
 #, csharp-format
 msgid "Updating picture \"{0}\""
-msgstr "Aktualizuje se obrázek \"{0}\""
+msgstr "Aktualizuje se obrázek „{0}“"
 
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:99
 msgid "Photo management for GNOME"
 msgstr "Správce fotografií pro GNOME"
 
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
-
 #: ../src/UI.Dialog/AboutDialog.cs:100
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
+
+#: ../src/UI.Dialog/AboutDialog.cs:124
 msgid "translator-credits"
 msgstr ""
 "Miloslav Trmač <mitr at volny.cz>\n"
@@ -3203,11 +2606,11 @@ msgstr ""
 "Petr Kovář <pknbe at volny.cz>\n"
 "Zdeněk Hataš <zdenek.hatas at gmail.com>"
 
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:129
 msgid "F-Spot Website"
 msgstr "Webová stránka programu F-Spot"
 
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
 #: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
 #, csharp-format
 msgid "Shift all photos by {0}"
@@ -3249,16 +2652,20 @@ msgstr "Minulý týden (po-ne)"
 msgid "Customized Range"
 msgstr "Upravený rozsah"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:40
+msgid "Error editing photo"
+msgstr "Chyba při upravování fotografie"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:44
 #, csharp-format
 msgid "Edit Icon for Tag {0}"
 msgstr "Upravit ikonu pro štítek {0}"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:66
 msgid "Select Photo from file"
 msgstr "Vybrat fotografii ze souboru"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:88
 #, csharp-format
 msgid ""
 "\n"
@@ -3273,19 +2680,19 @@ msgstr ""
 "Jako ikonu pro tento štítek můžete použít jednu z fotografií ze své "
 "kolekce.\n"
 "Nejdříve ale musí být štítek přiřazen alespoň jedné fotografii.\n"
-"Označte prosím některou z fotografií štítkem '{0}'. \n"
+"Označte prosím některou z fotografií štítkem „{0}“. \n"
 "Poté ji zde můžete použít jako ikonu štítku."
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:166
 msgid "Unable to load image"
 msgstr "Obrázek nelze nahrát"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:167
 #, csharp-format
 msgid "Unable to load \"{0}\" as icon for the tag"
-msgstr "Nelze nahrát \"{0}\" jako ikonu štítku"
+msgstr "Nelze nahrát „{0}“ jako ikonu štítku"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:205
 #, csharp-format
 msgid "Photo {0} of {1}"
 msgstr "Fotografie {0} z {1}"
@@ -3302,24 +2709,68 @@ msgstr "Podrobnosti o chybě"
 msgid "An unhandled exception was thrown: "
 msgstr "Nastala neobsloužená výjimka: "
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Vybrat _složku…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:129
+msgid "Choose Import source..."
+msgstr "Uzavřít zdroj importu…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:141
+msgid "(No Cameras Detected)"
+msgstr "(Nedetekován žádný fotoaparát)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:176
+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 ""
+"Zaškrtnutím této volby způsobí smazání fotografií z fotoaparátu poté co byly "
+"úspěšně importovány.\n"
+"\n"
+"Obecně je doporučeno před smazáním z fotoaparátu fotografie zálohovat. "
+"<b>Požití této volby je na vlastní riziko!</b>"
+
+#: ../src/UI.Dialog/ImportDialog.cs:177
+msgid "Warning"
+msgstr "Varování"
+
+#: ../src/UI.Dialog/ImportDialog.cs:286
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Načítají se fotografie: {0} z {1}…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:310
+msgid "Importing photos..."
+msgstr "Importují se fotografie…"
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:317
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "Hledají se fotografie… (Pro pokračování už můžete kliknout na Import)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
+#: ../src/UI.Dialog/PreferenceDialog.cs:80
 msgid "None"
 msgstr "Není"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:59
 msgid "System profile"
 msgstr "Systémový profil"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:97
 msgid "Standard theme"
 msgstr "Výchozí motiv"
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
 msgid "Error loading database."
 msgstr "Chyba při načítání databáze."
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:23
 #, csharp-format
 msgid ""
 "F-Spot encountered an error while loading the photo database. The old "
@@ -3328,15 +2779,15 @@ msgstr ""
 "F-Spot narazil na chybu při načítání databáze fotografií. Stará databáze "
 "byla přesunuta do {0} a byla vytvořena nová databáze."
 
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
 msgid "Label"
 msgstr "Popisek"
 
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
 msgid "Ratio"
 msgstr "Poměr"
 
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
 msgid "Retry"
 msgstr "Znovu"
 
@@ -3384,6 +2835,24 @@ msgstr "rozdíl:"
 msgid "min. Starting at {0}"
 msgstr "min. Začít na {0}"
 
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
+msgid "C_reate"
+msgstr "Vy_tvořit"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:2
+msgid "Create _icon for this tag when first used"
+msgstr "Vytvořit _ikonu pro tento štítek poté, co bude prvně použit"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr "_Rodičovský štítek:"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "Název š_títku:"
+
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
 msgid "<b>End Date</b>"
 msgstr "<b>Datum konce</b>"
@@ -3409,18 +2878,14 @@ msgid "Set date range"
 msgstr "Nastavit rozsah data"
 
 #: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
-msgid "<small></small>"
-msgstr "<small></small>"
-
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit Tag"
 msgstr "Upravit štítek"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit icon"
 msgstr "Upravit ikonu"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
 msgid "_Icon:"
 msgstr "_Ikona:"
 
@@ -3452,9 +2917,42 @@ msgstr "Upravit ikonu štítku"
 msgid "No _image"
 msgstr "Žá_dný obrázek"
 
-#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:8
-msgid "Photo 0 of 0"
-msgstr "Fotografie 0 z 0"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:1
+msgid "<b>View all pictures imported</b>"
+msgstr "<b>Zobrazit všechny importované obrázky</b>"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:2
+msgid "Display only those photos that were imported in specified Rolls."
+msgstr "Zobrazit pouze fotografie ze zadaných filmů."
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
+msgid "Filter on selected rolls"
+msgstr "Použít filtr hledání na vyfotografované filmy"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
+msgid "Number of photos in selected rolls:"
+msgstr "Počet fotografií ve zvolených filmech:"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
+msgid "Show all photos."
+msgstr "Zobrazit všechny fotografie."
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
+msgid "after"
+msgstr "po"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:534
+msgid "and"
+msgstr "a"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:8
+msgid "at"
+msgstr "v/na"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:9
+msgid "between"
+msgstr "mezi"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:1
 msgid "Color profile for display:"
@@ -3481,18 +2979,26 @@ msgstr ""
 "<small>Budou zpřístupněny dalším programům pro úpravu obrázků.</small>"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:7
+msgid ""
+"Never modify image files.\n"
+"<small>Write XMP files next to the images instead.</small>"
+msgstr ""
+"Nikdy neměnit soubor obrázku.\n"
+"<small>Vedle obrázku vytvářet soubory XMP.</small>"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
 msgid "Select A Folder"
 msgstr "Vybrat složku"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:8
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
 msgid "Separately from the image files"
 msgstr "Odděleně od souborů s obrázky"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:11
 msgid "Store tags and descriptions for photos:"
 msgstr "Uchovat štítky a popisky k fotografiím:"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:12
 msgid "When importing photos, copy them to:"
 msgstr "Při importu fotografií kopírovat do:"
 
@@ -3508,9 +3014,120 @@ msgstr "<b>Nejnižší hodnocení</b>"
 msgid "Set Rating Filter"
 msgstr "Nastavit filtr hodnocení"
 
+#: ../src/UI.Dialog/ui/RepairDialog.ui.h:1
+msgid "Repair"
+msgstr "Opravit"
+
+#: ../src/ui/import.ui.h:1
+msgid "Attach Tags:"
+msgstr "Připojit štítky:"
+
+#: ../src/ui/import.ui.h:2
+msgid "Copy files to the Photos folder"
+msgstr "Kopírovat soubory do složky Photos"
+
+#: ../src/ui/import.ui.h:3
+msgid "Detect duplicates"
+msgstr "Detekovat duplicity"
+
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:6
+msgid "Import from:"
+msgstr "Importovat z:"
+
+#: ../src/ui/import.ui.h:7
+msgid "Include subfolders"
+msgstr "Včetně podadresářů"
+
+#: ../src/ui/import.ui.h:8
+msgid "Remove original files after import"
+msgstr "Odstranit originály po importu"
+
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 px"
+
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 px"
+
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 px"
+
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 px"
+
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 px"
+
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>Velikost</b>"
+
+#: ../src/ui/mail_dialog.ui.h:8
+msgid "<b>Summary</b>"
+msgstr "<b>Souhrn</b>"
+
+#: ../src/ui/mail_dialog.ui.h:9
+msgid "Create Mail"
+msgstr "Vytvořit e-mail"
+
+#: ../src/ui/mail_dialog.ui.h:10
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr ""
+"Vytvořit e-mail s přiloženými zvolenými fotografiemi (s možností změny "
+"velikosti)"
+
+#: ../src/ui/mail_dialog.ui.h:11
+msgid "Do not send a mail"
+msgstr "Neodesílat e-mail"
+
+#: ../src/ui/mail_dialog.ui.h:12
+msgid "Estimated new size"
+msgstr "Odhadovaná nová velikost"
+
+#: ../src/ui/mail_dialog.ui.h:13
+msgid "Extra large"
+msgstr "Extra velký"
+
+#: ../src/ui/mail_dialog.ui.h:14
+msgid "Large"
+msgstr "Velké"
+
+#: ../src/ui/mail_dialog.ui.h:15
+msgid "Medium"
+msgstr "Střední"
+
+#: ../src/ui/mail_dialog.ui.h:16
+msgid "Number of pictures"
+msgstr "Počet obrázků"
+
+#: ../src/ui/mail_dialog.ui.h:18
+msgid "Original size (possible very large file size)"
+msgstr "Původní velikost (pravděpodobně velmi velký soubor)"
+
+#: ../src/ui/mail_dialog.ui.h:19
+msgid "Small"
+msgstr "Malé"
+
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Tiny"
+msgstr "Drobný"
+
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Total original size"
+msgstr "Celková původní velikost"
+
+#: ../src/ui/mail_dialog.ui.h:22
+msgid "_Create Mail"
+msgstr "Vy_tvořit e-mail"
+
 #: ../src/ui/main_window.ui.h:1
 msgid "Adjust _Time..."
-msgstr "Přizpůsobi_t čas..."
+msgstr "Přizpůsobi_t čas…"
 
 #: ../src/ui/main_window.ui.h:2
 msgid "Arrange _by"
@@ -3534,11 +3151,15 @@ msgstr "Kopírovat"
 
 #: ../src/ui/main_window.ui.h:8
 msgid "Create New _Tag..."
-msgstr "Vy_tvořit nový štítek..."
+msgstr "Vy_tvořit nový štítek…"
 
 #: ../src/ui/main_window.ui.h:9
 msgid "Create _New Version..."
-msgstr "Vytvořit _novou verzi..."
+msgstr "Vytvořit _novou verzi…"
+
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "Opoji_t verzi"
 
 #: ../src/ui/main_window.ui.h:11
 msgid "Fin_d"
@@ -3551,7 +3172,7 @@ msgstr "Spravovat rozšíř_ení"
 
 #: ../src/ui/main_window.ui.h:13
 msgid "Page Set_up..."
-msgstr "Na_stavení stránky..."
+msgstr "Na_stavení stránky…"
 
 #: ../src/ui/main_window.ui.h:14
 msgid "Re_fresh Thumbnail"
@@ -3567,7 +3188,11 @@ msgstr "Zrušit _výběr"
 
 #: ../src/ui/main_window.ui.h:20
 msgid "Send by _Mail..."
-msgstr "Poslat elektronickou _poštou..."
+msgstr "Poslat elektronickou _poštou…"
+
+#: ../src/ui/main_window.ui.h:21 ../src/ui/single_view.ui.h:3
+msgid "Set as _Background"
+msgstr "Nastavit jako _pozadí"
 
 #: ../src/ui/main_window.ui.h:22
 msgid "Side_bar"
@@ -3589,6 +3214,26 @@ msgstr "_Lišta nástrojů"
 msgid "View"
 msgstr "Zobrazit"
 
+#: ../src/ui/main_window.ui.h:28 ../src/ui/single_view.ui.h:7
+msgid "Zoom _in"
+msgstr "Zvětš_it"
+
+#: ../src/ui/main_window.ui.h:29 ../src/ui/single_view.ui.h:8
+msgid "Zoom _out"
+msgstr "Z_menšit"
+
+#: ../src/ui/main_window.ui.h:30 ../src/ui/single_view.ui.h:9
+msgid "Zoom in"
+msgstr "Zvětšit"
+
+#: ../src/ui/main_window.ui.h:31 ../src/ui/single_view.ui.h:10
+msgid "Zoom out"
+msgstr "Zmenšit"
+
+#: ../src/ui/main_window.ui.h:32
+msgid "_Attach Tag"
+msgstr "_Připojit štítek"
+
 #: ../src/ui/main_window.ui.h:33
 msgid "_Attach Tag to Selection"
 msgstr "_Připojit štítek k výběru"
@@ -3621,9 +3266,13 @@ msgstr "O_dstranit zvolený štítek"
 msgid "_Delete Version"
 msgstr "O_dstranit verzi"
 
+#: ../src/ui/main_window.ui.h:44 ../src/ui/single_view.ui.h:11
+msgid "_Edit"
+msgstr "U_pravit"
+
 #: ../src/ui/main_window.ui.h:45
 msgid "_Edit Tag..."
-msgstr "_Upravit štítek..."
+msgstr "_Upravit štítek…"
 
 #: ../src/ui/main_window.ui.h:46
 msgid "_Export to"
@@ -3633,6 +3282,14 @@ msgstr "_Exportovat do"
 msgid "_Filmstrip"
 msgstr "_Filmový pás"
 
+#: ../src/ui/main_window.ui.h:48 ../src/ui/single_view.ui.h:13
+msgid "_Fullscreen"
+msgstr "_Celá obrazovka"
+
+#: ../src/ui/main_window.ui.h:49 ../src/ui/single_view.ui.h:14
+msgid "_Help"
+msgstr "_Nápověda"
+
 #: ../src/ui/main_window.ui.h:50
 msgid "_Hidden"
 msgstr "_Skryté"
@@ -3642,90 +3299,181 @@ msgid "_Import..."
 msgstr "_Importovat"
 
 #: ../src/ui/main_window.ui.h:52
+msgid "_Invert Selection"
+msgstr "Obrátit výběr"
+
+#: ../src/ui/main_window.ui.h:53
 msgid "_Large"
 msgstr "Ve_lký"
 
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:54
 msgid "_Last Import Roll"
 msgstr "Pos_lední importovaný film"
 
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:55
 msgid "_Loupe"
 msgstr "_Lupa"
 
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:56
 msgid "_Medium"
 msgstr "Střed_ní"
 
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:57 ../src/ui/single_view.ui.h:15
+msgid "_Photo"
+msgstr "_Fotografie"
+
+#: ../src/ui/main_window.ui.h:58
 msgid "_Quit"
 msgstr "U_končit"
 
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:59
 msgid "_Ratings"
 msgstr "_Hodnocení"
 
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:61
 msgid "_Remove Tag From Selection"
 msgstr "Odst_ranit štítek z výběru"
 
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:62
 msgid "_Rename Version"
 msgstr "Přejmenovat ve_rzi"
 
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:63
 msgid "_Reverse Order"
 msgstr "_Otočit třídění"
 
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:64
 msgid "_Select Import Rolls..."
 msgstr "Vybrat _importovaný film"
 
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:65
 msgid "_Set Date Range..."
-msgstr "Na_stavit rozsah data..."
+msgstr "Na_stavit rozsah data…"
 
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:66
 msgid "_Set Rating filter..."
-msgstr "Na_stavit filtr hodnocení..."
+msgstr "Na_stavit filtr hodnocení…"
 
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:67
 msgid "_Sharpen..."
 msgstr "Doo_střit"
 
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:68 ../src/ui/single_view.ui.h:16
+msgid "_Slideshow"
+msgstr "_Promítání snímků"
+
+#: ../src/ui/main_window.ui.h:69
 msgid "_Small"
 msgstr "M_alý"
 
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:70
 msgid "_Tag Icons"
 msgstr "Ikony š_títků"
 
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:71
 msgid "_Tags"
 msgstr "Š_títky"
 
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:72
 msgid "_Timeline"
 msgstr "Časová _osa"
 
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:73
 msgid "_Tools"
 msgstr "Nás_troje"
 
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:74
 msgid "_Untagged Photos"
 msgstr "Fotografie _bez štítků"
 
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:75
 msgid "_Version"
 msgstr "_Verze"
 
-#: ../src/Updater.cs:622
+#: ../src/ui/main_window.ui.h:76 ../src/ui/single_view.ui.h:18
+msgid "_View"
+msgstr "_Zobrazit"
+
+#: ../src/ui/single_view.ui.h:1
+msgid "Display File _Names"
+msgstr "Zobrazovat _názvy souborů"
+
+#: ../src/ui/single_view.ui.h:2
+msgid "F-Spot View"
+msgstr "Pohled F-Spot"
+
+#: ../src/ui/single_view.ui.h:4
+msgid "Show or hide the side pane"
+msgstr "Zobrazit nebo skrýt boční panel"
+
+#: ../src/ui/single_view.ui.h:5
+msgid "Show or hide the toolbar"
+msgstr "Zobrazit nebo skrýt lištu nástrojů"
+
+#: ../src/ui/single_view.ui.h:6
+msgid "Side _pane"
+msgstr "Boční _panel"
+
+#: ../src/ui/single_view.ui.h:17
+msgid "_Toolbar"
+msgstr "Lišta nás_trojů"
+
+#: ../src/ui/viewer_preferences.ui.h:1
+msgid "<b>Image Interpolation</b>"
+msgstr "<b>Interpolace obrázku</b>"
+
+#: ../src/ui/viewer_preferences.ui.h:2
+msgid "<b>Transparent Parts</b>"
+msgstr "<b>Průhledné části</b>"
+
+#: ../src/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>Tuto volbu povolte, chcete-li používat interpolaci při "
+"přibližování obrázků. Pro prohlížení fotografií by volba neměla být "
+"zakázána, zákaz interpolace však může být užitečný například při návrhu "
+"ikonek.</i></small>"
+
+#: ../src/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>Můžete zvolit, jak se mají zobrazovat průhledné části obrázků. "
+"Tato volba nemá žádný vliv na fotografie, ale zobrazení průhlednosti v "
+"podobě šachovnice nebo zvolené barvy může být užitečné při prohlížení ikon a "
+"dalších grafických souborů s průhlednými částmi.</i></small>"
+
+#: ../src/ui/viewer_preferences.ui.h:5
+msgid "As _background"
+msgstr "Jako _pozadí"
+
+#: ../src/ui/viewer_preferences.ui.h:6
+msgid "As _custom color: "
+msgstr "Jako v_lastní barva: "
+
+#: ../src/ui/viewer_preferences.ui.h:7
+msgid "As check _pattern"
+msgstr "Jako ša_chovnice"
+
+#: ../src/ui/viewer_preferences.ui.h:8
+msgid "Preferences"
+msgstr "Nastavení"
+
+#: ../src/ui/viewer_preferences.ui.h:9
+msgid "_Interpolate image on zoom"
+msgstr "_Interpolovat obrázek při přiblížení"
+
+#: ../src/Updater.cs:724
 msgid "Updating F-Spot Database"
 msgstr "Aktualizuje se databáze programu F-Spot"
 
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:725
 msgid ""
 "Please wait while your F-Spot gallery's database is updated. This may take "
 "some time."
@@ -3733,11 +3481,6 @@ msgstr ""
 "Vyčkejte prosím, než se aktualizuje databáze galerie programu F-Spot. Může "
 "to chvíli trvat."
 
-#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
-msgid "Unable to create temporary file"
-msgstr "Nelze vytvořit dočasný soubor"
-
 #: ../src/Widgets/CustomPrintWidget.cs:119
 msgid "Page Setup"
 msgstr "Nastavení stránky"
@@ -3747,7 +3490,7 @@ msgstr "Nastavení stránky"
 #: ../src/Widgets/CustomPrintWidget.cs:133
 #, csharp-format
 msgid "Paper Size: {0} x {1} mm"
-msgstr "Velikost papíru: {0} x {1} mm"
+msgstr "Velikost papíru: {0} × {1} mm"
 
 #: ../src/Widgets/CustomPrintWidget.cs:130
 msgid "Set Page Size and Orientation"
@@ -3818,11 +3561,11 @@ msgstr "Tisknout štítky fotografie"
 msgid "Print photo comment"
 msgstr "Tisknout komentář fotografie"
 
-#: ../src/Widgets/EditorPage.cs:30 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:32 ../src/Widgets/Sidebar.cs:54
 msgid "Edit"
 msgstr "Upravit"
 
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:200
 msgid ""
 "This tool requires an active selection. Please select a region of the photo "
 "and try the operation again"
@@ -3830,31 +3573,31 @@ msgstr ""
 "Tento nástroj vyžaduje aktivní výběr. Zvolte prosím oblast fotografie a "
 "zkuste tuto operaci znovu"
 
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:218
 msgid "Error saving adjusted photo"
 msgid_plural "Error saving adjusted photos"
 msgstr[0] "Chyba při ukládání upravené fotografie"
 msgstr[1] "Chyba při ukládání upravených fotografií"
 msgstr[2] "Chyba při ukládání upravených fotografií"
 
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:220
 #, csharp-format
 msgid ""
 "Received exception \"{0}\". Note that you have to develop RAW files into "
 "JPEG before you can edit them."
 msgstr ""
-"Zachycena výjimka \"{0}\". RAW soubory musí být před tím, než je možné je "
+"Zachycena výjimka „{0}“. RAW soubory musí být před tím, než je možné je "
 "upravovat, převedeny do JPEG."
 
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
 msgid "_Horizontal"
 msgstr "Na šíř_ku"
 
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
 msgid "_Vertical"
 msgstr "Na _výšku"
 
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
 msgid "Find:"
 msgstr "Hledat:"
 
@@ -3862,7 +3605,7 @@ msgstr "Hledat:"
 msgid "Folders"
 msgstr "Složky"
 
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
 msgid "Filesystem"
 msgstr "Systém souborů"
 
@@ -3870,6 +3613,10 @@ msgstr "Systém souborů"
 msgid "Histogram"
 msgstr "Histogram"
 
+#: ../src/Widgets/InfoBox.cs:201
+msgid "Image Information"
+msgstr "Informace o obrázku"
+
 #: ../src/Widgets/InfoBox.cs:215
 msgid "Version"
 msgstr "Verze"
@@ -3886,6 +3633,10 @@ msgstr "Expozice"
 msgid "Focal Length"
 msgstr "Ohnisková vzdálenost"
 
+#: ../src/Widgets/InfoBox.cs:231
+msgid "Camera"
+msgstr "Fotoaparát"
+
 #: ../src/Widgets/InfoBox.cs:234
 msgid "File Size"
 msgstr "Velikost souboru"
@@ -3894,17 +3645,16 @@ msgstr "Velikost souboru"
 msgid "Rating"
 msgstr "Hodnocení"
 
-#: ../src/Widgets/InfoBox.cs:390 ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:327
 msgid "(wrong format)"
 msgstr "(špatný formát)"
 
-#: ../src/Widgets/InfoBox.cs:418 ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451 ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:353 ../src/Widgets/InfoBox.cs:364
+#: ../src/Widgets/InfoBox.cs:374
 msgid "(Unknown)"
 msgstr "(Není známo)"
 
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:474
 #, csharp-format
 msgid "(One Edit)"
 msgid_plural "({0} Edits)"
@@ -3912,17 +3662,17 @@ msgstr[0] "(Jedna úprava)"
 msgstr[1] "({0} úpravy)"
 msgstr[2] "({0} úprav)"
 
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:484
 msgid "(File read error)"
 msgstr "(Chyba čtení souboru)"
 
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:529
 #, csharp-format
 msgid "{0} Photos"
 msgstr "{0} fotografií"
 
 #. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:549
 #, csharp-format
 msgid ""
 "On {0} between \n"
@@ -3931,7 +3681,7 @@ msgstr ""
 "Dne {0} mezi \n"
 "{1} a {2}"
 
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:554
 #, csharp-format
 msgid ""
 "Between {0} \n"
@@ -3940,35 +3690,35 @@ msgstr ""
 "Mezi {0} \n"
 "a {1}"
 
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:581
 msgid "(At least one File not found)"
 msgstr "(Nejméně jeden soubor nebyl nalezen)"
 
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:698
 msgid "Show Photo Name"
 msgstr "Zobrazit název fotografie"
 
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:707
 msgid "Show Date"
 msgstr "Zobrazit datum"
 
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:716
 msgid "Show Size"
 msgstr "Zobrazit velikost"
 
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:725
 msgid "Show Exposure"
 msgstr "Zobrazit expozici"
 
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:734
 msgid "Show Focal Length"
 msgstr "Zobrazit ohniskovou vzdálenost"
 
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:743
 msgid "Show Camera"
 msgstr "Zobrazit fotoaparát"
 
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:752
 msgid "Show File Size"
 msgstr "Zobrazit velikost souboru"
 
@@ -3980,45 +3730,27 @@ msgstr "Metadata"
 msgid "Extended Metadata"
 msgstr "Rozšířená metadata"
 
-#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:394
-msgid "No Extended Metadata Available"
-msgstr "Rozšířená metadata nejsou k dispozici"
-
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:359
 msgid "No active photo"
 msgstr "Žádná aktivní fotografie"
 
-#: ../src/Widgets/MetadataDisplay.cs:414
+#: ../src/Widgets/MetadataDisplay.cs:361
 #, csharp-format
 msgid "The photo \"{0}\" does not exist"
-msgstr "Fotografie \"{0}\" neexistuje"
+msgstr "Fotografie „{0}“ neexistuje"
 
-#: ../src/Widgets/MetadataDisplay.cs:417
+#: ../src/Widgets/MetadataDisplay.cs:363
 msgid "No metadata available"
 msgstr "Žádná metadata nejsou k dispozici"
 
-#: ../src/Widgets/OpenWithMenu.cs:71
+#: ../src/Widgets/OpenWithMenu.cs:72
 msgid "No applications available"
 msgstr "Žádné aplikace nejsou k dispozici"
 
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
 msgid "Rating:"
 msgstr "Hodnocení:"
 
-#: ../src/XmpTagsImporter.cs:91
-msgid "Country"
-msgstr "Země"
-
-#: ../src/XmpTagsImporter.cs:92
-msgid "City"
-msgstr "Město"
-
-#: ../src/XmpTagsImporter.cs:93
-msgid "State"
-msgstr "Stát"
-
-#. namespace
 #: ../tools/f-spot-screensaver.desktop.in.h:1
 msgid "Display a slideshow from F-Spot"
 msgstr "Promítat snímky z F-Spotu"
diff --git a/po/de.po b/po/de.po
index ee7191a..307fdae 100644
--- a/po/de.po
+++ b/po/de.po
@@ -11,11 +11,11 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: f-spot\n"
+"Project-Id-Version: f-spot master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
 "spot&component=General\n"
-"POT-Creation-Date: 2010-07-08 16:49+0000\n"
-"PO-Revision-Date: 2010-07-09 23:40+0100\n"
+"POT-Creation-Date: 2010-08-08 09:35+0000\n"
+"PO-Revision-Date: 2010-08-08 13:22+0100\n"
 "Last-Translator: Mario Blättermann <mariobl at gnome.org>\n"
 "Language-Team: German <gnome-de at gnome.org>\n"
 "MIME-Version: 1.0\n"
@@ -72,7 +72,7 @@ msgstr "Übertragung des Bilds »{0}« auf CD"
 
 #. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
 #: ../extensions/Exporters/CDExport/CDExport.cs:210
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:362
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:360
 #: ../extensions/Exporters/FolderExport/FolderExport.cs:209
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:773
 #: ../src/MainWindow.cs:645 ../src/UI.Dialog/AdjustTimeDialog.cs:130
@@ -83,7 +83,7 @@ msgstr "{0} von {1}"
 
 #: ../extensions/Exporters/CDExport/CDExport.cs:223
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:378
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:390
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:696
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
@@ -103,7 +103,7 @@ msgstr "Fehler bei der Übertragung"
 msgid "Error Transferring"
 msgstr "Übertragungsfehler"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:253
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
 msgid "copying..."
 msgstr "wird kopiert …"
 
@@ -208,7 +208,7 @@ msgstr ""
 "{0}"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:327
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:488
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:486
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:726
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:593
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:515
@@ -228,7 +228,7 @@ msgid "Error Uploading To Facebook: {0}"
 msgstr "Fehler beim Hochladen zu Facebook: {0}"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:383
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
 #: ../extensions/Exporters/FolderExport/FolderExport.cs:215
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:789
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:685
@@ -238,7 +238,7 @@ msgid "Error"
 msgstr "Fehler"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:394
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:800
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:698
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:598
@@ -445,31 +445,31 @@ msgid "Used {0} of your allowed {1} monthly quota"
 msgstr "{0} von Ihrer monatlichen Quota von {1} in Benutzung"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.cs:239
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:310
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:308
 msgid "Unable to log on"
 msgstr "Anmeldung fehlgeschlagen"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:330
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:328
 #, csharp-format
 msgid "Waiting for response {0} of {1}"
 msgstr "Warte auf Antwort {0} von {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:357
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:355
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:769
 #, csharp-format
 msgid "Uploading picture \"{0}\""
 msgstr "Hochladen des Bilds »{0}«"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:378
 #, csharp-format
 msgid "Error Uploading To {0}: {1}"
 msgstr "Fehler beim Hochladen von {0}: {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:467
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:465
 msgid "Unable to log on."
 msgstr "Anmeldung ist fehlgeschlagen."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:468
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:466
 #, csharp-format
 msgid ""
 "F-Spot was unable to log on to {0}.  Make sure you have given the "
@@ -620,57 +620,57 @@ msgid "Exporting Photos"
 msgstr "Fotos werden exportiert"
 
 #. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:716
 msgid "Light"
 msgstr "Hell"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:718
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
 msgid "Dark"
 msgstr "Dunkel"
 
 #. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:898
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:897
 msgid "Prev"
 msgstr "Vorheriges"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:900
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:899
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
 msgid "Index"
 msgstr "Index"
 
 #. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:903
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1075
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1115
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:902
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1074
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1114
 #: ../src/MainWindow.cs:349 ../src/Widgets/Sidebar.cs:56
 msgid "Tags"
 msgstr "Markierungen"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:906
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:905
 #: ../src/ItemAction.cs:102
 msgid "Next"
 msgstr "Nächstes"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1010
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1009
 msgid "Gallery generated by"
 msgstr "Galerie erstellt mit"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1049
 msgid "Show Styles"
 msgstr "Stile anzeigen"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1051
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
 msgid "Hide Styles"
 msgstr "Stile verbergen"
 
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1085
 #: ../extensions/Exporters/FolderExport/FolderExport.cs:1086
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1087
 #: ../src/ui/main_window.ui.h:24
 msgid "Tags: "
 msgstr "Markierungen: "
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1218
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1351
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1350
 msgid "Page:"
 msgstr "Seite:"
 
@@ -1153,7 +1153,7 @@ msgstr "_Maßstab:"
 msgid "Check for Duplicates..."
 msgstr "Nach Duplikaten suchen …"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:53
+#: ../extensions/Tools/HashJob/HashJob.cs:54
 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 "
@@ -1164,22 +1164,22 @@ msgstr ""
 "nicht automatisch erledigt, da es längere Zeit in Anspruch nimmt. Sie können "
 "mit Hilfe dieses Dialogs den Aktualisierungsvorgang starten oder unterbrechen."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:59
+#: ../extensions/Tools/HashJob/HashJob.cs:60
 #, csharp-format
 msgid ""
 "You currently have {0} photos needing md5 calculation, and {1} pending jobs"
 msgstr ""
 "Derzeit benötigen {0} Fotos eine md5-Berechnung, und {1} Aufträge stehen aus"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:76 ../src/ui/main_window.ui.h:37
 msgid "_Close"
 msgstr "S_chließen"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:102
+#: ../extensions/Tools/HashJob/HashJob.cs:103
 msgid "Processing images..."
 msgstr "Bilder werden verarbeitet …"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:108
+#: ../extensions/Tools/HashJob/HashJob.cs:109
 msgid "Stopped"
 msgstr "Gestoppt"
 
@@ -1215,16 +1215,16 @@ msgstr "Ausgewählt"
 msgid "Live Web Gallery"
 msgstr "Live-Web-Galerie"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:90
 msgid "none"
 msgstr "keine"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:93
 #, csharp-format
 msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
 msgstr " Galerie: {0},  Fotos: {1},  Letzter Betrachter: {3}"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:157
 msgid "Gallery is inactive"
 msgstr "Galerie ist nicht aktiv"
 
@@ -1395,7 +1395,7 @@ msgid "Configure Screensaver"
 msgstr "Bildschirmschoner konfigurieren"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
-#: ../src/UI.Dialog/DateRangeDialog.cs:129
+#: ../src/UI.Dialog/DateRangeDialog.cs:120
 msgid "All Images"
 msgstr "Alle Bilder"
 
@@ -1645,23 +1645,23 @@ msgstr ""
 "F-Spot-Einstellungsdialog."
 
 #. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:349
+#: ../src/Core/Photo.cs:405
 msgid "Reparented"
 msgstr "Ausgangsfoto neu festgelegt"
 
-#: ../src/Core/Photo.cs:366
+#: ../src/Core/Photo.cs:422
 #, csharp-format
 msgid "Modified"
 msgid_plural "Modified ({0})"
 msgstr[0] "Bearbeitet"
 msgstr[1] "Bearbeitet ({0})"
 
-#: ../src/Core/Photo.cs:389
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1}"
 msgstr "Bearbeitet in {1}"
 
-#: ../src/Core/Photo.cs:389
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1} ({0})"
 msgstr "Bearbeitet in {1} ({0})"
@@ -1762,12 +1762,12 @@ msgstr "Öffnen _mit"
 msgid "Rem_ove Tag"
 msgstr "Markierung ent_fernen"
 
-#: ../src/FSpot.addin.xml.h:5 ../src/SingleView.cs:428
+#: ../src/FSpot.addin.xml.h:5 ../src/SingleView.cs:427
 #: ../src/ui/main_window.ui.h:16
 msgid "Rotate _Left"
 msgstr "_Links drehen"
 
-#: ../src/FSpot.addin.xml.h:6 ../src/SingleView.cs:429
+#: ../src/FSpot.addin.xml.h:6 ../src/SingleView.cs:428
 #: ../src/ui/main_window.ui.h:17
 msgid "Rotate _Right"
 msgstr "_Rechts drehen"
@@ -1800,7 +1800,7 @@ msgstr "K_ontrast:"
 msgid "Manage your custom selection ratios"
 msgstr "Die selbstausgewählten Bildformate verwalten"
 
-#: ../src/f-spot.glade.h:5
+#: ../src/f-spot.glade.h:5 ../src/ui/tag_selection_dialog.ui.h:1
 msgid "Select a Tag..."
 msgstr "Eine Markierung auswählen …"
 
@@ -1853,7 +1853,7 @@ msgstr "Bildinformationen"
 msgid "Exit fullscreen"
 msgstr "Vollbild verlassen"
 
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:314 ../src/SingleView.cs:92
+#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:314 ../src/SingleView.cs:91
 msgid "Slideshow"
 msgstr "Diaschau"
 
@@ -1877,12 +1877,12 @@ msgstr "Mehr"
 msgid "_Clear Date Range"
 msgstr "Datumsspanne _zurücksetzen"
 
-#: ../src/Import/ImportController.cs:410 ../src/Import/ImportController.cs:412
+#: ../src/Import/ImportController.cs:476 ../src/Import/ImportController.cs:478
 #: ../src/Import/MetadataImporter.cs:50
 msgid "Imported Tags"
 msgstr "Importierte Markierungen"
 
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:281 ../src/SingleView.cs:75
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:281 ../src/SingleView.cs:74
 msgid "Rotate Left"
 msgstr "Nach links drehen"
 
@@ -1890,7 +1890,7 @@ msgstr "Nach links drehen"
 msgid "Rotate picture left"
 msgstr "Bild nach links drehen"
 
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:285 ../src/SingleView.cs:80
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:285 ../src/SingleView.cs:79
 msgid "Rotate Right"
 msgstr "Nach rechts drehen"
 
@@ -1910,8 +1910,17 @@ msgstr "Vorheriges"
 msgid "Previous picture"
 msgstr "Vorheriges Bild"
 
-#: ../src/MainWindow.cs:274 ../src/UI.Dialog/ImportDialog.cs:171
-#: ../src/ui/import.ui.h:4
+#: ../src/Jobs/SyncMetadataJob.cs:74
+#, csharp-format
+msgid ""
+"Metadata of file {0} may be corrupt, refusing to write to it, falling back to "
+"XMP sidecar."
+msgstr ""
+"Metadaten der Datei {0} könnten beschädigt sein, Schreiben wird abgelehnt, "
+"XMP-Sidecar wird ersatzweise verwendet."
+
+#: ../src/MainWindow.cs:274 ../src/UI.Dialog/ImportDialog.cs:195
+#: ../src/ui/import.ui.h:3
 msgid "Import"
 msgstr "Importieren"
 
@@ -1935,15 +1944,15 @@ msgstr "Bild bearbeiten"
 msgid "View and edit a photo"
 msgstr "Ein Foto anzeigen und bearbeiten"
 
-#: ../src/MainWindow.cs:309 ../src/SingleView.cs:87
+#: ../src/MainWindow.cs:309 ../src/SingleView.cs:86
 msgid "Fullscreen"
 msgstr "Vollbild"
 
-#: ../src/MainWindow.cs:311 ../src/SingleView.cs:89
+#: ../src/MainWindow.cs:311 ../src/SingleView.cs:88
 msgid "View photos fullscreen"
 msgstr "Fotos im Vollbild anzeigen"
 
-#: ../src/MainWindow.cs:316 ../src/SingleView.cs:94
+#: ../src/MainWindow.cs:316 ../src/SingleView.cs:93
 msgid "View photos in a slideshow"
 msgstr "Fotos in einer Diaschau anzeigen"
 
@@ -1964,14 +1973,14 @@ msgid "Hide _Find Bar"
 msgstr "Suchfeld _verbergen"
 
 #. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1722
+#: ../src/MainWindow.cs:1724
 #, csharp-format
 msgid "Merge the selected tag"
 msgid_plural "Merge the {0} selected tags?"
 msgstr[0] "Die ausgewählte Markierung zusammenführen?"
 msgstr[1] "Die {0} ausgewählten Markierungen zusammenführen?"
 
-#: ../src/MainWindow.cs:1749
+#: ../src/MainWindow.cs:1751
 msgid ""
 "This operation will merge the selected tags and any sub-tags into a single "
 "tag."
@@ -1979,76 +1988,76 @@ msgstr ""
 "Diese Aktion wird die gewählten Markierungen und alle Untermarkierungen zu "
 "einer einzigen Markierung zusammenführen."
 
-#: ../src/MainWindow.cs:1751
+#: ../src/MainWindow.cs:1753
 msgid "_Merge Tags"
 msgstr "Markierungen _zusammenführen"
 
-#: ../src/MainWindow.cs:1956
+#: ../src/MainWindow.cs:1958
 #, csharp-format
 msgid "{0} Photo out of {1}"
 msgid_plural "{0} Photos out of {1}"
 msgstr[0] "{0} von {1} Fotos"
 msgstr[1] "{0} von {1} Fotos"
 
-#: ../src/MainWindow.cs:1958 ../src/SingleView.cs:470
+#: ../src/MainWindow.cs:1960 ../src/SingleView.cs:469
 #, csharp-format
 msgid "{0} Photo"
 msgid_plural "{0} Photos"
 msgstr[0] "{0} Foto"
 msgstr[1] "{0} Fotos"
 
-#: ../src/MainWindow.cs:1961
+#: ../src/MainWindow.cs:1963
 #, csharp-format
 msgid " ({0} selected)"
 msgid_plural " ({0} selected)"
 msgstr[0] " ({0} ausgewählt)"
 msgstr[1] " ({0} ausgewählt)"
 
-#: ../src/MainWindow.cs:2042
+#: ../src/MainWindow.cs:2044
 msgid "_Ok"
 msgstr "_OK"
 
-#: ../src/MainWindow.cs:2043
+#: ../src/MainWindow.cs:2045
 msgid "Error Deleting Picture"
 msgstr "Fehler beim Löschen des Bilds"
 
-#: ../src/MainWindow.cs:2048
+#: ../src/MainWindow.cs:2050
 #, csharp-format
 msgid "No permission to delete the file:{1}{0}"
 msgstr "Keine Berechtigung zum Löschen der Datei:{1}{0}"
 
-#: ../src/MainWindow.cs:2052
+#: ../src/MainWindow.cs:2054
 #, csharp-format
 msgid "An error of type {0} occurred while deleting the file:{2}{1}"
 msgstr "Ein Fehler des Typs {0} ist beim Löschen der Datei aufgetreten:{2}{1}"
 
-#: ../src/MainWindow.cs:2084
+#: ../src/MainWindow.cs:2086
 #, csharp-format
 msgid "Delete the selected photo permanently?"
 msgid_plural "Delete the {0} selected photos permanently?"
 msgstr[0] "Das ausgewählte Foto dauerhaft löschen?"
 msgstr[1] "Die {0} ausgewählten Fotos dauerhaft löschen?"
 
-#: ../src/MainWindow.cs:2088
+#: ../src/MainWindow.cs:2090
 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] "Dies löscht alle Versionen des gewählten Fotos vom Laufwerk."
 msgstr[1] "Dies löscht alle Versionen der gewählten Fotos vom Laufwerk."
 
-#: ../src/MainWindow.cs:2091
+#: ../src/MainWindow.cs:2093
 msgid "_Delete photo"
 msgid_plural "_Delete photos"
 msgstr[0] "Foto _löschen"
 msgstr[1] "Fotos _löschen"
 
-#: ../src/MainWindow.cs:2127
+#: ../src/MainWindow.cs:2129
 #, csharp-format
 msgid "Remove the selected photo from F-Spot?"
 msgid_plural "Remove the {0} selected photos from F-Spot?"
 msgstr[0] "Das ausgewählte Foto aus F-Spot entfernen?"
 msgstr[1] "Die {0} ausgewählten Fotos aus F-Spot entfernen?"
 
-#: ../src/MainWindow.cs:2132
+#: ../src/MainWindow.cs:2134
 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 "
@@ -2058,27 +2067,27 @@ msgstr ""
 "Markierungsinformationen verloren. Die Fotos bleiben jedoch auf dem Rechner "
 "erhalten und können wieder in F-Spot importiert werden."
 
-#: ../src/MainWindow.cs:2133
+#: ../src/MainWindow.cs:2135
 msgid "_Remove from Catalog"
 msgstr "Aus dem Katalog ent_fernen"
 
-#: ../src/MainWindow.cs:2202
+#: ../src/MainWindow.cs:2209
 #, csharp-format
 msgid "Delete tag \"{0}\"?"
 msgstr "Die Markierung »{0}« löschen?"
 
-#: ../src/MainWindow.cs:2204
+#: ../src/MainWindow.cs:2211
 #, csharp-format
 msgid "Delete the {0} selected tags?"
 msgstr "Die {0} ausgewählten Markierungen löschen?"
 
-#: ../src/MainWindow.cs:2209
+#: ../src/MainWindow.cs:2216
 msgid "photo"
 msgid_plural "photos"
 msgstr[0] "Foto"
 msgstr[1] "Fotos"
 
-#: ../src/MainWindow.cs:2211
+#: ../src/MainWindow.cs:2218
 #, csharp-format
 msgid "If you delete this tag, the association with {0} {1} will be lost."
 msgid_plural ""
@@ -2090,18 +2099,18 @@ msgstr[1] ""
 "Wenn eine Markierung gelöscht wird, gehen alle Verknüpfungen zu {0} {1} "
 "verloren."
 
-#: ../src/MainWindow.cs:2216
+#: ../src/MainWindow.cs:2223
 msgid "_Delete tag"
 msgid_plural "_Delete tags"
 msgstr[0] "Markierung _löschen"
 msgstr[1] "Markierungen _löschen"
 
 #. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2230
+#: ../src/MainWindow.cs:2237
 msgid "Tag is not empty"
 msgstr "Markierung ist nicht leer"
 
-#: ../src/MainWindow.cs:2231
+#: ../src/MainWindow.cs:2238
 #, csharp-format
 msgid ""
 "Can not delete tags that have tags within them.  Please delete tags under "
@@ -2110,39 +2119,39 @@ msgstr ""
 "Markierungen können nicht gelöscht werden, wenn sie weitere Markierungen "
 "beinhalten. Bitte löschen Sie zuerst die Markierungen unterhalb von »{0}«."
 
-#: ../src/MainWindow.cs:2662
+#: ../src/MainWindow.cs:2678
 msgid "Rotate selected photo left"
 msgid_plural "Rotate selected photos left"
 msgstr[0] "Ausgewähltes Foto nach links rotieren"
 msgstr[1] "Ausgewählte Fotos nach links rotieren"
 
-#: ../src/MainWindow.cs:2675
+#: ../src/MainWindow.cs:2691
 msgid "Rotate selected photo right"
 msgid_plural "Rotate selected photos right"
 msgstr[0] "Ausgewähltes Foto nach rechts drehen"
 msgstr[1] "Ausgewählte Fotos nach rechts drehen"
 
-#: ../src/MainWindow.cs:2686
+#: ../src/MainWindow.cs:2702
 #, csharp-format
 msgid "Find _Selected Tag"
 msgid_plural "Find _Selected Tags"
 msgstr[0] "Gewählte Markierung _finden"
 msgstr[1] "Gewählte Markierungen _finden"
 
-#: ../src/MainWindow.cs:2690
+#: ../src/MainWindow.cs:2706
 #, csharp-format
 msgid "Find Selected Tag _With"
 msgid_plural "Find Selected Tags _With"
 msgstr[0] "Ausgewählte Markierung suchen _mit"
 msgstr[1] "Ausgewählte Markierungen suchen _mit"
 
-#: ../src/MainWindow.cs:2731
+#: ../src/MainWindow.cs:2747
 msgid "Create New Version?"
 msgid_plural "Create New Versions?"
 msgstr[0] "Neue Version erstellen?"
 msgstr[1] "Neue Versionen erstellen?"
 
-#: ../src/MainWindow.cs:2733
+#: ../src/MainWindow.cs:2749
 #, csharp-format
 msgid ""
 "Before launching {1}, should F-Spot create a new version of the selected "
@@ -2157,11 +2166,11 @@ msgstr[1] ""
 "Soll F-Spot vor dem Ausführen von {1} eine Kopie der ausgewählten Fotos "
 "erstellen, um die Originale zu erhalten?"
 
-#: ../src/MainWindow.cs:2755
+#: ../src/MainWindow.cs:2771
 msgid "XCF version"
 msgstr "XCF-Version"
 
-#: ../src/PhotoStore.cs:166 ../src/ui/mail_dialog.ui.h:17
+#: ../src/PhotoStore.cs:177 ../src/ui/mail_dialog.ui.h:17
 msgid "Original"
 msgstr "Original"
 
@@ -2229,7 +2238,8 @@ msgstr "Abtrennung auf_heben"
 msgid "Really reparent \"{0}\" as version of \"{1}\"?"
 msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
 msgstr[0] ""
-"Soll die Abtrennung von »{0}« als Version von »{1}« wirklich aufgehoben werden?"
+"Soll die Abtrennung von »{0}« als Version von »{1}« wirklich aufgehoben "
+"werden?"
 msgstr[1] ""
 "Soll die Abtrennung von {2} Fotos als Versionen von »{1}« wirklich aufgehoben "
 "werden?"
@@ -2247,16 +2257,15 @@ msgstr ""
 msgid "Received exception \"{0}\"."
 msgstr "Fehler empfangen: »{0}«"
 
-#: ../src/PhotoVersionMenu.cs:71 ../src/Widgets/InfoBox.cs:468
-#: ../src/Widgets/InfoBox.cs:470
+#: ../src/PhotoVersionMenu.cs:54 ../src/Widgets/InfoBox.cs:470
 msgid "(No Edits)"
 msgstr "(Keine Bearbeitungen)"
 
-#: ../src/PhotoView.cs:339
+#: ../src/PhotoView.cs:336
 msgid "Description:"
 msgstr "Beschreibung:"
 
-#: ../src/Preferences.cs:155
+#: ../src/Preferences.cs:157
 msgid "Photos"
 msgstr "Fotos"
 
@@ -2264,68 +2273,68 @@ msgstr "Fotos"
 msgid "Image Settings"
 msgstr "Bildeinstellungen"
 
-#: ../src/QueryWidget.cs:55
+#: ../src/QueryWidget.cs:57
 msgid "Find: "
 msgstr "Suchen: "
 
-#: ../src/QueryWidget.cs:60
+#: ../src/QueryWidget.cs:62
 msgid "Untagged photos"
 msgstr "Unmarkierte Fotos"
 
-#: ../src/QueryWidget.cs:68
+#: ../src/QueryWidget.cs:70
 msgid "Rated photos"
 msgstr "Bewertete Fotos"
 
 #. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:77
+#: ../src/QueryWidget.cs:79
 msgid "Import roll"
 msgstr "Importe"
 
-#: ../src/QueryWidget.cs:100
+#: ../src/QueryWidget.cs:102
 msgid "Clear search"
 msgstr "Suche zurücksetzen"
 
-#: ../src/QueryWidget.cs:107
+#: ../src/QueryWidget.cs:109
 msgid "Refresh search"
 msgstr "Suche zurücksetzen"
 
-#: ../src/QueryWidget.cs:110
+#: ../src/QueryWidget.cs:112
 msgid "No matching photos found"
 msgstr "Keine passenden Fotos gefunden"
 
-#: ../src/RotateCommand.cs:73
+#: ../src/RotateCommand.cs:74
 msgid "Unable to rotate this type of photo"
 msgstr "Diese Art von Foto konnte nicht gedreht werden"
 
-#: ../src/RotateCommand.cs:92
+#: ../src/RotateCommand.cs:93
 msgid "Unable to rotate readonly file"
 msgstr "Schreibgeschützte Datei kann nicht gedreht werden"
 
-#: ../src/RotateCommand.cs:155
+#: ../src/RotateCommand.cs:156
 msgid "Rotating photos"
 msgstr "Fotos werden gedreht"
 
-#: ../src/RotateCommand.cs:166
+#: ../src/RotateCommand.cs:167
 #, csharp-format
 msgid "Rotating photo \"{0}\""
 msgstr "Foto »{0}« wird gedreht"
 
-#: ../src/RotateCommand.cs:179
+#: ../src/RotateCommand.cs:180
 msgid "Directory not found"
 msgstr "Ordner nicht gefunden"
 
-#: ../src/RotateCommand.cs:181
+#: ../src/RotateCommand.cs:182
 msgid "File not found"
 msgstr "Datei nicht gefunden"
 
-#: ../src/RotateCommand.cs:199
+#: ../src/RotateCommand.cs:200
 #, csharp-format
 msgid "Unable to rotate photo"
 msgid_plural "Unable to rotate {0} photos"
 msgstr[0] "Das Foto konnte nicht gedreht werden"
 msgstr[1] "{0} Fotos konnten nicht gedreht werden"
 
-#: ../src/RotateCommand.cs:201
+#: ../src/RotateCommand.cs:202
 #, csharp-format
 msgid ""
 "The photo could not be rotated because it is on a read only file system or "
@@ -2342,12 +2351,12 @@ msgstr[1] ""
 "schreibgeschützten Dateisystem oder Medium (z.B. CD-ROM) befinden. Bitte "
 "versuchen Sie es nach Überprüfung der Zugriffsrechte erneut."
 
-#: ../src/RotateCommand.cs:228
+#: ../src/RotateCommand.cs:229
 #, csharp-format
 msgid "Received error \"{0}\" while attempting to rotate {1}"
 msgstr "Beim Versuch »{1}« zu drehen, wurde der Fehler »{0}« empfangen"
 
-#: ../src/RotateCommand.cs:233
+#: ../src/RotateCommand.cs:234
 msgid "Error while rotating photo."
 msgstr "Fehler beim Drehen des Fotos."
 
@@ -2382,7 +2391,8 @@ msgstr "Fehler beim Speichern des geschärften Bilds"
 #, csharp-format
 msgid "Received exception \"{0}\". Unable to save photo {1}"
 msgstr ""
-"Die Ausnahme »{0}« wurde empfangen. Das Bild {1} kann nicht gespeichert werden."
+"Die Ausnahme »{0}« wurde empfangen. Das Bild {1} kann nicht gespeichert "
+"werden."
 
 #: ../src/Sharpener.cs:103
 msgid "Sharpen"
@@ -2400,40 +2410,40 @@ msgstr "Radius:"
 msgid "Threshold:"
 msgstr "Schwellwert:"
 
-#: ../src/SingleView.cs:77
+#: ../src/SingleView.cs:76
 msgid "Rotate photo left"
 msgstr "Foto nach links rotieren"
 
-#: ../src/SingleView.cs:82
+#: ../src/SingleView.cs:81
 msgid "Rotate photo right"
 msgstr "Foto nach rechts rotieren"
 
-#: ../src/SingleView.cs:119
+#: ../src/SingleView.cs:118
 msgid "Folder"
 msgstr "Ordner"
 
-#: ../src/SingleView.cs:344
+#: ../src/SingleView.cs:343
 msgid "Open"
 msgstr "Öffnen"
 
-#: ../src/SingleView.cs:347
+#: ../src/SingleView.cs:346
 msgid "Select Folder"
 msgstr "Ordner wählen"
 
-#: ../src/SingleView.cs:431
+#: ../src/SingleView.cs:430
 msgid "Set as Background"
 msgstr "Als Hintergrundbild verwenden"
 
-#: ../src/TagCommands.cs:120 ../src/TagSelectionWidget.cs:492
+#: ../src/TagCommands.cs:116 ../src/TagSelectionWidget.cs:497
 #: ../src/UI.Dialog/EditTagDialog.cs:76
 msgid "This name is already in use"
 msgstr "Dieser Name existiert bereits"
 
-#: ../src/TagCommands.cs:170
+#: ../src/TagCommands.cs:166
 msgid "Create New Tag"
 msgstr "Neue Markierung erstellen"
 
-#: ../src/TagCommands.cs:171
+#: ../src/TagCommands.cs:167
 msgid "Name of New Tag:"
 msgstr "Name der neuen Markierung:"
 
@@ -2508,32 +2518,32 @@ msgstr "Nicht {0}"
 msgid "Drag tags here to search for them"
 msgstr "Markierungen hier einfügen, um nach ihnen zu suchen"
 
-#: ../src/TagSelectionWidget.cs:491
+#: ../src/TagSelectionWidget.cs:496
 msgid "Error renaming tag"
 msgstr "Fehler beim Umbenennen der Markierung"
 
-#: ../src/TagStore.cs:204
+#: ../src/TagStore.cs:205
 msgid "Favorites"
 msgstr "Favoriten"
 
-#: ../src/TagStore.cs:209
+#: ../src/TagStore.cs:210
 msgid "Hidden"
 msgstr "Versteckt"
 
-#: ../src/TagStore.cs:217
+#: ../src/TagStore.cs:218
 msgid "People"
 msgstr "Personen"
 
-#: ../src/TagStore.cs:222
+#: ../src/TagStore.cs:223
 msgid "Places"
 msgstr "Orte"
 
-#: ../src/TagStore.cs:227
+#: ../src/TagStore.cs:228
 msgid "Events"
 msgstr "Ereignisse"
 
 #. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:340
+#: ../src/TagStore.cs:241 ../src/Widgets/InfoBox.cs:344
 msgid "(None)"
 msgstr "(Keine)"
 
@@ -2566,15 +2576,15 @@ msgstr "Vorschaubilder werden aktualisiert"
 msgid "Updating picture \"{0}\""
 msgstr "Bild »{0}« wird aktualisiert"
 
-#: ../src/UI.Dialog/AboutDialog.cs:95
+#: ../src/UI.Dialog/AboutDialog.cs:99
 msgid "Photo management for GNOME"
 msgstr "Fotoverwaltung für GNOME"
 
-#: ../src/UI.Dialog/AboutDialog.cs:96
+#: ../src/UI.Dialog/AboutDialog.cs:100
 msgid "Copyright © 2003-2010 Novell Inc."
 msgstr "Copyright © 2003-2010 Novell Inc."
 
-#: ../src/UI.Dialog/AboutDialog.cs:120
+#: ../src/UI.Dialog/AboutDialog.cs:124
 msgid "translator-credits"
 msgstr ""
 "Frank Arnold <frank at scirocco-5v-turbo.de>\n"
@@ -2583,7 +2593,7 @@ msgstr ""
 "Arun Persaud <arun at nubati.net>\n"
 "Mario Blättermann <mariobl at gnome.org>"
 
-#: ../src/UI.Dialog/AboutDialog.cs:125
+#: ../src/UI.Dialog/AboutDialog.cs:129
 msgid "F-Spot Website"
 msgstr "F-Spot Webseite"
 
@@ -2593,39 +2603,39 @@ msgstr "F-Spot Webseite"
 msgid "Shift all photos by {0}"
 msgstr "Alle Fotos um {0} verschieben"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:99
+#: ../src/UI.Dialog/DateRangeDialog.cs:90
 msgid "Today"
 msgstr "Heute"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:101
+#: ../src/UI.Dialog/DateRangeDialog.cs:92
 msgid "Yesterday"
 msgstr "Gestern"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:103
+#: ../src/UI.Dialog/DateRangeDialog.cs:94
 msgid "Last 7 days"
 msgstr "Die letzten 7 Tage"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:105
+#: ../src/UI.Dialog/DateRangeDialog.cs:96
 msgid "Last 30 days"
 msgstr "Die letzten 30 Tage"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:107
+#: ../src/UI.Dialog/DateRangeDialog.cs:98
 msgid "Last 90 days"
 msgstr "Die letzten 90 Tage"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:109
+#: ../src/UI.Dialog/DateRangeDialog.cs:100
 msgid "Last 360 days"
 msgstr "Die letzten 360 Tage"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:111
+#: ../src/UI.Dialog/DateRangeDialog.cs:102
 msgid "Current Week (Mon-Sun)"
 msgstr "Diese Woche (Mo-So)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:113
+#: ../src/UI.Dialog/DateRangeDialog.cs:104
 msgid "Previous Week (Mon-Sun)"
 msgstr "Vergangene Woche (Mo-So)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:131
+#: ../src/UI.Dialog/DateRangeDialog.cs:122
 msgid "Customized Range"
 msgstr "Benutzerdefinierter Bereich"
 
@@ -2673,46 +2683,72 @@ msgstr "»{0}« kann nicht als Symbol für die Markierung geladen werden"
 msgid "Photo {0} of {1}"
 msgstr "Foto {0} von {1}"
 
-#: ../src/UI.Dialog/ExceptionDialog.cs:24
-msgid "F-Spot Encountered a Fatal Error"
-msgstr "Es trat ein schwerwiegender Fehler in F-Spot auf."
-
-#: ../src/UI.Dialog/ExceptionDialog.cs:60
-msgid "Error Details"
-msgstr "Fehlerdetails"
-
-#: ../src/UI.Dialog/ExceptionDialog.cs:104
-msgid "An unhandled exception was thrown: "
-msgstr "Eine unverarbeitete Ausnahme trat auf:"
-
 #: ../src/UI.Dialog/ImportDialog.cs:15
 msgid "Choose Folder..."
 msgstr "Ordner wählen …"
 
-#: ../src/UI.Dialog/ImportDialog.cs:124
+#: ../src/UI.Dialog/ImportDialog.cs:131
 msgid "Choose Import source..."
 msgstr "Importquelle wählen …"
 
-#: ../src/UI.Dialog/ImportDialog.cs:136
+#: ../src/UI.Dialog/ImportDialog.cs:143
 msgid "(No Cameras Detected)"
 msgstr "(Keine Kameras erkannt)"
 
-#: ../src/UI.Dialog/ImportDialog.cs:264
+#: ../src/UI.Dialog/ImportDialog.cs:178
+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 ""
+"Durch Aktivieren dieses Ankreuzfeldes werden die importierten Fotos in der "
+"Kamera gelöscht, sobald der Importvorgang erfolgreich abgeschlossen wurde.\n"
+"\n"
+"Es ist im Allgemeinen empfehlenswert, Ihre Fotos zu sichern, bevor Sie sie in "
+"der Kamera löschen. <b>Verwenden Sie diese Option auf eigenes Risiko!</b>"
+
+#: ../src/UI.Dialog/ImportDialog.cs:179
+msgid "Warning"
+msgstr "Warnung"
+
+#: ../src/UI.Dialog/ImportDialog.cs:297
 #, csharp-format
 msgid "Importing Photos: {0} of {1}..."
 msgstr "Fotos werden importiert: {0} von {1} …"
 
-#: ../src/UI.Dialog/ImportDialog.cs:288
+#: ../src/UI.Dialog/ImportDialog.cs:321
 msgid "Importing photos..."
 msgstr "Fotos werden importiert …"
 
 #. TODO: Using a GtkSpinner would be nicer here.
-#: ../src/UI.Dialog/ImportDialog.cs:295
+#: ../src/UI.Dialog/ImportDialog.cs:328
 msgid "Searching for photos... (You can already click Import to continue)"
 msgstr ""
 "Nach Fotos wird gesucht … (Sie können auf »Importieren« klicken, um "
 "fortzusetzen)"
 
+#: ../src/UI.Dialog/ImportFailureDialog.cs:36
+msgid "Import failures"
+msgstr "Importfehler"
+
+#: ../src/UI.Dialog/ImportFailureDialog.cs:37
+msgid "Some files failed to import"
+msgstr "Fehler beim Import einiger Dateien"
+
+#: ../src/UI.Dialog/ImportFailureDialog.cs:38
+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 ""
+"Einige Dateien konnten nicht importiert werden. Sie könnten beschädigt sein "
+"oder das Speichermedium könnte fehlerhaft sein, auf dem sie sich befinden."
+
+#: ../src/UI.Dialog/ImportFailureDialog.cs:101
+msgid "Details"
+msgstr "Details"
+
 #: ../src/UI.Dialog/PreferenceDialog.cs:57
 #: ../src/UI.Dialog/PreferenceDialog.cs:80
 msgid "None"
@@ -2795,6 +2831,24 @@ msgstr "Unterschied:"
 msgid "min. Starting at {0}"
 msgstr "Min. Start bei {0}"
 
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
+msgid "C_reate"
+msgstr "_Erstellen"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:2
+msgid "Create _icon for this tag when first used"
+msgstr "Symbol für diese Mark_ierung bei erster Benutzung erstellen"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr "Überge_ordnete Markierung:"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "Markierungs_name:"
+
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
 msgid "<b>End Date</b>"
 msgstr "<b>Enddatum</b>"
@@ -2827,20 +2881,10 @@ msgstr "Markierung bearbeiten"
 msgid "Edit icon"
 msgstr "Symbol bearbeiten"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
-#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
-msgid "P_arent Tag:"
-msgstr "Überge_ordnete Markierung:"
-
 #: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
 msgid "_Icon:"
 msgstr "_Symbol:"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
-#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
-msgid "_Tag Name:"
-msgstr "Markierungs_name:"
-
 #: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:1
 msgid "<b>From External Photo</b>"
 msgstr "<b>Aus externem Foto</b>"
@@ -2970,34 +3014,34 @@ msgstr "Bewertungsfilter setzen"
 msgid "Repair"
 msgstr "Reparieren"
 
-#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
-msgid "C_reate"
-msgstr "_Erstellen"
-
-#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:2
-msgid "Create _icon for this tag when first used"
-msgstr "Symbol für diese Mark_ierung bei erster Benutzung erstellen"
-
 #: ../src/ui/import.ui.h:1
-msgid "Attach Tags:"
-msgstr "Markierungen hinzufügen:"
+msgid "C_opy files to the Photos folder"
+msgstr "Dateien in den F_otoordner kopieren"
 
 #: ../src/ui/import.ui.h:2
-msgid "Copy files to the Photos folder"
-msgstr "Dateien in den Fotoordner kopieren"
-
-#: ../src/ui/import.ui.h:3
-msgid "Detect duplicates"
-msgstr "Duplikate finden"
+msgid "I_nclude subfolders"
+msgstr "U_nterordner einbeziehen"
 
 #. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:5
+msgid "Import _from:"
+msgstr "Importieren _von:"
+
 #: ../src/ui/import.ui.h:6
-msgid "Import from:"
-msgstr "Importieren von:"
+msgid "_Attach tags:"
+msgstr "M_arkierungen anfügen:"
 
 #: ../src/ui/import.ui.h:7
-msgid "Include subfolders"
-msgstr "Unterordner einbeziehen"
+msgid "_Detect duplicates"
+msgstr "_Duplikate finden"
+
+#: ../src/ui/import.ui.h:8
+msgid "_Import"
+msgstr "_Importieren"
+
+#: ../src/ui/import.ui.h:9
+msgid "_Remove original files after import"
+msgstr "Originaldateien nach dem Importieren entfe_rnen"
 
 #: ../src/ui/mail_dialog.ui.h:1
 msgid "1024 px"
@@ -3425,11 +3469,11 @@ msgstr "Einstellungen"
 msgid "_Interpolate image on zoom"
 msgstr "Bild bei Größenänderung _interpolieren"
 
-#: ../src/Updater.cs:724
+#: ../src/Updater.cs:727
 msgid "Updating F-Spot Database"
 msgstr "F-Spot-Datenbank wird aktualisiert"
 
-#: ../src/Updater.cs:725
+#: ../src/Updater.cs:728
 msgid ""
 "Please wait while your F-Spot gallery's database is updated. This may take "
 "some time."
@@ -3544,11 +3588,11 @@ msgstr ""
 "Die Ausnahme »{0}« wurde empfangen. Beachten Sie, dass RAW-Dateien vor der "
 "Bearbeitung erst in JPEG-Dateien umgewandelt werden müssen."
 
-#: ../src/Widgets/Filmstrip.cs:573
+#: ../src/Widgets/Filmstrip.cs:470
 msgid "_Horizontal"
 msgstr "_Horizontal"
 
-#: ../src/Widgets/Filmstrip.cs:577
+#: ../src/Widgets/Filmstrip.cs:474
 msgid "_Vertical"
 msgstr "_Vertikal"
 
@@ -3560,7 +3604,7 @@ msgstr "Suchen:"
 msgid "Folders"
 msgstr "Ordner"
 
-#: ../src/Widgets/FolderTreeView.cs:127
+#: ../src/Widgets/FolderTreeView.cs:129
 msgid "Filesystem"
 msgstr "Dateisystem"
 
@@ -3604,29 +3648,29 @@ msgstr "Bewertung"
 msgid "(wrong format)"
 msgstr "(falsches Format)"
 
-#: ../src/Widgets/InfoBox.cs:349 ../src/Widgets/InfoBox.cs:360
-#: ../src/Widgets/InfoBox.cs:370
+#: ../src/Widgets/InfoBox.cs:353 ../src/Widgets/InfoBox.cs:364
+#: ../src/Widgets/InfoBox.cs:374
 msgid "(Unknown)"
 msgstr "(Unbekannt)"
 
-#: ../src/Widgets/InfoBox.cs:466
+#: ../src/Widgets/InfoBox.cs:474
 #, csharp-format
 msgid "(One Edit)"
 msgid_plural "({0} Edits)"
 msgstr[0] "(Eine Bearbeitung)"
 msgstr[1] "({0} Bearbeitungen)"
 
-#: ../src/Widgets/InfoBox.cs:480
+#: ../src/Widgets/InfoBox.cs:484
 msgid "(File read error)"
 msgstr "(Fehler beim Lesen der Datei) "
 
-#: ../src/Widgets/InfoBox.cs:525
+#: ../src/Widgets/InfoBox.cs:529
 #, csharp-format
 msgid "{0} Photos"
 msgstr "{0} Fotos"
 
 #. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:545
+#: ../src/Widgets/InfoBox.cs:549
 #, csharp-format
 msgid ""
 "On {0} between \n"
@@ -3635,7 +3679,7 @@ msgstr ""
 "Auf {0} zwischen \n"
 "{1} und {2}"
 
-#: ../src/Widgets/InfoBox.cs:550
+#: ../src/Widgets/InfoBox.cs:554
 #, csharp-format
 msgid ""
 "Between {0} \n"
@@ -3644,35 +3688,35 @@ msgstr ""
 "Zwischen {0} \n"
 "und {1}"
 
-#: ../src/Widgets/InfoBox.cs:577
+#: ../src/Widgets/InfoBox.cs:581
 msgid "(At least one File not found)"
 msgstr "(Mindestens eine Datei wurde nicht gefunden)"
 
-#: ../src/Widgets/InfoBox.cs:694
+#: ../src/Widgets/InfoBox.cs:698
 msgid "Show Photo Name"
 msgstr "Fotonamen anzeigen"
 
-#: ../src/Widgets/InfoBox.cs:703
+#: ../src/Widgets/InfoBox.cs:707
 msgid "Show Date"
 msgstr "Datum anzeigen"
 
-#: ../src/Widgets/InfoBox.cs:712
+#: ../src/Widgets/InfoBox.cs:716
 msgid "Show Size"
 msgstr "Größe anzeigen"
 
-#: ../src/Widgets/InfoBox.cs:721
+#: ../src/Widgets/InfoBox.cs:725
 msgid "Show Exposure"
 msgstr "Belichtung anzeigen"
 
-#: ../src/Widgets/InfoBox.cs:730
+#: ../src/Widgets/InfoBox.cs:734
 msgid "Show Focal Length"
 msgstr "Brennweite anzeigen"
 
-#: ../src/Widgets/InfoBox.cs:739
+#: ../src/Widgets/InfoBox.cs:743
 msgid "Show Camera"
 msgstr "Kamera anzeigen"
 
-#: ../src/Widgets/InfoBox.cs:748
+#: ../src/Widgets/InfoBox.cs:752
 msgid "Show File Size"
 msgstr "Dateigröße anzeigen"
 
@@ -3713,6 +3757,18 @@ msgstr "Eine Diaschau aus F-Spot anzeigen"
 msgid "F-Spot photos"
 msgstr "F-Spot Fotos"
 
+#~ msgid "F-Spot Encountered a Fatal Error"
+#~ msgstr "Es trat ein schwerwiegender Fehler in F-Spot auf."
+
+#~ msgid "Error Details"
+#~ msgstr "Fehlerdetails"
+
+#~ msgid "An unhandled exception was thrown: "
+#~ msgstr "Eine unverarbeitete Ausnahme trat auf:"
+
+#~ msgid "Attach Tags:"
+#~ msgstr "Markierungen hinzufügen:"
+
 #~ msgid "Autorotate"
 #~ msgstr "Automatisch drehen"
 
@@ -4027,9 +4083,6 @@ msgstr "F-Spot Fotos"
 #~ msgid "<b></b>"
 #~ msgstr "<b></b>"
 
-#~ msgid "Attach tag:"
-#~ msgstr "Markierung anfügen:"
-
 #~ msgid "CD"
 #~ msgstr "CD"
 
@@ -4231,9 +4284,6 @@ msgstr "F-Spot Fotos"
 #~ msgid "Disable"
 #~ msgstr "Deaktivieren"
 
-#~ msgid "Details"
-#~ msgstr "Details"
-
 #~ msgid "Extension Repository Management"
 #~ msgstr "Verwaltung von Erweiterungs-Softwarequellen"
 
diff --git a/po/es.po b/po/es.po
index 7fcb6ae..566af65 100644
--- a/po/es.po
+++ b/po/es.po
@@ -11,11 +11,11 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: f-spot.HEAD\n"
+"Project-Id-Version: f-spot.master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
 "spot&component=General\n"
-"POT-Creation-Date: 2010-06-14 16:14+0000\n"
-"PO-Revision-Date: 2010-06-16 08:05+0200\n"
+"POT-Creation-Date: 2010-08-02 13:38+0000\n"
+"PO-Revision-Date: 2010-08-03 06:53+0200\n"
 "Last-Translator: Jorge González <jorgegonz at svn.gnome.org>\n"
 "Language-Team: Español <gnome-es-list at gnome.org>\n"
 "MIME-Version: 1.0\n"
@@ -27,7 +27,6 @@ msgstr ""
 #: ../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
-#: ../src/ui/main_window.ui.h:11
 msgid "F-Spot"
 msgstr "F-Spot"
 
@@ -61,54 +60,54 @@ msgstr "Visor de fotos"
 msgid "_CD..."
 msgstr "_CD…"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:162
+#: ../extensions/Exporters/CDExport/CDExport.cs:155
 msgid "Transferring Pictures"
 msgstr "Transfiriendo las fotografías"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:218
+#: ../extensions/Exporters/CDExport/CDExport.cs:208
 #, csharp-format
 msgid "Transferring picture \"{0}\" To CD"
 msgstr "Transfiriendo fotografía «{0}» al CD"
 
 #. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:644 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../extensions/Exporters/CDExport/CDExport.cs:210
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:360
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:209
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:773
+#: ../src/MainWindow.cs:645 ../src/UI.Dialog/AdjustTimeDialog.cs:130
 #: ../src/UI.Dialog/ProgressDialog.cs:90
 #, csharp-format
 msgid "{0} of {1}"
 msgstr "{0} de {1}"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
+#: ../extensions/Exporters/CDExport/CDExport.cs:223
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:378
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:390
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:696
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
 msgid "Done Sending Photos"
 msgstr "Finalizó el envío de fotos"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:235
+#: ../extensions/Exporters/CDExport/CDExport.cs:225
 msgid "Transfer Complete"
 msgstr "Transferencia finalizada"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:242
+#: ../extensions/Exporters/CDExport/CDExport.cs:232
 msgid "Error While Transferring"
 msgstr "Error al transferir"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
+#: ../extensions/Exporters/CDExport/CDExport.cs:240
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:266
 msgid "Error Transferring"
 msgstr "Error al transferir"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:263
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
 msgid "copying..."
 msgstr "copiando…"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:1
-msgid "<b><i>There is some previously scheduled items to write</i></b>"
+msgid "<b><i>There are some previously scheduled items to write</i></b>"
 msgstr ""
 "<b><i>Existe una planificación previa para escribir algunos archivos</i></b>"
 
@@ -117,42 +116,34 @@ msgid "<b>Photos to Burn</b>"
 msgstr "<b>Fotografías para grabar</b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/ui/mail_dialog.ui.h:10
-msgid "Autorotate"
-msgstr "Autorrotar"
-
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 msgid "Create CD"
 msgstr "Crear CD"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:222
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
+#: ../src/Widgets/InfoBox.cs:221
 msgid "Size"
 msgstr "Tamaño"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
 msgid "Size of the exported selection:"
 msgstr "Tamaño de la selección exportada:"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
 msgid "_Browse Previously Scheduled Files"
 msgstr "_Examinar los archivos anteriormente programados"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:41
+#: ../src/ui/single_view.ui.h:12
 msgid "_Export"
 msgstr "_Exportar"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:9
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
 msgid "_Write only these photos to CD"
 msgstr "_Grabar sólo estas fotos en el CD"
 
@@ -160,11 +151,11 @@ msgstr "_Grabar sólo estas fotos en el CD"
 msgid "F_acebook..."
 msgstr "F_acebook…"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
 msgid "Waiting for authorization"
 msgstr "Esperando autorización"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:101
 msgid ""
 "F-Spot will now launch your browser so that you can enable the permission "
 "you just selected.\n"
@@ -178,11 +169,11 @@ msgstr ""
 "Una vez que Facebook le indique que debe volver a esta aplicación, pulse "
 "«Aceptar» debajo."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
 msgid "Too many images to export"
 msgstr "Demasiadas imágenes para exportar"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:283
 #, csharp-format
 msgid ""
 "Facebook only permits {0} photographs per album.  Please refine your "
@@ -191,19 +182,19 @@ msgstr ""
 "Facebook sólo permite {0} fotografías por álbum. Rehaga su selección e "
 "inténtelo de nuevo."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
 msgid "Album must have a name"
 msgstr "El álbum debe tener un nombre"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:299
 msgid "Please name your album or choose an existing album."
 msgstr "Dé un nombre a su álbum o elija un álbum existente."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
 msgid "Creating a new album failed"
 msgstr "Falló la creación del álbum nuevo"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:314
 #, csharp-format
 msgid ""
 "An error occurred creating a new album.\n"
@@ -214,53 +205,53 @@ msgstr ""
 "\n"
 "{0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:327
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:486
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:726
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:593
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:515
 msgid "Uploading Pictures"
 msgstr "Cargando fotografías"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:355
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:652
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:554
 #, csharp-format
 msgid "Uploading picture \"{0}\" ({1} of {2})"
 msgstr "Subiendo imagen «{0}» ({1} de {2})"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
 #, csharp-format
 msgid "Error Uploading To Facebook: {0}"
 msgstr "Error al subir a Facebook: {0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:215
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:789
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:685
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:585
 #: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
 msgid "Error"
 msgstr "Error"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:800
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:698
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:598
 msgid "Upload Complete"
 msgstr "Carga completada"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:383
 msgid "Visit F-Spot group on Facebook"
 msgstr "Visitar el grupo de F-Spot en Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
 msgid "Waiting for authentication"
 msgstr "Esperando la autenticación"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:214
 msgid ""
 "F-Spot will now launch your browser so that you can log into Facebook.\n"
 "\n"
@@ -275,15 +266,15 @@ msgstr ""
 "«Aceptar» debajo. F-Spot cacheará su sesión en el Depósito de claves, si es "
 "posible, y la reusará en un futuro para exportar a Facebook."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:219
 msgid "Authenticating..."
 msgstr "Autenticando…"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
 msgid "Error logging into Facebook"
 msgstr "Error al iniciar sesión en Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:230
 msgid ""
 "There was a problem logging into Facebook.  Check your credentials and try "
 "again."
@@ -291,37 +282,37 @@ msgstr ""
 "Hubo un problema al iniciar sesión en Facebook. Compruebe sus credenciales e "
 "inténtelo de nuevo."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:239
 msgid "Authorizing Session"
 msgstr "Autorizando sesión"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:248
 msgid "Session established, fetching user info..."
 msgstr "Sesión establecida, obteniendo información del usuario..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:254
 msgid "Session established, fetching friend list..."
 msgstr "Sesión establecida, obteniendo lista de amigos..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:264
 msgid "Session established, fetching friend details..."
 msgstr "Sesión establecida, obteniendo detalles de amigos..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:276
 msgid "Session established, fetching photo albums..."
 msgstr "Sesión establecida, obteniendo álbumes de fotos..."
 
 #. Note for translators: {0} and {1} are respectively firstname and surname of the user
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:286
 #, csharp-format
 msgid "{0} {1} is logged into Facebook"
 msgstr "{0} {1} ha iniciado sesión en Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
 msgid "Facebook Connection Error"
 msgstr "Error de conexión con Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:296
 #, csharp-format
 msgid ""
 "There was an error when downloading your information from Facebook.\n"
@@ -332,7 +323,7 @@ msgstr ""
 "\n"
 "Facebook dijo: {0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:325
 msgid "You are not logged in."
 msgstr "No ha iniciado sesión."
 
@@ -361,7 +352,6 @@ msgid "In this photo"
 msgstr "En esta foto"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:7
-#: ../src/XmpTagsImporter.cs:90
 msgid "Location"
 msgstr "Lugar"
 
@@ -374,7 +364,7 @@ msgid "Logout"
 msgstr "Finalizar sesión"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../src/Widgets/InfoBox.cs:213
+#: ../src/Widgets/InfoBox.cs:212
 msgid "Name"
 msgstr "Nombre"
 
@@ -410,12 +400,12 @@ msgstr "_Flickr…"
 msgid "_Zooomr..."
 msgstr "_Zooomr…"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:107
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
 msgid "Authorize"
 msgstr "Autorizar"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
 #, csharp-format
 msgid ""
 "Return to this window after you have finished the authorization process on "
@@ -424,59 +414,60 @@ msgstr ""
 "Vuelva a esta ventana después de que haya finalizado el proceso de "
 "autorización en {0} y pulse el botón «Completar autorización» de abajo"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:114
 msgid "Complete Authorization"
 msgstr "Completar autorización"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
 #, csharp-format
 msgid "Logging into {0}"
 msgstr "Iniciando sesión en {0}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:120
 msgid "Checking credentials..."
 msgstr "Comprobando las credenciales…"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:127
 #, csharp-format
 msgid "Welcome {0} you are connected to {1}"
 msgstr "Bienvenido {0}, está conectado en {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:130
 #, csharp-format
 msgid "Sign in as a different user"
 msgstr "Iniciar sesión como un usuario diferente"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:135
 #, csharp-format
 msgid "Used {0} of your allowed {1} monthly quota"
 msgstr "Ha usado {0} de su cuota mensual de{1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:239
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:308
 msgid "Unable to log on"
 msgstr "No se pudo iniciar sesión"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:328
 #, csharp-format
 msgid "Waiting for response {0} of {1}"
 msgstr "Esperando respuesta {0} de {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:355
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:769
 #, csharp-format
 msgid "Uploading picture \"{0}\""
 msgstr "Cargando foto «{0}»"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:378
 #, csharp-format
 msgid "Error Uploading To {0}: {1}"
 msgstr "Error al cargar en {0}: {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:465
 msgid "Unable to log on."
 msgstr "No se pudo iniciar sesión."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:466
 #, csharp-format
 msgid ""
 "F-Spot was unable to log on to {0}.  Make sure you have given the "
@@ -490,7 +481,7 @@ msgid "<b>Account</b>"
 msgstr "<b>Cuenta</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
@@ -500,11 +491,10 @@ msgid "<b>Photos</b>"
 msgstr "<b>Fotografías</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/ui/mail_dialog.ui.h:8
 msgid "<b>Style</b>"
 msgstr "<b>Estilo</b>"
 
@@ -513,9 +503,9 @@ msgid "<b>Viewing permissions</b>"
 msgstr "<b>Permisos de visionado</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
 msgid "Export"
 msgstr "Exportar"
@@ -559,15 +549,15 @@ msgid "Visible to Friends"
 msgstr "Visible para mis amigos"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
 msgid "_Export tags"
 msgstr "_Exportar etiquetas"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:18
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
 msgid "_Resize to: "
 msgstr "_Redimensionar a: "
 
@@ -576,10 +566,10 @@ msgid "_View photos in browser when done uploading"
 msgstr "_Ver las fotos en un navegador cuando se terminen de subir"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
 msgid "pixels"
 msgstr "píxeles"
 
@@ -587,150 +577,146 @@ msgstr "píxeles"
 msgid "F_older..."
 msgstr "Ca_rpeta…"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:117
 msgid "Select Export Folder"
 msgstr "Seleccione una carpeta para exportar"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:169
 msgid "Building Gallery"
 msgstr "Construyendo galería"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:206
 #, csharp-format
 msgid "Exporting \"{0}\"..."
 msgstr "Exportando «{0}»…"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:213
 #, csharp-format
 msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
 msgstr "Error al copiar «{0}» a la galería: {2}{1}"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:239
 #, csharp-format
 msgid "Transferring to \"{0}\""
 msgstr "Transfiriendo a «{0}»"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:240
 msgid "Transferring..."
 msgstr "Transfiriendo…"
 
 #. No need to check result here as if result is not true, an Exception will be thrown before
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
 msgid "Export Complete."
 msgstr "Exportación completada."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:247
 msgid "Exporting Photos Completed."
 msgstr "Exportación de fotografías completada."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:312
 msgid "Exporting Photos"
 msgstr "Exportando fotos"
 
 #. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:716
 msgid "Light"
 msgstr "Luminoso"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
 msgid "Dark"
 msgstr "Oscuro"
 
 #. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:897
 msgid "Prev"
 msgstr "Anterior"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:899
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
 msgid "Index"
 msgstr "Índice"
 
 #. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
-#: ../src/MainWindow.cs:348 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:902
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1074
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1114
+#: ../src/MainWindow.cs:349 ../src/Widgets/Sidebar.cs:56
 msgid "Tags"
 msgstr "Etiquetas"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:905
 #: ../src/ItemAction.cs:102
 msgid "Next"
 msgstr "Siguiente"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1009
 msgid "Gallery generated by"
 msgstr "Galería generada por"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1049
 msgid "Show Styles"
 msgstr "Mostrar estilos"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
 msgid "Hide Styles"
 msgstr "Ocultar estilos"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
-#: ../src/ui/main_window.ui.h:25
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1085
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1086
+#: ../src/ui/main_window.ui.h:24
 msgid "Tags: "
 msgstr "Etiquetas: "
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1350
 msgid "Page:"
 msgstr "Página:"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
-msgid "\n"
-msgstr "\n"
-
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
 msgid "<b>Destination</b>"
 msgstr "<b>Destino</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:2
 msgid "<b>Export Method</b>"
 msgstr "<b>Método de exportación</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
 msgid "Create _gallery using \"Original\""
 msgstr "Crear una _galería usando «Original»"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
 msgid "Create standalone _web gallery"
 msgstr "Crear una galería _web autónoma"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
 msgid "D_escription:"
 msgstr "D_escripción:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
 msgid "Export _tags"
 msgstr "Exportar e_tiquetas"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
 msgid "Export tag _icons"
 msgstr "Exportar _iconos de etiquetas"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
 msgid "Folder Export"
 msgstr "Exportar carpeta"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
 msgid "G_allery Name:"
 msgstr "Nombre de la _galería:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
 msgid "Open _destination when done exporting"
 msgstr "Abrir el _destino cuando se termine de exportar"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
 msgid "_Folder:"
 msgstr "_Carpeta:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:19
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
 msgid "_Save the files only"
 msgstr "_Guardar sólo estos archivos"
 
@@ -742,7 +728,7 @@ msgstr "Excepción no manipulada"
 msgid "Web _Gallery..."
 msgstr "Web _Gallery…"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:54
 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"
@@ -750,32 +736,32 @@ msgstr ""
 "No se puede conectar con Gallery para la que se desconoce la versión.\n"
 "Consulte que tiene el complemento Remote 1.0.8 o posterior"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:391
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
 msgid "Invalid URL"
 msgstr "URL no válida"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:393
 msgid "The gallery URL entry does not appear to be a valid URL"
 msgstr "El URL de la galería no parece ser un URL válido"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:402
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:440
-msgid "Error while connecting to Gallery"
-msgstr "Error al conectar con Gallery"
-
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
+msgid "Error while connecting to Gallery"
+msgstr "Error al conectar con Gallery"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:404
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:431
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:442
 #, csharp-format
 msgid "The following error was encountered while attempting to log in: {0}"
 msgstr "Se encontró el siguiente error al intentar iniciar sesión: {0}"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:417
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
 msgid "A Gallery with this name already exists"
 msgstr "Ya existe una galería con este nombre"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:419
 #, csharp-format
 msgid ""
 "There is already a Gallery with the same name in your registered Galleries. "
@@ -784,15 +770,15 @@ msgstr ""
 "Ya existe una galería con el mismo nombre en sus galerías registradas. Elija "
 "un nombre único."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:529
 msgid "(TopLevel)"
 msgstr "(Nivel superior)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:590
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
 msgid "Invalid Gallery name"
 msgstr "Nombre de galería no válido"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:592
 msgid ""
 "The gallery name contains invalid characters.\n"
 "Only letters, numbers, - and _ are allowed"
@@ -800,32 +786,32 @@ msgstr ""
 "El nombre de la galería contiene caracteres no válidos.\n"
 "Sólo se permiten letras, nombres, «-» y «_»"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:796
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:788
 #, csharp-format
 msgid "Error uploading picture \"{0}\" to Gallery: {1}"
 msgstr "Error al subir la imagen «{0}» a Gallery: {1}"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:816
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:714
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:614
 msgid "(No Gallery)"
 msgstr "(No hay ninguna galería)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:908
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:836
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:710
 msgid "(Not Connected)"
 msgstr "(Desconectado)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:909
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:837
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:711
 msgid "(No Albums)"
 msgstr "(No hay álbumes)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:961
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:902
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:752
 msgid "No account selected"
 msgstr "No se seleccionó ninguna cuenta"
 
@@ -845,86 +831,86 @@ msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
 msgstr ""
 "<span weight='bold' size='larger'>Error al conectar con la Gallery</span>\n"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
 msgid "Export _titles and comments"
 msgstr "Exportar _títulos y comentarios"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
 msgid "Open _album in browser when done uploading"
 msgstr "Abrir el _álbum en el navegador cuando se termine de subir"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
 msgid "Please verify that the settings for this gallery are correct."
 msgstr "Compruebe que los ajustes para esta galería son correctos."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
 msgid "U_RL:"
 msgstr "U_RL:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
 msgid "_Album Name:"
 msgstr "Nombre del _álbum:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
 msgid "_Description:"
 msgstr "_Descripción:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
 msgid "_Export to Album:"
 msgstr "_Exportar a un álbum:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
 msgid "_Gallery Name:"
 msgstr "Nombre de la _Galería:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
 msgid "_Gallery:"
 msgstr "_Galería:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
 msgid "_Parent Album:"
 msgstr "Álbum pa_dre:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
 msgid "_Password:"
 msgstr "Contrase_ña:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
 msgid "_Title:"
 msgstr "_Título:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
 msgid "_Username:"
 msgstr "_Usuario:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:363
 msgid "Error reading server response"
 msgstr "Error al leer la respuesta del servidor"
 
 #. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:375
 msgid "Server returned response without Gallery content"
 msgstr "El servidor devolvió una respuesta sin contenido de Gallery"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
 msgid "Error while creating new album"
 msgstr "Error al crear el álbum nuevo"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:713
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to perform the "
@@ -938,38 +924,38 @@ msgstr ""
 msgid "_PicasaWeb..."
 msgstr "_PicasaWeb…"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:444
 msgid "Error while creating Album"
 msgstr "Error al crear el álbum"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:445
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to create an album: {0}"
 msgstr "Se encontró el siguiente error al intentar crear un álbum: {0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:615
 #, csharp-format
 msgid "{0} Sent"
 msgstr "{0} enviadas"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:617
 #, csharp-format
 msgid "{0} of approx. {1}"
 msgstr "{0} de aproximadamente {1}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:683
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:583
 #, csharp-format
 msgid "Error Uploading To Gallery: {0}"
 msgstr "Error al subir a la galería: {0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:765
 #, csharp-format
 msgid "Available space: {0}, {1}% used out of {2}"
 msgstr "Espacio disponible: {0}, {1} usado de {2}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:878
 #, csharp-format
 msgid ""
 "The selected album has a limit of {0} pictures,\n"
@@ -999,20 +985,16 @@ msgstr ""
 "en el campo «Captcha». <i>Las letras no diferencian las mayúsculas</i>"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
 msgid "Public Album"
 msgstr "Álbum público"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
 msgid "_Album Title:"
 msgstr "Título del _álbum:"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
-msgid "_Autorotate"
-msgstr "_Autorrotar"
-
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
 msgid "_Captcha:"
 msgstr "«_Captcha»:"
 
@@ -1024,7 +1006,7 @@ msgstr "_SmugMug…"
 msgid "<b>SmugMug Export</b>"
 msgstr "<b>Exportar a SmugMug</b>"
 
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
 msgid "_Account:"
 msgstr "C_uenta:"
 
@@ -1090,30 +1072,26 @@ msgid "_Attach to exported photos:"
 msgstr "_Añadir a las fotos exportadas:"
 
 #: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
-msgid "<b>{0}</b>."
-msgstr "<b>{0}</b>."
-
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "A trust error occured while attempting to access"
 msgstr "Ocurrió un error al intentar acceder"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "Abort this session"
 msgstr "Abortar esta sesión"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
 msgid "Always trust this site's certificate"
 msgstr "Confiar siempre en el certificado de este sitio"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
 msgid "Do you wish to:"
 msgstr "Querría:"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
 msgid "Trust Error"
 msgstr "Error de confianza"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
 msgid "Trust the site's certificate this once"
 msgstr "Confiar en el certificado del sitio esta vez"
 
@@ -1121,12 +1099,12 @@ msgstr "Confiar en el certificado del sitio esta vez"
 msgid "Compressed fil_e..."
 msgstr "Archivo co_mprimido…"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:198
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../src/Widgets/EditorPage.cs:199
 msgid "No selection available"
 msgstr "No hay ninguna selección disponible"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:49
 msgid ""
 "This tool requires an active selection. Please select one or more pictures "
 "and try again"
@@ -1134,15 +1112,15 @@ msgstr ""
 "Ésta herramienta requiere una selección activa. Seleccione una región de la "
 "foto e intente la operación de nuevo."
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:64
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:65
 msgid "Select export folder"
 msgstr "Seleccione una carpeta para exportar"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:102
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:103
 msgid "Exporting files"
 msgstr "Exportando archivos"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:109
 #, csharp-format
 msgid "Preparing photo \"{0}\""
 msgstr "Preparando foto «{0}»"
@@ -1167,7 +1145,7 @@ msgstr "E_scalar:"
 msgid "Check for Duplicates..."
 msgstr "Buscar duplicados…"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:53
+#: ../extensions/Tools/HashJob/HashJob.cs:54
 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 "
@@ -1178,7 +1156,7 @@ msgstr ""
 "hace de forma predeterminada ya que consume mucho tiempo. Puede iniciar o "
 "parar este proceso de actualización usando este diálogo."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:59
+#: ../extensions/Tools/HashJob/HashJob.cs:60
 #, csharp-format
 msgid ""
 "You currently have {0} photos needing md5 calculation, and {1} pending jobs"
@@ -1186,15 +1164,15 @@ msgstr ""
 "Actualmente tiene {0} fotos que requieren calcular su MD5 y {1} trabajo "
 "pendiente"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
+#: ../extensions/Tools/HashJob/HashJob.cs:76 ../src/ui/main_window.ui.h:37
 msgid "_Close"
 msgstr "_Cerrar"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:102
+#: ../extensions/Tools/HashJob/HashJob.cs:103
 msgid "Processing images..."
 msgstr "Procesando imágenes…"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:108
+#: ../extensions/Tools/HashJob/HashJob.cs:109
 msgid "Stopped"
 msgstr "Detenido"
 
@@ -1230,16 +1208,16 @@ msgstr "Seleccionadas"
 msgid "Live Web Gallery"
 msgstr "Galería web en línea"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:90
 msgid "none"
 msgstr "ninguna"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:93
 #, csharp-format
 msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
 msgstr " Galería: {0}, Fotos: {1}, Último cliente: {3}"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:157
 msgid "Gallery is inactive"
 msgstr "La galería está inactiva"
 
@@ -1310,11 +1288,11 @@ msgstr "Vistas:"
 msgid "Merge Db"
 msgstr "Combinar base de datos"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:73
+#: ../extensions/Tools/MergeDb/MergeDb.cs:74
 msgid "Error opening the selected file"
 msgstr "Error al abrir el archivo seleccionado"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:74
+#: ../extensions/Tools/MergeDb/MergeDb.cs:75
 #, csharp-format
 msgid ""
 "The file you selected is not a valid or supported database.\n"
@@ -1410,7 +1388,7 @@ msgid "Configure Screensaver"
 msgstr "Configurar el salvapantallas"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
-#: ../src/UI.Dialog/DateRangeDialog.cs:129
+#: ../src/UI.Dialog/DateRangeDialog.cs:120
 msgid "All Images"
 msgstr "Todas las imágenes"
 
@@ -1627,25 +1605,12 @@ msgstr ""
 "o color personalizado puede ser útil al ver iconos u otros trabajos "
 "artísticos con partes transparentes."
 
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
-msgid "File not found"
-msgstr "No se encontró el archivo"
-
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Tipo de transformación desconocida %d"
-
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Falló la operación"
-
-#: ../src/Core/App.cs:274
+#: ../src/Core/App.cs:290
 #, csharp-format
 msgid "No photos matching {0} found"
 msgstr "No se encontraron fotos coincidentes con {0}"
 
-#: ../src/Core/App.cs:275
+#: ../src/Core/App.cs:291
 #, csharp-format
 msgid ""
 "The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1656,11 +1621,11 @@ msgstr ""
 "la etiqueta a algunas fotos o seleccionar una etiqueta distinta\n"
 "en el diálogo de preferencias de F-Spot."
 
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:295
 msgid "Search returned no results"
 msgstr "La búsqueda no devolvió ningún resultado"
 
-#: ../src/Core/App.cs:280
+#: ../src/Core/App.cs:296
 msgid ""
 "The tag F-Spot is looking for does not exist. Try\n"
 "selecting a different tag in the F-Spot preference\n"
@@ -1671,23 +1636,23 @@ msgstr ""
 "preferencias de F-Spot."
 
 #. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:350
+#: ../src/Core/Photo.cs:405
 msgid "Reparented"
 msgstr "Se ha cambiado el padre/la madre"
 
-#: ../src/Core/Photo.cs:367
+#: ../src/Core/Photo.cs:422
 #, csharp-format
 msgid "Modified"
 msgid_plural "Modified ({0})"
 msgstr[0] "Modificada"
 msgstr[1] "Modificada ({0})"
 
-#: ../src/Core/Photo.cs:390
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1}"
 msgstr "Modificada en {1}"
 
-#: ../src/Core/Photo.cs:390
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1} ({0})"
 msgstr "Modificada en {1} ({0})"
@@ -1772,11 +1737,6 @@ msgstr "Foco suave"
 msgid "Straighten"
 msgstr "Enderezar"
 
-#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
-#, csharp-format
-msgid "No way to save files of type \"{0}\""
-msgstr "No hay forma de guardar los archivos de tipo «{0}»"
-
 #: ../src/FSpot.addin.xml.h:1
 msgid "Copy Photo"
 msgstr "Copiar foto"
@@ -1789,17 +1749,17 @@ msgstr "Exportar a"
 msgid "Open _With"
 msgstr "Abrir _con"
 
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
 msgid "Rem_ove Tag"
 msgstr "Q_uitar etiqueta"
 
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:24
-#: ../src/SingleView.cs:423 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:5 ../src/SingleView.cs:427
+#: ../src/ui/main_window.ui.h:16
 msgid "Rotate _Left"
 msgstr "Rotar a la _izquierda"
 
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:25
-#: ../src/SingleView.cs:424 ../src/ui/main_window.ui.h:18
+#: ../src/FSpot.addin.xml.h:6 ../src/SingleView.cs:428
+#: ../src/ui/main_window.ui.h:17
 msgid "Rotate _Right"
 msgstr "Rotar a la _derecha"
 
@@ -1807,11 +1767,11 @@ msgstr "Rotar a la _derecha"
 msgid "Tools"
 msgstr "Herramientas"
 
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:41
 msgid "_Delete From Drive"
 msgstr "_Eliminar de la unidad"
 
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:60
 msgid "_Remove From Catalog"
 msgstr "_Quitar del catálogo"
 
@@ -1820,263 +1780,80 @@ msgid "<b>Co_rrections</b>"
 msgstr "<b>Cor_recciones</b>"
 
 #: ../src/f-spot.glade.h:2
-msgid "<b>Image Interpolation</b>"
-msgstr "<b>Interpolación de imagen</b>"
-
-#: ../src/f-spot.glade.h:3
-msgid "<b>Transparent Parts</b>"
-msgstr "<b>Partes transparentes</b>"
-
-#: ../src/f-spot.glade.h:4
-msgid "<b>View all pictures imported</b>"
-msgstr "<b>Ver todas las imágenes importadas</b>"
-
-#: ../src/f-spot.glade.h:5
 msgid "<b>_White Balance</b>"
 msgstr "<b>Balance de _blancos</b>"
 
-#: ../src/f-spot.glade.h:6
-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>Activar esto para permitir interpolación en las imágenes "
-"ampliadas. No debería desactivar esto para ver fotos, pero desactivar la "
-"interpolación podría ser útil en el diseño de iconos.</i></small>"
-
-#: ../src/f-spot.glade.h:7
-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>Puede elegir cómo mostrar partes transparentes en las imágenes. "
-"Esta opción no tiene efecto en las fotos, pero establecer esto como un "
-"patrón de cuadros o color personalizado puede ser útil al ver iconos u otros "
-"trabajos artísticos con partes transparentes.</i></small>"
-
-#: ../src/f-spot.glade.h:8
-msgid "As _background"
-msgstr "Como _fondo de pantalla"
-
-#: ../src/f-spot.glade.h:9
-msgid "As _custom color: "
-msgstr "Como _color personalizado: "
-
-#: ../src/f-spot.glade.h:10
-msgid "As check _pattern"
-msgstr "Como _patrón de cuadros"
-
-#: ../src/f-spot.glade.h:11
+#: ../src/f-spot.glade.h:3
 msgid "C_ontrast:"
 msgstr "C_ontraste:"
 
-#: ../src/f-spot.glade.h:12
-msgid "C_reate"
-msgstr "C_rear"
-
-#: ../src/f-spot.glade.h:13
-msgid "Create _icon for this tag when first used"
-msgstr "Crear _icono para esta etiqueta al usarla por primera vez"
-
-#: ../src/f-spot.glade.h:14
-msgid "Display File _Names"
-msgstr "Mostrar _nombres de archivo"
-
-#: ../src/f-spot.glade.h:15
-msgid "Display only those photos that were imported in specified Rolls."
-msgstr ""
-"Mostrar sólo aquellas fotos que se importaron en carretes especificados."
-
-#: ../src/f-spot.glade.h:16
-msgid "F-Spot View"
-msgstr "Vista F-Spot"
-
-#: ../src/f-spot.glade.h:17
-msgid "Filter on selected rolls"
-msgstr "Filtrar en los carretes seleccionados"
-
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:4
 msgid "Manage your custom selection ratios"
 msgstr "Gestionar sus tasas de selección personalizadas"
 
-#: ../src/f-spot.glade.h:19
-msgid "Number of photos in selected rolls:"
-msgstr "Número de fotografías en los carretes seleccionados:"
-
-#: ../src/f-spot.glade.h:20
-msgid "Open _Folder..."
-msgstr "Abrir _carpeta…"
-
-#: ../src/f-spot.glade.h:21 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
-msgid "P_arent Tag:"
-msgstr "Etiqueta _madre:"
-
-#: ../src/f-spot.glade.h:22
-msgid "Preferences"
-msgstr "Preferencias"
-
-#: ../src/f-spot.glade.h:23
-msgid "Repair"
-msgstr "Reparar"
-
-#: ../src/f-spot.glade.h:26
+#: ../src/f-spot.glade.h:5
 msgid "Select a Tag..."
 msgstr "Seleccionar una etiqueta…"
 
-#: ../src/f-spot.glade.h:27
+#: ../src/f-spot.glade.h:6
 msgid "Selection Constraints"
 msgstr "Selección de restricciones"
 
-#: ../src/f-spot.glade.h:28 ../src/ui/main_window.ui.h:22
-msgid "Set as _Background"
-msgstr "Establecer como _fondo de pantalla"
-
-#: ../src/f-spot.glade.h:29
-msgid "Show all photos."
-msgstr "Mostrar todas las fotos."
-
-#: ../src/f-spot.glade.h:30
-msgid "Show or hide the side pane"
-msgstr "Mostrar u ocultar el panel lateral"
-
-#: ../src/f-spot.glade.h:31
-msgid "Show or hide the toolbar"
-msgstr "Mostrar u ocultar la barra de herramientas"
-
-#: ../src/f-spot.glade.h:32
-msgid "Side _pane"
-msgstr "_Panel lateral"
-
 #. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:34
+#: ../src/f-spot.glade.h:8
 msgid "Te_mp:"
 msgstr "Te_mperatura:"
 
-#: ../src/f-spot.glade.h:35 ../src/ui/main_window.ui.h:29
-msgid "Zoom _in"
-msgstr "_Ampliar"
-
-#: ../src/f-spot.glade.h:36 ../src/ui/main_window.ui.h:30
-msgid "Zoom _out"
-msgstr "_Reducir"
-
-#: ../src/f-spot.glade.h:37 ../src/ui/main_window.ui.h:31
-msgid "Zoom in"
-msgstr "Ampliar"
-
-#: ../src/f-spot.glade.h:38 ../src/ui/main_window.ui.h:32
-msgid "Zoom out"
-msgstr "Reducir"
-
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:9
 msgid "_Brightness:"
 msgstr "_Brillo:"
 
-#: ../src/f-spot.glade.h:40 ../src/ui/main_window.ui.h:45
-msgid "_Edit"
-msgstr "_Editar"
-
-#: ../src/f-spot.glade.h:42
+#: ../src/f-spot.glade.h:10
 msgid "_Exposure:"
 msgstr "_Exposición:"
 
-#: ../src/f-spot.glade.h:43 ../src/ui/main_window.ui.h:49
-msgid "_Fullscreen"
-msgstr "_Pantalla completa"
-
-#: ../src/f-spot.glade.h:44 ../src/ui/main_window.ui.h:50
-msgid "_Help"
-msgstr "Ay_uda"
-
-#: ../src/f-spot.glade.h:45
+#: ../src/f-spot.glade.h:11
 msgid "_Hue:"
 msgstr "_Tono:"
 
-#: ../src/f-spot.glade.h:46
-msgid "_Interpolate image on zoom"
-msgstr "_Interpolar imagen al ampliar"
-
-#: ../src/f-spot.glade.h:47
-msgid "_New Window"
-msgstr "Ventana _nueva"
-
-#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:58
-msgid "_Photo"
-msgstr "_Foto"
-
-#: ../src/f-spot.glade.h:49
+#: ../src/f-spot.glade.h:12
 msgid "_Saturation:"
 msgstr "_Saturación:"
 
-#: ../src/f-spot.glade.h:50 ../src/ui/main_window.ui.h:69
-msgid "_Slideshow"
-msgstr "_Diapositivas"
-
-#: ../src/f-spot.glade.h:51 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
-msgid "_Tag Name:"
-msgstr "Nombre de la _etiqueta:"
-
-#: ../src/f-spot.glade.h:52
+#: ../src/f-spot.glade.h:13
 msgid "_Tint:"
 msgstr "Ma_tiz:"
 
-#: ../src/f-spot.glade.h:53
-msgid "_Toolbar"
-msgstr "Barra de _herramientas"
-
-#: ../src/f-spot.glade.h:54 ../src/ui/main_window.ui.h:77
-msgid "_View"
-msgstr "_Ver"
-
-#: ../src/f-spot.glade.h:55 ../src/Widgets/FindBar.cs:178
-#: ../src/Widgets/FindBar.cs:534
-msgid "and"
-msgstr "y"
-
-#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:57
-msgid ""
-"at\n"
-"after\n"
-"between"
-msgstr ""
-"en\n"
-"después de\n"
-"entre"
-
-#: ../src/FullScreenView.cs:59
+#: ../src/FullScreenView.cs:58
 msgid "Hide"
 msgstr "Ocultar"
 
-#: ../src/FullScreenView.cs:61
-msgid "Hide Toolbar"
+#: ../src/FullScreenView.cs:60
+msgid "Hide toolbar"
 msgstr "Ocultar barra de herramientas"
 
-#: ../src/FullScreenView.cs:67
+#: ../src/FullScreenView.cs:66
 msgid "Info"
 msgstr "Información"
 
-#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
-msgid "Image Information"
+#: ../src/FullScreenView.cs:68
+msgid "Image information"
 msgstr "Información de la imagen"
 
-#: ../src/FullScreenView.cs:74
+#: ../src/FullScreenView.cs:73
 msgid "Exit fullscreen"
 msgstr "Salir de pantalla completa"
 
-#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:313
-#: ../src/SingleView.cs:87
+#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:314
+#: ../src/SingleView.cs:91
 msgid "Slideshow"
 msgstr "Diapositivas"
 
-#: ../src/FullScreenView.cs:83
+#: ../src/FullScreenView.cs:82
 msgid "Start slideshow"
 msgstr "Comenzar a mostrar las diapositivas"
 
-#: ../src/FullScreenView.cs:129
+#: ../src/FullScreenView.cs:128
 msgid "Slide transition:"
 msgstr "Transición de la diapositiva: "
 
@@ -2088,179 +1865,16 @@ msgstr "Más fechas"
 msgid "More"
 msgstr "Más"
 
-#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:35
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:34
 msgid "_Clear Date Range"
 msgstr "_Limpiar el rango de fechas"
 
-#: ../src/Imaging/Exif.cs:229
-msgid "Image Directory"
-msgstr "Carpeta de imágenes"
-
-#: ../src/Imaging/Exif.cs:231
-msgid "Thumbnail Directory"
-msgstr "Carpeta de miniaturas"
-
-#: ../src/Imaging/Exif.cs:233
-msgid "Exif Directory"
-msgstr "Carpeta de datos EXIF"
-
-#: ../src/Imaging/Exif.cs:235
-msgid "GPS Directory"
-msgstr "Carpeta GPS"
-
-#: ../src/Imaging/Exif.cs:237
-msgid "InterOperability Directory"
-msgstr "Carpeta de interoperatibilidad"
-
-#: ../src/Imaging/Exif.cs:239
-msgid "Unknown Directory"
-msgstr "Carpeta desconocida"
-
-#: ../src/Imaging/ImageFile.cs:119
-msgid "Writing to this file format is not supported"
-msgstr "No se soporta la escritura en este formato de archivo"
-
-#: ../src/Imaging/IptcFile.cs:145
-msgid "IPTC Information Interchange Model (IIM) Version number"
-msgstr "Número de versión del modelo de intercambio de información (IIM) IPTC"
-
-#: ../src/Imaging/IptcFile.cs:147
-msgid "OSI Destination routing information"
-msgstr "Información de encaminado de destino OSI"
-
-#: ../src/Imaging/IptcFile.cs:149
-msgid "IPTC file format"
-msgstr "Formato de archivo IPTC"
-
-#: ../src/Imaging/IptcFile.cs:151
-msgid "Identifies the provider and product"
-msgstr "Identifica al proveedor y al producto"
-
-#: ../src/Imaging/IptcFile.cs:153
-msgid "A unique number identifying the envelope"
-msgstr "Un único número que identifique el sobre"
-
-#: ../src/Imaging/IptcFile.cs:155
-msgid "A unique number"
-msgstr "Un único número"
-
-#: ../src/Imaging/IptcFile.cs:157
-msgid ""
-"The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
-msgstr "La urgencia del sobre, entre 1 (muy urgente) y 9 (poco urgente)"
-
-#: ../src/Imaging/IptcFile.cs:159
-msgid "The year, month and day (CCYYMMDD) the service sent the material"
-msgstr "El año, mes y día (CCYYMMDD) en la que el servicio envió el material"
-
-#: ../src/Imaging/IptcFile.cs:161
-msgid "The hour, minute and second (HHMMSS) the service sent the material"
-msgstr ""
-"La hora, minuto y segundo (HHMMSS) en la que el servicio envió el material"
-
-#: ../src/Imaging/IptcFile.cs:163
-msgid "The character set designation"
-msgstr "La designación del conjunto de caracteres"
-
-#: ../src/Imaging/IptcFile.cs:165
-msgid "External globally unique object identifier"
-msgstr "Identificador global único de objetos externo"
-
-#: ../src/Imaging/IptcFile.cs:170
-msgid "Abstract Relationship Method (ARM) identifier"
-msgstr "Identificador del método de relación abstracto (ARM)"
-
-#: ../src/Imaging/IptcFile.cs:172
-msgid "Abstract Relationship Method (ARM) version number."
-msgstr "Número de versión del método de relación abstracto (ARM)."
-
-#: ../src/Imaging/IptcFile.cs:175
-msgid "Number identifying the IIM version this application record uses"
-msgstr ""
-"Número identificando la versión IIM que usa el registro de esta aplicación"
-
-#: ../src/Imaging/IptcFile.cs:177
-msgid "Object type reference"
-msgstr "Referencia al tipo del objeto"
-
-#: ../src/Imaging/IptcFile.cs:182
-msgid "Object attribute reference"
-msgstr "Referencia al atributo del objeto"
-
-#: ../src/Imaging/IptcFile.cs:188 ../src/Imaging/IptcFile.cs:192
-msgid "Object name"
-msgstr "Nombre del objeto"
-
-#: ../src/Imaging/IptcFile.cs:190
-msgid "Status of the objectdata according to the provider"
-msgstr "Estado de los datos del objeto según el proveedor"
-
-#: ../src/Imaging/IptcFile.cs:194
-msgid "Location within a city or area where the object originates"
-msgstr "Lugar dentro de una ciudad o área donde el objeto se origina"
-
-#: ../src/Imaging/IptcFile.cs:197
-msgid "Name of the city the content is focussing on"
-msgstr "Nombre de la ciudad donde está el foco del contenido"
-
-#: ../src/Imaging/IptcFile.cs:200
-msgid "Copyright information for"
-msgstr "Información de Copyright para"
-
-#: ../src/Imaging/IptcFile.cs:203
-msgid "Full name of the country of the focus of the content"
-msgstr "Nombre completo del país donde está el foco del contenido"
-
-#: ../src/Imaging/IptcFile.cs:206
-msgid ""
-"Two or three letter ISO3166 code of the country of the focus of the content"
-msgstr "Código ISO3166 de dos o tres letras del país del foco del contenido"
-
-#: ../src/Imaging/IptcFile.cs:209
-msgid "Creator of the content"
-msgstr "Creador del contenido"
-
-#: ../src/Imaging/IptcFile.cs:212
-msgid "Provider of the object"
-msgstr "Proveedor del objeto"
-
-#: ../src/Imaging/IptcFile.cs:215
-msgid "The title of the author or creator"
-msgstr "El título del autor o creador"
-
-#: ../src/Imaging/IptcFile.cs:218
-msgid ""
-"The person involved in writing, editing or correcting the object data or "
-"caption/abstract"
-msgstr ""
-"La persona involucrada en la escritura, edición o corrección del dato objeto "
-"o la anotación/resumen"
-
-#: ../src/Imaging/IptcFile.cs:222
-msgid "Headline of the content"
-msgstr "Cabecera del contenido"
-
-#: ../src/Imaging/IptcFile.cs:225
-msgid ""
-"Instructions from the creator to the receiver not covered by other fields"
-msgstr ""
-"Instrucciones del creador para el receptor que no están cubiertas por otros "
-"campos"
-
-#: ../src/Imaging/IptcFile.cs:228
-msgid "Intellectual genre of the object"
-msgstr "Género intelectual del objeto"
-
-#: ../src/Imaging/IptcFile.cs:241
-msgid "Unknown IIM DataSet"
-msgstr "Conjunto de datos IIM desconocido"
-
-#: ../src/Import/ImportController.cs:406 ../src/Import/ImportController.cs:408
-#: ../src/XmpTagsImporter.cs:89
+#: ../src/Import/ImportController.cs:468 ../src/Import/ImportController.cs:470
+#: ../src/Import/MetadataImporter.cs:50
 msgid "Imported Tags"
 msgstr "Etiquetas importadas"
 
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:280 ../src/SingleView.cs:70
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:281 ../src/SingleView.cs:74
 msgid "Rotate Left"
 msgstr "Rotar a la izquierda"
 
@@ -2268,7 +1882,7 @@ msgstr "Rotar a la izquierda"
 msgid "Rotate picture left"
 msgstr "Rotar la fotografía a la izquierda"
 
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:284 ../src/SingleView.cs:75
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:285 ../src/SingleView.cs:79
 msgid "Rotate Right"
 msgstr "Rotar a la derecha"
 
@@ -2288,68 +1902,77 @@ msgstr "Anterior"
 msgid "Previous picture"
 msgstr "Anterior fotografía"
 
-#: ../src/MainWindow.cs:273 ../src/UI.Dialog/ImportDialog.cs:171
-#: ../src/ui/import.ui.h:4
+#: ../src/Jobs/SyncMetadataJob.cs:73
+#, csharp-format
+msgid ""
+"Metadata of file {0} may be corrupt, refusing to write to it, falling back "
+"to XMP sidecar."
+msgstr ""
+"Los metadatos del archivo {0} pueden estar corruptos, se rechazó escribir en "
+"él, volviendo al archivo sidecar XMP."
+
+#: ../src/MainWindow.cs:274 ../src/UI.Dialog/ImportDialog.cs:195
+#: ../src/ui/import.ui.h:3
 msgid "Import"
 msgstr "Importar"
 
-#: ../src/MainWindow.cs:275
+#: ../src/MainWindow.cs:276
 msgid "Import new images"
 msgstr "Importar imágenes nuevas"
 
-#: ../src/MainWindow.cs:291 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:292 ../src/ui/main_window.ui.h:3
 msgid "Browse"
 msgstr "Examinar"
 
-#: ../src/MainWindow.cs:295
+#: ../src/MainWindow.cs:296
 msgid "Browse many photos simultaneously"
 msgstr "Examinar varias fotos simultáneamente"
 
-#: ../src/MainWindow.cs:299
+#: ../src/MainWindow.cs:300
 msgid "Edit Image"
 msgstr "Editar imagen"
 
-#: ../src/MainWindow.cs:303
+#: ../src/MainWindow.cs:304
 msgid "View and edit a photo"
 msgstr "Ver y editar una foto"
 
-#: ../src/MainWindow.cs:308 ../src/SingleView.cs:82
+#: ../src/MainWindow.cs:309 ../src/SingleView.cs:86
 msgid "Fullscreen"
 msgstr "Pantalla completa"
 
-#: ../src/MainWindow.cs:310 ../src/SingleView.cs:84
+#: ../src/MainWindow.cs:311 ../src/SingleView.cs:88
 msgid "View photos fullscreen"
 msgstr "Ver fotos en pantalla completa"
 
-#: ../src/MainWindow.cs:315 ../src/SingleView.cs:89
+#: ../src/MainWindow.cs:316 ../src/SingleView.cs:93
 msgid "View photos in a slideshow"
 msgstr "Ver fotos como diapositivas"
 
-#: ../src/MainWindow.cs:330
+#: ../src/MainWindow.cs:331
 msgid "Previous photo"
 msgstr "Foto anterior"
 
-#: ../src/MainWindow.cs:335
+#: ../src/MainWindow.cs:336
 msgid "Next photo"
 msgstr "Siguiente foto"
 
-#: ../src/MainWindow.cs:412
+#: ../src/MainWindow.cs:413
 msgid "Show _Find Bar"
 msgstr "Mostrar barra de _búsqueda"
 
-#: ../src/MainWindow.cs:415
+#: ../src/MainWindow.cs:416
 msgid "Hide _Find Bar"
 msgstr "Ocultar barra de _búsqueda"
 
 #. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1719
+#: ../src/MainWindow.cs:1724
 #, csharp-format
 msgid "Merge the selected tag"
 msgid_plural "Merge the {0} selected tags?"
 msgstr[0] "Combinar la etiqueta seleccionada"
 msgstr[1] "¿Combinar las {0} etiquetas seleccionadas?"
 
-#: ../src/MainWindow.cs:1746
+#: ../src/MainWindow.cs:1751
 msgid ""
 "This operation will merge the selected tags and any sub-tags into a single "
 "tag."
@@ -2357,57 +1980,57 @@ msgstr ""
 "Esta operación combinará las etiquetas seleccionadas y cualquier subetiqueta "
 "en una sola etiqueta."
 
-#: ../src/MainWindow.cs:1748
+#: ../src/MainWindow.cs:1753
 msgid "_Merge Tags"
 msgstr "_Combinar etiquetas"
 
-#: ../src/MainWindow.cs:1953
+#: ../src/MainWindow.cs:1958
 #, csharp-format
 msgid "{0} Photo out of {1}"
 msgid_plural "{0} Photos out of {1}"
 msgstr[0] "Fotografía {0} de {1}"
 msgstr[1] "Fotografía {0} de {1}"
 
-#: ../src/MainWindow.cs:1955 ../src/SingleView.cs:465
+#: ../src/MainWindow.cs:1960 ../src/SingleView.cs:469
 #, csharp-format
 msgid "{0} Photo"
 msgid_plural "{0} Photos"
 msgstr[0] "{0} foto"
 msgstr[1] "{0} fotos"
 
-#: ../src/MainWindow.cs:1958
+#: ../src/MainWindow.cs:1963
 #, csharp-format
 msgid " ({0} selected)"
 msgid_plural " ({0} selected)"
 msgstr[0] " ({0} seleccionada)"
 msgstr[1] " ({0} seleccionadas)"
 
-#: ../src/MainWindow.cs:2039
+#: ../src/MainWindow.cs:2044
 msgid "_Ok"
 msgstr "_Aceptar"
 
-#: ../src/MainWindow.cs:2040
+#: ../src/MainWindow.cs:2045
 msgid "Error Deleting Picture"
 msgstr "Error al eliminar la fotografía"
 
-#: ../src/MainWindow.cs:2045
+#: ../src/MainWindow.cs:2050
 #, csharp-format
 msgid "No permission to delete the file:{1}{0}"
 msgstr "No tiene permisos para eliminar el archivo: {1}{0}"
 
-#: ../src/MainWindow.cs:2049
+#: ../src/MainWindow.cs:2054
 #, csharp-format
 msgid "An error of type {0} occurred while deleting the file:{2}{1}"
 msgstr "Ocurrió un error del tipo {0} al eliminar el archivo: {2}{1}"
 
-#: ../src/MainWindow.cs:2081
+#: ../src/MainWindow.cs:2086
 #, csharp-format
 msgid "Delete the selected photo permanently?"
 msgid_plural "Delete the {0} selected photos permanently?"
 msgstr[0] "¿Eliminar permanentemente la fotografía seleccionada?"
 msgstr[1] "¿Eliminar permanentemente las {0} fotografías seleccionadas?"
 
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:2090
 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."
@@ -2418,20 +2041,20 @@ msgstr[1] ""
 "Esto eliminará de su unidad todas las versiones de las fotografías "
 "seleccionadas."
 
-#: ../src/MainWindow.cs:2088
+#: ../src/MainWindow.cs:2093
 msgid "_Delete photo"
 msgid_plural "_Delete photos"
 msgstr[0] "_Eliminar la fotografía"
 msgstr[1] "_Eliminar las fotografías"
 
-#: ../src/MainWindow.cs:2124
+#: ../src/MainWindow.cs:2129
 #, csharp-format
 msgid "Remove the selected photo from F-Spot?"
 msgid_plural "Remove the {0} selected photos from F-Spot?"
 msgstr[0] "¿Quitar la fotografía seleccionada de F-Spot?"
 msgstr[1] "¿Quitar las {0} fotografías seleccionadas de F-Spot?"
 
-#: ../src/MainWindow.cs:2129
+#: ../src/MainWindow.cs:2134
 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 "
@@ -2441,27 +2064,27 @@ msgstr ""
 "etiquetas se perderá. Las fotos seguirán en su equipo y podrá volverlas a "
 "importar de nuevo en F-Spot."
 
-#: ../src/MainWindow.cs:2130
+#: ../src/MainWindow.cs:2135
 msgid "_Remove from Catalog"
 msgstr "_Quitar del catálogo"
 
-#: ../src/MainWindow.cs:2199
+#: ../src/MainWindow.cs:2209
 #, csharp-format
 msgid "Delete tag \"{0}\"?"
 msgstr "¿Eliminar etiqueta {0}?"
 
-#: ../src/MainWindow.cs:2201
+#: ../src/MainWindow.cs:2211
 #, csharp-format
 msgid "Delete the {0} selected tags?"
 msgstr "¿Eliminar las {0} etiquetas seleccionadas?"
 
-#: ../src/MainWindow.cs:2206
+#: ../src/MainWindow.cs:2216
 msgid "photo"
 msgid_plural "photos"
 msgstr[0] "foto"
 msgstr[1] "fotos"
 
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2218
 #, csharp-format
 msgid "If you delete this tag, the association with {0} {1} will be lost."
 msgid_plural ""
@@ -2469,18 +2092,18 @@ msgid_plural ""
 msgstr[0] "Si borra esta etiqueta se perderá la asociación {0} {1}."
 msgstr[1] "Si borra estas etiquetas se perderá la asociación {0} {1}."
 
-#: ../src/MainWindow.cs:2213
+#: ../src/MainWindow.cs:2223
 msgid "_Delete tag"
 msgid_plural "_Delete tags"
 msgstr[0] "_Eliminar etiqueta"
 msgstr[1] "_Eliminar etiquetas"
 
 #. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2227
+#: ../src/MainWindow.cs:2237
 msgid "Tag is not empty"
 msgstr "La etiqueta no está vacía"
 
-#: ../src/MainWindow.cs:2228
+#: ../src/MainWindow.cs:2238
 #, csharp-format
 msgid ""
 "Can not delete tags that have tags within them.  Please delete tags under "
@@ -2489,39 +2112,39 @@ msgstr ""
 "No se pueden eliminar etiquetas que tengan etiquetas dentro de ellas. Borre "
 "antes las etiquetas de «{0}»"
 
-#: ../src/MainWindow.cs:2659
+#: ../src/MainWindow.cs:2678
 msgid "Rotate selected photo left"
 msgid_plural "Rotate selected photos left"
 msgstr[0] "Rotar la fotografía seleccionada a la izquierda"
 msgstr[1] "Rotar las fotografías seleccionadas a la izquierda"
 
-#: ../src/MainWindow.cs:2672
+#: ../src/MainWindow.cs:2691
 msgid "Rotate selected photo right"
 msgid_plural "Rotate selected photos right"
 msgstr[0] "Rotar la fotografía seleccionada a la derecha"
 msgstr[1] "Rotar las fotografías seleccionadas a la derecha"
 
-#: ../src/MainWindow.cs:2683
+#: ../src/MainWindow.cs:2702
 #, csharp-format
 msgid "Find _Selected Tag"
 msgid_plural "Find _Selected Tags"
 msgstr[0] "Encontrar la etiqueta _seleccionada"
 msgstr[1] "Encontrar las etiquetas _seleccionadas"
 
-#: ../src/MainWindow.cs:2687
+#: ../src/MainWindow.cs:2706
 #, csharp-format
 msgid "Find Selected Tag _With"
 msgid_plural "Find Selected Tags _With"
 msgstr[0] "Encontrar la etiqueta seleccionada c_on"
 msgstr[1] "Encontrar las etiquetas seleccionadas c_on"
 
-#: ../src/MainWindow.cs:2728
+#: ../src/MainWindow.cs:2747
 msgid "Create New Version?"
 msgid_plural "Create New Versions?"
 msgstr[0] "¿Crear una nueva versión?"
 msgstr[1] "¿Crear nuevas versiones?"
 
-#: ../src/MainWindow.cs:2730
+#: ../src/MainWindow.cs:2749
 #, csharp-format
 msgid ""
 "Before launching {1}, should F-Spot create a new version of the selected "
@@ -2536,121 +2159,11 @@ msgstr[1] ""
 "Antes de lanzar {1}, ¿debe F-Spot crear versiones nuevas de las fotos "
 "seleccionadas para preservar los originales?"
 
-#: ../src/MainWindow.cs:2752
+#: ../src/MainWindow.cs:2771
 msgid "XCF version"
 msgstr "Versión XCF"
 
-#: ../src/MetadataStore.cs:19
-msgid "Creator"
-msgstr "Creador"
-
-#: ../src/MetadataStore.cs:20
-msgid "Title"
-msgstr "Título"
-
-#: ../src/MetadataStore.cs:21
-msgid "Copyright"
-msgstr "Copyright"
-
-#: ../src/MetadataStore.cs:22
-msgid "Subject and Keywords"
-msgstr "Asunto y palabras clave"
-
-#: ../src/MetadataStore.cs:23
-msgid "Compression"
-msgstr "Compresión"
-
-#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
-#. "when Planar Configuration=1, this implies that all components must have
-#. the same BitsPerSample value; when Planar Configuration=2, different
-#. components could have different bit depths."
-#: ../src/MetadataStore.cs:29
-msgid "Planar Configuration"
-msgstr "Configuración planar"
-
-#: ../src/MetadataStore.cs:31
-msgid "Orientation"
-msgstr "Orientación"
-
-#: ../src/MetadataStore.cs:33
-msgid "Photometric Interpretation"
-msgstr "Interpretación fotométrica"
-
-#: ../src/MetadataStore.cs:35
-msgid "Resolution Unit"
-msgstr "Unidad de resolución"
-
-#: ../src/MetadataStore.cs:37
-msgid "Exposure Program"
-msgstr "Programa de exposición"
-
-#: ../src/MetadataStore.cs:39
-msgid "Metering Mode"
-msgstr "Modo de medida"
-
-#: ../src/MetadataStore.cs:41
-msgid "Exposure Mode"
-msgstr "Modo de exposición"
-
-#: ../src/MetadataStore.cs:43
-msgid "Custom Rendered"
-msgstr "Renderizado personalizado"
-
-#: ../src/MetadataStore.cs:45
-msgid "Components Configuration"
-msgstr "Configuración de componentes"
-
-#: ../src/MetadataStore.cs:47
-msgid "Light Source"
-msgstr "Fuente de luz"
-
-#: ../src/MetadataStore.cs:49
-msgid "Sensing Method"
-msgstr "Método de sensibilidad"
-
-#: ../src/MetadataStore.cs:51
-msgid "Color Space"
-msgstr "Espacio de color"
-
-#: ../src/MetadataStore.cs:53
-msgid "White Balance"
-msgstr "Balance de blancos"
-
-#: ../src/MetadataStore.cs:55
-msgid "Focal Plane Resolution Unit"
-msgstr "Unidad de resolución del plano focal"
-
-#: ../src/MetadataStore.cs:57
-msgid "File Source Type"
-msgstr "Tipo de origen de archivo"
-
-#: ../src/MetadataStore.cs:59
-msgid "Scene Capture Type"
-msgstr "Tipo de captura de la escena"
-
-#. Translators: Gain Control is the label for the exif:GainControl tag
-#. "This tag indicates the degree of overall image gain adjustment."
-#: ../src/MetadataStore.cs:63
-msgid "Gain Control"
-msgstr "Control de ganancia"
-
-#: ../src/MetadataStore.cs:65
-msgid "Contrast"
-msgstr "Contraste"
-
-#: ../src/MetadataStore.cs:67
-msgid "Saturation"
-msgstr "Saturación"
-
-#: ../src/MetadataStore.cs:69
-msgid "Sharpness"
-msgstr "Enfoque"
-
-#: ../src/MetadataStore.cs:71
-msgid "Scene Type"
-msgstr "Tipo de escena"
-
-#: ../src/PhotoStore.cs:166 ../src/ui/mail_dialog.ui.h:19
+#: ../src/PhotoStore.cs:165 ../src/ui/mail_dialog.ui.h:17
 msgid "Original"
 msgstr "Original"
 
@@ -2660,45 +2173,45 @@ msgstr "Original"
 msgid "(No Tags)"
 msgstr "(No hay etiquetas)"
 
-#: ../src/PhotoVersionCommands.cs:58
+#: ../src/PhotoVersionCommands.cs:59
 msgid "Create New Version"
 msgstr "Crear una nueva versión"
 
-#: ../src/PhotoVersionCommands.cs:59
+#: ../src/PhotoVersionCommands.cs:60
 msgid "Name:"
 msgstr "Nombre:"
 
-#: ../src/PhotoVersionCommands.cs:63
+#: ../src/PhotoVersionCommands.cs:64
 msgid "Rename Version"
 msgstr "Renombrar la versión"
 
-#: ../src/PhotoVersionCommands.cs:64
+#: ../src/PhotoVersionCommands.cs:65
 msgid "New name:"
 msgstr "Nuevo nombre:"
 
-#: ../src/PhotoVersionCommands.cs:123
+#: ../src/PhotoVersionCommands.cs:125
 msgid "Delete"
 msgstr "Eliminar"
 
-#: ../src/PhotoVersionCommands.cs:124
+#: ../src/PhotoVersionCommands.cs:126
 #, csharp-format
 msgid "Really delete version \"{0}\"?"
 msgstr "¿Eliminar la versión «{0}»?"
 
-#: ../src/PhotoVersionCommands.cs:125
+#: ../src/PhotoVersionCommands.cs:127
 msgid "This removes the version and deletes the corresponding file from disk."
 msgstr "Esto quita la versión y elimina el archivo correspondiente del disco."
 
-#: ../src/PhotoVersionCommands.cs:170
+#: ../src/PhotoVersionCommands.cs:172
 msgid "De_tach"
 msgstr "De_sacoplar"
 
-#: ../src/PhotoVersionCommands.cs:171
+#: ../src/PhotoVersionCommands.cs:173
 #, csharp-format
 msgid "Really detach version \"{0}\" from \"{1}\"?"
 msgstr "¿Desacoplar la versión «{0}» de «{1}»?"
 
-#: ../src/PhotoVersionCommands.cs:172
+#: ../src/PhotoVersionCommands.cs:174
 msgid ""
 "This makes the version appear as a separate photo in the library. To undo, "
 "drag the new photo back to its parent."
@@ -2706,19 +2219,18 @@ msgstr ""
 "Esto hace que la versión aparezca como una foto separada en la biblioteca. "
 "Para deshacerlo, arrastre de nuevo la foto nueva en su padre."
 
-#: ../src/PhotoVersionCommands.cs:194
+#: ../src/PhotoVersionCommands.cs:196
 msgid "Re_parent"
 msgstr "Cambiar pa_dre"
 
-#: ../src/PhotoVersionCommands.cs:195
+#: ../src/PhotoVersionCommands.cs:197
 #, csharp-format
-#| msgid "Really delete version \"{0}\"?"
 msgid "Really reparent \"{0}\" as version of \"{1}\"?"
 msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
 msgstr[0] "¿Quiere cambiar el padre de «{0}» como una versión de «{1}»?"
 msgstr[1] "¿Quiere cambiar el padre de «{2}» fotos como una versión de «{1}»?"
 
-#: ../src/PhotoVersionCommands.cs:198
+#: ../src/PhotoVersionCommands.cs:200
 msgid ""
 "This makes the photos appear as a single one in the library. The versions "
 "can be detached using the Photo menu."
@@ -2726,25 +2238,24 @@ msgstr ""
 "Esto hace que las fotos aparezcan como una sola en la biblioteca. Las "
 "versiones se pueden desacoplar usando el menú «Foto»."
 
-#: ../src/PhotoVersionCommands.cs:238
+#: ../src/PhotoVersionCommands.cs:240
 #, csharp-format
 msgid "Received exception \"{0}\"."
 msgstr "Se recibió la excepción «{0}»."
 
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
-#: ../src/Widgets/InfoBox.cs:568
+#: ../src/PhotoVersionMenu.cs:54 ../src/Widgets/InfoBox.cs:470
 msgid "(No Edits)"
 msgstr "(No hay modificaciones)"
 
-#: ../src/PhotoView.cs:339
-msgid "Comment:"
-msgstr "Comentario:"
+#: ../src/PhotoView.cs:336
+msgid "Description:"
+msgstr "Descripción:"
 
-#: ../src/Preferences.cs:152
+#: ../src/Preferences.cs:157
 msgid "Photos"
 msgstr "Fotos"
 
-#: ../src/PrintOperation.cs:32
+#: ../src/PrintOperation.cs:33
 msgid "Image Settings"
 msgstr "Ajustes de la imagen"
 
@@ -2777,35 +2288,39 @@ msgstr "Refrescar la búsqueda"
 msgid "No matching photos found"
 msgstr "No se encontraron fotos coincidentes"
 
-#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
+#: ../src/RotateCommand.cs:74
 msgid "Unable to rotate this type of photo"
 msgstr "No se puede rotar este tipo de foto"
 
-#: ../src/RotateCommand.cs:122
+#: ../src/RotateCommand.cs:93
 msgid "Unable to rotate readonly file"
 msgstr "No se puede rotar un archivo de sólo lectura"
 
-#: ../src/RotateCommand.cs:185
+#: ../src/RotateCommand.cs:156
 msgid "Rotating photos"
 msgstr "Rotando fotos"
 
-#: ../src/RotateCommand.cs:196
+#: ../src/RotateCommand.cs:167
 #, csharp-format
 msgid "Rotating photo \"{0}\""
 msgstr "Rotando la foto «{0}»"
 
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:180
 msgid "Directory not found"
 msgstr "No se encontró el directorio"
 
-#: ../src/RotateCommand.cs:229
+#: ../src/RotateCommand.cs:182
+msgid "File not found"
+msgstr "No se encontró el archivo"
+
+#: ../src/RotateCommand.cs:200
 #, csharp-format
 msgid "Unable to rotate photo"
 msgid_plural "Unable to rotate {0} photos"
 msgstr[0] "No se pudo rotar la foto"
 msgstr[1] "No se pudieron rotar las {0} fotos"
 
-#: ../src/RotateCommand.cs:231
+#: ../src/RotateCommand.cs:202
 #, csharp-format
 msgid ""
 "The photo could not be rotated because it is on a read only file system or "
@@ -2820,97 +2335,97 @@ msgstr[1] ""
 "Las {0} fotos no se pudieron rotar porque están en un sistema de archivos de "
 "sólo lectura como un CDROM.  Compruebe los permisos y vuelva a intentarlo."
 
-#: ../src/RotateCommand.cs:258
+#: ../src/RotateCommand.cs:229
 #, csharp-format
 msgid "Received error \"{0}\" while attempting to rotate {1}"
 msgstr "Se recibió el error «{0}» al intentar rotar {1}"
 
-#: ../src/RotateCommand.cs:263
+#: ../src/RotateCommand.cs:234
 msgid "Error while rotating photo."
 msgstr "Error al rotar la foto."
 
-#: ../src/SendEmail.cs:218
+#: ../src/SendEmail.cs:211
 msgid "Preparing email"
 msgstr "Preparando correo"
 
-#: ../src/SendEmail.cs:270
+#: ../src/SendEmail.cs:255
 #, csharp-format
 msgid "Exporting picture \"{0}\""
 msgstr "Exportando imagen «{0}»"
 
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:274
 msgid "Error processing image"
 msgstr "Error al procesar la imagen"
 
-#: ../src/SendEmail.cs:293
+#: ../src/SendEmail.cs:275
 #, csharp-format
 msgid "An error occured while processing \"{0}\": {1}"
 msgstr "Ocurrió un error al procesar «{0}»: {1}"
 
 #. Send the mail :)
-#: ../src/SendEmail.cs:307
+#: ../src/SendEmail.cs:288
 msgid "My Photos"
 msgstr "Mis fotos"
 
-#: ../src/Sharpener.cs:72
+#: ../src/Sharpener.cs:73
 msgid "Error saving sharpened photo"
 msgstr "Error al guardar la foto enfocada"
 
-#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#: ../src/Sharpener.cs:74 ../src/UI.Dialog/EditExceptionDialog.cs:27
 #, csharp-format
 msgid "Received exception \"{0}\". Unable to save photo {1}"
 msgstr "Se recibió la excepción «{0}». No es posible guardar la imagen {1}"
 
-#: ../src/Sharpener.cs:102
+#: ../src/Sharpener.cs:103
 msgid "Sharpen"
 msgstr "Enfocar"
 
-#: ../src/Sharpener.cs:112
+#: ../src/Sharpener.cs:113
 msgid "Amount:"
 msgstr "Cantidad:"
 
-#: ../src/Sharpener.cs:113
+#: ../src/Sharpener.cs:114
 msgid "Radius:"
 msgstr "Radio:"
 
-#: ../src/Sharpener.cs:114
+#: ../src/Sharpener.cs:115
 msgid "Threshold:"
 msgstr "Umbral:"
 
-#: ../src/SingleView.cs:72
+#: ../src/SingleView.cs:76
 msgid "Rotate photo left"
 msgstr "Rotar la fotografía a la izquierda"
 
-#: ../src/SingleView.cs:77
+#: ../src/SingleView.cs:81
 msgid "Rotate photo right"
 msgstr "Rotar la fotografía a la derecha"
 
-#: ../src/SingleView.cs:114
+#: ../src/SingleView.cs:118
 msgid "Folder"
 msgstr "Carpeta"
 
-#: ../src/SingleView.cs:339
+#: ../src/SingleView.cs:343
 msgid "Open"
 msgstr "Abrir"
 
-#: ../src/SingleView.cs:342
+#: ../src/SingleView.cs:346
 msgid "Select Folder"
 msgstr "Seleccionar la carpeta"
 
-#: ../src/SingleView.cs:426
+#: ../src/SingleView.cs:430
 msgid "Set as Background"
 msgstr "Establecer como fondo"
 
-#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
+#: ../src/TagCommands.cs:116 ../src/TagSelectionWidget.cs:492
 #: ../src/UI.Dialog/EditTagDialog.cs:76
 msgid "This name is already in use"
 msgstr "Este nombre ya está siendo usado"
 
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:166
 msgid "Create New Tag"
 msgstr "Crear nueva etiqueta"
 
-#: ../src/TagCommands.cs:146
+#: ../src/TagCommands.cs:167
 msgid "Name of New Tag:"
 msgstr "Nombre de la etiqueta nueva:"
 
@@ -2985,32 +2500,32 @@ msgstr "Sin {0}"
 msgid "Drag tags here to search for them"
 msgstr "Arrastre etiquetas aquí para buscarlas"
 
-#: ../src/TagSelectionWidget.cs:490
+#: ../src/TagSelectionWidget.cs:491
 msgid "Error renaming tag"
 msgstr "Error al renombrar la etiqueta"
 
-#: ../src/TagStore.cs:204
+#: ../src/TagStore.cs:205
 msgid "Favorites"
 msgstr "Favoritos"
 
-#: ../src/TagStore.cs:209
+#: ../src/TagStore.cs:210
 msgid "Hidden"
 msgstr "Oculto"
 
-#: ../src/TagStore.cs:217
+#: ../src/TagStore.cs:218
 msgid "People"
 msgstr "Gente"
 
-#: ../src/TagStore.cs:222
+#: ../src/TagStore.cs:223
 msgid "Places"
 msgstr "Lugares"
 
-#: ../src/TagStore.cs:227
+#: ../src/TagStore.cs:228
 msgid "Events"
 msgstr "Acontecimientos"
 
 #. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
+#: ../src/TagStore.cs:241 ../src/Widgets/InfoBox.cs:344
 msgid "(None)"
 msgstr "(Ninguno)"
 
@@ -3043,19 +2558,19 @@ msgstr "Actualizando miniaturas"
 msgid "Updating picture \"{0}\""
 msgstr "Actualizando imagen «{0}»"
 
-#: ../src/UI.Dialog/AboutDialog.cs:94
+#: ../src/UI.Dialog/AboutDialog.cs:99
 msgid "Photo management for GNOME"
 msgstr "Gestión de fotografías para GNOME"
 
-#: ../src/UI.Dialog/AboutDialog.cs:95
+#: ../src/UI.Dialog/AboutDialog.cs:100
 msgid "Copyright © 2003-2010 Novell Inc."
 msgstr "Copyright © 2003-2010 Novell Inc."
 
-#: ../src/UI.Dialog/AboutDialog.cs:119
+#: ../src/UI.Dialog/AboutDialog.cs:124
 msgid "translator-credits"
 msgstr "Jorge González <jorgegonz at svn.gnome.org>, 2004-2010"
 
-#: ../src/UI.Dialog/AboutDialog.cs:124
+#: ../src/UI.Dialog/AboutDialog.cs:129
 msgid "F-Spot Website"
 msgstr "Página web de F-Spot"
 
@@ -3065,56 +2580,56 @@ msgstr "Página web de F-Spot"
 msgid "Shift all photos by {0}"
 msgstr "Desplazar todas las fotos {0}"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:99
+#: ../src/UI.Dialog/DateRangeDialog.cs:90
 msgid "Today"
 msgstr "Hoy"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:101
+#: ../src/UI.Dialog/DateRangeDialog.cs:92
 msgid "Yesterday"
 msgstr "Ayer"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:103
+#: ../src/UI.Dialog/DateRangeDialog.cs:94
 msgid "Last 7 days"
 msgstr "Últimos 7 días"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:105
+#: ../src/UI.Dialog/DateRangeDialog.cs:96
 msgid "Last 30 days"
 msgstr "Últimos 30 días"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:107
+#: ../src/UI.Dialog/DateRangeDialog.cs:98
 msgid "Last 90 days"
 msgstr "Últimos 90 días"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:109
+#: ../src/UI.Dialog/DateRangeDialog.cs:100
 msgid "Last 360 days"
 msgstr "Últimos 360 días"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:111
+#: ../src/UI.Dialog/DateRangeDialog.cs:102
 msgid "Current Week (Mon-Sun)"
 msgstr "Semana actual (lun-dom)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:113
+#: ../src/UI.Dialog/DateRangeDialog.cs:104
 msgid "Previous Week (Mon-Sun)"
 msgstr "Semana anterior (lun-dom)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:131
+#: ../src/UI.Dialog/DateRangeDialog.cs:122
 msgid "Customized Range"
 msgstr "Rango personalizado"
 
-#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+#: ../src/UI.Dialog/EditExceptionDialog.cs:40
 msgid "Error editing photo"
 msgstr "Error al editar la foto"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:42
+#: ../src/UI.Dialog/EditTagIconDialog.cs:44
 #, csharp-format
 msgid "Edit Icon for Tag {0}"
 msgstr "Editar el icono para la etiqueta {0}"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:64
+#: ../src/UI.Dialog/EditTagIconDialog.cs:66
 msgid "Select Photo from file"
 msgstr "Seleccionar foto desde archivo"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:86
+#: ../src/UI.Dialog/EditTagIconDialog.cs:88
 #, csharp-format
 msgid ""
 "\n"
@@ -3131,16 +2646,16 @@ msgstr ""
 " esta etiqueta. Etiquete la foto como «{0}» y vuelva aquí para usarla\n"
 " como icono."
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:164
+#: ../src/UI.Dialog/EditTagIconDialog.cs:166
 msgid "Unable to load image"
 msgstr "No se pudo cargar la imagen"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:165
+#: ../src/UI.Dialog/EditTagIconDialog.cs:167
 #, csharp-format
 msgid "Unable to load \"{0}\" as icon for the tag"
 msgstr "No se pudo cargar «{0}» como icono para la etiqueta"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:203
+#: ../src/UI.Dialog/EditTagIconDialog.cs:205
 #, csharp-format
 msgid "Photo {0} of {1}"
 msgstr "Fotografía {0} de {1}"
@@ -3158,53 +2673,66 @@ msgid "An unhandled exception was thrown: "
 msgstr "Se produjo una excepción no tratada: "
 
 #: ../src/UI.Dialog/ImportDialog.cs:15
-#| msgid "Open _Folder..."
 msgid "Choose Folder..."
 msgstr "Elegir carpeta…"
 
-#: ../src/UI.Dialog/ImportDialog.cs:124
-#| msgid "Import Source:"
+#: ../src/UI.Dialog/ImportDialog.cs:131
 msgid "Choose Import source..."
 msgstr "Elegir el origen de la importación…"
 
-#: ../src/UI.Dialog/ImportDialog.cs:136
+#: ../src/UI.Dialog/ImportDialog.cs:143
 msgid "(No Cameras Detected)"
 msgstr "(No se detectó ninguna cámara)"
 
-#: ../src/UI.Dialog/ImportDialog.cs:264
+#: ../src/UI.Dialog/ImportDialog.cs:178
+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 ""
+"Marcar esta casilla eliminará las fotos importadas de la cámara después de "
+"que la importación finalice correctamente.\n"
+"Generalmente se recomienda respaldar sus fotos antes de eliminarlas de la "
+"cámara. <b>Use esta opción bajo su propio riesgo.</b>"
+
+#: ../src/UI.Dialog/ImportDialog.cs:179
+msgid "Warning"
+msgstr "Advertencia"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
 #, csharp-format
-#| msgid "Importing {0} of {1}"
 msgid "Importing Photos: {0} of {1}..."
 msgstr "Importando fotos: {0} de {1}…"
 
-#: ../src/UI.Dialog/ImportDialog.cs:288
-#| msgid "Exporting Photos"
+#: ../src/UI.Dialog/ImportDialog.cs:312
 msgid "Importing photos..."
 msgstr "Importando fotos…"
 
 #. TODO: Using a GtkSpinner would be nicer here.
-#: ../src/UI.Dialog/ImportDialog.cs:295
+#: ../src/UI.Dialog/ImportDialog.cs:319
 msgid "Searching for photos... (You can already click Import to continue)"
 msgstr "Buscando fotos… (puede pulsar el botón Importar para continuar)"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:55
-#: ../src/UI.Dialog/PreferenceDialog.cs:78
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
+#: ../src/UI.Dialog/PreferenceDialog.cs:80
 msgid "None"
 msgstr "Ninguno"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:57
+#: ../src/UI.Dialog/PreferenceDialog.cs:59
 msgid "System profile"
 msgstr "Perfil del sistema"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:95
+#: ../src/UI.Dialog/PreferenceDialog.cs:97
 msgid "Standard theme"
 msgstr "Tema estándar"
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
 msgid "Error loading database."
 msgstr "Error al cargar la base de datos."
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:22
+#: ../src/UI.Dialog/RepairDbDialog.cs:23
 #, csharp-format
 msgid ""
 "F-Spot encountered an error while loading the photo database. The old "
@@ -3269,6 +2797,24 @@ msgstr "diferencia:"
 msgid "min. Starting at {0}"
 msgstr "min. Iniciando en {0}"
 
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
+msgid "C_reate"
+msgstr "C_rear"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:2
+msgid "Create _icon for this tag when first used"
+msgstr "Crear _icono para esta etiqueta al usarla por primera vez"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr "Etiqueta _madre:"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "Nombre de la _etiqueta:"
+
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
 msgid "<b>End Date</b>"
 msgstr "<b>Fecha de finalización</b>"
@@ -3294,18 +2840,14 @@ msgid "Set date range"
 msgstr "Establecer rango de fechas"
 
 #: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
-msgid "<small></small>"
-msgstr "<small></small>"
-
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit Tag"
 msgstr "Editar etiqueta"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit icon"
 msgstr "Editar el icono"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
 msgid "_Icon:"
 msgstr "_Icono:"
 
@@ -3337,9 +2879,43 @@ msgstr "Editar la etiqueta del icono"
 msgid "No _image"
 msgstr "Sin _imagen"
 
-#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:8
-msgid "Photo 0 of 0"
-msgstr "Fotografía 0 de 0"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:1
+msgid "<b>View all pictures imported</b>"
+msgstr "<b>Ver todas las imágenes importadas</b>"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:2
+msgid "Display only those photos that were imported in specified Rolls."
+msgstr ""
+"Mostrar sólo aquellas fotos que se importaron en carretes especificados."
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
+msgid "Filter on selected rolls"
+msgstr "Filtrar en los carretes seleccionados"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
+msgid "Number of photos in selected rolls:"
+msgstr "Número de fotografías en los carretes seleccionados:"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
+msgid "Show all photos."
+msgstr "Mostrar todas las fotos."
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
+msgid "after"
+msgstr "después de"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:534
+msgid "and"
+msgstr "y"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:8
+msgid "at"
+msgstr "el"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:9
+msgid "between"
+msgstr "entre"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:1
 msgid "Color profile for display:"
@@ -3366,18 +2942,26 @@ msgstr ""
 "<small>Hacerlos accesibles a otros programas de edición de imágenes.</small>"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:7
+msgid ""
+"Never modify image files.\n"
+"<small>Write XMP files next to the images instead.</small>"
+msgstr ""
+"No modificar nunca archivos de imágenes.\n"
+"<small>En su lugar, escribir archivos XMP junto a las imagenes.</small>"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
 msgid "Select A Folder"
 msgstr "Seleccione una carpeta"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:8
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
 msgid "Separately from the image files"
 msgstr "Separadamente de los archivos de imágenes"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:11
 msgid "Store tags and descriptions for photos:"
 msgstr "Almacenar etiquetas y descripciones para las fotos:"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:12
 msgid "When importing photos, copy them to:"
 msgstr "Al importar fotos copiarlas a:"
 
@@ -3393,27 +2977,45 @@ msgstr "<b>Mínima puntuación</b>"
 msgid "Set Rating Filter"
 msgstr "Establecer el filtro de puntuación"
 
+#: ../src/UI.Dialog/ui/RepairDialog.ui.h:1
+msgid "Repair"
+msgstr "Reparar"
+
 #: ../src/ui/import.ui.h:1
-msgid "Attach Tags:"
-msgstr "Adjuntar etiquetas:"
+#| msgid "Copy files to the Photos folder"
+msgid "C_opy files to the Photos folder"
+msgstr "C_opiar archivos a la carpeta Photos"
 
 #: ../src/ui/import.ui.h:2
-msgid "Copy files to the Photos folder"
-msgstr "Copiar archivos a la carpeta Photos"
-
-#: ../src/ui/import.ui.h:3
-msgid "Detect duplicates"
-msgstr "Detectar duplicados"
+#| msgid "Include subfolders"
+msgid "I_nclude subfolders"
+msgstr "I_ncluir subcarpetas"
 
 #. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:5
+#| msgid "Import from:"
+msgid "Import _from:"
+msgstr "Importar _de:"
+
 #: ../src/ui/import.ui.h:6
-#| msgid "Import roll"
-msgid "Import from:"
-msgstr "Importar de:"
+#| msgid "Attach tag:"
+msgid "_Attach tags:"
+msgstr "_Adjuntar etiqueta:"
 
 #: ../src/ui/import.ui.h:7
-msgid "Include subfolders"
-msgstr "Incluir subcarpetas"
+#| msgid "Detect duplicates"
+msgid "_Detect duplicates"
+msgstr "_Detectar duplicados"
+
+#: ../src/ui/import.ui.h:8
+#| msgid "Import"
+msgid "_Import"
+msgstr "_Importar"
+
+#: ../src/ui/import.ui.h:9
+#| msgid "Remove original files after import"
+msgid "_Remove original files after import"
+msgstr "_Eliminar los archivos originales después de importar"
 
 #: ../src/ui/mail_dialog.ui.h:1
 msgid "1024 px"
@@ -3439,69 +3041,61 @@ msgstr "800 px"
 msgid "<b>Size</b>"
 msgstr "<b>Tamaño</b>"
 
-#: ../src/ui/mail_dialog.ui.h:9
+#: ../src/ui/mail_dialog.ui.h:8
 msgid "<b>Summary</b>"
 msgstr "<b>Resumen</b>"
 
-#: ../src/ui/mail_dialog.ui.h:11
+#: ../src/ui/mail_dialog.ui.h:9
 msgid "Create Mail"
 msgstr "Crear correo"
 
-#: ../src/ui/mail_dialog.ui.h:12
+#: ../src/ui/mail_dialog.ui.h:10
 msgid "Create a mail with the selected photos (possibly resized) attached"
 msgstr ""
 "Crea un correo-e con las fotos seleccionadas (posiblemente redimensionadas) "
 "adjuntas"
 
-#: ../src/ui/mail_dialog.ui.h:13
+#: ../src/ui/mail_dialog.ui.h:11
 msgid "Do not send a mail"
 msgstr "No enviar un correo"
 
-#: ../src/ui/mail_dialog.ui.h:14
+#: ../src/ui/mail_dialog.ui.h:12
 msgid "Estimated new size"
 msgstr "Tamaño nuevo estimado"
 
-#: ../src/ui/mail_dialog.ui.h:15
+#: ../src/ui/mail_dialog.ui.h:13
 msgid "Extra large"
 msgstr "Enorme"
 
-#: ../src/ui/mail_dialog.ui.h:16
+#: ../src/ui/mail_dialog.ui.h:14
 msgid "Large"
 msgstr "Grande"
 
-#: ../src/ui/mail_dialog.ui.h:17
+#: ../src/ui/mail_dialog.ui.h:15
 msgid "Medium"
 msgstr "Medio"
 
-#: ../src/ui/mail_dialog.ui.h:18
+#: ../src/ui/mail_dialog.ui.h:16
 msgid "Number of pictures"
 msgstr "Número de imágenes"
 
-#: ../src/ui/mail_dialog.ui.h:20
+#: ../src/ui/mail_dialog.ui.h:18
 msgid "Original size (possible very large file size)"
 msgstr "Tamaño original (tamaño de archivo posiblemente muy grande)"
 
-#: ../src/ui/mail_dialog.ui.h:21
+#: ../src/ui/mail_dialog.ui.h:19
 msgid "Small"
 msgstr "Pequeño"
 
-#: ../src/ui/mail_dialog.ui.h:22
-msgid ""
-"Specify if an original size picture should be rotated or not. Smaller sizes "
-"are automatically rotated."
-msgstr ""
-"Especifique su un tamaño original de imagen debe rotarse o no. Los tamaños "
-"pequeños se rotan automáticamente."
-
-#: ../src/ui/mail_dialog.ui.h:23
+#: ../src/ui/mail_dialog.ui.h:20
 msgid "Tiny"
 msgstr "Diminuto"
 
-#: ../src/ui/mail_dialog.ui.h:24
+#: ../src/ui/mail_dialog.ui.h:21
 msgid "Total original size"
 msgstr "Tamaño total original"
 
-#: ../src/ui/mail_dialog.ui.h:25
+#: ../src/ui/mail_dialog.ui.h:22
 msgid "_Create Mail"
 msgstr "_Crear correo-e"
 
@@ -3541,199 +3135,317 @@ msgstr "Crear una _nueva versión…"
 msgid "De_tach Version"
 msgstr "De_sacoplar versión"
 
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:11
 msgid "Fin_d"
 msgstr "_Buscar"
 
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:12
 msgid "Manage _Extensions"
 msgstr "Gestionar e_xtensiones"
 
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:13
 msgid "Page Set_up..."
 msgstr "Con_figuración de página…"
 
-#: ../src/ui/main_window.ui.h:15
+#: ../src/ui/main_window.ui.h:14
 msgid "Re_fresh Thumbnail"
 msgstr "Act_ualizar miniaturas"
 
-#: ../src/ui/main_window.ui.h:19
+#: ../src/ui/main_window.ui.h:18
 msgid "Select _All"
 msgstr "Seleccionar _todo"
 
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:19
 msgid "Select _None"
 msgstr "Seleccionar _nada"
 
-#: ../src/ui/main_window.ui.h:21
+#: ../src/ui/main_window.ui.h:20
 msgid "Send by _Mail..."
 msgstr "Enviar por correo _electrónico…"
 
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:21 ../src/ui/single_view.ui.h:3
+msgid "Set as _Background"
+msgstr "Establecer como _fondo de pantalla"
+
+#: ../src/ui/main_window.ui.h:22
 msgid "Side_bar"
 msgstr "_Barra lateral"
 
-#: ../src/ui/main_window.ui.h:24
+#: ../src/ui/main_window.ui.h:23
 msgid "T_ags"
 msgstr "E_tiquetas"
 
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:25
 msgid "Thumbnail _elements"
 msgstr "_Elementos de miniaturas"
 
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:26
 msgid "Too_lbar"
 msgstr "Barra de _herramientas"
 
-#: ../src/ui/main_window.ui.h:28
+#: ../src/ui/main_window.ui.h:27
 msgid "View"
 msgstr "Ver"
 
-#: ../src/ui/main_window.ui.h:33
+#: ../src/ui/main_window.ui.h:28 ../src/ui/single_view.ui.h:7
+msgid "Zoom _in"
+msgstr "_Ampliar"
+
+#: ../src/ui/main_window.ui.h:29 ../src/ui/single_view.ui.h:8
+msgid "Zoom _out"
+msgstr "_Reducir"
+
+#: ../src/ui/main_window.ui.h:30 ../src/ui/single_view.ui.h:9
+msgid "Zoom in"
+msgstr "Ampliar"
+
+#: ../src/ui/main_window.ui.h:31 ../src/ui/single_view.ui.h:10
+msgid "Zoom out"
+msgstr "Reducir"
+
+#: ../src/ui/main_window.ui.h:32
 msgid "_Attach Tag"
 msgstr "_Adjuntar etiqueta"
 
-#: ../src/ui/main_window.ui.h:34
+#: ../src/ui/main_window.ui.h:33
 msgid "_Attach Tag to Selection"
 msgstr "_Adjuntar etiqueta a la selección"
 
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:35
 msgid "_Clear Rating Filter"
 msgstr "_Limpiar el filtro de puntuación"
 
-#: ../src/ui/main_window.ui.h:37
+#: ../src/ui/main_window.ui.h:36
 msgid "_Clear Roll Filter"
 msgstr "_Limpiar el filtro de carrete"
 
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:38
 msgid "_Components"
 msgstr "_Componentes"
 
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:39
 msgid "_Contents"
 msgstr "Índ_ice"
 
-#: ../src/ui/main_window.ui.h:41
+#: ../src/ui/main_window.ui.h:40
 msgid "_Dates"
 msgstr "_Fechas"
 
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:42
 msgid "_Delete Selected Tag"
 msgstr "_Eliminar la etiqueta seleccionada"
 
-#: ../src/ui/main_window.ui.h:44
+#: ../src/ui/main_window.ui.h:43
 msgid "_Delete Version"
 msgstr "_Eliminar la versión"
 
-#: ../src/ui/main_window.ui.h:46
+#: ../src/ui/main_window.ui.h:44 ../src/ui/single_view.ui.h:11
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../src/ui/main_window.ui.h:45
 msgid "_Edit Tag..."
 msgstr "_Editar etiqueta…"
 
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:46
 msgid "_Export to"
 msgstr "_Exportar a"
 
-#: ../src/ui/main_window.ui.h:48
+#: ../src/ui/main_window.ui.h:47
 msgid "_Filmstrip"
 msgstr "_Tira de imágenes"
 
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:48 ../src/ui/single_view.ui.h:13
+msgid "_Fullscreen"
+msgstr "_Pantalla completa"
+
+#: ../src/ui/main_window.ui.h:49 ../src/ui/single_view.ui.h:14
+msgid "_Help"
+msgstr "Ay_uda"
+
+#: ../src/ui/main_window.ui.h:50
 msgid "_Hidden"
 msgstr "_Oculto"
 
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:51
 msgid "_Import..."
 msgstr "_Importar…"
 
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:52
 msgid "_Invert Selection"
 msgstr "_Invertir selección"
 
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:53
 msgid "_Large"
 msgstr "_Grande"
 
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:54
 msgid "_Last Import Roll"
 msgstr "Ú_ltimo carrete importado"
 
-#: ../src/ui/main_window.ui.h:56
+#: ../src/ui/main_window.ui.h:55
 msgid "_Loupe"
 msgstr "_Lupa"
 
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:56
 msgid "_Medium"
 msgstr "_Medio"
 
-#: ../src/ui/main_window.ui.h:59
+#: ../src/ui/main_window.ui.h:57 ../src/ui/single_view.ui.h:15
+msgid "_Photo"
+msgstr "_Foto"
+
+#: ../src/ui/main_window.ui.h:58
 msgid "_Quit"
 msgstr "_Salir"
 
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:59
 msgid "_Ratings"
 msgstr "_Puntuaciones"
 
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:61
 msgid "_Remove Tag From Selection"
 msgstr "_Quitar la etiqueta de la selección"
 
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:62
 msgid "_Rename Version"
 msgstr "_Renombrar la versión"
 
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:63
 msgid "_Reverse Order"
 msgstr "_Invertir el orden"
 
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:64
 msgid "_Select Import Rolls..."
 msgstr "_Seleccionar carretes que importar…"
 
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:65
 msgid "_Set Date Range..."
 msgstr "E_stablecer rango de fechas…"
 
-#: ../src/ui/main_window.ui.h:67
+#: ../src/ui/main_window.ui.h:66
 msgid "_Set Rating filter..."
 msgstr "E_stablecer el filtro de puntuación…"
 
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:67
 msgid "_Sharpen..."
 msgstr "_Enfocar…"
 
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:68 ../src/ui/single_view.ui.h:16
+msgid "_Slideshow"
+msgstr "_Diapositivas"
+
+#: ../src/ui/main_window.ui.h:69
 msgid "_Small"
 msgstr "_Pequeño"
 
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:70
 msgid "_Tag Icons"
 msgstr "Iconos de e_tiquetas"
 
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:71
 msgid "_Tags"
 msgstr "E_tiquetas"
 
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:72
 msgid "_Timeline"
 msgstr "Línea de _tiempo"
 
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:73
 msgid "_Tools"
 msgstr "_Herramientas"
 
-#: ../src/ui/main_window.ui.h:75
+#: ../src/ui/main_window.ui.h:74
 msgid "_Untagged Photos"
 msgstr "Fotos _sin etiqueta"
 
-#: ../src/ui/main_window.ui.h:76
+#: ../src/ui/main_window.ui.h:75
 msgid "_Version"
 msgstr "_Versión"
 
-#: ../src/Updater.cs:724
+#: ../src/ui/main_window.ui.h:76 ../src/ui/single_view.ui.h:18
+msgid "_View"
+msgstr "_Ver"
+
+#: ../src/ui/single_view.ui.h:1
+msgid "Display File _Names"
+msgstr "Mostrar _nombres de archivo"
+
+#: ../src/ui/single_view.ui.h:2
+msgid "F-Spot View"
+msgstr "Vista F-Spot"
+
+#: ../src/ui/single_view.ui.h:4
+msgid "Show or hide the side pane"
+msgstr "Mostrar u ocultar el panel lateral"
+
+#: ../src/ui/single_view.ui.h:5
+msgid "Show or hide the toolbar"
+msgstr "Mostrar u ocultar la barra de herramientas"
+
+#: ../src/ui/single_view.ui.h:6
+msgid "Side _pane"
+msgstr "_Panel lateral"
+
+#: ../src/ui/single_view.ui.h:17
+msgid "_Toolbar"
+msgstr "Barra de _herramientas"
+
+#: ../src/ui/viewer_preferences.ui.h:1
+msgid "<b>Image Interpolation</b>"
+msgstr "<b>Interpolación de imagen</b>"
+
+#: ../src/ui/viewer_preferences.ui.h:2
+msgid "<b>Transparent Parts</b>"
+msgstr "<b>Partes transparentes</b>"
+
+#: ../src/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>Activar esto para permitir interpolación en las imágenes "
+"ampliadas. No debería desactivar esto para ver fotos, pero desactivar la "
+"interpolación podría ser útil en el diseño de iconos.</i></small>"
+
+#: ../src/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>Puede elegir cómo mostrar partes transparentes en las imágenes. "
+"Esta opción no tiene efecto en las fotos, pero establecer esto como un "
+"patrón de cuadros o color personalizado puede ser útil al ver iconos u otros "
+"trabajos artísticos con partes transparentes.</i></small>"
+
+#: ../src/ui/viewer_preferences.ui.h:5
+msgid "As _background"
+msgstr "Como _fondo de pantalla"
+
+#: ../src/ui/viewer_preferences.ui.h:6
+msgid "As _custom color: "
+msgstr "Como _color personalizado: "
+
+#: ../src/ui/viewer_preferences.ui.h:7
+msgid "As check _pattern"
+msgstr "Como _patrón de cuadros"
+
+#: ../src/ui/viewer_preferences.ui.h:8
+msgid "Preferences"
+msgstr "Preferencias"
+
+#: ../src/ui/viewer_preferences.ui.h:9
+msgid "_Interpolate image on zoom"
+msgstr "_Interpolar imagen al ampliar"
+
+#: ../src/Updater.cs:727
 msgid "Updating F-Spot Database"
 msgstr "Actualizando base de datos F-Spot"
 
-#: ../src/Updater.cs:725
+#: ../src/Updater.cs:728
 msgid ""
 "Please wait while your F-Spot gallery's database is updated. This may take "
 "some time."
@@ -3741,11 +3453,6 @@ msgstr ""
 "Por favor espere mientras la base de datos de su galería F-Spot se "
 "actualiza. Esto puede llevar algo de tiempo."
 
-#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:36
-msgid "Unable to create temporary file"
-msgstr "Imposible crear el archivo temporal"
-
 #: ../src/Widgets/CustomPrintWidget.cs:119
 msgid "Page Setup"
 msgstr "Configuración de página"
@@ -3826,11 +3533,11 @@ msgstr "Imprimir las etiquetas de la foto"
 msgid "Print photo comment"
 msgstr "Imprimir el comentario de la foto"
 
-#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:32 ../src/Widgets/Sidebar.cs:54
 msgid "Edit"
 msgstr "Editar"
 
-#: ../src/Widgets/EditorPage.cs:199
+#: ../src/Widgets/EditorPage.cs:200
 msgid ""
 "This tool requires an active selection. Please select a region of the photo "
 "and try the operation again"
@@ -3838,13 +3545,13 @@ msgstr ""
 "Ésta herramienta requiere una selección activa. Seleccione una región de la "
 "foto e intente la operación de nuevo."
 
-#: ../src/Widgets/EditorPage.cs:217
+#: ../src/Widgets/EditorPage.cs:218
 msgid "Error saving adjusted photo"
 msgid_plural "Error saving adjusted photos"
 msgstr[0] "Error al guardar la foto ajustada"
 msgstr[1] "Error al guardar las fotos ajustadas"
 
-#: ../src/Widgets/EditorPage.cs:219
+#: ../src/Widgets/EditorPage.cs:220
 #, csharp-format
 msgid ""
 "Received exception \"{0}\". Note that you have to develop RAW files into "
@@ -3853,11 +3560,11 @@ msgstr ""
 "Se recibió la excepción «{0}». Note que ha de transformar los archivos RAW en "
 "JPEG antes de poder editarlos."
 
-#: ../src/Widgets/Filmstrip.cs:573
+#: ../src/Widgets/Filmstrip.cs:470
 msgid "_Horizontal"
 msgstr "_Horizontal"
 
-#: ../src/Widgets/Filmstrip.cs:577
+#: ../src/Widgets/Filmstrip.cs:474
 msgid "_Vertical"
 msgstr "_Vertical"
 
@@ -3873,66 +3580,69 @@ msgstr "Carpetas"
 msgid "Filesystem"
 msgstr "Sistema de archivos"
 
-#: ../src/Widgets/InfoBox.cs:183
+#: ../src/Widgets/InfoBox.cs:182
 msgid "Histogram"
 msgstr "Histograma"
 
-#: ../src/Widgets/InfoBox.cs:216
+#: ../src/Widgets/InfoBox.cs:201
+msgid "Image Information"
+msgstr "Información de la imagen"
+
+#: ../src/Widgets/InfoBox.cs:215
 msgid "Version"
 msgstr "Versión"
 
-#: ../src/Widgets/InfoBox.cs:219
+#: ../src/Widgets/InfoBox.cs:218
 msgid "Date"
 msgstr "Fecha"
 
-#: ../src/Widgets/InfoBox.cs:225
+#: ../src/Widgets/InfoBox.cs:224
 msgid "Exposure"
 msgstr "Exposición"
 
-#: ../src/Widgets/InfoBox.cs:229
+#: ../src/Widgets/InfoBox.cs:228
 msgid "Focal Length"
 msgstr "Longitud focal"
 
-#: ../src/Widgets/InfoBox.cs:232
+#: ../src/Widgets/InfoBox.cs:231
 msgid "Camera"
 msgstr "Cámara"
 
-#: ../src/Widgets/InfoBox.cs:235
+#: ../src/Widgets/InfoBox.cs:234
 msgid "File Size"
 msgstr "Tamaño del archivo"
 
-#: ../src/Widgets/InfoBox.cs:238
+#: ../src/Widgets/InfoBox.cs:237
 msgid "Rating"
 msgstr "Puntuación"
 
-#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
-#: ../src/Widgets/InfoBox.cs:429
+#: ../src/Widgets/InfoBox.cs:327
 msgid "(wrong format)"
 msgstr "(formato incorrecto)"
 
-#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
-#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
+#: ../src/Widgets/InfoBox.cs:353 ../src/Widgets/InfoBox.cs:364
+#: ../src/Widgets/InfoBox.cs:374
 msgid "(Unknown)"
 msgstr "(Desconocido)"
 
-#: ../src/Widgets/InfoBox.cs:564
+#: ../src/Widgets/InfoBox.cs:474
 #, csharp-format
 msgid "(One Edit)"
 msgid_plural "({0} Edits)"
 msgstr[0] "(Una edición)"
 msgstr[1] "({0} ediciones)"
 
-#: ../src/Widgets/InfoBox.cs:578
+#: ../src/Widgets/InfoBox.cs:484
 msgid "(File read error)"
 msgstr "(Error al leer el archivo)"
 
-#: ../src/Widgets/InfoBox.cs:623
+#: ../src/Widgets/InfoBox.cs:529
 #, csharp-format
 msgid "{0} Photos"
 msgstr "{0} Fotos"
 
 #. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:643
+#: ../src/Widgets/InfoBox.cs:549
 #, csharp-format
 msgid ""
 "On {0} between \n"
@@ -3941,7 +3651,7 @@ msgstr ""
 "En {0} entre\n"
 "{1} y {2}"
 
-#: ../src/Widgets/InfoBox.cs:648
+#: ../src/Widgets/InfoBox.cs:554
 #, csharp-format
 msgid ""
 "Between {0} \n"
@@ -3950,35 +3660,35 @@ msgstr ""
 "Entre {0} \n"
 "y {1}"
 
-#: ../src/Widgets/InfoBox.cs:675
+#: ../src/Widgets/InfoBox.cs:581
 msgid "(At least one File not found)"
 msgstr "(Al menos no se encontró un archivo)"
 
-#: ../src/Widgets/InfoBox.cs:792
+#: ../src/Widgets/InfoBox.cs:698
 msgid "Show Photo Name"
 msgstr "Mostrar el nombre de la foto"
 
-#: ../src/Widgets/InfoBox.cs:801
+#: ../src/Widgets/InfoBox.cs:707
 msgid "Show Date"
 msgstr "Mostrar la fecha"
 
-#: ../src/Widgets/InfoBox.cs:810
+#: ../src/Widgets/InfoBox.cs:716
 msgid "Show Size"
 msgstr "Mostrar el tamaño"
 
-#: ../src/Widgets/InfoBox.cs:819
+#: ../src/Widgets/InfoBox.cs:725
 msgid "Show Exposure"
 msgstr "Mostrar la exposición"
 
-#: ../src/Widgets/InfoBox.cs:828
+#: ../src/Widgets/InfoBox.cs:734
 msgid "Show Focal Length"
 msgstr "Mostrar la longitud focal"
 
-#: ../src/Widgets/InfoBox.cs:837
+#: ../src/Widgets/InfoBox.cs:743
 msgid "Show Camera"
 msgstr "Mostrar la cámara"
 
-#: ../src/Widgets/InfoBox.cs:846
+#: ../src/Widgets/InfoBox.cs:752
 msgid "Show File Size"
 msgstr "Mostrar el tamaño del archivo"
 
@@ -3990,25 +3700,20 @@ msgstr "Metadatos"
 msgid "Extended Metadata"
 msgstr "Metadatos extendidos"
 
-#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:394
-msgid "No Extended Metadata Available"
-msgstr "No hay metadatos adicionales disponibles"
-
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:359
 msgid "No active photo"
 msgstr "No hay una foto activa"
 
-#: ../src/Widgets/MetadataDisplay.cs:414
+#: ../src/Widgets/MetadataDisplay.cs:361
 #, csharp-format
 msgid "The photo \"{0}\" does not exist"
 msgstr "La fotografía «{0}» no existe"
 
-#: ../src/Widgets/MetadataDisplay.cs:417
+#: ../src/Widgets/MetadataDisplay.cs:363
 msgid "No metadata available"
 msgstr "No hay metadatos disponibles"
 
-#: ../src/Widgets/OpenWithMenu.cs:71
+#: ../src/Widgets/OpenWithMenu.cs:72
 msgid "No applications available"
 msgstr "No hay ninguna aplicación disponible"
 
@@ -4016,19 +3721,6 @@ msgstr "No hay ninguna aplicación disponible"
 msgid "Rating:"
 msgstr "Puntuación:"
 
-#: ../src/XmpTagsImporter.cs:91
-msgid "Country"
-msgstr "País"
-
-#: ../src/XmpTagsImporter.cs:92
-msgid "City"
-msgstr "Ciudad"
-
-#: ../src/XmpTagsImporter.cs:93
-msgid "State"
-msgstr "Estado"
-
-#. namespace
 #: ../tools/f-spot-screensaver.desktop.in.h:1
 msgid "Display a slideshow from F-Spot"
 msgstr "Mostrar una exhibición de fotos desde F-Spot"
@@ -4037,6 +3729,274 @@ msgstr "Mostrar una exhibición de fotos desde F-Spot"
 msgid "F-Spot photos"
 msgstr "Fotos de F-Spot"
 
+#~ msgid "Attach Tags:"
+#~ msgstr "Adjuntar etiquetas:"
+
+#~ msgid "Autorotate"
+#~ msgstr "Autorrotar"
+
+#~ msgid "\n"
+#~ msgstr "\n"
+
+#~ msgid "_Autorotate"
+#~ msgstr "_Autorrotar"
+
+#~ msgid "<b>{0}</b>."
+#~ msgstr "<b>{0}</b>."
+
+#~ msgid "Unknown transform type %d"
+#~ msgstr "Tipo de transformación desconocida %d"
+
+#~ msgid "Operation failed"
+#~ msgstr "Falló la operación"
+
+#~ msgid "No way to save files of type \"{0}\""
+#~ msgstr "No hay forma de guardar los archivos de tipo «{0}»"
+
+#~ msgid "Open _Folder..."
+#~ msgstr "Abrir _carpeta…"
+
+#~ msgid "_New Window"
+#~ msgstr "Ventana _nueva"
+
+#~ msgid "Image Directory"
+#~ msgstr "Carpeta de imágenes"
+
+#~ msgid "Thumbnail Directory"
+#~ msgstr "Carpeta de miniaturas"
+
+#~ msgid "Exif Directory"
+#~ msgstr "Carpeta de datos EXIF"
+
+#~ msgid "GPS Directory"
+#~ msgstr "Carpeta GPS"
+
+#~ msgid "InterOperability Directory"
+#~ msgstr "Carpeta de interoperatibilidad"
+
+#~ msgid "Unknown Directory"
+#~ msgstr "Carpeta desconocida"
+
+#~ msgid "Writing to this file format is not supported"
+#~ msgstr "No se soporta la escritura en este formato de archivo"
+
+#~ msgid "IPTC Information Interchange Model (IIM) Version number"
+#~ msgstr ""
+#~ "Número de versión del modelo de intercambio de información (IIM) IPTC"
+
+#~ msgid "OSI Destination routing information"
+#~ msgstr "Información de encaminado de destino OSI"
+
+#~ msgid "IPTC file format"
+#~ msgstr "Formato de archivo IPTC"
+
+#~ msgid "Identifies the provider and product"
+#~ msgstr "Identifica al proveedor y al producto"
+
+#~ msgid "A unique number identifying the envelope"
+#~ msgstr "Un único número que identifique el sobre"
+
+#~ msgid "A unique number"
+#~ msgstr "Un único número"
+
+#~ msgid ""
+#~ "The envelope handling priority between 1 (most urgent) and 9 (least "
+#~ "urgent)"
+#~ msgstr "La urgencia del sobre, entre 1 (muy urgente) y 9 (poco urgente)"
+
+#~ msgid "The year, month and day (CCYYMMDD) the service sent the material"
+#~ msgstr ""
+#~ "El año, mes y día (CCYYMMDD) en la que el servicio envió el material"
+
+#~ msgid "The hour, minute and second (HHMMSS) the service sent the material"
+#~ msgstr ""
+#~ "La hora, minuto y segundo (HHMMSS) en la que el servicio envió el material"
+
+#~ msgid "The character set designation"
+#~ msgstr "La designación del conjunto de caracteres"
+
+#~ msgid "External globally unique object identifier"
+#~ msgstr "Identificador global único de objetos externo"
+
+#~ msgid "Abstract Relationship Method (ARM) identifier"
+#~ msgstr "Identificador del método de relación abstracto (ARM)"
+
+#~ msgid "Abstract Relationship Method (ARM) version number."
+#~ msgstr "Número de versión del método de relación abstracto (ARM)."
+
+#~ msgid "Number identifying the IIM version this application record uses"
+#~ msgstr ""
+#~ "Número identificando la versión IIM que usa el registro de esta aplicación"
+
+#~ msgid "Object type reference"
+#~ msgstr "Referencia al tipo del objeto"
+
+#~ msgid "Object attribute reference"
+#~ msgstr "Referencia al atributo del objeto"
+
+#~ msgid "Object name"
+#~ msgstr "Nombre del objeto"
+
+#~ msgid "Status of the objectdata according to the provider"
+#~ msgstr "Estado de los datos del objeto según el proveedor"
+
+#~ msgid "Location within a city or area where the object originates"
+#~ msgstr "Lugar dentro de una ciudad o área donde el objeto se origina"
+
+#~ msgid "Name of the city the content is focussing on"
+#~ msgstr "Nombre de la ciudad donde está el foco del contenido"
+
+#~ msgid "Copyright information for"
+#~ msgstr "Información de Copyright para"
+
+#~ msgid "Full name of the country of the focus of the content"
+#~ msgstr "Nombre completo del país donde está el foco del contenido"
+
+#~ msgid ""
+#~ "Two or three letter ISO3166 code of the country of the focus of the "
+#~ "content"
+#~ msgstr "Código ISO3166 de dos o tres letras del país del foco del contenido"
+
+#~ msgid "Creator of the content"
+#~ msgstr "Creador del contenido"
+
+#~ msgid "Provider of the object"
+#~ msgstr "Proveedor del objeto"
+
+#~ msgid "The title of the author or creator"
+#~ msgstr "El título del autor o creador"
+
+#~ msgid ""
+#~ "The person involved in writing, editing or correcting the object data or "
+#~ "caption/abstract"
+#~ msgstr ""
+#~ "La persona involucrada en la escritura, edición o corrección del dato "
+#~ "objeto o la anotación/resumen"
+
+#~ msgid "Headline of the content"
+#~ msgstr "Cabecera del contenido"
+
+#~ msgid ""
+#~ "Instructions from the creator to the receiver not covered by other fields"
+#~ msgstr ""
+#~ "Instrucciones del creador para el receptor que no están cubiertas por "
+#~ "otros campos"
+
+#~ msgid "Intellectual genre of the object"
+#~ msgstr "Género intelectual del objeto"
+
+#~ msgid "Unknown IIM DataSet"
+#~ msgstr "Conjunto de datos IIM desconocido"
+
+#~ msgid "Creator"
+#~ msgstr "Creador"
+
+#~ msgid "Title"
+#~ msgstr "Título"
+
+#~ msgid "Copyright"
+#~ msgstr "Copyright"
+
+#~ msgid "Subject and Keywords"
+#~ msgstr "Asunto y palabras clave"
+
+#~ msgid "Compression"
+#~ msgstr "Compresión"
+
+#~ msgid "Planar Configuration"
+#~ msgstr "Configuración planar"
+
+#~ msgid "Orientation"
+#~ msgstr "Orientación"
+
+#~ msgid "Photometric Interpretation"
+#~ msgstr "Interpretación fotométrica"
+
+#~ msgid "Resolution Unit"
+#~ msgstr "Unidad de resolución"
+
+#~ msgid "Exposure Program"
+#~ msgstr "Programa de exposición"
+
+#~ msgid "Metering Mode"
+#~ msgstr "Modo de medida"
+
+#~ msgid "Exposure Mode"
+#~ msgstr "Modo de exposición"
+
+#~ msgid "Custom Rendered"
+#~ msgstr "Renderizado personalizado"
+
+#~ msgid "Components Configuration"
+#~ msgstr "Configuración de componentes"
+
+#~ msgid "Light Source"
+#~ msgstr "Fuente de luz"
+
+#~ msgid "Sensing Method"
+#~ msgstr "Método de sensibilidad"
+
+#~ msgid "Color Space"
+#~ msgstr "Espacio de color"
+
+#~ msgid "White Balance"
+#~ msgstr "Balance de blancos"
+
+#~ msgid "Focal Plane Resolution Unit"
+#~ msgstr "Unidad de resolución del plano focal"
+
+#~ msgid "File Source Type"
+#~ msgstr "Tipo de origen de archivo"
+
+#~ msgid "Scene Capture Type"
+#~ msgstr "Tipo de captura de la escena"
+
+#~ msgid "Gain Control"
+#~ msgstr "Control de ganancia"
+
+#~ msgid "Contrast"
+#~ msgstr "Contraste"
+
+#~ msgid "Saturation"
+#~ msgstr "Saturación"
+
+#~ msgid "Sharpness"
+#~ msgstr "Enfoque"
+
+#~ msgid "Scene Type"
+#~ msgstr "Tipo de escena"
+
+#~ msgid "Comment:"
+#~ msgstr "Comentario:"
+
+#~ msgid "<small></small>"
+#~ msgstr "<small></small>"
+
+#~ msgid "Photo 0 of 0"
+#~ msgstr "Fotografía 0 de 0"
+
+#~ msgid ""
+#~ "Specify if an original size picture should be rotated or not. Smaller "
+#~ "sizes are automatically rotated."
+#~ msgstr ""
+#~ "Especifique su un tamaño original de imagen debe rotarse o no. Los "
+#~ "tamaños pequeños se rotan automáticamente."
+
+#~ msgid "Unable to create temporary file"
+#~ msgstr "Imposible crear el archivo temporal"
+
+#~ msgid "No Extended Metadata Available"
+#~ msgstr "No hay metadatos adicionales disponibles"
+
+#~ msgid "Country"
+#~ msgstr "País"
+
+#~ msgid "City"
+#~ msgstr "Ciudad"
+
+#~ msgid "State"
+#~ msgstr "Estado"
+
 #~ msgid "Preview"
 #~ msgstr "Previsualizar"
 
@@ -4085,9 +4045,6 @@ msgstr "Fotos de F-Spot"
 #~ msgid "<b></b>"
 #~ msgstr "<b></b>"
 
-#~ msgid "Attach tag:"
-#~ msgstr "Adjuntar etiqueta:"
-
 #~ msgid "CD"
 #~ msgstr "CD"
 
diff --git a/po/ja.po b/po/ja.po
index f218b01..d93586a 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -1,18 +1,17 @@
 # Japanese Messages for F-Spot
-# Copyright (C) 2004,2005,2008,2009 F-spot'S COPYRIGHT HOLDER
+# Copyright (C) 2004-2006,2008-2010 F-spot'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the F-Spot package.
 # Satoru SATOH <ss at gnome.gr.jp>, 2004.
 # Takeshi AIHANA <aihana at gnome.gr.jp>, 2005.
 # Novell Language <language at novell.com>, 2006.
-# Yoshizumi ENDO <y-endo at ceres.dti.ne.jp>, 2009.
-#
+# Yoshizumi ENDO <y-endo at ceres.dti.ne.jp>, 2009-2010.
 msgid ""
 msgstr ""
 "Project-Id-Version: F-Spot master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
 "spot&component=General\n"
-"POT-Creation-Date: 2009-10-22 21:54+0900\n"
-"PO-Revision-Date: 2009-10-20 22:03+0900\n"
+"POT-Creation-Date: 2010-07-24 23:31+0900\n"
+"PO-Revision-Date: 2010-07-25 00:05+0900\n"
 "Last-Translator: Yohizumi ENDO <y-endo at ceres.dti.ne.jp>\n"
 "Language-Team: Japanese <gnome-translation at gnome.gr.jp>\n"
 "MIME-Version: 1.0\n"
@@ -20,105 +19,125 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
+#: ../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 写真マネージャ"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "写真を整理し、楽しみ、共有します"
+
+#: ../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 "写真マネージャ"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "F-Spot にインポート"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-Spot 写真ビューア"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "写真ビューア"
+
 #: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
 msgid "_CD..."
 msgstr "CD(_C)..."
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
+#: ../extensions/Exporters/CDExport/CDExport.cs:155
 msgid "Transferring Pictures"
 msgstr "写真の転送中"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:218
+#: ../extensions/Exporters/CDExport/CDExport.cs:208
 #, csharp-format
 msgid "Transferring picture \"{0}\" To CD"
 msgstr "写真 \"{0}\" を CD へ転送中"
 
 #. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:633 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../extensions/Exporters/CDExport/CDExport.cs:210
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:360
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:209
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:773
+#: ../src/MainWindow.cs:645 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
 #, csharp-format
 msgid "{0} of {1}"
 msgstr "{0} / {1}"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
+#: ../extensions/Exporters/CDExport/CDExport.cs:223
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:378
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:390
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:696
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
 msgid "Done Sending Photos"
 msgstr "写真の送信が完了しました"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
+#: ../extensions/Exporters/CDExport/CDExport.cs:225
 msgid "Transfer Complete"
 msgstr "転送の完了"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
+#: ../extensions/Exporters/CDExport/CDExport.cs:232
 msgid "Error While Transferring"
 msgstr "転送する際にエラー"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/CDExport/CDExport.cs:240
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:266
 msgid "Error Transferring"
 msgstr "転送中にエラー"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:263
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
 msgid "copying..."
 msgstr "コピー中..."
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:1
-msgid "<b><i>There is some previously scheduled items to write</i></b>"
-msgstr "<b><i>他に書き込み予約されたアイテムがあります</i></b>"
+msgid "<b><i>There are some previously scheduled items to write</i></b>"
+msgstr "<b><i>書き込み予約されたアイテムがあります</i></b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:2
 msgid "<b>Photos to Burn</b>"
 msgstr "<b>焼き込む写真</b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
-msgid "Autorotate"
-msgstr "自動回転"
-
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 msgid "Create CD"
 msgstr "CD の作成"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:220
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
+#: ../src/Widgets/InfoBox.cs:221
 msgid "Size"
 msgstr "サイズ"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
 msgid "Size of the exported selection:"
 msgstr "エキスポートされるサイズ:"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
 msgid "_Browse Previously Scheduled Files"
 msgstr "他に書き込み予約されているファイルを参照(_B)"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
-#: ../src/f-spot.glade.h:95
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
+#: ../src/ui/single_view.ui.h:12
 msgid "_Export"
 msgstr "エキスポート(_E)"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:9
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
 msgid "_Write only these photos to CD"
 msgstr "これらの写真のみ CD へ書き込む(_W)"
 
@@ -126,11 +145,11 @@ msgstr "これらの写真のみ CD へ書き込む(_W)"
 msgid "F_acebook..."
 msgstr "Facebook(_A)..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
 msgid "Waiting for authorization"
 msgstr "認証を待っています"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:101
 msgid ""
 "F-Spot will now launch your browser so that you can enable the permission "
 "you just selected.\n"
@@ -143,11 +162,11 @@ msgstr ""
 "Facebook でアプリケーションに戻るよう指示されたら、以下の \"OK\" ボタンをク"
 "リックしてください。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
 msgid "Too many images to export"
 msgstr "エキスポートする画像が多すぎます"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:283
 #, csharp-format
 msgid ""
 "Facebook only permits {0} photographs per album.  Please refine your "
@@ -157,26 +176,18 @@ msgstr ""
 "再度試して下さい。"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "写真のアップロード中"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
 msgid "Album must have a name"
 msgstr "アルバムには名前が必要です"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:299
 msgid "Please name your album or choose an existing album."
 msgstr "アルバムに名前を付けるか、既存のアルバムを選択して下さい。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
 msgid "Creating a new album failed"
 msgstr "新しいアルバムの作成に失敗"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:314
 #, csharp-format
 msgid ""
 "An error occurred creating a new album.\n"
@@ -187,42 +198,53 @@ msgstr ""
 "\n"
 "{0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:327
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:486
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:726
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:593
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:515
+msgid "Uploading Pictures"
+msgstr "写真のアップロード中"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:355
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:652
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:554
 #, csharp-format
 msgid "Uploading picture \"{0}\" ({1} of {2})"
 msgstr "写真 \"{0}\" のアップロード中 ({1} / {2})"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
 #, csharp-format
 msgid "Error Uploading To Facebook: {0}"
 msgstr "Facebook へアップロード中にエラー: {0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:215
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:789
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:685
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:585
 #: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:40
 msgid "Error"
 msgstr "エラー"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:800
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:698
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:598
 msgid "Upload Complete"
 msgstr "アップロードの完了"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:383
+msgid "Visit F-Spot group on Facebook"
+msgstr "Facebook の F-Spot グループを訪問する"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
 msgid "Waiting for authentication"
 msgstr "認証を待っています"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:214
 msgid ""
 "F-Spot will now launch your browser so that you can log into Facebook.\n"
 "\n"
@@ -236,15 +258,15 @@ msgstr ""
 "リックしてください。F-Spot は可能ならばあなたのセッションを Gnome-Keyring に"
 "キャッシュし、後の Facebook へのエキスポートで再利用します。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:219
 msgid "Authenticating..."
 msgstr "認証中..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
 msgid "Error logging into Facebook"
 msgstr "Facebook へのログイン中にエラー"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:230
 msgid ""
 "There was a problem logging into Facebook.  Check your credentials and try "
 "again."
@@ -252,37 +274,37 @@ msgstr ""
 "Facebook へのログイン中に問題がありました。アカウント情報を確認し、再度試して"
 "ください。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:239
 msgid "Authorizing Session"
 msgstr "セッションを認証中"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:248
 msgid "Session established, fetching user info..."
 msgstr "セッションを確立、ユーザ情報を取り寄せ中..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:254
 msgid "Session established, fetching friend list..."
 msgstr "セッションを確立、フレンドリストを取り寄せ中..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:264
 msgid "Session established, fetching friend details..."
 msgstr "セッションを確立、フレンドの詳細情報を取り寄せ中..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:276
 msgid "Session established, fetching photo albums..."
 msgstr "セッションを確立、写真アルバムを取り寄せ中..."
 
 #. Note for translators: {0} and {1} are respectively firstname and surname of the user
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:286
 #, csharp-format
 msgid "{0} {1} is logged into Facebook"
 msgstr "{1} {0} は Facebook にログインしています"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
 msgid "Facebook Connection Error"
 msgstr "Facebook 接続エラー"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:296
 #, csharp-format
 msgid ""
 "There was an error when downloading your information from Facebook.\n"
@@ -293,7 +315,7 @@ msgstr ""
 "\n"
 "Facebook 情報: {0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:325
 msgid "You are not logged in."
 msgstr "ログインしていません。"
 
@@ -322,7 +344,6 @@ msgid "In this photo"
 msgstr "この写真の中"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:7
-#: ../src/XmpTagsImporter.cs:90
 msgid "Location"
 msgstr "場所"
 
@@ -335,8 +356,7 @@ msgid "Logout"
 msgstr "ログアウト"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:51
-#: ../src/Widgets/InfoBox.cs:211
+#: ../src/Widgets/InfoBox.cs:212
 msgid "Name"
 msgstr "名前"
 
@@ -372,12 +392,12 @@ msgstr "Flickr(_F)..."
 msgid "_Zooomr..."
 msgstr "Zooomr(_Z)..."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:107
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
 msgid "Authorize"
 msgstr "認証"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
 #, csharp-format
 msgid ""
 "Return to this window after you have finished the authorization process on "
@@ -386,60 +406,60 @@ msgstr ""
 "{0} での認証を完了したらこのウィンドウに戻り、この下にある \"認証を完了する"
 "\" ボタンをクリックして下さい。"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:114
 msgid "Complete Authorization"
 msgstr "認証を完了する"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
 #, csharp-format
 msgid "Logging into {0}"
 msgstr "{0} にログイン中"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:120
 msgid "Checking credentials..."
 msgstr "認証中..."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:127
 #, csharp-format
 msgid "Welcome {0} you are connected to {1}"
 msgstr "{1} にアカウント {0} でログインしています"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:130
 #, csharp-format
 msgid "Sign in as a different user"
 msgstr "別のアカウントでログインする"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:135
 #, csharp-format
 msgid "Used {0} of your allowed {1} monthly quota"
 msgstr "1 ヶ月で利用できる容量 {1} 中 {0} を使用中"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:239
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:308
 msgid "Unable to log on"
 msgstr "ログオンできません"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:328
 #, csharp-format
 msgid "Waiting for response {0} of {1}"
 msgstr "応答を待っています ({0} / {1})"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:355
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:769
 #, csharp-format
 msgid "Uploading picture \"{0}\""
 msgstr "写真 \"{0}\" のアップロード中"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:378
 #, csharp-format
 msgid "Error Uploading To {0}: {1}"
 msgstr "{0} へのアップロード中にエラー: {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:465
 msgid "Unable to log on."
 msgstr "ログオンできません。"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:466
 #, csharp-format
 msgid ""
 "F-Spot was unable to log on to {0}.  Make sure you have given the "
@@ -449,25 +469,24 @@ msgstr ""
 "きているかどうか確認して下さい。"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
 msgid "<b>Account</b>"
 msgstr "<b>アカウント</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5 ../src/ui/mail_dialog.ui.h:6
 msgid "<b>Photos</b>"
 msgstr "<b>写真</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
 msgid "<b>Style</b>"
 msgstr "<b>スタイル</b>"
 
@@ -476,10 +495,10 @@ msgid "<b>Viewing permissions</b>"
 msgstr "<b>閲覧許可</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
-#: ../src/f-spot.glade.h:43
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
 msgid "Export"
 msgstr "エキスポート"
 
@@ -522,17 +541,15 @@ msgid "Visible to Friends"
 msgstr "Friends に許可"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
 msgid "_Export tags"
 msgstr "タグのエキスポート(_E)"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:18
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
 msgid "_Resize to: "
 msgstr "サイズ変更(_R): "
 
@@ -541,11 +558,10 @@ msgid "_View photos in browser when done uploading"
 msgstr "アップロードが完了したらブラウザで写真を表示する(_V)"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
 msgid "pixels"
 msgstr "ピクセル"
 
@@ -553,141 +569,158 @@ msgstr "ピクセル"
 msgid "F_older..."
 msgstr "フォルダ(_F)..."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:117
 msgid "Select Export Folder"
 msgstr "エキスポートするフォルダの選択"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:169
 msgid "Building Gallery"
 msgstr "ギャラリーの作成"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:206
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "\"{0}\" をエキスポート中..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:213
 #, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "ギャラリーへ写真 \"{0}\" をアップロード中にエラー: {2}{1}"
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "ギャラリーへ \"{0}\" をコピー中にエラー: {2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:239
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "\"{0}\" へ転送中"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:240
+msgid "Transferring..."
+msgstr "転送中..."
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+msgid "Export Complete."
+msgstr "エキスポートの完了"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "エラー: 転送する際にエラーが発生したので、処理を中止します"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:247
+msgid "Exporting Photos Completed."
+msgstr "写真のエキスポートが完了しました。"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "エラー: 既にファイルが存在するので、処理を中止します。"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:312
+msgid "Exporting Photos"
+msgstr "写真のエキスポート"
 
 #. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:803
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:716
 msgid "Light"
 msgstr "明るく"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:804
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
 msgid "Dark"
 msgstr "暗く"
 
 #. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:984
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:897
 msgid "Prev"
 msgstr "前へ"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:986
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1227
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:899
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
 msgid "Index"
 msgstr "インデックス"
 
 #. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:989
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1161
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1201
-#: ../src/MainWindow.cs:336 ../src/Widgets/Sidebar.cs:64
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:902
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1074
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1114
+#: ../src/MainWindow.cs:349 ../src/Widgets/Sidebar.cs:56
 msgid "Tags"
 msgstr "タグ"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:992
-#: ../src/f-spot.glade.h:57 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:905
+#: ../src/ItemAction.cs:102
 msgid "Next"
 msgstr "次へ"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1096
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1009
 msgid "Gallery generated by"
 msgstr "ギャラリーの作成者: "
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1136
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1049
 msgid "Show Styles"
 msgstr "スタイルを表示"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1137
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
 msgid "Hide Styles"
 msgstr "スタイルを非表示"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1172
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1173
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1085
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1086
 #: ../src/ui/main_window.ui.h:24
 msgid "Tags: "
 msgstr "タグ: "
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1304
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1437
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1350
 msgid "Page:"
 msgstr "ページ数:"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
-msgid "\n"
-msgstr "\n"
-
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
 msgid "<b>Destination</b>"
 msgstr "<b>エキスポート先</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:2
 msgid "<b>Export Method</b>"
 msgstr "<b>エキスポートの方法</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
 msgid "Create _gallery using \"Original\""
 msgstr "オリジナルファイルでギャラリーを作成(_G)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
 msgid "Create standalone _web gallery"
 msgstr "スタンドアローンなウェブギャラリーの作成(_W)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
 msgid "D_escription:"
 msgstr "説明(_E):"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
 msgid "Export _tags"
 msgstr "タグのエキスポート(_T)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
 msgid "Export tag _icons"
 msgstr "タグ・アイコンのエキスポート(_I)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
 msgid "Folder Export"
 msgstr "フォルダへのエキスポート"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
 msgid "G_allery Name:"
 msgstr "ギャラリー名(_A):"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
 msgid "Open _destination when done exporting"
 msgstr "エキスポートが完了したら転送先を開く(_D)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
 msgid "_Folder:"
 msgstr "フォルダ(_F):"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:19
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
 msgid "_Save the files only"
 msgstr "ファイルの保存のみ(_S)"
 
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "予期されていない例外"
+
 #: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
 msgid "Web _Gallery..."
 msgstr "ウェブギャラリー(_G)..."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:54
 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"
@@ -695,32 +728,32 @@ msgstr ""
 "このバージョンで対応していないギャラリーには接続できません。\n"
 "お使いのリモートプラグインが 1.08 以降であるか確認して下さい。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:391
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
 msgid "Invalid URL"
 msgstr "無効な URL"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:393
 msgid "The gallery URL entry does not appear to be a valid URL"
 msgstr "入力されたギャラリーの URL は正しい URL ではないようです"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:402
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:440
-msgid "Error while connecting to Gallery"
-msgstr "ギャラリーへ接続する際にエラー"
-
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
+msgid "Error while connecting to Gallery"
+msgstr "ギャラリーへ接続する際にエラー"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:404
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:431
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:442
 #, csharp-format
 msgid "The following error was encountered while attempting to log in: {0}"
 msgstr "{0} にログインする際に以下のエラーが発生しました。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:417
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
 msgid "A Gallery with this name already exists"
 msgstr "同名のギャラリーが既に存在しています"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:419
 #, csharp-format
 msgid ""
 "There is already a Gallery with the same name in your registered Galleries. "
@@ -729,15 +762,15 @@ msgstr ""
 "入力されたギャラリー名と同名のギャラリーが既に存在します。他の名前を選択して"
 "下さい。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:529
 msgid "(TopLevel)"
 msgstr "(トップレベル)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:590
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
 msgid "Invalid Gallery name"
 msgstr "無効なギャラリー名"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:592
 msgid ""
 "The gallery name contains invalid characters.\n"
 "Only letters, numbers, - and _ are allowed"
@@ -745,44 +778,42 @@ msgstr ""
 "ギャラリー名に不正な文字が含まれています。\n"
 "英数字と \"-\"、\"_\" 以外の文字は使えません。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:796
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:788
 #, csharp-format
 msgid "Error uploading picture \"{0}\" to Gallery: {1}"
 msgstr "ギャラリー {1} へ写真 \"{0}\" をアップロード中にエラー"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:816
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:714
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:614
 msgid "(No Gallery)"
 msgstr "(ギャラリーなし)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:908
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:836
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:710
 msgid "(Not Connected)"
 msgstr "(未接続)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:909
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:837
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:711
 msgid "(No Albums)"
 msgstr "(アルバムなし)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:961
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:902
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:752
 msgid "No account selected"
 msgstr "アカウントが選択されていません"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
 msgid "<b>Album</b>"
 msgstr "<b>アルバム</b>"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
 msgid "<b>Gallery</b>"
 msgstr "<b>ギャラリー</b>"
 
@@ -792,85 +823,86 @@ msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
 msgstr ""
 "<span weight='bold' size='larger'>ギャラリーへの接続中にエラー</span>\n"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
 msgid "Export _titles and comments"
 msgstr "タイトルとコメントのエキスポート(_T)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
 msgid "Open _album in browser when done uploading"
 msgstr "アップロードが完了したらブラウザでアルバムを開く(_A)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
 msgid "Please verify that the settings for this gallery are correct."
 msgstr "このギャラリーの設定が正しいかどうか確認して下さい。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
 msgid "U_RL:"
 msgstr "URL(_U):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
 msgid "_Album Name:"
 msgstr "アルバム名(_A)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
 msgid "_Description:"
 msgstr "説明(_D):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
 msgid "_Export to Album:"
 msgstr "アルバムへエキスポート(_E):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
 msgid "_Gallery Name:"
 msgstr "ギャラリー名(_G):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
 msgid "_Gallery:"
 msgstr "ギャラリー(_G):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
 msgid "_Parent Album:"
 msgstr "親アルバム(_P):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
 msgid "_Password:"
 msgstr "パスワード(_P):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
 msgid "_Title:"
 msgstr "タイトル(_T):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
 msgid "_Username:"
 msgstr "ユーザ名(_U):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:363
 msgid "Error reading server response"
 msgstr "サーバからの応答中にエラー"
 
 #. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:375
 msgid "Server returned response without Gallery content"
 msgstr "サーバからの応答にはギャラリーのコンテンツが含まれていません"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
 msgid "Error while creating new album"
 msgstr "新しいアルバムの作成中にエラー"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:713
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to perform the "
@@ -884,38 +916,38 @@ msgstr ""
 msgid "_PicasaWeb..."
 msgstr "Picasa ウェブアルバム(_P)..."
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:444
 msgid "Error while creating Album"
 msgstr "アルバム作成中にエラー"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:445
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to create an album: {0}"
 msgstr "アルバムの作成中に以下のエラーが発生しました: {0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:615
 #, csharp-format
 msgid "{0} Sent"
 msgstr "{0} 枚送信"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:617
 #, csharp-format
 msgid "{0} of approx. {1}"
 msgstr "{0} / 約 {1}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:683
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:583
 #, csharp-format
 msgid "Error Uploading To Gallery: {0}"
 msgstr "ギャラリーへのアップロード中にエラー: {0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:765
 #, csharp-format
 msgid "Available space: {0}, {1}% used out of {2}"
 msgstr "利用可能領域: {0} ({2} 中 {1}% 利用済み)"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:878
 #, csharp-format
 msgid ""
 "The selected album has a limit of {0} pictures,\n"
@@ -946,20 +978,16 @@ msgstr ""
 "<i>文字の大文字/小文字は区別されません。</i>"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
 msgid "Public Album"
 msgstr "公開アルバム"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
 msgid "_Album Title:"
 msgstr "アルバムのタイトル(_A):"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
-msgid "_Autorotate"
-msgstr "自動回転(_A)"
-
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
 msgid "_Captcha:"
 msgstr "キャプチャ(_C):"
 
@@ -971,7 +999,7 @@ msgstr "SmugMug(_S)..."
 msgid "<b>SmugMug Export</b>"
 msgstr "<b>SmugMug エキスポート</b>"
 
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
 msgid "_Account:"
 msgstr "アカウント(_A):"
 
@@ -1004,16 +1032,72 @@ msgstr "アップロードが完了しました"
 msgid "Error uploading to Tabblo: "
 msgstr "Tabblo へのアップロード中にエラー: "
 
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:1
+msgid "<b>F-Spot tags</b>"
+msgstr "<b>F-Spot タグ</b>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:3
+msgid "<b>Tabblo account</b>"
+msgstr "<b>Tabblo アカウント</b>"
+
+#: ../extensions/Exporters/TabbloExport/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 のタグは、写真のエキスポート状態を追跡する際に役立ちます。例"
+"えば、あるタグをエキスポート予定の写真に付与したり、別のタグをエキスポート済"
+"みの写真に付与したりします。こちらでにタグを自動的に適切なものへと置き換える"
+"ように F-Spot に指示します。</i></small>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:6
+msgid "Rem_ove from exported photos:"
+msgstr "エキスポートする写真から削除(_O):"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
+msgid "Select..."
+msgstr "選択..."
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
+msgid "_Attach to exported photos:"
+msgstr "エキスポートする写真に付与(_A):"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
+msgid "A trust error occured while attempting to access"
+msgstr "アクセスの際に認証エラー"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
+msgid "Abort this session"
+msgstr "このセッションを中断"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+msgid "Always trust this site's certificate"
+msgstr "このサイトの認証を常に許可する"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+msgid "Do you wish to:"
+msgstr "何をしますか:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+msgid "Trust Error"
+msgstr "認証エラー"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+msgid "Trust the site's certificate this once"
+msgstr "このサイトの認証を一度だけ許可する"
+
 #: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
 msgid "Compressed fil_e..."
 msgstr "圧縮ファイル(_E)..."
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:196
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../src/Widgets/EditorPage.cs:199
 msgid "No selection available"
 msgstr "範囲が選択されていません"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:49
 msgid ""
 "This tool requires an active selection. Please select one or more pictures "
 "and try again"
@@ -1021,21 +1105,20 @@ msgstr ""
 "このツールでは選択された写真が必要です。1 つ以上の写真を選択してから、再度試"
 "してください。"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:64
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:65
 msgid "Select export folder"
 msgstr "エキスポート先のフォルダを選択"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:102
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:103
 msgid "Exporting files"
 msgstr "ファイルをエキスポート中"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:109
 #, csharp-format
 msgid "Preparing photo \"{0}\""
 msgstr "写真 \"{0}\" を準備中"
 
 #: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
-#: ../src/f-spot.glade.h:92
 msgid "_Create"
 msgstr "作成(_C)"
 
@@ -1051,7 +1134,11 @@ msgstr "場所(_L):"
 msgid "_Scale:"
 msgstr "大きさ(_S):"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:53
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "重複の確認..."
+
+#: ../extensions/Tools/HashJob/HashJob.cs:54
 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 "
@@ -1061,28 +1148,24 @@ msgstr ""
 "像コレクションを解析する必要があります。この処理は時間がかかるためにデフォル"
 "トでは行いません。この更新処理の開始・一時停止はこのダイアログから行えます。"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:59
+#: ../extensions/Tools/HashJob/HashJob.cs:60
 #, csharp-format
 msgid ""
 "You currently have {0} photos needing md5 calculation, and {1} pending jobs"
 msgstr "MD5 の計算が必要な写真が {0} 枚、保留中の作業が {1} あります。"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:76 ../src/ui/main_window.ui.h:37
 msgid "_Close"
 msgstr "閉じる(_C)"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:102
+#: ../extensions/Tools/HashJob/HashJob.cs:103
 msgid "Processing images..."
 msgstr "画像を解析中..."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:108
+#: ../extensions/Tools/HashJob/HashJob.cs:109
 msgid "Stopped"
 msgstr "停止"
 
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Hash for Duplicates"
-msgstr "重複検出ハッシュ"
-
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
 msgid "F-Spot Gallery"
 msgstr "F-Spot ギャラリー"
@@ -1114,6 +1197,19 @@ msgstr "選択済み"
 msgid "Live Web Gallery"
 msgstr "ライブウェブギャラリー"
 
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:90
+msgid "none"
+msgstr "なし"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:93
+#, csharp-format
+msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
+msgstr " ギャラリー: {0},  写真: {1},  最終クライアント: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:157
+msgid "Gallery is inactive"
+msgstr "ギャラリーはアクティブではありません"
+
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
 msgid ""
 "<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1176,28 +1272,15 @@ msgstr "共有:"
 msgid "Views:"
 msgstr "ビュー:"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "なし"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
-msgstr " ギャラリー: {0},  写真: {1},  最終クライアント: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "ギャラリーはアクティブではありません"
-
 #: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
 msgid "Merge Db"
 msgstr "データベースのマージ"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:73
+#: ../extensions/Tools/MergeDb/MergeDb.cs:74
 msgid "Error opening the selected file"
 msgstr "選択したファイルを開く際にエラー"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:74
+#: ../extensions/Tools/MergeDb/MergeDb.cs:75
 #, csharp-format
 msgid ""
 "The file you selected is not a valid or supported database.\n"
@@ -1276,11 +1359,11 @@ msgid "New Rolls Only"
 msgstr "新しいインポートロールのみ"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:290 ../src/UI.Dialog/ThreadProgressDialog.cs:55
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
 msgid "Skip"
 msgstr "スキップする"
 
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
 #, csharp-format
 msgid ""
 "<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1294,7 +1377,7 @@ msgid "Configure Screensaver"
 msgstr "スクリーンセーバーの設定"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
-#: ../src/UI.Dialog/DateRangeDialog.cs:129
+#: ../src/UI.Dialog/DateRangeDialog.cs:120
 msgid "All Images"
 msgstr "全ての画像"
 
@@ -1318,382 +1401,202 @@ msgstr "F-Spot をスクリーンセーバーに設定する"
 msgid "Screensaver Configuration"
 msgstr "スクリーンセーバーの設定"
 
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
-
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "F-Spot 写真マネージャ"
-
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "写真を整理し、楽しみ、共有します"
-
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "写真マネージャ"
-
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "F-Spot にインポート"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "透過部分の表示"
 
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "F-Spot 写真ビューア"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "画像を拡大する際の補間処理を有効化します。"
 
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "写真ビューア"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "インポートダイアログの高さ"
 
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "ファイルが見つかりません"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "メインウィンドウの高さ"
 
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "不明な変換タイプ %d"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "写真ビューアーウインドウの高さ"
 
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "操作に失敗しました"
+#: ../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 ""
+"'transparency' オプションが設定されてる場合、このオプションで指定される色が画"
+"像閲覧時に透過色として用いられます。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInfoDialog.cs:32
-msgid "Package"
-msgstr "パッケージ"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "拡大時に画像を補間"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:110
-msgid "Extension Installation"
-msgstr "拡張機能のインストール"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "メインウインドウを最大化する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:136
-msgid "<b>Select the extensions to install and click on Next</b>"
-msgstr "<b>インストールする拡張機能を選択し「進む」をクリックして下さい</b>"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "写真ビューアーウインドウを最大化する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:150
-msgid "Install from:"
-msgstr "インストール元:"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "F-Spot テーマ用のカスタム gtkrc のパス"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:179
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:180
-msgid "_Repositories..."
-msgstr "リポジトリ(_R)..."
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "サムネイル表示で日時を表示する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:220
-msgid "Show all packages"
-msgstr "全てのパッケージを表示"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "サムネイル表示で評価を表示する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:221
-msgid "Show new versions only"
-msgstr "新しいバージョンのパッケージのみ表示"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "サムネイル表示でタグを表示する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:222
-msgid "Show updates only"
-msgstr "更新のあるパッケージのみ表示"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "ビューアーウインドウにファイル名を表示する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:247
-msgid "_Unselect All"
-msgstr "全ての選択を解除(_U)"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "メインウインドウにフィルムストリップを表示する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:259
-#: ../src/ui/main_window.ui.h:18
-msgid "Select _All"
-msgstr "全て選択(_A)"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "メインウインドウにサイドバーを表示する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:334
-msgid "label124"
-msgstr "label124"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "メインウインドウにタイムラインを表示する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:346
-msgid "Overall Progress:"
-msgstr "全体の進捗:"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "メインウインドウにツールバーを表示する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:374
-msgid "Downloading extensions..."
-msgstr "拡張機能をダウンロード中..."
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "写真ビューアーウインドウにツールバーを表示する。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:36
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:58
-msgid "Extension Manager"
-msgstr "拡張機能マネージャ"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "サイドバーに表示するタグアイコンのサイズ"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:54
-msgid "Additional extensions are required to perform this operation."
-msgstr "この操作には追加の拡張機能が必要です。"
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "メインウインドウの X 座標"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:64
-msgid "The following extensions will be installed:"
-msgstr "以下の拡張機能がインストールされます:"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "写真ビューアウインドウの X 座標"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:90
-msgid "<big><b>Extension Manager</b></big>"
-msgstr "<big><b>拡張機能マネージャ</b></big>"
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "メインウインドウの Y 座標"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:110
-msgid "The following extensions are currently installed:"
-msgstr "以下の拡張機能が現在インストールされています:"
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "写真ビューアーウインドウの Y 座標"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:165
-msgid "_Install Extensions..."
-msgstr "拡張機能のインストール(_I)..."
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "透過部分を示す色"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:210
-msgid "_Uninstall..."
-msgstr "アンインストール(_U)..."
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "インポートダイアログの高さ"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:236
-msgid "Enable"
-msgstr "有効化"
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "メインウィンドウの高さ"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:262
-msgid "Disable"
-msgstr "無効化"
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "写真ビューアウインドウの高さ"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:111
-msgid "Details"
-msgstr "詳細"
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "フィルムストリップを表示する際のその向き"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ManageSitesDialog.cs:34
-msgid "Extension Repository Management"
-msgstr "拡張機能リポジトリの管理"
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "フィルムストリップの向き"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:52
-msgid "Add New Repository"
-msgstr "新しいリポジトリを追加"
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "メインウインドウのサイドバーのサイズ (幅)"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:70
-msgid "Select the location of the repository you want to register:"
-msgstr "登録したいリポジトリの場所を選択して下さい:"
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "メインウインドウのサイドバーのサイズ"
 
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:77
-msgid "Register an on-line repository"
-msgstr "オンライン・リポジトリを登録する"
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "インポートダイアログの幅"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:106
-msgid "Url:"
-msgstr "URL:"
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "メインウインドウの幅"
 
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:127
-msgid "Register a local repository"
-msgstr "ローカル・リポジトリを登録する"
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "写真ビューアウインドウの幅"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:155
-msgid "Path:"
-msgstr "パス:"
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "ビューアウインドウのタイトルとして現在の写真のファイル名を用いる。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:179
-msgid "Browse..."
-msgstr "参照..."
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "インポートダイアログの幅"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:62
-msgid "Version:"
-msgstr "バージョン:"
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "メインウインドウの幅"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:65
-msgid "Author:"
-msgstr "作者:"
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "写真ビューアウインドウの幅"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:68
-msgid "Copyright:"
-msgstr "著作権:"
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "インポートダイアログのプレビュー画像ペインの幅"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:71
-msgid "Extension Dependencies:"
-msgstr "依存する拡張:"
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "メインウインドウの X 座標"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:97
-msgid "All registered repositories"
-msgstr "登録されている全てのリポジトリ"
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "写真ビューアウインドウの X 座標"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:184
-msgid "Are you sure you want to cancel the installation?"
-msgstr "本当にインストールを中止してもよろしいですか?"
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "メインウインドウの Y 座標"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:308
-msgid "The following packages will be uninstalled:"
-msgstr "以下のパッケージがアンインストールされます:"
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "写真ビューアウインドウの Y 座標"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:313
+#: ../f-spot.schemas.in.h:45
 msgid ""
-"There are other extensions that depend on the previous ones which will also "
-"be uninstalled:"
+"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 ""
-"先行してアンインストールされる拡張機能に依存する他の拡張機能があります:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:384
-msgid ""
-"The selected extensions can't be installed because there are dependency "
-"conflicts."
-msgstr "依存関係の衝突のため、選択された拡張機能はインストールできません。"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:398
-msgid "The following packages will be installed:"
-msgstr "以下のパッケージがインストールされます:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:402
-msgid " (in user directory)"
-msgstr " (ユーザ・フォルダ内)"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:408
-msgid "The following packages need to be uninstalled:"
-msgstr "以下のパッケージのアンインストールが必要です:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:416
-msgid "The following dependencies could not be resolved:"
-msgstr "以下の依存関係が解決できませんでした:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:441
-msgid "The installation has been successfully completed."
-msgstr "インストールは無事に完了しました。"
+"画像の透過部分をどのように表示するかを選択できます。このオプションは写真その"
+"ものには影響しませんが、この値を CHECK_PATTERN や CUSTOM_COLOR に設定すること"
+"は、透過部分を持つアイコンや他のアートワークを閲覧する際には有用でしょう。"
 
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:442
-msgid "The installation failed!"
-msgstr "インストールに失敗しました。"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:443
-msgid "The installation has completed with warnings."
-msgstr "警告をともないましたが、インストールは完了しました。"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:446
-msgid "The uninstallation has been successfully completed."
-msgstr "アンインストールは無事に完了しました。"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:447
-msgid "The uninstallation failed!"
-msgstr "アンインストールに失敗しました。"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:448
-msgid "The uninstallation has completed with warnings."
-msgstr "警告をともないましたが、アンインストールは完了しました。"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:616
-msgid "Repository"
-msgstr "リポジトリ"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstaller.cs:16
-msgid "Installation cancelled"
-msgstr "インストールの中止"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:159
-msgid "Some of the required extensions were not found"
-msgstr "必要な拡張機能が見つかりませんでした"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:171
-msgid "Installation failed"
-msgstr "インストールの失敗"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:91
-msgid "Extension"
-msgstr "拡張機能"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:112
-#: ../src/Widgets/InfoBox.cs:214
-msgid "Version"
-msgstr "バージョン"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:168
-msgid "Other"
-msgstr "その他"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:52
-msgid "Url"
-msgstr "URL"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:61
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:70
-#, csharp-format
-msgid "Exception occurred: {0}"
-msgstr "例外が発生しました: {0}"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:154
-msgid "Disabled extensions can't be loaded."
-msgstr "無効化された拡張機能が読み込めません"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:179
-#, csharp-format
-msgid "Loading {0} extension"
-msgstr "拡張機能 '{0}' を読み込み中"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:265
-#, csharp-format
-msgid "The required extension '{0}' is disabled."
-msgstr "必要な拡張機能 '{0}' が無効化されています。"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:267
-#, csharp-format
-msgid "The required extension '{0}' is not installed."
-msgstr "必要な拡張機能 '{0}' がインストールされていません。"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins.Description/AssemblyDependency.cs:79
-#, csharp-format
-msgid "(provided by {0})"
-msgstr "({0} が提供)"
-
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "プレビュー"
-
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "パス"
-
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:46
-msgid "File"
-msgstr "ファイル"
-
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "タグの選択"
-
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "プレビューのダウンロード中"
-
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "{0} のプレビューのダウンロード中"
-
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "ファイルのコピー中 ({0} / {1})"
-
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "ファイルの転送中にエラー"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "ダウンロードが完了しました"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "ファイルのコピーが完了しました"
-
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "カメラから \"{0}\" の転送中"
-
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:230
-msgid "Camera"
-msgstr "カメラ"
-
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "ポート"
-
-#: ../src/Core.cs:203
+#: ../src/Core/App.cs:290
 #, csharp-format
 msgid "No photos matching {0} found"
 msgstr "{0} にマッチする写真は見つかりませんでした"
 
-#: ../src/Core.cs:204
+#: ../src/Core/App.cs:291
 #, csharp-format
 msgid ""
 "The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1704,11 +1607,11 @@ msgstr ""
 "いずれかの写真に付与するか、F-Spot の設定ダイアログで別の\n"
 "タグを選択して下さい。"
 
-#: ../src/Core.cs:208
+#: ../src/Core/App.cs:295
 msgid "Search returned no results"
 msgstr "検索しましたが、何も見つかりません"
 
-#: ../src/Core.cs:209
+#: ../src/Core/App.cs:296
 msgid ""
 "The tag F-Spot is looking for does not exist. Try\n"
 "selecting a different tag in the F-Spot preference\n"
@@ -1718,37 +1621,26 @@ msgstr ""
 "F-Spot の設定ダイアログで別のタグを選択して下さい。"
 
 #. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:405
 msgid "Reparented"
 msgstr "再関連付け版"
 
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "再関連付け版 ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:422
 #, csharp-format
 msgid "Modified"
 msgid_plural "Modified ({0})"
 msgstr[0] "修正版 ({0})"
 
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1}"
 msgstr "{1} での修正版"
 
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1} ({0})"
 msgstr "{1} での修正版 ({0})"
 
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:61
-msgid "Original"
-msgstr "オリジナル"
-
 #: ../src/Editors/AutoStretchEditor.cs:17
 msgid "Auto Color"
 msgstr "色の自動調整"
@@ -1761,43 +1653,43 @@ msgstr "色の調整"
 msgid "Adjust"
 msgstr "調整"
 
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
 msgid "4 x 3 (Book)"
 msgstr "4 x 3 (ブック)"
 
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
 msgid "4 x 6 (Postcard)"
 msgstr "4 x 6 (ポストカード)"
 
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
 msgid "5 x 7 (L, 2L)"
 msgstr "5 x 7 (L, 2L)"
 
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
 msgid "8 x 10"
 msgstr "8 x 10"
 
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
 msgid "Square"
 msgstr "正方形"
 
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
 msgid "Crop"
 msgstr "切り抜き"
 
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
 msgid "Select the area that needs cropping."
 msgstr "切り抜く領域を選択して下さい。"
 
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
 msgid "No Constraint"
 msgstr "自由に切り抜く"
 
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
 msgid "Same as photo"
 msgstr "元の写真と同じアスペクト比"
 
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
 msgid "Custom Ratios..."
 msgstr "アスペクト比のカスタマイズ..."
 
@@ -1821,35 +1713,17 @@ msgstr "修正したい目を選択して下さい"
 msgid "Sepia Tone"
 msgstr "セピア調"
 
-#: ../src/Editors/SoftFocusEditor.cs:28
+#: ../src/Editors/SoftFocusEditor.cs:32
 msgid "Soft Focus"
 msgstr "ソフトフォーカス"
 
-#: ../src/Editors/TiltEditor.cs:28
+#: ../src/Editors/TiltEditor.cs:30
 msgid "Straighten"
 msgstr "傾き補正"
 
-#: ../src/FileImportBackend.cs:288
-msgid "Import error"
-msgstr "インポート・エラー"
-
-#: ../src/FileImportBackend.cs:289
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "インポート中にエラー: {0}{2}{2}{1}"
-
-#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
-#, csharp-format
-msgid "No way to save files of type \"{0}\""
-msgstr "\"{0}\" タイプのファイルを保存できません"
-
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "予期されていない例外"
-
 #: ../src/FSpot.addin.xml.h:1
-msgid "Copy Photo Locat_ion"
-msgstr "写真の場所をコピー(_I)"
+msgid "Copy Photo"
+msgstr "写真をコピー"
 
 #: ../src/FSpot.addin.xml.h:2
 msgid "Export to"
@@ -1863,13 +1737,13 @@ msgstr "別のアプリで開く(_W)"
 msgid "Rem_ove Tag"
 msgstr "タグの削除(_O)"
 
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:68
-#: ../src/SingleView.cs:451 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/SingleView.cs:427
+#: ../src/ui/main_window.ui.h:16
 msgid "Rotate _Left"
 msgstr "左へ回転(_L)"
 
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:452 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/SingleView.cs:428
+#: ../src/ui/main_window.ui.h:17
 msgid "Rotate _Right"
 msgstr "右へ回転(_R)"
 
@@ -1877,475 +1751,85 @@ msgstr "右へ回転(_R)"
 msgid "Tools"
 msgstr "ツール"
 
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "タグの付与(_A)"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:41
 msgid "_Delete From Drive"
 msgstr "ドライブから削除(_D)"
 
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:60
 msgid "_Remove From Catalog"
 msgstr "カタログから削除(_R)"
 
 #: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
-msgid "1024 px"
-msgstr "1024 px"
-
-#: ../src/f-spot.glade.h:3
-msgid "320 px"
-msgstr "320 px"
-
-#: ../src/f-spot.glade.h:4
-msgid "480 px"
-msgstr "480 px"
-
-#: ../src/f-spot.glade.h:5
-msgid "640 px"
-msgstr "640 px"
-
-#: ../src/f-spot.glade.h:6
-msgid "800 px"
-msgstr "800 px"
-
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
 msgid "<b>Co_rrections</b>"
 msgstr "<b>補正(_R)</b>"
 
-#: ../src/f-spot.glade.h:13
-msgid "<b>Image Interpolation</b>"
-msgstr "<b>画像の補正</b>"
-
-#: ../src/f-spot.glade.h:15
-msgid "<b>Size</b>"
-msgstr "<b>サイズ</b>"
-
-#: ../src/f-spot.glade.h:17
-msgid "<b>Summary</b>"
-msgstr "<b>概要</b>"
-
-#: ../src/f-spot.glade.h:18
-msgid "<b>Transparent Parts</b>"
-msgstr "<b>透過する部分</b>"
-
-#: ../src/f-spot.glade.h:19
-msgid "<b>View all pictures imported</b>"
-msgstr "<b>インポートした全ての写真の閲覧</b>"
-
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:2
 msgid "<b>_White Balance</b>"
 msgstr "<b>ホワイトバランス(_W)</b>"
 
-#: ../src/f-spot.glade.h:21
-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>画像を拡大する際の補間処理を有効化します。写真を閲覧する際は無効化"
-"すべきではありませんが、アイコンを閲覧する際に無効化することは有用でしょう。"
-"</i></small>"
-
-#: ../src/f-spot.glade.h:22
-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>画像の透過部分をどのように表示するかを選択できます。このオプション"
-"は写真そのものには影響しませんが、市松模様やカスタム色の設定は、透過部分を持"
-"つアイコンや他のアートワークを閲覧する際には有用でしょう。</i></small>"
-
-#: ../src/f-spot.glade.h:23
-msgid "As _background"
-msgstr "背景色と同じ(_B)"
-
-#: ../src/f-spot.glade.h:24
-msgid "As _custom color: "
-msgstr "カスタム色(_C): "
-
-#: ../src/f-spot.glade.h:25
-msgid "As check _pattern"
-msgstr "市松模様(_P)"
-
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "付与するタグ:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "付与するタグ:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:3
 msgid "C_ontrast:"
 msgstr "コントラスト(_C):"
 
-#: ../src/f-spot.glade.h:31
-msgid "Camera Selection"
-msgstr "カメラの選択"
-
-#: ../src/f-spot.glade.h:32
-msgid "Copy files to the Photos folder"
-msgstr "写真フォルダにファイルをコピー"
-
-#: ../src/f-spot.glade.h:33
-msgid "Create Mail"
-msgstr "メールの作成"
-
-#: ../src/f-spot.glade.h:34
-msgid "Create _icon for this tag when first used"
-msgstr "このタグを初めての利用する際にアイコンを作成する"
-
-#: ../src/f-spot.glade.h:35
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr "写真を添付したメールを作成します。(必要に応じてサイズ変更が可能です。)"
-
-#: ../src/f-spot.glade.h:36
-msgid "Detect duplicates"
-msgstr "重複の検出"
-
-#: ../src/f-spot.glade.h:37
-msgid "Display File _Names"
-msgstr "ファイル名の表示(_N)"
-
-#: ../src/f-spot.glade.h:38
-msgid "Display only those photos that were imported in specified Rolls."
-msgstr "特定のインポートロールの写真のみを表示"
-
-#: ../src/f-spot.glade.h:39
-msgid "Do not send a mail"
-msgstr "メールを送信しません。"
-
-#: ../src/f-spot.glade.h:40
-msgid "E-_Mail:"
-msgstr "E-メール:"
-
-#: ../src/f-spot.glade.h:41
-msgid "E_xport titles and comments"
-msgstr "タイトルとコメントのエキスポート(_X)"
-
-#: ../src/f-spot.glade.h:42
-msgid "Estimated new size"
-msgstr "予想される新規サイズ"
-
-#: ../src/f-spot.glade.h:44
-msgid "Extra large"
-msgstr "特大"
-
-#: ../src/f-spot.glade.h:45
-msgid "F-Spot View"
-msgstr "F-Spot ビュー"
-
-#: ../src/f-spot.glade.h:47
-msgid "Filter on selected rolls"
-msgstr "ロールの選択フィルタ"
-
-#: ../src/f-spot.glade.h:48
-msgid "G_allery:"
-msgstr "ギャラリー(_A):"
-
-#: ../src/f-spot.glade.h:49
-msgid "Gallery"
-msgstr "ギャラリー"
-
-#: ../src/f-spot.glade.h:50 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:261
-msgid "Import"
-msgstr "インポート"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:52
-msgid "Import Source:"
-msgstr "インポート元:"
-
-#: ../src/f-spot.glade.h:53
-msgid "Include subfolders"
-msgstr "サブフォルダも含める"
-
-#: ../src/f-spot.glade.h:54
-msgid "Large"
-msgstr "大"
-
-#: ../src/f-spot.glade.h:55
+#: ../src/f-spot.glade.h:4
 msgid "Manage your custom selection ratios"
 msgstr "カスタマイズされたアスペクト比を管理"
 
-#: ../src/f-spot.glade.h:56
-msgid "Medium"
-msgstr "中"
-
-#: ../src/f-spot.glade.h:58
-msgid "Number of photos in selected rolls:"
-msgstr "選択したロールに含まれる写真の枚数:"
-
-#: ../src/f-spot.glade.h:59
-msgid "Number of pictures"
-msgstr "写真の枚数"
-
-#: ../src/f-spot.glade.h:60
-msgid "Open _Folder..."
-msgstr "フォルダを開く(_F)..."
-
-#: ../src/f-spot.glade.h:62
-msgid "Original size (possible very large file size)"
-msgstr "オリジナル・サイズ (巨大なファイルサイズになる可能性があります)"
-
-#: ../src/f-spot.glade.h:63 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
-msgid "P_arent Tag:"
-msgstr "親タグ(_A):"
-
-#: ../src/f-spot.glade.h:64
-msgid "Pause"
-msgstr "一時停止"
-
-#: ../src/f-spot.glade.h:65
-msgid "Preferences"
-msgstr "設定"
-
-#: ../src/f-spot.glade.h:66 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "前へ"
-
-#: ../src/f-spot.glade.h:67
-msgid "Repair"
-msgstr "復元"
-
-#: ../src/f-spot.glade.h:70
-msgid "Select Photos to Copy From Camera..."
-msgstr "カメラからコピーする写真の選択..."
-
-#: ../src/f-spot.glade.h:71
+#: ../src/f-spot.glade.h:5
 msgid "Select a Tag..."
 msgstr "タグの選択..."
 
-#: ../src/f-spot.glade.h:72
-msgid "Select the camera from which you want to transfer files"
-msgstr "ファイルを転送するカメラを選択して下さい"
-
-#: ../src/f-spot.glade.h:73
-msgid "Selected Camera: "
-msgstr "選択したカメラ: "
-
-#: ../src/f-spot.glade.h:74
+#: ../src/f-spot.glade.h:6
 msgid "Selection Constraints"
 msgstr "アスペクト比の管理"
 
-#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:21
-msgid "Set as _Background"
-msgstr "背景に設定(_B)"
-
-#: ../src/f-spot.glade.h:76
-msgid "Show all photos."
-msgstr "すべての写真を表示"
-
-#: ../src/f-spot.glade.h:77
-msgid "Show or hide the side pane"
-msgstr "サイドペインの表示/非表示"
-
-#: ../src/f-spot.glade.h:78
-msgid "Show or hide the toolbar"
-msgstr "ツールバーの表示/非表示"
-
-#: ../src/f-spot.glade.h:79
-msgid "Side _pane"
-msgstr "サイドペイン(_P)"
-
-#: ../src/f-spot.glade.h:80
-msgid "Small"
-msgstr "小"
-
-#: ../src/f-spot.glade.h:81
-msgid ""
-"Specify if an original size picture should be rotated or not. Smaller sizes "
-"are automatically rotated."
-msgstr ""
-"オリジナルサイズの写真を自動回転するかどうかを指定します。サイズを縮小した場"
-"合は自動回転されます。"
-
-#: ../src/f-spot.glade.h:82
-msgid "Strip image _metadata"
-msgstr "画像からメタデータを除去(_M)"
-
 #. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:84
+#: ../src/f-spot.glade.h:8
 msgid "Te_mp:"
 msgstr "色温度(_M)"
 
-#: ../src/f-spot.glade.h:85
-msgid "Tiny"
-msgstr "最小"
-
-#: ../src/f-spot.glade.h:86
-msgid "Total original size"
-msgstr "オリジナルの合計サイズ"
-
-#: ../src/f-spot.glade.h:87 ../src/ui/main_window.ui.h:28
-msgid "Zoom _in"
-msgstr "拡大(_I)"
-
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:29
-msgid "Zoom _out"
-msgstr "縮小(_O)"
-
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:30
-msgid "Zoom in"
-msgstr "拡大"
-
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:31
-msgid "Zoom out"
-msgstr "縮小"
-
-#: ../src/f-spot.glade.h:91
+#: ../src/f-spot.glade.h:9
 msgid "_Brightness:"
 msgstr "輝度(_B):"
 
-#: ../src/f-spot.glade.h:93
-msgid "_Create Mail"
-msgstr "メールの作成(_C)"
-
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
-msgid "_Edit"
-msgstr "編集(_E)"
-
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:10
 msgid "_Exposure:"
 msgstr "露出(_E):"
 
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "Flickr(_F)"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
-msgid "_Fullscreen"
-msgstr "フルスクリーン表示(_F)"
-
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "ギャラリー(_G)"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
-msgid "_Help"
-msgstr "ヘルプ(_H)"
-
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:11
 msgid "_Hue:"
 msgstr "色相(_H):"
 
-#: ../src/f-spot.glade.h:104
-msgid "_Interpolate image on zoom"
-msgstr "拡大時に画像を補間(_I)"
-
-#: ../src/f-spot.glade.h:105
-msgid "_New Window"
-msgstr "新しいウインドウ(_N)"
-
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "アップロードが完了したらブラウザでアルバムを開く(_O)"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "エキスポートが完了したら転送先を開く(_O)"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
-msgid "_Photo"
-msgstr "写真(_P)"
-
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:12
 msgid "_Saturation:"
 msgstr "彩度(_S):"
 
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "写真のサイズを以下に収まるように変更(_S): "
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
-msgid "_Slideshow"
-msgstr "スライドショー(_S)"
-
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "メタデータを除去(_S)"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
-msgid "_Tag Name:"
-msgstr "タグ名(_T):"
-
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:13
 msgid "_Tint:"
 msgstr "色合い(_T):"
 
-#: ../src/f-spot.glade.h:116
-msgid "_Toolbar"
-msgstr "ツールバー(_T)"
-
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "URI(_U):"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
-msgid "_View"
-msgstr "表示(_V)"
-
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "仮想ファイルシステム(_V)"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
-msgid "and"
-msgstr "と"
-
-#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
-msgid ""
-"at\n"
-"after\n"
-"between"
-msgstr ""
-"これのみ\n"
-"これ以降\n"
-"この間"
-
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
 #: ../src/FullScreenView.cs:58
 msgid "Hide"
 msgstr "非表示"
 
 #: ../src/FullScreenView.cs:60
-msgid "Hide Toolbar"
+msgid "Hide toolbar"
 msgstr "ツールバーの非表示"
 
 #: ../src/FullScreenView.cs:66
 msgid "Info"
 msgstr "情報"
 
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:200
-msgid "Image Information"
+#: ../src/FullScreenView.cs:68
+msgid "Image information"
 msgstr "画像情報"
 
 #: ../src/FullScreenView.cs:73
 msgid "Exit fullscreen"
 msgstr "フルスクリーン表示の解除"
 
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:301
-#: ../src/SingleView.cs:101
+#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:314
+#: ../src/SingleView.cs:91
 msgid "Slideshow"
 msgstr "スライドショー"
 
@@ -2365,203 +1849,16 @@ msgstr "他の日付"
 msgid "More"
 msgstr "その他"
 
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:34
 msgid "_Clear Date Range"
 msgstr "表示期間の解除(_C)"
 
-#: ../src/Imaging/Exif.cs:228
-msgid "Image Directory"
-msgstr "画像ディレクトリ"
-
-#: ../src/Imaging/Exif.cs:230
-msgid "Thumbnail Directory"
-msgstr "サムネイル・ディレクトリ"
-
-#: ../src/Imaging/Exif.cs:232
-msgid "Exif Directory"
-msgstr "Exif ディレクトリ"
-
-#: ../src/Imaging/Exif.cs:234
-msgid "GPS Directory"
-msgstr "GPS ディレクトリ"
-
-#: ../src/Imaging/Exif.cs:236
-msgid "InterOperability Directory"
-msgstr "相互運用ディレクトリ"
-
-#: ../src/Imaging/Exif.cs:238
-msgid "Unknown Directory"
-msgstr "不明なディレクトリ"
-
-#: ../src/Imaging/ImageFile.cs:116
-msgid "Writing to this file format is not supported"
-msgstr "このファイル形式への書き込みはサポートされていません"
-
-#: ../src/Imaging/IptcFile.cs:145
-msgid "IPTC Information Interchange Model (IIM) Version number"
-msgstr "IPTC 情報交換モデル (IIM) バージョン番号"
-
-#: ../src/Imaging/IptcFile.cs:147
-msgid "OSI Destination routing information"
-msgstr "OSI 宛先ルーティング情報"
-
-#: ../src/Imaging/IptcFile.cs:149
-msgid "IPTC file format"
-msgstr "IPTC ファイル形式"
-
-#: ../src/Imaging/IptcFile.cs:151
-msgid "Identifies the provider and product"
-msgstr "提供者や製品を識別します"
-
-#: ../src/Imaging/IptcFile.cs:153
-msgid "A unique number identifying the envelope"
-msgstr "固有のエンベロープ識別番号"
-
-#: ../src/Imaging/IptcFile.cs:155
-msgid "A unique number"
-msgstr "固有の番号"
-
-#: ../src/Imaging/IptcFile.cs:157
-msgid ""
-"The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
-msgstr "1 (最優先) 〜 9 (優先度低) の優先度を分類するエンベロープ"
-
-#: ../src/Imaging/IptcFile.cs:159
-msgid "The year, month and day (CCYYMMDD) the service sent the material"
-msgstr "サービスが素材を送信した年月日 (CCYYMMDD)"
-
-#: ../src/Imaging/IptcFile.cs:161
-msgid "The hour, minute and second (HHMMSS) the service sent the material"
-msgstr "サービスが素材を送信した時分秒 (HHMMSS)"
-
-#: ../src/Imaging/IptcFile.cs:163
-msgid "The character set designation"
-msgstr "文字コードの指定"
-
-#: ../src/Imaging/IptcFile.cs:165
-msgid "External globally unique object identifier"
-msgstr "グローバルな固有の外部オブジェクト識別子"
-
-#: ../src/Imaging/IptcFile.cs:170
-msgid "Abstract Relationship Method (ARM) identifier"
-msgstr "ARM (Abstract Relationship Method) 識別子"
-
-#: ../src/Imaging/IptcFile.cs:172
-msgid "Abstract Relationship Method (ARM) version number."
-msgstr "ARM (Abstract Relationship Method) バージョン番号"
-
-#: ../src/Imaging/IptcFile.cs:175
-msgid "Number identifying the IIM version this application record uses"
-msgstr "このアプリケーションレコードが使用する IIM バージョンを識別する番号"
-
-#: ../src/Imaging/IptcFile.cs:177
-msgid "Object type reference"
-msgstr "オブジェクト・タイプのリファレンス"
-
-#: ../src/Imaging/IptcFile.cs:182
-msgid "Object attribute reference"
-msgstr "オブジェクト属性のリファレンス"
-
-#: ../src/Imaging/IptcFile.cs:188 ../src/Imaging/IptcFile.cs:192
-msgid "Object name"
-msgstr "オブジェクト名"
-
-#: ../src/Imaging/IptcFile.cs:190
-msgid "Status of the objectdata according to the provider"
-msgstr "提供者によるオブジェクト・データの状態"
-
-#: ../src/Imaging/IptcFile.cs:194
-msgid "Location within a city or area where the object originates"
-msgstr "オブジェクトが生成された都市または地域内の場所"
-
-#: ../src/Imaging/IptcFile.cs:197
-msgid "Name of the city the content is focussing on"
-msgstr "コンテンツが対象とする都市の名前"
-
-#: ../src/Imaging/IptcFile.cs:200
-msgid "Copyright information for"
-msgstr "著作権情報:"
-
-#: ../src/Imaging/IptcFile.cs:203
-msgid "Full name of the country of the focus of the content"
-msgstr "コンテンツが対象とする国の正式名"
-
-#: ../src/Imaging/IptcFile.cs:206
-msgid ""
-"Two or three letter ISO3166 code of the country of the focus of the content"
-msgstr "コンテンツが対象とする国を表す 2、3 文字の ISO3166 コード"
-
-#: ../src/Imaging/IptcFile.cs:209
-msgid "Creator of the content"
-msgstr "コンテンツ作成者"
-
-#: ../src/Imaging/IptcFile.cs:212
-msgid "Provider of the object"
-msgstr "オブジェクト提供者"
-
-#: ../src/Imaging/IptcFile.cs:215
-msgid "The title of the author or creator"
-msgstr "著者もしくは作成者の肩書き"
-
-#: ../src/Imaging/IptcFile.cs:218
-msgid ""
-"The person involved in writing, editing or correcting the object data or "
-"caption/abstract"
-msgstr "オブジェクトデータやキャプション/概要の執筆、編集、訂正に携わった者"
-
-#: ../src/Imaging/IptcFile.cs:222
-msgid "Headline of the content"
-msgstr "コンテンツの見出し"
-
-#: ../src/Imaging/IptcFile.cs:225
-msgid ""
-"Instructions from the creator to the receiver not covered by other fields"
-msgstr "作成者による受信者への説明のうち、他のフィールドでカバーされないもの"
-
-#: ../src/Imaging/IptcFile.cs:228
-msgid "Intellectual genre of the object"
-msgstr "オブジェクトのジャンル"
-
-#: ../src/Imaging/IptcFile.cs:241
-msgid "Unknown IIM DataSet"
-msgstr "不明な IIM データセット"
-
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:357
-msgid "Select Folder"
-msgstr "フォルダの選択"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(カメラは検出されていません)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "読み込み中 ({0} / {1})"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "読み込みが完了しました"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "フォルダがありません。"
+#: ../src/Import/ImportController.cs:468 ../src/Import/ImportController.cs:470
+#: ../src/Import/MetadataImporter.cs:50
+msgid "Imported Tags"
+msgstr "インポートされたタグ"
 
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist.  Please choose a "
-"different directory"
-msgstr ""
-"指定したフォルダ \"{0}\" は存在しません。他のフォルダを選択して下さい。"
-
-#. Note for translators: 'Import Tags' is no command, it means 'Tags used in Import'
-#: ../src/ImportCommand.cs:739 ../src/ImportCommand.cs:741
-#: ../src/XmpTagsImporter.cs:89
-msgid "Import Tags"
-msgstr "インポート時のタグ"
-
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:268 ../src/SingleView.cs:84
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:281 ../src/SingleView.cs:74
 msgid "Rotate Left"
 msgstr "左へ回転"
 
@@ -2569,7 +1866,7 @@ msgstr "左へ回転"
 msgid "Rotate picture left"
 msgstr "写真を左へ回転"
 
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:272 ../src/SingleView.cs:89
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:285 ../src/SingleView.cs:79
 msgid "Rotate Right"
 msgstr "右へ回転"
 
@@ -2581,149 +1878,154 @@ msgstr "写真を右へ回転"
 msgid "Next picture"
 msgstr "次の写真"
 
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "前へ"
+
 #: ../src/ItemAction.cs:124
 msgid "Previous picture"
 msgstr "前の写真"
 
-#: ../src/MainWindow.cs:263
+#: ../src/Jobs/SyncMetadataJob.cs:73
+#, csharp-format
+msgid ""
+"Metadata of file {0} may be corrupt, refusing to write to it, falling back "
+"to XMP sidecar."
+msgstr ""
+"ファイル {0} のメタデータは壊れているようで、書き込みをしえいます。XMP サイド"
+"カーにフォールバックします。"
+
+#: ../src/MainWindow.cs:274 ../src/UI.Dialog/ImportDialog.cs:193
+#: ../src/ui/import.ui.h:4
+msgid "Import"
+msgstr "インポート"
+
+#: ../src/MainWindow.cs:276
 msgid "Import new images"
 msgstr "新しい画像をインポートします"
 
-#: ../src/MainWindow.cs:279 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:292 ../src/ui/main_window.ui.h:3
 msgid "Browse"
 msgstr "参照"
 
-#: ../src/MainWindow.cs:283
+#: ../src/MainWindow.cs:296
 msgid "Browse many photos simultaneously"
 msgstr "たくさんの写真を同時に閲覧します"
 
-#: ../src/MainWindow.cs:287
+#: ../src/MainWindow.cs:300
 msgid "Edit Image"
 msgstr "画像の編集"
 
-#: ../src/MainWindow.cs:291
+#: ../src/MainWindow.cs:304
 msgid "View and edit a photo"
 msgstr "写真を閲覧・編集します"
 
-#: ../src/MainWindow.cs:296 ../src/SingleView.cs:96
+#: ../src/MainWindow.cs:309 ../src/SingleView.cs:86
 msgid "Fullscreen"
 msgstr "フルスクリーン表示"
 
-#: ../src/MainWindow.cs:298 ../src/SingleView.cs:98
+#: ../src/MainWindow.cs:311 ../src/SingleView.cs:88
 msgid "View photos fullscreen"
 msgstr "写真をフルスクリーン表示します"
 
-#: ../src/MainWindow.cs:303 ../src/SingleView.cs:103
+#: ../src/MainWindow.cs:316 ../src/SingleView.cs:93
 msgid "View photos in a slideshow"
 msgstr "スライドショーで写真を閲覧します"
 
-#: ../src/MainWindow.cs:318
+#: ../src/MainWindow.cs:331
 msgid "Previous photo"
 msgstr "前の写真"
 
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:336
 msgid "Next photo"
 msgstr "次の写真"
 
-#: ../src/MainWindow.cs:1483
-msgid "No cameras detected."
-msgstr "カメラが検出されていません。"
-
-#: ../src/MainWindow.cs:1484
-msgid ""
-"F-Spot was unable to find any cameras attached to this system.  Double check "
-"that the camera is connected and has power"
-msgstr ""
-"お使いのシステムに接続されているカメラを検出できませんでした。カメラが接続さ"
-"れているかどうか、その電源が入っているかどうかを確認して下さい。"
-
-#: ../src/MainWindow.cs:1523
-msgid "Error connecting to camera"
-msgstr "カメラへ接続する際にエラー"
+#: ../src/MainWindow.cs:413
+msgid "Show _Find Bar"
+msgstr "検索バーの表示(_F)"
 
-#: ../src/MainWindow.cs:1524
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "カメラへ接続する際にエラー \"{0}\" を受け取りました。"
+#: ../src/MainWindow.cs:416
+msgid "Hide _Find Bar"
+msgstr "検索バーの非表示(_F)"
 
 #. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1811
+#: ../src/MainWindow.cs:1724
 #, csharp-format
 msgid "Merge the selected tag"
 msgid_plural "Merge the {0} selected tags?"
 msgstr[0] "選択した {0} 個のタグをマージしますか?"
 
-#: ../src/MainWindow.cs:1838
+#: ../src/MainWindow.cs:1751
 msgid ""
 "This operation will merge the selected tags and any sub-tags into a single "
 "tag."
 msgstr "この操作は選択した全てのタグおよび子タグをひとつにまとめます。"
 
-#: ../src/MainWindow.cs:1840
+#: ../src/MainWindow.cs:1753
 msgid "_Merge Tags"
 msgstr "タグのマージ(_M)"
 
-#: ../src/MainWindow.cs:2045
+#: ../src/MainWindow.cs:1958
 #, csharp-format
 msgid "{0} Photo out of {1}"
 msgid_plural "{0} Photos out of {1}"
 msgstr[0] "{1} 枚中 {0} 枚の写真"
 
-#: ../src/MainWindow.cs:2047 ../src/SingleView.cs:493
+#: ../src/MainWindow.cs:1960 ../src/SingleView.cs:469
 #, csharp-format
 msgid "{0} Photo"
 msgid_plural "{0} Photos"
 msgstr[0] "{0} 枚の写真"
 
-#: ../src/MainWindow.cs:2050
+#: ../src/MainWindow.cs:1963
 #, csharp-format
 msgid " ({0} selected)"
 msgid_plural " ({0} selected)"
 msgstr[0] " ({0} 枚を選択中)"
 
-#: ../src/MainWindow.cs:2131
+#: ../src/MainWindow.cs:2044
 msgid "_Ok"
 msgstr "OK (_O)"
 
-#: ../src/MainWindow.cs:2132
+#: ../src/MainWindow.cs:2045
 msgid "Error Deleting Picture"
 msgstr "写真の削除エラー"
 
-#: ../src/MainWindow.cs:2137
+#: ../src/MainWindow.cs:2050
 #, csharp-format
 msgid "No permission to delete the file:{1}{0}"
 msgstr "このファイルを削除する権限がありません: {1}{0}"
 
-#: ../src/MainWindow.cs:2141
+#: ../src/MainWindow.cs:2054
 #, csharp-format
 msgid "An error of type {0} occurred while deleting the file:{2}{1}"
 msgstr "ファイルの削除の際にタイプ {0} のエラーが発生しました: {2}{1}"
 
-#: ../src/MainWindow.cs:2173
+#: ../src/MainWindow.cs:2086
 #, csharp-format
 msgid "Delete the selected photo permanently?"
 msgid_plural "Delete the {0} selected photos permanently?"
 msgstr[0] "選択した {0} 枚の写真を完全に削除しますか?"
 
-#: ../src/MainWindow.cs:2177
+#: ../src/MainWindow.cs:2090
 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] ""
 "これによりお使いのドライブから選択した写真の全てのバージョンを削除します。"
 
-#: ../src/MainWindow.cs:2180
+#: ../src/MainWindow.cs:2093
 msgid "_Delete photo"
 msgid_plural "_Delete photos"
 msgstr[0] "写真の削除(_D)"
 
-#: ../src/MainWindow.cs:2216
+#: ../src/MainWindow.cs:2129
 #, csharp-format
 msgid "Remove the selected photo from F-Spot?"
 msgid_plural "Remove the {0} selected photos from F-Spot?"
 msgstr[0] "選択した写真 {0} 枚を F-Spot から削除しますか?"
 
-#: ../src/MainWindow.cs:2221
+#: ../src/MainWindow.cs:2134
 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 "
@@ -2732,43 +2034,43 @@ msgstr ""
 "カタログから写真を削除すると、全てのタグ情報が失われます。お使いのコンピュー"
 "タ上に残っている写真を再度 F-Spot にインポートすることは可能です。"
 
-#: ../src/MainWindow.cs:2222
+#: ../src/MainWindow.cs:2135
 msgid "_Remove from Catalog"
 msgstr "カタログから削除する(_R)"
 
-#: ../src/MainWindow.cs:2285
+#: ../src/MainWindow.cs:2209
 #, csharp-format
 msgid "Delete tag \"{0}\"?"
 msgstr "タグ \"{0}\" を削除しますか?"
 
-#: ../src/MainWindow.cs:2287
+#: ../src/MainWindow.cs:2211
 #, csharp-format
 msgid "Delete the {0} selected tags?"
 msgstr "選択した {0} 個のタグを削除しますか?"
 
-#: ../src/MainWindow.cs:2292
+#: ../src/MainWindow.cs:2216
 msgid "photo"
 msgid_plural "photos"
 msgstr[0] "写真"
 
-#: ../src/MainWindow.cs:2294
+#: ../src/MainWindow.cs:2218
 #, 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] "タグを削除すると、{0} 枚の{1}の関連付けが失われます。"
 
-#: ../src/MainWindow.cs:2299
+#: ../src/MainWindow.cs:2223
 msgid "_Delete tag"
 msgid_plural "_Delete tags"
 msgstr[0] "タグを削除する(_D)"
 
 #. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2313
+#: ../src/MainWindow.cs:2237
 msgid "Tag is not empty"
 msgstr "タグは空ではありません"
 
-#: ../src/MainWindow.cs:2314
+#: ../src/MainWindow.cs:2238
 #, csharp-format
 msgid ""
 "Can not delete tags that have tags within them.  Please delete tags under "
@@ -2777,34 +2079,34 @@ msgstr ""
 "別のタグを含んでいるため、タグを削除できませんでした。まず \"{0}\" 以下にある"
 "タグを削除して下さい。"
 
-#: ../src/MainWindow.cs:2746
+#: ../src/MainWindow.cs:2678
 msgid "Rotate selected photo left"
 msgid_plural "Rotate selected photos left"
 msgstr[0] "選択した写真を左へ回転します"
 
-#: ../src/MainWindow.cs:2759
+#: ../src/MainWindow.cs:2691
 msgid "Rotate selected photo right"
 msgid_plural "Rotate selected photos right"
 msgstr[0] "選択した写真を右へ回転します"
 
-#: ../src/MainWindow.cs:2770
+#: ../src/MainWindow.cs:2702
 #, csharp-format
 msgid "Find _Selected Tag"
 msgid_plural "Find _Selected Tags"
 msgstr[0] "選択したタグを検索(_S)"
 
-#: ../src/MainWindow.cs:2774
+#: ../src/MainWindow.cs:2706
 #, csharp-format
 msgid "Find Selected Tag _With"
 msgid_plural "Find Selected Tags _With"
 msgstr[0] "選択したタグでさらに検索(_W)"
 
-#: ../src/MainWindow.cs:2815
+#: ../src/MainWindow.cs:2747
 msgid "Create New Version?"
 msgid_plural "Create New Versions?"
 msgstr[0] "新しいバージョンを作成しますか?"
 
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2749
 #, csharp-format
 msgid ""
 "Before launching {1}, should F-Spot create a new version of the selected "
@@ -2816,273 +2118,168 @@ msgstr[0] ""
 "オリジナルを維持するために、\"{1}\" 用に選択した写真の新しいバージョンを作成"
 "しますか?"
 
-#: ../src/MainWindow.cs:2839
+#: ../src/MainWindow.cs:2771
 msgid "XCF version"
 msgstr "XCF バージョン"
 
-#: ../src/MetadataStore.cs:19
-msgid "Creator"
-msgstr "作成者"
-
-#: ../src/MetadataStore.cs:20
-msgid "Title"
-msgstr "タイトル"
-
-#: ../src/MetadataStore.cs:21
-msgid "Copyright"
-msgstr "著作権"
-
-#: ../src/MetadataStore.cs:22
-msgid "Subject and Keywords"
-msgstr "テーマとキーワード"
-
-#: ../src/MetadataStore.cs:23
-msgid "Compression"
-msgstr "圧縮"
-
-#: ../src/MetadataStore.cs:25
-msgid "Planar Configuration"
-msgstr "画像データの並び"
-
-#: ../src/MetadataStore.cs:27
-msgid "Orientation"
-msgstr "画像方向"
-
-#: ../src/MetadataStore.cs:29
-msgid "Photometric Interpretation"
-msgstr "露出計の動作モード"
-
-#: ../src/MetadataStore.cs:31
-msgid "Resolution Unit"
-msgstr "解像度単位"
-
-#: ../src/MetadataStore.cs:33
-msgid "Exposure Program"
-msgstr "露出プログラム"
-
-#: ../src/MetadataStore.cs:35
-msgid "Metering Mode"
-msgstr "測光モード"
-
-#: ../src/MetadataStore.cs:37
-msgid "Exposure Mode"
-msgstr "露出モード"
-
-#: ../src/MetadataStore.cs:39
-msgid "Custom Rendered"
-msgstr "カスタムイメージプロセッシング"
-
-#: ../src/MetadataStore.cs:41
-msgid "Components Configuration"
-msgstr "各コンポーネントの意味"
-
-#: ../src/MetadataStore.cs:43
-msgid "Light Source"
-msgstr "光源"
-
-#: ../src/MetadataStore.cs:45
-msgid "Sensing Method"
-msgstr "センサー方式"
-
-#: ../src/MetadataStore.cs:47
-msgid "Color Space"
-msgstr "色空間情報"
-
-#: ../src/MetadataStore.cs:49
-msgid "White Balance"
-msgstr "ホワイトバランス"
-
-#: ../src/MetadataStore.cs:51
-msgid "Focal Plane Resolution Unit"
-msgstr "焦点面解像度単位"
-
-#: ../src/MetadataStore.cs:53
-msgid "File Source Type"
-msgstr "ファイルソースの種類"
-
-#: ../src/MetadataStore.cs:55
-msgid "Scene Capture Type"
-msgstr "シーン撮影タイプ"
-
-#: ../src/MetadataStore.cs:57
-msgid "Gain Control"
-msgstr "ゲインコントロール"
-
-#: ../src/MetadataStore.cs:59
-msgid "Contrast"
-msgstr "コントラスト"
-
-#: ../src/MetadataStore.cs:61
-msgid "Saturation"
-msgstr "彩度"
-
-#: ../src/MetadataStore.cs:63
-msgid "Sharpness"
-msgstr "シャープネス"
-
-#: ../src/MetadataStore.cs:65
-msgid "Scene Type"
-msgstr "シーンのタイプ"
+#: ../src/PhotoStore.cs:165 ../src/ui/mail_dialog.ui.h:17
+msgid "Original"
+msgstr "オリジナル"
 
 #. Fixme this should really set parent menu
 #. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
 msgid "(No Tags)"
 msgstr "(タグなし)"
 
-#: ../src/PhotoVersionCommands.cs:58
+#: ../src/PhotoVersionCommands.cs:59
 msgid "Create New Version"
 msgstr "新しいバージョンの作成"
 
-#: ../src/PhotoVersionCommands.cs:59
+#: ../src/PhotoVersionCommands.cs:60
 msgid "Name:"
 msgstr "名前:"
 
-#: ../src/PhotoVersionCommands.cs:63
+#: ../src/PhotoVersionCommands.cs:64
 msgid "Rename Version"
 msgstr "バージョン名の変更"
 
-#: ../src/PhotoVersionCommands.cs:64
+#: ../src/PhotoVersionCommands.cs:65
 msgid "New name:"
 msgstr "新しい名前:"
 
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "新しいバージョンを作成できませんでした"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "例外 \"{0}\" が発生しました。バージョン \"{1}\" を作成できません。"
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "本当に削除してもよろしいですか?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "キャンセル"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:125
 msgid "Delete"
 msgstr "削除"
 
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:126
 #, csharp-format
 msgid "Really delete version \"{0}\"?"
 msgstr "本当にバージョン \"{0}\" を削除してもよろしいですか?"
 
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "バージョンを削除できませんでした"
+#: ../src/PhotoVersionCommands.cs:127
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "このバージョンを削除し、ディスクから対応するファイルを削除します。"
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid "De_tach"
+msgstr "関連付けの解除(_T)"
 
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:173
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "例外 \"{0}\" が発生しました。バージョン \"{1}\" を削除できません。"
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr ""
+"本当にバージョン \"{0}\" の \"{1}\" との関連づけを解除してもよろしいですか?"
+
+#: ../src/PhotoVersionCommands.cs:174
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"このバージョンをライブラリで独立した別の写真とします。やり直すには、この新し"
+"い写真をその親にドラッグしてください。"
 
 #: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "バージョン名を変更できませんでした"
+msgid "Re_parent"
+msgstr "再関連付け(_P)"
 
 #: ../src/PhotoVersionCommands.cs:197
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] ""
+"本当に {2} 枚の写真を \"{1}\" のバージョンとして関連付けてもよろしいですか?"
+
+#: ../src/PhotoVersionCommands.cs:200
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
 msgstr ""
-"例外 \"{0}\" が発生しました。バージョン \"{1}\" の名前を変更できません。"
+"この写真をライブラリで独立した 1 枚の写真とします。このバージョンの関連づけは"
+"写真メニューから解除できます。"
+
+#: ../src/PhotoVersionCommands.cs:240
+#, csharp-format
+msgid "Received exception \"{0}\"."
+msgstr "例外 \"{0}\" が発生しました。"
 
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:562
-#: ../src/Widgets/InfoBox.cs:564
+#: ../src/PhotoVersionMenu.cs:54 ../src/Widgets/InfoBox.cs:470
 msgid "(No Edits)"
 msgstr "(未編集)"
 
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "写真の編集エラー"
+#: ../src/PhotoView.cs:336
+msgid "Description:"
+msgstr "説明:"
 
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "例外 \"{0}\" が発生しました。写真 {1} を保存できませんでした。"
-
-#: ../src/PhotoView.cs:356
-msgid "Comment:"
-msgstr "コメント:"
-
-#: ../src/Preferences.cs:149
+#: ../src/Preferences.cs:157
 msgid "Photos"
 msgstr "写真"
 
-#: ../src/PrintOperation.cs:32
+#: ../src/PrintOperation.cs:33
 msgid "Image Settings"
 msgstr "画像の設定"
 
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
 msgid "Find: "
 msgstr "検索: "
 
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
 msgid "Untagged photos"
 msgstr "タグのない写真"
 
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
 msgid "Rated photos"
 msgstr "評価済みの写真"
 
 #. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
 msgid "Import roll"
 msgstr "インポートロール"
 
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
 msgid "Clear search"
 msgstr "検索の解除"
 
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
 msgid "Refresh search"
 msgstr "再検索"
 
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
 msgid "No matching photos found"
 msgstr "マッチする写真は見つかりませんでした"
 
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "検索バーの非表示(_F)"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "検索バーの表示(_F)"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:74
 msgid "Unable to rotate this type of photo"
 msgstr "この形式の写真は回転できません"
 
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:93
 msgid "Unable to rotate readonly file"
 msgstr "読み込み専用ファイルは回転できません"
 
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:156
 msgid "Rotating photos"
 msgstr "写真を回転中"
 
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:167
 #, csharp-format
 msgid "Rotating photo \"{0}\""
 msgstr "写真 \"{0}\" の回転中"
 
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:180
 msgid "Directory not found"
 msgstr "フォルダが見つかりません"
 
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:182
+msgid "File not found"
+msgstr "ファイルが見つかりません"
+
+#: ../src/RotateCommand.cs:200
 #, csharp-format
 msgid "Unable to rotate photo"
 msgid_plural "Unable to rotate {0} photos"
 msgstr[0] "{0} 枚の写真を回転できません"
 
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:202
 #, csharp-format
 msgid ""
 "The photo could not be rotated because it is on a read only file system or "
@@ -3095,88 +2292,97 @@ msgstr[0] ""
 "枚の写真を回転させることができませんでした。権限を確認してやり直してみて下さ"
 "い。"
 
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:229
 #, csharp-format
 msgid "Received error \"{0}\" while attempting to rotate {1}"
 msgstr "{1} の回転中にエラー \"{0}\" が発生しました"
 
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:234
 msgid "Error while rotating photo."
 msgstr "写真の回転中にエラー"
 
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:211
 msgid "Preparing email"
 msgstr "E-メールを準備中"
 
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:255
 #, csharp-format
 msgid "Exporting picture \"{0}\""
 msgstr "写真 \"{0}\" をエキスポート中"
 
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:274
 msgid "Error processing image"
 msgstr "画像処理エラー"
 
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:275
 #, csharp-format
 msgid "An error occured while processing \"{0}\": {1}"
 msgstr "\"{0}\" の処理中にエラー: {1}"
 
 #. Send the mail :)
-#: ../src/SendEmail.cs:330
-msgid "my photos"
-msgstr "私の写真"
+#: ../src/SendEmail.cs:288
+msgid "My Photos"
+msgstr "写真"
 
-#: ../src/Sharpener.cs:72
+#: ../src/Sharpener.cs:73
 msgid "Error saving sharpened photo"
 msgstr "シャープ化した写真の保存する際にエラー"
 
-#: ../src/Sharpener.cs:102
+#: ../src/Sharpener.cs:74 ../src/UI.Dialog/EditExceptionDialog.cs:27
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "例外 \"{0}\" が発生しました。写真 {1} を保存できませんでした。"
+
+#: ../src/Sharpener.cs:103
 msgid "Sharpen"
 msgstr "シャープ化"
 
-#: ../src/Sharpener.cs:112
+#: ../src/Sharpener.cs:113
 msgid "Amount:"
 msgstr "量:"
 
-#: ../src/Sharpener.cs:113
+#: ../src/Sharpener.cs:114
 msgid "Radius:"
 msgstr "半径:"
 
-#: ../src/Sharpener.cs:114
+#: ../src/Sharpener.cs:115
 msgid "Threshold:"
 msgstr "しきい値:"
 
-#: ../src/SingleView.cs:86
+#: ../src/SingleView.cs:76
 msgid "Rotate photo left"
 msgstr "写真を左へ回転"
 
-#: ../src/SingleView.cs:91
+#: ../src/SingleView.cs:81
 msgid "Rotate photo right"
 msgstr "写真を右へ回転"
 
-#: ../src/SingleView.cs:128
+#: ../src/SingleView.cs:118
 msgid "Folder"
 msgstr "フォルダ"
 
-#: ../src/SingleView.cs:354
+#: ../src/SingleView.cs:343
 msgid "Open"
 msgstr "開く"
 
-#: ../src/SingleView.cs:454
+#: ../src/SingleView.cs:346
+msgid "Select Folder"
+msgstr "フォルダの選択"
+
+#: ../src/SingleView.cs:430
 msgid "Set as Background"
 msgstr "背景に設定"
 
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:116 ../src/TagSelectionWidget.cs:492
+#: ../src/UI.Dialog/EditTagDialog.cs:76
 msgid "This name is already in use"
 msgstr "この名前は既に使われています"
 
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:166
 msgid "Create New Tag"
 msgstr "新しいタグの作成"
 
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:167
 msgid "Name of New Tag:"
 msgstr "新しいタグの名前:"
 
@@ -3186,13 +2392,13 @@ msgid "Find"
 msgid_plural "Find"
 msgstr[0] "検索"
 
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
 msgid "Create New Tag..."
 msgstr "新しいタグの作成..."
 
 #: ../src/TagPopup.cs:42
-msgid "Edit Selected Tag..."
-msgstr "選択したタグの編集..."
+msgid "Edit Tag..."
+msgstr "タグの編集..."
 
 #: ../src/TagPopup.cs:46
 msgid "Delete Tag"
@@ -3237,41 +2443,41 @@ msgstr[0] "さらに検索(_W)"
 msgid "All"
 msgstr "全て"
 
-#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:592
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
 #, csharp-format
 msgid "Not {0}"
 msgstr "{0} ではない"
 
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
 msgid "Drag tags here to search for them"
 msgstr "検索するタグをこちらにドラッグして下さい"
 
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:491
 msgid "Error renaming tag"
 msgstr "タグの改名の際にエラー"
 
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:205
 msgid "Favorites"
 msgstr "お気に入り"
 
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:210
 msgid "Hidden"
 msgstr "秘密"
 
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:218
 msgid "People"
 msgstr "人々"
 
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:223
 msgid "Places"
 msgstr "場所"
 
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:228
 msgid "Events"
 msgstr "イベント"
 
 #. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:408
+#: ../src/TagStore.cs:241 ../src/Widgets/InfoBox.cs:344
 msgid "(None)"
 msgstr "(なし)"
 
@@ -3291,35 +2497,35 @@ msgstr " または "
 #. OPS The operators we support, case insensitive
 #. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
 #: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:533
 msgid "or"
 msgstr "または"
 
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
 msgid "Updating Thumbnails"
 msgstr "サムネイルの更新中"
 
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
 #, csharp-format
 msgid "Updating picture \"{0}\""
 msgstr "写真 \"{0}\" の更新中"
 
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:99
 msgid "Photo management for GNOME"
 msgstr "GNOME 向けの写真管理ソフトウェアです。"
 
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
-
 #: ../src/UI.Dialog/AboutDialog.cs:100
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
+
+#: ../src/UI.Dialog/AboutDialog.cs:124
 msgid "translator-credits"
 msgstr ""
 "遠藤 美純 <y-endo at ceres.dti.ne.jp>\n"
 "Novell Language <language at novell.com>\n"
 "相花 毅 <aihana at gnome.gr.jp>\n"
 "Satoru SATOH <ss at gnome.gr.jp>\n"
-"日本GNOMEユーザー会 <http://www.gnome.gr.jp>\n"
+"日本GNOMEユーザー会 <http://www.gnome.gr.jp/>\n"
 "\n"
 "Launchpad からの貢献者:\n"
 "  Fumihito YOSHIDA <https://launchpad.net/~hito>\n"
@@ -3331,62 +2537,66 @@ msgstr ""
 "  Y.Nishiwaki <https://launchpad.net/~annamoito>\n"
 "  Yuji Kaneko <https://launchpad.net/~yujikaneko>"
 
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:129
 msgid "F-Spot Website"
 msgstr "F-Spot ウェブサイト"
 
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
 #: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
 #, csharp-format
 msgid "Shift all photos by {0}"
 msgstr "全ての写真の日時を {0} だけ変更する"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:99
+#: ../src/UI.Dialog/DateRangeDialog.cs:90
 msgid "Today"
 msgstr "今日"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:101
+#: ../src/UI.Dialog/DateRangeDialog.cs:92
 msgid "Yesterday"
 msgstr "昨日"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:103
+#: ../src/UI.Dialog/DateRangeDialog.cs:94
 msgid "Last 7 days"
 msgstr "過去 7 日間"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:105
+#: ../src/UI.Dialog/DateRangeDialog.cs:96
 msgid "Last 30 days"
 msgstr "過去 30 日間"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:107
+#: ../src/UI.Dialog/DateRangeDialog.cs:98
 msgid "Last 90 days"
 msgstr "過去 90 日間"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:109
+#: ../src/UI.Dialog/DateRangeDialog.cs:100
 msgid "Last 360 days"
 msgstr "過去 360 日間"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:111
+#: ../src/UI.Dialog/DateRangeDialog.cs:102
 msgid "Current Week (Mon-Sun)"
 msgstr "今週 (月〜日)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:113
+#: ../src/UI.Dialog/DateRangeDialog.cs:104
 msgid "Previous Week (Mon-Sun)"
 msgstr "先週 (月〜日)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:131
+#: ../src/UI.Dialog/DateRangeDialog.cs:122
 msgid "Customized Range"
 msgstr "範囲の指定"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:40
+msgid "Error editing photo"
+msgstr "写真の編集エラー"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:44
 #, csharp-format
 msgid "Edit Icon for Tag {0}"
 msgstr "タグ {0} のアイコンの編集"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:66
 msgid "Select Photo from file"
 msgstr "ファイルから写真を選択"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:88
 #, csharp-format
 msgid ""
 "\n"
@@ -3403,16 +2613,16 @@ msgstr ""
 " 写真にタグ '{0}' を付与してからここに戻り、アイコンとして\n"
 " 利用して下さい。"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:166
 msgid "Unable to load image"
 msgstr "画像を読み込めません"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:167
 #, csharp-format
 msgid "Unable to load \"{0}\" as icon for the tag"
 msgstr "タグ・アイコンとして \"{0}\" を読み込めません"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:205
 #, csharp-format
 msgid "Photo {0} of {1}"
 msgstr "写真 ({0} / {1})"
@@ -3429,24 +2639,70 @@ msgstr "エラーの詳細"
 msgid "An unhandled exception was thrown: "
 msgstr "予期されていない例外が発生しました: "
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:53
-#: ../src/UI.Dialog/PreferenceDialog.cs:71
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "フォルダの選択..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:129
+msgid "Choose Import source..."
+msgstr "インポート元の選択..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:141
+msgid "(No Cameras Detected)"
+msgstr "(カメラは検出されていません)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:176
+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 ""
+"このボックスにチェックを入れると、カメラからの写真のインポートに成功した後"
+"に、その写真を削除します。\n"
+"\n"
+"カメラから削除する前に写真をバックアップすることをお勧めします。<b>自己責任に"
+"て、このオプションを使用してください!</b>"
+
+#: ../src/UI.Dialog/ImportDialog.cs:177
+msgid "Warning"
+msgstr "警告"
+
+#: ../src/UI.Dialog/ImportDialog.cs:286
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "写真をインポート中... ({0} / {1})"
+
+#: ../src/UI.Dialog/ImportDialog.cs:310
+msgid "Importing photos..."
+msgstr "写真をインポート中..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:317
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr ""
+"写真を検索中... (あらかじめ「インポート」をクリックしておくことで、引き続きイ"
+"ンポートを行うことができます。)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
+#: ../src/UI.Dialog/PreferenceDialog.cs:80
 msgid "None"
 msgstr "なし"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:59
 msgid "System profile"
 msgstr "システムプロファイル"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:84
+#: ../src/UI.Dialog/PreferenceDialog.cs:97
 msgid "Standard theme"
 msgstr "標準テーマ"
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
 msgid "Error loading database."
 msgstr "データベースの読み込みエラー"
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:23
 #, csharp-format
 msgid ""
 "F-Spot encountered an error while loading the photo database. The old "
@@ -3455,15 +2711,15 @@ msgstr ""
 "F-Spot は画像データベースの読み込み中にエラーを発生しました。以前のデータベー"
 "スを {0} に移動し、新しいデータベースを作成しました。"
 
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
 msgid "Label"
 msgstr "ラベル"
 
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
 msgid "Ratio"
 msgstr "アスペクト比"
 
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:53
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
 msgid "Retry"
 msgstr "再試行"
 
@@ -3511,6 +2767,24 @@ msgstr "差:"
 msgid "min. Starting at {0}"
 msgstr "分 ({0} から開始)"
 
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
+msgid "C_reate"
+msgstr "作成(_R)"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:2
+msgid "Create _icon for this tag when first used"
+msgstr "このタグを初めての利用する際にアイコンを作成する"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr "親タグ(_A):"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "タグ名(_T):"
+
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
 msgid "<b>End Date</b>"
 msgstr "<b>終了日時</b>"
@@ -3536,18 +2810,14 @@ msgid "Set date range"
 msgstr "表示期間の設定"
 
 #: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
-msgid "<small></small>"
-msgstr "<small></small>"
-
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit Tag"
 msgstr "タグの編集"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit icon"
 msgstr "アイコンの編集"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
 msgid "_Icon:"
 msgstr "アイコン(_I):"
 
@@ -3579,9 +2849,42 @@ msgstr "タグ・アイコンの編集"
 msgid "No _image"
 msgstr "画像なし(_I)"
 
-#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:8
-msgid "Photo 0 of 0"
-msgstr "写真 (0 / 0)"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:1
+msgid "<b>View all pictures imported</b>"
+msgstr "<b>インポートした全ての写真の閲覧</b>"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:2
+msgid "Display only those photos that were imported in specified Rolls."
+msgstr "特定のインポートロールの写真のみを表示"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
+msgid "Filter on selected rolls"
+msgstr "ロールの選択フィルタ"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
+msgid "Number of photos in selected rolls:"
+msgstr "選択したロールに含まれる写真の枚数:"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
+msgid "Show all photos."
+msgstr "すべての写真を表示"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
+msgid "after"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:534
+msgid "and"
+msgstr "と"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:8
+msgid "at"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:9
+msgid "between"
+msgstr ""
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:1
 msgid "Color profile for display:"
@@ -3608,18 +2911,26 @@ msgstr ""
 "<small>他の画像処理プログラムとタグを共有できます</small>"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:7
+msgid ""
+"Never modify image files.\n"
+"<small>Write XMP files next to the images instead.</small>"
+msgstr ""
+"画像ファイルに絶対に変更を加えない。\n"
+"<small>代わりに画像ファイルの隣に XMP ファイルを出力します。</small>"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
 msgid "Select A Folder"
 msgstr "フォルダの選択"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:8
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
 msgid "Separately from the image files"
 msgstr "画像ファイルとは別に保存"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:11
 msgid "Store tags and descriptions for photos:"
 msgstr "写真のタグや説明の保存:"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:12
 msgid "When importing photos, copy them to:"
 msgstr "インポートした写真の保存先:"
 
@@ -3635,6 +2946,115 @@ msgstr "<b>最小の評価</b>"
 msgid "Set Rating Filter"
 msgstr "評価フィルタの設定"
 
+#: ../src/UI.Dialog/ui/RepairDialog.ui.h:1
+msgid "Repair"
+msgstr "復元"
+
+#: ../src/ui/import.ui.h:1
+msgid "Attach Tags:"
+msgstr "付与するタグ:"
+
+#: ../src/ui/import.ui.h:2
+msgid "Copy files to the Photos folder"
+msgstr "写真フォルダにファイルをコピー"
+
+#: ../src/ui/import.ui.h:3
+msgid "Detect duplicates"
+msgstr "重複の検出"
+
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:6
+msgid "Import from:"
+msgstr "インポート元:"
+
+#: ../src/ui/import.ui.h:7
+msgid "Include subfolders"
+msgstr "サブフォルダも含める"
+
+#: ../src/ui/import.ui.h:8
+msgid "Remove original files after import"
+msgstr "インポート後に元のファイルを削除"
+
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 px"
+
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 px"
+
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 px"
+
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 px"
+
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 px"
+
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>サイズ</b>"
+
+#: ../src/ui/mail_dialog.ui.h:8
+msgid "<b>Summary</b>"
+msgstr "<b>概要</b>"
+
+#: ../src/ui/mail_dialog.ui.h:9
+msgid "Create Mail"
+msgstr "メールの作成"
+
+#: ../src/ui/mail_dialog.ui.h:10
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr "写真を添付したメールを作成します。(必要に応じてサイズ変更が可能です。)"
+
+#: ../src/ui/mail_dialog.ui.h:11
+msgid "Do not send a mail"
+msgstr "メールを送信しません。"
+
+#: ../src/ui/mail_dialog.ui.h:12
+msgid "Estimated new size"
+msgstr "予想される新規サイズ"
+
+#: ../src/ui/mail_dialog.ui.h:13
+msgid "Extra large"
+msgstr "特大"
+
+#: ../src/ui/mail_dialog.ui.h:14
+msgid "Large"
+msgstr "大"
+
+#: ../src/ui/mail_dialog.ui.h:15
+msgid "Medium"
+msgstr "中"
+
+#: ../src/ui/mail_dialog.ui.h:16
+msgid "Number of pictures"
+msgstr "写真の枚数"
+
+#: ../src/ui/mail_dialog.ui.h:18
+msgid "Original size (possible very large file size)"
+msgstr "オリジナル・サイズ (巨大なファイルサイズになる可能性があります)"
+
+#: ../src/ui/mail_dialog.ui.h:19
+msgid "Small"
+msgstr "小"
+
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Tiny"
+msgstr "最小"
+
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Total original size"
+msgstr "オリジナルの合計サイズ"
+
+#: ../src/ui/mail_dialog.ui.h:22
+msgid "_Create Mail"
+msgstr "メールの作成(_C)"
+
 #: ../src/ui/main_window.ui.h:1
 msgid "Adjust _Time..."
 msgstr "日時の調整(_T)..."
@@ -3656,8 +3076,8 @@ msgid "By _Rating"
 msgstr "評価(_R)"
 
 #: ../src/ui/main_window.ui.h:7
-msgid "Copy Locat_ion"
-msgstr "場所をコピー(_I)"
+msgid "Copy"
+msgstr "コピー"
 
 #: ../src/ui/main_window.ui.h:8
 msgid "Create New _Tag..."
@@ -3667,6 +3087,10 @@ msgstr "新しいタグの作成(_T)..."
 msgid "Create _New Version..."
 msgstr "新しいバージョンの作成(_N)..."
 
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "バージョンの関連付けの解除(_T)"
+
 #: ../src/ui/main_window.ui.h:11
 msgid "Fin_d"
 msgstr "検索(_D)"
@@ -3683,6 +3107,10 @@ msgstr "ページ設定(_U)..."
 msgid "Re_fresh Thumbnail"
 msgstr "サムネイルの更新(_F)"
 
+#: ../src/ui/main_window.ui.h:18
+msgid "Select _All"
+msgstr "全て選択(_A)"
+
 #: ../src/ui/main_window.ui.h:19
 msgid "Select _None"
 msgstr "選択の解除(_N)"
@@ -3691,6 +3119,10 @@ msgstr "選択の解除(_N)"
 msgid "Send by _Mail..."
 msgstr "メールで送信(_M)..."
 
+#: ../src/ui/main_window.ui.h:21 ../src/ui/single_view.ui.h:3
+msgid "Set as _Background"
+msgstr "背景に設定(_B)"
+
 #: ../src/ui/main_window.ui.h:22
 msgid "Side_bar"
 msgstr "サイドバー(_B)"
@@ -3711,6 +3143,26 @@ msgstr "ツールバー(_L)"
 msgid "View"
 msgstr "ビュー"
 
+#: ../src/ui/main_window.ui.h:28 ../src/ui/single_view.ui.h:7
+msgid "Zoom _in"
+msgstr "拡大(_I)"
+
+#: ../src/ui/main_window.ui.h:29 ../src/ui/single_view.ui.h:8
+msgid "Zoom _out"
+msgstr "縮小(_O)"
+
+#: ../src/ui/main_window.ui.h:30 ../src/ui/single_view.ui.h:9
+msgid "Zoom in"
+msgstr "拡大"
+
+#: ../src/ui/main_window.ui.h:31 ../src/ui/single_view.ui.h:10
+msgid "Zoom out"
+msgstr "縮小"
+
+#: ../src/ui/main_window.ui.h:32
+msgid "_Attach Tag"
+msgstr "タグの付与(_A)"
+
 #: ../src/ui/main_window.ui.h:33
 msgid "_Attach Tag to Selection"
 msgstr "選択したものへタグの付与(_A)"
@@ -3743,9 +3195,13 @@ msgstr "選択したタグの削除(_D)"
 msgid "_Delete Version"
 msgstr "バージョンの削除(_D)"
 
+#: ../src/ui/main_window.ui.h:44 ../src/ui/single_view.ui.h:11
+msgid "_Edit"
+msgstr "編集(_E)"
+
 #: ../src/ui/main_window.ui.h:45
-msgid "_Edit Selected Tag..."
-msgstr "選択したタグの編集(_E)..."
+msgid "_Edit Tag..."
+msgstr "タグの編集(_E)..."
 
 #: ../src/ui/main_window.ui.h:46
 msgid "_Export to"
@@ -3755,6 +3211,14 @@ msgstr "エキスポート(_E)"
 msgid "_Filmstrip"
 msgstr "フィルムストリップ(_F)"
 
+#: ../src/ui/main_window.ui.h:48 ../src/ui/single_view.ui.h:13
+msgid "_Fullscreen"
+msgstr "フルスクリーン表示(_F)"
+
+#: ../src/ui/main_window.ui.h:49 ../src/ui/single_view.ui.h:14
+msgid "_Help"
+msgstr "ヘルプ(_H)"
+
 #: ../src/ui/main_window.ui.h:50
 msgid "_Hidden"
 msgstr "非表示(_H)"
@@ -3764,90 +3228,179 @@ msgid "_Import..."
 msgstr "インポート(_I)..."
 
 #: ../src/ui/main_window.ui.h:52
+msgid "_Invert Selection"
+msgstr "カメラの選択の反転(_I)"
+
+#: ../src/ui/main_window.ui.h:53
 msgid "_Large"
 msgstr "大(_L)"
 
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:54
 msgid "_Last Import Roll"
 msgstr "最新のインポートロール(_L)"
 
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:55
 msgid "_Loupe"
 msgstr "拡大鏡(_L)"
 
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:56
 msgid "_Medium"
 msgstr "中(_M)"
 
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:57 ../src/ui/single_view.ui.h:15
+msgid "_Photo"
+msgstr "写真(_P)"
+
+#: ../src/ui/main_window.ui.h:58
 msgid "_Quit"
 msgstr "終了(_Q)"
 
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:59
 msgid "_Ratings"
 msgstr "評価(_R)"
 
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:61
 msgid "_Remove Tag From Selection"
 msgstr "選択したものからタグの削除(_R)"
 
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:62
 msgid "_Rename Version"
 msgstr "バージョン名の変更(_R)"
 
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:63
 msgid "_Reverse Order"
 msgstr "逆順(_R)"
 
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:64
 msgid "_Select Import Rolls..."
 msgstr "インポートロールの選択(_S)..."
 
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:65
 msgid "_Set Date Range..."
 msgstr "表示期間の設定(_S)..."
 
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:66
 msgid "_Set Rating filter..."
 msgstr "評価フィルタの設定(_S)..."
 
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:67
 msgid "_Sharpen..."
 msgstr "シャープ化(_S)..."
 
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:68 ../src/ui/single_view.ui.h:16
+msgid "_Slideshow"
+msgstr "スライドショー(_S)"
+
+#: ../src/ui/main_window.ui.h:69
 msgid "_Small"
 msgstr "小(_S)"
 
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:70
 msgid "_Tag Icons"
 msgstr "タグ・アイコン(_T)"
 
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:71
 msgid "_Tags"
 msgstr "タグ(_T)"
 
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:72
 msgid "_Timeline"
 msgstr "タイムライン(_T)"
 
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:73
 msgid "_Tools"
 msgstr "ツール(_T)"
 
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:74
 msgid "_Untagged Photos"
 msgstr "タグのない写真(_U)"
 
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:75
 msgid "_Version"
 msgstr "バージョン(_V)"
 
-#: ../src/Updater.cs:616
+#: ../src/ui/main_window.ui.h:76 ../src/ui/single_view.ui.h:18
+msgid "_View"
+msgstr "表示(_V)"
+
+#: ../src/ui/single_view.ui.h:1
+msgid "Display File _Names"
+msgstr "ファイル名の表示(_N)"
+
+#: ../src/ui/single_view.ui.h:2
+msgid "F-Spot View"
+msgstr "F-Spot ビュー"
+
+#: ../src/ui/single_view.ui.h:4
+msgid "Show or hide the side pane"
+msgstr "サイドペインの表示/非表示"
+
+#: ../src/ui/single_view.ui.h:5
+msgid "Show or hide the toolbar"
+msgstr "ツールバーの表示/非表示"
+
+#: ../src/ui/single_view.ui.h:6
+msgid "Side _pane"
+msgstr "サイドペイン(_P)"
+
+#: ../src/ui/single_view.ui.h:17
+msgid "_Toolbar"
+msgstr "ツールバー(_T)"
+
+#: ../src/ui/viewer_preferences.ui.h:1
+msgid "<b>Image Interpolation</b>"
+msgstr "<b>画像の補正</b>"
+
+#: ../src/ui/viewer_preferences.ui.h:2
+msgid "<b>Transparent Parts</b>"
+msgstr "<b>透過する部分</b>"
+
+#: ../src/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>画像を拡大する際の補間処理を有効化します。写真を閲覧する際は無効化"
+"すべきではありませんが、アイコンを閲覧する際に無効化することは有用でしょう。"
+"</i></small>"
+
+#: ../src/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>画像の透過部分をどのように表示するかを選択できます。このオプション"
+"は写真そのものには影響しませんが、市松模様やカスタム色の設定は、透過部分を持"
+"つアイコンや他のアートワークを閲覧する際には有用でしょう。</i></small>"
+
+#: ../src/ui/viewer_preferences.ui.h:5
+msgid "As _background"
+msgstr "背景色と同じ(_B)"
+
+#: ../src/ui/viewer_preferences.ui.h:6
+msgid "As _custom color: "
+msgstr "カスタム色(_C): "
+
+#: ../src/ui/viewer_preferences.ui.h:7
+msgid "As check _pattern"
+msgstr "市松模様(_P)"
+
+#: ../src/ui/viewer_preferences.ui.h:8
+msgid "Preferences"
+msgstr "設定"
+
+#: ../src/ui/viewer_preferences.ui.h:9
+msgid "_Interpolate image on zoom"
+msgstr "拡大時に画像を補間(_I)"
+
+#: ../src/Updater.cs:727
 msgid "Updating F-Spot Database"
 msgstr "F-Spot データベースを更新中"
 
-#: ../src/Updater.cs:617
+#: ../src/Updater.cs:728
 msgid ""
 "Please wait while your F-Spot gallery's database is updated. This may take "
 "some time."
@@ -3855,11 +3408,6 @@ msgstr ""
 "F-Spot ギャラリーのデータベースが更新されるまでお待ち下さい。これにはしばらく"
 "時間がかかります。"
 
-#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
-msgid "Unable to create temporary file"
-msgstr "一時ファイルを作成できません"
-
 #: ../src/Widgets/CustomPrintWidget.cs:119
 msgid "Page Setup"
 msgstr "ページ設定"
@@ -3940,11 +3488,11 @@ msgstr "写真のタグを印刷する"
 msgid "Print photo comment"
 msgstr "写真のコメントを印刷する"
 
-#: ../src/Widgets/EditorPage.cs:29 ../src/Widgets/Sidebar.cs:62
+#: ../src/Widgets/EditorPage.cs:32 ../src/Widgets/Sidebar.cs:54
 msgid "Edit"
 msgstr "編集"
 
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:200
 msgid ""
 "This tool requires an active selection. Please select a region of the photo "
 "and try the operation again"
@@ -3952,12 +3500,12 @@ msgstr ""
 "このツールではあらかじめ範囲を指定する必要があります。写真上で範囲を指定して"
 "からもう一度操作を試して下さい。"
 
-#: ../src/Widgets/EditorPage.cs:215
+#: ../src/Widgets/EditorPage.cs:218
 msgid "Error saving adjusted photo"
 msgid_plural "Error saving adjusted photos"
 msgstr[0] "調整した写真の保存中にエラー"
 
-#: ../src/Widgets/EditorPage.cs:217
+#: ../src/Widgets/EditorPage.cs:220
 #, csharp-format
 msgid ""
 "Received exception \"{0}\". Note that you have to develop RAW files into "
@@ -3966,23 +3514,23 @@ msgstr ""
 "例外 \"{0}\" が発生しました。編集前に RAW ファイルを JPEG ファイルに現像しな"
 "ければならないことに注意して下さい。"
 
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:470
 msgid "_Horizontal"
 msgstr "水平(_H)"
 
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:474
 msgid "_Vertical"
 msgstr "垂直(_V)"
 
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
 msgid "Find:"
 msgstr "検索:"
 
-#: ../src/Widgets/FolderTreePage.cs:21
+#: ../src/Widgets/FolderTreePage.cs:22
 msgid "Folders"
 msgstr "フォルダ"
 
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
 msgid "Filesystem"
 msgstr "ファイルシステム"
 
@@ -3990,53 +3538,64 @@ msgstr "ファイルシステム"
 msgid "Histogram"
 msgstr "ヒストグラム"
 
-#: ../src/Widgets/InfoBox.cs:217
+#: ../src/Widgets/InfoBox.cs:201
+msgid "Image Information"
+msgstr "画像情報"
+
+#: ../src/Widgets/InfoBox.cs:215
+msgid "Version"
+msgstr "バージョン"
+
+#: ../src/Widgets/InfoBox.cs:218
 msgid "Date"
 msgstr "日時"
 
-#: ../src/Widgets/InfoBox.cs:223
+#: ../src/Widgets/InfoBox.cs:224
 msgid "Exposure"
 msgstr "露出"
 
-#: ../src/Widgets/InfoBox.cs:227
+#: ../src/Widgets/InfoBox.cs:228
 msgid "Focal Length"
 msgstr "焦点距離"
 
-#: ../src/Widgets/InfoBox.cs:233
+#: ../src/Widgets/InfoBox.cs:231
+msgid "Camera"
+msgstr "カメラ"
+
+#: ../src/Widgets/InfoBox.cs:234
 msgid "File Size"
 msgstr "ファイルサイズ"
 
-#: ../src/Widgets/InfoBox.cs:236
+#: ../src/Widgets/InfoBox.cs:237
 msgid "Rating"
 msgstr "評価"
 
-#: ../src/Widgets/InfoBox.cs:389 ../src/Widgets/InfoBox.cs:397
-#: ../src/Widgets/InfoBox.cs:427
+#: ../src/Widgets/InfoBox.cs:327
 msgid "(wrong format)"
 msgstr "(不正な形式)"
 
-#: ../src/Widgets/InfoBox.cs:417 ../src/Widgets/InfoBox.cs:440
-#: ../src/Widgets/InfoBox.cs:450 ../src/Widgets/InfoBox.cs:459
+#: ../src/Widgets/InfoBox.cs:353 ../src/Widgets/InfoBox.cs:364
+#: ../src/Widgets/InfoBox.cs:374
 msgid "(Unknown)"
 msgstr "(不明)"
 
-#: ../src/Widgets/InfoBox.cs:560
+#: ../src/Widgets/InfoBox.cs:474
 #, csharp-format
 msgid "(One Edit)"
 msgid_plural "({0} Edits)"
 msgstr[0] "({0} 枚の編集版)"
 
-#: ../src/Widgets/InfoBox.cs:574
+#: ../src/Widgets/InfoBox.cs:484
 msgid "(File read error)"
 msgstr "(ファイルの読み込みエラー)"
 
-#: ../src/Widgets/InfoBox.cs:619
+#: ../src/Widgets/InfoBox.cs:529
 #, csharp-format
 msgid "{0} Photos"
 msgstr "{0} 枚の写真"
 
 #. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:639
+#: ../src/Widgets/InfoBox.cs:549
 #, csharp-format
 msgid ""
 "On {0} between \n"
@@ -4045,7 +3604,7 @@ msgstr ""
 "{0}\n"
 "{1} 〜 {2}"
 
-#: ../src/Widgets/InfoBox.cs:644
+#: ../src/Widgets/InfoBox.cs:554
 #, csharp-format
 msgid ""
 "Between {0} \n"
@@ -4054,85 +3613,67 @@ msgstr ""
 "{0} 〜\n"
 "{1}"
 
-#: ../src/Widgets/InfoBox.cs:671
+#: ../src/Widgets/InfoBox.cs:581
 msgid "(At least one File not found)"
 msgstr "(ファイルが一つも見つかりません)"
 
-#: ../src/Widgets/InfoBox.cs:788
+#: ../src/Widgets/InfoBox.cs:698
 msgid "Show Photo Name"
 msgstr "写真名の表示"
 
-#: ../src/Widgets/InfoBox.cs:797
+#: ../src/Widgets/InfoBox.cs:707
 msgid "Show Date"
 msgstr "日時の表示"
 
-#: ../src/Widgets/InfoBox.cs:806
+#: ../src/Widgets/InfoBox.cs:716
 msgid "Show Size"
 msgstr "サイズの表示"
 
-#: ../src/Widgets/InfoBox.cs:815
+#: ../src/Widgets/InfoBox.cs:725
 msgid "Show Exposure"
 msgstr "露出の表示"
 
-#: ../src/Widgets/InfoBox.cs:824
+#: ../src/Widgets/InfoBox.cs:734
 msgid "Show Focal Length"
 msgstr "焦点距離の表示"
 
-#: ../src/Widgets/InfoBox.cs:833
+#: ../src/Widgets/InfoBox.cs:743
 msgid "Show Camera"
 msgstr "カメラ機種名の表示"
 
-#: ../src/Widgets/InfoBox.cs:842
+#: ../src/Widgets/InfoBox.cs:752
 msgid "Show File Size"
 msgstr "ファイルサイズの表示"
 
-#: ../src/Widgets/MetadataDisplay.cs:23
+#: ../src/Widgets/MetadataDisplay.cs:25
 msgid "Metadata"
 msgstr "メタデータ"
 
-#: ../src/Widgets/MetadataDisplay.cs:104
+#: ../src/Widgets/MetadataDisplay.cs:106
 msgid "Extended Metadata"
 msgstr "拡張メタデータ"
 
-#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:392
-msgid "No Extended Metadata Available"
-msgstr "利用できる拡張メタデータはありません"
-
-#: ../src/Widgets/MetadataDisplay.cs:410
+#: ../src/Widgets/MetadataDisplay.cs:359
 msgid "No active photo"
 msgstr "写真が選択されていません"
 
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:361
 #, csharp-format
 msgid "The photo \"{0}\" does not exist"
 msgstr "写真 \"{0}\" は存在しません"
 
-#: ../src/Widgets/MetadataDisplay.cs:415
+#: ../src/Widgets/MetadataDisplay.cs:363
 msgid "No metadata available"
 msgstr "利用できるメタデータはありません"
 
-#: ../src/Widgets/OpenWithMenu.cs:71
+#: ../src/Widgets/OpenWithMenu.cs:72
 msgid "No applications available"
 msgstr "利用できるアプリケーションはありません"
 
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
 msgid "Rating:"
 msgstr "評価:"
 
-#: ../src/XmpTagsImporter.cs:91
-msgid "Country"
-msgstr "国"
-
-#: ../src/XmpTagsImporter.cs:92
-msgid "City"
-msgstr "都市"
-
-#: ../src/XmpTagsImporter.cs:93
-msgid "State"
-msgstr "都道府県"
-
-#. namespace
 #: ../tools/f-spot-screensaver.desktop.in.h:1
 msgid "Display a slideshow from F-Spot"
 msgstr "F-Spot からスライドショーを表示"
@@ -4141,6 +3682,640 @@ msgstr "F-Spot からスライドショーを表示"
 msgid "F-Spot photos"
 msgstr "F-Spot の写真"
 
+#~ msgid "Autorotate"
+#~ msgstr "自動回転"
+
+#~ msgid "_Autorotate"
+#~ msgstr "自動回転(_A)"
+
+#~ msgid "Unknown transform type %d"
+#~ msgstr "不明な変換タイプ %d"
+
+#~ msgid "Operation failed"
+#~ msgstr "操作に失敗しました"
+
+#~ msgid "No way to save files of type \"{0}\""
+#~ msgstr "\"{0}\" タイプのファイルを保存できません"
+
+#~ msgid "Open _Folder..."
+#~ msgstr "フォルダを開く(_F)..."
+
+#~ msgid "_New Window"
+#~ msgstr "新しいウインドウ(_N)"
+
+#~ msgid "Image Directory"
+#~ msgstr "画像ディレクトリ"
+
+#~ msgid "Thumbnail Directory"
+#~ msgstr "サムネイル・ディレクトリ"
+
+#~ msgid "Exif Directory"
+#~ msgstr "Exif ディレクトリ"
+
+#~ msgid "GPS Directory"
+#~ msgstr "GPS ディレクトリ"
+
+#~ msgid "InterOperability Directory"
+#~ msgstr "相互運用ディレクトリ"
+
+#~ msgid "Unknown Directory"
+#~ msgstr "不明なディレクトリ"
+
+#~ msgid "Writing to this file format is not supported"
+#~ msgstr "このファイル形式への書き込みはサポートされていません"
+
+#~ msgid "IPTC Information Interchange Model (IIM) Version number"
+#~ msgstr "IPTC 情報交換モデル (IIM) バージョン番号"
+
+#~ msgid "OSI Destination routing information"
+#~ msgstr "OSI 宛先ルーティング情報"
+
+#~ msgid "IPTC file format"
+#~ msgstr "IPTC ファイル形式"
+
+#~ msgid "Identifies the provider and product"
+#~ msgstr "提供者や製品を識別します"
+
+#~ msgid "A unique number identifying the envelope"
+#~ msgstr "固有のエンベロープ識別番号"
+
+#~ msgid "A unique number"
+#~ msgstr "固有の番号"
+
+#~ msgid ""
+#~ "The envelope handling priority between 1 (most urgent) and 9 (least "
+#~ "urgent)"
+#~ msgstr "1 (最優先) 〜 9 (優先度低) の優先度を分類するエンベロープ"
+
+#~ msgid "The year, month and day (CCYYMMDD) the service sent the material"
+#~ msgstr "サービスが素材を送信した年月日 (CCYYMMDD)"
+
+#~ msgid "The hour, minute and second (HHMMSS) the service sent the material"
+#~ msgstr "サービスが素材を送信した時分秒 (HHMMSS)"
+
+#~ msgid "The character set designation"
+#~ msgstr "文字コードの指定"
+
+#~ msgid "External globally unique object identifier"
+#~ msgstr "グローバルな固有の外部オブジェクト識別子"
+
+#~ msgid "Abstract Relationship Method (ARM) identifier"
+#~ msgstr "ARM (Abstract Relationship Method) 識別子"
+
+#~ msgid "Abstract Relationship Method (ARM) version number."
+#~ msgstr "ARM (Abstract Relationship Method) バージョン番号"
+
+#~ msgid "Number identifying the IIM version this application record uses"
+#~ msgstr "このアプリケーションレコードが使用する IIM バージョンを識別する番号"
+
+#~ msgid "Object type reference"
+#~ msgstr "オブジェクト・タイプのリファレンス"
+
+#~ msgid "Object attribute reference"
+#~ msgstr "オブジェクト属性のリファレンス"
+
+#~ msgid "Object name"
+#~ msgstr "オブジェクト名"
+
+#~ msgid "Status of the objectdata according to the provider"
+#~ msgstr "提供者によるオブジェクト・データの状態"
+
+#~ msgid "Location within a city or area where the object originates"
+#~ msgstr "オブジェクトが生成された都市または地域内の場所"
+
+#~ msgid "Name of the city the content is focussing on"
+#~ msgstr "コンテンツが対象とする都市の名前"
+
+#~ msgid "Copyright information for"
+#~ msgstr "著作権情報:"
+
+#~ msgid "Full name of the country of the focus of the content"
+#~ msgstr "コンテンツが対象とする国の正式名"
+
+#~ msgid ""
+#~ "Two or three letter ISO3166 code of the country of the focus of the "
+#~ "content"
+#~ msgstr "コンテンツが対象とする国を表す 2、3 文字の ISO3166 コード"
+
+#~ msgid "Creator of the content"
+#~ msgstr "コンテンツ作成者"
+
+#~ msgid "Provider of the object"
+#~ msgstr "オブジェクト提供者"
+
+#~ msgid "The title of the author or creator"
+#~ msgstr "著者もしくは作成者の肩書き"
+
+#~ msgid ""
+#~ "The person involved in writing, editing or correcting the object data or "
+#~ "caption/abstract"
+#~ msgstr "オブジェクトデータやキャプション/概要の執筆、編集、訂正に携わった者"
+
+#~ msgid "Headline of the content"
+#~ msgstr "コンテンツの見出し"
+
+#~ msgid ""
+#~ "Instructions from the creator to the receiver not covered by other fields"
+#~ msgstr ""
+#~ "作成者による受信者への説明のうち、他のフィールドでカバーされないもの"
+
+#~ msgid "Intellectual genre of the object"
+#~ msgstr "オブジェクトのジャンル"
+
+#~ msgid "Unknown IIM DataSet"
+#~ msgstr "不明な IIM データセット"
+
+#~ msgid "Creator"
+#~ msgstr "作成者"
+
+#~ msgid "Title"
+#~ msgstr "タイトル"
+
+#~ msgid "Copyright"
+#~ msgstr "著作権"
+
+#~ msgid "Subject and Keywords"
+#~ msgstr "テーマとキーワード"
+
+#~ msgid "Compression"
+#~ msgstr "圧縮"
+
+#~ msgid "Planar Configuration"
+#~ msgstr "画像データの並び"
+
+#~ msgid "Orientation"
+#~ msgstr "画像方向"
+
+#~ msgid "Photometric Interpretation"
+#~ msgstr "露出計の動作モード"
+
+#~ msgid "Resolution Unit"
+#~ msgstr "解像度単位"
+
+#~ msgid "Exposure Program"
+#~ msgstr "露出プログラム"
+
+#~ msgid "Metering Mode"
+#~ msgstr "測光モード"
+
+#~ msgid "Exposure Mode"
+#~ msgstr "露出モード"
+
+#~ msgid "Custom Rendered"
+#~ msgstr "カスタムイメージプロセッシング"
+
+#~ msgid "Components Configuration"
+#~ msgstr "各コンポーネントの意味"
+
+#~ msgid "Light Source"
+#~ msgstr "光源"
+
+#~ msgid "Sensing Method"
+#~ msgstr "センサー方式"
+
+#~ msgid "Color Space"
+#~ msgstr "色空間情報"
+
+#~ msgid "White Balance"
+#~ msgstr "ホワイトバランス"
+
+#~ msgid "Focal Plane Resolution Unit"
+#~ msgstr "焦点面解像度単位"
+
+#~ msgid "File Source Type"
+#~ msgstr "ファイルソースの種類"
+
+#~ msgid "Scene Capture Type"
+#~ msgstr "シーン撮影タイプ"
+
+#~ msgid "Gain Control"
+#~ msgstr "ゲインコントロール"
+
+#~ msgid "Contrast"
+#~ msgstr "コントラスト"
+
+#~ msgid "Saturation"
+#~ msgstr "彩度"
+
+#~ msgid "Sharpness"
+#~ msgstr "シャープネス"
+
+#~ msgid "Scene Type"
+#~ msgstr "シーンのタイプ"
+
+#~ msgid "Comment:"
+#~ msgstr "コメント:"
+
+#~ msgid ""
+#~ "Specify if an original size picture should be rotated or not. Smaller "
+#~ "sizes are automatically rotated."
+#~ msgstr ""
+#~ "オリジナルサイズの写真を自動回転するかどうかを指定します。サイズを縮小した"
+#~ "場合は自動回転されます。"
+
+#~ msgid "Unable to create temporary file"
+#~ msgstr "一時ファイルを作成できません"
+
+#~ msgid "No Extended Metadata Available"
+#~ msgstr "利用できる拡張メタデータはありません"
+
+#~ msgid "Country"
+#~ msgstr "国"
+
+#~ msgid "City"
+#~ msgstr "都市"
+
+#~ msgid "State"
+#~ msgstr "都道府県"
+
+#~ msgid "\n"
+#~ msgstr "\n"
+
+#~ msgid "<b>{0}</b>."
+#~ msgstr "<b>{0}</b>."
+
+#~ msgid "<small></small>"
+#~ msgstr "<small></small>"
+
+#~ msgid "Photo 0 of 0"
+#~ msgstr "写真 (0 / 0)"
+
+#~ msgid "Preview"
+#~ msgstr "プレビュー"
+
+#~ msgid "Path"
+#~ msgstr "パス"
+
+#~ msgid "File"
+#~ msgstr "ファイル"
+
+#~ msgid "Select Tag"
+#~ msgstr "タグの選択"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "プレビューのダウンロード中"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "{0} のプレビューのダウンロード中"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "ファイルのコピー中 ({0} / {1})"
+
+#~ msgid "Error transferring file"
+#~ msgstr "ファイルの転送中にエラー"
+
+#~ msgid "Download Complete"
+#~ msgstr "ダウンロードが完了しました"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "ファイルのコピーが完了しました"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "カメラから \"{0}\" の転送中"
+
+#~ msgid "Port"
+#~ msgstr "ポート"
+
+#~ msgid "Import error"
+#~ msgstr "インポート・エラー"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "インポート中にエラー: {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "Attach tag:"
+#~ msgstr "付与するタグ:"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Camera Selection"
+#~ msgstr "カメラの選択"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "E-メール:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "タイトルとコメントのエキスポート(_X)"
+
+#~ msgid "G_allery:"
+#~ msgstr "ギャラリー(_A):"
+
+#~ msgid "Gallery"
+#~ msgstr "ギャラリー"
+
+#~ msgid "Pause"
+#~ msgstr "一時停止"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "カメラからコピーする写真の選択..."
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "ファイルを転送するカメラを選択して下さい"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "選択したカメラ: "
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "画像からメタデータを除去(_M)"
+
+#~ msgid "_Flickr"
+#~ msgstr "Flickr(_F)"
+
+#~ msgid "_Gallery"
+#~ msgstr "ギャラリー(_G)"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "アップロードが完了したらブラウザでアルバムを開く(_O)"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "エキスポートが完了したら転送先を開く(_O)"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "写真のサイズを以下に収まるように変更(_S): "
+
+#~ msgid "_Strip metadata"
+#~ msgstr "メタデータを除去(_S)"
+
+#~ msgid "_URI:"
+#~ msgstr "URI(_U):"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "仮想ファイルシステム(_V)"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Done Loading"
+#~ msgstr "読み込みが完了しました"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "フォルダがありません。"
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist.  Please choose a "
+#~ "different directory"
+#~ msgstr ""
+#~ "指定したフォルダ \"{0}\" は存在しません。他のフォルダを選択して下さい。"
+
+#~ msgid "No cameras detected."
+#~ msgstr "カメラが検出されていません。"
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system.  Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "お使いのシステムに接続されているカメラを検出できませんでした。カメラが接続"
+#~ "されているかどうか、その電源が入っているかどうかを確認して下さい。"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "カメラへ接続する際にエラー"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "カメラへ接続する際にエラー \"{0}\" を受け取りました。"
+
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "エラー: 転送する際にエラーが発生したので、処理を中止します"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "エラー: 既にファイルが存在するので、処理を中止します。"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "再関連付け版 ({0})"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "新しいバージョンを作成できませんでした"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "例外 \"{0}\" が発生しました。バージョン \"{1}\" を作成できません。"
+
+#~ msgid "Really Delete?"
+#~ msgstr "本当に削除してもよろしいですか?"
+
+#~ msgid "Cancel"
+#~ msgstr "キャンセル"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "バージョンを削除できませんでした"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "例外 \"{0}\" が発生しました。バージョン \"{1}\" を削除できません。"
+
+#~ msgid "Could not rename a version"
+#~ msgstr "バージョン名を変更できませんでした"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr ""
+#~ "例外 \"{0}\" が発生しました。バージョン \"{1}\" の名前を変更できません。"
+
+#~ msgid "Package"
+#~ msgstr "パッケージ"
+
+#~ msgid "Extension Installation"
+#~ msgstr "拡張機能のインストール"
+
+#~ msgid "<b>Select the extensions to install and click on Next</b>"
+#~ msgstr "<b>インストールする拡張機能を選択し「進む」をクリックして下さい</b>"
+
+#~ msgid "Install from:"
+#~ msgstr "インストール元:"
+
+#~ msgid "_Repositories..."
+#~ msgstr "リポジトリ(_R)..."
+
+#~ msgid "Show all packages"
+#~ msgstr "全てのパッケージを表示"
+
+#~ msgid "Show new versions only"
+#~ msgstr "新しいバージョンのパッケージのみ表示"
+
+#~ msgid "Show updates only"
+#~ msgstr "更新のあるパッケージのみ表示"
+
+#~ msgid "_Unselect All"
+#~ msgstr "全ての選択を解除(_U)"
+
+#~ msgid "label124"
+#~ msgstr "label124"
+
+#~ msgid "Overall Progress:"
+#~ msgstr "全体の進捗:"
+
+#~ msgid "Downloading extensions..."
+#~ msgstr "拡張機能をダウンロード中..."
+
+#~ msgid "Extension Manager"
+#~ msgstr "拡張機能マネージャ"
+
+#~ msgid "Additional extensions are required to perform this operation."
+#~ msgstr "この操作には追加の拡張機能が必要です。"
+
+#~ msgid "The following extensions will be installed:"
+#~ msgstr "以下の拡張機能がインストールされます:"
+
+#~ msgid "<big><b>Extension Manager</b></big>"
+#~ msgstr "<big><b>拡張機能マネージャ</b></big>"
+
+#~ msgid "The following extensions are currently installed:"
+#~ msgstr "以下の拡張機能が現在インストールされています:"
+
+#~ msgid "_Install Extensions..."
+#~ msgstr "拡張機能のインストール(_I)..."
+
+#~ msgid "_Uninstall..."
+#~ msgstr "アンインストール(_U)..."
+
+#~ msgid "Enable"
+#~ msgstr "有効化"
+
+#~ msgid "Disable"
+#~ msgstr "無効化"
+
+#~ msgid "Details"
+#~ msgstr "詳細"
+
+#~ msgid "Extension Repository Management"
+#~ msgstr "拡張機能リポジトリの管理"
+
+#~ msgid "Add New Repository"
+#~ msgstr "新しいリポジトリを追加"
+
+#~ msgid "Select the location of the repository you want to register:"
+#~ msgstr "登録したいリポジトリの場所を選択して下さい:"
+
+#~ msgid "Register an on-line repository"
+#~ msgstr "オンライン・リポジトリを登録する"
+
+#~ msgid "Url:"
+#~ msgstr "URL:"
+
+#~ msgid "Register a local repository"
+#~ msgstr "ローカル・リポジトリを登録する"
+
+#~ msgid "Path:"
+#~ msgstr "パス:"
+
+#~ msgid "Browse..."
+#~ msgstr "参照..."
+
+#~ msgid "Version:"
+#~ msgstr "バージョン:"
+
+#~ msgid "Author:"
+#~ msgstr "作者:"
+
+#~ msgid "Copyright:"
+#~ msgstr "著作権:"
+
+#~ msgid "Extension Dependencies:"
+#~ msgstr "依存する拡張:"
+
+#~ msgid "All registered repositories"
+#~ msgstr "登録されている全てのリポジトリ"
+
+#~ msgid "Are you sure you want to cancel the installation?"
+#~ msgstr "本当にインストールを中止してもよろしいですか?"
+
+#~ msgid "The following packages will be uninstalled:"
+#~ msgstr "以下のパッケージがアンインストールされます:"
+
+#~ msgid ""
+#~ "There are other extensions that depend on the previous ones which will "
+#~ "also be uninstalled:"
+#~ msgstr ""
+#~ "先行してアンインストールされる拡張機能に依存する他の拡張機能があります:"
+
+#~ msgid ""
+#~ "The selected extensions can't be installed because there are dependency "
+#~ "conflicts."
+#~ msgstr "依存関係の衝突のため、選択された拡張機能はインストールできません。"
+
+#~ msgid "The following packages will be installed:"
+#~ msgstr "以下のパッケージがインストールされます:"
+
+#~ msgid " (in user directory)"
+#~ msgstr " (ユーザ・フォルダ内)"
+
+#~ msgid "The following packages need to be uninstalled:"
+#~ msgstr "以下のパッケージのアンインストールが必要です:"
+
+#~ msgid "The following dependencies could not be resolved:"
+#~ msgstr "以下の依存関係が解決できませんでした:"
+
+#~ msgid "The installation has been successfully completed."
+#~ msgstr "インストールは無事に完了しました。"
+
+#~ msgid "The installation failed!"
+#~ msgstr "インストールに失敗しました。"
+
+#~ msgid "The installation has completed with warnings."
+#~ msgstr "警告をともないましたが、インストールは完了しました。"
+
+#~ msgid "The uninstallation has been successfully completed."
+#~ msgstr "アンインストールは無事に完了しました。"
+
+#~ msgid "The uninstallation failed!"
+#~ msgstr "アンインストールに失敗しました。"
+
+#~ msgid "The uninstallation has completed with warnings."
+#~ msgstr "警告をともないましたが、アンインストールは完了しました。"
+
+#~ msgid "Repository"
+#~ msgstr "リポジトリ"
+
+#~ msgid "Installation cancelled"
+#~ msgstr "インストールの中止"
+
+#~ msgid "Some of the required extensions were not found"
+#~ msgstr "必要な拡張機能が見つかりませんでした"
+
+#~ msgid "Installation failed"
+#~ msgstr "インストールの失敗"
+
+#~ msgid "Extension"
+#~ msgstr "拡張機能"
+
+#~ msgid "Other"
+#~ msgstr "その他"
+
+#~ msgid "Url"
+#~ msgstr "URL"
+
+#~ msgid "Exception occurred: {0}"
+#~ msgstr "例外が発生しました: {0}"
+
+#~ msgid "Disabled extensions can't be loaded."
+#~ msgstr "無効化された拡張機能が読み込めません"
+
+#~ msgid "Loading {0} extension"
+#~ msgstr "拡張機能 '{0}' を読み込み中"
+
+#~ msgid "The required extension '{0}' is disabled."
+#~ msgstr "必要な拡張機能 '{0}' が無効化されています。"
+
+#~ msgid "The required extension '{0}' is not installed."
+#~ msgstr "必要な拡張機能 '{0}' がインストールされていません。"
+
+#~ msgid "(provided by {0})"
+#~ msgstr "({0} が提供)"
+
+#~ msgid "my photos"
+#~ msgstr "私の写真"
+
+#~ msgid "Edit Selected Tag..."
+#~ msgstr "選択したタグの編集..."
+
+#~ msgid "Copy Locat_ion"
+#~ msgstr "場所をコピー(_I)"
+
+#~ msgid "_Edit Selected Tag..."
+#~ msgstr "選択したタグの編集(_E)..."
+
 #~ msgid "interpolation type"
 #~ msgstr "補完の種類"
 
@@ -4200,10 +4375,6 @@ msgstr "F-Spot の写真"
 #~ msgstr "<b>色温度</b>"
 
 #, fuzzy
-#~ msgid "<b>Import Settings</b>"
-#~ msgstr "<b>補正(_R)</b>"
-
-#, fuzzy
 #~ msgid "<b>Metadata</b>"
 #~ msgstr "メタデータ"
 
@@ -4282,30 +4453,6 @@ msgstr "F-Spot の写真"
 #~ msgid "This is who I am"
 #~ msgstr "これが私です"
 
-#~ msgid "<b>Tabblo account</b>"
-#~ msgstr "<b>Tabblo アカウント</b>"
-
-#~ msgid "<b>{0}</b>."
-#~ msgstr "<b>{0}</b>."
-
-#~ msgid "A trust error occured while attempting to access"
-#~ msgstr "アクセスの際に認証エラー"
-
-#~ msgid "Abort this session"
-#~ msgstr "このセッションを中断"
-
-#~ msgid "Always trust this site's certificate"
-#~ msgstr "このサイトの認証を常に許可する"
-
-#~ msgid "Do you wish to:"
-#~ msgstr "何をしますか:"
-
-#~ msgid "Trust Error"
-#~ msgstr "認証エラー"
-
-#~ msgid "Trust the site's certificate this once"
-#~ msgstr "このサイトの認証を一度だけ許可する"
-
 #, fuzzy
 #~ msgid "Select the area that you want blacked out."
 #~ msgstr "切り抜く領域を選択して下さい。"
diff --git a/po/nb.po b/po/nb.po
index 8e7b909..61cc3d4 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -9,10 +9,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: f-spot\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-06-16 00:20+0200\n"
-"PO-Revision-Date: 2010-06-16 00:21+0200\n"
+"POT-Creation-Date: 2010-08-08 11:23+0200\n"
+"PO-Revision-Date: 2010-08-08 11:35+0200\n"
 "Last-Translator: Kjartan Maraas <kmaraas at gnome.org>\n"
 "Language-Team: Norwegian Bokmal <i18n-nb at lister.ping.uio.no>\n"
+"Language: nb\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -21,7 +22,6 @@ msgstr ""
 #: ../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
-#: ../src/ui/main_window.ui.h:11
 msgid "F-Spot"
 msgstr "F-Spot"
 
@@ -55,54 +55,54 @@ msgstr "Fotovisning"
 msgid "_CD..."
 msgstr "_CD..."
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:162
+#: ../extensions/Exporters/CDExport/CDExport.cs:155
 msgid "Transferring Pictures"
 msgstr "Overfører bilder"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:218
+#: ../extensions/Exporters/CDExport/CDExport.cs:208
 #, csharp-format
 msgid "Transferring picture \"{0}\" To CD"
 msgstr "Overfører bilde «{0}» til CD"
 
 #. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:644 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../extensions/Exporters/CDExport/CDExport.cs:210
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:360
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:209
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:773
+#: ../src/MainWindow.cs:645 ../src/UI.Dialog/AdjustTimeDialog.cs:130
 #: ../src/UI.Dialog/ProgressDialog.cs:90
 #, csharp-format
 msgid "{0} of {1}"
 msgstr "{0} av {1}"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
+#: ../extensions/Exporters/CDExport/CDExport.cs:223
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:378
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:390
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:696
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
 msgid "Done Sending Photos"
 msgstr "Overføring av bilder fullført"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:235
+#: ../extensions/Exporters/CDExport/CDExport.cs:225
 msgid "Transfer Complete"
 msgstr "Overføring fullført"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:242
+#: ../extensions/Exporters/CDExport/CDExport.cs:232
 msgid "Error While Transferring"
 msgstr "Feil under overføring"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
+#: ../extensions/Exporters/CDExport/CDExport.cs:240
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:266
 msgid "Error Transferring"
 msgstr "Feil under overføring"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:263
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
 msgid "copying..."
 msgstr "kopierer..."
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:1
-msgid "<b><i>There is some previously scheduled items to write</i></b>"
+msgid "<b><i>There are some previously scheduled items to write</i></b>"
 msgstr ""
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:2
@@ -110,54 +110,46 @@ msgid "<b>Photos to Burn</b>"
 msgstr "<b>Bilder som skal skrives til CD</b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/ui/mail_dialog.ui.h:10
-msgid "Autorotate"
-msgstr "Roter automatisk"
-
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 msgid "Create CD"
 msgstr "Lag CD"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:222
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
+#: ../src/Widgets/InfoBox.cs:221
 msgid "Size"
 msgstr "Størrelse"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
 msgid "Size of the exported selection:"
 msgstr "Størrelse på det eksporterte utvalget:"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
 msgid "_Browse Previously Scheduled Files"
 msgstr ""
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:41
+#: ../src/ui/single_view.ui.h:12
 msgid "_Export"
 msgstr "_Eksporter"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:9
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
 msgid "_Write only these photos to CD"
 msgstr ""
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.addin.xml.h:1
 msgid "F_acebook..."
-msgstr ""
+msgstr "F_acebook..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
 msgid "Waiting for authorization"
-msgstr ""
+msgstr "Venter på autorisasjon"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:101
 msgid ""
 "F-Spot will now launch your browser so that you can enable the permission "
 "you just selected.\n"
@@ -166,30 +158,30 @@ msgid ""
 "\" below."
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
 msgid "Too many images to export"
-msgstr ""
+msgstr "For mange bilder å importere"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:283
 #, csharp-format
 msgid ""
 "Facebook only permits {0} photographs per album.  Please refine your "
 "selection and try again."
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
 msgid "Album must have a name"
-msgstr ""
+msgstr "Album må ha et navn"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:299
 msgid "Please name your album or choose an existing album."
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
 msgid "Creating a new album failed"
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:314
 #, csharp-format
 msgid ""
 "An error occurred creating a new album.\n"
@@ -197,53 +189,53 @@ msgid ""
 "{0}"
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:327
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:486
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:726
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:593
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:515
 msgid "Uploading Pictures"
 msgstr "Laster opp bilder"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:355
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:652
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:554
 #, csharp-format
 msgid "Uploading picture \"{0}\" ({1} of {2})"
 msgstr "Laster opp bilde «{0}» ({1} av {2})"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
 #, csharp-format
 msgid "Error Uploading To Facebook: {0}"
 msgstr "Feil ved opplasting til Facebook: {0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:215
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:789
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:685
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:585
 #: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
 msgid "Error"
 msgstr "Feil"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:800
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:698
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:598
 msgid "Upload Complete"
 msgstr "Opplasting fullført"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:383
 msgid "Visit F-Spot group on Facebook"
 msgstr "Besøk F-Spot-gruppen på Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
 msgid "Waiting for authentication"
 msgstr "Venter på autentisering"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:214
 msgid ""
 "F-Spot will now launch your browser so that you can log into Facebook.\n"
 "\n"
@@ -252,51 +244,51 @@ msgid ""
 "re-use it on future Facebook exports."
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:219
 msgid "Authenticating..."
 msgstr "Autentiserer..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
 msgid "Error logging into Facebook"
 msgstr "Feil ved innlogging på Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:230
 msgid ""
 "There was a problem logging into Facebook.  Check your credentials and try "
 "again."
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:239
 msgid "Authorizing Session"
 msgstr "Autoriserer sesjonen"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:248
 msgid "Session established, fetching user info..."
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:254
 msgid "Session established, fetching friend list..."
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:264
 msgid "Session established, fetching friend details..."
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:276
 msgid "Session established, fetching photo albums..."
 msgstr ""
 
 #. Note for translators: {0} and {1} are respectively firstname and surname of the user
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:286
 #, csharp-format
 msgid "{0} {1} is logged into Facebook"
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
 msgid "Facebook Connection Error"
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:296
 #, csharp-format
 msgid ""
 "There was an error when downloading your information from Facebook.\n"
@@ -304,7 +296,7 @@ msgid ""
 "Facebook said: {0}"
 msgstr ""
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:325
 msgid "You are not logged in."
 msgstr "Du er ikke logget inn."
 
@@ -333,7 +325,6 @@ msgid "In this photo"
 msgstr "I dette bildet"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:7
-#: ../src/XmpTagsImporter.cs:90
 msgid "Location"
 msgstr "Lokasjon"
 
@@ -346,7 +337,7 @@ msgid "Logout"
 msgstr "Logg ut"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../src/Widgets/InfoBox.cs:213
+#: ../src/Widgets/InfoBox.cs:212
 msgid "Name"
 msgstr "Navn"
 
@@ -382,71 +373,72 @@ msgstr "_Flickr..."
 msgid "_Zooomr..."
 msgstr "_Zooomr..."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:107
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
 msgid "Authorize"
 msgstr "Autoriser"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
 #, csharp-format
 msgid ""
 "Return to this window after you have finished the authorization process on "
 "{0} and click the \"Complete Authorization\" button below"
 msgstr ""
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:114
 msgid "Complete Authorization"
 msgstr "Fullfør autorisasjon"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
 #, csharp-format
 msgid "Logging into {0}"
 msgstr "Logger på «{0}»"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:120
 msgid "Checking credentials..."
 msgstr "Sjekker påloggingsinformasjon..."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:127
 #, csharp-format
 msgid "Welcome {0} you are connected to {1}"
 msgstr "Velkommen {0} du er koblet til {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:130
 #, csharp-format
 msgid "Sign in as a different user"
-msgstr ""
+msgstr "Logg inn som en annen bruker"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:135
 #, csharp-format
 msgid "Used {0} of your allowed {1} monthly quota"
 msgstr ""
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:239
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:308
 msgid "Unable to log on"
 msgstr "Kan ikke logge på"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:328
 #, csharp-format
 msgid "Waiting for response {0} of {1}"
 msgstr "Venter på svar {0} av {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:355
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:769
 #, csharp-format
 msgid "Uploading picture \"{0}\""
 msgstr "Laster opp bilde «{0}»"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:378
 #, csharp-format
 msgid "Error Uploading To {0}: {1}"
 msgstr "Feil ved opplasting til {0}: {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:465
 msgid "Unable to log on."
 msgstr "Kan ikke logge på."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:466
 #, csharp-format
 msgid ""
 "F-Spot was unable to log on to {0}.  Make sure you have given the "
@@ -458,7 +450,7 @@ msgid "<b>Account</b>"
 msgstr "<b>Konto</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
@@ -468,11 +460,10 @@ msgid "<b>Photos</b>"
 msgstr "<b>Foto</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/ui/mail_dialog.ui.h:8
 msgid "<b>Style</b>"
 msgstr "<b>Stil</b>"
 
@@ -481,17 +472,16 @@ msgid "<b>Viewing permissions</b>"
 msgstr "<b>Viser rettigheter</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
 msgid "Export"
 msgstr "Eksporter"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:7
-#, fuzzy
 msgid "Export tag _hierarchy"
-msgstr "_Eksporter merker"
+msgstr "Eksporter merke_hierarki"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:8
 msgid ""
@@ -525,28 +515,27 @@ msgid "Visible to Friends"
 msgstr "Synlig for venner"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
 msgid "_Export tags"
 msgstr "_Eksporter merker"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:18
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
 msgid "_Resize to: "
 msgstr "_Endre størrelse til:"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:18
-#, fuzzy
 msgid "_View photos in browser when done uploading"
-msgstr "_Åpne album i nettleser når opplasting er ferdig"
+msgstr "_Vis bilder i nettleser når opplasting er ferdig"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
 msgid "pixels"
 msgstr "piksler"
 
@@ -554,153 +543,146 @@ msgstr "piksler"
 msgid "F_older..."
 msgstr "Ma_ppe..."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:117
 msgid "Select Export Folder"
 msgstr "Velg eksportmappe"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:169
 msgid "Building Gallery"
 msgstr "Bygger galleri"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:206
 #, csharp-format
 msgid "Exporting \"{0}\"..."
 msgstr "Eksporter «{0}»..."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:213
 #, csharp-format
 msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
 msgstr "Feil ved kopiering av {0} til galleri:{2}{1}"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:239
 #, csharp-format
 msgid "Transferring to \"{0}\""
 msgstr "Overfører til «{0}»"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:240
 msgid "Transferring..."
 msgstr "Overfører..."
 
 #. No need to check result here as if result is not true, an Exception will be thrown before
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
 msgid "Export Complete."
 msgstr "Eksport fullført."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:247
 msgid "Exporting Photos Completed."
-msgstr ""
+msgstr "Eksport av bilder er fullført."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:312
 msgid "Exporting Photos"
 msgstr "Eksporterer bilder"
 
 #. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:716
 msgid "Light"
 msgstr "Lys"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
 msgid "Dark"
 msgstr "Mørk"
 
 #. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:897
 msgid "Prev"
 msgstr "Forrige"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:899
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
 msgid "Index"
 msgstr "Indeks"
 
 #. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
-#: ../src/MainWindow.cs:348 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:902
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1074
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1114
+#: ../src/MainWindow.cs:349 ../src/Widgets/Sidebar.cs:56
 msgid "Tags"
 msgstr "Merker"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:905
 #: ../src/ItemAction.cs:102
 msgid "Next"
 msgstr "Neste"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1009
 msgid "Gallery generated by"
 msgstr "Galleri laget av"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1049
 msgid "Show Styles"
 msgstr "Vis stiler"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
 msgid "Hide Styles"
 msgstr "Skjul stiler"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
-#: ../src/ui/main_window.ui.h:25
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1085
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1086
+#: ../src/ui/main_window.ui.h:24
 msgid "Tags: "
 msgstr "Merker:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1350
 msgid "Page:"
 msgstr "Side:"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
-msgid "\n"
-msgstr "\n"
-
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
 msgid "<b>Destination</b>"
 msgstr "<b>Mål</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:2
 msgid "<b>Export Method</b>"
 msgstr "<b>Metode for eksport</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
 msgid "Create _gallery using \"Original\""
 msgstr ""
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
 msgid "Create standalone _web gallery"
 msgstr ""
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
 msgid "D_escription:"
 msgstr "B_eskrivelse:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
-#, fuzzy
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
 msgid "Export _tags"
-msgstr "_Eksporter merker"
+msgstr "Eksporter _merker"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
-#, fuzzy
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
 msgid "Export tag _icons"
-msgstr "_Eksporter merker"
+msgstr "Eksporter _ikoner for merker"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
 msgid "Folder Export"
 msgstr "Eksport av mappe"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
 msgid "G_allery Name:"
 msgstr "Navn på g_alleri:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
-#, fuzzy
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
 msgid "Open _destination when done exporting"
-msgstr "_Åpne mål når eksportering er ferdig"
+msgstr "Åpne _mål når eksport er ferdig"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
 msgid "_Folder:"
 msgstr "_Mappe:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:19
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
 msgid "_Save the files only"
 msgstr "_Lagre kun filer"
 
@@ -712,85 +694,84 @@ msgstr "Uhåndtert unntak"
 msgid "Web _Gallery..."
 msgstr "_Galleri på nettet..."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:54
 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 ""
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:391
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
 msgid "Invalid URL"
 msgstr "Ugyldig URL"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:393
 msgid "The gallery URL entry does not appear to be a valid URL"
 msgstr ""
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:402
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:440
-#, fuzzy
-msgid "Error while connecting to Gallery"
-msgstr "Feil ved tilkobling til kamera"
-
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
+msgid "Error while connecting to Gallery"
+msgstr "Feil ved tilkobling til galleri"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:404
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:431
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:442
 #, csharp-format
 msgid "The following error was encountered while attempting to log in: {0}"
 msgstr ""
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:417
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
 msgid "A Gallery with this name already exists"
 msgstr ""
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:419
 #, csharp-format
 msgid ""
 "There is already a Gallery with the same name in your registered Galleries. "
 "Please choose a unique name."
 msgstr ""
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:529
 msgid "(TopLevel)"
 msgstr ""
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:590
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
 msgid "Invalid Gallery name"
-msgstr ""
+msgstr "Ugyldig navn på galleri"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:592
 msgid ""
 "The gallery name contains invalid characters.\n"
 "Only letters, numbers, - and _ are allowed"
 msgstr ""
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:796
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:788
 #, fuzzy, csharp-format
 msgid "Error uploading picture \"{0}\" to Gallery: {1}"
 msgstr "Feil ved import {0}{2}{2}{1}"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:816
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:714
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:614
 msgid "(No Gallery)"
 msgstr "(Uten galleri)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:908
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:836
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:710
 msgid "(Not Connected)"
 msgstr "(Ikke koblet til)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:909
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:837
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:711
 msgid "(No Albums)"
 msgstr "(Ingen album)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:961
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:902
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:752
 msgid "No account selected"
 msgstr "Ingen konto valgt"
 
@@ -809,90 +790,90 @@ msgstr "<b>Galleri</b>"
 msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
 msgstr ""
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
 #, fuzzy
 msgid "Export _titles and comments"
 msgstr "Eksporter _titler og kommentarer"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
 #, fuzzy
 msgid "Open _album in browser when done uploading"
 msgstr "_Åpne album i nettleser når opplasting er ferdig"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
 msgid "Please verify that the settings for this gallery are correct."
 msgstr ""
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
 msgid "U_RL:"
 msgstr "U_RL:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
 msgid "_Album Name:"
 msgstr "Navn på _album:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
 msgid "_Description:"
 msgstr "_Beskrivelse:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
 msgid "_Export to Album:"
 msgstr "_Eksporter til album:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
 msgid "_Gallery Name:"
 msgstr "Navn på _galleri:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
 msgid "_Gallery:"
 msgstr "_Galleri:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
 #, fuzzy
 msgid "_Parent Album:"
 msgstr "_Eksporter til album:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
 msgid "_Password:"
 msgstr "_Passord:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
 msgid "_Title:"
 msgstr "_Tittel:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
 msgid "_Username:"
 msgstr "Br_ukernavn:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:363
 msgid "Error reading server response"
 msgstr ""
 
 #. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:375
 msgid "Server returned response without Gallery content"
 msgstr ""
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
 #, fuzzy
 msgid "Error while creating new album"
 msgstr "Feil under rotering av bilde."
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:713
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to perform the "
@@ -904,38 +885,38 @@ msgstr ""
 msgid "_PicasaWeb..."
 msgstr "_Picasaweb..."
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:444
 msgid "Error while creating Album"
 msgstr "Feil under oppretting av album"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:445
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to create an album: {0}"
 msgstr ""
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:615
 #, csharp-format
 msgid "{0} Sent"
 msgstr "{0} sendt"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:617
 #, csharp-format
 msgid "{0} of approx. {1}"
 msgstr "{0} av ca. {1}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:683
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:583
 #, fuzzy, csharp-format
 msgid "Error Uploading To Gallery: {0}"
 msgstr "Feil ved import {0}{2}{2}{1}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:765
 #, csharp-format
 msgid "Available space: {0}, {1}% used out of {2}"
 msgstr ""
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:878
 #, csharp-format
 msgid ""
 "The selected album has a limit of {0} pictures,\n"
@@ -959,20 +940,16 @@ msgid ""
 msgstr ""
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
 msgid "Public Album"
 msgstr "Offentlig album"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
 msgid "_Album Title:"
 msgstr "_Navn på album:"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
-msgid "_Autorotate"
-msgstr "Roter _automatisk"
-
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
 msgid "_Captcha:"
 msgstr ""
 
@@ -984,7 +961,7 @@ msgstr "_SmugMug..."
 msgid "<b>SmugMug Export</b>"
 msgstr "<b>SmugMug-eksport</b>"
 
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
 msgid "_Account:"
 msgstr "_Konto:"
 
@@ -1040,54 +1017,48 @@ msgid "Rem_ove from exported photos:"
 msgstr ""
 
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
-#, fuzzy
 msgid "Select..."
-msgstr "Velg et merke..."
+msgstr "Velg..."
 
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
 msgid "_Attach to exported photos:"
 msgstr ""
 
 #: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
-msgid "<b>{0}</b>."
-msgstr "<b>{0}</b>."
-
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 #, fuzzy
 msgid "A trust error occured while attempting to access"
 msgstr "Mottok feil «{0}» ved forsøk på å rotere {1}"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "Abort this session"
 msgstr "Avbryt denne sesjonen"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
 msgid "Always trust this site's certificate"
-msgstr ""
+msgstr "Alltid stol på dette nettstedets sertifikat"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
 msgid "Do you wish to:"
 msgstr "Vil du:"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
-#, fuzzy
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
 msgid "Trust Error"
-msgstr "Feil"
+msgstr ""
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
 msgid "Trust the site's certificate this once"
-msgstr ""
+msgstr "Stol på nettstedets sertifikat denne ene gangen"
 
 #: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
 msgid "Compressed fil_e..."
 msgstr "Komprim_ert fil..."
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:198
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../src/Widgets/EditorPage.cs:199
 msgid "No selection available"
 msgstr "Ingen markerte områder tilgjengelig"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:49
 #, fuzzy
 msgid ""
 "This tool requires an active selection. Please select one or more pictures "
@@ -1096,15 +1067,15 @@ msgstr ""
 "Dette verktøyet krever et markert felt. Velg en del av bildet og gjør "
 "operasjonen igjen"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:64
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:65
 msgid "Select export folder"
 msgstr "Velg en eksportmappe"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:102
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:103
 msgid "Exporting files"
 msgstr "Eksporterer filer"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:109
 #, csharp-format
 msgid "Preparing photo \"{0}\""
 msgstr "Forbereder bilde «{0}»"
@@ -1127,50 +1098,47 @@ msgstr "_Skaler:"
 
 #: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
 msgid "Check for Duplicates..."
-msgstr ""
+msgstr "Se etter duplikater..."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:53
+#: ../extensions/Tools/HashJob/HashJob.cs:54
 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 ""
 
-#: ../extensions/Tools/HashJob/HashJob.cs:59
+#: ../extensions/Tools/HashJob/HashJob.cs:60
 #, csharp-format
 msgid ""
 "You currently have {0} photos needing md5 calculation, and {1} pending jobs"
 msgstr ""
 
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
+#: ../extensions/Tools/HashJob/HashJob.cs:76 ../src/ui/main_window.ui.h:37
 msgid "_Close"
 msgstr ""
 
-#: ../extensions/Tools/HashJob/HashJob.cs:102
-#, fuzzy
+#: ../extensions/Tools/HashJob/HashJob.cs:103
 msgid "Processing images..."
-msgstr "Feil ved prosessering av bilde"
+msgstr "Prosesserer bilder..."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:108
+#: ../extensions/Tools/HashJob/HashJob.cs:109
 msgid "Stopped"
-msgstr ""
+msgstr "Stoppet"
 
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
-#, fuzzy
 msgid "F-Spot Gallery"
-msgstr "(Uten galleri)"
+msgstr "F-Spot galleri"
 
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:108
 msgid "The web gallery seems to be offline now"
 msgstr ""
 
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:109
-#, fuzzy
 msgid "Show All"
-msgstr "Vis stiler"
+msgstr "Vis alle"
 
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:119
-#, fuzzy, csharp-format
+#, csharp-format
 msgid "{0} photo"
 msgid_plural "{0} photos"
 msgstr[0] "{0} bilde"
@@ -1178,34 +1146,30 @@ msgstr[1] "{0} bilder"
 
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:161
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:8
-#, fuzzy
 msgid "Current View"
-msgstr "Nåværende dato:"
+msgstr "Nåværende visning"
 
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:164
-#, fuzzy
 msgid "Selected"
-msgstr "Slett"
+msgstr "Valgt"
 
 #: ../extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml.h:1
 #, fuzzy
 msgid "Live Web Gallery"
 msgstr "_Galleri på nettet..."
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-#, fuzzy
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:90
 msgid "none"
-msgstr "(Ingen)"
+msgstr "ingen"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:93
 #, csharp-format
 msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
 msgstr ""
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-#, fuzzy
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:157
 msgid "Gallery is inactive"
-msgstr "Galleri laget av"
+msgstr "Galleri er inaktivt"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
 msgid ""
@@ -1229,55 +1193,49 @@ msgstr ""
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:7
 msgid "Copy URL to clipboard"
-msgstr ""
+msgstr "Kopier URL til utklippstavlen"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:9
 msgid "F-Spot Live Web Gallery"
 msgstr ""
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:10
-#, fuzzy
 msgid "Gallery URL:"
-msgstr "G_alleri:"
+msgstr "URL til galleri:"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:11
 msgid "Limit number of shared photos to"
 msgstr ""
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
-#, fuzzy
 msgid "Options:"
-msgstr "Bilde_tekst:"
+msgstr "Alternativer:"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:13
-#, fuzzy
 msgid "Photos with a Tag"
-msgstr "Bilder per side"
+msgstr "Bilder med merking"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:14
-#, fuzzy
 msgid "Selected Photos"
-msgstr "Slett bilde"
+msgstr "Valgte bilder"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:15
-#, fuzzy
 msgid "Share:"
-msgstr "Øk skarphet"
+msgstr "Del:"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:16
-#, fuzzy
 msgid "Views:"
-msgstr "Vis"
+msgstr "Visninger:"
 
 #: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
 msgid "Merge Db"
 msgstr "Sammenføy databaser"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:73
+#: ../extensions/Tools/MergeDb/MergeDb.cs:74
 msgid "Error opening the selected file"
 msgstr "Feil ved åpning av valgt fil"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:74
+#: ../extensions/Tools/MergeDb/MergeDb.cs:75
 #, csharp-format
 msgid ""
 "The file you selected is not a valid or supported database.\n"
@@ -1358,17 +1316,16 @@ msgstr ""
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfig.addin.xml.h:1
 msgid "Configure Screensaver"
-msgstr ""
+msgstr "Konfigurer skjermsparer"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
-#: ../src/UI.Dialog/DateRangeDialog.cs:129
+#: ../src/UI.Dialog/DateRangeDialog.cs:120
 msgid "All Images"
 msgstr "Alle bilder"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:2
-#, fuzzy
 msgid "Delay:"
-msgstr "_Vis:"
+msgstr "Pause:"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:3
 msgid "Display:"
@@ -1572,25 +1529,12 @@ msgid ""
 "could be useful when viewing icons or other artwork with transparent parts."
 msgstr ""
 
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
-msgid "File not found"
-msgstr "Fil ikke funnet"
-
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Ukjent transformasjonstype %d"
-
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Operasjon feilet"
-
-#: ../src/Core/App.cs:274
+#: ../src/Core/App.cs:290
 #, csharp-format
 msgid "No photos matching {0} found"
 msgstr "Ingen bilder funnet med treff på {0}"
 
-#: ../src/Core/App.cs:275
+#: ../src/Core/App.cs:291
 #, csharp-format
 msgid ""
 "The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1598,11 +1542,11 @@ msgid ""
 "F-Spot preference dialog."
 msgstr ""
 
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:295
 msgid "Search returned no results"
 msgstr "Ingen søkeresultater"
 
-#: ../src/Core/App.cs:280
+#: ../src/Core/App.cs:296
 msgid ""
 "The tag F-Spot is looking for does not exist. Try\n"
 "selecting a different tag in the F-Spot preference\n"
@@ -1613,27 +1557,27 @@ msgstr ""
 "for F-Spot."
 
 #. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:350
+#: ../src/Core/Photo.cs:405
 #, fuzzy
 msgid "Reparented"
 msgstr "Reparer"
 
-#: ../src/Core/Photo.cs:367
+#: ../src/Core/Photo.cs:422
 #, csharp-format
 msgid "Modified"
 msgid_plural "Modified ({0})"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Endret"
+msgstr[1] "Endret ({0})"
 
-#: ../src/Core/Photo.cs:390
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1}"
 msgstr "Endret i {1}"
 
-#: ../src/Core/Photo.cs:390
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1} ({0})"
-msgstr ""
+msgstr "Endret i {1} ({0})"
 
 #: ../src/Editors/AutoStretchEditor.cs:17
 msgid "Auto Color"
@@ -1715,11 +1659,6 @@ msgstr "Mykt fokus"
 msgid "Straighten"
 msgstr "Rett ut"
 
-#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
-#, csharp-format
-msgid "No way to save files of type \"{0}\""
-msgstr "Ingen måte å lagre filer av type «{0}»"
-
 #: ../src/FSpot.addin.xml.h:1
 msgid "Copy Photo"
 msgstr "Kopier bilde"
@@ -1732,17 +1671,17 @@ msgstr "Eksporter til"
 msgid "Open _With"
 msgstr "Åpne _med"
 
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
 msgid "Rem_ove Tag"
 msgstr "_Fjern merke"
 
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:24
-#: ../src/SingleView.cs:423 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:5 ../src/SingleView.cs:427
+#: ../src/ui/main_window.ui.h:16
 msgid "Rotate _Left"
 msgstr "Roter mot _venstre"
 
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:25
-#: ../src/SingleView.cs:424 ../src/ui/main_window.ui.h:18
+#: ../src/FSpot.addin.xml.h:6 ../src/SingleView.cs:428
+#: ../src/ui/main_window.ui.h:17
 msgid "Rotate _Right"
 msgstr "Roter mot _høyre"
 
@@ -1750,11 +1689,11 @@ msgstr "Roter mot _høyre"
 msgid "Tools"
 msgstr "Verktøy"
 
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:41
 msgid "_Delete From Drive"
 msgstr "_Slett fra disk"
 
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:60
 msgid "_Remove From Catalog"
 msgstr "_Fjern fra katalog"
 
@@ -1763,258 +1702,81 @@ msgid "<b>Co_rrections</b>"
 msgstr "<b>Forbedringer</b>"
 
 #: ../src/f-spot.glade.h:2
-#, fuzzy
-msgid "<b>Image Interpolation</b>"
-msgstr "<b>Mål</b>"
-
-#: ../src/f-spot.glade.h:3
-msgid "<b>Transparent Parts</b>"
-msgstr "<b>Gjennomsiktige deler</b>"
-
-#: ../src/f-spot.glade.h:4
-msgid "<b>View all pictures imported</b>"
-msgstr "<b>Vis alle importerte bilder</b>"
-
-#: ../src/f-spot.glade.h:5
 msgid "<b>_White Balance</b>"
 msgstr "<b>_Hvitbalanse</b>"
 
-#: ../src/f-spot.glade.h:6
-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 ""
-
-#: ../src/f-spot.glade.h:7
-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 ""
-
-#: ../src/f-spot.glade.h:8
-msgid "As _background"
-msgstr "Som _bakgrunn"
-
-#: ../src/f-spot.glade.h:9
-msgid "As _custom color: "
-msgstr "Som _egendefinert farge: "
-
-#: ../src/f-spot.glade.h:10
-msgid "As check _pattern"
-msgstr "Som rutenetty_pe"
-
-#: ../src/f-spot.glade.h:11
+#: ../src/f-spot.glade.h:3
 msgid "C_ontrast:"
 msgstr "K_ontrast:"
 
-#: ../src/f-spot.glade.h:12
-msgid "C_reate"
-msgstr "_Lag"
-
-#: ../src/f-spot.glade.h:13
-msgid "Create _icon for this tag when first used"
-msgstr ""
-
-#: ../src/f-spot.glade.h:14
-msgid "Display File _Names"
-msgstr "Vis fil_navn"
-
-#: ../src/f-spot.glade.h:15
-msgid "Display only those photos that were imported in specified Rolls."
-msgstr ""
-
-#: ../src/f-spot.glade.h:16
-msgid "F-Spot View"
-msgstr "F-Spot bildebehandling"
-
-#: ../src/f-spot.glade.h:17
-msgid "Filter on selected rolls"
-msgstr ""
-
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:4
 msgid "Manage your custom selection ratios"
 msgstr ""
 
-#: ../src/f-spot.glade.h:19
-msgid "Number of photos in selected rolls:"
-msgstr "Antall bilder i valgt valgte ruller:"
-
-#: ../src/f-spot.glade.h:20
-msgid "Open _Folder..."
-msgstr "Åpne mappe"
-
-#: ../src/f-spot.glade.h:21 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
-msgid "P_arent Tag:"
-msgstr ""
-
-#: ../src/f-spot.glade.h:22
-msgid "Preferences"
-msgstr "Brukervalg"
-
-#: ../src/f-spot.glade.h:23
-msgid "Repair"
-msgstr "Reparer"
-
-#: ../src/f-spot.glade.h:26
+#: ../src/f-spot.glade.h:5 ../src/ui/tag_selection_dialog.ui.h:1
 msgid "Select a Tag..."
 msgstr "Velg et merke..."
 
-#: ../src/f-spot.glade.h:27
+#: ../src/f-spot.glade.h:6
 msgid "Selection Constraints"
 msgstr "Begrensning for utvalg"
 
-#: ../src/f-spot.glade.h:28 ../src/ui/main_window.ui.h:22
-msgid "Set as _Background"
-msgstr "Bruk som _bakgrunn"
-
-#: ../src/f-spot.glade.h:29
-msgid "Show all photos."
-msgstr "Vis alle bilder."
-
-#: ../src/f-spot.glade.h:30
-msgid "Show or hide the side pane"
-msgstr "Vis eller skjul sidefeltet"
-
-#: ../src/f-spot.glade.h:31
-msgid "Show or hide the toolbar"
-msgstr "Vis eller skjul verktøylinjen"
-
-#: ../src/f-spot.glade.h:32
-msgid "Side _pane"
-msgstr "Side_felt"
-
 #. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:34
+#: ../src/f-spot.glade.h:8
 msgid "Te_mp:"
 msgstr ""
 
-#: ../src/f-spot.glade.h:35 ../src/ui/main_window.ui.h:29
-msgid "Zoom _in"
-msgstr "Zoom _inn"
-
-#: ../src/f-spot.glade.h:36 ../src/ui/main_window.ui.h:30
-msgid "Zoom _out"
-msgstr "Zoom _ut"
-
-#: ../src/f-spot.glade.h:37 ../src/ui/main_window.ui.h:31
-msgid "Zoom in"
-msgstr "Zoom inn"
-
-#: ../src/f-spot.glade.h:38 ../src/ui/main_window.ui.h:32
-msgid "Zoom out"
-msgstr "Zoom ut"
-
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:9
 msgid "_Brightness:"
 msgstr "_Lysstyrke:"
 
-#: ../src/f-spot.glade.h:40 ../src/ui/main_window.ui.h:45
-msgid "_Edit"
-msgstr "R_ediger"
-
-#: ../src/f-spot.glade.h:42
+#: ../src/f-spot.glade.h:10
 msgid "_Exposure:"
 msgstr "_Eksponering:"
 
-#: ../src/f-spot.glade.h:43 ../src/ui/main_window.ui.h:49
-msgid "_Fullscreen"
-msgstr "_Fullskjerm"
-
-#: ../src/f-spot.glade.h:44 ../src/ui/main_window.ui.h:50
-msgid "_Help"
-msgstr "_Hjelp"
-
-#: ../src/f-spot.glade.h:45
+#: ../src/f-spot.glade.h:11
 msgid "_Hue:"
 msgstr "_Tone:"
 
-#: ../src/f-spot.glade.h:46
-#, fuzzy
-msgid "_Interpolate image on zoom"
-msgstr "interpolasjonstype"
-
-#: ../src/f-spot.glade.h:47
-msgid "_New Window"
-msgstr "_Nytt vindu"
-
-#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:58
-msgid "_Photo"
-msgstr "_Bilde"
-
-#: ../src/f-spot.glade.h:49
+#: ../src/f-spot.glade.h:12
 msgid "_Saturation:"
 msgstr "_Metning:"
 
-#: ../src/f-spot.glade.h:50 ../src/ui/main_window.ui.h:69
-msgid "_Slideshow"
-msgstr "_Bildefremvisning"
-
-#: ../src/f-spot.glade.h:51 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
-msgid "_Tag Name:"
-msgstr "_Merkenavn:"
-
-#: ../src/f-spot.glade.h:52
+#: ../src/f-spot.glade.h:13
 #, fuzzy
 msgid "_Tint:"
 msgstr "Tittel"
 
-#: ../src/f-spot.glade.h:53
-msgid "_Toolbar"
-msgstr "Verk_tøylinje"
-
-#: ../src/f-spot.glade.h:54 ../src/ui/main_window.ui.h:77
-msgid "_View"
-msgstr "_Vis"
-
-#: ../src/f-spot.glade.h:55 ../src/Widgets/FindBar.cs:178
-#: ../src/Widgets/FindBar.cs:534
-msgid "and"
-msgstr "og"
-
-#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:57
-msgid ""
-"at\n"
-"after\n"
-"between"
-msgstr ""
-"den\n"
-"etter\n"
-"mellom"
-
-#: ../src/FullScreenView.cs:59
+#: ../src/FullScreenView.cs:58
 msgid "Hide"
 msgstr "Skjul"
 
-#: ../src/FullScreenView.cs:61
-msgid "Hide Toolbar"
+#: ../src/FullScreenView.cs:60
+msgid "Hide toolbar"
 msgstr "Skjul verktøylinje"
 
-#: ../src/FullScreenView.cs:67
+#: ../src/FullScreenView.cs:66
 msgid "Info"
 msgstr "Informasjon"
 
-#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
-msgid "Image Information"
+#: ../src/FullScreenView.cs:68
+msgid "Image information"
 msgstr "Bildeinformasjon"
 
-#: ../src/FullScreenView.cs:74
+#: ../src/FullScreenView.cs:73
 msgid "Exit fullscreen"
 msgstr "Lukk fullskjerm"
 
-#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:313
-#: ../src/SingleView.cs:87
+#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:314
+#: ../src/SingleView.cs:91
 msgid "Slideshow"
 msgstr "Bildefremvisning"
 
-#: ../src/FullScreenView.cs:83
+#: ../src/FullScreenView.cs:82
 msgid "Start slideshow"
 msgstr "Start lysbildefremvisning"
 
-#: ../src/FullScreenView.cs:129
+#: ../src/FullScreenView.cs:128
 msgid "Slide transition:"
 msgstr "Overgang mellom lysbilder:"
 
@@ -2026,173 +1788,16 @@ msgstr "Flere datoer"
 msgid "More"
 msgstr "Mer"
 
-#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:35
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:34
 msgid "_Clear Date Range"
 msgstr "_Nullstill datointervall"
 
-#: ../src/Imaging/Exif.cs:229
-msgid "Image Directory"
-msgstr "Bildemappe"
-
-#: ../src/Imaging/Exif.cs:231
-msgid "Thumbnail Directory"
-msgstr "Miniatyrbildemappe"
-
-#: ../src/Imaging/Exif.cs:233
-msgid "Exif Directory"
-msgstr "Exif-mappe"
-
-#: ../src/Imaging/Exif.cs:235
-msgid "GPS Directory"
-msgstr "GPS-mappe"
-
-#: ../src/Imaging/Exif.cs:237
-msgid "InterOperability Directory"
-msgstr "Samkjøringsmappe"
-
-#: ../src/Imaging/Exif.cs:239
-msgid "Unknown Directory"
-msgstr "Ukjent mappe"
-
-#: ../src/Imaging/ImageFile.cs:119
-msgid "Writing to this file format is not supported"
-msgstr "Skriving til dette filformatet er ikke støttet"
-
-#: ../src/Imaging/IptcFile.cs:145
-msgid "IPTC Information Interchange Model (IIM) Version number"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:147
-msgid "OSI Destination routing information"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:149
-msgid "IPTC file format"
-msgstr "IPTC-filformat"
-
-#: ../src/Imaging/IptcFile.cs:151
-msgid "Identifies the provider and product"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:153
-msgid "A unique number identifying the envelope"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:155
-msgid "A unique number"
-msgstr "Et unikt nummer"
-
-#: ../src/Imaging/IptcFile.cs:157
-msgid ""
-"The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:159
-msgid "The year, month and day (CCYYMMDD) the service sent the material"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:161
-msgid "The hour, minute and second (HHMMSS) the service sent the material"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:163
-msgid "The character set designation"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:165
-msgid "External globally unique object identifier"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:170
-msgid "Abstract Relationship Method (ARM) identifier"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:172
-msgid "Abstract Relationship Method (ARM) version number."
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:175
-msgid "Number identifying the IIM version this application record uses"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:177
-msgid "Object type reference"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:182
-msgid "Object attribute reference"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:188 ../src/Imaging/IptcFile.cs:192
-msgid "Object name"
-msgstr "Objektnavn"
-
-#: ../src/Imaging/IptcFile.cs:190
-msgid "Status of the objectdata according to the provider"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:194
-msgid "Location within a city or area where the object originates"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:197
-msgid "Name of the city the content is focussing on"
-msgstr "Navn på byen innholdet fokuserer på"
-
-#: ../src/Imaging/IptcFile.cs:200
-msgid "Copyright information for"
-msgstr "Opphavsrettinformasjon for"
-
-#: ../src/Imaging/IptcFile.cs:203
-msgid "Full name of the country of the focus of the content"
-msgstr "Fullt navn på landet innholdet fokuserer på"
-
-#: ../src/Imaging/IptcFile.cs:206
-msgid ""
-"Two or three letter ISO3166 code of the country of the focus of the content"
-msgstr "To- eller trebokstavs ISO3166-kode for landet innholdet fokuserer på"
-
-#: ../src/Imaging/IptcFile.cs:209
-msgid "Creator of the content"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:212
-msgid "Provider of the object"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:215
-msgid "The title of the author or creator"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:218
-msgid ""
-"The person involved in writing, editing or correcting the object data or "
-"caption/abstract"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:222
-msgid "Headline of the content"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:225
-msgid ""
-"Instructions from the creator to the receiver not covered by other fields"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:228
-msgid "Intellectual genre of the object"
-msgstr "Intellektuell genre for motiv"
-
-#: ../src/Imaging/IptcFile.cs:241
-msgid "Unknown IIM DataSet"
-msgstr "Ukjent IIM-datasett"
-
-#: ../src/Import/ImportController.cs:406 ../src/Import/ImportController.cs:408
-#: ../src/XmpTagsImporter.cs:89
+#: ../src/Import/ImportController.cs:476 ../src/Import/ImportController.cs:478
+#: ../src/Import/MetadataImporter.cs:50
 msgid "Imported Tags"
 msgstr "Importerte merker"
 
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:280 ../src/SingleView.cs:70
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:281 ../src/SingleView.cs:74
 msgid "Rotate Left"
 msgstr "Roter mot venstre"
 
@@ -2200,7 +1805,7 @@ msgstr "Roter mot venstre"
 msgid "Rotate picture left"
 msgstr "Roter bilde mot venstre"
 
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:284 ../src/SingleView.cs:75
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:285 ../src/SingleView.cs:79
 msgid "Rotate Right"
 msgstr "Roter mot høyre"
 
@@ -2220,124 +1825,131 @@ msgstr "Forrige"
 msgid "Previous picture"
 msgstr "Forrige bilde"
 
-#: ../src/MainWindow.cs:273 ../src/UI.Dialog/ImportDialog.cs:171
-#: ../src/ui/import.ui.h:4
+#: ../src/Jobs/SyncMetadataJob.cs:74
+#, csharp-format
+msgid ""
+"Metadata of file {0} may be corrupt, refusing to write to it, falling back "
+"to XMP sidecar."
+msgstr ""
+
+#: ../src/MainWindow.cs:274 ../src/UI.Dialog/ImportDialog.cs:195
+#: ../src/ui/import.ui.h:3
 msgid "Import"
 msgstr "Importer"
 
-#: ../src/MainWindow.cs:275
+#: ../src/MainWindow.cs:276
 msgid "Import new images"
 msgstr "Importer nye bilder"
 
-#: ../src/MainWindow.cs:291 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:292 ../src/ui/main_window.ui.h:3
 msgid "Browse"
 msgstr "Finn"
 
-#: ../src/MainWindow.cs:295
+#: ../src/MainWindow.cs:296
 msgid "Browse many photos simultaneously"
 msgstr "Vis mange bilder samtidig"
 
-#: ../src/MainWindow.cs:299
+#: ../src/MainWindow.cs:300
 msgid "Edit Image"
 msgstr "Rediger bilde"
 
-#: ../src/MainWindow.cs:303
+#: ../src/MainWindow.cs:304
 msgid "View and edit a photo"
 msgstr "Vis og rediger et bilde"
 
-#: ../src/MainWindow.cs:308 ../src/SingleView.cs:82
+#: ../src/MainWindow.cs:309 ../src/SingleView.cs:86
 msgid "Fullscreen"
 msgstr "Fullskjerm"
 
-#: ../src/MainWindow.cs:310 ../src/SingleView.cs:84
+#: ../src/MainWindow.cs:311 ../src/SingleView.cs:88
 msgid "View photos fullscreen"
 msgstr "Vis bilder i fullskjerm"
 
-#: ../src/MainWindow.cs:315 ../src/SingleView.cs:89
+#: ../src/MainWindow.cs:316 ../src/SingleView.cs:93
 msgid "View photos in a slideshow"
 msgstr "Vis bilder som lysbilder"
 
-#: ../src/MainWindow.cs:330
+#: ../src/MainWindow.cs:331
 msgid "Previous photo"
 msgstr "Forrige bilde"
 
-#: ../src/MainWindow.cs:335
+#: ../src/MainWindow.cs:336
 msgid "Next photo"
 msgstr "Neste bilde"
 
-#: ../src/MainWindow.cs:412
+#: ../src/MainWindow.cs:413
 msgid "Show _Find Bar"
 msgstr "Vis sø_kelinjen"
 
-#: ../src/MainWindow.cs:415
+#: ../src/MainWindow.cs:416
 msgid "Hide _Find Bar"
 msgstr "Skjul sø_kelinjen"
 
 #. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1719
+#: ../src/MainWindow.cs:1724
 #, csharp-format
 msgid "Merge the selected tag"
 msgid_plural "Merge the {0} selected tags?"
 msgstr[0] "Flett {0} valgt merke"
 msgstr[1] "Flett de {0} valgte merkene?"
 
-#: ../src/MainWindow.cs:1746
+#: ../src/MainWindow.cs:1751
 msgid ""
 "This operation will merge the selected tags and any sub-tags into a single "
 "tag."
 msgstr ""
 
-#: ../src/MainWindow.cs:1748
+#: ../src/MainWindow.cs:1753
 msgid "_Merge Tags"
 msgstr "_Sammenføy merker"
 
-#: ../src/MainWindow.cs:1953
+#: ../src/MainWindow.cs:1958
 #, csharp-format
 msgid "{0} Photo out of {1}"
 msgid_plural "{0} Photos out of {1}"
 msgstr[0] "{0} bilde av {1}"
 msgstr[1] "{0} bilder av {1}"
 
-#: ../src/MainWindow.cs:1955 ../src/SingleView.cs:465
+#: ../src/MainWindow.cs:1960 ../src/SingleView.cs:469
 #, csharp-format
 msgid "{0} Photo"
 msgid_plural "{0} Photos"
 msgstr[0] "{0} bilde"
 msgstr[1] "{0} bilder"
 
-#: ../src/MainWindow.cs:1958
+#: ../src/MainWindow.cs:1963
 #, csharp-format
 msgid " ({0} selected)"
 msgid_plural " ({0} selected)"
 msgstr[0] " ({0} valgt)"
 msgstr[1] " ({0} valgt)"
 
-#: ../src/MainWindow.cs:2039
+#: ../src/MainWindow.cs:2044
 msgid "_Ok"
 msgstr "_Ok"
 
-#: ../src/MainWindow.cs:2040
+#: ../src/MainWindow.cs:2045
 msgid "Error Deleting Picture"
 msgstr "Kunne ikke slette bilde"
 
-#: ../src/MainWindow.cs:2045
+#: ../src/MainWindow.cs:2050
 #, csharp-format
 msgid "No permission to delete the file:{1}{0}"
 msgstr "Ikke rettigheter til å slette filen:{1}{0}"
 
-#: ../src/MainWindow.cs:2049
+#: ../src/MainWindow.cs:2054
 #, csharp-format
 msgid "An error of type {0} occurred while deleting the file:{2}{1}"
 msgstr ""
 
-#: ../src/MainWindow.cs:2081
+#: ../src/MainWindow.cs:2086
 #, csharp-format
 msgid "Delete the selected photo permanently?"
 msgid_plural "Delete the {0} selected photos permanently?"
 msgstr[0] "Slett det valgte bildet permanent?"
 msgstr[1] "Slett de {0} valgte bildene permanent?"
 
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:2090
 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."
@@ -2346,20 +1958,20 @@ msgstr[0] ""
 msgstr[1] ""
 "Dette sletter alle versjoner av de valgte bildene fra harddisken din."
 
-#: ../src/MainWindow.cs:2088
+#: ../src/MainWindow.cs:2093
 msgid "_Delete photo"
 msgid_plural "_Delete photos"
 msgstr[0] "Slett bilde"
 msgstr[1] "Slett bilder"
 
-#: ../src/MainWindow.cs:2124
+#: ../src/MainWindow.cs:2129
 #, csharp-format
 msgid "Remove the selected photo from F-Spot?"
 msgid_plural "Remove the {0} selected photos from F-Spot?"
 msgstr[0] "Fjern det valgte bildet fra F-Spot?"
 msgstr[1] "Fjern de {0} valgte bildene fra F-Spot?"
 
-#: ../src/MainWindow.cs:2129
+#: ../src/MainWindow.cs:2134
 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 "
@@ -2369,27 +1981,27 @@ msgstr ""
 "tapt. Bildene vil fremdeles være lagret på datamaskinen, og de kan "
 "importeres til F-Spot igjen seinere."
 
-#: ../src/MainWindow.cs:2130
+#: ../src/MainWindow.cs:2135
 msgid "_Remove from Catalog"
 msgstr "_Fjern fra F-Spot"
 
-#: ../src/MainWindow.cs:2199
+#: ../src/MainWindow.cs:2209
 #, csharp-format
 msgid "Delete tag \"{0}\"?"
 msgstr "_Slett merket «{0}»?"
 
-#: ../src/MainWindow.cs:2201
+#: ../src/MainWindow.cs:2211
 #, csharp-format
 msgid "Delete the {0} selected tags?"
 msgstr "Slett {0} valgte merkelapper?"
 
-#: ../src/MainWindow.cs:2206
+#: ../src/MainWindow.cs:2216
 msgid "photo"
 msgid_plural "photos"
 msgstr[0] "bilde"
 msgstr[1] "bilder"
 
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2218
 #, fuzzy, csharp-format
 msgid "If you delete this tag, the association with {0} {1} will be lost."
 msgid_plural ""
@@ -2399,57 +2011,57 @@ msgstr[0] ""
 msgstr[1] ""
 "Hvis du sletter et merke, vil merkets tilknytninger til bilder gå tapt."
 
-#: ../src/MainWindow.cs:2213
+#: ../src/MainWindow.cs:2223
 msgid "_Delete tag"
 msgid_plural "_Delete tags"
 msgstr[0] "_Slett merke"
 msgstr[1] "_Slett merker"
 
 #. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2227
+#: ../src/MainWindow.cs:2237
 msgid "Tag is not empty"
 msgstr ""
 
-#: ../src/MainWindow.cs:2228
+#: ../src/MainWindow.cs:2238
 #, csharp-format
 msgid ""
 "Can not delete tags that have tags within them.  Please delete tags under "
 "\"{0}\" first"
 msgstr ""
 
-#: ../src/MainWindow.cs:2659
+#: ../src/MainWindow.cs:2678
 msgid "Rotate selected photo left"
 msgid_plural "Rotate selected photos left"
 msgstr[0] "Roter valgt bilde til venstre"
 msgstr[1] "Roter valgte bilder til venstre"
 
-#: ../src/MainWindow.cs:2672
+#: ../src/MainWindow.cs:2691
 msgid "Rotate selected photo right"
 msgid_plural "Rotate selected photos right"
 msgstr[0] "Roter valgt bilde til høyre"
 msgstr[1] "Roter valgte bilder til høyre"
 
-#: ../src/MainWindow.cs:2683
+#: ../src/MainWindow.cs:2702
 #, csharp-format
 msgid "Find _Selected Tag"
 msgid_plural "Find _Selected Tags"
 msgstr[0] "Finn _valgt merkelapp"
 msgstr[1] "Finn _valgte merkelapper"
 
-#: ../src/MainWindow.cs:2687
+#: ../src/MainWindow.cs:2706
 #, fuzzy, csharp-format
 msgid "Find Selected Tag _With"
 msgid_plural "Find Selected Tags _With"
 msgstr[0] "_Rediger valgt merke..."
 msgstr[1] "_Rediger valgt merke..."
 
-#: ../src/MainWindow.cs:2728
+#: ../src/MainWindow.cs:2747
 msgid "Create New Version?"
 msgid_plural "Create New Versions?"
 msgstr[0] "Opprett ny versjon?"
 msgstr[1] "Opprett nye versjoner?"
 
-#: ../src/MainWindow.cs:2730
+#: ../src/MainWindow.cs:2749
 #, csharp-format
 msgid ""
 "Before launching {1}, should F-Spot create a new version of the selected "
@@ -2460,121 +2072,11 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../src/MainWindow.cs:2752
+#: ../src/MainWindow.cs:2771
 msgid "XCF version"
 msgstr "XCF-versjon"
 
-#: ../src/MetadataStore.cs:19
-msgid "Creator"
-msgstr "Fotograf"
-
-#: ../src/MetadataStore.cs:20
-msgid "Title"
-msgstr "Tittel"
-
-#: ../src/MetadataStore.cs:21
-msgid "Copyright"
-msgstr "Opphavsrett"
-
-#: ../src/MetadataStore.cs:22
-msgid "Subject and Keywords"
-msgstr "Motiv og nøkkelord"
-
-#: ../src/MetadataStore.cs:23
-msgid "Compression"
-msgstr "Kompresjon"
-
-#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
-#. "when Planar Configuration=1, this implies that all components must have
-#. the same BitsPerSample value; when Planar Configuration=2, different
-#. components could have different bit depths."
-#: ../src/MetadataStore.cs:29
-msgid "Planar Configuration"
-msgstr ""
-
-#: ../src/MetadataStore.cs:31
-msgid "Orientation"
-msgstr "Orientasjon"
-
-#: ../src/MetadataStore.cs:33
-msgid "Photometric Interpretation"
-msgstr ""
-
-#: ../src/MetadataStore.cs:35
-msgid "Resolution Unit"
-msgstr "Oppløsningsenhet"
-
-#: ../src/MetadataStore.cs:37
-msgid "Exposure Program"
-msgstr "Eksponeringsprogram"
-
-#: ../src/MetadataStore.cs:39
-msgid "Metering Mode"
-msgstr ""
-
-#: ../src/MetadataStore.cs:41
-msgid "Exposure Mode"
-msgstr "Eksponeringsmodus"
-
-#: ../src/MetadataStore.cs:43
-msgid "Custom Rendered"
-msgstr ""
-
-#: ../src/MetadataStore.cs:45
-msgid "Components Configuration"
-msgstr ""
-
-#: ../src/MetadataStore.cs:47
-msgid "Light Source"
-msgstr "Lyskilde"
-
-#: ../src/MetadataStore.cs:49
-msgid "Sensing Method"
-msgstr ""
-
-#: ../src/MetadataStore.cs:51
-msgid "Color Space"
-msgstr "Fargeområde"
-
-#: ../src/MetadataStore.cs:53
-msgid "White Balance"
-msgstr "Hvitbalanse"
-
-#: ../src/MetadataStore.cs:55
-msgid "Focal Plane Resolution Unit"
-msgstr ""
-
-#: ../src/MetadataStore.cs:57
-msgid "File Source Type"
-msgstr "Kildetype for fil"
-
-#: ../src/MetadataStore.cs:59
-msgid "Scene Capture Type"
-msgstr ""
-
-#. Translators: Gain Control is the label for the exif:GainControl tag
-#. "This tag indicates the degree of overall image gain adjustment."
-#: ../src/MetadataStore.cs:63
-msgid "Gain Control"
-msgstr ""
-
-#: ../src/MetadataStore.cs:65
-msgid "Contrast"
-msgstr "Kontrast"
-
-#: ../src/MetadataStore.cs:67
-msgid "Saturation"
-msgstr "Metning"
-
-#: ../src/MetadataStore.cs:69
-msgid "Sharpness"
-msgstr "Skarphet"
-
-#: ../src/MetadataStore.cs:71
-msgid "Scene Type"
-msgstr "Motivtype"
-
-#: ../src/PhotoStore.cs:166 ../src/ui/mail_dialog.ui.h:19
+#: ../src/PhotoStore.cs:177 ../src/ui/mail_dialog.ui.h:17
 msgid "Original"
 msgstr "Original"
 
@@ -2584,148 +2086,151 @@ msgstr "Original"
 msgid "(No Tags)"
 msgstr "(Ingen merker)"
 
-#: ../src/PhotoVersionCommands.cs:58
+#: ../src/PhotoVersionCommands.cs:59
 msgid "Create New Version"
 msgstr "Opprett ny versjon"
 
-#: ../src/PhotoVersionCommands.cs:59
+#: ../src/PhotoVersionCommands.cs:60
 msgid "Name:"
 msgstr "Navn:"
 
-#: ../src/PhotoVersionCommands.cs:63
+#: ../src/PhotoVersionCommands.cs:64
 msgid "Rename Version"
 msgstr "Endre versjonsnavn"
 
-#: ../src/PhotoVersionCommands.cs:64
+#: ../src/PhotoVersionCommands.cs:65
 msgid "New name:"
 msgstr "Nytt navn:"
 
-#: ../src/PhotoVersionCommands.cs:123
+#: ../src/PhotoVersionCommands.cs:125
 msgid "Delete"
 msgstr "Slett"
 
-#: ../src/PhotoVersionCommands.cs:124
+#: ../src/PhotoVersionCommands.cs:126
 #, csharp-format
 msgid "Really delete version \"{0}\"?"
 msgstr "Vil du slette versjon «{0}»?"
 
-#: ../src/PhotoVersionCommands.cs:125
+#: ../src/PhotoVersionCommands.cs:127
 msgid "This removes the version and deletes the corresponding file from disk."
 msgstr ""
 
-#: ../src/PhotoVersionCommands.cs:170
+#: ../src/PhotoVersionCommands.cs:172
 msgid "De_tach"
 msgstr ""
 
-#: ../src/PhotoVersionCommands.cs:171
+#: ../src/PhotoVersionCommands.cs:173
 #, fuzzy, csharp-format
 msgid "Really detach version \"{0}\" from \"{1}\"?"
 msgstr "Vil du slette versjon «{0}»?"
 
-#: ../src/PhotoVersionCommands.cs:172
+#: ../src/PhotoVersionCommands.cs:174
 msgid ""
 "This makes the version appear as a separate photo in the library. To undo, "
 "drag the new photo back to its parent."
 msgstr ""
 
-#: ../src/PhotoVersionCommands.cs:194
+#: ../src/PhotoVersionCommands.cs:196
 #, fuzzy
 msgid "Re_parent"
 msgstr "Reparer"
 
-#: ../src/PhotoVersionCommands.cs:195
+#: ../src/PhotoVersionCommands.cs:197
 #, fuzzy, csharp-format
 msgid "Really reparent \"{0}\" as version of \"{1}\"?"
 msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
 msgstr[0] "Vil du slette versjon «{0}»?"
 msgstr[1] "Vil du slette versjon «{0}»?"
 
-#: ../src/PhotoVersionCommands.cs:198
+#: ../src/PhotoVersionCommands.cs:200
 msgid ""
 "This makes the photos appear as a single one in the library. The versions "
 "can be detached using the Photo menu."
 msgstr ""
 
-#: ../src/PhotoVersionCommands.cs:238
+#: ../src/PhotoVersionCommands.cs:240
 #, fuzzy, csharp-format
 msgid "Received exception \"{0}\"."
 msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
 
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
-#: ../src/Widgets/InfoBox.cs:568
+#: ../src/PhotoVersionMenu.cs:54 ../src/Widgets/InfoBox.cs:470
 msgid "(No Edits)"
 msgstr "(Ingen redigeringer)"
 
-#: ../src/PhotoView.cs:339
-msgid "Comment:"
-msgstr "Kommentar:"
+#: ../src/PhotoView.cs:336
+msgid "Description:"
+msgstr "Beskrivelse:"
 
-#: ../src/Preferences.cs:152
+#: ../src/Preferences.cs:157
 msgid "Photos"
 msgstr "Bilder"
 
-#: ../src/PrintOperation.cs:32
+#: ../src/PrintOperation.cs:33
 msgid "Image Settings"
 msgstr "Innstillinger for bilde"
 
-#: ../src/QueryWidget.cs:55
+#: ../src/QueryWidget.cs:57
 msgid "Find: "
 msgstr "Finn: "
 
-#: ../src/QueryWidget.cs:60
+#: ../src/QueryWidget.cs:62
 msgid "Untagged photos"
 msgstr "Umerkede fotografier"
 
-#: ../src/QueryWidget.cs:68
+#: ../src/QueryWidget.cs:70
 msgid "Rated photos"
 msgstr "Bilder med poeng"
 
 #. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:77
+#: ../src/QueryWidget.cs:79
 msgid "Import roll"
 msgstr "Importer rull"
 
-#: ../src/QueryWidget.cs:100
+#: ../src/QueryWidget.cs:102
 msgid "Clear search"
 msgstr "Tøm søk"
 
-#: ../src/QueryWidget.cs:107
+#: ../src/QueryWidget.cs:109
 msgid "Refresh search"
 msgstr "Oppdater søk"
 
-#: ../src/QueryWidget.cs:110
+#: ../src/QueryWidget.cs:112
 msgid "No matching photos found"
 msgstr "Ingen passende bilder funnet"
 
-#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
+#: ../src/RotateCommand.cs:74
 msgid "Unable to rotate this type of photo"
 msgstr "Kan ikke rotere denne typen bilde"
 
-#: ../src/RotateCommand.cs:122
+#: ../src/RotateCommand.cs:93
 msgid "Unable to rotate readonly file"
 msgstr "Kan ikke rotere skrivebeskytte fil"
 
-#: ../src/RotateCommand.cs:185
+#: ../src/RotateCommand.cs:156
 msgid "Rotating photos"
 msgstr "Roterer bilder"
 
-#: ../src/RotateCommand.cs:196
+#: ../src/RotateCommand.cs:167
 #, csharp-format
 msgid "Rotating photo \"{0}\""
 msgstr "Roterer bilde «{0}»"
 
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:180
 msgid "Directory not found"
 msgstr "Katalog ikke funnet"
 
-#: ../src/RotateCommand.cs:229
+#: ../src/RotateCommand.cs:182
+msgid "File not found"
+msgstr "Fil ikke funnet"
+
+#: ../src/RotateCommand.cs:200
 #, csharp-format
 msgid "Unable to rotate photo"
 msgid_plural "Unable to rotate {0} photos"
 msgstr[0] "Kan ikke rotere bilde"
 msgstr[1] "Kan ikke rotere {0} bilder"
 
-#: ../src/RotateCommand.cs:231
+#: ../src/RotateCommand.cs:202
 #, fuzzy, csharp-format
 msgid ""
 "The photo could not be rotated because it is on a read only file system or "
@@ -2742,97 +2247,97 @@ msgstr[1] ""
 "som ikke kan skrives til, som for eksempel en CDROM. Se over rettighetene og "
 "prøv igjen"
 
-#: ../src/RotateCommand.cs:258
+#: ../src/RotateCommand.cs:229
 #, csharp-format
 msgid "Received error \"{0}\" while attempting to rotate {1}"
 msgstr "Mottok feil «{0}» ved forsøk på å rotere {1}"
 
-#: ../src/RotateCommand.cs:263
+#: ../src/RotateCommand.cs:234
 msgid "Error while rotating photo."
 msgstr "Feil under rotering av bilde."
 
-#: ../src/SendEmail.cs:217
+#: ../src/SendEmail.cs:211
 msgid "Preparing email"
 msgstr "Forbereder e-post"
 
-#: ../src/SendEmail.cs:266
+#: ../src/SendEmail.cs:255
 #, csharp-format
 msgid "Exporting picture \"{0}\""
 msgstr "Eksporter bilde «{0}»"
 
-#: ../src/SendEmail.cs:285
+#: ../src/SendEmail.cs:274
 msgid "Error processing image"
 msgstr "Feil ved prosessering av bilde"
 
-#: ../src/SendEmail.cs:286
+#: ../src/SendEmail.cs:275
 #, csharp-format
 msgid "An error occured while processing \"{0}\": {1}"
 msgstr ""
 
 #. Send the mail :)
-#: ../src/SendEmail.cs:299
+#: ../src/SendEmail.cs:288
 msgid "My Photos"
 msgstr "Mine bilder"
 
-#: ../src/Sharpener.cs:72
+#: ../src/Sharpener.cs:73
 msgid "Error saving sharpened photo"
 msgstr "Feil ved lagring av oppskarpet foto"
 
-#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#: ../src/Sharpener.cs:74 ../src/UI.Dialog/EditExceptionDialog.cs:27
 #, csharp-format
 msgid "Received exception \"{0}\". Unable to save photo {1}"
 msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
 
-#: ../src/Sharpener.cs:102
+#: ../src/Sharpener.cs:103
 msgid "Sharpen"
 msgstr "Øk skarphet"
 
-#: ../src/Sharpener.cs:112
+#: ../src/Sharpener.cs:113
 msgid "Amount:"
 msgstr "Mengde:"
 
-#: ../src/Sharpener.cs:113
+#: ../src/Sharpener.cs:114
 msgid "Radius:"
 msgstr "Radius:"
 
-#: ../src/Sharpener.cs:114
+#: ../src/Sharpener.cs:115
 msgid "Threshold:"
 msgstr "Terskel:"
 
-#: ../src/SingleView.cs:72
+#: ../src/SingleView.cs:76
 msgid "Rotate photo left"
 msgstr "Roter bildet til venstre"
 
-#: ../src/SingleView.cs:77
+#: ../src/SingleView.cs:81
 msgid "Rotate photo right"
 msgstr "Roter bildet til høyre"
 
-#: ../src/SingleView.cs:114
+#: ../src/SingleView.cs:118
 msgid "Folder"
 msgstr "Mappe"
 
-#: ../src/SingleView.cs:339
+#: ../src/SingleView.cs:343
 msgid "Open"
 msgstr "Åpne"
 
-#: ../src/SingleView.cs:342
+#: ../src/SingleView.cs:346
 msgid "Select Folder"
 msgstr "Velg mappe"
 
-#: ../src/SingleView.cs:426
+#: ../src/SingleView.cs:430
 msgid "Set as Background"
 msgstr "Bruk som bakgrunn"
 
-#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
+#: ../src/TagCommands.cs:116 ../src/TagSelectionWidget.cs:497
 #: ../src/UI.Dialog/EditTagDialog.cs:76
 msgid "This name is already in use"
 msgstr "Dette navnet er allerede i bruk"
 
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:166
 msgid "Create New Tag"
 msgstr "Opprett nytt merke"
 
-#: ../src/TagCommands.cs:146
+#: ../src/TagCommands.cs:167
 msgid "Name of New Tag:"
 msgstr "Navn på nytt merke:"
 
@@ -2907,32 +2412,32 @@ msgstr "Ikke {0}"
 msgid "Drag tags here to search for them"
 msgstr "Dra merkelapper hit for å søke etter dem"
 
-#: ../src/TagSelectionWidget.cs:490
+#: ../src/TagSelectionWidget.cs:496
 msgid "Error renaming tag"
 msgstr "Feil ved endring av merkenavn"
 
-#: ../src/TagStore.cs:204
+#: ../src/TagStore.cs:205
 msgid "Favorites"
 msgstr "Favoritter"
 
-#: ../src/TagStore.cs:209
+#: ../src/TagStore.cs:210
 msgid "Hidden"
 msgstr "Skjult"
 
-#: ../src/TagStore.cs:217
+#: ../src/TagStore.cs:218
 msgid "People"
 msgstr "Personer"
 
-#: ../src/TagStore.cs:222
+#: ../src/TagStore.cs:223
 msgid "Places"
 msgstr "Steder"
 
-#: ../src/TagStore.cs:227
+#: ../src/TagStore.cs:228
 msgid "Events"
 msgstr "Hendelser"
 
 #. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
+#: ../src/TagStore.cs:241 ../src/Widgets/InfoBox.cs:344
 msgid "(None)"
 msgstr "(Ingen)"
 
@@ -2965,16 +2470,15 @@ msgstr "Oppdaterer miniatyrer"
 msgid "Updating picture \"{0}\""
 msgstr "Oppdaterer bilde «{0}»"
 
-#: ../src/UI.Dialog/AboutDialog.cs:94
+#: ../src/UI.Dialog/AboutDialog.cs:99
 msgid "Photo management for GNOME"
 msgstr "Fotobehandler for GNOME"
 
-#: ../src/UI.Dialog/AboutDialog.cs:95
-#, fuzzy
+#: ../src/UI.Dialog/AboutDialog.cs:100
 msgid "Copyright © 2003-2010 Novell Inc."
-msgstr "Opphavsrett © 2003-2009 Novell Inc."
+msgstr "Opphavsrett © 2003-2010 Novell Inc."
 
-#: ../src/UI.Dialog/AboutDialog.cs:119
+#: ../src/UI.Dialog/AboutDialog.cs:124
 msgid "translator-credits"
 msgstr ""
 "Kjartan Maraas <kmaraas at gnome.org>, 2006-2010\n"
@@ -2982,7 +2486,7 @@ msgstr ""
 "Sigurd Gartmann\n"
 "Øivind Hoel <ohoel at cvs.gnome.org>, 2006"
 
-#: ../src/UI.Dialog/AboutDialog.cs:124
+#: ../src/UI.Dialog/AboutDialog.cs:129
 msgid "F-Spot Website"
 msgstr "F-Spot nettsted"
 
@@ -2992,56 +2496,56 @@ msgstr "F-Spot nettsted"
 msgid "Shift all photos by {0}"
 msgstr ""
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:99
+#: ../src/UI.Dialog/DateRangeDialog.cs:90
 msgid "Today"
 msgstr "Idag"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:101
+#: ../src/UI.Dialog/DateRangeDialog.cs:92
 msgid "Yesterday"
 msgstr "Igår"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:103
+#: ../src/UI.Dialog/DateRangeDialog.cs:94
 msgid "Last 7 days"
 msgstr "Siste 7 dagene"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:105
+#: ../src/UI.Dialog/DateRangeDialog.cs:96
 msgid "Last 30 days"
 msgstr "Siste 30 dagene"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:107
+#: ../src/UI.Dialog/DateRangeDialog.cs:98
 msgid "Last 90 days"
 msgstr "Siste 90 dagene"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:109
+#: ../src/UI.Dialog/DateRangeDialog.cs:100
 msgid "Last 360 days"
 msgstr "Siste 360 dagene"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:111
+#: ../src/UI.Dialog/DateRangeDialog.cs:102
 msgid "Current Week (Mon-Sun)"
 msgstr "Nåværende uke (Man-Søn)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:113
+#: ../src/UI.Dialog/DateRangeDialog.cs:104
 msgid "Previous Week (Mon-Sun)"
 msgstr "Forrige uke (Man-Søn)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:131
+#: ../src/UI.Dialog/DateRangeDialog.cs:122
 msgid "Customized Range"
 msgstr "Egendefinert område"
 
-#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+#: ../src/UI.Dialog/EditExceptionDialog.cs:40
 msgid "Error editing photo"
 msgstr "Feil ved redigering av bilde"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:42
+#: ../src/UI.Dialog/EditTagIconDialog.cs:44
 #, csharp-format
 msgid "Edit Icon for Tag {0}"
 msgstr "Rediger ikon for merke {0}"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:64
+#: ../src/UI.Dialog/EditTagIconDialog.cs:66
 msgid "Select Photo from file"
 msgstr "Velg bilde fra fil"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:86
+#: ../src/UI.Dialog/EditTagIconDialog.cs:88
 #, csharp-format
 msgid ""
 "\n"
@@ -3052,79 +2556,96 @@ msgid ""
 " to use it as an icon."
 msgstr ""
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:164
+#: ../src/UI.Dialog/EditTagIconDialog.cs:166
 msgid "Unable to load image"
 msgstr "Kan ikke laste bilde"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:165
+#: ../src/UI.Dialog/EditTagIconDialog.cs:167
 #, csharp-format
 msgid "Unable to load \"{0}\" as icon for the tag"
 msgstr ""
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:203
+#: ../src/UI.Dialog/EditTagIconDialog.cs:205
 #, csharp-format
 msgid "Photo {0} of {1}"
 msgstr "Foto {0} av {1}"
 
-#: ../src/UI.Dialog/ExceptionDialog.cs:24
-msgid "F-Spot Encountered a Fatal Error"
-msgstr ""
-
-#: ../src/UI.Dialog/ExceptionDialog.cs:60
-msgid "Error Details"
-msgstr "Detaljer om feil"
-
-#: ../src/UI.Dialog/ExceptionDialog.cs:104
-msgid "An unhandled exception was thrown: "
-msgstr "En uhåndtert feil oppstod:"
-
 #: ../src/UI.Dialog/ImportDialog.cs:15
-#, fuzzy
 msgid "Choose Folder..."
-msgstr "Åpne mappe"
+msgstr "Velg mappe..."
 
-#: ../src/UI.Dialog/ImportDialog.cs:124
-#, fuzzy
+#: ../src/UI.Dialog/ImportDialog.cs:131
 msgid "Choose Import source..."
-msgstr "Importer kilde:"
+msgstr "Velg kilde for import..."
 
-#: ../src/UI.Dialog/ImportDialog.cs:136
+#: ../src/UI.Dialog/ImportDialog.cs:143
 msgid "(No Cameras Detected)"
 msgstr "(Ingen kameraer funnet)"
 
-#: ../src/UI.Dialog/ImportDialog.cs:264
-#, fuzzy, csharp-format
+#: ../src/UI.Dialog/ImportDialog.cs:178
+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 ""
+
+#: ../src/UI.Dialog/ImportDialog.cs:179
+msgid "Warning"
+msgstr "Advarsel"
+
+#: ../src/UI.Dialog/ImportDialog.cs:297
+#, csharp-format
 msgid "Importing Photos: {0} of {1}..."
-msgstr "Foto {0} av {1}"
+msgstr "Importerer bilder: {0} av {1}..."
 
-#: ../src/UI.Dialog/ImportDialog.cs:288
-#, fuzzy
+#: ../src/UI.Dialog/ImportDialog.cs:321
 msgid "Importing photos..."
-msgstr "Roterer bilder"
+msgstr "Importerer bilder..."
 
 #. TODO: Using a GtkSpinner would be nicer here.
-#: ../src/UI.Dialog/ImportDialog.cs:295
+#: ../src/UI.Dialog/ImportDialog.cs:328
 msgid "Searching for photos... (You can already click Import to continue)"
 msgstr ""
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:55
-#: ../src/UI.Dialog/PreferenceDialog.cs:78
+#: ../src/UI.Dialog/ImportFailureDialog.cs:36
+#, fuzzy
+msgid "Import failures"
+msgstr "Importer rull"
+
+#: ../src/UI.Dialog/ImportFailureDialog.cs:37
+msgid "Some files failed to import"
+msgstr "Klarte ikke å importere alle filene"
+
+#: ../src/UI.Dialog/ImportFailureDialog.cs:38
+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 ""
+
+#: ../src/UI.Dialog/ImportFailureDialog.cs:101
+msgid "Details"
+msgstr "Detaljer"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
+#: ../src/UI.Dialog/PreferenceDialog.cs:80
 msgid "None"
 msgstr "Ingen"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:57
+#: ../src/UI.Dialog/PreferenceDialog.cs:59
 msgid "System profile"
 msgstr "Systemprofil"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:95
+#: ../src/UI.Dialog/PreferenceDialog.cs:97
 msgid "Standard theme"
 msgstr "Standard tema"
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
 msgid "Error loading database."
 msgstr "Feil ved lasting av database."
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:22
+#: ../src/UI.Dialog/RepairDbDialog.cs:23
 #, csharp-format
 msgid ""
 "F-Spot encountered an error while loading the photo database. The old "
@@ -3187,6 +2708,24 @@ msgstr "forskjell:"
 msgid "min. Starting at {0}"
 msgstr "min. Start på {0}"
 
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
+msgid "C_reate"
+msgstr "_Lag"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:2
+msgid "Create _icon for this tag when first used"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "_Merkenavn:"
+
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
 msgid "<b>End Date</b>"
 msgstr "<b>Sluttdato</b>"
@@ -3212,18 +2751,14 @@ msgid "Set date range"
 msgstr "Sett datoområde"
 
 #: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
-msgid "<small></small>"
-msgstr "<small></small>"
-
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit Tag"
 msgstr "Rediger merke"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit icon"
 msgstr "Rediger ikon"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
 msgid "_Icon:"
 msgstr "_Ikon:"
 
@@ -3255,9 +2790,43 @@ msgstr "Rediger ikon for merke"
 msgid "No _image"
 msgstr "Ingen b_ilder"
 
-#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:8
-msgid "Photo 0 of 0"
-msgstr "Foto 0 av 0"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:1
+msgid "<b>View all pictures imported</b>"
+msgstr "<b>Vis alle importerte bilder</b>"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:2
+msgid "Display only those photos that were imported in specified Rolls."
+msgstr ""
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
+msgid "Filter on selected rolls"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
+msgid "Number of photos in selected rolls:"
+msgstr "Antall bilder i valgt valgte ruller:"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
+msgid "Show all photos."
+msgstr "Vis alle bilder."
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
+msgid "after"
+msgstr "etter"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:534
+msgid "and"
+msgstr "og"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:8
+#, fuzzy
+msgid "at"
+msgstr "Dato"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:9
+msgid "between"
+msgstr "mellom"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:1
 msgid "Color profile for display:"
@@ -3282,18 +2851,24 @@ msgid ""
 msgstr ""
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:7
+msgid ""
+"Never modify image files.\n"
+"<small>Write XMP files next to the images instead.</small>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
 msgid "Select A Folder"
 msgstr "Velg en mappe"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:8
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
 msgid "Separately from the image files"
 msgstr ""
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:11
 msgid "Store tags and descriptions for photos:"
 msgstr ""
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:12
 msgid "When importing photos, copy them to:"
 msgstr ""
 
@@ -3309,27 +2884,39 @@ msgstr "<b>Laveste poengsum</b>"
 msgid "Set Rating Filter"
 msgstr ""
 
+#: ../src/UI.Dialog/ui/RepairDialog.ui.h:1
+msgid "Repair"
+msgstr "Reparer"
+
 #: ../src/ui/import.ui.h:1
-msgid "Attach Tags:"
-msgstr "Fest merkelapper:"
+msgid "C_opy files to the Photos folder"
+msgstr "K_opier filer til bildemappen"
 
 #: ../src/ui/import.ui.h:2
-msgid "Copy files to the Photos folder"
-msgstr "Kopier filer til bildemappen"
-
-#: ../src/ui/import.ui.h:3
-msgid "Detect duplicates"
-msgstr ""
+msgid "I_nclude subfolders"
+msgstr "Ta med u_ndermapper"
 
 #. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:5
+msgid "Import _from:"
+msgstr "Importer _fra:"
+
 #: ../src/ui/import.ui.h:6
 #, fuzzy
-msgid "Import from:"
-msgstr "Importer rull"
+msgid "_Attach tags:"
+msgstr "Legg til merke:"
 
 #: ../src/ui/import.ui.h:7
-msgid "Include subfolders"
-msgstr "Ta med undermapper"
+msgid "_Detect duplicates"
+msgstr ""
+
+#: ../src/ui/import.ui.h:8
+msgid "_Import"
+msgstr "_Importer"
+
+#: ../src/ui/import.ui.h:9
+msgid "_Remove original files after import"
+msgstr ""
 
 #: ../src/ui/mail_dialog.ui.h:1
 msgid "1024 px"
@@ -3355,65 +2942,59 @@ msgstr "800 piksler"
 msgid "<b>Size</b>"
 msgstr "<b>Størrelse</b>"
 
-#: ../src/ui/mail_dialog.ui.h:9
+#: ../src/ui/mail_dialog.ui.h:8
 msgid "<b>Summary</b>"
 msgstr "<b>Sammendrag</b>"
 
-#: ../src/ui/mail_dialog.ui.h:11
+#: ../src/ui/mail_dialog.ui.h:9
 msgid "Create Mail"
 msgstr "Lag e-post"
 
-#: ../src/ui/mail_dialog.ui.h:12
+#: ../src/ui/mail_dialog.ui.h:10
 msgid "Create a mail with the selected photos (possibly resized) attached"
 msgstr ""
 
-#: ../src/ui/mail_dialog.ui.h:13
+#: ../src/ui/mail_dialog.ui.h:11
 msgid "Do not send a mail"
 msgstr "Ikke send e-post"
 
-#: ../src/ui/mail_dialog.ui.h:14
+#: ../src/ui/mail_dialog.ui.h:12
 msgid "Estimated new size"
 msgstr "Estimert ny størrelse"
 
-#: ../src/ui/mail_dialog.ui.h:15
+#: ../src/ui/mail_dialog.ui.h:13
 msgid "Extra large"
 msgstr "Ekstra stor"
 
-#: ../src/ui/mail_dialog.ui.h:16
+#: ../src/ui/mail_dialog.ui.h:14
 msgid "Large"
 msgstr "Stor:"
 
-#: ../src/ui/mail_dialog.ui.h:17
+#: ../src/ui/mail_dialog.ui.h:15
 msgid "Medium"
 msgstr "Middelse"
 
-#: ../src/ui/mail_dialog.ui.h:18
+#: ../src/ui/mail_dialog.ui.h:16
 msgid "Number of pictures"
 msgstr "Antall bilder"
 
-#: ../src/ui/mail_dialog.ui.h:20
+#: ../src/ui/mail_dialog.ui.h:18
 msgid "Original size (possible very large file size)"
 msgstr "Opprinnelig størrelse (kan være veldig stor fil)"
 
-#: ../src/ui/mail_dialog.ui.h:21
+#: ../src/ui/mail_dialog.ui.h:19
 msgid "Small"
 msgstr "Liten"
 
-#: ../src/ui/mail_dialog.ui.h:22
-msgid ""
-"Specify if an original size picture should be rotated or not. Smaller sizes "
-"are automatically rotated."
-msgstr ""
-
-#: ../src/ui/mail_dialog.ui.h:23
+#: ../src/ui/mail_dialog.ui.h:20
 msgid "Tiny"
 msgstr "Liten"
 
-#: ../src/ui/mail_dialog.ui.h:24
+#: ../src/ui/mail_dialog.ui.h:21
 msgid "Total original size"
 msgstr ""
 
-#: ../src/ui/mail_dialog.ui.h:25
+#: ../src/ui/mail_dialog.ui.h:22
 msgid "_Create Mail"
 msgstr "_Lag e-post"
 
@@ -3454,218 +3035,325 @@ msgstr "Opprett ny _versjon"
 msgid "De_tach Version"
 msgstr "_Slett versjon"
 
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:11
 msgid "Fin_d"
 msgstr "_Finn"
 
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:12
 msgid "Manage _Extensions"
 msgstr "Håndter utvid_elser"
 
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:13
 msgid "Page Set_up..."
 msgstr "Side_oppsett..."
 
-#: ../src/ui/main_window.ui.h:15
+#: ../src/ui/main_window.ui.h:14
 msgid "Re_fresh Thumbnail"
 msgstr "_Oppdater miniatyrbilde"
 
-#: ../src/ui/main_window.ui.h:19
+#: ../src/ui/main_window.ui.h:18
 msgid "Select _All"
 msgstr "Velg _alle"
 
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:19
 msgid "Select _None"
 msgstr "Velg _ingen"
 
-#: ../src/ui/main_window.ui.h:21
+#: ../src/ui/main_window.ui.h:20
 msgid "Send by _Mail..."
 msgstr "Send _med e-post ..."
 
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:21 ../src/ui/single_view.ui.h:3
+msgid "Set as _Background"
+msgstr "Bruk som _bakgrunn"
+
+#: ../src/ui/main_window.ui.h:22
 msgid "Side_bar"
 msgstr "_Sidefelt"
 
-#: ../src/ui/main_window.ui.h:24
+#: ../src/ui/main_window.ui.h:23
 msgid "T_ags"
 msgstr "_Merker"
 
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:25
 #, fuzzy
 msgid "Thumbnail _elements"
 msgstr "Miniatyrbildemappe"
 
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:26
 msgid "Too_lbar"
 msgstr "Verktøy_linje"
 
-#: ../src/ui/main_window.ui.h:28
+#: ../src/ui/main_window.ui.h:27
 msgid "View"
 msgstr "Vis"
 
-#: ../src/ui/main_window.ui.h:33
+#: ../src/ui/main_window.ui.h:28 ../src/ui/single_view.ui.h:7
+msgid "Zoom _in"
+msgstr "Zoom _inn"
+
+#: ../src/ui/main_window.ui.h:29 ../src/ui/single_view.ui.h:8
+msgid "Zoom _out"
+msgstr "Zoom _ut"
+
+#: ../src/ui/main_window.ui.h:30 ../src/ui/single_view.ui.h:9
+msgid "Zoom in"
+msgstr "Zoom inn"
+
+#: ../src/ui/main_window.ui.h:31 ../src/ui/single_view.ui.h:10
+msgid "Zoom out"
+msgstr "Zoom ut"
+
+#: ../src/ui/main_window.ui.h:32
 msgid "_Attach Tag"
 msgstr "_Legg til merke"
 
-#: ../src/ui/main_window.ui.h:34
+#: ../src/ui/main_window.ui.h:33
 msgid "_Attach Tag to Selection"
 msgstr "_Legg til merkelapp for utvalg"
 
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:35
 #, fuzzy
 msgid "_Clear Rating Filter"
 msgstr "_Nullstill datointervall"
 
-#: ../src/ui/main_window.ui.h:37
+#: ../src/ui/main_window.ui.h:36
 msgid "_Clear Roll Filter"
 msgstr ""
 
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:38
 msgid "_Components"
 msgstr "_Komponenter"
 
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:39
 msgid "_Contents"
 msgstr "_Innhold"
 
-#: ../src/ui/main_window.ui.h:41
+#: ../src/ui/main_window.ui.h:40
 msgid "_Dates"
 msgstr "_Datoer"
 
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:42
 msgid "_Delete Selected Tag"
 msgstr "_Slett valgt merke"
 
-#: ../src/ui/main_window.ui.h:44
+#: ../src/ui/main_window.ui.h:43
 msgid "_Delete Version"
 msgstr "_Slett versjon"
 
-#: ../src/ui/main_window.ui.h:46
-#, fuzzy
+#: ../src/ui/main_window.ui.h:44 ../src/ui/single_view.ui.h:11
+msgid "_Edit"
+msgstr "R_ediger"
+
+#: ../src/ui/main_window.ui.h:45
 msgid "_Edit Tag..."
-msgstr "Rediger merke"
+msgstr "R_ediger merke..."
 
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:46
 msgid "_Export to"
 msgstr "_Eksporter til"
 
-#: ../src/ui/main_window.ui.h:48
+#: ../src/ui/main_window.ui.h:47
 msgid "_Filmstrip"
 msgstr "_Filmstripe"
 
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:48 ../src/ui/single_view.ui.h:13
+msgid "_Fullscreen"
+msgstr "_Fullskjerm"
+
+#: ../src/ui/main_window.ui.h:49 ../src/ui/single_view.ui.h:14
+msgid "_Help"
+msgstr "_Hjelp"
+
+#: ../src/ui/main_window.ui.h:50
 msgid "_Hidden"
 msgstr "_Skjulte"
 
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:51
 msgid "_Import..."
 msgstr "_Importer..."
 
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:52
 #, fuzzy
 msgid "_Invert Selection"
 msgstr "Kamerautvalg"
 
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:53
 msgid "_Large"
 msgstr "_Stor"
 
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:54
 #, fuzzy
 msgid "_Last Import Roll"
 msgstr "Importer bilder"
 
-#: ../src/ui/main_window.ui.h:56
+#: ../src/ui/main_window.ui.h:55
 msgid "_Loupe"
 msgstr "_Lupe"
 
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:56
 msgid "_Medium"
 msgstr "_Middels"
 
-#: ../src/ui/main_window.ui.h:59
+#: ../src/ui/main_window.ui.h:57 ../src/ui/single_view.ui.h:15
+msgid "_Photo"
+msgstr "_Bilde"
+
+#: ../src/ui/main_window.ui.h:58
 msgid "_Quit"
 msgstr "A_vslutt"
 
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:59
 msgid "_Ratings"
 msgstr "_Poeng"
 
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:61
 msgid "_Remove Tag From Selection"
 msgstr "_Fjern merke fra utvalg"
 
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:62
 msgid "_Rename Version"
 msgstr "_Endre versjonsnavn"
 
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:63
 msgid "_Reverse Order"
 msgstr "_Motsatt rekkefølge"
 
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:64
 #, fuzzy
 msgid "_Select Import Rolls..."
 msgstr "Velg mappe for eksportering"
 
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:65
 msgid "_Set Date Range..."
 msgstr "Sett _datointervall..."
 
-#: ../src/ui/main_window.ui.h:67
+#: ../src/ui/main_window.ui.h:66
 #, fuzzy
 msgid "_Set Rating filter..."
 msgstr "Sett _datointervall..."
 
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:67
 msgid "_Sharpen..."
 msgstr "_Skjerp..."
 
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:68 ../src/ui/single_view.ui.h:16
+msgid "_Slideshow"
+msgstr "_Bildefremvisning"
+
+#: ../src/ui/main_window.ui.h:69
 msgid "_Small"
 msgstr "_Liten"
 
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:70
 #, fuzzy
 msgid "_Tag Icons"
 msgstr "Merk ikoner"
 
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:71
 msgid "_Tags"
 msgstr "_Merker"
 
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:72
 msgid "_Timeline"
 msgstr "_Tidslinje"
 
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:73
 msgid "_Tools"
 msgstr "Verk_tøy"
 
-#: ../src/ui/main_window.ui.h:75
+#: ../src/ui/main_window.ui.h:74
 msgid "_Untagged Photos"
 msgstr "_Umerkede fotografier"
 
-#: ../src/ui/main_window.ui.h:76
+#: ../src/ui/main_window.ui.h:75
 msgid "_Version"
 msgstr "_Versjon"
 
-#: ../src/Updater.cs:724
+#: ../src/ui/main_window.ui.h:76 ../src/ui/single_view.ui.h:18
+msgid "_View"
+msgstr "_Vis"
+
+#: ../src/ui/single_view.ui.h:1
+msgid "Display File _Names"
+msgstr "Vis fil_navn"
+
+#: ../src/ui/single_view.ui.h:2
+msgid "F-Spot View"
+msgstr "F-Spot bildebehandling"
+
+#: ../src/ui/single_view.ui.h:4
+msgid "Show or hide the side pane"
+msgstr "Vis eller skjul sidefeltet"
+
+#: ../src/ui/single_view.ui.h:5
+msgid "Show or hide the toolbar"
+msgstr "Vis eller skjul verktøylinjen"
+
+#: ../src/ui/single_view.ui.h:6
+msgid "Side _pane"
+msgstr "Side_felt"
+
+#: ../src/ui/single_view.ui.h:17
+msgid "_Toolbar"
+msgstr "Verk_tøylinje"
+
+#: ../src/ui/viewer_preferences.ui.h:1
+#, fuzzy
+msgid "<b>Image Interpolation</b>"
+msgstr "<b>Mål</b>"
+
+#: ../src/ui/viewer_preferences.ui.h:2
+msgid "<b>Transparent Parts</b>"
+msgstr "<b>Gjennomsiktige deler</b>"
+
+#: ../src/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 ""
+
+#: ../src/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 ""
+
+#: ../src/ui/viewer_preferences.ui.h:5
+msgid "As _background"
+msgstr "Som _bakgrunn"
+
+#: ../src/ui/viewer_preferences.ui.h:6
+msgid "As _custom color: "
+msgstr "Som _egendefinert farge: "
+
+#: ../src/ui/viewer_preferences.ui.h:7
+msgid "As check _pattern"
+msgstr "Som rutenetty_pe"
+
+#: ../src/ui/viewer_preferences.ui.h:8
+msgid "Preferences"
+msgstr "Brukervalg"
+
+#: ../src/ui/viewer_preferences.ui.h:9
+#, fuzzy
+msgid "_Interpolate image on zoom"
+msgstr "interpolasjonstype"
+
+#: ../src/Updater.cs:727
 msgid "Updating F-Spot Database"
 msgstr "Oppdaterer F-Spot-databasen"
 
-#: ../src/Updater.cs:725
+#: ../src/Updater.cs:728
 msgid ""
 "Please wait while your F-Spot gallery's database is updated. This may take "
 "some time."
 msgstr ""
 "Vennligst vent mens F-Spot-databasen blir oppdatert. Dette kan ta litt tid."
 
-#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:36
-msgid "Unable to create temporary file"
-msgstr "Klarte ikke å opprette midlertidig fil"
-
 #: ../src/Widgets/CustomPrintWidget.cs:119
 msgid "Page Setup"
 msgstr "Sideoppsett"
@@ -3751,11 +3439,11 @@ msgstr "Skriv ut beskjæringsmerker"
 msgid "Print photo comment"
 msgstr ""
 
-#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:32 ../src/Widgets/Sidebar.cs:54
 msgid "Edit"
 msgstr "Rediger"
 
-#: ../src/Widgets/EditorPage.cs:199
+#: ../src/Widgets/EditorPage.cs:200
 #, fuzzy
 msgid ""
 "This tool requires an active selection. Please select a region of the photo "
@@ -3764,27 +3452,27 @@ msgstr ""
 "Dette verktøyet krever et markert felt. Velg en del av bildet og gjør "
 "operasjonen igjen"
 
-#: ../src/Widgets/EditorPage.cs:217
+#: ../src/Widgets/EditorPage.cs:218
 #, fuzzy
 msgid "Error saving adjusted photo"
 msgid_plural "Error saving adjusted photos"
 msgstr[0] "Feil ved lagring av endret foto"
 msgstr[1] "Feil ved lagring av endret foto"
 
-#: ../src/Widgets/EditorPage.cs:219
+#: ../src/Widgets/EditorPage.cs:220
 #, csharp-format
 msgid ""
 "Received exception \"{0}\". Note that you have to develop RAW files into "
 "JPEG before you can edit them."
 msgstr ""
 
-#: ../src/Widgets/Filmstrip.cs:573
+#: ../src/Widgets/Filmstrip.cs:470
 msgid "_Horizontal"
-msgstr ""
+msgstr "_Horisontal"
 
-#: ../src/Widgets/Filmstrip.cs:577
+#: ../src/Widgets/Filmstrip.cs:474
 msgid "_Vertical"
-msgstr ""
+msgstr "_Vertikal"
 
 #: ../src/Widgets/FindBar.cs:59
 msgid "Find:"
@@ -3794,77 +3482,80 @@ msgstr "Finn:"
 msgid "Folders"
 msgstr "Mapper"
 
-#: ../src/Widgets/FolderTreeView.cs:127
+#: ../src/Widgets/FolderTreeView.cs:129
 msgid "Filesystem"
 msgstr "Filsystem"
 
-#: ../src/Widgets/InfoBox.cs:183
+#: ../src/Widgets/InfoBox.cs:182
 msgid "Histogram"
 msgstr "Histogram"
 
-#: ../src/Widgets/InfoBox.cs:216
+#: ../src/Widgets/InfoBox.cs:201
+msgid "Image Information"
+msgstr "Bildeinformasjon"
+
+#: ../src/Widgets/InfoBox.cs:215
 msgid "Version"
 msgstr "Versjon"
 
-#: ../src/Widgets/InfoBox.cs:219
+#: ../src/Widgets/InfoBox.cs:218
 msgid "Date"
 msgstr "Dato"
 
-#: ../src/Widgets/InfoBox.cs:225
+#: ../src/Widgets/InfoBox.cs:224
 msgid "Exposure"
 msgstr "Eksponering"
 
-#: ../src/Widgets/InfoBox.cs:229
+#: ../src/Widgets/InfoBox.cs:228
 msgid "Focal Length"
 msgstr ""
 
-#: ../src/Widgets/InfoBox.cs:232
+#: ../src/Widgets/InfoBox.cs:231
 msgid "Camera"
 msgstr "Kamera"
 
-#: ../src/Widgets/InfoBox.cs:235
+#: ../src/Widgets/InfoBox.cs:234
 msgid "File Size"
 msgstr "Filstørrelse"
 
-#: ../src/Widgets/InfoBox.cs:238
+#: ../src/Widgets/InfoBox.cs:237
 msgid "Rating"
 msgstr "Poeng"
 
-#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
-#: ../src/Widgets/InfoBox.cs:429
+#: ../src/Widgets/InfoBox.cs:327
 msgid "(wrong format)"
 msgstr "(feil format)"
 
-#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
-#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
+#: ../src/Widgets/InfoBox.cs:353 ../src/Widgets/InfoBox.cs:364
+#: ../src/Widgets/InfoBox.cs:374
 msgid "(Unknown)"
 msgstr "(Ukjent)"
 
-#: ../src/Widgets/InfoBox.cs:564
+#: ../src/Widgets/InfoBox.cs:474
 #, fuzzy, csharp-format
 msgid "(One Edit)"
 msgid_plural "({0} Edits)"
 msgstr[0] "(Ingen redigeringer)"
 msgstr[1] "(Ingen redigeringer)"
 
-#: ../src/Widgets/InfoBox.cs:578
+#: ../src/Widgets/InfoBox.cs:484
 msgid "(File read error)"
 msgstr ""
 
-#: ../src/Widgets/InfoBox.cs:623
+#: ../src/Widgets/InfoBox.cs:529
 #, csharp-format
 msgid "{0} Photos"
 msgstr "{0} bilder"
 
 #. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:643
+#: ../src/Widgets/InfoBox.cs:549
 #, csharp-format
 msgid ""
 "On {0} between \n"
 "{1} and {2}"
 msgstr ""
 
-#: ../src/Widgets/InfoBox.cs:648
+#: ../src/Widgets/InfoBox.cs:554
 #, csharp-format
 msgid ""
 "Between {0} \n"
@@ -3873,36 +3564,36 @@ msgstr ""
 "Mellom {0} \n"
 "og {1}"
 
-#: ../src/Widgets/InfoBox.cs:675
+#: ../src/Widgets/InfoBox.cs:581
 #, fuzzy
 msgid "(At least one File not found)"
 msgstr "Fil ikke funnet"
 
-#: ../src/Widgets/InfoBox.cs:792
+#: ../src/Widgets/InfoBox.cs:698
 msgid "Show Photo Name"
 msgstr "Vis navn på bilde"
 
-#: ../src/Widgets/InfoBox.cs:801
+#: ../src/Widgets/InfoBox.cs:707
 msgid "Show Date"
 msgstr "Vis dato"
 
-#: ../src/Widgets/InfoBox.cs:810
+#: ../src/Widgets/InfoBox.cs:716
 msgid "Show Size"
 msgstr "Vis størrelse"
 
-#: ../src/Widgets/InfoBox.cs:819
+#: ../src/Widgets/InfoBox.cs:725
 msgid "Show Exposure"
 msgstr "Vis eksponering"
 
-#: ../src/Widgets/InfoBox.cs:828
+#: ../src/Widgets/InfoBox.cs:734
 msgid "Show Focal Length"
 msgstr ""
 
-#: ../src/Widgets/InfoBox.cs:837
+#: ../src/Widgets/InfoBox.cs:743
 msgid "Show Camera"
 msgstr "Vis kamera"
 
-#: ../src/Widgets/InfoBox.cs:846
+#: ../src/Widgets/InfoBox.cs:752
 msgid "Show File Size"
 msgstr "Vis filstørrelse"
 
@@ -3914,45 +3605,28 @@ msgstr "Metadata"
 msgid "Extended Metadata"
 msgstr "Utvidet metadata"
 
-#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:394
-msgid "No Extended Metadata Available"
-msgstr "Ingen utvidede metadata tilgjengelig"
-
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:359
 msgid "No active photo"
 msgstr "Intet aktivt fotografi"
 
-#: ../src/Widgets/MetadataDisplay.cs:414
+#: ../src/Widgets/MetadataDisplay.cs:361
 #, csharp-format
 msgid "The photo \"{0}\" does not exist"
 msgstr "Bildet «{0}» finnes ikke"
 
-#: ../src/Widgets/MetadataDisplay.cs:417
+#: ../src/Widgets/MetadataDisplay.cs:363
 msgid "No metadata available"
 msgstr "Ingen metadata tilgjengelig"
 
-#: ../src/Widgets/OpenWithMenu.cs:71
+#: ../src/Widgets/OpenWithMenu.cs:72
 msgid "No applications available"
 msgstr "Ingen programmer tilgjengelig"
 
 #: ../src/Widgets/RatingMenuItem.cs:57
+#, fuzzy
 msgid "Rating:"
-msgstr ""
-
-#: ../src/XmpTagsImporter.cs:91
-msgid "Country"
-msgstr "Land"
-
-#: ../src/XmpTagsImporter.cs:92
-msgid "City"
-msgstr "By"
-
-#: ../src/XmpTagsImporter.cs:93
-msgid "State"
-msgstr "Stat"
+msgstr "Poengsum:"
 
-#. namespace
 #: ../tools/f-spot-screensaver.desktop.in.h:1
 msgid "Display a slideshow from F-Spot"
 msgstr "Vis lysbilder fra F-Spot"
@@ -3960,178 +3634,3 @@ msgstr "Vis lysbilder fra F-Spot"
 #: ../tools/f-spot-screensaver.desktop.in.h:2
 msgid "F-Spot photos"
 msgstr "F-Spot-bilder"
-
-#~ msgid "Error: Error while transferring; Aborting"
-#~ msgstr "Feil: Feil under overføring av fil. Avbryter"
-
-#~ msgid "Error: File Already Exists; Aborting"
-#~ msgstr "Feil: Filen eksisterer allerede. Avbryter"
-
-#~ msgid "Preview"
-#~ msgstr "Forhåndsvisning"
-
-#~ msgid "Path"
-#~ msgstr "Sti"
-
-#~ msgid "File"
-#~ msgstr "Fil"
-
-#~ msgid "Select Tag"
-#~ msgstr "Velg merke"
-
-#~ msgid "Downloading Previews"
-#~ msgstr "Laster ned forhåndsvisninger"
-
-#~ msgid "Downloading Preview of {0}"
-#~ msgstr "Laster ned forhåndsvisning av {0}"
-
-#~ msgid "Copying file {0} of {1}"
-#~ msgstr "Kopierer fil {0} av {1}"
-
-#~ msgid "Error transferring file"
-#~ msgstr "Feil under overføring av fil"
-
-#~ msgid "Download Complete"
-#~ msgstr "Ferdig med nedlasting"
-
-#~ msgid "Done Copying Files"
-#~ msgstr "Ferdig med kopiering av filer"
-
-#~ msgid "Transferring \"{0}\" from camera"
-#~ msgstr "Overfører «{0}» fra kamera"
-
-#~ msgid "Port"
-#~ msgstr "Port"
-
-#, fuzzy
-#~ msgid "Reparented ({0})"
-#~ msgstr "Reparer"
-
-#~ msgid "Import error"
-#~ msgstr "Feil ved importering"
-
-#~ msgid "Error importing {0}{2}{2}{1}"
-#~ msgstr "Feil ved import {0}{2}{2}{1}"
-
-#~ msgid " "
-#~ msgstr " "
-
-#~ msgid "<b></b>"
-#~ msgstr "<b></b>"
-
-#~ msgid "Attach tag:"
-#~ msgstr "Legg til merke:"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "E-_Mail:"
-#~ msgstr "E-_post:"
-
-#~ msgid "E_xport titles and comments"
-#~ msgstr "Eksporter _titler og kommentarer"
-
-#~ msgid "G_allery:"
-#~ msgstr "G_alleri:"
-
-#~ msgid "Gallery"
-#~ msgstr "Galleri"
-
-#~ msgid "Pause"
-#~ msgstr "Pause"
-
-#~ msgid "Select Photos to Copy From Camera..."
-#~ msgstr "Velg bilder som skal kopieres fra kameraet..."
-
-#~ msgid "Select the camera from which you want to transfer files"
-#~ msgstr "Velg kameraet du vil overføre filer fra"
-
-#~ msgid "Selected Camera: "
-#~ msgstr "Valgt kamera:"
-
-#~ msgid "Strip image _metadata"
-#~ msgstr "Fjern bildemetadata"
-
-#~ msgid "_Flickr"
-#~ msgstr "_Flickr"
-
-#~ msgid "_Gallery"
-#~ msgstr "_Galleri"
-
-#~ msgid "_Open album in browser when done uploading"
-#~ msgstr "_Åpne album i nettleser når opplasting er ferdig"
-
-#~ msgid "_Open destination when done exporting"
-#~ msgstr "_Åpne mål når eksportering er ferdig"
-
-#~ msgid "_Scale photos to no larger than: "
-#~ msgstr "Skaler bilder så de ikke er større enn: "
-
-#~ msgid "_Strip metadata"
-#~ msgstr "_Fjern metadata"
-
-#~ msgid "_URI:"
-#~ msgstr "_URI:"
-
-#~ msgid "_Virtual Filesystem"
-#~ msgstr "_Virtuelt filsystem"
-
-#~ msgid "x"
-#~ msgstr "x"
-
-#~ msgid "Loading {0} of {1}"
-#~ msgstr "Laster {0} av {1}"
-
-#~ msgid "Done Loading"
-#~ msgstr "Ferdig"
-
-#~ msgid "Directory does not exist."
-#~ msgstr "Mappen finnes ikke."
-
-#~ msgid ""
-#~ "The directory you selected \"{0}\" does not exist.  Please choose a "
-#~ "different directory"
-#~ msgstr "Mappen du valgte «{0}», finnes ikke. Velg en annen mappe"
-
-#~ msgid "No cameras detected."
-#~ msgstr "Ingen kameraer funnet."
-
-#~ msgid ""
-#~ "F-Spot was unable to find any cameras attached to this system.  Double "
-#~ "check that the camera is connected and has power"
-#~ msgstr ""
-#~ "F-Spot klarte ikke å finne noen kameraer koblet til. Dobbeltsjekk at "
-#~ "kameraet er tilkoblet og at det har strøm"
-
-#~ msgid "Error connecting to camera"
-#~ msgstr "Feil ved tilkobling til kamera"
-
-#~ msgid "Received error \"{0}\" while connecting to camera"
-#~ msgstr "Mottok feil «{0}» ved tilkobling til kamera"
-
-#~ msgid "Could not create a new version"
-#~ msgstr "Kunne ikke opprette ny versjon"
-
-#, fuzzy
-#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-#~ msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
-
-#~ msgid "Really Delete?"
-#~ msgstr "Vil du slette?"
-
-#~ msgid "Cancel"
-#~ msgstr "Avbryt"
-
-#~ msgid "Could not delete a version"
-#~ msgstr "Kunne ikke slette versjon"
-
-#, fuzzy
-#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-#~ msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
-
-#~ msgid "Could not rename a version"
-#~ msgstr "Kunne ikke endre navn på en versjon"
-
-#, fuzzy
-#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-#~ msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
diff --git a/po/sl.po b/po/sl.po
index db4bad3..87107da 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -4,7 +4,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: f-spot\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-spot&component=General\n"
-"POT-Creation-Date: 2010-07-09 21:44+0000\n"
+"POT-Creation-Date: 2010-08-06 20:34+0000\n"
 "PO-Revision-Date: \n"
 "Last-Translator: Andrej Žnidaršič <andrej.znidarsic at gmail.com>\n"
 "Language-Team: Slovenian GNOME Translation Team <gnome-si at googlegroups.com>\n"
@@ -29,7 +29,7 @@ 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 delite vaše fotografije."
+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
@@ -38,7 +38,7 @@ msgstr "Upravljalnik fotografij"
 
 #: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
 msgid "Import into F-Spot"
-msgstr "Uvoz v F-Spot"
+msgstr "Uvozi v F-Spot"
 
 #: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
 msgid "F-Spot Photo Viewer"
@@ -54,7 +54,7 @@ msgstr "_CD ..."
 
 #: ../extensions/Exporters/CDExport/CDExport.cs:155
 msgid "Transferring Pictures"
-msgstr "Prenos slik"
+msgstr "Prenašanje slik"
 
 #: ../extensions/Exporters/CDExport/CDExport.cs:208
 #, csharp-format
@@ -63,7 +63,7 @@ msgstr "Prenašanje slike \"{0}\" na CD"
 
 #. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
 #: ../extensions/Exporters/CDExport/CDExport.cs:210
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:362
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:360
 #: ../extensions/Exporters/FolderExport/FolderExport.cs:209
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:773
 #: ../src/MainWindow.cs:645
@@ -75,7 +75,7 @@ msgstr "{0} od {1}"
 
 #: ../extensions/Exporters/CDExport/CDExport.cs:223
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:378
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:390
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:696
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
@@ -84,7 +84,7 @@ msgstr "Pošiljanje fotografij je končano"
 
 #: ../extensions/Exporters/CDExport/CDExport.cs:225
 msgid "Transfer Complete"
-msgstr "Prenos končan"
+msgstr "Prenos je končan"
 
 #: ../extensions/Exporters/CDExport/CDExport.cs:232
 msgid "Error While Transferring"
@@ -95,17 +95,17 @@ msgstr "Napaka med prenosom"
 msgid "Error Transferring"
 msgstr "Napaka prenosa"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:253
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
 msgid "copying..."
 msgstr "kopiranje ..."
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:1
 msgid "<b><i>There are some previously scheduled items to write</i></b>"
-msgstr "<b><i>Obstaja nekaj predhodno načrtovanih predmetov za zapis</i></b>"
+msgstr "<b><i>Obstaja nekaj predhodno razporejenih predmetov za zapis</i></b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:2
 msgid "<b>Photos to Burn</b>"
-msgstr "<b>Fotografije za peko</b>"
+msgstr "<b>Fotografije za zapis</b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:3
 msgid "Create CD"
@@ -118,11 +118,11 @@ msgstr "Velikost"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:5
 msgid "Size of the exported selection:"
-msgstr "Velikost "
+msgstr "Velikost izvoženega izbora:"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:6
 msgid "_Browse Previously Scheduled Files"
-msgstr "_Brskaj po datotekah, ki so bile v razporedu"
+msgstr "_Brskaj po predhodno razporejenih datotekah"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:7
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
@@ -153,9 +153,9 @@ msgid ""
 "\n"
 "Once you are directed by Facebook to return to this application, click \"Ok\" below."
 msgstr ""
-"Program bo zagnal vaš brskalnik, zato da lahko preko spleta omogočite dovoljenja, ki ste jih izbrali.\n"
+"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, kliknite \"v redu\"."
+"Ko bo Facebook zahteval vrnitev k programu, spodaj kliknite \"V redu\"."
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
 msgid "Too many images to export"
@@ -172,7 +172,7 @@ msgstr "Album mora imeti ime"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:299
 msgid "Please name your album or choose an existing album."
-msgstr "Treba je poimenovati album ali izbrati obstoječi album."
+msgstr "Poimenujte album ali izberite obstoječi album."
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
 msgid "Creating a new album failed"
@@ -190,27 +190,27 @@ msgstr ""
 "{0}"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:327
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:488
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:486
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:726
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:593
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:515
 msgid "Uploading Pictures"
-msgstr "Nalaganje slik"
+msgstr "Pošiljanje slik"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:355
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:652
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:554
 #, csharp-format
 msgid "Uploading picture \"{0}\" ({1} of {2})"
-msgstr "Nalaganje slike \"{0}\" ({1} od {2})"
+msgstr "Pošiljanje slike \"{0}\" ({1} od {2})"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
 #, csharp-format
 msgid "Error Uploading To Facebook: {0}"
-msgstr "Napaka med nalaganjem na Facebook: {0}"
+msgstr "Napaka med pošiljanjem na Facebook: {0}"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:383
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
 #: ../extensions/Exporters/FolderExport/FolderExport.cs:215
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:789
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:685
@@ -220,7 +220,7 @@ msgid "Error"
 msgstr "Napaka"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:394
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:800
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:698
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:598
@@ -229,7 +229,7 @@ msgstr "Pošiljanje je končano"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:383
 msgid "Visit F-Spot group on Facebook"
-msgstr "Obisk skupine F-Spot na Facebook"
+msgstr "Obišči skupino F-Spot na Facebook"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
 msgid "Waiting for authentication"
@@ -243,7 +243,7 @@ msgid ""
 msgstr ""
 "Program F-Spot bo zagnal brskalnik za prijavo v Facebook.\n"
 "\n"
-"Ko vas Facebook usmeri v vrnitev v ta program, kliknite \"Ok\" spodaj. F-Spot bo, če bo mogoče, vašo sejo shranil v gnome-keyring in jo ponovno uporabil pri prihodnjih izvozih v Facebook"
+"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."
 
 #: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:219
 msgid "Authenticating..."
@@ -255,7 +255,7 @@ msgstr "Napaka med prijavljanjem v Facebook"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:230
 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 vaše geslo in poskusite ponovno. "
+msgstr "Prišlo je do težav med prijavljanjem v Facebook. Preverite svoje geslo in poskusite znova. "
 
 #: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:239
 msgid "Authorizing Session"
@@ -263,19 +263,19 @@ msgstr "Pooblaščanje seje"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:248
 msgid "Session established, fetching user info..."
-msgstr "Seja zagnana, pridobivanje podrobnosti o uporabniku ..."
+msgstr "Seja je zagnana, pridobivanje podrobnosti o uporabniku ..."
 
 #: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:254
 msgid "Session established, fetching friend list..."
-msgstr "Seja zagnana, pridobivanje seznama prijateljev ..."
+msgstr "Seja je zagnana, pridobivanje seznama prijateljev ..."
 
 #: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:264
 msgid "Session established, fetching friend details..."
-msgstr "Seja zagnana, pridobivanje podrobnosti o prijateljih ..."
+msgstr "Seja je zagnana, pridobivanje podrobnosti o prijateljih ..."
 
 #: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:276
 msgid "Session established, fetching photo albums..."
-msgstr "Seja zagnana, pridobivanje albumov fotografij ..."
+msgstr "Seja je zagnana, pridobivanje albumov fotografij ..."
 
 #. Note for translators: {0} and {1} are respectively firstname and surname of the user
 #: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:286
@@ -383,11 +383,11 @@ msgstr "Pooblasti"
 #: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
 #, 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 je treba vrniti v to okno in klikniti gumb \"Končanje pooblastitve\" spodaj"
+msgstr "Po končanem postopku pooblastitve na {0} se vrnite v to okno in kliknite gumb \"Končanj pooblastitev\" spodaj"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.cs:114
 msgid "Complete Authorization"
-msgstr "Končanje pooblastitve"
+msgstr "Končaj pooblastitev"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
 #, csharp-format
@@ -406,42 +406,42 @@ msgstr "Dobrodošli {0}, povezani ste na {1}"
 #: ../extensions/Exporters/FlickrExport/FlickrExport.cs:130
 #, csharp-format
 msgid "Sign in as a different user"
-msgstr "Vpis kot drug uporabnik"
+msgstr "Prijava kot drug uporabnik"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.cs:135
 #, csharp-format
 msgid "Used {0} of your allowed {1} monthly quota"
-msgstr "Uporabljene {0} dovoljene {1} mesečne kvote."
+msgstr "Uporabljene je {0} od dovoljene mesečne kvote {1}."
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.cs:239
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:310
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:308
 msgid "Unable to log on"
 msgstr "Ni se mogoče prijaviti"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:330
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:328
 #, csharp-format
 msgid "Waiting for response {0} of {1}"
 msgstr "Čakanje na odziv {0} od {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:357
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:355
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:769
 #, csharp-format
 msgid "Uploading picture \"{0}\""
-msgstr "Nalaganje slike \"{0}\""
+msgstr "Pošiljanje slike \"{0}\""
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:378
 #, csharp-format
 msgid "Error Uploading To {0}: {1}"
-msgstr "Napaka med nalaganjem k {0}: {1}"
+msgstr "Napaka med pošiljanjem na {0}: {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:467
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:465
 msgid "Unable to log on."
 msgstr "Ni se mogoče prijaviti."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:468
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:466
 #, 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 uporabno {0} vmesnika spletnega brskalnika."
+msgstr "Ni se mogoče prijaviti na {0}. Prepričajte se, da ste dali pooblastitev z uporabo vmesnika spletnega brskalnika {0}."
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
 msgid "<b>Account</b>"
@@ -480,11 +480,11 @@ msgstr "Izvoz"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:7
 msgid "Export tag _hierarchy"
-msgstr "Izvoz _hierarhije oznak"
+msgstr "Izvozi _hierarhijo oznak"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.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š {0} račun. Pritisnite gumb \"Pooblastitev\" za odprtje spletnega brskalnika in pooblastitev F-Spot-a"
+msgstr "F-Spot potrebuje pooblastitev za nalaganje fotografij na vaš račun {0}. Pritisnite gumb \"Pooblastitev\" za odprtje spletnega brskalnika in pooblastitev F-Spota."
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:9
 msgid "Ignore _top level tags"
@@ -513,7 +513,7 @@ msgstr "Vidno prijateljem"
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
 msgid "_Export tags"
-msgstr "Izvoz znač_k"
+msgstr "Izvozi ozna_ke"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
@@ -521,11 +521,11 @@ msgstr "Izvoz znač_k"
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
 msgid "_Resize to: "
-msgstr "Sp_rememba velikosti v:"
+msgstr "Sp_remeni velikost na:"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:18
 msgid "_View photos in browser when done uploading"
-msgstr "Ogled fotografij _v brskalniku po končanem nalaganju"
+msgstr "Ogled fotografij _v brskalniku po končanem pošiljanju"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
@@ -545,7 +545,7 @@ msgstr "Izbor mape za izvoz"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.cs:169
 msgid "Building Gallery"
-msgstr "Gradnja Galerije"
+msgstr "Gradnja galerije"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.cs:206
 #, csharp-format
@@ -555,7 +555,7 @@ msgstr "Izvažanje \"{0}\" ..."
 #: ../extensions/Exporters/FolderExport/FolderExport.cs:213
 #, csharp-format
 msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
-msgstr "Napaka med kopiranjem \"{0} v Galerijo: {2}{1}"
+msgstr "Napaka med kopiranjem \"{0}\" v galerijo: {2}{1}"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.cs:239
 #, csharp-format
@@ -580,58 +580,58 @@ msgid "Exporting Photos"
 msgstr "Izvažanje fotografij"
 
 #. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:716
 msgid "Light"
 msgstr "Svetlo"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:718
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
 msgid "Dark"
 msgstr "Temno"
 
 #. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:898
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:897
 msgid "Prev"
-msgstr "Predhodni"
+msgstr "Predhodna"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:900
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:899
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
 msgid "Index"
 msgstr "Kazalo"
 
 #. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:903
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1075
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1115
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:902
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1074
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1114
 #: ../src/MainWindow.cs:349
 #: ../src/Widgets/Sidebar.cs:56
 msgid "Tags"
 msgstr "Oznake"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:906
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:905
 #: ../src/ItemAction.cs:102
 msgid "Next"
 msgstr "Naslednja"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1010
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1009
 msgid "Gallery generated by"
-msgstr "Galerija ustvarjena od"
+msgstr "Galerijo je ustvaril"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1049
 msgid "Show Styles"
 msgstr "Pokaži sloge"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1051
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
 msgid "Hide Styles"
 msgstr "Skrij sloge"
 
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1085
 #: ../extensions/Exporters/FolderExport/FolderExport.cs:1086
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1087
 #: ../src/ui/main_window.ui.h:24
 msgid "Tags: "
 msgstr "Oznake:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1218
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1351
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1350
 msgid "Page:"
 msgstr "Stran:"
 
@@ -641,15 +641,15 @@ msgstr "<b>Cilj</b>"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:2
 msgid "<b>Export Method</b>"
-msgstr "<b>Metoda Izvoza</b>"
+msgstr "<b>Način izvoza</b>"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
 msgid "Create _gallery using \"Original\""
-msgstr "Ustvarjanje galerije z uporabo \"Originala\""
+msgstr "Ustvari galerijo z uporabo \"Izvirnika\""
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
 msgid "Create standalone _web gallery"
-msgstr "Ustvarjanje samostojne spletne _galerije"
+msgstr "Ustvari samostojno spletno _galerijo"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
 msgid "D_escription:"
@@ -657,19 +657,19 @@ msgstr "Op_is:"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
 msgid "Export _tags"
-msgstr "Izvoz z_načk"
+msgstr "Izvozi oz_nake"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
 msgid "Export tag _icons"
-msgstr "Izvoz _ikon oznak"
+msgstr "Izvozi _ikone oznak"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
 msgid "Folder Export"
-msgstr "Izvoz Mape"
+msgstr "Izvoz mape"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
 msgid "G_allery Name:"
-msgstr "Ime G_alerije:"
+msgstr "Ime g_alerije:"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
 msgid "Open _destination when done exporting"
@@ -685,11 +685,11 @@ msgstr "_Shrani le datoteke"
 
 #: ../extensions/Exporters/GalleryExport/FormClient.cs:294
 msgid "Unhandled exception"
-msgstr "Nesprejeta napaka"
+msgstr "Nesprejeta izjema"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
 msgid "Web _Gallery..."
-msgstr "Spletno _Galerijo ..."
+msgstr "Spletna _galerija ..."
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:54
 msgid ""
@@ -705,20 +705,20 @@ msgstr "Neveljaven URL"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:393
 msgid "The gallery URL entry does not appear to be a valid URL"
-msgstr "URL galerije ni veljaven URL"
+msgstr "URL galerije ni videti kot veljaven URL"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
 msgid "Error while connecting to Gallery"
-msgstr "Med povezovanjem z Galerijo je prišlo do napake"
+msgstr "Med povezovanjem z galerijo je prišlo do napake"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:404
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:431
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:442
 #, csharp-format
 msgid "The following error was encountered while attempting to log in: {0}"
-msgstr "Med poskusom prijave je prišlo do sledeče napake: {0}"
+msgstr "Med poskusom prijave je prišlo do naslednje napake: {0}"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
 msgid "A Gallery with this name already exists"
@@ -727,15 +727,15 @@ msgstr "Galerija s tem imenom že obstaja"
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:419
 #, 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. Izbrati je treba edinstveno ime."
+msgstr "Galerija s tem imenom že obstaja v vpisanih galerijah. Izberite edinstveno ime."
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:529
 msgid "(TopLevel)"
-msgstr "Vrhnja raven"
+msgstr "(Vrhnja raven)"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
 msgid "Invalid Gallery name"
-msgstr "Neveljavno ime Galerije"
+msgstr "Neveljavno ime galerije"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:592
 msgid ""
@@ -748,13 +748,13 @@ msgstr ""
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:788
 #, csharp-format
 msgid "Error uploading picture \"{0}\" to Gallery: {1}"
-msgstr "Napaka med nalaganjem slike \"{0}\" v galerijo: {1}"
+msgstr "Napaka med pošiljanjem slike \"{0}\" v galerijo: {1}"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:816
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:714
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:614
 msgid "(No Gallery)"
-msgstr "(Ni Galerije)"
+msgstr "(Ni galerije)"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:908
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:836
@@ -787,7 +787,7 @@ msgstr "<b>Galerija</b>"
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:5
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:5
 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"
+msgstr "<span weight='bold' size='larger'>Napaka med povezovanjem z galerijo</span>\n"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
 msgid "Export _titles and comments"
@@ -797,12 +797,12 @@ msgstr "Izvozi _naslove in opombe"
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
 msgid "Open _album in browser when done uploading"
-msgstr "_Odpri album v brskalniku po končanem nalaganju"
+msgstr "_Odpri album v brskalniku po končanem pošiljanju"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
 msgid "Please verify that the settings for this gallery are correct."
-msgstr "Treba je potrditi, da so nastavitve za to galerijo pravilne."
+msgstr "Potrdite, da so nastavitve za to galerijo pravilne."
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
 msgid "U_RL:"
@@ -826,7 +826,7 @@ msgstr "Iz_voz v album:"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
 msgid "_Gallery Name:"
-msgstr "Ime _Galerije:"
+msgstr "Ime _galerije:"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
@@ -835,7 +835,7 @@ msgstr "_Galerija:"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
 msgid "_Parent Album:"
-msgstr "_Starševski album:"
+msgstr "_Nadrejeni album:"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
@@ -888,12 +888,12 @@ msgstr "Napaka med ustvarjanjem albuma"
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:445
 #, csharp-format
 msgid "The following error was encountered while attempting to create an album: {0}"
-msgstr "Med poskusom ustvarjanja albuma je prišlo do sledeče napake: {0}"
+msgstr "Med poskusom ustvarjanja albuma je prišlo do naslednje napake: {0}"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:615
 #, csharp-format
 msgid "{0} Sent"
-msgstr "{0} Poslanih"
+msgstr "{0} poslanih"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:617
 #, csharp-format
@@ -904,7 +904,7 @@ msgstr "{0} od približno {1}"
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:583
 #, csharp-format
 msgid "Error Uploading To Gallery: {0}"
-msgstr "Napaka med nalaganjem v Galerijo: {0}"
+msgstr "Napaka med pošiljanjem v Galerijo: {0}"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:765
 #, csharp-format
@@ -922,11 +922,11 @@ msgstr ""
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:3
 msgid "<b>PicasaWeb Export</b>"
-msgstr "<b>PicasaWeb Izvoz</b>"
+msgstr "<b>Izvoz PicasaWeb</b>"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:7
 msgid "<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
-msgstr "<span weight='bold' size='larger'>Vaš Google račun je zaklenjen</span>\n"
+msgstr "<span weight='bold' size='larger'>Vaš račun Google je zaklenjen</span>\n"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:12
 msgid ""
@@ -934,19 +934,19 @@ msgid ""
 "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 ustrezne.\n"
-"Vnesite črke, kot so prikazane na sliki v polju 'Captcha'\n"
+"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>"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
 msgid "Public Album"
-msgstr "Javni Album"
+msgstr "Javni album"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
 msgid "_Album Title:"
-msgstr "Naslov _Albuma:"
+msgstr "Naslov _albuma:"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
 msgid "_Captcha:"
@@ -958,7 +958,7 @@ msgstr "_SmugMug ..."
 
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:3
 msgid "<b>SmugMug Export</b>"
-msgstr "<b>SmugMug izvoz</b>"
+msgstr "<b>Izvoz SmugMug</b>"
 
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
 msgid "_Account:"
@@ -967,7 +967,7 @@ msgstr "_Račun:"
 #: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:132
 #, csharp-format
 msgid "Uploading photo \"{0}\""
-msgstr "Nalaganje fotografije \"{0}\""
+msgstr "Pošiljanje fotografije \"{0}\""
 
 #: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:206
 msgid "Logging into Tabblo"
@@ -991,23 +991,23 @@ msgstr "Pošiljanje je končano"
 
 #: ../extensions/Exporters/TabbloExport/TabbloExport.cs:316
 msgid "Error uploading to Tabblo: "
-msgstr "Napaka med nalaganjem v Tabblo:"
+msgstr "Napaka med pošiljanjem v Tabblo:"
 
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:1
 msgid "<b>F-Spot tags</b>"
-msgstr "<b>F-Spot oznake</b>"
+msgstr "<b>Oznake F-Spot</b>"
 
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:3
 msgid "<b>Tabblo account</b>"
-msgstr "<b>Tabblo račun</b>"
+msgstr "<b>Račun Tabblo</b>"
 
 #: ../extensions/Exporters/TabbloExport/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 je mogoče nastaviti želeno samodejno zamenjava oznak.</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>"
 
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:6
 msgid "Rem_ove from exported photos:"
-msgstr "_Odstranitev iz izvoženih fotografij:"
+msgstr "_Odstrani iz izvoženih fotografij:"
 
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
 msgid "Select..."
@@ -1015,7 +1015,7 @@ msgstr "Izberi ..."
 
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
 msgid "_Attach to exported photos:"
-msgstr "Pripni izvoženim fotogr_afijam:"
+msgstr "_Pripni izvoženim fotografijam:"
 
 #: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
 msgid "A trust error occured while attempting to access"
@@ -1052,7 +1052,7 @@ msgstr "Na voljo ni nobene izbire"
 
 #: ../extensions/Exporters/ZipExport/ZipExport.cs:49
 msgid "This tool requires an active selection. Please select one or more pictures and try again"
-msgstr "To orodje zahteva dejavno izbiro. Treba je izbrati eno ali več slik in poskusiti ponovno."
+msgstr "To orodje zahteva dejavno izbiro. Izberite eno ali več slik in poskusite znova."
 
 #: ../extensions/Exporters/ZipExport/ZipExport.cs:65
 msgid "Select export folder"
@@ -1081,31 +1081,31 @@ msgstr "_Mesto:"
 
 #: ../extensions/Exporters/ZipExport/ZipExport.glade.h:4
 msgid "_Scale:"
-msgstr "_Merilo:"
+msgstr "M_erilo:"
 
 #: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
 msgid "Check for Duplicates..."
 msgstr "Zaznaj dvojnike ..."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:53
+#: ../extensions/Tools/HashJob/HashJob.cs:54
 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. S tem pogovornim oknom se lahko postopek posodabljanja zažene ali začasno zaustavi."
+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."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:59
+#: ../extensions/Tools/HashJob/HashJob.cs:60
 #, csharp-format
 msgid "You currently have {0} photos needing md5 calculation, and {1} pending jobs"
-msgstr "Trenutno imate {0} fotografij, ki potrebujejo md5 izračun in {1} čakajočih služb"
+msgstr "Trenutno imate {0} fotografij, ki potrebujejo izračun md5 in {1} čakajočih poslov"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:75
+#: ../extensions/Tools/HashJob/HashJob.cs:76
 #: ../src/ui/main_window.ui.h:37
 msgid "_Close"
 msgstr "_Zapri"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:102
+#: ../extensions/Tools/HashJob/HashJob.cs:103
 msgid "Processing images..."
-msgstr "Obdelava slik ..."
+msgstr "Obdelavanje slik ..."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:108
+#: ../extensions/Tools/HashJob/HashJob.cs:109
 msgid "Stopped"
 msgstr "Zaustavljeno"
 
@@ -1143,16 +1143,16 @@ msgstr "Izbrano"
 msgid "Live Web Gallery"
 msgstr "Živa spletna galerija"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:90
 msgid "none"
 msgstr "brez"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:93
 #, csharp-format
 msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
 msgstr " Galerija: {0}, fotografij: {1}, zadnji odjemalec: {3}"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:157
 msgid "Gallery is inactive"
 msgstr "Galerija je nedejavna"
 
@@ -1161,8 +1161,8 @@ 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-spot.\n"
-"Obidite posredniški strežnik HTTP in se prepričajte se, da lahko do nje dostopajo krajevni obiskovalci.</i></small>"
+"<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>"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:3
 msgid ""
@@ -1170,11 +1170,11 @@ msgid ""
 "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"
+"dostopati preko zgornjega URL-ja.</i></small>"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:5
 msgid "Activates and deactivates the web gallery"
-msgstr "Vklop in izklop spletne galerije"
+msgstr "Omogoči in onemogoči spletno galerijo"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:6
 msgid "Allow viewers to add tags"
@@ -1186,7 +1186,7 @@ msgstr "Kopiraj URL na odložišče"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:9
 msgid "F-Spot Live Web Gallery"
-msgstr "F-Spot živa spletna galerija"
+msgstr "Živa spletna galerija F-Spot"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:10
 msgid "Gallery URL:"
@@ -1194,7 +1194,7 @@ msgstr "URL galerije:"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:11
 msgid "Limit number of shared photos to"
-msgstr "Omejitev fotografij v souporabi na"
+msgstr "Omeji število fotografij v souporabi na"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
 msgid "Options:"
@@ -1218,7 +1218,7 @@ msgstr "Ogledov:"
 
 #: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
 msgid "Merge Db"
-msgstr "Združi baze podatkov"
+msgstr "Združi podatkovne zbirke"
 
 #: ../extensions/Tools/MergeDb/MergeDb.cs:74
 msgid "Error opening the selected file"
@@ -1237,7 +1237,7 @@ msgstr ""
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:1
 msgid "<small><i>Choose the location of the database you want to import from</i></small>"
-msgstr "<small><i>Izbira mesta baze podatkov za uvažanje</i></small>"
+msgstr "<small><i>Izbira mesta podatkovne zbirke za uvažanje</i></small>"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:2
 msgid ""
@@ -1246,14 +1246,14 @@ msgid ""
 "\"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>Izbira uvoza iz izbrane baze podatkov.\n"
+"<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 baze podatkov že uvožene.</i></small>"
+"\"Vse\" uvozi vse in ustvari dvojnike, če so bile fotografije iz te podatkovne zbirke že uvožene.</i></small>"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.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 dostopna iz f-spot-a.</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>"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:7
 msgid "A Single Import Roll"
@@ -1277,11 +1277,11 @@ msgstr "Uvozi:"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:12
 msgid "Keep the images at their original location"
-msgstr "Obdrži slike na njihovem originalnem mestu"
+msgstr "Obdrži slike na njihovem izvirnem mestu"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:13
 msgid "Merge another F-Spot collection"
-msgstr "Združitev druge F-Spot zbirke"
+msgstr "Združitev druge zbirke F-Spot"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:14
 msgid "New Rolls Only"
@@ -1299,14 +1299,14 @@ msgid ""
 " 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 mapiranje.</big>"
+"Izbrati je treba mapo za preslikavo.</big>"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfig.addin.xml.h:1
 msgid "Configure Screensaver"
 msgstr "Nastavi ohranjevalnik zaslona"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
-#: ../src/UI.Dialog/DateRangeDialog.cs:129
+#: ../src/UI.Dialog/DateRangeDialog.cs:120
 msgid "All Images"
 msgstr "Vse slike"
 
@@ -1336,7 +1336,7 @@ 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 povečanih slik."
+msgstr "Omogočite to za interpolacijo približanih slik."
 
 #: ../f-spot.schemas.in.h:3
 msgid "Height of the import dialog."
@@ -1408,7 +1408,7 @@ 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 pokazanih v stranski vrstici."
+msgstr "Velikost ikon oznak prikazanih v stranski vrstici."
 
 #: ../f-spot.schemas.in.h:21
 msgid "The X position to use for the main window."
@@ -1472,7 +1472,7 @@ 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 slike kot naslov okna pregledovalnika."
+msgstr "Uporabi ime datoteke trenutne fotografije kot naslov okna pregledovalnika."
 
 #: ../f-spot.schemas.in.h:37
 msgid "Width of the import dialog."
@@ -1488,7 +1488,7 @@ 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."
+msgstr "Širina pladnja predogleda slike v pogovornemu oknu uvoza."
 
 #: ../f-spot.schemas.in.h:41
 msgid "X position of the main window."
@@ -1500,7 +1500,7 @@ 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"
+msgstr "Y položaj glavnega okna."
 
 #: ../f-spot.schemas.in.h:44
 msgid "Y position of the photo viewer window."
@@ -1508,7 +1508,7 @@ 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 črtast vzroec ali barva po izbira koristna pri ogledu ikon in ostalih delov grafične podobe s prozornimi deli."
+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."
 
 #: ../src/Core/App.cs:290
 #, csharp-format
@@ -1522,9 +1522,9 @@ msgid ""
 "the tag to some photos or selecting a different tag in the\n"
 "F-Spot preference dialog."
 msgstr ""
-"Oznaka \"{0}\" ni uporabljena. Poskusite z dodajanjem\n"
-"oznake fotografijam ali izberite drugo značko v\n"
-"pogovornem oknu F-Spot možnosti."
+"Oznaka \"{0}\" ni uveljavljena. Poskusite z dodajanjem\n"
+"oznake fotografijam ali izberite drugo oznako v\n"
+"pogovornem oknu možnosti F-Spot."
 
 #: ../src/Core/App.cs:295
 msgid "Search returned no results"
@@ -1538,14 +1538,14 @@ msgid ""
 msgstr ""
 "Oznaka, ki jo išče F-Spot, ne obstaja. Poskusite\n"
 "z izborom druge oznake v pogovornem oknu \n"
-"F-Spot možnosti."
+"možnosti F-Spot."
 
 #. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:349
+#: ../src/Core/Photo.cs:405
 msgid "Reparented"
-msgstr "Različica slike "
+msgstr "Lastnik je bil spremenjen"
 
-#: ../src/Core/Photo.cs:366
+#: ../src/Core/Photo.cs:422
 #, csharp-format
 msgid "Modified"
 msgid_plural "Modified ({0})"
@@ -1554,12 +1554,12 @@ msgstr[1] "Spremenjena ({0})"
 msgstr[2] "Spremenjeni ({0})"
 msgstr[3] "Spremenjene ({0})"
 
-#: ../src/Core/Photo.cs:389
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1}"
 msgstr "Spremenjena v {1}"
 
-#: ../src/Core/Photo.cs:389
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1} ({0})"
 msgstr "Spremenjena v {1} ({0})"
@@ -1602,7 +1602,7 @@ msgstr "Obreži"
 
 #: ../src/Editors/CropEditor.cs:74
 msgid "Select the area that needs cropping."
-msgstr "Izbor območja za obrez"
+msgstr "Izbor območja za obrez."
 
 #: ../src/Editors/CropEditor.cs:99
 msgid "No Constraint"
@@ -1622,7 +1622,7 @@ msgstr "Zmanjšaj nasičenje"
 
 #: ../src/Editors/RedEyeEditor.cs:19
 msgid "Red-eye Reduction"
-msgstr "Popravek rdečih oči"
+msgstr "Zmanjšanje rdečih oči"
 
 #: ../src/Editors/RedEyeEditor.cs:21
 msgid "Fix!"
@@ -1650,7 +1650,7 @@ msgstr "Kopiranj fotografijo"
 
 #: ../src/FSpot.addin.xml.h:2
 msgid "Export to"
-msgstr "Izvoz v"
+msgstr "Izvozi v"
 
 #: ../src/FSpot.addin.xml.h:3
 msgid "Open _With"
@@ -1662,13 +1662,13 @@ msgid "Rem_ove Tag"
 msgstr "Ods_trani oznako"
 
 #: ../src/FSpot.addin.xml.h:5
-#: ../src/SingleView.cs:428
+#: ../src/SingleView.cs:427
 #: ../src/ui/main_window.ui.h:16
 msgid "Rotate _Left"
 msgstr "Zavrti _levo"
 
 #: ../src/FSpot.addin.xml.h:6
-#: ../src/SingleView.cs:429
+#: ../src/SingleView.cs:428
 #: ../src/ui/main_window.ui.h:17
 msgid "Rotate _Right"
 msgstr "Zavrti _desno"
@@ -1693,7 +1693,7 @@ msgstr "<b>Pop_ravki</b>"
 
 #: ../src/f-spot.glade.h:2
 msgid "<b>_White Balance</b>"
-msgstr "<b> _Ravnotežje bele barve </b>"
+msgstr "<b>_Ravnotežje bele barve</b>"
 
 #: ../src/f-spot.glade.h:3
 msgid "C_ontrast:"
@@ -1704,6 +1704,7 @@ msgid "Manage your custom selection ratios"
 msgstr "Upravljanje razmerij za izbiranje po meri"
 
 #: ../src/f-spot.glade.h:5
+#: ../src/ui/tag_selection_dialog.ui.h:1
 msgid "Select a Tag..."
 msgstr "Izbor oznake ..."
 
@@ -1734,7 +1735,7 @@ msgstr "N_asičenost:"
 
 #: ../src/f-spot.glade.h:13
 msgid "_Tint:"
-msgstr "_Črnilo"
+msgstr "_Črnilo:"
 
 #: ../src/FullScreenView.cs:58
 msgid "Hide"
@@ -1746,11 +1747,11 @@ msgstr "Skrij orodno vrstico"
 
 #: ../src/FullScreenView.cs:66
 msgid "Info"
-msgstr "Podrobnosti"
+msgstr "Podatki"
 
 #: ../src/FullScreenView.cs:68
 msgid "Image information"
-msgstr "Podrobnosti o sliki"
+msgstr "Podatki o sliki"
 
 #: ../src/FullScreenView.cs:73
 msgid "Exit fullscreen"
@@ -1758,9 +1759,9 @@ msgstr "Izhod iz celozaslonskega načina"
 
 #: ../src/FullScreenView.cs:81
 #: ../src/MainWindow.cs:314
-#: ../src/SingleView.cs:92
+#: ../src/SingleView.cs:91
 msgid "Slideshow"
-msgstr "Predstavitev"
+msgstr "Diapredstavitev"
 
 #: ../src/FullScreenView.cs:82
 msgid "Start slideshow"
@@ -1785,15 +1786,15 @@ msgstr "Več"
 msgid "_Clear Date Range"
 msgstr "_Čiščenje datumskega območja"
 
-#: ../src/Import/ImportController.cs:410
-#: ../src/Import/ImportController.cs:412
+#: ../src/Import/ImportController.cs:468
+#: ../src/Import/ImportController.cs:470
 #: ../src/Import/MetadataImporter.cs:50
 msgid "Imported Tags"
 msgstr "Uvožene oznake"
 
 #: ../src/ItemAction.cs:79
 #: ../src/MainWindow.cs:281
-#: ../src/SingleView.cs:75
+#: ../src/SingleView.cs:74
 msgid "Rotate Left"
 msgstr "Zavrti levo"
 
@@ -1803,7 +1804,7 @@ msgstr "Vrtenje slike levo"
 
 #: ../src/ItemAction.cs:91
 #: ../src/MainWindow.cs:285
-#: ../src/SingleView.cs:80
+#: ../src/SingleView.cs:79
 msgid "Rotate Right"
 msgstr "Zavrti desno"
 
@@ -1823,9 +1824,14 @@ msgstr "Predhodni"
 msgid "Previous picture"
 msgstr "Predhodna slika"
 
+#: ../src/Jobs/SyncMetadataJob.cs:73
+#, csharp-format
+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."
+
 #: ../src/MainWindow.cs:274
-#: ../src/UI.Dialog/ImportDialog.cs:171
-#: ../src/ui/import.ui.h:4
+#: ../src/UI.Dialog/ImportDialog.cs:195
+#: ../src/ui/import.ui.h:3
 msgid "Import"
 msgstr "Uvozi"
 
@@ -1851,17 +1857,17 @@ msgid "View and edit a photo"
 msgstr "Prikaz in urejanje fotografije"
 
 #: ../src/MainWindow.cs:309
-#: ../src/SingleView.cs:87
+#: ../src/SingleView.cs:86
 msgid "Fullscreen"
 msgstr "Celozaslonski način"
 
 #: ../src/MainWindow.cs:311
-#: ../src/SingleView.cs:89
+#: ../src/SingleView.cs:88
 msgid "View photos fullscreen"
 msgstr "Celozaslonski ogled fotografij"
 
 #: ../src/MainWindow.cs:316
-#: ../src/SingleView.cs:94
+#: ../src/SingleView.cs:93
 msgid "View photos in a slideshow"
 msgstr "Ogled fotografij v diapredstavitvi"
 
@@ -1882,24 +1888,24 @@ msgid "Hide _Find Bar"
 msgstr "Skrij _iskalno vrstico"
 
 #. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1722
+#: ../src/MainWindow.cs:1724
 #, csharp-format
 msgid "Merge the selected tag"
 msgid_plural "Merge the {0} selected tags?"
-msgstr[0] "Združitev {0} izbranih oznak?"
-msgstr[1] "Združitev {0} izbrane oznake?"
-msgstr[2] "Združitev {0} izbranih oznak?"
-msgstr[3] "Združitev {0} izbranih oznak?"
+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/MainWindow.cs:1749
+#: ../src/MainWindow.cs:1751
 msgid "This operation will merge the selected tags and any sub-tags into a single tag."
-msgstr "Z dejanjem bodo združene izbrane oznake in morebitne pod-oznake v eno samo oznako."
+msgstr "To dejanje bo združilo izbrane oznake in morebitne pod-oznake v eno samo oznako."
 
-#: ../src/MainWindow.cs:1751
+#: ../src/MainWindow.cs:1753
 msgid "_Merge Tags"
 msgstr "Z_druži oznake"
 
-#: ../src/MainWindow.cs:1956
+#: ../src/MainWindow.cs:1958
 #, csharp-format
 msgid "{0} Photo out of {1}"
 msgid_plural "{0} Photos out of {1}"
@@ -1908,8 +1914,8 @@ msgstr[1] "{0} fotografija od {1}"
 msgstr[2] "{0} fotografiji od {1}"
 msgstr[3] "{0} fotografije od {1}"
 
-#: ../src/MainWindow.cs:1958
-#: ../src/SingleView.cs:470
+#: ../src/MainWindow.cs:1960
+#: ../src/SingleView.cs:469
 #, csharp-format
 msgid "{0} Photo"
 msgid_plural "{0} Photos"
@@ -1918,7 +1924,7 @@ msgstr[1] "{0} Fotografija"
 msgstr[2] "{0} Fotografiji"
 msgstr[3] "{0} Fotografije"
 
-#: ../src/MainWindow.cs:1961
+#: ../src/MainWindow.cs:1963
 #, csharp-format
 msgid " ({0} selected)"
 msgid_plural " ({0} selected)"
@@ -1927,25 +1933,25 @@ msgstr[1] " ({0} izbrana)"
 msgstr[2] " ({0} izbrani)"
 msgstr[3] " ({0} izbrane)"
 
-#: ../src/MainWindow.cs:2042
+#: ../src/MainWindow.cs:2044
 msgid "_Ok"
 msgstr "_V redu"
 
-#: ../src/MainWindow.cs:2043
+#: ../src/MainWindow.cs:2045
 msgid "Error Deleting Picture"
 msgstr "Napaka med brisanjem slike"
 
-#: ../src/MainWindow.cs:2048
+#: ../src/MainWindow.cs:2050
 #, csharp-format
 msgid "No permission to delete the file:{1}{0}"
 msgstr "Ni dovoljenj za izbris datoteke:{1}{0}"
 
-#: ../src/MainWindow.cs:2052
+#: ../src/MainWindow.cs:2054
 #, 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/MainWindow.cs:2084
+#: ../src/MainWindow.cs:2086
 #, csharp-format
 msgid "Delete the selected photo permanently?"
 msgid_plural "Delete the {0} selected photos permanently?"
@@ -1954,15 +1960,15 @@ 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/MainWindow.cs:2088
+#: ../src/MainWindow.cs:2090
 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] "Izbris vseh različic izbranih fotografij z diska."
-msgstr[1] "Izbris vseh različic izbrane fotografije z diska."
-msgstr[2] "Izbris vseh različic izbranih fotografij z diska."
-msgstr[3] "Izbris vseh različic izbranih fotografij z diska."
+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/MainWindow.cs:2091
+#: ../src/MainWindow.cs:2093
 msgid "_Delete photo"
 msgid_plural "_Delete photos"
 msgstr[0] "Izbri_ši fotografije"
@@ -1970,7 +1976,7 @@ msgstr[1] "Izbri_ši fotografijo"
 msgstr[2] "Izbri_ši fotografiji"
 msgstr[3] "Izbri_ši fotografije"
 
-#: ../src/MainWindow.cs:2127
+#: ../src/MainWindow.cs:2129
 #, csharp-format
 msgid "Remove the selected photo from F-Spot?"
 msgid_plural "Remove the {0} selected photos from F-Spot?"
@@ -1979,25 +1985,25 @@ 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/MainWindow.cs:2132
+#: ../src/MainWindow.cs:2134
 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 F-Spot kataloga bodo vsi podatki o oznakah izgubljeni. Fotografije bodo ostale na računalniku in jih lahko ponovno uvozite v F-Spot."
+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/MainWindow.cs:2133
+#: ../src/MainWindow.cs:2135
 msgid "_Remove from Catalog"
 msgstr "_Odstrani iz kataloga"
 
-#: ../src/MainWindow.cs:2202
+#: ../src/MainWindow.cs:2209
 #, csharp-format
 msgid "Delete tag \"{0}\"?"
 msgstr "Izbris oznake \"{0}\"?"
 
-#: ../src/MainWindow.cs:2204
+#: ../src/MainWindow.cs:2211
 #, csharp-format
 msgid "Delete the {0} selected tags?"
 msgstr "Izbris {0} izbrane oznake ?"
 
-#: ../src/MainWindow.cs:2209
+#: ../src/MainWindow.cs:2216
 msgid "photo"
 msgid_plural "photos"
 msgstr[0] "fotografije"
@@ -2005,7 +2011,7 @@ msgstr[1] "fotografija"
 msgstr[2] "fotografiji"
 msgstr[3] "fotografije"
 
-#: ../src/MainWindow.cs:2211
+#: ../src/MainWindow.cs:2218
 #, 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."
@@ -2014,7 +2020,7 @@ 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/MainWindow.cs:2216
+#: ../src/MainWindow.cs:2223
 msgid "_Delete tag"
 msgid_plural "_Delete tags"
 msgstr[0] "Iz_briši oznake"
@@ -2023,16 +2029,16 @@ msgstr[2] "Iz_briši oznaki"
 msgstr[3] "Iz_briši oznake"
 
 #. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2230
+#: ../src/MainWindow.cs:2237
 msgid "Tag is not empty"
 msgstr "Oznaka ni prazna"
 
-#: ../src/MainWindow.cs:2231
+#: ../src/MainWindow.cs:2238
 #, 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/MainWindow.cs:2662
+#: ../src/MainWindow.cs:2678
 msgid "Rotate selected photo left"
 msgid_plural "Rotate selected photos left"
 msgstr[0] "Vrtenje izbranih fotografij levo"
@@ -2040,7 +2046,7 @@ msgstr[1] "Vrtenje izbrane fotografije levo"
 msgstr[2] "Vrtenje izbranih fotografij levo"
 msgstr[3] "Vrtenje izbranih fotografij levo"
 
-#: ../src/MainWindow.cs:2675
+#: ../src/MainWindow.cs:2691
 msgid "Rotate selected photo right"
 msgid_plural "Rotate selected photos right"
 msgstr[0] "Vrtenje izbranih fotografij desno"
@@ -2048,25 +2054,25 @@ msgstr[1] "Vrtenje izbrane fotografije desno"
 msgstr[2] "Vrtenje izbranih fotografij desno"
 msgstr[3] "Vrtenje izbranih fotografij desno"
 
-#: ../src/MainWindow.cs:2686
+#: ../src/MainWindow.cs:2702
 #, csharp-format
 msgid "Find _Selected Tag"
 msgid_plural "Find _Selected Tags"
-msgstr[0] "Išči _izbranih oznak"
+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/MainWindow.cs:2690
+#: ../src/MainWindow.cs:2706
 #, csharp-format
 msgid "Find Selected Tag _With"
 msgid_plural "Find Selected Tags _With"
-msgstr[0] "Išči izbranih oznakih _z"
+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/MainWindow.cs:2731
+#: ../src/MainWindow.cs:2747
 msgid "Create New Version?"
 msgid_plural "Create New Versions?"
 msgstr[0] "Ustvari nove različice?"
@@ -2074,20 +2080,20 @@ msgstr[1] "Ustvari novo različico?"
 msgstr[2] "Ustvari novi različici?"
 msgstr[3] "Ustvari nove različice?"
 
-#: ../src/MainWindow.cs:2733
+#: ../src/MainWindow.cs:2749
 #, 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 originale?"
-msgstr[1] "Ali naj pred zagonom {1} F-spot ustvari nove različice izbrane fotografije, da ohrani original?"
-msgstr[2] "Ali naj pred zagonom {1} F-spot ustvari nove različice izbranih fotografij, da ohrani originala?"
-msgstr[3] "Ali naj pred zagonom {1} F-spot ustvari nove različice izbranih fotografij, da ohrani originale?"
+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/MainWindow.cs:2755
+#: ../src/MainWindow.cs:2771
 msgid "XCF version"
 msgstr "Različica XCF"
 
-#: ../src/PhotoStore.cs:166
+#: ../src/PhotoStore.cs:165
 #: ../src/ui/mail_dialog.ui.h:17
 msgid "Original"
 msgstr "Izvorno"
@@ -2138,7 +2144,7 @@ msgstr "Resnično odpni različico \"{0}\" od \"{1}\"?"
 
 #: ../src/PhotoVersionCommands.cs:174
 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 razveljavite povlecite novo fotografijo nazaj k izvorni fotografiji. "
+msgstr "Različice fotografije se v knjižnici pojavijo kot različne fotografije. Za razveljavitve povlecite novo fotografijo nazaj k starševski fotografiji. "
 
 #: ../src/PhotoVersionCommands.cs:196
 msgid "Re_parent"
@@ -2148,10 +2154,10 @@ msgstr "Pri_pni"
 #, 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 ponovno pripeti {2} fotografij kot različice \"{1}\"?"
-msgstr[1] "Ali zares želite ponovno pripeti {2} fotografijo kot različico \"{1}\"?"
-msgstr[2] "Ali zares želite ponovno pripeti {2} fotografiji kot različici \"{1}\"?"
-msgstr[3] "Ali zares želite ponovno pripeti {2} fotografije kot različice \"{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/PhotoVersionCommands.cs:200
 msgid "This makes the photos appear as a single one in the library. The versions can be detached using the Photo menu."
@@ -2162,17 +2168,16 @@ msgstr "Fotografije se v knjižnici pojavijo kot ena fotografija. Različice je
 msgid "Received exception \"{0}\"."
 msgstr "Prejeta je bila izjema \"{0}\"."
 
-#: ../src/PhotoVersionMenu.cs:71
-#: ../src/Widgets/InfoBox.cs:472
-#: ../src/Widgets/InfoBox.cs:474
+#: ../src/PhotoVersionMenu.cs:54
+#: ../src/Widgets/InfoBox.cs:470
 msgid "(No Edits)"
 msgstr "(Ni urejanj)"
 
-#: ../src/PhotoView.cs:339
+#: ../src/PhotoView.cs:336
 msgid "Description:"
 msgstr "Opis:"
 
-#: ../src/Preferences.cs:155
+#: ../src/Preferences.cs:157
 msgid "Photos"
 msgstr "Fotografije"
 
@@ -2209,32 +2214,32 @@ msgstr "Osvežitev iskanja"
 msgid "No matching photos found"
 msgstr "Ni mogoče najti skladnih fotografij"
 
-#: ../src/RotateCommand.cs:73
+#: ../src/RotateCommand.cs:74
 msgid "Unable to rotate this type of photo"
-msgstr "Ni mogoče zavrteti te zvrsti fotografij"
+msgstr "Ni mogoče vrteti te vrste fotografij"
 
-#: ../src/RotateCommand.cs:92
+#: ../src/RotateCommand.cs:93
 msgid "Unable to rotate readonly file"
-msgstr "Ni mogoče vrteti datoteke označene le za branje"
+msgstr "Ni mogoče vrteti datoteke le za branje"
 
-#: ../src/RotateCommand.cs:155
+#: ../src/RotateCommand.cs:156
 msgid "Rotating photos"
 msgstr "Vrtenje fotografij"
 
-#: ../src/RotateCommand.cs:166
+#: ../src/RotateCommand.cs:167
 #, csharp-format
 msgid "Rotating photo \"{0}\""
 msgstr "Vrtenje fotografije \"{0}\""
 
-#: ../src/RotateCommand.cs:179
+#: ../src/RotateCommand.cs:180
 msgid "Directory not found"
 msgstr "Mape ni mogoče najti"
 
-#: ../src/RotateCommand.cs:181
+#: ../src/RotateCommand.cs:182
 msgid "File not found"
 msgstr "Datoteke ni mogoče najti"
 
-#: ../src/RotateCommand.cs:199
+#: ../src/RotateCommand.cs:200
 #, csharp-format
 msgid "Unable to rotate photo"
 msgid_plural "Unable to rotate {0} photos"
@@ -2243,27 +2248,27 @@ 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/RotateCommand.cs:201
+#: ../src/RotateCommand.cs:202
 #, 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 ponovno. "
-msgstr[1] "{0} fotografije 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 ponovno. "
-msgstr[2] "{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 ponovno. "
-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 ponovno. "
+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/RotateCommand.cs:228
+#: ../src/RotateCommand.cs:229
 #, csharp-format
 msgid "Received error \"{0}\" while attempting to rotate {1}"
 msgstr "Med poskusom vrtenja {1} je prišlo do napake \"{0}\""
 
-#: ../src/RotateCommand.cs:233
+#: ../src/RotateCommand.cs:234
 msgid "Error while rotating photo."
-msgstr "Napaka med vrtenjem fotografije"
+msgstr "Napaka med vrtenjem fotografije."
 
 #: ../src/SendEmail.cs:211
 msgid "Preparing email"
-msgstr "Pripravljanje e-pošte"
+msgstr "Pripravljanje elektronske pošte"
 
 #: ../src/SendEmail.cs:255
 #, csharp-format
@@ -2277,7 +2282,7 @@ msgstr "Napaka med obdelavo slike"
 #: ../src/SendEmail.cs:275
 #, csharp-format
 msgid "An error occured while processing \"{0}\": {1}"
-msgstr "Med obdelavo \"{0}\": {1} je prišlo do napake"
+msgstr "Med obdelavo \"{0}\" je prišlo do napake: {1}"
 
 #. Send the mail :)
 #: ../src/SendEmail.cs:288
@@ -2310,41 +2315,41 @@ msgstr "Polmer:"
 msgid "Threshold:"
 msgstr "Prag:"
 
-#: ../src/SingleView.cs:77
+#: ../src/SingleView.cs:76
 msgid "Rotate photo left"
 msgstr "Vrtenje fotografije v levo"
 
-#: ../src/SingleView.cs:82
+#: ../src/SingleView.cs:81
 msgid "Rotate photo right"
 msgstr "Vrtenje fotografije v desno"
 
-#: ../src/SingleView.cs:119
+#: ../src/SingleView.cs:118
 msgid "Folder"
 msgstr "Mapa"
 
-#: ../src/SingleView.cs:344
+#: ../src/SingleView.cs:343
 msgid "Open"
 msgstr "Odpri"
 
-#: ../src/SingleView.cs:347
+#: ../src/SingleView.cs:346
 msgid "Select Folder"
 msgstr "Izbor mape"
 
-#: ../src/SingleView.cs:431
+#: ../src/SingleView.cs:430
 msgid "Set as Background"
 msgstr "Nastavi kot ozadje"
 
-#: ../src/TagCommands.cs:120
+#: ../src/TagCommands.cs:116
 #: ../src/TagSelectionWidget.cs:492
 #: ../src/UI.Dialog/EditTagDialog.cs:76
 msgid "This name is already in use"
 msgstr "Ime je že v uporabi"
 
-#: ../src/TagCommands.cs:170
+#: ../src/TagCommands.cs:166
 msgid "Create New Tag"
 msgstr "Ustvari novo oznako"
 
-#: ../src/TagCommands.cs:171
+#: ../src/TagCommands.cs:167
 msgid "Name of New Tag:"
 msgstr "Ime nove oznake:"
 
@@ -2392,17 +2397,17 @@ msgstr[3] "Odstranitev oznak iz izbora"
 
 #: ../src/TagPopup.cs:62
 msgid "Merge Tags"
-msgstr "Združitev oznak"
+msgstr "Združi oznake"
 
 #: ../src/TagQueryWidget.cs:34
 #, csharp-format
 msgid "Include Photos Tagged \"{0}\""
-msgstr "Vključitev fotografij označenih z \"{0}\""
+msgstr "Vključi fotografije označene z \"{0}\""
 
 #: ../src/TagQueryWidget.cs:39
 #, csharp-format
 msgid "Exclude Photos Tagged \"{0}\""
-msgstr "Izključitev fotografij označenih z \"{0}\""
+msgstr "Izključi fotografije označene z \"{0}\""
 
 #: ../src/TagQueryWidget.cs:44
 msgid "Remove From Search"
@@ -2435,28 +2440,28 @@ msgstr "Za iskanje po oznakah jih povlecite sem"
 msgid "Error renaming tag"
 msgstr "Napaka med preimenovanjem oznake"
 
-#: ../src/TagStore.cs:204
+#: ../src/TagStore.cs:205
 msgid "Favorites"
 msgstr "Priljubljeno"
 
-#: ../src/TagStore.cs:209
+#: ../src/TagStore.cs:210
 msgid "Hidden"
 msgstr "Skrito"
 
-#: ../src/TagStore.cs:217
+#: ../src/TagStore.cs:218
 msgid "People"
 msgstr "Ljudje"
 
-#: ../src/TagStore.cs:222
+#: ../src/TagStore.cs:223
 msgid "Places"
 msgstr "Mesta"
 
-#: ../src/TagStore.cs:227
+#: ../src/TagStore.cs:228
 msgid "Events"
 msgstr "Dogodki"
 
 #. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:240
+#: ../src/TagStore.cs:241
 #: ../src/Widgets/InfoBox.cs:344
 msgid "(None)"
 msgstr "(Brez)"
@@ -2492,63 +2497,63 @@ msgstr "Posodabljanje sličic"
 msgid "Updating picture \"{0}\""
 msgstr "Posodabljanje slike \"{0}\""
 
-#: ../src/UI.Dialog/AboutDialog.cs:95
+#: ../src/UI.Dialog/AboutDialog.cs:99
 msgid "Photo management for GNOME"
 msgstr "Upravljanje fotografij za GNOME"
 
-#: ../src/UI.Dialog/AboutDialog.cs:96
+#: ../src/UI.Dialog/AboutDialog.cs:100
 msgid "Copyright © 2003-2010 Novell Inc."
 msgstr "Avtorske pravice © 2003-2010 Novell Inc."
 
-#: ../src/UI.Dialog/AboutDialog.cs:120
+#: ../src/UI.Dialog/AboutDialog.cs:124
 msgid "translator-credits"
 msgstr "Andrej Žnidaršič <andrej.znidarsic at gmail.com>"
 
-#: ../src/UI.Dialog/AboutDialog.cs:125
+#: ../src/UI.Dialog/AboutDialog.cs:129
 msgid "F-Spot Website"
-msgstr "F-Spot spletišče"
+msgstr "Spletišče F-Spot"
 
 #: ../src/UI.Dialog/AdjustTimeDialog.cs:113
 #: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
 #, csharp-format
 msgid "Shift all photos by {0}"
-msgstr "Zamik vseh fotografij za {0}"
+msgstr "Premik vseh fotografij za {0}"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:99
+#: ../src/UI.Dialog/DateRangeDialog.cs:90
 msgid "Today"
 msgstr "Danes"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:101
+#: ../src/UI.Dialog/DateRangeDialog.cs:92
 msgid "Yesterday"
 msgstr "Včeraj"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:103
+#: ../src/UI.Dialog/DateRangeDialog.cs:94
 msgid "Last 7 days"
 msgstr "Zadnjih 7 dni"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:105
+#: ../src/UI.Dialog/DateRangeDialog.cs:96
 msgid "Last 30 days"
 msgstr "Zadnjih 30 dni"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:107
+#: ../src/UI.Dialog/DateRangeDialog.cs:98
 msgid "Last 90 days"
 msgstr "Zadnjih 90 dni"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:109
+#: ../src/UI.Dialog/DateRangeDialog.cs:100
 msgid "Last 360 days"
 msgstr "Zadnjih 360 dni"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:111
+#: ../src/UI.Dialog/DateRangeDialog.cs:102
 msgid "Current Week (Mon-Sun)"
 msgstr "Trenutni Teden (Pon-Ned)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:113
+#: ../src/UI.Dialog/DateRangeDialog.cs:104
 msgid "Previous Week (Mon-Sun)"
-msgstr "Prejšnji Teden (Pon-Ned)"
+msgstr "Predhodni Teden (Pon-Ned)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:131
+#: ../src/UI.Dialog/DateRangeDialog.cs:122
 msgid "Customized Range"
-msgstr "Razmerje po meri"
+msgstr "Obseg po meri"
 
 #: ../src/UI.Dialog/EditExceptionDialog.cs:40
 msgid "Error editing photo"
@@ -2610,32 +2615,46 @@ msgstr "Nesprejeto izjemno dejanje:"
 msgid "Choose Folder..."
 msgstr "Izbor mape ...."
 
-#: ../src/UI.Dialog/ImportDialog.cs:124
+#: ../src/UI.Dialog/ImportDialog.cs:131
 msgid "Choose Import source..."
 msgstr "Izbor vira uvoza ..."
 
-#: ../src/UI.Dialog/ImportDialog.cs:136
+#: ../src/UI.Dialog/ImportDialog.cs:143
 msgid "(No Cameras Detected)"
 msgstr "(Ni zaznanih fotoaparatov)"
 
-#: ../src/UI.Dialog/ImportDialog.cs:264
+#: ../src/UI.Dialog/ImportDialog.cs:178
+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/UI.Dialog/ImportDialog.cs:179
+msgid "Warning"
+msgstr "Opozorilo"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
 #, csharp-format
 msgid "Importing Photos: {0} of {1}..."
 msgstr "Uvažanje fotografij: {0} od {1} ..."
 
-#: ../src/UI.Dialog/ImportDialog.cs:288
+#: ../src/UI.Dialog/ImportDialog.cs:312
 msgid "Importing photos..."
 msgstr "Uvažanje fotografij ..."
 
 #. TODO: Using a GtkSpinner would be nicer here.
-#: ../src/UI.Dialog/ImportDialog.cs:295
+#: ../src/UI.Dialog/ImportDialog.cs:319
 msgid "Searching for photos... (You can already click Import to continue)"
-msgstr "Iskanje fotografij ... (Za nadaljevanje lahko že kliknite Uvozi)"
+msgstr "Iskanje fotografij ... (za nadaljevanje lahko že kliknite Uvozi)"
 
 #: ../src/UI.Dialog/PreferenceDialog.cs:57
 #: ../src/UI.Dialog/PreferenceDialog.cs:80
 msgid "None"
-msgstr "Noben"
+msgstr "Brez"
 
 #: ../src/UI.Dialog/PreferenceDialog.cs:59
 msgid "System profile"
@@ -2647,12 +2666,12 @@ msgstr "Običajna tema"
 
 #: ../src/UI.Dialog/RepairDbDialog.cs:22
 msgid "Error loading database."
-msgstr "Napaka med nalaganjem podatkovne zbirke"
+msgstr "Napaka med nalaganjem podatkovne zbirke."
 
 #: ../src/UI.Dialog/RepairDbDialog.cs:23
 #, 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 zbirka je bila premaknjena v {0}, zato je bila ustvarjena nova."
+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/UI.Dialog/SelectionRatioDialog.cs:61
 msgid "Label"
@@ -2664,7 +2683,7 @@ msgstr "Razmerje"
 
 #: ../src/UI.Dialog/ThreadProgressDialog.cs:55
 msgid "Retry"
-msgstr "Poskusi ponovno"
+msgstr "Poskusi znova"
 
 #: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:1
 msgid "0000:00:00 00:00:00"
@@ -2710,6 +2729,24 @@ msgstr "razlika:"
 msgid "min. Starting at {0}"
 msgstr "najmanjši začetek pri {0}"
 
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
+msgid "C_reate"
+msgstr "Ustva_ri"
+
+#: ../src/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/UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr "N_adrejena oznaka:"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "Ime _oznake:"
+
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
 msgid "<b>End Date</b>"
 msgstr "<b>Končni datum</b>"
@@ -2732,7 +2769,7 @@ msgstr "Prikazane bodo le fotografije znotraj teh datumov."
 
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:6
 msgid "Set date range"
-msgstr "Nastavi razpon datumov"
+msgstr "Nastavi obseg datumov"
 
 #: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
 msgid "Edit Tag"
@@ -2742,20 +2779,10 @@ msgstr "Urejanje oznake"
 msgid "Edit icon"
 msgstr "Urejanje ikone"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
-#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
-msgid "P_arent Tag:"
-msgstr "N_adrejena oznaka:"
-
 #: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
 msgid "_Icon:"
 msgstr "_Ikona:"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
-#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
-msgid "_Tag Name:"
-msgstr "Ime _oznake:"
-
 #: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:1
 msgid "<b>From External Photo</b>"
 msgstr "<b>Iz zunanje fotografije</b>"
@@ -2790,7 +2817,7 @@ msgstr "<b>Ogled vseh uvoženih slik</b>"
 
 #: ../src/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 določenih zvitkih."
+msgstr "Prikaz le tistih fotografij, ki so bile uvožene v navedenih zvitkih."
 
 #: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
 msgid "Filter on selected rolls"
@@ -2798,11 +2825,11 @@ msgstr "Filter na izbranih zvitkih"
 
 #: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
 msgid "Number of photos in selected rolls:"
-msgstr "Število slik v izbranih zvitkih:"
+msgstr "Število fotografij v izbranih zvitkih:"
 
 #: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
 msgid "Show all photos."
-msgstr "Pokaži vseh fotografije."
+msgstr "Pokaži vse fotografije."
 
 #: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
 msgid "after"
@@ -2886,34 +2913,34 @@ msgstr "Nastavitev filtrov ocen"
 msgid "Repair"
 msgstr "Popravi"
 
-#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
-msgid "C_reate"
-msgstr "_CD ..."
-
-#: ../src/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/ui/import.ui.h:1
-msgid "Attach Tags:"
-msgstr "Pripenjanje oznak:"
+msgid "C_opy files to the Photos folder"
+msgstr "_Kopiranj datoteke v mapo fotografij"
 
 #: ../src/ui/import.ui.h:2
-msgid "Copy files to the Photos folder"
-msgstr "Kopiranje datotek v mapo fotografij"
-
-#: ../src/ui/import.ui.h:3
-msgid "Detect duplicates"
-msgstr "Zaznavanje dvojnikov"
+msgid "I_nclude subfolders"
+msgstr "_Vključi podmape"
 
 #. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:5
+msgid "Import _from:"
+msgstr "Uvozi _iz:"
+
 #: ../src/ui/import.ui.h:6
-msgid "Import from:"
-msgstr "Uvozi iz:"
+msgid "_Attach tags:"
+msgstr "_Pripni oznake:"
 
 #: ../src/ui/import.ui.h:7
-msgid "Include subfolders"
-msgstr "_Upoštevaj podmape"
+msgid "_Detect duplicates"
+msgstr "_Zaznaj dvojnike"
+
+#: ../src/ui/import.ui.h:8
+msgid "_Import"
+msgstr "_Uvozi"
+
+#: ../src/ui/import.ui.h:9
+msgid "_Remove original files after import"
+msgstr "_Odstrani izvorne datoteke po uvozu"
 
 #: ../src/ui/mail_dialog.ui.h:1
 msgid "1024 px"
@@ -2945,11 +2972,11 @@ msgstr "<b>Povzetek</b>"
 
 #: ../src/ui/mail_dialog.ui.h:9
 msgid "Create Mail"
-msgstr "Ustvari sporočilo"
+msgstr "Ustvari pošto"
 
 #: ../src/ui/mail_dialog.ui.h:10
 msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr "Ustvari sporočilo s pripetimi fotografijami (po možnosti spremenjenih velikosti)"
+msgstr "Ustvari pošto s pripetimi fotografijami (po možnosti spremenjenih velikosti)"
 
 #: ../src/ui/mail_dialog.ui.h:11
 msgid "Do not send a mail"
@@ -2977,7 +3004,7 @@ msgstr "Število slik"
 
 #: ../src/ui/mail_dialog.ui.h:18
 msgid "Original size (possible very large file size)"
-msgstr "Originalna velikost (mogoče zelo velika velikost datotek)"
+msgstr "Izvorna velikost (morda zelo velika velikost datotek)"
 
 #: ../src/ui/mail_dialog.ui.h:19
 msgid "Small"
@@ -2989,11 +3016,11 @@ msgstr "Drobcena"
 
 #: ../src/ui/mail_dialog.ui.h:21
 msgid "Total original size"
-msgstr "Skupna osnovna velikost"
+msgstr "Skupna izvorna velikost"
 
 #: ../src/ui/mail_dialog.ui.h:22
 msgid "_Create Mail"
-msgstr "Ustvari sporočilo"
+msgstr "_Ustvari pošto"
 
 #: ../src/ui/main_window.ui.h:1
 msgid "Adjust _Time..."
@@ -3165,7 +3192,7 @@ msgstr "_Celozaslonski način"
 #: ../src/ui/main_window.ui.h:49
 #: ../src/ui/single_view.ui.h:14
 msgid "_Help"
-msgstr "Po_moč"
+msgstr "Pomo_č"
 
 #: ../src/ui/main_window.ui.h:50
 msgid "_Hidden"
@@ -3226,7 +3253,7 @@ msgstr "Izberi _uvozne zvitke ..."
 
 #: ../src/ui/main_window.ui.h:65
 msgid "_Set Date Range..."
-msgstr "Nastavi _razpon datumov ..."
+msgstr "Nastavi _obsega datumov ..."
 
 #: ../src/ui/main_window.ui.h:66
 msgid "_Set Rating filter..."
@@ -3239,7 +3266,7 @@ msgstr "_Izostri ..."
 #: ../src/ui/main_window.ui.h:68
 #: ../src/ui/single_view.ui.h:16
 msgid "_Slideshow"
-msgstr "_Predstavitev"
+msgstr "_Diapredstavitev"
 
 #: ../src/ui/main_window.ui.h:69
 msgid "_Small"
@@ -3284,11 +3311,11 @@ msgstr "F-Spot pogled"
 
 #: ../src/ui/single_view.ui.h:4
 msgid "Show or hide the side pane"
-msgstr "Pokaži ali skrij stranski pladenj"
+msgstr "Pokaže ali skrije stranski pladenj"
 
 #: ../src/ui/single_view.ui.h:5
 msgid "Show or hide the toolbar"
-msgstr "Pokaži ali skrij orodno vrstico"
+msgstr "Pokaže ali skrije orodno vrstico"
 
 #: ../src/ui/single_view.ui.h:6
 msgid "Side _pane"
@@ -3308,11 +3335,11 @@ msgstr "<b>Prozorni deli</b>"
 
 #: ../src/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. Onemogočanje ni priporočeno za ogled fotografij, toda onemogočanje interpolacije bi lahko bilo uporabno pri oblikovanju ikon.</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/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 delov grafične podobe s prozornimi deli.</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/ui/viewer_preferences.ui.h:5
 msgid "As _background"
@@ -3324,7 +3351,7 @@ msgstr "Kot barvo _po meri"
 
 #: ../src/ui/viewer_preferences.ui.h:7
 msgid "As check _pattern"
-msgstr "Kot preizkusni _vzorec"
+msgstr "Kot _vzorec šahovnice"
 
 #: ../src/ui/viewer_preferences.ui.h:8
 msgid "Preferences"
@@ -3334,13 +3361,13 @@ msgstr "Možnosti"
 msgid "_Interpolate image on zoom"
 msgstr "_Interpolacija slike pri približanju"
 
-#: ../src/Updater.cs:724
+#: ../src/Updater.cs:727
 msgid "Updating F-Spot Database"
-msgstr "Posodabljanje F-Spot podatkovne zbirke"
+msgstr "Posodabljanje podatkovne zbirke F-Spot"
 
-#: ../src/Updater.cs:725
+#: ../src/Updater.cs:728
 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 F-Spotove galerije do konca posodobi. Postopek je lahko dolgotrajen."
+msgstr "Počakati je treba, da se podatkovna zbirka galerije F-Spot do konca posodobi. Postopek lahko traja nekaj časa."
 
 #: ../src/Widgets/CustomPrintWidget.cs:119
 msgid "Page Setup"
@@ -3355,7 +3382,7 @@ msgstr "Velikost papirja: {0} x {1} mm"
 
 #: ../src/Widgets/CustomPrintWidget.cs:130
 msgid "Set Page Size and Orientation"
-msgstr "Nastavi velikost strani in usmerjenost"
+msgstr "Nastavi velikost in usmerjenost strani"
 
 #: ../src/Widgets/CustomPrintWidget.cs:141
 msgid "Photos per page"
@@ -3429,7 +3456,7 @@ msgstr "Urejanje"
 
 #: ../src/Widgets/EditorPage.cs:200
 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 ustrezno območje na fotografiji in poskusite ponovno"
+msgstr "Orodje zahteva dejavno izbiro. Izberite območje na fotografiji in poskusite znova"
 
 #: ../src/Widgets/EditorPage.cs:218
 msgid "Error saving adjusted photo"
@@ -3442,13 +3469,13 @@ msgstr[3] "Napaka med shranjevanjem prilagojenih fotografij"
 #: ../src/Widgets/EditorPage.cs:220
 #, csharp-format
 msgid "Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."
-msgstr "Prejeta izjema \"{0}\". RAW datoteke je treba pred urejanjem razviti v JPEG."
+msgstr "Prejeta je bila izjema \"{0}\". Datoteke RAW je treba pred urejanjem razviti v JPEG."
 
-#: ../src/Widgets/Filmstrip.cs:573
+#: ../src/Widgets/Filmstrip.cs:470
 msgid "_Horizontal"
 msgstr "_Vodoravno"
 
-#: ../src/Widgets/Filmstrip.cs:577
+#: ../src/Widgets/Filmstrip.cs:474
 msgid "_Vertical"
 msgstr "_Navpično"
 
@@ -3508,9 +3535,9 @@ msgstr "(napačen zapis)"
 #: ../src/Widgets/InfoBox.cs:364
 #: ../src/Widgets/InfoBox.cs:374
 msgid "(Unknown)"
-msgstr "(Neznano)"
+msgstr "(neznano)"
 
-#: ../src/Widgets/InfoBox.cs:470
+#: ../src/Widgets/InfoBox.cs:474
 #, csharp-format
 msgid "(One Edit)"
 msgid_plural "({0} Edits)"
@@ -3526,7 +3553,7 @@ msgstr "(Napaka med branjem datoteke)"
 #: ../src/Widgets/InfoBox.cs:529
 #, csharp-format
 msgid "{0} Photos"
-msgstr "{0} Fotografij"
+msgstr "{0} fotografij"
 
 #. Note for translators: {0} is a date, {1} and {2} are times.
 #: ../src/Widgets/InfoBox.cs:549
@@ -3549,7 +3576,7 @@ msgstr ""
 
 #: ../src/Widgets/InfoBox.cs:581
 msgid "(At least one File not found)"
-msgstr "(ni najdene vsaj ene datoteke)"
+msgstr "(vsaj ene datoteke ni mogoče najti)"
 
 #: ../src/Widgets/InfoBox.cs:698
 msgid "Show Photo Name"
@@ -3616,6 +3643,8 @@ msgstr "Prikaže F-Spotovo diapredstavitev"
 msgid "F-Spot photos"
 msgstr "F-Spot fotografije"
 
+#~ msgid "Attach Tags:"
+#~ msgstr "Pripenjanje oznak:"
 #~ msgid "Autorotate"
 #~ msgstr "Samodejno vrtenje"
 #~ msgid "_Autorotate"
@@ -3827,8 +3856,6 @@ msgstr "F-Spot fotografije"
 #~ msgstr " "
 #~ msgid "<b></b>"
 #~ msgstr "<b></b>"
-#~ msgid "Attach tag:"
-#~ msgstr "Pripenjanje oznake:"
 #~ msgid "CD"
 #~ msgstr "CD"
 #~ msgid "Camera Selection"
diff --git a/po/sv.po b/po/sv.po
index d5e68b5..de6c14c 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: f-spot\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 19:01+0100\n"
-"PO-Revision-Date: 2010-03-02 19:01+0100\n"
+"POT-Creation-Date: 2010-08-06 14:55+0200\n"
+"PO-Revision-Date: 2010-08-06 15:12+0100\n"
 "Last-Translator: Daniel Nylander <po at danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
 "MIME-Version: 1.0\n"
@@ -17,64 +17,91 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
+#: ../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 "Fotohanteraren F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Organisera, njut av, och dela med dig av dina foton"
+
+#: ../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 "Fotohanterare"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Importera till F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "Fotovisaren F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Fotovisare"
+
 #: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
 msgid "_CD..."
 msgstr "_Cd..."
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
+#: ../extensions/Exporters/CDExport/CDExport.cs:155
 msgid "Transferring Pictures"
 msgstr "Överför bilder"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:218
+#: ../extensions/Exporters/CDExport/CDExport.cs:208
 #, csharp-format
 msgid "Transferring picture \"{0}\" To CD"
 msgstr "Överför bilden \"{0}\" till cd"
 
 #. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../extensions/Exporters/CDExport/CDExport.cs:210
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:360
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:209
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:773
+#: ../src/MainWindow.cs:645
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
 #, csharp-format
 msgid "{0} of {1}"
 msgstr "{0} av {1}"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
+#: ../extensions/Exporters/CDExport/CDExport.cs:223
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:378
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:390
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:696
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
 msgid "Done Sending Photos"
 msgstr "Färdig med att skicka foton"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
+#: ../extensions/Exporters/CDExport/CDExport.cs:225
 msgid "Transfer Complete"
 msgstr "Överföringen är färdig"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
+#: ../extensions/Exporters/CDExport/CDExport.cs:232
 msgid "Error While Transferring"
 msgstr "Fel under överföring"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/CDExport/CDExport.cs:240
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:266
 msgid "Error Transferring"
 msgstr "Fel vid överföring"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:263
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
 msgid "copying..."
 msgstr "kopierar..."
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:1
-msgid "<b><i>There is some previously scheduled items to write</i></b>"
+msgid "<b><i>There are some previously scheduled items to write</i></b>"
 msgstr "<b><i>Det finns några tidigare schemalagda objekt att skriva</i></b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:2
@@ -82,42 +109,34 @@ msgid "<b>Photos to Burn</b>"
 msgstr "<b>Foton att bränna</b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
-msgid "Autorotate"
-msgstr "Rotera automatiskt"
-
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 msgid "Create CD"
 msgstr "Skapa cd"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 #: ../src/Widgets/InfoBox.cs:221
 msgid "Size"
 msgstr "Storlek"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
 msgid "Size of the exported selection:"
 msgstr "Storlek på exporterad markering:"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
 msgid "_Browse Previously Scheduled Files"
 msgstr "_Bläddra i tidigare schemalagda filer"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/ui/single_view.ui.h:12
 msgid "_Export"
 msgstr "_Exportera"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:9
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
 msgid "_Write only these photos to CD"
 msgstr "_Skriv endast dessa foton till cd"
 
@@ -125,11 +144,11 @@ msgstr "_Skriv endast dessa foton till cd"
 msgid "F_acebook..."
 msgstr "F_acebook..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
 msgid "Waiting for authorization"
 msgstr "Väntar på behörighet"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:101
 msgid ""
 "F-Spot will now launch your browser so that you can enable the permission you just selected.\n"
 "\n"
@@ -139,36 +158,28 @@ msgstr ""
 "\n"
 "När du blir dirigerad av Facebook till att återgå till detta program så klicka på \"Ok\" nedan."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
 msgid "Too many images to export"
 msgstr "För många bilder att exportera"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:283
 #, csharp-format
 msgid "Facebook only permits {0} photographs per album.  Please refine your selection and try again."
 msgstr "Facebook tillåter endast {0} fotografier per album.  Definiera om ditt val och försök igen."
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Skickar upp bilder"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
 msgid "Album must have a name"
 msgstr "Albumet måste ha ett namn"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:299
 msgid "Please name your album or choose an existing album."
 msgstr "Namnge ditt album eller välj ett befintligt album."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
 msgid "Creating a new album failed"
 msgstr "Skapandet av nytt album misslyckades"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:314
 #, csharp-format
 msgid ""
 "An error occurred creating a new album.\n"
@@ -179,45 +190,53 @@ msgstr ""
 "\n"
 "{0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:327
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:486
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:726
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:593
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:515
+msgid "Uploading Pictures"
+msgstr "Skickar upp bilder"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:355
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:652
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:554
 #, csharp-format
 msgid "Uploading picture \"{0}\" ({1} of {2})"
 msgstr "Skickar upp bilden \"{0}\" ({1} av {2})"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
 #, csharp-format
 msgid "Error Uploading To Facebook: {0}"
 msgstr "Fel vid sändning till Facebook: {0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:215
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:789
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:685
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:585
 #: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
 msgid "Error"
 msgstr "Fel"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:800
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:698
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:598
 msgid "Upload Complete"
 msgstr "Sändning färdig"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:383
 msgid "Visit F-Spot group on Facebook"
 msgstr "Besök F-Spot-gruppen på Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
 msgid "Waiting for authentication"
 msgstr "Väntar på autentisering"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:214
 msgid ""
 "F-Spot will now launch your browser so that you can log into Facebook.\n"
 "\n"
@@ -227,49 +246,49 @@ msgstr ""
 "\n"
 "När du blir dirigerad av Facebook till att återgå till detta program så tryck på \"Ok\" nedan.  F-Spot kommer att mellanlagra din session i gnome-keyring, om möjligt, och återanvända den vid framtida exporter till Facebook."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:219
 msgid "Authenticating..."
 msgstr "Autentiserar..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
 msgid "Error logging into Facebook"
 msgstr "Fel vid inloggning till Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:230
 msgid "There was a problem logging into Facebook.  Check your credentials and try again."
 msgstr "Det inträffade ett fel vid inloggning mot Facebook. Kontrollera dina inloggningsuppgifter och försök igen."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:239
 msgid "Authorizing Session"
 msgstr "Ger behörighet till session"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:248
 msgid "Session established, fetching user info..."
 msgstr "Session etablerad, hämtar användarinformation..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:254
 msgid "Session established, fetching friend list..."
 msgstr "Session etablerad, hämtar lista över vänner..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:264
 msgid "Session established, fetching friend details..."
 msgstr "Session etablerad, hämtar detaljer om vänner..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:276
 msgid "Session established, fetching photo albums..."
 msgstr "Session etablerad, hämtar fotoalbum..."
 
 #. Note for translators: {0} and {1} are respectively firstname and surname of the user
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:286
 #, csharp-format
 msgid "{0} {1} is logged into Facebook"
 msgstr "{0} {1} är inloggad på Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
 msgid "Facebook Connection Error"
 msgstr "Anslutningsfel till Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:296
 #, csharp-format
 msgid ""
 "There was an error when downloading your information from Facebook.\n"
@@ -280,7 +299,7 @@ msgstr ""
 "\n"
 "Facebook svarade: {0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:325
 msgid "You are not logged in."
 msgstr "Du är inte inloggad."
 
@@ -309,7 +328,6 @@ msgid "In this photo"
 msgstr "I detta foto"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:7
-#: ../src/XmpTagsImporter.cs:90
 msgid "Location"
 msgstr "Plats"
 
@@ -358,96 +376,94 @@ msgstr "_Flickr..."
 msgid "_Zooomr..."
 msgstr "_Zooomr..."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:107
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
 msgid "Authorize"
 msgstr "Ge behörighet"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
 #, csharp-format
 msgid "Return to this window after you have finished the authorization process on {0} and click the \"Complete Authorization\" button below"
 msgstr "Återvänd till detta fönster efter att du har färdigställt behörighetsprocessen för {0} och klicka på \"Färdigställ behörighet\"-knappen nedan"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:114
 msgid "Complete Authorization"
 msgstr "Färdigställ behörighet"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
 #, csharp-format
 msgid "Logging into {0}"
 msgstr "Loggar in på {0}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:120
 msgid "Checking credentials..."
 msgstr "Kontrollerar behörighet..."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:127
 #, csharp-format
 msgid "Welcome {0} you are connected to {1}"
 msgstr "Välkommen {0}, du är ansluten till {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:130
 #, csharp-format
 msgid "Sign in as a different user"
 msgstr "Logga in som annan användare"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:135
 #, csharp-format
 msgid "Used {0} of your allowed {1} monthly quota"
 msgstr "Använder {0} av din tillåtna månadskvota på {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:239
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:308
 msgid "Unable to log on"
 msgstr "Kunde inte logga in"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:328
 #, csharp-format
 msgid "Waiting for response {0} of {1}"
 msgstr "Väntar på svar {0} av {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:355
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:769
 #, csharp-format
 msgid "Uploading picture \"{0}\""
 msgstr "Skickar upp bilden \"{0}\""
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:378
 #, csharp-format
 msgid "Error Uploading To {0}: {1}"
 msgstr "Fel vid sändning till {0}: {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:465
 msgid "Unable to log on."
 msgstr "Kunde inte logga in."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:466
 #, 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 "F-Spot kunde inte logga in på {0}. Kontrollera att du har angivit rätt inloggningsuppgifter med hjälp av webbläsargränssnittet."
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
 msgid "<b>Account</b>"
 msgstr "<b>Konto</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14
 #: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/ui/mail_dialog.ui.h:6
 msgid "<b>Photos</b>"
 msgstr "<b>Foton</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
 msgid "<b>Style</b>"
 msgstr "<b>Stil</b>"
 
@@ -456,11 +472,10 @@ msgid "<b>Viewing permissions</b>"
 msgstr "<b>Visningsrättigheter</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
 msgid "Export"
 msgstr "Exportera"
 
@@ -497,17 +512,15 @@ msgid "Visible to Friends"
 msgstr "Synlig för vänner"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
 msgid "_Export tags"
 msgstr "_Exportera taggar"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:18
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
 msgid "_Resize to: "
 msgstr "_Skala om bilder till: "
 
@@ -516,11 +529,10 @@ msgid "_View photos in browser when done uploading"
 msgstr "_Visa foton i webbläsaren när sändningen är färdig"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
 msgid "pixels"
 msgstr "bildpunkter"
 
@@ -528,144 +540,160 @@ msgstr "bildpunkter"
 msgid "F_older..."
 msgstr "Ma_pp..."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:117
 msgid "Select Export Folder"
 msgstr "Välj exportmapp"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:169
 msgid "Building Gallery"
 msgstr "Bygger bildgalleri"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:206
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "Exporterar \"{0}\"..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:213
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Fel vid kopiering av \"{0}\" till Gallery:{2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:239
 #, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Fel vid sändning av bilden \"{0}\" till Gallery:{2}{1}"
+msgid "Transferring to \"{0}\""
+msgstr "Överför till \"{0}\""
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Fel: Fel vid överföring; Avbryter"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:240
+msgid "Transferring..."
+msgstr "Överför..."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Fel: Filen finns redan; Avbryter"
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+msgid "Export Complete."
+msgstr "Exporten är färdig."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:247
+msgid "Exporting Photos Completed."
+msgstr "Exportering av foton är färdig."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:312
+msgid "Exporting Photos"
+msgstr "Exporterar foton"
 
 #. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:716
 msgid "Light"
 msgstr "Ljus"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
 msgid "Dark"
 msgstr "Mörk"
 
 #. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:897
 msgid "Prev"
 msgstr "Föregående"
 
 # hoppas att detta är substantivet
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:899
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
 msgid "Index"
 msgstr "Index"
 
 #. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:902
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1074
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1114
+#: ../src/MainWindow.cs:349
 #: ../src/Widgets/Sidebar.cs:56
 msgid "Tags"
 msgstr "Taggar"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:905
 #: ../src/ItemAction.cs:102
 msgid "Next"
 msgstr "Nästa"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1009
 msgid "Gallery generated by"
 msgstr "Galleri genererat av"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1049
 msgid "Show Styles"
 msgstr "Visa stilar"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
 msgid "Hide Styles"
 msgstr "Dölj stilar"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1085
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1086
 #: ../src/ui/main_window.ui.h:24
 msgid "Tags: "
 msgstr "Taggar: "
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1350
 msgid "Page:"
 msgstr "Sida:"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
-msgid "\n"
-msgstr "\n"
-
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
 msgid "<b>Destination</b>"
 msgstr "<b>Mål</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:2
 msgid "<b>Export Method</b>"
 msgstr "<b>Exportmetod</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
 msgid "Create _gallery using \"Original\""
 msgstr "Skapa _galleri med \"Original\""
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
 msgid "Create standalone _web gallery"
 msgstr "Skapa fristående _webbgalleri"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
 msgid "D_escription:"
 msgstr "B_eskrivning:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
 msgid "Export _tags"
 msgstr "Exportera _taggar"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
 msgid "Export tag _icons"
 msgstr "Exportera tagg_ikoner"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
 msgid "Folder Export"
 msgstr "Mappexport"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
 msgid "G_allery Name:"
 msgstr "G_allerinamn:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
 msgid "Open _destination when done exporting"
 msgstr "Öppna _mål när exporteringen är färdig"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
 msgid "_Folder:"
 msgstr "_Mapp:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:19
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
 msgid "_Save the files only"
 msgstr "_Spara endast filerna"
 
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Ohanterat undantag"
+
 #: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
 msgid "Web _Gallery..."
 msgstr "Webb_galleri..."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:54
 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"
@@ -673,45 +701,45 @@ msgstr ""
 "Kan inte ansluta till ett Gallery för vilket versionen är okänd.\n"
 "Kontrollera att du har insticksmodulen Remote 1.0.8 eller senare"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:391
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
 msgid "Invalid URL"
 msgstr "Ogiltig URL"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:393
 msgid "The gallery URL entry does not appear to be a valid URL"
 msgstr "Galleriets URL-post verkar inte vara en giltig URL"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:402
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:440
-msgid "Error while connecting to Gallery"
-msgstr "Fel vid anslutning till Gallery"
-
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
+msgid "Error while connecting to Gallery"
+msgstr "Fel vid anslutning till Gallery"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:404
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:431
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:442
 #, csharp-format
 msgid "The following error was encountered while attempting to log in: {0}"
 msgstr "Följande fel påträffades vid försök att logga in: {0}"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:417
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
 msgid "A Gallery with this name already exists"
 msgstr "Ett galleri med det här namnet finns redan"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:419
 #, csharp-format
 msgid "There is already a Gallery with the same name in your registered Galleries. Please choose a unique name."
 msgstr "Det finns redan ett galleri med samma namn bland dina registrerade gallerier. Välj ett unikt namn."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:529
 msgid "(TopLevel)"
 msgstr "(Toppnivå)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:590
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
 msgid "Invalid Gallery name"
 msgstr "Ogiltigt gallerinamn"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:592
 msgid ""
 "The gallery name contains invalid characters.\n"
 "Only letters, numbers, - and _ are allowed"
@@ -719,44 +747,42 @@ msgstr ""
 "Gallerinamnet innehåller ogiltiga tecken.\n"
 "Endast bokstäver, siffror, - och _ är tillåtna"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:796
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:788
 #, csharp-format
 msgid "Error uploading picture \"{0}\" to Gallery: {1}"
 msgstr "Fel vid sändning av bilden \"{0}\" till Gallery: {1}"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:816
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:714
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:614
 msgid "(No Gallery)"
 msgstr "(Inget galleri)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:908
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:836
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:710
 msgid "(Not Connected)"
 msgstr "(Inte ansluten)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:909
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:837
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:711
 msgid "(No Albums)"
 msgstr "(Inga album)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:961
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:902
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:752
 msgid "No account selected"
 msgstr "Inget konto valt"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
 msgid "<b>Album</b>"
 msgstr "<b>Album</b>"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
 msgid "<b>Gallery</b>"
 msgstr "<b>Bildgalleri</b>"
 
@@ -765,87 +791,86 @@ msgstr "<b>Bildgalleri</b>"
 msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
 msgstr "<span weight='bold' size='larger'>Fel vid anslutning till bildgalleri</span>\n"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
 msgid "Export _titles and comments"
 msgstr "Exportera _titlar och kommentarer"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
 msgid "Open _album in browser when done uploading"
 msgstr "Öppna _album i webbläsaren när sändningen är färdig"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
 msgid "Please verify that the settings for this gallery are correct."
 msgstr "Kontrollera att inställningarna för detta bildgalleri är korrekta."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
 msgid "U_RL:"
 msgstr "U_RL:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
 msgid "_Album Name:"
 msgstr "_Albumnamn:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
 msgid "_Description:"
 msgstr "_Beskrivning:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
 msgid "_Export to Album:"
 msgstr "_Exportera till album:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
 msgid "_Gallery Name:"
 msgstr "_Gallerinamn:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
 msgid "_Gallery:"
 msgstr "_Bildgalleri:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
 msgid "_Parent Album:"
 msgstr "_Föräldraalbum:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
 msgid "_Password:"
 msgstr "_Lösenord:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
 msgid "_Title:"
 msgstr "_Titel:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
 msgid "_Username:"
 msgstr "_Användarnamn:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:363
 msgid "Error reading server response"
 msgstr "Fel vid läsning av serversvar"
 
 #. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:375
 msgid "Server returned response without Gallery content"
 msgstr "Servern returnerade svar utan Gallery-innehåll"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
 msgid "Error while creating new album"
 msgstr "Fel vid skapandet av nytt album"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:713
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to perform the requested operation:\n"
@@ -858,37 +883,37 @@ msgstr ""
 msgid "_PicasaWeb..."
 msgstr "_PicasaWeb..."
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:444
 msgid "Error while creating Album"
 msgstr "Fel vid skapandet av album"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:445
 #, csharp-format
 msgid "The following error was encountered while attempting to create an album: {0}"
 msgstr "Följande fel påträffades vid försök att skapa ett album: {0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:615
 #, csharp-format
 msgid "{0} Sent"
 msgstr "{0} skickat"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:617
 #, csharp-format
 msgid "{0} of approx. {1}"
 msgstr "{0} av ungefär {1}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:683
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:583
 #, csharp-format
 msgid "Error Uploading To Gallery: {0}"
 msgstr "Fel vid sändning till galleri: {0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:765
 #, csharp-format
 msgid "Available space: {0}, {1}% used out of {2}"
 msgstr "Tillgängligt utrymme: {0}, {1}% används av {2}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:878
 #, csharp-format
 msgid ""
 "The selected album has a limit of {0} pictures,\n"
@@ -916,20 +941,16 @@ msgstr ""
 "<i>Bokstäverna är inte skiftlägeskänsliga</i>"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
 msgid "Public Album"
 msgstr "Publikt album"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
 msgid "_Album Title:"
 msgstr "_Albumtitel:"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
-msgid "_Autorotate"
-msgstr "Rotera _automatiskt"
-
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
 msgid "_Captcha:"
 msgstr "_Robotfälla:"
 
@@ -941,7 +962,7 @@ msgstr "_SmugMug..."
 msgid "<b>SmugMug Export</b>"
 msgstr "<b>SmugMug-exportering</b>"
 
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
 msgid "_Account:"
 msgstr "_Konto:"
 
@@ -999,30 +1020,26 @@ msgid "_Attach to exported photos:"
 msgstr "F_äst till exporterade foton:"
 
 #: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
-msgid "<b>{0}</b>."
-msgstr "<b>{0}</b>."
-
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "A trust error occured while attempting to access"
 msgstr "Ett fel inträffade vid försök att komma åt"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "Abort this session"
 msgstr "Avbryt denna session"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
 msgid "Always trust this site's certificate"
 msgstr "Lita alltid på certifikatet för denna webbplats "
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
 msgid "Do you wish to:"
 msgstr "Vill du:"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
 msgid "Trust Error"
 msgstr "Tillitsfel"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
 msgid "Trust the site's certificate this once"
 msgstr "Lita tillfälligt på certifikatet för denna webbplats"
 
@@ -1030,24 +1047,24 @@ msgstr "Lita tillfälligt på certifikatet för denna webbplats"
 msgid "Compressed fil_e..."
 msgstr "Komprimerad fi_l..."
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../src/Widgets/EditorPage.cs:199
 msgid "No selection available"
 msgstr "Ingen markering tillgänglig"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:49
 msgid "This tool requires an active selection. Please select one or more pictures and try again"
 msgstr "Detta verktyg kräver en aktiv markering. Markera en eller flera bilder och försök igen"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:64
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:65
 msgid "Select export folder"
 msgstr "Välj exportmapp"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:102
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:103
 msgid "Exporting files"
 msgstr "Exporterar filer"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:109
 #, csharp-format
 msgid "Preparing photo \"{0}\""
 msgstr "Förbereder fotot \"{0}\""
@@ -1068,32 +1085,32 @@ msgstr "_Plats:"
 msgid "_Scale:"
 msgstr "_Skala:"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:53
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "Leta efter dubletter..."
+
+#: ../extensions/Tools/HashJob/HashJob.cs:54
 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 "F-Spot behöver analysera din bildsamling för att kunna identifiera dubletter av bilder som du importerade före version 0.5.0. Detta sker inte som standard eftersom det är tidskrävande. Du kan starta eller pausa denna uppdateringsprocess genom denna dialogruta."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:59
+#: ../extensions/Tools/HashJob/HashJob.cs:60
 #, csharp-format
 msgid "You currently have {0} photos needing md5 calculation, and {1} pending jobs"
 msgstr "Du har för närvarande {0} foton som behöver md5-beräknas och {1} väntande jobb"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:75
+#: ../extensions/Tools/HashJob/HashJob.cs:76
 #: ../src/ui/main_window.ui.h:37
 msgid "_Close"
 msgstr "S_täng"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:102
+#: ../extensions/Tools/HashJob/HashJob.cs:103
 msgid "Processing images..."
 msgstr "Behandlar bilder..."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:108
+#: ../extensions/Tools/HashJob/HashJob.cs:109
 msgid "Stopped"
 msgstr "Stoppad"
 
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Check for Duplicates..."
-msgstr "Leta efter dubletter..."
-
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
 msgid "F-Spot Gallery"
 msgstr "F-Spot-galleri"
@@ -1126,6 +1143,19 @@ msgstr "Markerade"
 msgid "Live Web Gallery"
 msgstr "Levande webbgalleri"
 
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:90
+msgid "none"
+msgstr "inga"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:93
+#, csharp-format
+msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
+msgstr " Galleri: {0},  Foton: {1},  Senaste klient: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:157
+msgid "Gallery is inactive"
+msgstr "Galleriet är inaktivt"
+
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
 msgid ""
 "<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1186,28 +1216,15 @@ msgstr "Dela ut:"
 msgid "Views:"
 msgstr "Visningar:"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "inga"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
-msgstr " Galleri: {0},  Foton: {1},  Senaste klient: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "Galleriet är inaktivt"
-
 #: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
 msgid "Merge Db"
 msgstr "Sammanfoga databas"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:73
+#: ../extensions/Tools/MergeDb/MergeDb.cs:74
 msgid "Error opening the selected file"
 msgstr "Fel vid öppnadet av markerad fil"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:74
+#: ../extensions/Tools/MergeDb/MergeDb.cs:75
 #, csharp-format
 msgid ""
 "The file you selected is not a valid or supported database.\n"
@@ -1271,12 +1288,11 @@ msgid "New Rolls Only"
 msgstr "Endast nya rullar"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
 msgid "Skip"
 msgstr "Hoppa över"
 
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
 #, csharp-format
 msgid ""
 "<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1290,7 +1306,7 @@ msgid "Configure Screensaver"
 msgstr "Konfigurera skärmsläckare"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
-#: ../src/UI.Dialog/DateRangeDialog.cs:129
+#: ../src/UI.Dialog/DateRangeDialog.cs:120
 msgid "All Images"
 msgstr "Alla bilder"
 
@@ -1314,116 +1330,192 @@ msgstr "Använd F-Spot som skärmsläckare"
 msgid "Screensaver Configuration"
 msgstr "Konfiguration för skärmsläckare"
 
-#: ../f-spot.desktop.in.in.h:1
-#: ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1
-#: ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Visning av genomskinliga delar."
 
-#: ../f-spot.desktop.in.in.h:2
-#: ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "Fotohanteraren F-Spot"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "Aktivera detta för att tillåta interpolation på zoomade bilder."
 
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Organisera, njut av, och dela med dig av dina foton"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Höjd för importdialogen."
 
-#: ../f-spot.desktop.in.in.h:4
-#: ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Fotohanterare"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Höjd för huvudfönstret."
 
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "Importera till F-Spot"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Höjd för fotovisningsfönstret."
 
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "Fotovisaren F-Spot"
+#: ../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 "Om alternativet \"transparency\" är inställt kommer färgen som anges i detta alternativ att användas som den genomskinliga färgen när bilder visas."
 
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Fotovisare"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "Interpolera bild vid zoomning"
 
-#: ../lib/libfspot/f-jpeg-utils.c:441
-#: ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "Filen hittades inte"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Maximerar huvudfönstret."
 
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Okänd transformeringstyp %d"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Maximerar fotovisningsfönstret."
 
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Åtgärden misslyckades"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "Sökväg till anpassad gtkrc för temaanpassad F-Spot."
 
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Förhandsvisning"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Visa datum i miniatyrbildsvisning."
 
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Sökväg"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Visa betyg i miniatyrbildsvisning."
 
-#: ../src/CameraFileSelectionDialog.cs:80
-#: ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "Fil"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Visa taggar i miniatyrbildsvisning."
 
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Välj tagg"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Visa filnamnet i visningsfönstret."
 
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Hämtar förhandsgranskningar"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Visa filmremsa i huvudfönstret."
 
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Hämtar förhandsgranskning av {0}"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Visa sidopanel i huvudfönstret."
 
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Kopierar fil {0} av {1}"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Visa tidslinjen i huvudfönstret."
 
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Fel vid filöverföring"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Visa verktygsraden i huvudfönstret."
 
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "Hämtningen färdig"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "Visa verktygsraden i fotovisningsfönstret."
 
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Kopieringen färdig"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Storlek för taggikonerna som visas i sidopanelen."
 
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Överför \"{0}\" från kamera"
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "X-positionen att använda för huvudfönstret."
 
-#: ../src/CameraSelectionDialog.cs:29
-#: ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "Kamera"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "X-positionen att använda för fotovisningsfönstret."
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "Y-positionen att använda för huvudfönstret."
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "Y-positionen att använda för fotovisningsfönstret."
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "Färgen att använda för genomskinliga delar."
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "Höjddimensionen att använda för importdialogen."
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "Höjddimensionen att använda för huvudfönstret."
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "Höjddimensionen att använda för fotovisningsfönstret."
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "Orienteringen för filmremsan, om den visas."
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "Orientering för filmremsa."
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "Storlek (bredd) för sidopanelen i huvudfönstret."
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "Storlek för sidopanelen i huvudfönstret."
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "Breddimensionen att använda för importdialogen."
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "Breddimensionen att använda för huvudfönstret."
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "Breddimensionen att använda för fotovisningsfönstret."
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "Använd filnamnet för det aktuella fotot som titel i visningsfönstret."
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Bredd för importdialogen."
 
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Port"
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Bredd för huvudfönstret."
 
-#: ../src/Core/App.cs:278
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Bredd för fotovisningsfönstret."
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "Bredd för förhandsvisningspanelen i importdialogen."
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "X-position för huvudfönstret."
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "X-position för fotovisningsfönstret."
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Y-position för huvudfönstret."
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Y-position för fotovisningsfönstret."
+
+#: ../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 "<small><i>Du kan välja hur genomskinliga delar i bilder ska visas. Det här alternativet har ingen effekt på foton, men att ställa in det här som rutmönster eller anpassad färg kan vara användbar vid visning av ikoner eller andra bilder med genomskinliga delar.</i></small>"
+
+#: ../src/Core/App.cs:290
 #, csharp-format
 msgid "No photos matching {0} found"
 msgstr "Inga foton som matchar {0} hittades"
 
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:291
 #, csharp-format
 msgid ""
 "The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1434,11 +1526,11 @@ msgstr ""
 "Prova att sätta taggen på några foton, eller välja en\n"
 "annan tagg i F-Spots inställningsdialog."
 
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:295
 msgid "Search returned no results"
 msgstr "Sökningen gav inga resultat"
 
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:296
 msgid ""
 "The tag F-Spot is looking for does not exist. Try\n"
 "selecting a different tag in the F-Spot preference\n"
@@ -1448,40 +1540,27 @@ msgstr ""
 "att välja en annan tagg i F-Spots inställningsdialog."
 
 #. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:405
 msgid "Reparented"
 msgstr "Adopterad"
 
-# Reparent betyder att bilden dupliceras
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Adopterad ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:422
 #, csharp-format
 msgid "Modified"
 msgid_plural "Modified ({0})"
 msgstr[0] "Ändrad"
 msgstr[1] "Ändrad ({0})"
 
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1}"
 msgstr "Ändrad i {1}"
 
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1} ({0})"
 msgstr "Ändrad i {1} ({0})"
 
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671
-#: ../src/f-spot.glade.h:62
-msgid "Original"
-msgstr "Original"
-
 #: ../src/Editors/AutoStretchEditor.cs:17
 msgid "Auto Color"
 msgstr "Automatiska färger"
@@ -1494,43 +1573,43 @@ msgstr "Justera färger"
 msgid "Adjust"
 msgstr "Justera"
 
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
 msgid "4 x 3 (Book)"
 msgstr "4 x 3 (Bok)"
 
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
 msgid "4 x 6 (Postcard)"
 msgstr "4 x 6 (Vykort)"
 
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
 msgid "5 x 7 (L, 2L)"
 msgstr "5 x 7 (L, 2L)"
 
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
 msgid "8 x 10"
 msgstr "8 x 10"
 
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
 msgid "Square"
 msgstr "Ruta"
 
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
 msgid "Crop"
 msgstr "Beskär"
 
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
 msgid "Select the area that needs cropping."
 msgstr "Välj området som behöver beskäring."
 
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
 msgid "No Constraint"
 msgstr "Ingen begränsning"
 
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
 msgid "Same as photo"
 msgstr "Samma som foto"
 
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
 msgid "Custom Ratios..."
 msgstr "Anpassade förhållanden..."
 
@@ -1562,25 +1641,6 @@ msgstr "Mjuk fokus"
 msgid "Straighten"
 msgstr "Räta ut"
 
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "Importeringsfel"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Fel vid import av {0}{2}{2}{1}"
-
-#: ../src/Filters/ResizeFilter.cs:70
-#: ../src/Filters/SharpFilter.cs:52
-#, csharp-format
-msgid "No way to save files of type \"{0}\""
-msgstr "Inget sätt att spara filer av typen \"{0}\""
-
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Ohanterat undantag"
-
 #: ../src/FSpot.addin.xml.h:1
 msgid "Copy Photo"
 msgstr "Kopiera foto"
@@ -1599,15 +1659,13 @@ msgid "Rem_ove Tag"
 msgstr "Ta b_ort tagg"
 
 #: ../src/FSpot.addin.xml.h:5
-#: ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:425
+#: ../src/SingleView.cs:427
 #: ../src/ui/main_window.ui.h:16
 msgid "Rotate _Left"
 msgstr "Rotera åt _vänster"
 
 #: ../src/FSpot.addin.xml.h:6
-#: ../src/f-spot.glade.h:70
-#: ../src/SingleView.cs:426
+#: ../src/SingleView.cs:428
 #: ../src/ui/main_window.ui.h:17
 msgid "Rotate _Right"
 msgstr "Rotera åt _höger"
@@ -1617,465 +1675,72 @@ msgid "Tools"
 msgstr "Verktyg"
 
 #: ../src/FSpot.addin.xml.h:8
-#: ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Fäst tagg"
-
-#: ../src/FSpot.addin.xml.h:9
 #: ../src/ui/main_window.ui.h:41
 msgid "_Delete From Drive"
 msgstr "Ta bort från _disk"
 
 # SUN CHANGED MESSAGE
-#: ../src/FSpot.addin.xml.h:10
-#: ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9
+#: ../src/ui/main_window.ui.h:60
 msgid "_Remove From Catalog"
 msgstr "Ta bort från _katalog"
 
 #: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
-msgid "1024 px"
-msgstr "1024 bildpunkter"
-
-#: ../src/f-spot.glade.h:3
-msgid "320 px"
-msgstr "320 bildpunkter"
-
-#: ../src/f-spot.glade.h:4
-msgid "480 px"
-msgstr "480 bildpunkter"
-
-#: ../src/f-spot.glade.h:5
-msgid "640 px"
-msgstr "640 bildpunkter"
-
-#: ../src/f-spot.glade.h:6
-msgid "800 px"
-msgstr "800 bildpunkter"
-
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
 msgid "<b>Co_rrections</b>"
 msgstr "<b>Färgko_rrektion</b>"
 
-#: ../src/f-spot.glade.h:13
-msgid "<b>Image Interpolation</b>"
-msgstr "<b>Bildinterpolering</b>"
-
-#: ../src/f-spot.glade.h:15
-msgid "<b>Size</b>"
-msgstr "<b>Storlek</b>"
-
-#: ../src/f-spot.glade.h:17
-msgid "<b>Summary</b>"
-msgstr "<b>Sammandrag</b>"
-
-#: ../src/f-spot.glade.h:18
-msgid "<b>Transparent Parts</b>"
-msgstr "<b>Transparenta delar</b>"
-
-#: ../src/f-spot.glade.h:19
-msgid "<b>View all pictures imported</b>"
-msgstr "<b>Visa alla importerade bilder</b>"
-
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:2
 msgid "<b>_White Balance</b>"
 msgstr "<b>_Vitbalans</b>"
 
-#: ../src/f-spot.glade.h:21
-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>Aktivera detta för att tillåta interpolering på zoomade bilder. Du bör inte inaktivera detta för att visa foton, men att inaktivera interpoleringen kan vara användbart vid ikondesign.</i></small>"
-
-#: ../src/f-spot.glade.h:22
-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>Du kan välja hur transparenta delar i bilder ska visas. Det här alternativet har ingen effekt på foton, men att ställa in det här som rutmönster eller anpassad färg kan vara användbar vid visning av ikoner eller andra bilder med transparenta delar.</i></small>"
-
-#: ../src/f-spot.glade.h:23
-msgid "As _background"
-msgstr "Som _bakgrund"
-
-#: ../src/f-spot.glade.h:24
-msgid "As _custom color: "
-msgstr "Som an_passad färg: "
-
-#: ../src/f-spot.glade.h:25
-msgid "As check _pattern"
-msgstr "Som rutmö_nster"
-
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Fäst taggar:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Fäst tagg:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "Cd"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:3
 msgid "C_ontrast:"
 msgstr "_Kontrast:"
 
-#: ../src/f-spot.glade.h:31
-msgid "C_reate"
-msgstr "S_kapa"
-
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "Val av kamera"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "Kopiera filer till fotomappen"
-
-#: ../src/f-spot.glade.h:34
-msgid "Create Mail"
-msgstr "Skapa e-post"
-
-#: ../src/f-spot.glade.h:35
-msgid "Create _icon for this tag when first used"
-msgstr "Skapa _ikon för denna tagg när den först används"
-
-#: ../src/f-spot.glade.h:36
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr "Skapa ett e-postmeddelande med de markerade fotona (möjligen storleksändrade) som bilagor"
-
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr "Detektera dubletter"
-
-#: ../src/f-spot.glade.h:38
-msgid "Display File _Names"
-msgstr "Visa fil_namn"
-
-#: ../src/f-spot.glade.h:39
-msgid "Display only those photos that were imported in specified Rolls."
-msgstr "Visa endast de foton som blev importerade i angivna rullar."
-
-#: ../src/f-spot.glade.h:40
-msgid "Do not send a mail"
-msgstr "Skicka inte e-post"
-
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "E-_post:"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "E_xportera titlar och kommentarer"
-
-#: ../src/f-spot.glade.h:43
-msgid "Estimated new size"
-msgstr "Uppskattad ny storlek"
-
-#: ../src/f-spot.glade.h:45
-msgid "Extra large"
-msgstr "Extra stor"
-
-#: ../src/f-spot.glade.h:46
-msgid "F-Spot View"
-msgstr "F-Spot Bildvisning"
-
-#: ../src/f-spot.glade.h:48
-msgid "Filter on selected rolls"
-msgstr "Filtrera på markerade rullar"
-
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "G_alleri:"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "Galleri"
-
-#: ../src/f-spot.glade.h:51
-#: ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "Importera"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "Importera från:"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "Inkludera underkataloger"
-
-#: ../src/f-spot.glade.h:55
-msgid "Large"
-msgstr "Stor"
-
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:4
 msgid "Manage your custom selection ratios"
 msgstr "Hantera dina anpassade markeringsförhållanden"
 
-#: ../src/f-spot.glade.h:57
-msgid "Medium"
-msgstr "Mellan"
-
-#: ../src/f-spot.glade.h:59
-msgid "Number of photos in selected rolls:"
-msgstr "Antal foton i markerade rullar:"
-
-#: ../src/f-spot.glade.h:60
-msgid "Number of pictures"
-msgstr "Antal bilder"
-
-#: ../src/f-spot.glade.h:61
-msgid "Open _Folder..."
-msgstr "Öppna _mapp..."
-
-#: ../src/f-spot.glade.h:63
-msgid "Original size (possible very large file size)"
-msgstr "Ursprunglig storlek (möjligen mycket stor filstorlek)"
-
-#: ../src/f-spot.glade.h:64
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
-msgid "P_arent Tag:"
-msgstr "_Föräldertagg:"
-
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "Paus"
-
-#: ../src/f-spot.glade.h:66
-msgid "Preferences"
-msgstr "Inställningar"
-
-#: ../src/f-spot.glade.h:67
-#: ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Föregående"
-
-#: ../src/f-spot.glade.h:68
-msgid "Repair"
-msgstr "Reparera"
-
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "Välj foton att kopiera från kameran"
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:5
+#: ../src/ui/tag_selection_dialog.ui.h:1
 msgid "Select a Tag..."
 msgstr "Markera en tagg..."
 
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr "Välj kameran som du vill överföra bilder från"
-
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "Vald kamera: "
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:6
 msgid "Selection Constraints"
 msgstr "Markeringskriterier"
 
-#: ../src/f-spot.glade.h:76
-#: ../src/ui/main_window.ui.h:21
-msgid "Set as _Background"
-msgstr "Ställ in som _bakgrund"
-
-#: ../src/f-spot.glade.h:77
-msgid "Show all photos."
-msgstr "Visa alla foton."
-
-#: ../src/f-spot.glade.h:78
-msgid "Show or hide the side pane"
-msgstr "Visa eller dölj sidopanelen"
-
-#: ../src/f-spot.glade.h:79
-msgid "Show or hide the toolbar"
-msgstr "Visa eller dölj verktygsraden"
-
-#: ../src/f-spot.glade.h:80
-msgid "Side _pane"
-msgstr "Sido_panel"
-
-#: ../src/f-spot.glade.h:81
-msgid "Small"
-msgstr "Liten"
-
-#: ../src/f-spot.glade.h:82
-msgid "Specify if an original size picture should be rotated or not. Smaller sizes are automatically rotated."
-msgstr "Ange om en bild av ursprunglig storlek ska roteras eller inte. Mindre storlekar roteras automatiskt."
-
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "Rensa bildens _metadata"
-
 #. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:8
 msgid "Te_mp:"
 msgstr "Te_mp:"
 
-#: ../src/f-spot.glade.h:86
-msgid "Tiny"
-msgstr "Mycket liten"
-
-#: ../src/f-spot.glade.h:87
-msgid "Total original size"
-msgstr "Total ursprunglig storlek"
-
-#: ../src/f-spot.glade.h:88
-#: ../src/ui/main_window.ui.h:28
-msgid "Zoom _in"
-msgstr "Zooma _in"
-
-#: ../src/f-spot.glade.h:89
-#: ../src/ui/main_window.ui.h:29
-msgid "Zoom _out"
-msgstr "Zooma _ut"
-
-#: ../src/f-spot.glade.h:90
-#: ../src/ui/main_window.ui.h:30
-msgid "Zoom in"
-msgstr "Zooma in"
-
-#: ../src/f-spot.glade.h:91
-#: ../src/ui/main_window.ui.h:31
-msgid "Zoom out"
-msgstr "Zooma ut"
-
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:9
 msgid "_Brightness:"
 msgstr "_Ljusstyrka:"
 
-#: ../src/f-spot.glade.h:93
-msgid "_Create Mail"
-msgstr "S_kapa e-post"
-
-#: ../src/f-spot.glade.h:94
-#: ../src/ui/main_window.ui.h:44
-msgid "_Edit"
-msgstr "R_edigera"
-
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:10
 msgid "_Exposure:"
 msgstr "_Exponering:"
 
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100
-#: ../src/ui/main_window.ui.h:48
-msgid "_Fullscreen"
-msgstr "_Helskärm"
-
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "Bild_galleri"
-
-#: ../src/f-spot.glade.h:102
-#: ../src/ui/main_window.ui.h:49
-msgid "_Help"
-msgstr "_Hjälp"
-
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:11
 msgid "_Hue:"
 msgstr "_Nyans:"
 
-#: ../src/f-spot.glade.h:104
-msgid "_Interpolate image on zoom"
-msgstr "_Interpolera bild vid zoomning"
-
-#: ../src/f-spot.glade.h:105
-msgid "_New Window"
-msgstr "_Nytt fönster"
-
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "_Öppna album i webbläsaren när sändningen är färdig"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "_Öppna mål när exporteringen är färdig"
-
-#: ../src/f-spot.glade.h:108
-#: ../src/ui/main_window.ui.h:56
-msgid "_Photo"
-msgstr "_Foto"
-
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:12
 msgid "_Saturation:"
 msgstr "_Mättnad:"
 
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "_Skala foton till högst: "
-
-#: ../src/f-spot.glade.h:112
-#: ../src/ui/main_window.ui.h:67
-msgid "_Slideshow"
-msgstr "_Bildspel"
-
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "_Ta bort metadata"
-
-#: ../src/f-spot.glade.h:114
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
-msgid "_Tag Name:"
-msgstr "_Taggnamn:"
-
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:13
 msgid "_Tint:"
 msgstr "_Tona:"
 
-#: ../src/f-spot.glade.h:116
-msgid "_Toolbar"
-msgstr "_Verktygsrad"
-
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118
-#: ../src/ui/main_window.ui.h:75
-msgid "_View"
-msgstr "_Visa"
-
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "_Virtuellt filsystem"
-
-#: ../src/f-spot.glade.h:120
-#: ../src/Widgets/FindBar.cs:177
-msgid "and"
-msgstr "och"
-
-#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
-msgid ""
-"at\n"
-"after\n"
-"between"
-msgstr ""
-"den\n"
-"efter den\n"
-"mellan den"
-
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
 #: ../src/FullScreenView.cs:58
 msgid "Hide"
 msgstr "Dölj"
 
 #: ../src/FullScreenView.cs:60
-msgid "Hide Toolbar"
+msgid "Hide toolbar"
 msgstr "Dölj verktygsrad"
 
 #: ../src/FullScreenView.cs:66
@@ -2083,8 +1748,7 @@ msgid "Info"
 msgstr "Info"
 
 #: ../src/FullScreenView.cs:68
-#: ../src/Widgets/InfoBox.cs:201
-msgid "Image Information"
+msgid "Image information"
 msgstr "Bildinformation"
 
 #: ../src/FullScreenView.cs:73
@@ -2092,8 +1756,8 @@ msgid "Exit fullscreen"
 msgstr "Lämna helskärmsläge"
 
 #: ../src/FullScreenView.cs:81
-#: ../src/MainWindow.cs:341
-#: ../src/SingleView.cs:88
+#: ../src/MainWindow.cs:314
+#: ../src/SingleView.cs:91
 msgid "Slideshow"
 msgstr "Bildspel"
 
@@ -2115,200 +1779,20 @@ msgstr "Fler datum"
 msgid "More"
 msgstr "Fler"
 
-#: ../src/GroupSelector.cs:517
+#: ../src/GroupSelector.cs:530
 #: ../src/ui/main_window.ui.h:34
 msgid "_Clear Date Range"
 msgstr "_Rensa datumintervall"
 
-#: ../src/Imaging/Exif.cs:228
-msgid "Image Directory"
-msgstr "Bildkatalog"
-
-#: ../src/Imaging/Exif.cs:230
-msgid "Thumbnail Directory"
-msgstr "Miniatyrbildskatalog"
-
-#: ../src/Imaging/Exif.cs:232
-msgid "Exif Directory"
-msgstr "Exif-katalog"
-
-#: ../src/Imaging/Exif.cs:234
-msgid "GPS Directory"
-msgstr "GPS-katalog"
-
-#: ../src/Imaging/Exif.cs:236
-msgid "InterOperability Directory"
-msgstr "InterOperability-katalog"
-
-#: ../src/Imaging/Exif.cs:238
-msgid "Unknown Directory"
-msgstr "Okänd katalog"
-
-#: ../src/Imaging/ImageFile.cs:117
-msgid "Writing to this file format is not supported"
-msgstr "Skrivning till detta filformat stöds inte"
-
-#: ../src/Imaging/IptcFile.cs:145
-msgid "IPTC Information Interchange Model (IIM) Version number"
-msgstr "IPTC Information Interchange Model (IIM) Versionsnummer"
-
-#: ../src/Imaging/IptcFile.cs:147
-msgid "OSI Destination routing information"
-msgstr "OSI Destination routing information"
-
-#: ../src/Imaging/IptcFile.cs:149
-msgid "IPTC file format"
-msgstr "IPTC-filformat"
-
-#: ../src/Imaging/IptcFile.cs:151
-msgid "Identifies the provider and product"
-msgstr "Identifierar leverantör och produkt"
-
-#: ../src/Imaging/IptcFile.cs:153
-msgid "A unique number identifying the envelope"
-msgstr "Ett unikt nummer som identifierar kuvertet"
-
-#: ../src/Imaging/IptcFile.cs:155
-msgid "A unique number"
-msgstr "Ett unikt nummer"
-
-#: ../src/Imaging/IptcFile.cs:157
-msgid "The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
-msgstr "Kuverthanteringens prioritet, mellan 1 (mest brådskande) och 9 (minst brådskande)"
-
-#: ../src/Imaging/IptcFile.cs:159
-msgid "The year, month and day (CCYYMMDD) the service sent the material"
-msgstr "Det år, månad och dag (CCÅÅMMDD) som tjänsten skickade materialet"
-
-#: ../src/Imaging/IptcFile.cs:161
-msgid "The hour, minute and second (HHMMSS) the service sent the material"
-msgstr "Den timme, minut och sekund (HHMMSS) som tjänsten skickade materialet"
-
-#: ../src/Imaging/IptcFile.cs:163
-msgid "The character set designation"
-msgstr "Teckenuppsättningens beteckning"
-
-#: ../src/Imaging/IptcFile.cs:165
-msgid "External globally unique object identifier"
-msgstr "Extern globalt unik objektidentifierare"
-
-#: ../src/Imaging/IptcFile.cs:170
-msgid "Abstract Relationship Method (ARM) identifier"
-msgstr "Identifierare för Abstract Relationship Method (ARM)"
-
-#: ../src/Imaging/IptcFile.cs:172
-msgid "Abstract Relationship Method (ARM) version number."
-msgstr "Versionsnummer för Abstract Relationship Method (ARM)."
-
-#: ../src/Imaging/IptcFile.cs:175
-msgid "Number identifying the IIM version this application record uses"
-msgstr "Nummer som identifierar IIM-versionen som detta objekt använder"
-
-#: ../src/Imaging/IptcFile.cs:177
-msgid "Object type reference"
-msgstr "Objekttypreferens"
-
-#: ../src/Imaging/IptcFile.cs:182
-msgid "Object attribute reference"
-msgstr "Objektattributreferens"
-
-#: ../src/Imaging/IptcFile.cs:188
-#: ../src/Imaging/IptcFile.cs:192
-msgid "Object name"
-msgstr "Objektnamn"
-
-#: ../src/Imaging/IptcFile.cs:190
-msgid "Status of the objectdata according to the provider"
-msgstr "Status för objektdata enligt leverantören"
-
-#: ../src/Imaging/IptcFile.cs:194
-msgid "Location within a city or area where the object originates"
-msgstr "Plats inom en stad eller område där objektet har sitt ursprung"
-
-#: ../src/Imaging/IptcFile.cs:197
-msgid "Name of the city the content is focussing on"
-msgstr "Namn på staden innehållet fokuserar på"
-
-#: ../src/Imaging/IptcFile.cs:200
-msgid "Copyright information for"
-msgstr "Copyright-information för"
-
-#: ../src/Imaging/IptcFile.cs:203
-msgid "Full name of the country of the focus of the content"
-msgstr "Hela namnet på landet som står i fokus för innehållet"
-
-#: ../src/Imaging/IptcFile.cs:206
-msgid "Two or three letter ISO3166 code of the country of the focus of the content"
-msgstr "Två eller tre teckens ISO3166-kod för landet som står i fokus för innehållet"
-
-#: ../src/Imaging/IptcFile.cs:209
-msgid "Creator of the content"
-msgstr "Skapare av innehållet"
-
-#: ../src/Imaging/IptcFile.cs:212
-msgid "Provider of the object"
-msgstr "Leverantör av objektet"
-
-#: ../src/Imaging/IptcFile.cs:215
-msgid "The title of the author or creator"
-msgstr "Titeln på upphovsmannen eller skaparen"
-
-#: ../src/Imaging/IptcFile.cs:218
-msgid "The person involved in writing, editing or correcting the object data or caption/abstract"
-msgstr "Personen inblandad i skrivandet, redigerandet, eller korrekturen för objektdata eller rubrik/sammandrag"
-
-#: ../src/Imaging/IptcFile.cs:222
-msgid "Headline of the content"
-msgstr "Rubrik för innehållet"
-
-#: ../src/Imaging/IptcFile.cs:225
-msgid "Instructions from the creator to the receiver not covered by other fields"
-msgstr "Instruktioner från upphovsmannen till mottagaren som inte täckts av övriga fält"
-
-#: ../src/Imaging/IptcFile.cs:228
-msgid "Intellectual genre of the object"
-msgstr "Intellektuell genre för objektet"
-
-#: ../src/Imaging/IptcFile.cs:241
-msgid "Unknown IIM DataSet"
-msgstr "Okänt IIM DataSet"
-
-#: ../src/ImportCommand.cs:48
-#: ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "Välj mapp"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Inga kameror identifierades)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Läser in {0} av {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Inläsningen är färdig"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "Katalogen finns inte."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid "The directory you selected \"{0}\" does not exist.  Please choose a different directory"
-msgstr "Katalogen du valde \"{0}\" finns inte. Välj en annan katalog"
-
-#: ../src/ImportCommand.cs:738
-#: ../src/ImportCommand.cs:740
-#: ../src/XmpTagsImporter.cs:89
+#: ../src/Import/ImportController.cs:468
+#: ../src/Import/ImportController.cs:470
+#: ../src/Import/MetadataImporter.cs:50
 msgid "Imported Tags"
 msgstr "Importerade taggar"
 
 #: ../src/ItemAction.cs:79
-#: ../src/MainWindow.cs:308
-#: ../src/SingleView.cs:71
+#: ../src/MainWindow.cs:281
+#: ../src/SingleView.cs:74
 msgid "Rotate Left"
 msgstr "Rotera åt vänster"
 
@@ -2317,8 +1801,8 @@ msgid "Rotate picture left"
 msgstr "Rotera bild åt vänster"
 
 #: ../src/ItemAction.cs:91
-#: ../src/MainWindow.cs:312
-#: ../src/SingleView.cs:76
+#: ../src/MainWindow.cs:285
+#: ../src/SingleView.cs:79
 msgid "Rotate Right"
 msgstr "Rotera åt höger"
 
@@ -2330,608 +1814,501 @@ msgstr "Rotera bild åt höger"
 msgid "Next picture"
 msgstr "Nästa bild"
 
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Föregående"
+
 #: ../src/ItemAction.cs:124
 msgid "Previous picture"
 msgstr "Föregående bild"
 
-#: ../src/MainWindow.cs:303
+#: ../src/Jobs/SyncMetadataJob.cs:73
+#, csharp-format
+msgid "Metadata of file {0} may be corrupt, refusing to write to it, falling back to XMP sidecar."
+msgstr "Metadata för filen {0} kan vara skadad, vägrar att skriv till den, faller tillbaka på XMP sidecar."
+
+#: ../src/MainWindow.cs:274
+#: ../src/UI.Dialog/ImportDialog.cs:195
+#: ../src/ui/import.ui.h:3
+msgid "Import"
+msgstr "Importera"
+
+#: ../src/MainWindow.cs:276
 msgid "Import new images"
 msgstr "Importera nya bilder"
 
-#: ../src/MainWindow.cs:319
+#: ../src/MainWindow.cs:292
 #: ../src/ui/main_window.ui.h:3
 msgid "Browse"
 msgstr "Bläddra"
 
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:296
 msgid "Browse many photos simultaneously"
 msgstr "Bläddra bland många foton samtidigt"
 
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:300
 msgid "Edit Image"
 msgstr "Redigera bild"
 
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:304
 msgid "View and edit a photo"
 msgstr "Visa och redigera ett foto"
 
-#: ../src/MainWindow.cs:336
-#: ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:309
+#: ../src/SingleView.cs:86
 msgid "Fullscreen"
 msgstr "Helskärm"
 
-#: ../src/MainWindow.cs:338
-#: ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:311
+#: ../src/SingleView.cs:88
 msgid "View photos fullscreen"
 msgstr "Visa foton i helskärmsläge"
 
-#: ../src/MainWindow.cs:343
-#: ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:316
+#: ../src/SingleView.cs:93
 msgid "View photos in a slideshow"
 msgstr "Visa foton i ett bildspel"
 
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:331
 msgid "Previous photo"
 msgstr "Föregående foto"
 
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:336
 msgid "Next photo"
 msgstr "Nästa foto"
 
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "Inga kameror hittades"
-
-#: ../src/MainWindow.cs:1519
-msgid "F-Spot was unable to find any cameras attached to this system.  Double check that the camera is connected and has power"
-msgstr "F-Spot kunde inte hitta några kameror anslutna till detta system.  Kontrollera att kameran är ansluten och att den har ström"
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "Fel vid anslutning till kamera"
+#: ../src/MainWindow.cs:413
+msgid "Show _Find Bar"
+msgstr "Visa _sökrad"
 
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Tog emot fel \"{0}\" vid anslutning till kamera"
+#: ../src/MainWindow.cs:416
+msgid "Hide _Find Bar"
+msgstr "Dölj _sökrad"
 
 #. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1724
 #, csharp-format
 msgid "Merge the selected tag"
 msgid_plural "Merge the {0} selected tags?"
 msgstr[0] "Sammanfoga den markerade taggen"
 msgstr[1] "Sammanfoga de {0} markerade taggarna"
 
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1751
 msgid "This operation will merge the selected tags and any sub-tags into a single tag."
 msgstr "Denna operation kommer att slå ihop de markerade taggarna och deras undertaggar till en enda tagg."
 
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1753
 msgid "_Merge Tags"
 msgstr "_Slå ihop taggar"
 
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1958
 #, csharp-format
 msgid "{0} Photo out of {1}"
 msgid_plural "{0} Photos out of {1}"
 msgstr[0] "{0} foto utav {1}"
 msgstr[1] "{0} foton utav {1}"
 
-#: ../src/MainWindow.cs:2082
-#: ../src/SingleView.cs:467
+#: ../src/MainWindow.cs:1960
+#: ../src/SingleView.cs:469
 #, csharp-format
 msgid "{0} Photo"
 msgid_plural "{0} Photos"
 msgstr[0] "{0} foto"
 msgstr[1] "{0} foton"
 
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1963
 #, csharp-format
 msgid " ({0} selected)"
 msgid_plural " ({0} selected)"
 msgstr[0] " ({0} markerad)"
 msgstr[1] " ({0} markerade)"
 
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2044
 msgid "_Ok"
 msgstr "_OK"
 
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2045
 msgid "Error Deleting Picture"
 msgstr "Fel vid borttagning av foto"
 
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2050
 #, csharp-format
 msgid "No permission to delete the file:{1}{0}"
 msgstr "Ingen behörighet att ta bort filen:{1}{0}"
 
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2054
 #, csharp-format
 msgid "An error of type {0} occurred while deleting the file:{2}{1}"
 msgstr "Ett fel av typen {0} inträffade vid borttagning av filen:{2}{1}"
 
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2086
 #, csharp-format
 msgid "Delete the selected photo permanently?"
 msgid_plural "Delete the {0} selected photos permanently?"
 msgstr[0] "Ta bort det markerade fotot permanent?"
 msgstr[1] "Ta bort de {0} markerade fotona permanent?"
 
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2090
 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] "Detta tar bort alla versioner av det markerade fotot från din disk."
 msgstr[1] "Detta tar bort alla versioner av markerade foton från din disk."
 
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2093
 msgid "_Delete photo"
 msgid_plural "_Delete photos"
 msgstr[0] "_Ta bort foto"
 msgstr[1] "_Ta bort foton"
 
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2129
 #, csharp-format
 msgid "Remove the selected photo from F-Spot?"
 msgid_plural "Remove the {0} selected photos from F-Spot?"
 msgstr[0] "Ta bort det markerade fotot från F-Spot?"
 msgstr[1] "Ta bort de {0} markerade fotona från F-Spot?"
 
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2134
 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 "Om du tar bort foton från F-Spot-katalogen kommer all tagginformation för dem att gå förlorad. Fotona finns dock kvar på din dator och kan importeras in till F-Spot på nytt."
 
 # SUN CHANGED MESSAGE
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2135
 msgid "_Remove from Catalog"
 msgstr "Ta bort från _katalog"
 
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2209
 #, csharp-format
 msgid "Delete tag \"{0}\"?"
 msgstr "Ta bort taggen \"{0}\"?"
 
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2211
 #, csharp-format
 msgid "Delete the {0} selected tags?"
 msgstr "Ta bort de {0} markerade taggarna?"
 
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2216
 msgid "photo"
 msgid_plural "photos"
 msgstr[0] "foto"
 msgstr[1] "foton"
 
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2218
 #, 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] "Om du tar bort denna tagg så försvinner associationen med {0} {1}."
 msgstr[1] "Om du tar bort dessa taggar så försvinner associationen med {0} {1}."
 
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2223
 msgid "_Delete tag"
 msgid_plural "_Delete tags"
 msgstr[0] "_Ta bort tagg"
 msgstr[1] "_Ta bort taggar"
 
 #. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2237
 msgid "Tag is not empty"
 msgstr "Taggen är inte tom"
 
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2238
 #, csharp-format
 msgid "Can not delete tags that have tags within them.  Please delete tags under \"{0}\" first"
 msgstr "Kan inte ta bort taggar som har andra taggar under sig.  Ta bort alla taggar under \"{0}\" först"
 
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2678
 msgid "Rotate selected photo left"
 msgid_plural "Rotate selected photos left"
 msgstr[0] "Rotera det markerade fotot åt vänster"
 msgstr[1] "Rotera de markerade fotona åt vänster"
 
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2691
 msgid "Rotate selected photo right"
 msgid_plural "Rotate selected photos right"
 msgstr[0] "Rotera det markerade fotot åt höger"
 msgstr[1] "Rotera de markerade fotona åt höger"
 
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2702
 #, csharp-format
 msgid "Find _Selected Tag"
 msgid_plural "Find _Selected Tags"
 msgstr[0] "Sök efter _vald tagg"
 msgstr[1] "Sök efter _valda taggar"
 
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2706
 #, csharp-format
 msgid "Find Selected Tag _With"
 msgid_plural "Find Selected Tags _With"
 msgstr[0] "Sök efter vald tagg _med"
 msgstr[1] "Sök efter valda taggar _med"
 
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2747
 msgid "Create New Version?"
 msgid_plural "Create New Versions?"
 msgstr[0] "Skapa en ny version?"
 msgstr[1] "Skapa nya versioner?"
 
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2749
 #, 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] "Innan start av {1}, ska F-Spot skapa en ny version av det markerade fotot för att bibehålla originalet?"
 msgstr[1] "Innan start av {1}, ska F-Spot skapa nya versioner av de markerade fotona för att bibehålla originalen?"
 
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2771
 msgid "XCF version"
 msgstr "XCF-version"
 
-#: ../src/MetadataStore.cs:19
-msgid "Creator"
-msgstr "Upphovsman"
-
-#: ../src/MetadataStore.cs:20
-msgid "Title"
-msgstr "Titel"
-
-#: ../src/MetadataStore.cs:21
-msgid "Copyright"
-msgstr "Copyright"
-
-#: ../src/MetadataStore.cs:22
-msgid "Subject and Keywords"
-msgstr "Ämne och nyckelord"
-
-#: ../src/MetadataStore.cs:23
-msgid "Compression"
-msgstr "Komprimering"
-
-#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
-#. "when Planar Configuration=1, this implies that all components must have
-#. the same BitsPerSample value; when Planar Configuration=2, different
-#. components could have different bit depths."
-#: ../src/MetadataStore.cs:29
-msgid "Planar Configuration"
-msgstr "Planär inställning"
-
-#: ../src/MetadataStore.cs:31
-msgid "Orientation"
-msgstr "Orientering"
-
-#: ../src/MetadataStore.cs:33
-msgid "Photometric Interpretation"
-msgstr "Fotometrisk tolkning"
-
-#: ../src/MetadataStore.cs:35
-msgid "Resolution Unit"
-msgstr "Upplösningsenhet"
-
-#: ../src/MetadataStore.cs:37
-msgid "Exposure Program"
-msgstr "Exponeringsprogram"
-
-#: ../src/MetadataStore.cs:39
-msgid "Metering Mode"
-msgstr "Exponeringsmätningsläge"
-
-#: ../src/MetadataStore.cs:41
-msgid "Exposure Mode"
-msgstr "Exponeringsläge"
-
-#: ../src/MetadataStore.cs:43
-msgid "Custom Rendered"
-msgstr "Renderat på anpassat sätt"
-
-#: ../src/MetadataStore.cs:45
-msgid "Components Configuration"
-msgstr "Komponentinställningar"
-
-#: ../src/MetadataStore.cs:47
-msgid "Light Source"
-msgstr "Ljuskälla"
-
-# detta kan vara "Exponeringsmätning. "
-# hittade inte var strängen förkommer.
-#: ../src/MetadataStore.cs:49
-msgid "Sensing Method"
-msgstr "Avkänningsmetod"
-
-#: ../src/MetadataStore.cs:51
-msgid "Color Space"
-msgstr "Färgrymd"
-
-#: ../src/MetadataStore.cs:53
-msgid "White Balance"
-msgstr "Vitbalans"
-
-#: ../src/MetadataStore.cs:55
-msgid "Focal Plane Resolution Unit"
-msgstr "Fokalplanets upplösningsenhet"
-
-#: ../src/MetadataStore.cs:57
-msgid "File Source Type"
-msgstr "Filens källtyp"
-
-#: ../src/MetadataStore.cs:59
-msgid "Scene Capture Type"
-msgstr "Typ av scenfångst"
-
-#. Translators: Gain Control is the label for the exif:GainControl tag
-#. "This tag indicates the degree of overall image gain adjustment."
-#: ../src/MetadataStore.cs:63
-msgid "Gain Control"
-msgstr "Förstärkningskontroll"
-
-#: ../src/MetadataStore.cs:65
-msgid "Contrast"
-msgstr "Kontrast"
-
-#: ../src/MetadataStore.cs:67
-msgid "Saturation"
-msgstr "Mättnad"
-
-#: ../src/MetadataStore.cs:69
-msgid "Sharpness"
-msgstr "Skärpa"
-
-#: ../src/MetadataStore.cs:71
-msgid "Scene Type"
-msgstr "Scentyp"
+#: ../src/PhotoStore.cs:165
+#: ../src/ui/mail_dialog.ui.h:17
+msgid "Original"
+msgstr "Original"
 
 #. Fixme this should really set parent menu
 #. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
 msgid "(No Tags)"
 msgstr "(Inga taggar)"
 
-#: ../src/PhotoVersionCommands.cs:58
+#: ../src/PhotoVersionCommands.cs:59
 msgid "Create New Version"
 msgstr "Skapa ny version"
 
-#: ../src/PhotoVersionCommands.cs:59
+#: ../src/PhotoVersionCommands.cs:60
 msgid "Name:"
 msgstr "Namn:"
 
-#: ../src/PhotoVersionCommands.cs:63
+#: ../src/PhotoVersionCommands.cs:64
 msgid "Rename Version"
 msgstr "Byt namn på version"
 
-#: ../src/PhotoVersionCommands.cs:64
+#: ../src/PhotoVersionCommands.cs:65
 msgid "New name:"
 msgstr "Nytt namn:"
 
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Kunde inte skapa en ny version"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Tog emot undantag \"{0}\". Kunde inte skapa version \"{1}\""
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Vill du verkligen ta bort?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:125
 msgid "Delete"
 msgstr "Ta bort"
 
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:126
 #, csharp-format
 msgid "Really delete version \"{0}\"?"
 msgstr "Verkligen ta bort version \"{0}\"?"
 
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Kunde inte ta bort en version"
+#: ../src/PhotoVersionCommands.cs:127
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "Detta tar bort versionen och tar även bort motsvarande fil från disken."
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid "De_tach"
+msgstr "Ta _bort"
 
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:173
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Tog emot undantag \"{0}\". Kunde inte ta bort version \"{1}\""
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Verkligen ta bort version \"{0}\" från \"{1}\"?"
+
+#: ../src/PhotoVersionCommands.cs:174
+msgid "This makes the version appear as a separate photo in the library. To undo, drag the new photo back to its parent."
+msgstr "Detta gör att versionen visas som ett separat foto i biblioteket. Dra det nya fotot tillbaka till sin förälder för att ångra."
 
 #: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Kunde inte byta namn på en version"
+msgid "Re_parent"
+msgstr "Ange förä_lder"
 
 #: ../src/PhotoVersionCommands.cs:197
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "Tog emot undantag \"{0}\". Kunde inte byta namn på version \"{1}\""
-
-#: ../src/PhotoVersionMenu.cs:66
-#: ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
-msgid "(No Edits)"
-msgstr "(Inga ändringar)"
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Verkligen ange förälder för \"{0}\" som version av \"{1}\"?"
+msgstr[1] "Verkligen ange förälder för {2} foton som versioner av \"{1}\"?"
 
-#: ../src/PhotoView.cs:167
-#: ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Fel vid redigering av foto"
+#: ../src/PhotoVersionCommands.cs:200
+msgid "This makes the photos appear as a single one in the library. The versions can be detached using the Photo menu."
+msgstr "Detta gör att fotona visas som en enda i biblioteket. Versionerna kan tas bort från Foto-menyn."
 
-#: ../src/PhotoView.cs:168
-#: ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
+#: ../src/PhotoVersionCommands.cs:240
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Mottog undantaget \"{0}\". Kunde inte spara fotot {1}"
+msgid "Received exception \"{0}\"."
+msgstr "Mottog undantaget \"{0}\"."
 
-#: ../src/PhotoView.cs:356
-msgid "Comment:"
-msgstr "Kommentar:"
+#: ../src/PhotoVersionMenu.cs:54
+#: ../src/Widgets/InfoBox.cs:470
+msgid "(No Edits)"
+msgstr "(Inga ändringar)"
+
+#: ../src/PhotoView.cs:336
+msgid "Description:"
+msgstr "Beskrivning:"
 
-#: ../src/Preferences.cs:152
+#: ../src/Preferences.cs:157
 msgid "Photos"
 msgstr "Foton"
 
-#: ../src/PrintOperation.cs:32
+#: ../src/PrintOperation.cs:33
 msgid "Image Settings"
 msgstr "Bildinställningar"
 
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
 msgid "Find: "
 msgstr "Sök: "
 
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
 msgid "Untagged photos"
 msgstr "Otaggade foton"
 
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
 msgid "Rated photos"
 msgstr "Betygsatta foton"
 
 #. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
 msgid "Import roll"
 msgstr "Importera rulle"
 
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
 msgid "Clear search"
 msgstr "Rensa sökning"
 
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
 msgid "Refresh search"
 msgstr "Uppdatera sökning"
 
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
 msgid "No matching photos found"
 msgstr "Inga matchande foton hittades"
 
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Dölj _sökrad"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Visa _sökrad"
-
-#: ../src/RotateCommand.cs:96
-#: ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:74
 msgid "Unable to rotate this type of photo"
 msgstr "Kunde inte rotera denna typ av foto"
 
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:93
 msgid "Unable to rotate readonly file"
 msgstr "Kunde inte rotera skrivskyddad fil"
 
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:156
 msgid "Rotating photos"
 msgstr "Roterar foton"
 
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:167
 #, csharp-format
 msgid "Rotating photo \"{0}\""
 msgstr "Roterar foto \"{0}\""
 
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:180
 msgid "Directory not found"
 msgstr "Katalogen hittades inte"
 
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:182
+msgid "File not found"
+msgstr "Filen hittades inte"
+
+#: ../src/RotateCommand.cs:200
 #, csharp-format
 msgid "Unable to rotate photo"
 msgid_plural "Unable to rotate {0} photos"
 msgstr[0] "Kunde inte rotera foto"
 msgstr[1] "Kunde inte rotera {0} foton"
 
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:202
 #, 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] "Fotot kunde inte roteras eftersom det ligger på ett skrivskyddat filsystem eller medium, till exempel en cd-skiva. Kontrollera rättigheterna och försök igen."
 msgstr[1] "{0} foton kunde inte roteras eftersom de ligger på ett skrivskyddat filsystem eller medium, till exempel en cd-skiva. Kontrollera rättigheterna och försök igen."
 
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:229
 #, csharp-format
 msgid "Received error \"{0}\" while attempting to rotate {1}"
 msgstr "Tog emot felet \"{0}\" under försöket att rotera {1}"
 
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:234
 msgid "Error while rotating photo."
 msgstr "Fel vid rotation av foto"
 
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:211
 msgid "Preparing email"
 msgstr "Förbereder e-post"
 
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:255
 #, csharp-format
 msgid "Exporting picture \"{0}\""
 msgstr "Exporterar bilden \"{0}\""
 
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:274
 msgid "Error processing image"
 msgstr "Fel vid behandling av bild"
 
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:275
 #, csharp-format
 msgid "An error occured while processing \"{0}\": {1}"
 msgstr "Ett fel inträffade vid behandling av \"{0}\": {1}"
 
 #. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:288
 msgid "My Photos"
 msgstr "Mina foton"
 
-#: ../src/Sharpener.cs:72
+#: ../src/Sharpener.cs:73
 msgid "Error saving sharpened photo"
 msgstr "Fel vid sparande av foto med ökad skärpa"
 
-#: ../src/Sharpener.cs:102
+#: ../src/Sharpener.cs:74
+#: ../src/UI.Dialog/EditExceptionDialog.cs:27
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Mottog undantaget \"{0}\". Kunde inte spara fotot {1}"
+
+#: ../src/Sharpener.cs:103
 msgid "Sharpen"
 msgstr "Gör skarpare"
 
-#: ../src/Sharpener.cs:112
+#: ../src/Sharpener.cs:113
 msgid "Amount:"
 msgstr "Mängd:"
 
-#: ../src/Sharpener.cs:113
+#: ../src/Sharpener.cs:114
 msgid "Radius:"
 msgstr "Radie:"
 
-#: ../src/Sharpener.cs:114
+#: ../src/Sharpener.cs:115
 msgid "Threshold:"
 msgstr "Tröskelvärde:"
 
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:76
 msgid "Rotate photo left"
 msgstr "Rotera fotot åt vänster"
 
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:81
 msgid "Rotate photo right"
 msgstr "Rotera fotot åt höger"
 
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:118
 msgid "Folder"
 msgstr "Mapp"
 
-#: ../src/SingleView.cs:341
+#: ../src/SingleView.cs:343
 msgid "Open"
 msgstr "Öppna"
 
-#: ../src/SingleView.cs:428
+#: ../src/SingleView.cs:346
+msgid "Select Folder"
+msgstr "Välj mapp"
+
+#: ../src/SingleView.cs:430
 msgid "Set as Background"
 msgstr "Ställ in som bakgrund"
 
-#: ../src/TagCommands.cs:96
-#: ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:116
+#: ../src/TagSelectionWidget.cs:492
+#: ../src/UI.Dialog/EditTagDialog.cs:76
 msgid "This name is already in use"
 msgstr "Detta namn används redan"
 
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:166
 msgid "Create New Tag"
 msgstr "Skapa ny tagg"
 
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:167
 msgid "Name of New Tag:"
 msgstr "Namn på ny tagg:"
 
@@ -2943,7 +2320,7 @@ msgstr[0] "Sök"
 msgstr[1] "Sök"
 
 #: ../src/TagPopup.cs:36
-#: ../src/Widgets/TagMenu.cs:91
+#: ../src/Widgets/TagMenu.cs:98
 msgid "Create New Tag..."
 msgstr "Skapa ny tagg..."
 
@@ -2999,42 +2376,42 @@ msgid "All"
 msgstr "Alla"
 
 #: ../src/TagQueryWidget.cs:149
-#: ../src/Term.cs:592
+#: ../src/Term.cs:586
 #, csharp-format
 msgid "Not {0}"
 msgstr "Inte {0}"
 
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
 msgid "Drag tags here to search for them"
 msgstr "Dra taggar hit för att söka efter dem"
 
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:491
 msgid "Error renaming tag"
 msgstr "Fel vid namnbyte av tagg"
 
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:205
 msgid "Favorites"
 msgstr "Favoriter"
 
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:210
 msgid "Hidden"
 msgstr "Dolda"
 
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:218
 msgid "People"
 msgstr "Människor"
 
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:223
 msgid "Places"
 msgstr "Platser"
 
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:228
 msgid "Events"
 msgstr "Händelser"
 
 #. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239
-#: ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:241
+#: ../src/Widgets/InfoBox.cs:344
 msgid "(None)"
 msgstr "(Inget)"
 
@@ -3055,28 +2432,29 @@ msgstr " eller "
 #. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
 #: ../src/Term.cs:380
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Widgets/FindBar.cs:178
+#: ../src/Widgets/FindBar.cs:533
 msgid "or"
 msgstr "eller"
 
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
 msgid "Updating Thumbnails"
 msgstr "Uppdaterar miniatyrbilder"
 
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
 #, csharp-format
 msgid "Updating picture \"{0}\""
 msgstr "Uppdaterar bilden \"{0}\""
 
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:99
 msgid "Photo management for GNOME"
 msgstr "Fotohantering för GNOME"
 
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
-
 #: ../src/UI.Dialog/AboutDialog.cs:100
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
+
+#: ../src/UI.Dialog/AboutDialog.cs:124
 msgid "translator-credits"
 msgstr ""
 "Daniel Nylander\n"
@@ -3086,62 +2464,66 @@ msgstr ""
 "Skicka synpunkter på översättningen till\n"
 "tp-sv at listor.tp-sv.se"
 
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:129
 msgid "F-Spot Website"
 msgstr "F-Spots webbplats"
 
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
 #: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
 #, csharp-format
 msgid "Shift all photos by {0}"
 msgstr "Förskjut alla foton med {0}"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:99
+#: ../src/UI.Dialog/DateRangeDialog.cs:90
 msgid "Today"
 msgstr "Idag"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:101
+#: ../src/UI.Dialog/DateRangeDialog.cs:92
 msgid "Yesterday"
 msgstr "Igår"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:103
+#: ../src/UI.Dialog/DateRangeDialog.cs:94
 msgid "Last 7 days"
 msgstr "Senaste 7 dagar"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:105
+#: ../src/UI.Dialog/DateRangeDialog.cs:96
 msgid "Last 30 days"
 msgstr "Senaste 30 dagar"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:107
+#: ../src/UI.Dialog/DateRangeDialog.cs:98
 msgid "Last 90 days"
 msgstr "Senaste 90 dagar"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:109
+#: ../src/UI.Dialog/DateRangeDialog.cs:100
 msgid "Last 360 days"
 msgstr "Senaste 360 dagar"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:111
+#: ../src/UI.Dialog/DateRangeDialog.cs:102
 msgid "Current Week (Mon-Sun)"
 msgstr "Aktuell vecka (Mån-Sön)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:113
+#: ../src/UI.Dialog/DateRangeDialog.cs:104
 msgid "Previous Week (Mon-Sun)"
 msgstr "Föregående vecka (Mån-Sön)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:131
+#: ../src/UI.Dialog/DateRangeDialog.cs:122
 msgid "Customized Range"
 msgstr "Anpassat intervall"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:40
+msgid "Error editing photo"
+msgstr "Fel vid redigering av foto"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:44
 #, csharp-format
 msgid "Edit Icon for Tag {0}"
 msgstr "Redigera ikon för taggen {0}"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:66
 msgid "Select Photo from file"
 msgstr "Välj foto från fil"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:88
 #, csharp-format
 msgid ""
 "\n"
@@ -3158,16 +2540,16 @@ msgstr ""
 " med denna tagg. Tagga ett foto som \"{0}\" och\n"
 " återvänd hit för att använda det som en ikon."
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:166
 msgid "Unable to load image"
 msgstr "Kunde inte läsa in bild"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:167
 #, csharp-format
 msgid "Unable to load \"{0}\" as icon for the tag"
 msgstr "Kunde inte läsa in \"{0}\" som ikon för taggen"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:205
 #, csharp-format
 msgid "Photo {0} of {1}"
 msgstr "Foto {0} av {1}"
@@ -3184,37 +2566,77 @@ msgstr "Felinformation"
 msgid "An unhandled exception was thrown: "
 msgstr "Ett ohanterat undantag kastades: "
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Välj mapp..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:131
+msgid "Choose Import source..."
+msgstr "Välj importkälla..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:143
+msgid "(No Cameras Detected)"
+msgstr "(Inga kameror identifierades)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:178
+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 ""
+"Kryssa denna ruta kommer att ta bort de importerade fotona från kameran efter lyckad import.\n"
+"\n"
+"Det rekommenderas att säkerhetskopiera dina foton innan de tas bort från kameran. <b>Använd detta alternativ på egen risk!</b>"
+
+#: ../src/UI.Dialog/ImportDialog.cs:179
+msgid "Warning"
+msgstr "Varning"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Importerar foton: {0} av {1}..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:312
+msgid "Importing photos..."
+msgstr "Importerar foton..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:319
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "Söker efter foton... (Du kan klicka på Importera för att fortsätta)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
+#: ../src/UI.Dialog/PreferenceDialog.cs:80
 msgid "None"
 msgstr "Inget"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:59
 msgid "System profile"
 msgstr "Systemprofil"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:97
 msgid "Standard theme"
 msgstr "Standardtema"
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
 msgid "Error loading database."
 msgstr "Fel vid inläsning av databas."
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:23
 #, 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 "F-Spot påträffade ett fel vid inläsning av fotodatabasen. Den gamla databasen måste flyttas till {0} och en ny databas måste skapas."
 
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
 msgid "Label"
 msgstr "Etikett"
 
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
 msgid "Ratio"
 msgstr "Förhållande"
 
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
 msgid "Retry"
 msgstr "Försök igen"
 
@@ -3262,6 +2684,24 @@ msgstr "skillnad:"
 msgid "min. Starting at {0}"
 msgstr "min. Början vid {0}"
 
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
+msgid "C_reate"
+msgstr "S_kapa"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:2
+msgid "Create _icon for this tag when first used"
+msgstr "Skapa _ikon för denna tagg när den först används"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr "_Föräldertagg:"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "_Taggnamn:"
+
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
 msgid "<b>End Date</b>"
 msgstr "<b>Slutdatum<b>"
@@ -3287,18 +2727,14 @@ msgid "Set date range"
 msgstr "Ställ in datumintervall"
 
 #: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
-msgid "<small></small>"
-msgstr "<small></small>"
-
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit Tag"
 msgstr "Redigera tagg"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit icon"
 msgstr "Redigera ikon"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
 msgid "_Icon:"
 msgstr "_Ikon:"
 
@@ -3331,9 +2767,43 @@ msgstr "Redigera taggikon"
 msgid "No _image"
 msgstr "Ingen _bild"
 
-#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:8
-msgid "Photo 0 of 0"
-msgstr "Foto 0 av 0"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:1
+msgid "<b>View all pictures imported</b>"
+msgstr "<b>Visa alla importerade bilder</b>"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:2
+msgid "Display only those photos that were imported in specified Rolls."
+msgstr "Visa endast de foton som blev importerade i angivna rullar."
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
+msgid "Filter on selected rolls"
+msgstr "Filtrera på markerade rullar"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
+msgid "Number of photos in selected rolls:"
+msgstr "Antal foton i markerade rullar:"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
+msgid "Show all photos."
+msgstr "Visa alla foton."
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
+msgid "after"
+msgstr "efter den"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178
+#: ../src/Widgets/FindBar.cs:534
+msgid "and"
+msgstr "och"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:8
+msgid "at"
+msgstr "den"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:9
+msgid "between"
+msgstr "mellan den"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:1
 msgid "Color profile for display:"
@@ -3360,18 +2830,26 @@ msgstr ""
 "<small>Gör dem åtkomliga för andra bildredigeringsprogram.</small>"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:7
+msgid ""
+"Never modify image files.\n"
+"<small>Write XMP files next to the images instead.</small>"
+msgstr ""
+"Ändra aldrig bildfiler.\n"
+"<small>Skriv XMP-filer bredvid bilderna istället.</small>"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
 msgid "Select A Folder"
 msgstr "Välj en mapp"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:8
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
 msgid "Separately from the image files"
 msgstr "Separat från bildfilerna"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:11
 msgid "Store tags and descriptions for photos:"
 msgstr "Lagra taggar och beskrivningar för foton:"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:12
 msgid "When importing photos, copy them to:"
 msgstr "När foton importeras, kopiera dem till:"
 
@@ -3387,6 +2865,119 @@ msgstr "<b>Minimalt betyg</b>"
 msgid "Set Rating Filter"
 msgstr "Ställ in betygsfilter"
 
+#: ../src/UI.Dialog/ui/RepairDialog.ui.h:1
+msgid "Repair"
+msgstr "Reparera"
+
+#: ../src/ui/import.ui.h:1
+msgid "C_opy files to the Photos folder"
+msgstr "K_opiera filer till fotomappen"
+
+#: ../src/ui/import.ui.h:2
+msgid "I_nclude subfolders"
+msgstr "I_nkludera underkataloger"
+
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:5
+msgid "Import _from:"
+msgstr "Importera _från:"
+
+#: ../src/ui/import.ui.h:6
+msgid "_Attach tags:"
+msgstr "_Fäst taggar:"
+
+#: ../src/ui/import.ui.h:7
+msgid "_Detect duplicates"
+msgstr "_Upptäck dubbletter"
+
+#: ../src/ui/import.ui.h:8
+msgid "_Import"
+msgstr "_Importera"
+
+#: ../src/ui/import.ui.h:9
+msgid "_Remove original files after import"
+msgstr "_Ta bort ursprungliga filer efter import"
+
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 bildpunkter"
+
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 bildpunkter"
+
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 bildpunkter"
+
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 bildpunkter"
+
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 bildpunkter"
+
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>Storlek</b>"
+
+#: ../src/ui/mail_dialog.ui.h:8
+msgid "<b>Summary</b>"
+msgstr "<b>Sammandrag</b>"
+
+#: ../src/ui/mail_dialog.ui.h:9
+msgid "Create Mail"
+msgstr "Skapa e-post"
+
+#: ../src/ui/mail_dialog.ui.h:10
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr "Skapa ett e-postmeddelande med de markerade fotona (möjligen storleksändrade) som bilagor"
+
+#: ../src/ui/mail_dialog.ui.h:11
+msgid "Do not send a mail"
+msgstr "Skicka inte e-post"
+
+#: ../src/ui/mail_dialog.ui.h:12
+msgid "Estimated new size"
+msgstr "Uppskattad ny storlek"
+
+#: ../src/ui/mail_dialog.ui.h:13
+msgid "Extra large"
+msgstr "Extra stor"
+
+#: ../src/ui/mail_dialog.ui.h:14
+msgid "Large"
+msgstr "Stor"
+
+#: ../src/ui/mail_dialog.ui.h:15
+msgid "Medium"
+msgstr "Mellan"
+
+#: ../src/ui/mail_dialog.ui.h:16
+msgid "Number of pictures"
+msgstr "Antal bilder"
+
+#: ../src/ui/mail_dialog.ui.h:18
+msgid "Original size (possible very large file size)"
+msgstr "Ursprunglig storlek (möjligen mycket stor filstorlek)"
+
+#: ../src/ui/mail_dialog.ui.h:19
+msgid "Small"
+msgstr "Liten"
+
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Tiny"
+msgstr "Mycket liten"
+
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Total original size"
+msgstr "Total ursprunglig storlek"
+
+#: ../src/ui/mail_dialog.ui.h:22
+msgid "_Create Mail"
+msgstr "S_kapa e-post"
+
 #: ../src/ui/main_window.ui.h:1
 msgid "Adjust _Time..."
 msgstr "Justera _tid..."
@@ -3419,6 +3010,10 @@ msgstr "Skapa ny _tagg..."
 msgid "Create _New Version..."
 msgstr "Skapa _ny version..."
 
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "Ta _bort version"
+
 #: ../src/ui/main_window.ui.h:11
 msgid "Fin_d"
 msgstr "_Sök"
@@ -3447,6 +3042,11 @@ msgstr "A_vmarkera allt"
 msgid "Send by _Mail..."
 msgstr "Skicka med e-_post..."
 
+#: ../src/ui/main_window.ui.h:21
+#: ../src/ui/single_view.ui.h:3
+msgid "Set as _Background"
+msgstr "Ställ in som _bakgrund"
+
 #: ../src/ui/main_window.ui.h:22
 msgid "Side_bar"
 msgstr "Sido_panel"
@@ -3467,6 +3067,30 @@ msgstr "Verktygs_rad"
 msgid "View"
 msgstr "Visa"
 
+#: ../src/ui/main_window.ui.h:28
+#: ../src/ui/single_view.ui.h:7
+msgid "Zoom _in"
+msgstr "Zooma _in"
+
+#: ../src/ui/main_window.ui.h:29
+#: ../src/ui/single_view.ui.h:8
+msgid "Zoom _out"
+msgstr "Zooma _ut"
+
+#: ../src/ui/main_window.ui.h:30
+#: ../src/ui/single_view.ui.h:9
+msgid "Zoom in"
+msgstr "Zooma in"
+
+#: ../src/ui/main_window.ui.h:31
+#: ../src/ui/single_view.ui.h:10
+msgid "Zoom out"
+msgstr "Zooma ut"
+
+#: ../src/ui/main_window.ui.h:32
+msgid "_Attach Tag"
+msgstr "_Fäst tagg"
+
 #: ../src/ui/main_window.ui.h:33
 msgid "_Attach Tag to Selection"
 msgstr "_Fäst tagg till markering"
@@ -3499,6 +3123,11 @@ msgstr "Ta bort _markerad tagg"
 msgid "_Delete Version"
 msgstr "_Ta bort version"
 
+#: ../src/ui/main_window.ui.h:44
+#: ../src/ui/single_view.ui.h:11
+msgid "_Edit"
+msgstr "R_edigera"
+
 #: ../src/ui/main_window.ui.h:45
 msgid "_Edit Tag..."
 msgstr "R_edigera tagg..."
@@ -3511,6 +3140,16 @@ msgstr "_Exportera till"
 msgid "_Filmstrip"
 msgstr "_Filmremsa"
 
+#: ../src/ui/main_window.ui.h:48
+#: ../src/ui/single_view.ui.h:13
+msgid "_Fullscreen"
+msgstr "_Helskärm"
+
+#: ../src/ui/main_window.ui.h:49
+#: ../src/ui/single_view.ui.h:14
+msgid "_Help"
+msgstr "_Hjälp"
+
 #: ../src/ui/main_window.ui.h:50
 msgid "_Hidden"
 msgstr "_Dolda"
@@ -3520,98 +3159,172 @@ msgid "_Import..."
 msgstr "_Importera..."
 
 #: ../src/ui/main_window.ui.h:52
+msgid "_Invert Selection"
+msgstr "_Invertera markering"
+
+#: ../src/ui/main_window.ui.h:53
 msgid "_Large"
 msgstr "_Stor"
 
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:54
 msgid "_Last Import Roll"
 msgstr "Senaste imp_ortrullen"
 
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:55
 msgid "_Loupe"
 msgstr "_Loupe"
 
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:56
 msgid "_Medium"
 msgstr "_Mellan"
 
 #: ../src/ui/main_window.ui.h:57
+#: ../src/ui/single_view.ui.h:15
+msgid "_Photo"
+msgstr "_Foto"
+
+#: ../src/ui/main_window.ui.h:58
 msgid "_Quit"
 msgstr "_Avsluta"
 
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:59
 msgid "_Ratings"
 msgstr "_Betyg"
 
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:61
 msgid "_Remove Tag From Selection"
 msgstr "_Ta bort tagg från markering"
 
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:62
 msgid "_Rename Version"
 msgstr "_Byt namn på versionen"
 
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:63
 msgid "_Reverse Order"
 msgstr "Omvä_nd ordning"
 
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:64
 msgid "_Select Import Rolls..."
 msgstr "_Välj importrullar..."
 
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:65
 msgid "_Set Date Range..."
 msgstr "Ange dat_umintervall..."
 
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:66
 msgid "_Set Rating filter..."
 msgstr "Ange _betygsfilter..."
 
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:67
 msgid "_Sharpen..."
 msgstr "_Gör skarpare..."
 
 #: ../src/ui/main_window.ui.h:68
+#: ../src/ui/single_view.ui.h:16
+msgid "_Slideshow"
+msgstr "_Bildspel"
+
+#: ../src/ui/main_window.ui.h:69
 msgid "_Small"
 msgstr "_Liten"
 
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:70
 msgid "_Tag Icons"
 msgstr "_Taggikoner"
 
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:71
 msgid "_Tags"
 msgstr "_Taggar"
 
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:72
 msgid "_Timeline"
 msgstr "_Tidslinje"
 
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:73
 msgid "_Tools"
 msgstr "Ver_ktyg"
 
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:74
 msgid "_Untagged Photos"
 msgstr "_Otaggade foton"
 
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:75
 msgid "_Version"
 msgstr "_Version"
 
-#: ../src/Updater.cs:622
+#: ../src/ui/main_window.ui.h:76
+#: ../src/ui/single_view.ui.h:18
+msgid "_View"
+msgstr "_Visa"
+
+#: ../src/ui/single_view.ui.h:1
+msgid "Display File _Names"
+msgstr "Visa fil_namn"
+
+#: ../src/ui/single_view.ui.h:2
+msgid "F-Spot View"
+msgstr "F-Spot Bildvisning"
+
+#: ../src/ui/single_view.ui.h:4
+msgid "Show or hide the side pane"
+msgstr "Visa eller dölj sidopanelen"
+
+#: ../src/ui/single_view.ui.h:5
+msgid "Show or hide the toolbar"
+msgstr "Visa eller dölj verktygsraden"
+
+#: ../src/ui/single_view.ui.h:6
+msgid "Side _pane"
+msgstr "Sido_panel"
+
+#: ../src/ui/single_view.ui.h:17
+msgid "_Toolbar"
+msgstr "_Verktygsrad"
+
+#: ../src/ui/viewer_preferences.ui.h:1
+msgid "<b>Image Interpolation</b>"
+msgstr "<b>Bildinterpolering</b>"
+
+#: ../src/ui/viewer_preferences.ui.h:2
+msgid "<b>Transparent Parts</b>"
+msgstr "<b>Genomskinliga delar</b>"
+
+#: ../src/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>Aktivera detta för att tillåta interpolering på zoomade bilder. Du bör inte inaktivera detta för att visa foton, men att inaktivera interpoleringen kan vara användbart vid ikondesign.</i></small>"
+
+#: ../src/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>Du kan välja hur genomskinliga delar i bilder ska visas. Det här alternativet har ingen effekt på foton, men att ställa in det här som rutmönster eller anpassad färg kan vara användbar vid visning av ikoner eller andra bilder med genomskinliga delar.</i></small>"
+
+#: ../src/ui/viewer_preferences.ui.h:5
+msgid "As _background"
+msgstr "Som _bakgrund"
+
+#: ../src/ui/viewer_preferences.ui.h:6
+msgid "As _custom color: "
+msgstr "Som an_passad färg: "
+
+#: ../src/ui/viewer_preferences.ui.h:7
+msgid "As check _pattern"
+msgstr "Som rutmö_nster"
+
+#: ../src/ui/viewer_preferences.ui.h:8
+msgid "Preferences"
+msgstr "Inställningar"
+
+#: ../src/ui/viewer_preferences.ui.h:9
+msgid "_Interpolate image on zoom"
+msgstr "_Interpolera bild vid zoomning"
+
+#: ../src/Updater.cs:727
 msgid "Updating F-Spot Database"
 msgstr "Uppdaterar F-Spot-databasen"
 
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:728
 msgid "Please wait while your F-Spot gallery's database is updated. This may take some time."
 msgstr "Var god vänta medan databasen för ditt F-Spot-galleri uppdateras. Detta kan ta lite tid."
 
-#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
-msgid "Unable to create temporary file"
-msgstr "Kunde inte skapa tillfällig fil"
-
 #: ../src/Widgets/CustomPrintWidget.cs:119
 msgid "Page Setup"
 msgstr "Sidkonfiguration"
@@ -3692,35 +3405,35 @@ msgstr "Skriv ut fototaggar"
 msgid "Print photo comment"
 msgstr "Skriv ut fotokommentar"
 
-#: ../src/Widgets/EditorPage.cs:30
+#: ../src/Widgets/EditorPage.cs:32
 #: ../src/Widgets/Sidebar.cs:54
 msgid "Edit"
 msgstr "Redigera"
 
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:200
 msgid "This tool requires an active selection. Please select a region of the photo and try the operation again"
 msgstr "Detta verktyg kräver en aktiv markering. Markera ett område i fotot och försök göra samma operation igen"
 
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:218
 msgid "Error saving adjusted photo"
 msgid_plural "Error saving adjusted photos"
 msgstr[0] "Fel vid sparande av justerat foto"
 msgstr[1] "Fel vid sparande av justerade foton"
 
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:220
 #, csharp-format
 msgid "Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."
 msgstr "Mottog undantaget \"{0}\". Observera att du måste framkalla RAW-filer i JPEG innan du kan redigera dem."
 
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:470
 msgid "_Horizontal"
 msgstr "_Horisontellt"
 
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:474
 msgid "_Vertical"
 msgstr "_Vertikalt"
 
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
 msgid "Find:"
 msgstr "Sök:"
 
@@ -3728,7 +3441,7 @@ msgstr "Sök:"
 msgid "Folders"
 msgstr "Mappar"
 
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
 msgid "Filesystem"
 msgstr "Filsystem"
 
@@ -3736,6 +3449,10 @@ msgstr "Filsystem"
 msgid "Histogram"
 msgstr "Histogram"
 
+#: ../src/Widgets/InfoBox.cs:201
+msgid "Image Information"
+msgstr "Bildinformation"
+
 #: ../src/Widgets/InfoBox.cs:215
 msgid "Version"
 msgstr "Version"
@@ -3752,6 +3469,10 @@ msgstr "Exponering"
 msgid "Focal Length"
 msgstr "Brännvidd"
 
+#: ../src/Widgets/InfoBox.cs:231
+msgid "Camera"
+msgstr "Kamera"
+
 #: ../src/Widgets/InfoBox.cs:234
 msgid "File Size"
 msgstr "Filstorlek"
@@ -3760,37 +3481,34 @@ msgstr "Filstorlek"
 msgid "Rating"
 msgstr "Betyg"
 
-#: ../src/Widgets/InfoBox.cs:390
-#: ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:327
 msgid "(wrong format)"
 msgstr "(felaktigt format)"
 
-#: ../src/Widgets/InfoBox.cs:418
-#: ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451
-#: ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:353
+#: ../src/Widgets/InfoBox.cs:364
+#: ../src/Widgets/InfoBox.cs:374
 msgid "(Unknown)"
 msgstr "(Okänt)"
 
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:474
 #, csharp-format
 msgid "(One Edit)"
 msgid_plural "({0} Edits)"
 msgstr[0] "(En redigering)"
 msgstr[1] "({0} redigeringar)"
 
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:484
 msgid "(File read error)"
 msgstr "(Filläsningsfel)"
 
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:529
 #, csharp-format
 msgid "{0} Photos"
 msgstr "{0} foton"
 
 #. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:549
 #, csharp-format
 msgid ""
 "On {0} between \n"
@@ -3799,7 +3517,7 @@ msgstr ""
 "Den {0} mellan \n"
 "{1} och {2}"
 
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:554
 #, csharp-format
 msgid ""
 "Between {0} \n"
@@ -3808,35 +3526,35 @@ msgstr ""
 "Mellan {0} \n"
 "och {1}"
 
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:581
 msgid "(At least one File not found)"
 msgstr "(Minst en fil hittades inte)"
 
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:698
 msgid "Show Photo Name"
 msgstr "Visa Fotonamn"
 
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:707
 msgid "Show Date"
 msgstr "Visa Datum"
 
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:716
 msgid "Show Size"
 msgstr "Visa Storlek"
 
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:725
 msgid "Show Exposure"
 msgstr "Visa Exponering"
 
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:734
 msgid "Show Focal Length"
 msgstr "Visa Brännvidd"
 
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:743
 msgid "Show Camera"
 msgstr "Visa Kamera"
 
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:752
 msgid "Show File Size"
 msgstr "Visa Filstorlek"
 
@@ -3848,45 +3566,27 @@ msgstr "Metadata"
 msgid "Extended Metadata"
 msgstr "Utökad metadata"
 
-#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:394
-msgid "No Extended Metadata Available"
-msgstr "Ingen utökad metadata tillgänglig"
-
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:359
 msgid "No active photo"
 msgstr "Inget aktivt foto"
 
-#: ../src/Widgets/MetadataDisplay.cs:414
+#: ../src/Widgets/MetadataDisplay.cs:361
 #, csharp-format
 msgid "The photo \"{0}\" does not exist"
 msgstr "Fotot \"{0}\" finns inte"
 
-#: ../src/Widgets/MetadataDisplay.cs:417
+#: ../src/Widgets/MetadataDisplay.cs:363
 msgid "No metadata available"
 msgstr "Ingen metadata tillgänglig"
 
-#: ../src/Widgets/OpenWithMenu.cs:71
+#: ../src/Widgets/OpenWithMenu.cs:72
 msgid "No applications available"
 msgstr "Inga applikationer tillgängliga"
 
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
 msgid "Rating:"
 msgstr "Betyg:"
 
-#: ../src/XmpTagsImporter.cs:91
-msgid "Country"
-msgstr "Land"
-
-#: ../src/XmpTagsImporter.cs:92
-msgid "City"
-msgstr "Stad"
-
-#: ../src/XmpTagsImporter.cs:93
-msgid "State"
-msgstr "Region/Län"
-
-#. namespace
 #: ../tools/f-spot-screensaver.desktop.in.h:1
 msgid "Display a slideshow from F-Spot"
 msgstr "Visa ett bildspel från F-Spot"
@@ -3895,6 +3595,306 @@ msgstr "Visa ett bildspel från F-Spot"
 msgid "F-Spot photos"
 msgstr "Foton från F-Spot"
 
+#~ msgid "Attach Tags:"
+#~ msgstr "Fäst taggar:"
+#~ msgid "Autorotate"
+#~ msgstr "Rotera automatiskt"
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Fel: Fel vid överföring; Avbryter"
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Fel: Filen finns redan; Avbryter"
+#~ msgid "\n"
+#~ msgstr "\n"
+#~ msgid "_Autorotate"
+#~ msgstr "Rotera _automatiskt"
+#~ msgid "<b>{0}</b>."
+#~ msgstr "<b>{0}</b>."
+#~ msgid "Unknown transform type %d"
+#~ msgstr "Okänd transformeringstyp %d"
+#~ msgid "Operation failed"
+#~ msgstr "Åtgärden misslyckades"
+#~ msgid "Preview"
+#~ msgstr "Förhandsvisning"
+#~ msgid "File"
+#~ msgstr "Fil"
+#~ msgid "Select Tag"
+#~ msgstr "Välj tagg"
+#~ msgid "Downloading Previews"
+#~ msgstr "Hämtar förhandsgranskningar"
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Hämtar förhandsgranskning av {0}"
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Kopierar fil {0} av {1}"
+#~ msgid "Error transferring file"
+#~ msgstr "Fel vid filöverföring"
+#~ msgid "Download Complete"
+#~ msgstr "Hämtningen färdig"
+#~ msgid "Done Copying Files"
+#~ msgstr "Kopieringen färdig"
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Överför \"{0}\" från kamera"
+#~ msgid "Port"
+#~ msgstr "Port"
+
+# Reparent betyder att bilden dupliceras
+#~ msgid "Reparented ({0})"
+#~ msgstr "Adopterad ({0})"
+#~ msgid "Import error"
+#~ msgstr "Importeringsfel"
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Fel vid import av {0}{2}{2}{1}"
+#~ msgid "No way to save files of type \"{0}\""
+#~ msgstr "Inget sätt att spara filer av typen \"{0}\""
+#~ msgid " "
+#~ msgstr " "
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+#~ msgid "CD"
+#~ msgstr "Cd"
+#~ msgid "E-_Mail:"
+#~ msgstr "E-_post:"
+#~ msgid "E_xport titles and comments"
+#~ msgstr "E_xportera titlar och kommentarer"
+#~ msgid "G_allery:"
+#~ msgstr "G_alleri:"
+#~ msgid "Gallery"
+#~ msgstr "Galleri"
+#~ msgid "Pause"
+#~ msgstr "Paus"
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Välj foton att kopiera från kameran"
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Välj kameran som du vill överföra bilder från"
+#~ msgid "Selected Camera: "
+#~ msgstr "Vald kamera: "
+#~ msgid ""
+#~ "Specify if an original size picture should be rotated or not. Smaller "
+#~ "sizes are automatically rotated."
+#~ msgstr ""
+#~ "Ange om en bild av ursprunglig storlek ska roteras eller inte. Mindre "
+#~ "storlekar roteras automatiskt."
+#~ msgid "Strip image _metadata"
+#~ msgstr "Rensa bildens _metadata"
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+#~ msgid "_Gallery"
+#~ msgstr "Bild_galleri"
+#~ msgid "_New Window"
+#~ msgstr "_Nytt fönster"
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "_Öppna album i webbläsaren när sändningen är färdig"
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "_Öppna mål när exporteringen är färdig"
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "_Skala foton till högst: "
+#~ msgid "_Strip metadata"
+#~ msgstr "_Ta bort metadata"
+#~ msgid "_URI:"
+#~ msgstr "_URI:"
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "_Virtuellt filsystem"
+#~ msgid "x"
+#~ msgstr "x"
+#~ msgid "Image Directory"
+#~ msgstr "Bildkatalog"
+#~ msgid "Thumbnail Directory"
+#~ msgstr "Miniatyrbildskatalog"
+#~ msgid "Exif Directory"
+#~ msgstr "Exif-katalog"
+#~ msgid "GPS Directory"
+#~ msgstr "GPS-katalog"
+#~ msgid "InterOperability Directory"
+#~ msgstr "InterOperability-katalog"
+#~ msgid "Unknown Directory"
+#~ msgstr "Okänd katalog"
+#~ msgid "Writing to this file format is not supported"
+#~ msgstr "Skrivning till detta filformat stöds inte"
+#~ msgid "IPTC Information Interchange Model (IIM) Version number"
+#~ msgstr "IPTC Information Interchange Model (IIM) Versionsnummer"
+#~ msgid "OSI Destination routing information"
+#~ msgstr "OSI Destination routing information"
+#~ msgid "IPTC file format"
+#~ msgstr "IPTC-filformat"
+#~ msgid "Identifies the provider and product"
+#~ msgstr "Identifierar leverantör och produkt"
+#~ msgid "A unique number identifying the envelope"
+#~ msgstr "Ett unikt nummer som identifierar kuvertet"
+#~ msgid "A unique number"
+#~ msgstr "Ett unikt nummer"
+#~ msgid ""
+#~ "The envelope handling priority between 1 (most urgent) and 9 (least "
+#~ "urgent)"
+#~ msgstr ""
+#~ "Kuverthanteringens prioritet, mellan 1 (mest brådskande) och 9 (minst "
+#~ "brådskande)"
+#~ msgid "The year, month and day (CCYYMMDD) the service sent the material"
+#~ msgstr "Det år, månad och dag (CCÅÅMMDD) som tjänsten skickade materialet"
+#~ msgid "The hour, minute and second (HHMMSS) the service sent the material"
+#~ msgstr ""
+#~ "Den timme, minut och sekund (HHMMSS) som tjänsten skickade materialet"
+#~ msgid "The character set designation"
+#~ msgstr "Teckenuppsättningens beteckning"
+#~ msgid "External globally unique object identifier"
+#~ msgstr "Extern globalt unik objektidentifierare"
+#~ msgid "Abstract Relationship Method (ARM) identifier"
+#~ msgstr "Identifierare för Abstract Relationship Method (ARM)"
+#~ msgid "Abstract Relationship Method (ARM) version number."
+#~ msgstr "Versionsnummer för Abstract Relationship Method (ARM)."
+#~ msgid "Number identifying the IIM version this application record uses"
+#~ msgstr "Nummer som identifierar IIM-versionen som detta objekt använder"
+#~ msgid "Object type reference"
+#~ msgstr "Objekttypreferens"
+#~ msgid "Object attribute reference"
+#~ msgstr "Objektattributreferens"
+#~ msgid "Object name"
+#~ msgstr "Objektnamn"
+#~ msgid "Status of the objectdata according to the provider"
+#~ msgstr "Status för objektdata enligt leverantören"
+#~ msgid "Location within a city or area where the object originates"
+#~ msgstr "Plats inom en stad eller område där objektet har sitt ursprung"
+#~ msgid "Name of the city the content is focussing on"
+#~ msgstr "Namn på staden innehållet fokuserar på"
+#~ msgid "Copyright information for"
+#~ msgstr "Copyright-information för"
+#~ msgid "Full name of the country of the focus of the content"
+#~ msgstr "Hela namnet på landet som står i fokus för innehållet"
+#~ msgid ""
+#~ "Two or three letter ISO3166 code of the country of the focus of the "
+#~ "content"
+#~ msgstr ""
+#~ "Två eller tre teckens ISO3166-kod för landet som står i fokus för "
+#~ "innehållet"
+#~ msgid "Creator of the content"
+#~ msgstr "Skapare av innehållet"
+#~ msgid "Provider of the object"
+#~ msgstr "Leverantör av objektet"
+#~ msgid "The title of the author or creator"
+#~ msgstr "Titeln på upphovsmannen eller skaparen"
+#~ msgid ""
+#~ "The person involved in writing, editing or correcting the object data or "
+#~ "caption/abstract"
+#~ msgstr ""
+#~ "Personen inblandad i skrivandet, redigerandet, eller korrekturen för "
+#~ "objektdata eller rubrik/sammandrag"
+#~ msgid "Headline of the content"
+#~ msgstr "Rubrik för innehållet"
+#~ msgid ""
+#~ "Instructions from the creator to the receiver not covered by other fields"
+#~ msgstr ""
+#~ "Instruktioner från upphovsmannen till mottagaren som inte täckts av "
+#~ "övriga fält"
+#~ msgid "Intellectual genre of the object"
+#~ msgstr "Intellektuell genre för objektet"
+#~ msgid "Unknown IIM DataSet"
+#~ msgstr "Okänt IIM DataSet"
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "Läser in {0} av {1}"
+#~ msgid "Done Loading"
+#~ msgstr "Inläsningen är färdig"
+#~ msgid "Directory does not exist."
+#~ msgstr "Katalogen finns inte."
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist.  Please choose a "
+#~ "different directory"
+#~ msgstr "Katalogen du valde \"{0}\" finns inte. Välj en annan katalog"
+#~ msgid "No cameras detected."
+#~ msgstr "Inga kameror hittades"
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system.  Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "F-Spot kunde inte hitta några kameror anslutna till detta system.  "
+#~ "Kontrollera att kameran är ansluten och att den har ström"
+#~ msgid "Error connecting to camera"
+#~ msgstr "Fel vid anslutning till kamera"
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Tog emot fel \"{0}\" vid anslutning till kamera"
+#~ msgid "Creator"
+#~ msgstr "Upphovsman"
+#~ msgid "Title"
+#~ msgstr "Titel"
+#~ msgid "Copyright"
+#~ msgstr "Copyright"
+#~ msgid "Subject and Keywords"
+#~ msgstr "Ämne och nyckelord"
+#~ msgid "Compression"
+#~ msgstr "Komprimering"
+#~ msgid "Planar Configuration"
+#~ msgstr "Planär inställning"
+#~ msgid "Orientation"
+#~ msgstr "Orientering"
+#~ msgid "Photometric Interpretation"
+#~ msgstr "Fotometrisk tolkning"
+#~ msgid "Resolution Unit"
+#~ msgstr "Upplösningsenhet"
+#~ msgid "Exposure Program"
+#~ msgstr "Exponeringsprogram"
+#~ msgid "Metering Mode"
+#~ msgstr "Exponeringsmätningsläge"
+#~ msgid "Exposure Mode"
+#~ msgstr "Exponeringsläge"
+#~ msgid "Custom Rendered"
+#~ msgstr "Renderat på anpassat sätt"
+#~ msgid "Components Configuration"
+#~ msgstr "Komponentinställningar"
+#~ msgid "Light Source"
+#~ msgstr "Ljuskälla"
+# detta kan vara "Exponeringsmätning. "
+# hittade inte var strängen förkommer.
+#~ msgid "Sensing Method"
+#~ msgstr "Avkänningsmetod"
+#~ msgid "Color Space"
+#~ msgstr "Färgrymd"
+#~ msgid "White Balance"
+#~ msgstr "Vitbalans"
+#~ msgid "Focal Plane Resolution Unit"
+#~ msgstr "Fokalplanets upplösningsenhet"
+#~ msgid "File Source Type"
+#~ msgstr "Filens källtyp"
+#~ msgid "Scene Capture Type"
+#~ msgstr "Typ av scenfångst"
+#~ msgid "Gain Control"
+#~ msgstr "Förstärkningskontroll"
+#~ msgid "Contrast"
+#~ msgstr "Kontrast"
+#~ msgid "Saturation"
+#~ msgstr "Mättnad"
+#~ msgid "Sharpness"
+#~ msgstr "Skärpa"
+#~ msgid "Scene Type"
+#~ msgstr "Scentyp"
+#~ msgid "Could not create a new version"
+#~ msgstr "Kunde inte skapa en ny version"
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "Tog emot undantag \"{0}\". Kunde inte skapa version \"{1}\""
+#~ msgid "Really Delete?"
+#~ msgstr "Vill du verkligen ta bort?"
+#~ msgid "Cancel"
+#~ msgstr "Avbryt"
+#~ msgid "Could not delete a version"
+#~ msgstr "Kunde inte ta bort en version"
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "Tog emot undantag \"{0}\". Kunde inte ta bort version \"{1}\""
+#~ msgid "Could not rename a version"
+#~ msgstr "Kunde inte byta namn på en version"
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr "Tog emot undantag \"{0}\". Kunde inte byta namn på version \"{1}\""
+#~ msgid "Comment:"
+#~ msgstr "Kommentar:"
+#~ msgid "<small></small>"
+#~ msgstr "<small></small>"
+#~ msgid "Photo 0 of 0"
+#~ msgstr "Foto 0 av 0"
+#~ msgid "Unable to create temporary file"
+#~ msgstr "Kunde inte skapa tillfällig fil"
+#~ msgid "No Extended Metadata Available"
+#~ msgstr "Ingen utökad metadata tillgänglig"
+#~ msgid "Country"
+#~ msgstr "Land"
+#~ msgid "City"
+#~ msgstr "Stad"
+#~ msgid "State"
+#~ msgstr "Region/Län"
 #~ msgid "Edit Selected Tag..."
 #~ msgstr "Redigera markerad tagg..."
 #~ msgid "_Edit Selected Tag..."
@@ -4097,7 +4097,6 @@ msgstr "Foton från F-Spot"
 #~ msgstr "Försök att använda systemets visningsprofil"
 #~ msgid "Write _metadata to file"
 #~ msgstr "Skriv _metadata till fil"
-
 # FIXME: Kolla denna
 #~ msgid "_Print output:"
 #~ msgstr "S_kriv ut utdata:"
@@ -4398,8 +4397,6 @@ msgstr "Foton från F-Spot"
 #~ msgstr "Storlek för miniat_yrbilder"
 #~ msgid "Miniatures can be generated from the current main view"
 #~ msgstr "Miniatyrbilder kan genereras från den aktuella huvudvyn"
-#~ msgid "Size of the miniatures composing the mosaic"
-#~ msgstr "Storlek för miniatyrbilderna i mosaiken"
 #, fuzzy
 #~ msgid "_Current query"
 #~ msgstr "Aktuellt datum:"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index f779b8d..3659be1 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -1,561 +1,1673 @@
-# 简体中文翻译.
+# f-spot 的简体中文翻译.
 # Copyright (C) 2003-2005 Novell Inc.
+# Copyright (C) 2008, 2010 Free Software Foundation, Inc.
 # This file is distributed under the same license as the PACKAGE package.
 # Funda Wang <fundawang at linux.net.cn>, 2004, 2006.
 # Yao Hui <gsling_ at 126.com>, 2005.
 # Aron Xu <aronmalache at 163.com>, 2008.
 # 甘露(Gan Lu) <rhythm.gan at gmail.com>, 2008
+# Maonx <lovemaonx at gmail.com>, 2010
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: f-spot 5.0.3\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-10-20 09:12+0000\n"
-"PO-Revision-Date: 2008-10-25 19:15+0700\n"
-"Last-Translator: 甘露(Gan Lu) <rhythm.gan at gmail.com>\n"
-"Language-Team: \n"
+"Project-Id-Version: f-spot master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
+"spot&component=General\n"
+"POT-Creation-Date: 2010-07-23 08:12+0000\n"
+"PO-Revision-Date: 2010-07-30 19:34+0800\n"
+"Last-Translator: maonx <lovemaonx at gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh at googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:62
-msgid "Version:"
-msgstr "版本:"
+#: ../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"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:65
-msgid "Author:"
-msgstr "作者:"
+#: ../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 照片管理器"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:68
-msgid "Copyright:"
-msgstr "版权"
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "组织、欣赏及共享您的照片"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:71
-msgid "Extension Dependencies:"
-msgstr "扩展的依赖关系:"
+#: ../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 "照片管理器"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:97
-msgid "All registered repositories"
-msgstr "所有注册过的软件库"
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "导入到 F-Spot"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:184
-msgid "Are you sure you want to cancel the installation?"
-msgstr "你确认你想取消本次安装吗?"
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-Spot 照片查看器"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:308
-msgid "The following packages will be uninstalled:"
-msgstr "下列软件包将被卸载:"
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "照片查看器"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:313
-msgid "There are other extensions that depend on the previous ones which will also be uninstalled:"
-msgstr "依赖于前面扩展的一些扩展也将被卸载:"
+#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
+msgid "_CD..."
+msgstr "CD(_C)..."
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:384
-msgid "The selected extensions can't be installed because there are dependency conflicts."
-msgstr "因为依赖冲突,选定的扩展无法安装。"
+#: ../extensions/Exporters/CDExport/CDExport.cs:155
+msgid "Transferring Pictures"
+msgstr "传送图片"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:398
-msgid "The following packages will be installed:"
-msgstr "下列软件包将被安装:"
+#: ../extensions/Exporters/CDExport/CDExport.cs:208
+#, csharp-format
+msgid "Transferring picture \"{0}\" To CD"
+msgstr "传送图片 {0} 到光盘"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:402
-msgid " (in user directory)"
-msgstr "(在用户目录中)"
+#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
+#: ../extensions/Exporters/CDExport/CDExport.cs:210
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:360
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:209
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:773
+#: ../src/MainWindow.cs:645 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
+#, csharp-format
+msgid "{0} of {1}"
+msgstr "{0}/{1}"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:408
-msgid "The following packages need to be uninstalled:"
-msgstr "下列软件包也需要卸载:"
+#: ../extensions/Exporters/CDExport/CDExport.cs:223
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:378
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:390
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:696
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
+msgid "Done Sending Photos"
+msgstr "发送照片完成"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:416
-msgid "The following dependencies could not be resolved:"
-msgstr "无法解决下列依赖关系:"
+#: ../extensions/Exporters/CDExport/CDExport.cs:225
+msgid "Transfer Complete"
+msgstr "传输完毕"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:441
-msgid "The installation has been successfully completed."
-msgstr "安装成功完成。"
+#: ../extensions/Exporters/CDExport/CDExport.cs:232
+msgid "Error While Transferring"
+msgstr "传送时出错"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:442
-msgid "The installation failed!"
-msgstr "安装失败!"
+#: ../extensions/Exporters/CDExport/CDExport.cs:240
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:266
+msgid "Error Transferring"
+msgstr "传送出错"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:443
-msgid "The installation has completed with warnings."
-msgstr "安装完成但有警告信息。"
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
+msgid "copying..."
+msgstr "正在复制..."
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:446
-msgid "The uninstallation has been successfully completed."
-msgstr "卸载成功完成。"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:1
+#, fuzzy
+#| msgid "<b><i>There is some previously scheduled items to write</i></b>"
+msgid "<b><i>There are some previously scheduled items to write</i></b>"
+msgstr "<b><i>有一些预定的项目要写入</i></b>"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:447
-msgid "The uninstallation failed!"
-msgstr "卸载失败!"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:2
+msgid "<b>Photos to Burn</b>"
+msgstr "<b>要刻录照片</b>"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:448
-msgid "The uninstallation has completed with warnings."
-msgstr "卸载完成但有警告信息。"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:3
+msgid "Create CD"
+msgstr "创建光盘"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:616
-msgid "Repository"
-msgstr "软件库"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
+#: ../src/Widgets/InfoBox.cs:221
+msgid "Size"
+msgstr "大小"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstaller.cs:16
-msgid "Installation cancelled"
-msgstr "安装已取消"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
+msgid "Size of the exported selection:"
+msgstr "要导出的选定的大小:"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:159
-msgid "Some of the required extensions were not found"
-msgstr "一些要求的扩展没有找到"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
+msgid "_Browse Previously Scheduled Files"
+msgstr "浏览之前预定的文件(_B)"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:171
-msgid "Installation failed"
-msgstr "安装失败"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
+#: ../src/ui/single_view.ui.h:12
+msgid "_Export"
+msgstr "导出(_E)"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:91
-msgid "Extension"
-msgstr "扩展"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
+msgid "_Write only these photos to CD"
+msgstr "仅写入这些照片到光盘(_W)"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:112
-#: ../src/Widgets/InfoBox.cs:211
-msgid "Version"
-msgstr "版本"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.addin.xml.h:1
+msgid "F_acebook..."
+msgstr "Facebook(_a)..."
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:168
-msgid "Other"
-msgstr "其他"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
+#, fuzzy
+#| msgid "Waiting for authentication"
+msgid "Waiting for authorization"
+msgstr "正在等待验证"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:51
-#: ../src/Widgets/InfoBox.cs:208
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:9
-msgid "Name"
-msgstr "名称"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:101
+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 ""
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:52
-msgid "Url"
-msgstr "Url"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
+msgid "Too many images to export"
+msgstr "太多图像要导出了"
 
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:61
-#: ../mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:70
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:283
+#, fuzzy, csharp-format
+#| msgid ""
+#| "Facebook only permits 60 photographs per album.  Please refine your "
+#| "selection and try again."
+msgid ""
+"Facebook only permits {0} photographs per album.  Please refine your "
+"selection and try again."
+msgstr "Facebook 仅允许每个相册60张照片。请重新选择后再试。"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
+msgid "Album must have a name"
+msgstr "相册必须有个名字"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:299
+msgid "Please name your album or choose an existing album."
+msgstr "请为你的画册取个名字或选择一个现存的画册。"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
+msgid "Creating a new album failed"
+msgstr "创建新相册失败"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:314
 #, csharp-format
-msgid "Exception occurred: {0}"
-msgstr "发生例外:{0}"
+msgid ""
+"An error occurred creating a new album.\n"
+"\n"
+"{0}"
+msgstr ""
+"创建新相册时发生错误。\n"
+"\n"
+"{0}"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInfoDialog.cs:32
-msgid "Package"
-msgstr "软件包"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:327
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:486
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:726
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:593
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:515
+msgid "Uploading Pictures"
+msgstr "正在上传图片"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:110
-msgid "Extension Installation"
-msgstr "扩展安装"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:355
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:652
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:554
+#, csharp-format
+msgid "Uploading picture \"{0}\" ({1} of {2})"
+msgstr "上传图片 \"{0}\" (第 {1} 张,共 {2} 张)"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:136
-msgid "<b>Select the extensions to install and click on Next</b>"
-msgstr "选择要安装的扩展,单击下一步"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#, csharp-format
+msgid "Error Uploading To Facebook: {0}"
+msgstr "上传到 Facebook 时出错:{0}"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:150
-msgid "Install from:"
-msgstr "安装自:"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:215
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:789
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:685
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:585
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
+msgid "Error"
+msgstr "错误"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:179
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:180
-msgid "_Repositories..."
-msgstr "软件库(_R)"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:800
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:698
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:598
+msgid "Upload Complete"
+msgstr "上传完毕"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:220
-msgid "Show all packages"
-msgstr "显示所有软件包"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:383
+msgid "Visit F-Spot group on Facebook"
+msgstr "浏览 Facebook 上的 F-Spot 小组"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:221
-msgid "Show new versions only"
-msgstr "仅显示新版本"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
+msgid "Waiting for authentication"
+msgstr "正在等待验证"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:222
-msgid "Show updates only"
-msgstr "仅显示更新"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:214
+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 ""
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:247
-msgid "_Unselect All"
-msgstr "全部不选(_U)"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:219
+msgid "Authenticating..."
+msgstr "认证中..."
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:259
-#: ../src/f-spot.glade.h:153
-msgid "Select _All"
-msgstr "全部选中(_A)"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
+msgid "Error logging into Facebook"
+msgstr "登录到 Facebook 时出错"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:334
-msgid "label124"
-msgstr "标签124"
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:346
-msgid "Overall Progress:"
-msgstr "全部过程:"
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:374
-msgid "Downloading extensions..."
-msgstr "正在下载扩展..."
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:36
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:58
-msgid "Extension Manager"
-msgstr "扩展管理器"
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:54
-msgid "Additional extensions are required to perform this operation."
-msgstr "执行该操作需要额外的扩展。"
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:64
-msgid "The following extensions will be installed:"
-msgstr "下列扩展将被安装:"
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:90
-msgid "<big><b>Extension Manager</b></big>"
-msgstr "<big><b>扩展管理器</b></big>"
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:110
-msgid "The following extensions are currently installed:"
-msgstr "当前已安装下列扩展:"
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:165
-msgid "_Install Extensions..."
-msgstr "安装扩展(_I)..."
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:210
-msgid "_Uninstall..."
-msgstr "卸载(_U)..."
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:236
-#: ../src/f-spot.glade.h:89
-msgid "Enable"
-msgstr "启用"
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:262
-msgid "Disable"
-msgstr "禁用"
-
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:40
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:249
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:799
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:544
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:595
-#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:176
-msgid "Error"
-msgstr "错误"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:230
+msgid ""
+"There was a problem logging into Facebook.  Check your credentials and try "
+"again."
+msgstr "登录到 Facebook 遇到一个问题。请检查你的用户名和密码后再试。"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:239
+#, fuzzy
+#| msgid "Authorize"
+msgid "Authorizing Session"
+msgstr "授权"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:248
+msgid "Session established, fetching user info..."
+msgstr "已建立会话,正在获取用户信息"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:254
+msgid "Session established, fetching friend list..."
+msgstr "已建立会话,正在获取朋友列表"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:264
+msgid "Session established, fetching friend details..."
+msgstr "已建立会话,正在获取朋友详细数据"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:276
+msgid "Session established, fetching photo albums..."
+msgstr "会话已建立,正在获取照片集..."
+
+#. Note for translators: {0} and {1} are respectively firstname and surname of the user
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:286
+#, csharp-format
+msgid "{0} {1} is logged into Facebook"
+msgstr "{0} {1} 已登录到 Facebook"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
+msgid "Facebook Connection Error"
+msgstr "Facebook 连接错误"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:296
+#, csharp-format
+msgid ""
+"There was an error when downloading your information from Facebook.\n"
+"\n"
+"Facebook said: {0}"
+msgstr ""
+"从Facebook 下载你的信息时发生了一个错误。\n"
+"\n"
+" Facebook提示:{0}"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:325
+msgid "You are not logged in."
+msgstr "你还未登录。"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:1
+msgid "Auto-confirm Photos"
+msgstr "自动确定照片"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:2
+msgid "Caption"
+msgstr "标题"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:3
+msgid "Create a new album"
+msgstr "创建一个新画册"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:4
+msgid "Description"
+msgstr "描述"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:5
+msgid "Export to Facebook"
+msgstr "导出到 Facebook"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:6
+msgid "In this photo"
+msgstr "在本照片中"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:7
+msgid "Location"
+msgstr "位置"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:8
+msgid "Login"
+msgstr "登录"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:9
+msgid "Logout"
+msgstr "注销"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
+#: ../src/Widgets/InfoBox.cs:212
+msgid "Name"
+msgstr "名称"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:11
+#, fuzzy
+#| msgid "You are not logged in."
+msgid "Not logged in"
+msgstr "你还未登录。"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:12
+#, fuzzy
+#| msgid "Version:"
+msgid "Permissions:"
+msgstr "版本:"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:13
+#, fuzzy
+#| msgid "(Not Connected)"
+msgid "Stay Connected"
+msgstr "(没有连接)"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:14
+msgid "Use an existing album"
+msgstr "使用现存的相册"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:111
-msgid "Details"
-msgstr "细节"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:15
+msgid "Who is this?"
+msgstr "这是谁?"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ManageSitesDialog.cs:34
-msgid "Extension Repository Management"
-msgstr "扩展软件库管理"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:1
+msgid "_23hq..."
+msgstr "23hq(_2)..."
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:52
-msgid "Add New Repository"
-msgstr "添加新的软件库"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:2
+msgid "_Flickr..."
+msgstr "Flickr(_F)..."
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:70
-msgid "Select the location of the repository you want to register:"
-msgstr "选择您想要注册的软件库位置:"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:3
+msgid "_Zooomr..."
+msgstr "Zooomr(_Z)..."
 
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:77
-msgid "Register an on-line repository"
-msgstr "注册为在线软件库"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:107
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
+msgid "Authorize"
+msgstr "授权"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:106
-msgid "Url:"
-msgstr "Url:"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
+#, csharp-format
+msgid ""
+"Return to this window after you have finished the authorization process on "
+"{0} and click the \"Complete Authorization\" button below"
+msgstr ""
 
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:127
-msgid "Register a local repository"
-msgstr "注册一个本地软件库"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:114
+msgid "Complete Authorization"
+msgstr "完成验证"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:155
-msgid "Path:"
-msgstr "路径:"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
+#, csharp-format
+msgid "Logging into {0}"
+msgstr "正在登录到 {0}"
 
-#: ../mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:179
-msgid "Browse..."
-msgstr "浏览..."
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:120
+msgid "Checking credentials..."
+msgstr "正在检查凭证..."
 
-#: ../mono-addins/Mono.Addins/Mono.Addins.Description/AssemblyDependency.cs:79
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:127
 #, csharp-format
-msgid "(provided by {0})"
-msgstr "(由 {0} 提供)"
+msgid "Welcome {0} you are connected to {1}"
+msgstr "欢迎 {0} ,你已经连接到 {1}"
 
-#: ../mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:154
-msgid "Disabled extensions can't be loaded."
-msgstr "无法载入已禁用的扩展。"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:130
+#, csharp-format
+msgid "Sign in as a different user"
+msgstr "作为另外的用户登录"
 
-#: ../mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:179
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:135
 #, csharp-format
-msgid "Loading {0} extension"
-msgstr "正在载入 {0} 扩展"
+msgid "Used {0} of your allowed {1} monthly quota"
+msgstr "已使用 {0} ,每月共允许 {1} 配额"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:239
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:308
+msgid "Unable to log on"
+msgstr "无法登录"
 
-#: ../mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:265
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:328
 #, csharp-format
-msgid "The required extension '{0}' is disabled."
-msgstr "需要的扩展 '{0}' 目前被禁用。"
+msgid "Waiting for response {0} of {1}"
+msgstr "正在等待响应 {0},共 {1}"
 
-#: ../mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:267
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:355
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:769
 #, csharp-format
-msgid "The required extension '{0}' is not installed."
-msgstr "需要的扩展 '{0}' 目前没有安装。"
+msgid "Uploading picture \"{0}\""
+msgstr "正在上传图片 \"{0}\""
 
-#: ../f-spot-view.desktop.in.in.h:1
-msgid "F-Spot Photo Viewer"
-msgstr "F-Spot 照片查看器"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:378
+#, csharp-format
+msgid "Error Uploading To {0}: {1}"
+msgstr "上传到 {0} 时出错:{1}"
 
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "Photo Viewer"
-msgstr "照片查看器"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:465
+msgid "Unable to log on."
+msgstr "无法登录。"
 
-#: ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot.desktop.in.in.h:1
-msgid "F-Spot Photo Manager"
-msgstr "F-Spot 照片管理器"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:466
+#, 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 ""
+"F-Spot 无法登录到 {0}。请确认你已经通过 {0} 的网络浏览器界面获得了授权。"
 
-#: ../f-spot-import.desktop.in.in.h:2
-msgid "Import into F-Spot"
-msgstr "导入到 F-Spot"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
+msgid "<b>Account</b>"
+msgstr "<b>账户</b>"
 
-#: ../f-spot-import.desktop.in.in.h:3
-#: ../f-spot.desktop.in.in.h:3
-msgid "Photo Manager"
-msgstr "照片管理器"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5 ../src/ui/mail_dialog.ui.h:6
+msgid "<b>Photos</b>"
+msgstr "<b>照片</b>"
 
-#: ../f-spot.desktop.in.in.h:2
-msgid "Organize, enjoy, and share your photos"
-msgstr "组织、欣赏及共享您的照片"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
+msgid "<b>Style</b>"
+msgstr "<b>样式</b>"
 
-#: ../libeog/eog-image.c:773
-#, c-format
-msgid "No image loaded."
-msgstr "未装入图像。"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:4
+msgid "<b>Viewing permissions</b>"
+msgstr "<b>查看权限</b>"
 
-#: ../libeog/eog-image.c:780
-#, c-format
-msgid "Can't save non local files."
-msgstr "无法保存非本地文件。"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
+msgid "Export"
+msgstr "导出"
 
-#: ../libeog/eog-image.c:803
-#, c-format
-msgid "Unsupported image type for saving."
-msgstr "不支持保存的图像类型。"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:7
+msgid "Export tag _hierarchy"
+msgstr "导出标记层次(_h)"
 
-#: ../libeog/image-view.c:2128
-msgid "interpolation type"
-msgstr "插值类型"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.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 需要你的授权以能够上传照片到你的 {0} 账户。按下 \"授权\" 按钮以打开网"
+"络浏览器并给与 F-Spot 授权。"
 
-#: ../libeog/image-view.c:2129
-msgid "the type of interpolation to use"
-msgstr "使用的插值类型"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:9
+msgid "Ignore _top level tags"
+msgstr "忽略顶层的标记(_t)"
 
-#: ../libeog/image-view.c:2135
-#: ../libeog/image-view.c:2142
-msgid "check type"
-msgstr "检查类型"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:10
+msgid "Private"
+msgstr "私人的"
 
-#: ../libeog/image-view.c:2136
-msgid "the type of chequering to use"
-msgstr "要使用的格子类型"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:11
+msgid "Public"
+msgstr "公开的"
 
-#: ../libeog/image-view.c:2143
-msgid "the size of chequers to use"
-msgstr "要使用的格子大小"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:12
+msgid "Strip _metadata"
+msgstr "去除元数据(_m)"
 
-#: ../libeog/image-view.c:2149
-msgid "dither"
-msgstr "抖动"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:13
+msgid "Visible to Family"
+msgstr "家人可见"
 
-#: ../libeog/image-view.c:2150
-msgid "dither type"
-msgstr "抖动类型"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:14
+msgid "Visible to Friends"
+msgstr "朋友可见"
 
-#: ../libfspot/f-jpeg-utils.c:445
-#: ../src/RotateCommand.cs:222
-msgid "File not found"
-msgstr "文件未找到"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
+msgid "_Export tags"
+msgstr "导出标记(_E)"
 
-#: ../libfspot/f-jpeg-utils.c:468
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "未知变形类型 %d"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+msgid "_Resize to: "
+msgstr "调整大小到(_R):"
 
-#: ../libfspot/f-jpeg-utils.c:476
-msgid "Operation failed"
-msgstr "操作失败"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:18
+msgid "_View photos in browser when done uploading"
+msgstr "完成上载后在浏览器中查看(_V)"
 
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "预览"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+msgid "pixels"
+msgstr "像素"
 
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "路径"
+#: ../extensions/Exporters/FolderExport/FolderExport.addin.xml.h:1
+msgid "F_older..."
+msgstr "文件夹(_o)..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:117
+msgid "Select Export Folder"
+msgstr "选择导出文件夹"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:169
+msgid "Building Gallery"
+msgstr "正在建立图库"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:206
+#, fuzzy, csharp-format
+#| msgid "Exporting picture \"{0}\""
+msgid "Exporting \"{0}\"..."
+msgstr "导出图片 \"{0}\""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:213
+#, fuzzy, csharp-format
+#| msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "上传图片 \"{0}\" 到图库出错:{2}{1}"
 
-#: ../src/CameraFileSelectionDialog.cs:80
-#: ../src/f-spot.glade.h:95
-msgid "File"
-msgstr "文件"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:239
+#, fuzzy, csharp-format
+#| msgid "Transferring picture \"{0}\" To CD"
+msgid "Transferring to \"{0}\""
+msgstr "传送图片 \"{0}\" 到光盘"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:240
+#, fuzzy
+#| msgid "Error Transferring"
+msgid "Transferring..."
+msgstr "传送出错"
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#, fuzzy
+#| msgid "Upload Complete"
+msgid "Export Complete."
+msgstr "上传完毕"
 
-#: ../src/CameraFileSelectionDialog.cs:82
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:992
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1233
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:247
+msgid "Exporting Photos Completed."
+msgstr "导出照片完成。"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:312
+#, fuzzy
+#| msgid "Export to"
+msgid "Exporting Photos"
+msgstr "导出到"
+
+#. Note for translators: light as clear, opposite as dark
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:716
+msgid "Light"
+msgstr "亮"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
+msgid "Dark"
+msgstr "黑"
+
+#. Abbreviation of previous
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:897
+msgid "Prev"
+msgstr "预览"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:899
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
 msgid "Index"
 msgstr "索引"
 
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "选择标记"
+#. Don't care otherwise, Tags sounds reasonable
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:902
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1074
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1114
+#: ../src/MainWindow.cs:349 ../src/Widgets/Sidebar.cs:56
+msgid "Tags"
+msgstr "标记"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:905
+#: ../src/ItemAction.cs:102
+msgid "Next"
+msgstr "下一张"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1009
+msgid "Gallery generated by"
+msgstr "图库生成由"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1049
+msgid "Show Styles"
+msgstr "显示风格"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
+msgid "Hide Styles"
+msgstr "隐藏风格"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1085
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1086
+#: ../src/ui/main_window.ui.h:24
+msgid "Tags: "
+msgstr "标记:"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1350
+msgid "Page:"
+msgstr "页面:"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
+msgid "<b>Destination</b>"
+msgstr "<b>目的</b>"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:2
+msgid "<b>Export Method</b>"
+msgstr "<b>导出方式</b>"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
+msgid "Create _gallery using \"Original\""
+msgstr "使用 \"Original\" 创建画库(_g)"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
+msgid "Create standalone _web gallery"
+msgstr "创建独立的网络画库(_w)"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
+msgid "D_escription:"
+msgstr "描述(_e):"
 
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "正下载预览"
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
+msgid "Export _tags"
+msgstr "导出标记(_t)"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
+msgid "Export tag _icons"
+msgstr "导出标记图标(_i)"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
+msgid "Folder Export"
+msgstr "文件夹导出"
 
-#: ../src/CameraFileSelectionDialog.cs:148
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
+msgid "G_allery Name:"
+msgstr "图库名(_a):"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
+msgid "Open _destination when done exporting"
+msgstr "导出完毕时打开目的地(_d)"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
+msgid "_Folder:"
+msgstr "文件夹(_F):"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
+msgid "_Save the files only"
+msgstr "仅保存文件(_S)"
+
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "无法处理的异常"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
+msgid "Web _Gallery..."
+msgstr "网络图库(_G)..."
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:54
+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 ""
+"无法连接到未知版本的某个画库。\n"
+"请检查你装有 Remote 插件 1.0.8 或更高版本"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
+msgid "Invalid URL"
+msgstr "无效的 URL"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:393
+msgid "The gallery URL entry does not appear to be a valid URL"
+msgstr "该画库的 URL 地址不像是有效的 URL 地址。"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
+msgid "Error while connecting to Gallery"
+msgstr "连接到画库时出错"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:404
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:431
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:442
 #, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "下载 {0} 预览"
+msgid "The following error was encountered while attempting to log in: {0}"
+msgstr "尝试登录时遇到下列错误:{0}"
 
-#: ../src/CameraFileSelectionDialog.cs:199
-#: ../extensions/Exporters/CDExport/CDExport.cs:342
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:391
-msgid "Transferring Pictures"
-msgstr "传送图片"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
+msgid "A Gallery with this name already exists"
+msgstr "已存在同名画库"
 
-#: ../src/CameraFileSelectionDialog.cs:220
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:419
 #, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "正复制{1}个文件中的第{0}个"
+msgid ""
+"There is already a Gallery with the same name in your registered Galleries. "
+"Please choose a unique name."
+msgstr "在你登记的画库中已存在同名画库。请选择某个唯一的名称。"
 
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "传送文件出错"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:529
+msgid "(TopLevel)"
+msgstr "(最顶层)"
 
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "复制文件完毕"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
+msgid "Invalid Gallery name"
+msgstr "无效的图库名"
 
-#: ../src/CameraFileSelectionDialog.cs:246
-msgid "Download Complete"
-msgstr "下载完成"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:592
+msgid ""
+"The gallery name contains invalid characters.\n"
+"Only letters, numbers, - and _ are allowed"
+msgstr ""
+"图库名字包含无效的字符。\n"
+"仅允许字母,数字,- 和 _ 。"
 
-#: ../src/CameraFileSelectionDialog.cs:271
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:788
 #, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "从相机传送“{0}”"
+msgid "Error uploading picture \"{0}\" to Gallery: {1}"
+msgstr "上传图片 \"{0}\" 到画库时出错:{1}"
 
-#: ../src/CameraSelectionDialog.cs:29
-#: ../src/Widgets/InfoBox.cs:227
-msgid "Camera"
-msgstr "相机"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:816
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:714
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:614
+msgid "(No Gallery)"
+msgstr "(无图库)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:908
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:836
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:710
+msgid "(Not Connected)"
+msgstr "(没有连接)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:909
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:837
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:711
+msgid "(No Albums)"
+msgstr "(无画册)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:961
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:902
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:752
+msgid "No account selected"
+msgstr "没有账户选定"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
+msgid "<b>Album</b>"
+msgstr "<b>相册</b>"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
+msgid "<b>Gallery</b>"
+msgstr "<b>图库</b>"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:5
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:5
+msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
+msgstr "<span weight='bold' size='larger'>连接到画库时出错</span>\n"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
+msgid "Export _titles and comments"
+msgstr "导出标题和注释(_t)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
+msgid "Open _album in browser when done uploading"
+msgstr "上传完毕时在浏览器中打开画册(_a)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
+msgid "Please verify that the settings for this gallery are correct."
+msgstr "请确认该画库的设定是正确的。"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
+msgid "U_RL:"
+msgstr "URL(_R):"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
+msgid "_Album Name:"
+msgstr "相册名(_A):"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
+msgid "_Description:"
+msgstr "描述(_D):"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
+msgid "_Export to Album:"
+msgstr "导出到画册(_E):"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
+msgid "_Gallery Name:"
+msgstr "图库名(_G):"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
+msgid "_Gallery:"
+msgstr "图库(_G):"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
+msgid "_Parent Album:"
+msgstr "上层相册(_P):"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
+msgid "_Password:"
+msgstr "密码(_P):"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
+msgid "_Title:"
+msgstr "标题(_T):"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
+msgid "_Username:"
+msgstr "用户名(_U):"
+
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:363
+msgid "Error reading server response"
+msgstr "读取服务器响应时出错"
+
+#. failed to find the response
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:375
+msgid "Server returned response without Gallery content"
+msgstr "服务器返回响应但没有画库内容"
 
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "端口"
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
+msgid "Error while creating new album"
+msgstr "创建新画册时出现错误"
 
-#: ../src/Core.cs:200
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:713
+#, csharp-format
+msgid ""
+"The following error was encountered while attempting to perform the "
+"requested operation:\n"
+"{0} ({1})"
+msgstr ""
+"当尝试执行要求的操作时遇到下列错误:\n"
+"{0} ({1})"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml.h:1
+msgid "_PicasaWeb..."
+msgstr "_PicasaWeb..."
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:444
+msgid "Error while creating Album"
+msgstr "创建专辑时出错"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:445
+#, csharp-format
+msgid ""
+"The following error was encountered while attempting to create an album: {0}"
+msgstr "当尝试创建画册时遇到下列错误:{0}"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:615
+#, csharp-format
+msgid "{0} Sent"
+msgstr "{0} 已发送"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:617
+#, csharp-format
+msgid "{0} of approx. {1}"
+msgstr "第 {0},总共约 {1}"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:683
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:583
+#, csharp-format
+msgid "Error Uploading To Gallery: {0}"
+msgstr "上传到图库时出错:{0}"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:765
+#, csharp-format
+msgid "Available space: {0}, {1}% used out of {2}"
+msgstr ""
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:878
+#, fuzzy, csharp-format
+#| msgid ""
+#| "<small>The selected album has a limit of {0} pictures,\n"
+#| "which would be passed with the current selection of {1} images</small>"
+msgid ""
+"The selected album has a limit of {0} pictures,\n"
+"which would be passed with the current selection of {1} images"
+msgstr ""
+"<small>选定的画册限于 {0} 张图片。\n"
+"当前选定的图像将超过 {1} 张图像</small>"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:3
+msgid "<b>PicasaWeb Export</b>"
+msgstr "<b>PicasaWeb 导出</b>"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:7
+msgid ""
+"<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
+msgstr ""
+"<span weight='bold' size='larger'>你的谷歌(Google)账户已被锁定</span>\n"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:12
+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 ""
+"请确认图库的设置是正确的。\n"
+" 输入在图片”Captcha“域中显示的字符。<i>字母不区分大小写</i>"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
+msgid "Public Album"
+msgstr "公开相册"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
+msgid "_Album Title:"
+msgstr "相册标题(_A):"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
+msgid "_Captcha:"
+msgstr "个人头像(_C):"
+
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.addin.xml.h:1
+msgid "_SmugMug..."
+msgstr "SmugMug(_S)..."
+
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:3
+msgid "<b>SmugMug Export</b>"
+msgstr "<b>SmugMug 导出</b>"
+
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
+msgid "_Account:"
+msgstr "账户(_A):"
+
+#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:132
+#, csharp-format
+msgid "Uploading photo \"{0}\""
+msgstr "正在上传照片 \"{0}\""
+
+#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:206
+msgid "Logging into Tabblo"
+msgstr "正在登录到 Tabblo"
+
+#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:267
+msgid "Obtaining URL for upload"
+msgstr "正在获取上传的 URL 地址"
+
+#: ../extensions/Exporters/TabbloExport/TabbloExport.addin.xml.h:1
+msgid "_Tabblo..."
+msgstr "Tabblo(_T)..."
+
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:308
+msgid "Done sending photos"
+msgstr "发送照片完毕"
+
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:310
+msgid "Upload complete"
+msgstr "上传完毕"
+
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:316
+msgid "Error uploading to Tabblo: "
+msgstr "上传到 Tabblo 时出错:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:1
+#, fuzzy
+#| msgid "<b>Import Settings</b>"
+msgid "<b>F-Spot tags</b>"
+msgstr "<b>导入设定</b>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:3
+msgid "<b>Tabblo account</b>"
+msgstr "<b>Tabblo 账户</b>"
+
+#: ../extensions/Exporters/TabbloExport/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 ""
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:6
+msgid "Rem_ove from exported photos:"
+msgstr "从导出照片中删除(_O):"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
+#, fuzzy
+#| msgid "Select a Tag..."
+msgid "Select..."
+msgstr "选择一个标记..."
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
+msgid "_Attach to exported photos:"
+msgstr "附加到输出的照片(_A)"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
+msgid "A trust error occured while attempting to access"
+msgstr "当尝试访问时发生一个信任错误"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
+msgid "Abort this session"
+msgstr "放弃本次进程"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+msgid "Always trust this site's certificate"
+msgstr "永远信任该网站的证书"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+msgid "Do you wish to:"
+msgstr "你希望到:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+msgid "Trust Error"
+msgstr "信任错误"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+msgid "Trust the site's certificate this once"
+msgstr "本次信任该网站的证书"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
+msgid "Compressed fil_e..."
+msgstr "压缩文件(_e)..."
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../src/Widgets/EditorPage.cs:199
+msgid "No selection available"
+msgstr "没有选中范围"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:49
+msgid ""
+"This tool requires an active selection. Please select one or more pictures "
+"and try again"
+msgstr "此工具需要一个现有的选中范围。请先选中一个或多个图片后再试"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:65
+msgid "Select export folder"
+msgstr "选择导出文件夹"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:103
+msgid "Exporting files"
+msgstr "正在导出文件"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:109
+#, csharp-format
+msgid "Preparing photo \"{0}\""
+msgstr "正在准备照片 \"{0}\""
+
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
+msgid "_Create"
+msgstr "创建(_C)"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:2
+msgid "_File name:"
+msgstr "文件名(_F):"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:3
+msgid "_Location:"
+msgstr "位置(_L):"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:4
+msgid "_Scale:"
+msgstr "缩放(_S):"
+
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+#, fuzzy
+#| msgid "Detect duplicates"
+msgid "Check for Duplicates..."
+msgstr "探测重复的图片"
+
+#: ../extensions/Tools/HashJob/HashJob.cs:54
+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 ""
+
+#: ../extensions/Tools/HashJob/HashJob.cs:60
+#, csharp-format
+msgid ""
+"You currently have {0} photos needing md5 calculation, and {1} pending jobs"
+msgstr "你目前有{0}张照片需要md5验证,和{1}待执行任务"
+
+#: ../extensions/Tools/HashJob/HashJob.cs:76 ../src/ui/main_window.ui.h:37
+msgid "_Close"
+msgstr "关闭(_C)"
+
+#: ../extensions/Tools/HashJob/HashJob.cs:103
+#, fuzzy
+#| msgid "Error processing image"
+msgid "Processing images..."
+msgstr "处理图像时出错"
+
+#: ../extensions/Tools/HashJob/HashJob.cs:109
+msgid "Stopped"
+msgstr "停止"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
+#, fuzzy
+#| msgid "(No Gallery)"
+msgid "F-Spot Gallery"
+msgstr "(无图库)"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:108
+msgid "The web gallery seems to be offline now"
+msgstr "网络图库现在看起来是离线"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:109
+#, fuzzy
+#| msgid "Show Styles"
+msgid "Show All"
+msgstr "显示风格"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:119
+#, fuzzy, csharp-format
+#| msgid "{0} Photo"
+#| msgid_plural "{0} Photos"
+msgid "{0} photo"
+msgid_plural "{0} photos"
+msgstr[0] "{0} 照片"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:161
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:8
+#, fuzzy
+#| msgid "Current date:"
+msgid "Current View"
+msgstr "当前日期:"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:164
+#, fuzzy
+#| msgid "Delete"
+msgid "Selected"
+msgstr "删除"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml.h:1
+#, fuzzy
+#| msgid "Web _Gallery..."
+msgid "Live Web Gallery"
+msgstr "网络图库(_G)..."
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:90
+#, fuzzy
+#| msgid "(None)"
+msgid "none"
+msgstr "(无)"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:93
+#, fuzzy, csharp-format
+msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
+msgstr "图库:{0},照片:{1},最新客户端:{3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:157
+#, fuzzy
+#| msgid "Gallery generated by"
+msgid "Gallery is inactive"
+msgstr "图库不活动"
+
+#: ../extensions/Tools/LiveWebGallery/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 ""
+
+#: ../extensions/Tools/LiveWebGallery/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 ""
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:5
+msgid "Activates and deactivates the web gallery"
+msgstr "激活和撤消网络图库"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:6
+msgid "Allow viewers to add tags"
+msgstr "允许查看者增加标签"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:7
+msgid "Copy URL to clipboard"
+msgstr "复制网址到剪贴板"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:9
+msgid "F-Spot Live Web Gallery"
+msgstr "F-Spot 在线网络图库"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:10
+#, fuzzy
+#| msgid "G_allery:"
+msgid "Gallery URL:"
+msgstr "图库(_A):"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:11
+msgid "Limit number of shared photos to"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
+#, fuzzy
+#| msgid "C_aption:"
+msgid "Options:"
+msgstr "标题(_A):"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:13
+#, fuzzy
+#| msgid "Photos per page"
+msgid "Photos with a Tag"
+msgstr "每页照片数"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:14
+#, fuzzy
+#| msgid "_Delete photo"
+#| msgid_plural "_Delete photos"
+msgid "Selected Photos"
+msgstr "删除照片(_D)"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:15
+#, fuzzy
+#| msgid "Sharpen"
+msgid "Share:"
+msgstr "锐化"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:16
+#, fuzzy
+#| msgid "View"
+msgid "Views:"
+msgstr "查看"
+
+#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
+msgid "Merge Db"
+msgstr "合并数据库"
+
+#: ../extensions/Tools/MergeDb/MergeDb.cs:74
+msgid "Error opening the selected file"
+msgstr "打开选定文件时出错"
+
+#: ../extensions/Tools/MergeDb/MergeDb.cs:75
+#, csharp-format
+msgid ""
+"The file you selected is not a valid or supported database.\n"
+"\n"
+"Received exception \"{0}\"."
+msgstr ""
+"你选定的文件是无效或不支持的数据库。n\n"
+"收到例外 \"{0}\"。"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:1
+msgid ""
+"<small><i>Choose the location of the database you want to import from</i></"
+"small>"
+msgstr "<small><i>选择你想导入的数据库位置</i></small>"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.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 ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.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 ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:7
+msgid "A Single Import Roll"
+msgstr "单一导入清单"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:8
+msgid "Copy images to photos folder"
+msgstr "复制图像到照片文件夹"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:9
+msgid "Database Location:"
+msgstr "数据库位置:"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:10
+msgid "Everything"
+msgstr "所有东西"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:11
+msgid "Import:"
+msgstr "导入:"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:12
+msgid "Keep the images at their original location"
+msgstr "将图像保持在原位置"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:13
+#, fuzzy
+#| msgid "Merge another f-spot collection"
+msgid "Merge another F-Spot collection"
+msgstr "合并另外的 f-spot 收藏"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:14
+msgid "New Rolls Only"
+msgstr "仅新清单"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
+msgid "Skip"
+msgstr "跳过"
+
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
+#, 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 ""
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfig.addin.xml.h:1
+msgid "Configure Screensaver"
+msgstr "设置屏幕保护程序"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
+#: ../src/UI.Dialog/DateRangeDialog.cs:120
+msgid "All Images"
+msgstr "所有图片"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:2
+#, fuzzy
+#| msgid "_Display:"
+msgid "Delay:"
+msgstr "显示(_D):"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:3
+#, fuzzy
+#| msgid "_Display:"
+msgid "Display:"
+msgstr "显示(_D):"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:4
+msgid "Images tagged with:"
+msgstr "图像标记为:"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:5
+#, fuzzy
+#| msgid "Make F-Spot your screensaver"
+msgid "Make F-Spot my screensaver"
+msgstr "将 F-Spot 设为您的屏幕保护程序"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:6
+#, fuzzy
+#| msgid "Planar Configuration"
+msgid "Screensaver Configuration"
+msgstr "平面配置"
+
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "显示透明部分。"
+
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "启用缩放图片时允许插值。"
+
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "导入对话框的高度。"
+
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "主窗口的高度。"
+
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "照片查看窗口的高度。"
+
+#: ../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 "如果设置了”透明“选项,查看图片时在这个选项指定的颜色将显示为透明色。"
+
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "最大化主窗口。"
+
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "最大化照片查看窗口。"
+
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "查看缩略图时显示日期。"
+
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "查看缩略图时显示等级。"
+
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "查看缩略图时显示标签。"
+
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "在查看窗口显示文件名。"
+
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "在主窗口显示幻灯片。"
+
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "在主窗口显示侧边栏。"
+
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "在主窗口显示时间轴。"
+
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "在主窗口显示工具栏。"
+
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "在照片查看窗口显示工具栏。"
+
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "在侧边栏显示标签图标的大小。"
+
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "用于主窗口的 X 坐标。"
+
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "用于照片查看窗口的 X 坐标。"
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "用于主窗口的 Y 坐标。"
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "用于照片查看窗口的 Y 坐标。"
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "用于透明部分的颜色。"
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "放映时,幻灯片方向。"
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "幻灯片方向。"
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "主窗口侧边栏大小(宽度)。"
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "主窗口侧边栏大小。"
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "用当前照片的文件名作为查看窗口的标题。"
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "导入对话框宽度。"
+
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "主窗口宽度。"
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "照片查看窗口宽度。"
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "在导入对话框中预览图片的宽度。"
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "主窗口的 X 坐标。"
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "照片查看窗口的 X 坐标。"
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "主窗口的 Y 坐标。"
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "照片查看窗口的 Y 坐标。"
+
+#: ../f-spot.schemas.in.h:45
+#, fuzzy
+#| 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>"
+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 ""
+"<small><i>你能选择如何显示图片的透明部分。这个选项对于照片没有映像,但当查看"
+"图标或有透明部分的图片时,设定这个作为检查模板或自定义颜色可能有用。</i></"
+"small>"
+
+#: ../src/Core/App.cs:290
 #, csharp-format
 msgid "No photos matching {0} found"
 msgstr "未找到与 {0} 匹配的照片"
 
-#: ../src/Core.cs:201
+#: ../src/Core/App.cs:291
 #, 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 "标记“{0}”未应用于任何照片。请试着将此标记添加到一些照片上,或者在 F-Spot 首选项对话框中选择不同的标记。"
+msgstr ""
+"标记“{0}”未应用于任何照片。请试着将此标记添加到一些照片上,或者在 F-Spot 首选"
+"项对话框中选择不同的标记。"
 
-#: ../src/Core.cs:205
+#: ../src/Core/App.cs:295
 msgid "Search returned no results"
 msgstr "搜索没有返回结果"
 
-#: ../src/Core.cs:206
+#: ../src/Core/App.cs:296
 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 "F-Spot 正在查找的标记不存在。请试着在 F-Spot 首选项对话框中选择不同的标记。"
+msgstr ""
+"F-Spot 正在查找的标记不存在。请试着在 F-Spot 首选项对话框中选择不同的标记。"
 
 #. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:482
+#: ../src/Core/Photo.cs:405
 msgid "Reparented"
 msgstr ""
 
-#: ../src/Core/Photo.cs:482
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr ""
-
-#: ../src/Core/Photo.cs:501
+#: ../src/Core/Photo.cs:422
 #, csharp-format
 msgid "Modified"
 msgid_plural "Modified ({0})"
 msgstr[0] "已修改({0})"
 
-#: ../src/Core/Photo.cs:520
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1}"
 msgstr "已在 {1} 修改"
 
-#: ../src/Core/Photo.cs:520
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1} ({0})"
 msgstr "已在 {1} 修改 ({0})"
 
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:678
-#: ../src/f-spot.glade.h:132
-msgid "Original"
-msgstr "原始"
-
-#: ../src/DateCommands.cs:57
-msgid "Today"
-msgstr "今日"
-
-#: ../src/DateCommands.cs:59
-msgid "Yesterday"
-msgstr "昨天"
-
-#: ../src/DateCommands.cs:61
-msgid "Last 7 days"
-msgstr "7天前"
-
-#: ../src/DateCommands.cs:63
-msgid "Last 30 days"
-msgstr "30天前"
-
-#: ../src/DateCommands.cs:65
-msgid "Last 90 days"
-msgstr "90天前"
-
-#: ../src/DateCommands.cs:67
-msgid "Last 360 days"
-msgstr "360天前"
-
-#: ../src/DateCommands.cs:69
-msgid "Current Week (Mon-Sun)"
-msgstr "本周(周一到周日)"
-
-#: ../src/DateCommands.cs:71
-msgid "Previous Week (Mon-Sun)"
-msgstr "上周(周一到周日)"
-
-#: ../src/DateCommands.cs:87
-#: ../src/f-spot.glade.h:54
-msgid "All Images"
-msgstr "所有图片"
-
-#: ../src/DateCommands.cs:89
-msgid "Customized Range"
-msgstr "自定范围"
-
 #: ../src/Editors/AutoStretchEditor.cs:17
 msgid "Auto Color"
 msgstr "自动颜色"
@@ -568,43 +1680,43 @@ msgstr "调整颜色"
 msgid "Adjust"
 msgstr "调整"
 
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
 msgid "4 x 3 (Book)"
 msgstr "4 x 3 (书籍)"
 
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
 msgid "4 x 6 (Postcard)"
 msgstr "4 x 6 (明信片)"
 
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
 msgid "5 x 7 (L, 2L)"
 msgstr "5 x 7 (L, 2L)"
 
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
 msgid "8 x 10"
 msgstr "8 x 10"
 
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
 msgid "Square"
 msgstr "方形"
 
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
 msgid "Crop"
 msgstr "裁剪"
 
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
 msgid "Select the area that needs cropping."
 msgstr "选择要裁剪的区域。"
 
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
 msgid "No Constraint"
 msgstr "无对比度"
 
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
 msgid "Same as photo"
 msgstr "与照片相同"
 
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
 msgid "Custom Ratios..."
 msgstr "自定比率..."
 
@@ -628,20 +1740,18 @@ msgstr "选择你希望修补的眼睛。"
 msgid "Sepia Tone"
 msgstr "作旧"
 
-#: ../src/Editors/SoftFocusEditor.cs:28
+#: ../src/Editors/SoftFocusEditor.cs:32
 msgid "Soft Focus"
 msgstr "软对焦"
 
-#: ../src/Editors/TiltEditor.cs:28
+#: ../src/Editors/TiltEditor.cs:30
 msgid "Straighten"
 msgstr "平直"
 
-#: ../src/Extensions/OpenWithMenu.cs:93
-msgid "No applications available"
-msgstr "无可用的应用程序"
-
 #: ../src/FSpot.addin.xml.h:1
-msgid "Copy Photo Locat_ion"
+#, fuzzy
+#| msgid "Copy Photo Locat_ion"
+msgid "Copy Photo"
 msgstr "复制照片位置(_i)"
 
 #: ../src/FSpot.addin.xml.h:2
@@ -652,20 +1762,17 @@ msgstr "导出到"
 msgid "Open _With"
 msgstr "打开方式(_W)"
 
-#: ../src/FSpot.addin.xml.h:4
-#: ../src/f-spot.glade.h:146
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
 msgid "Rem_ove Tag"
 msgstr "删除标记(_O)"
 
-#: ../src/FSpot.addin.xml.h:5
-#: ../src/SingleView.cs:438
-#: ../src/f-spot.glade.h:148
+#: ../src/FSpot.addin.xml.h:5 ../src/SingleView.cs:427
+#: ../src/ui/main_window.ui.h:16
 msgid "Rotate _Left"
 msgstr "逆时针旋转(_L)"
 
-#: ../src/FSpot.addin.xml.h:6
-#: ../src/SingleView.cs:439
-#: ../src/f-spot.glade.h:149
+#: ../src/FSpot.addin.xml.h:6 ../src/SingleView.cs:428
+#: ../src/ui/main_window.ui.h:17
 msgid "Rotate _Right"
 msgstr "顺时针旋转(_R)"
 
@@ -673,52 +1780,71 @@ msgstr "顺时针旋转(_R)"
 msgid "Tools"
 msgstr "工具"
 
-#: ../src/FSpot.addin.xml.h:8
-#: ../src/f-spot.glade.h:193
-msgid "_Attach Tag"
-msgstr "附加标记(_A)"
-
-#: ../src/FSpot.addin.xml.h:9
-#: ../src/f-spot.glade.h:205
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:41
 msgid "_Delete From Drive"
 msgstr "从驱动器中删除(_D)"
 
-#: ../src/FSpot.addin.xml.h:10
-#: ../src/f-spot.glade.h:239
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:60
 msgid "_Remove From Catalog"
 msgstr "从编目删除(_R)"
 
-#: ../src/FileImportBackend.cs:286
-msgid "Import error"
-msgstr "导入错误"
+#: ../src/f-spot.glade.h:1
+msgid "<b>Co_rrections</b>"
+msgstr "<b>校正(_R)</b>"
 
-#: ../src/FileImportBackend.cs:287
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "出现错误当导入 {0}{2}{2}{1}"
+#: ../src/f-spot.glade.h:2
+msgid "<b>_White Balance</b>"
+msgstr "<b>白平衡(_W)</b>"
 
-#: ../src/FileImportBackend.cs:288
-#: ../src/ThreadProgressDialog.cs:68
-#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-msgid "Skip"
-msgstr "跳过"
+#: ../src/f-spot.glade.h:3
+msgid "C_ontrast:"
+msgstr "对比度(_O):"
 
-#: ../src/Filters/ResizeFilter.cs:70
-#: ../src/Filters/SharpFilter.cs:52
-#, csharp-format
-msgid "No way to save files of type \"{0}\""
-msgstr "没有办法保存类型为 \"{0}\" 的文件"
+#: ../src/f-spot.glade.h:4
+msgid "Manage your custom selection ratios"
+msgstr "管理你的自定选定比率"
 
-#: ../src/FormClient.cs:297
-msgid "Unhandled exception"
-msgstr "无法处理的异常"
+#: ../src/f-spot.glade.h:5
+msgid "Select a Tag..."
+msgstr "选择一个标记..."
+
+#: ../src/f-spot.glade.h:6
+msgid "Selection Constraints"
+msgstr "选定对比度"
+
+#. Note for translators: meant as Temperature
+#: ../src/f-spot.glade.h:8
+msgid "Te_mp:"
+msgstr "温度(_m):"
+
+#: ../src/f-spot.glade.h:9
+msgid "_Brightness:"
+msgstr "亮度(_B):"
+
+#: ../src/f-spot.glade.h:10
+msgid "_Exposure:"
+msgstr "曝光度(_E):"
+
+#: ../src/f-spot.glade.h:11
+msgid "_Hue:"
+msgstr "色调(_H)"
+
+#: ../src/f-spot.glade.h:12
+msgid "_Saturation:"
+msgstr "饱和度(_S)"
+
+#: ../src/f-spot.glade.h:13
+msgid "_Tint:"
+msgstr "染色(_T)"
 
 #: ../src/FullScreenView.cs:58
 msgid "Hide"
 msgstr "隐藏"
 
 #: ../src/FullScreenView.cs:60
-msgid "Hide Toolbar"
+#, fuzzy
+#| msgid "Hide Toolbar"
+msgid "Hide toolbar"
 msgstr "隐藏工具栏"
 
 #: ../src/FullScreenView.cs:66
@@ -726,975 +1852,588 @@ msgid "Info"
 msgstr "信息"
 
 #: ../src/FullScreenView.cs:68
-#: ../src/Widgets/InfoBox.cs:197
-msgid "Image Information"
+#, fuzzy
+#| msgid "Image Information"
+msgid "Image information"
 msgstr "图片信息"
 
 #: ../src/FullScreenView.cs:73
 msgid "Exit fullscreen"
 msgstr "退出全屏"
 
-#: ../src/FullScreenView.cs:83
-#: ../src/MainWindow.cs:319
-#: ../src/SingleView.cs:97
+#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:314
+#: ../src/SingleView.cs:91
 msgid "Slideshow"
 msgstr "幻灯片"
 
-#: ../src/FullScreenView.cs:84
+#: ../src/FullScreenView.cs:82
 msgid "Start slideshow"
 msgstr "开始幻灯片"
 
-#: ../src/FullScreenView.cs:149
+#: ../src/FullScreenView.cs:128
 msgid "Slide transition:"
 msgstr "幻灯片转换效果:"
 
-#: ../src/GlTransition.cs:36
-msgid "Dissolve"
-msgstr "叠化"
-
-#: ../src/GlTransition.cs:104
-msgid "Flip"
-msgstr "翻转"
-
-#: ../src/GlTransition.cs:147
-msgid "Cover"
-msgstr "覆盖"
-
-#: ../src/GlTransition.cs:174
-msgid "Reveal"
-msgstr "揭开"
-
-#: ../src/GlTransition.cs:201
-msgid "Wipe"
-msgstr "转场"
-
-#: ../src/GlTransition.cs:259
-msgid "Split"
-msgstr "分割"
-
-#: ../src/GlTransition.cs:370
-msgid "Push"
-msgstr "推移"
-
-#: ../src/GroupSelector.cs:57
-#: ../src/GroupSelector.cs:58
+#: ../src/GroupSelector.cs:57 ../src/GroupSelector.cs:58
 msgid "More dates"
 msgstr "更多日期"
 
-#: ../src/GroupSelector.cs:60
-#: ../src/GroupSelector.cs:61
-msgid "More directories"
-msgstr "更多目录"
-
-#: ../src/GroupSelector.cs:63
-#: ../src/GroupSelector.cs:64
+#: ../src/GroupSelector.cs:60 ../src/GroupSelector.cs:61
 msgid "More"
 msgstr "更多"
 
-#: ../src/GroupSelector.cs:515
-msgid "Arrange by _Month"
-msgstr "按月排列(_M)"
-
-#: ../src/GroupSelector.cs:518
-msgid "Arrange by _Folder"
-msgstr "按文件夹排列(_F)"
-
-#: ../src/GroupSelector.cs:523
-#: ../src/f-spot.glade.h:243
-msgid "_Reverse Order"
-msgstr "逆序(_R)"
-
-#: ../src/GroupSelector.cs:529
-#: ../src/f-spot.glade.h:197
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:34
 msgid "_Clear Date Range"
 msgstr "清除日期范围(_C)"
 
-#: ../src/Imaging/Exif.cs:228
-msgid "Image Directory"
-msgstr "图像目录"
-
-#: ../src/Imaging/Exif.cs:230
-msgid "Thumbnail Directory"
-msgstr "缩略图目录"
-
-#: ../src/Imaging/Exif.cs:232
-msgid "Exif Directory"
-msgstr "Exif 目录"
-
-#: ../src/Imaging/Exif.cs:234
-msgid "GPS Directory"
-msgstr "GPS 目录"
-
-#: ../src/Imaging/Exif.cs:236
-msgid "InterOperability Directory"
-msgstr "互操作性目录"
-
-#: ../src/Imaging/Exif.cs:238
-msgid "Unknown Directory"
-msgstr "未知目录"
-
-#: ../src/Imaging/ImageFile.cs:87
-msgid "Writing to this file format is not supported"
-msgstr "无支持写入为该文件格式"
-
-#: ../src/Imaging/IptcFile.cs:145
-msgid "IPTC Information Interchange Model (IIM) Version number"
-msgstr "IPTC 信息互换模式 (IIM) 版本号"
-
-#: ../src/Imaging/IptcFile.cs:147
-msgid "OSI Destination routing information"
-msgstr "OSI 目的路由信息"
-
-#: ../src/Imaging/IptcFile.cs:149
-msgid "IPTC file format"
-msgstr "IPTC 文件格式"
-
-#: ../src/Imaging/IptcFile.cs:151
-msgid "Identifies the provider and product"
-msgstr "标识提供者和产品"
-
-#: ../src/Imaging/IptcFile.cs:153
-msgid "A unique number identifying the envelope"
-msgstr "标识信封的唯一编号"
-
-#: ../src/Imaging/IptcFile.cs:155
-msgid "A unique number"
-msgstr "唯一编号"
-
-#: ../src/Imaging/IptcFile.cs:157
-msgid "The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
-msgstr "信封处理优先性在1 (最紧急) 和9 (最不紧急) 之间"
-
-#: ../src/Imaging/IptcFile.cs:159
-msgid "The year, month and day (CCYYMMDD) the service sent the material"
-msgstr "年,月,日 (CCYYMMDD) "
-
-#: ../src/Imaging/IptcFile.cs:161
-msgid "The hour, minute and second (HHMMSS) the service sent the material"
-msgstr "小时,分钟,秒 (HHMMSS) "
-
-#: ../src/Imaging/IptcFile.cs:163
-msgid "The character set designation"
-msgstr "字符集识别"
-
-#: ../src/Imaging/IptcFile.cs:165
-msgid "External globally unique object identifier"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:170
-msgid "Abstract Relationship Method (ARM) identifier"
-msgstr "抽象关系方式 (ARM) 识别"
-
-#: ../src/Imaging/IptcFile.cs:172
-msgid "Abstract Relationship Method (ARM) version number."
-msgstr "抽象关系方式 (ARM) 版本号"
-
-#: ../src/Imaging/IptcFile.cs:175
-msgid "Number identifying the IIM version this application record uses"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:177
-msgid "Object type reference"
-msgstr "对象类型参考"
-
-#: ../src/Imaging/IptcFile.cs:182
-msgid "Object attribute reference"
-msgstr "对象属性参考"
-
-#: ../src/Imaging/IptcFile.cs:188
-#: ../src/Imaging/IptcFile.cs:192
-msgid "Object name"
-msgstr "对象名称"
-
-#: ../src/Imaging/IptcFile.cs:190
-msgid "Status of the objectdata according to the provider"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:194
-msgid "Location within a city or area where the object originates"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:197
-msgid "Name of the city the content is focussing on"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:200
-msgid "Copyright information for"
-msgstr "版权信息"
-
-#: ../src/Imaging/IptcFile.cs:203
-msgid "Full name of the country of the focus of the content"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:206
-msgid "Two or three letter ISO3166 code of the country of the focus of the content"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:209
-msgid "Creator of the content"
-msgstr "内容创建者"
-
-#: ../src/Imaging/IptcFile.cs:212
-msgid "Provider of the object"
-msgstr "对象提供者"
-
-#: ../src/Imaging/IptcFile.cs:215
-msgid "The title of the author or creator"
-msgstr "作者或创建者的头衔"
-
-#: ../src/Imaging/IptcFile.cs:218
-msgid "The person involved in writing, editing or correcting the object data or caption/abstract"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:222
-msgid "Headline of the content"
-msgstr "目录头条"
-
-#: ../src/Imaging/IptcFile.cs:225
-msgid "Instructions from the creator to the receiver not covered by other fields"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:228
-msgid "Intellectual genre of the object"
-msgstr ""
-
-#: ../src/Imaging/IptcFile.cs:241
-msgid "Unknown IIM DataSet"
-msgstr "未知的 IIM 数据集"
-
-#: ../src/ImportCommand.cs:49
-#: ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "选择文件夹"
-
-#: ../src/ImportCommand.cs:261
-msgid "(No Cameras Detected)"
-msgstr "(未检测到相机)"
-
-#: ../src/ImportCommand.cs:406
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "正装入{1}个文件中的第{0}个"
-
-#: ../src/ImportCommand.cs:472
-msgid "Done Loading"
-msgstr "装入完毕"
-
-#: ../src/ImportCommand.cs:670
-msgid "Directory does not exist."
-msgstr "目录不存在。"
-
-#: ../src/ImportCommand.cs:671
-#, csharp-format
-msgid "The directory you selected \"{0}\" does not exist.  Please choose a different directory"
-msgstr "你选择的目录“{0}”不存在,请选择一个不同的目录"
-
-#. Note for translators: 'Import Tags' is no command, it means 'Tags used in Import'
-#: ../src/ImportCommand.cs:724
-#: ../src/ImportCommand.cs:726
-#: ../src/XmpTagsImporter.cs:88
-msgid "Import Tags"
+#: ../src/Import/ImportController.cs:468 ../src/Import/ImportController.cs:470
+#: ../src/Import/MetadataImporter.cs:50
+#, fuzzy
+#| msgid "Import Tags"
+msgid "Imported Tags"
 msgstr "导入标记"
 
-#: ../src/ItemAction.cs:81
-#: ../src/MainWindow.cs:286
-#: ../src/SingleView.cs:80
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:281 ../src/SingleView.cs:74
 msgid "Rotate Left"
 msgstr "向左旋转"
 
-#: ../src/ItemAction.cs:82
+#: ../src/ItemAction.cs:80
 msgid "Rotate picture left"
 msgstr "向左旋转图片"
 
-#: ../src/ItemAction.cs:93
-#: ../src/MainWindow.cs:290
-#: ../src/SingleView.cs:85
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:285 ../src/SingleView.cs:79
 msgid "Rotate Right"
 msgstr "向右旋转"
 
-#: ../src/ItemAction.cs:94
+#: ../src/ItemAction.cs:92
 msgid "Rotate picture right"
 msgstr "向右旋转图片"
 
-#: ../src/ItemAction.cs:104
-#: ../src/f-spot.glade.h:121
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:998
-msgid "Next"
-msgstr "下一张"
-
-#: ../src/ItemAction.cs:105
+#: ../src/ItemAction.cs:103
 msgid "Next picture"
 msgstr "下一张图片"
 
-#: ../src/ItemAction.cs:126
-#: ../src/f-spot.glade.h:142
+#: ../src/ItemAction.cs:123
 msgid "Previous"
 msgstr "后退"
 
-#: ../src/ItemAction.cs:127
+#: ../src/ItemAction.cs:124
 msgid "Previous picture"
 msgstr "上一张图片"
 
-#: ../src/Loupe.cs:60
-msgid "Error saving sharpened photo"
-msgstr "保存锐化后图像错误"
-
-#: ../src/Loupe.cs:61
-#: ../src/PhotoView.cs:166
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
+#: ../src/Jobs/SyncMetadataJob.cs:73
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "收到异常“{0}”。无法保存照片 {1}"
-
-#: ../src/Loupe.cs:90
-msgid "Sharpen"
-msgstr "锐化"
-
-#: ../src/Loupe.cs:100
-msgid "Amount:"
-msgstr "数量:"
-
-#: ../src/Loupe.cs:101
-msgid "Radius:"
-msgstr "半径:"
-
-#: ../src/Loupe.cs:102
-msgid "Threshold:"
-msgstr "阀值:"
+msgid ""
+"Metadata of file {0} may be corrupt, refusing to write to it, falling back "
+"to XMP sidecar."
+msgstr ""
 
-#: ../src/MainWindow.cs:279
-#: ../src/f-spot.glade.h:111
+#: ../src/MainWindow.cs:274 ../src/UI.Dialog/ImportDialog.cs:193
+#: ../src/ui/import.ui.h:4
 msgid "Import"
 msgstr "导入"
 
-#: ../src/MainWindow.cs:281
+#: ../src/MainWindow.cs:276
 msgid "Import new images"
 msgstr "导入新图像"
 
-#: ../src/MainWindow.cs:297
-#: ../src/f-spot.glade.h:62
+#: ../src/MainWindow.cs:292 ../src/ui/main_window.ui.h:3
 msgid "Browse"
 msgstr "浏览"
 
-#: ../src/MainWindow.cs:301
+#: ../src/MainWindow.cs:296
 msgid "Browse many photos simultaneously"
 msgstr "同时浏览多张照片"
 
-#: ../src/MainWindow.cs:305
+#: ../src/MainWindow.cs:300
 msgid "Edit Image"
 msgstr "编辑图像"
 
-#: ../src/MainWindow.cs:309
+#: ../src/MainWindow.cs:304
 msgid "View and edit a photo"
 msgstr "查看并编辑照片"
 
-#: ../src/MainWindow.cs:314
-#: ../src/SingleView.cs:92
+#: ../src/MainWindow.cs:309 ../src/SingleView.cs:86
 msgid "Fullscreen"
 msgstr "全屏"
 
-#: ../src/MainWindow.cs:316
-#: ../src/SingleView.cs:94
+#: ../src/MainWindow.cs:311 ../src/SingleView.cs:88
 msgid "View photos fullscreen"
 msgstr "全屏查看照片"
 
-#: ../src/MainWindow.cs:321
-#: ../src/SingleView.cs:99
+#: ../src/MainWindow.cs:316 ../src/SingleView.cs:93
 msgid "View photos in a slideshow"
 msgstr "以幻灯片方式查看照片"
 
-#: ../src/MainWindow.cs:336
+#: ../src/MainWindow.cs:331
 msgid "Previous photo"
 msgstr "上张照片"
 
-#: ../src/MainWindow.cs:341
+#: ../src/MainWindow.cs:336
 msgid "Next photo"
 msgstr "下张照片"
 
-#. Don't care otherwise, Tags sounds reasonable
-#: ../src/MainWindow.cs:354
-#: ../src/Widgets/Sidebar.cs:73
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:995
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1207
-msgid "Tags"
-msgstr "标记"
-
-#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-#: ../src/MainWindow.cs:662
-#: ../src/ProgressDialog.cs:82
-#: ../src/TimeDialog.cs:143
-#: ../extensions/Exporters/CDExport/CDExport.cs:221
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:244
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:783
-#, csharp-format
-msgid "{0} of {1}"
-msgstr "{0}/{1}"
-
-#: ../src/MainWindow.cs:1671
-msgid "No cameras detected."
-msgstr "未检测到相机。"
-
-#: ../src/MainWindow.cs:1672
-msgid "F-Spot was unable to find any cameras attached to this system.  Double check that the camera is connected and has power"
-msgstr "F-Spot 无法找到任何连接至系统的相机,请确保相机已经连接并且有电"
-
-#: ../src/MainWindow.cs:1712
-msgid "Error connecting to camera"
-msgstr "连接到相机出错"
+#: ../src/MainWindow.cs:413
+msgid "Show _Find Bar"
+msgstr "显示查找栏(_F)"
 
-#: ../src/MainWindow.cs:1713
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "当连接至相机时收到错误“{0}”"
+#: ../src/MainWindow.cs:416
+msgid "Hide _Find Bar"
+msgstr "隐藏查找栏(_F)"
 
 #. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:2058
+#: ../src/MainWindow.cs:1724
 #, csharp-format
 msgid "Merge the selected tag"
 msgid_plural "Merge the {0} selected tags?"
 msgstr[0] "合并{0}个选中的标记吗?"
 
-#: ../src/MainWindow.cs:2085
-msgid "This operation will merge the selected tags and any sub-tags into a single tag."
+#: ../src/MainWindow.cs:1751
+msgid ""
+"This operation will merge the selected tags and any sub-tags into a single "
+"tag."
 msgstr "此操作将把选中的标记与其子标记合并到单一的标记中。"
 
-#: ../src/MainWindow.cs:2087
+#: ../src/MainWindow.cs:1753
 msgid "_Merge Tags"
 msgstr "合并标记(_M)"
 
-#: ../src/MainWindow.cs:2292
+#: ../src/MainWindow.cs:1958
 #, csharp-format
 msgid "{0} Photo out of {1}"
 msgid_plural "{0} Photos out of {1}"
 msgstr[0] "第{0}张照片,共{1}张"
 
-#: ../src/MainWindow.cs:2294
-#: ../src/SingleView.cs:481
+#: ../src/MainWindow.cs:1960 ../src/SingleView.cs:469
 #, csharp-format
 msgid "{0} Photo"
 msgid_plural "{0} Photos"
 msgstr[0] "{0} 照片"
 
-#: ../src/MainWindow.cs:2297
+#: ../src/MainWindow.cs:1963
 #, csharp-format
 msgid " ({0} selected)"
 msgid_plural " ({0} selected)"
 msgstr[0] " ({0} 已选定)"
 
-#: ../src/MainWindow.cs:2378
+#: ../src/MainWindow.cs:2044
 msgid "_Ok"
 msgstr "确定(_O)"
 
-#: ../src/MainWindow.cs:2379
+#: ../src/MainWindow.cs:2045
 msgid "Error Deleting Picture"
 msgstr "删除图片出错"
 
-#: ../src/MainWindow.cs:2384
+#: ../src/MainWindow.cs:2050
 #, csharp-format
 msgid "No permission to delete the file:{1}{0}"
 msgstr "没有权限删除该文件:{1}{0}"
 
-#: ../src/MainWindow.cs:2388
+#: ../src/MainWindow.cs:2054
 #, csharp-format
 msgid "An error of type {0} occurred while deleting the file:{2}{1}"
 msgstr "删除该文件时遇到一个 {0} 类型的错误:{2}{1}"
 
-#: ../src/MainWindow.cs:2414
+#: ../src/MainWindow.cs:2086
 #, csharp-format
 msgid "Delete the selected photo permanently?"
 msgid_plural "Delete the {0} selected photos permanently?"
 msgstr[0] "永久删除选中的{0}张照片吗?"
 
-#: ../src/MainWindow.cs:2418
+#: ../src/MainWindow.cs:2090
 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."
+msgid_plural ""
+"This deletes all versions of the selected photos from your drive."
 msgstr[0] "这将从您的驱动器删除选中照片的全部版本。"
 
-#: ../src/MainWindow.cs:2421
+#: ../src/MainWindow.cs:2093
 msgid "_Delete photo"
 msgid_plural "_Delete photos"
 msgstr[0] "删除照片(_D)"
 
-#: ../src/MainWindow.cs:2451
+#: ../src/MainWindow.cs:2129
 #, csharp-format
 msgid "Remove the selected photo from F-Spot?"
 msgid_plural "Remove the {0} selected photos from F-Spot?"
 msgstr[0] "从 F-Spot 中删除选中的 {0} 照片吗?"
 
-#: ../src/MainWindow.cs:2456
-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 "如果你将照片从 F-Spot 编目中删除,其所有的标记信息都将丢失。仍存在于你的计算机中的照片可以被再次导入到 F-Spot 。"
+#: ../src/MainWindow.cs:2134
+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 ""
+"如果你将照片从 F-Spot 编目中删除,其所有的标记信息都将丢失。仍存在于你的计算"
+"机中的照片可以被再次导入到 F-Spot 。"
 
-#: ../src/MainWindow.cs:2457
+#: ../src/MainWindow.cs:2135
 msgid "_Remove from Catalog"
 msgstr "从编目删除(_R)"
 
-#: ../src/MainWindow.cs:2520
+#: ../src/MainWindow.cs:2209
 #, csharp-format
 msgid "Delete tag \"{0}\"?"
 msgstr "删除标记“{0}”吗?"
 
-#: ../src/MainWindow.cs:2522
+#: ../src/MainWindow.cs:2211
 #, csharp-format
 msgid "Delete the {0} selected tags?"
 msgstr "删除{0}个选中的标记吗?"
 
-#: ../src/MainWindow.cs:2527
+#: ../src/MainWindow.cs:2216
 msgid "photo"
 msgid_plural "photos"
 msgstr[0] "照片"
 
-#: ../src/MainWindow.cs:2529
+#: ../src/MainWindow.cs:2218
 #, 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."
+msgid_plural ""
+"If you delete these tags, the association with {0} {1} will be lost."
 msgstr[0] "如果您删除该(类)标记,与照片的全部关联 {0} {1} 都将丢失。"
 
-#: ../src/MainWindow.cs:2534
+#: ../src/MainWindow.cs:2223
 msgid "_Delete tag"
 msgid_plural "_Delete tags"
 msgstr[0] "删除标记(_D)"
 
 #. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2548
+#: ../src/MainWindow.cs:2237
 msgid "Tag is not empty"
 msgstr "标记非空"
 
-#: ../src/MainWindow.cs:2549
+#: ../src/MainWindow.cs:2238
 #, csharp-format
-msgid "Can not delete tags that have tags within them.  Please delete tags under \"{0}\" first"
+msgid ""
+"Can not delete tags that have tags within them.  Please delete tags under "
+"\"{0}\" first"
 msgstr "无法删除包含子标记的标记。请先删除“{0}”下的子标记"
 
-#: ../src/MainWindow.cs:2992
+#: ../src/MainWindow.cs:2678
 msgid "Rotate selected photo left"
 msgid_plural "Rotate selected photos left"
 msgstr[0] "逆时针旋转选中的照片"
 
-#: ../src/MainWindow.cs:3005
+#: ../src/MainWindow.cs:2691
 msgid "Rotate selected photo right"
 msgid_plural "Rotate selected photos right"
 msgstr[0] "顺时针旋转选中的照片"
 
-#: ../src/MainWindow.cs:3013
+#: ../src/MainWindow.cs:2702
 #, csharp-format
 msgid "Find _Selected Tag"
 msgid_plural "Find _Selected Tags"
 msgstr[0] "查找选中的标记(_S)"
 
-#: ../src/MainWindow.cs:3017
+#: ../src/MainWindow.cs:2706
 #, csharp-format
 msgid "Find Selected Tag _With"
 msgid_plural "Find Selected Tags _With"
 msgstr[0] "查找选中的标记用(_W)"
 
-#: ../src/MainWindow.cs:3055
+#: ../src/MainWindow.cs:2747
 msgid "Create New Version?"
 msgid_plural "Create New Versions?"
 msgstr[0] "创建新版本吗?"
 
-#: ../src/MainWindow.cs:3057
+#: ../src/MainWindow.cs:2749
 #, 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] "在调用 {1} 之前,F-Spot 是否应创建选中照片的新版本,以便保留原始照片?"
-
-#: ../src/MetadataStore.cs:18
-msgid "Creator"
-msgstr "创建者"
-
-#: ../src/MetadataStore.cs:19
-msgid "Title"
-msgstr "标题"
-
-#: ../src/MetadataStore.cs:20
-msgid "Copyright"
-msgstr "版权"
-
-#: ../src/MetadataStore.cs:21
-msgid "Subject and Keywords"
-msgstr "主题和关键字"
-
-#: ../src/MetadataStore.cs:22
-msgid "Compression"
-msgstr "压缩比"
-
-#: ../src/MetadataStore.cs:24
-msgid "Planar Configuration"
-msgstr "平面配置"
-
-#: ../src/MetadataStore.cs:26
-msgid "Orientation"
-msgstr "方向"
-
-#: ../src/MetadataStore.cs:28
-msgid "Photometric Interpretation"
-msgstr "光度解释"
-
-#: ../src/MetadataStore.cs:30
-msgid "Resolution Unit"
-msgstr "分辨率单位"
-
-#: ../src/MetadataStore.cs:32
-msgid "Exposure Program"
-msgstr "曝光程序"
-
-#: ../src/MetadataStore.cs:34
-msgid "Metering Mode"
-msgstr "测光模式"
-
-#: ../src/MetadataStore.cs:36
-msgid "Exposure Mode"
-msgstr "曝光模式"
-
-#: ../src/MetadataStore.cs:38
-msgid "Custom Rendered"
-msgstr "自定渲染"
-
-#: ../src/MetadataStore.cs:40
-msgid "Components Configuration"
-msgstr "组件配置"
-
-#: ../src/MetadataStore.cs:42
-msgid "Light Source"
-msgstr "光源"
-
-#: ../src/MetadataStore.cs:44
-msgid "Sensing Method"
-msgstr "传感方式"
-
-#: ../src/MetadataStore.cs:46
-msgid "Color Space"
-msgstr "色彩空间"
-
-#: ../src/MetadataStore.cs:48
-msgid "White Balance"
-msgstr "白平衡"
-
-#: ../src/MetadataStore.cs:50
-msgid "Focal Plane Resolution Unit"
-msgstr "焦平面分辨率单位"
-
-#: ../src/MetadataStore.cs:52
-msgid "File Source Type"
-msgstr "文件源类型"
-
-#: ../src/MetadataStore.cs:54
-msgid "Scene Capture Type"
-msgstr "场景捕获类型"
-
-#: ../src/MetadataStore.cs:56
-msgid "Gain Control"
-msgstr "增益控制"
-
-#: ../src/MetadataStore.cs:58
-msgid "Contrast"
-msgstr "对比度"
-
-#: ../src/MetadataStore.cs:60
-msgid "Saturation"
-msgstr "饱和度"
-
-#: ../src/MetadataStore.cs:62
-msgid "Sharpness"
-msgstr "锐度"
+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] ""
+"在调用 {1} 之前,F-Spot 是否应创建选中照片的新版本,以便保留原始照片?"
+
+#: ../src/MainWindow.cs:2771
+#, fuzzy
+#| msgid "Version"
+msgid "XCF version"
+msgstr "版本"
 
-#: ../src/MetadataStore.cs:64
-msgid "Scene Type"
-msgstr "场景类型"
+#: ../src/PhotoStore.cs:165 ../src/ui/mail_dialog.ui.h:17
+msgid "Original"
+msgstr "原始"
 
 #. Fixme this should really set parent menu
 #. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
 msgid "(No Tags)"
 msgstr "(无标记)"
 
-#: ../src/PhotoVersionCommands.cs:57
+#: ../src/PhotoVersionCommands.cs:59
 msgid "Create New Version"
 msgstr "创建新版本"
 
-#: ../src/PhotoVersionCommands.cs:58
+#: ../src/PhotoVersionCommands.cs:60
 msgid "Name:"
 msgstr "名称:"
 
-#: ../src/PhotoVersionCommands.cs:62
+#: ../src/PhotoVersionCommands.cs:64
 msgid "Rename Version"
 msgstr "重命名版本"
 
-#: ../src/PhotoVersionCommands.cs:63
+#: ../src/PhotoVersionCommands.cs:65
 msgid "New name:"
 msgstr "新名称:"
 
-#: ../src/PhotoVersionCommands.cs:109
-msgid "Could not create a new version"
-msgstr "无法创建新版本"
-
-#: ../src/PhotoVersionCommands.cs:110
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "收到异常“{0}”。无法创建版本“{1}”"
-
-#: ../src/PhotoVersionCommands.cs:137
-msgid "Really Delete?"
-msgstr "真的删除吗?"
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Cancel"
-msgstr "取消"
-
-#: ../src/PhotoVersionCommands.cs:139
+#: ../src/PhotoVersionCommands.cs:125
 msgid "Delete"
 msgstr "删除"
 
-#: ../src/PhotoVersionCommands.cs:143
+#: ../src/PhotoVersionCommands.cs:126
 #, csharp-format
 msgid "Really delete version \"{0}\"?"
 msgstr "真的要删除版本“{0}”吗?"
 
-#. FIXME show error dialog.
-#: ../src/PhotoVersionCommands.cs:153
-msgid "Could not delete a version"
-msgstr "无法删除版本"
+#: ../src/PhotoVersionCommands.cs:127
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr ""
 
-#: ../src/PhotoVersionCommands.cs:154
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "收到异常“{0}”。无法删除版本“{1}”"
+#: ../src/PhotoVersionCommands.cs:172
+msgid "De_tach"
+msgstr "分离(_T)"
 
-#: ../src/PhotoVersionCommands.cs:195
-msgid "Could not rename a version"
-msgstr "无法重命名版本"
+#: ../src/PhotoVersionCommands.cs:173
+#, fuzzy, csharp-format
+#| msgid "Really delete version \"{0}\"?"
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "真的要删除版本“{0}”吗?"
+
+#: ../src/PhotoVersionCommands.cs:174
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
 
 #: ../src/PhotoVersionCommands.cs:196
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "收到异常“{0}”。无法重命名版本“{1}”"
+#, fuzzy
+#| msgid "Repeat"
+msgid "Re_parent"
+msgstr "重复"
+
+#: ../src/PhotoVersionCommands.cs:197
+#, fuzzy, csharp-format
+#| msgid "Really delete version \"{0}\"?"
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "真的要删除版本“{0}”吗?"
+
+#: ../src/PhotoVersionCommands.cs:200
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+
+#: ../src/PhotoVersionCommands.cs:240
+#, fuzzy, csharp-format
+#| msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgid "Received exception \"{0}\"."
+msgstr "收到异常“{0}”。无法保存照片 {1}"
 
-#: ../src/PhotoVersionMenu.cs:67
-#: ../src/Widgets/InfoBox.cs:546
+#: ../src/PhotoVersionMenu.cs:54 ../src/Widgets/InfoBox.cs:470
 msgid "(No Edits)"
 msgstr "(无编辑)"
 
-#: ../src/PhotoView.cs:165
-#: ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "编辑照片出错"
-
-#: ../src/PhotoView.cs:303
-msgid "Comment:"
-msgstr "注释:"
+#: ../src/PhotoView.cs:336
+#, fuzzy
+#| msgid "D_escription:"
+msgid "Description:"
+msgstr "描述(_e):"
 
-#: ../src/Preferences.cs:161
+#: ../src/Preferences.cs:157
 msgid "Photos"
 msgstr "照片"
 
-#: ../src/PrintOperation.cs:32
+#: ../src/PrintOperation.cs:33
 msgid "Image Settings"
 msgstr "图像设定"
 
-#: ../src/QueryWidget.cs:40
+#: ../src/QueryWidget.cs:55
 msgid "Find: "
 msgstr "查找:"
 
-#: ../src/QueryWidget.cs:45
+#: ../src/QueryWidget.cs:60
 msgid "Untagged photos"
 msgstr "无标记的照片"
 
-#: ../src/QueryWidget.cs:53
+#: ../src/QueryWidget.cs:68
 msgid "Rated photos"
 msgstr "有评分的照片"
 
 #. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:62
+#: ../src/QueryWidget.cs:77
 msgid "Import roll"
 msgstr "导入清单"
 
-#: ../src/QueryWidget.cs:82
+#: ../src/QueryWidget.cs:100
 msgid "Clear search"
 msgstr "清除搜索"
 
-#: ../src/QueryWidget.cs:89
+#: ../src/QueryWidget.cs:107
 msgid "Refresh search"
 msgstr "刷新搜索"
 
-#: ../src/QueryWidget.cs:91
+#: ../src/QueryWidget.cs:110
 msgid "No matching photos found"
 msgstr "未找到匹配的照片"
 
-#: ../src/QueryWidget.cs:128
-msgid "Hide _Find Bar"
-msgstr "隐藏查找栏(_F)"
-
-#: ../src/QueryWidget.cs:134
-msgid "Show _Find Bar"
-msgstr "显示查找栏(_F)"
-
-#: ../src/RotateCommand.cs:94
-#: ../src/RotateCommand.cs:109
+#: ../src/RotateCommand.cs:74
 msgid "Unable to rotate this type of photo"
 msgstr "无法旋转此类照片"
 
-#: ../src/RotateCommand.cs:129
+#: ../src/RotateCommand.cs:93
 msgid "Unable to rotate readonly file"
 msgstr "无法旋转只读文件"
 
-#: ../src/RotateCommand.cs:196
+#: ../src/RotateCommand.cs:156
 msgid "Rotating photos"
 msgstr "旋转照片"
 
-#: ../src/RotateCommand.cs:207
+#: ../src/RotateCommand.cs:167
 #, csharp-format
 msgid "Rotating photo \"{0}\""
 msgstr "旋转照片“{0}”"
 
-#: ../src/RotateCommand.cs:220
+#: ../src/RotateCommand.cs:180
 msgid "Directory not found"
 msgstr "目录未找到"
 
-#: ../src/RotateCommand.cs:240
+#: ../src/RotateCommand.cs:182
+msgid "File not found"
+msgstr "文件未找到"
+
+#: ../src/RotateCommand.cs:200
 #, csharp-format
 msgid "Unable to rotate photo"
 msgid_plural "Unable to rotate {0} photos"
 msgstr[0] "无法旋转{0}张照片"
 
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:202
 #, 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} 张)照片,因为其位于只读文件系统或类似只读光盘的介质上。请检查权限后再试一次。"
-
-#: ../src/RotateCommand.cs:269
+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} 张)照片,因为其位于只读文件系统或类似只读光盘的介质上。请检查权"
+"限后再试一次。"
+
+#: ../src/RotateCommand.cs:229
 #, csharp-format
 msgid "Received error \"{0}\" while attempting to rotate {1}"
 msgstr "试图旋转 {1} 时收到错误“{0}”"
 
-#: ../src/RotateCommand.cs:274
+#: ../src/RotateCommand.cs:234
 msgid "Error while rotating photo."
 msgstr "旋转照片时出现错误。"
 
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:211
 msgid "Preparing email"
 msgstr "正在准备电子邮件"
 
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:255
 #, csharp-format
 msgid "Exporting picture \"{0}\""
 msgstr "导出图片 \"{0}\""
 
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:274
 msgid "Error processing image"
 msgstr "处理图像时出错"
 
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:275
 #, csharp-format
 msgid "An error occured while processing \"{0}\": {1}"
 msgstr "处理文件 \"{0}\" 时发生错误:{1}"
 
 #. Send the mail :)
-#: ../src/SendEmail.cs:330
-msgid "my photos"
-msgstr "我的照片"
+#: ../src/SendEmail.cs:288
+#, fuzzy
+#| msgid "Photos"
+msgid "My Photos"
+msgstr "照片"
 
-#: ../src/SingleView.cs:82
+#: ../src/Sharpener.cs:73
+msgid "Error saving sharpened photo"
+msgstr "保存锐化后图像错误"
+
+#: ../src/Sharpener.cs:74 ../src/UI.Dialog/EditExceptionDialog.cs:27
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "收到异常“{0}”。无法保存照片 {1}"
+
+#: ../src/Sharpener.cs:103
+msgid "Sharpen"
+msgstr "锐化"
+
+#: ../src/Sharpener.cs:113
+msgid "Amount:"
+msgstr "数量:"
+
+#: ../src/Sharpener.cs:114
+msgid "Radius:"
+msgstr "半径:"
+
+#: ../src/Sharpener.cs:115
+msgid "Threshold:"
+msgstr "阀值:"
+
+#: ../src/SingleView.cs:76
 msgid "Rotate photo left"
 msgstr "向左旋转照片"
 
-#: ../src/SingleView.cs:87
+#: ../src/SingleView.cs:81
 msgid "Rotate photo right"
 msgstr "向右旋转照片"
 
-#. Obsolete, remove after db rev4
-#: ../src/SingleView.cs:122
-#: ../src/Widgets/MetadataDisplay.cs:219
-#: ../src/Widgets/MetadataDisplay.cs:221
-#: ../src/f-spot.glade.h:98
+#: ../src/SingleView.cs:118
 msgid "Folder"
 msgstr "文件夹"
 
-#: ../src/SingleView.cs:341
+#: ../src/SingleView.cs:343
 msgid "Open"
 msgstr "打开"
 
-#: ../src/SingleView.cs:441
+#: ../src/SingleView.cs:346
+msgid "Select Folder"
+msgstr "选择文件夹"
+
+#: ../src/SingleView.cs:430
 msgid "Set as Background"
 msgstr "设置为背景"
 
-#: ../src/TagCommands.cs:92
-#: ../src/TagCommands.cs:220
-#: ../src/TagSelectionWidget.cs:512
+#: ../src/TagCommands.cs:116 ../src/TagSelectionWidget.cs:492
+#: ../src/UI.Dialog/EditTagDialog.cs:76
 msgid "This name is already in use"
 msgstr "此名称已使用"
 
-#: ../src/TagCommands.cs:139
+#: ../src/TagCommands.cs:166
 msgid "Create New Tag"
 msgstr "创建新标记"
 
-#: ../src/TagCommands.cs:140
+#: ../src/TagCommands.cs:167
 msgid "Name of New Tag:"
 msgstr "新建标记的名称:"
 
-#: ../src/TagCommands.cs:286
-msgid "Edit Tag"
-msgstr "编辑标记"
-
-#: ../src/TagCommands.cs:287
-msgid "Tag Name:"
-msgstr "标记名称:"
-
-#: ../src/TagCommands.cs:403
-msgid "Unable to load image"
-msgstr "无法载入图像"
-
-#: ../src/TagCommands.cs:404
-#, csharp-format
-msgid "Unable to load \"{0}\" as icon for the tag"
-msgstr "无法载入 \"{0}\" 作为标志的图标"
-
-#: ../src/TagCommands.cs:448
-#, csharp-format
-msgid "Photo {0} of {1}"
-msgstr "第{0}张照片,共{1}张"
-
-#: ../src/TagCommands.cs:478
-#, csharp-format
-msgid "Edit Icon for Tag {0}"
-msgstr "编辑标记 {0} 的图标"
-
-#: ../src/TagCommands.cs:494
-msgid "Select Photo from file"
-msgstr "从文件中选择照片"
-
-#: ../src/TagCommands.cs:517
-#, 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>来自照片</b>\n"
-"你可以使用你库中的任何一张照片作为本标记的图标。\n"
-"但是你必须首先有至少一张照片与该标记相关联。\n"
-"请标记某张照片作为 '{0}' ,然后回到这里用它作为一个图标。"
-
 #: ../src/TagPopup.cs:26
 #, csharp-format
 msgid "Find"
 msgid_plural "Find"
 msgstr[0] "查找"
 
-#: ../src/TagPopup.cs:36
-#: ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
 msgid "Create New Tag..."
 msgstr "创建新标记..."
 
 #: ../src/TagPopup.cs:42
-msgid "Edit Selected Tag..."
-msgstr "编辑选中的标记..."
+#, fuzzy
+#| msgid "Edit Tag"
+msgid "Edit Tag..."
+msgstr "编辑标记"
 
 #: ../src/TagPopup.cs:46
 msgid "Delete Tag"
@@ -1715,2291 +2454,2102 @@ msgstr[0] "删除选中对象的标记"
 msgid "Merge Tags"
 msgstr "合并标记"
 
-#: ../src/TagQueryWidget.cs:32
+#: ../src/TagQueryWidget.cs:34
 #, csharp-format
 msgid "Include Photos Tagged \"{0}\""
 msgstr "包括标记为 \"{0}\" 的照片"
 
-#: ../src/TagQueryWidget.cs:37
+#: ../src/TagQueryWidget.cs:39
 #, csharp-format
 msgid "Exclude Photos Tagged \"{0}\""
 msgstr "不包括标记为 \"{0}\" 的照片"
 
-#: ../src/TagQueryWidget.cs:42
+#: ../src/TagQueryWidget.cs:44
 msgid "Remove From Search"
 msgstr "从搜索中删除"
 
-#: ../src/TagQueryWidget.cs:86
+#: ../src/TagQueryWidget.cs:88
 #, csharp-format
 msgid "Find _With"
 msgid_plural "Find _With"
 msgstr[0] "查找方式(_W)"
 
-#: ../src/TagQueryWidget.cs:112
+#: ../src/TagQueryWidget.cs:114
 msgid "All"
 msgstr "全部"
 
-#: ../src/TagQueryWidget.cs:147
-#: ../src/Term.cs:591
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
 #, csharp-format
 msgid "Not {0}"
 msgstr "不是 {0}"
 
-#: ../src/TagQueryWidget.cs:277
+#: ../src/TagQueryWidget.cs:273
 msgid "Drag tags here to search for them"
 msgstr "拖拉标记到这里以进行搜索"
 
-#: ../src/TagSelectionWidget.cs:511
+#: ../src/TagSelectionWidget.cs:491
 msgid "Error renaming tag"
 msgstr "重命名标记出错"
 
-#: ../src/TagStore.cs:200
+#: ../src/TagStore.cs:205
 msgid "Favorites"
 msgstr "收藏"
 
-#: ../src/TagStore.cs:205
+#: ../src/TagStore.cs:210
 msgid "Hidden"
 msgstr "隐藏"
 
-#: ../src/TagStore.cs:213
+#: ../src/TagStore.cs:218
 msgid "People"
 msgstr "人像"
 
-#: ../src/TagStore.cs:218
+#: ../src/TagStore.cs:223
 msgid "Places"
 msgstr "地点"
 
-#: ../src/TagStore.cs:223
+#: ../src/TagStore.cs:228
 msgid "Events"
 msgstr "事件"
 
 #. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:236
-#: ../src/Widgets/InfoBox.cs:397
+#: ../src/TagStore.cs:241 ../src/Widgets/InfoBox.cs:344
 msgid "(None)"
 msgstr "(无)"
 
-#: ../src/Term.cs:297
+#: ../src/Term.cs:298
 msgid " and "
 msgstr "和"
 
 #. operators.Add (Catalog.GetString (" && "));
-#: ../src/Term.cs:299
+#: ../src/Term.cs:300
 msgid ", "
 msgstr " , "
 
-#: ../src/Term.cs:355
+#: ../src/Term.cs:356
 msgid " or "
 msgstr " 或"
 
 #. OPS The operators we support, case insensitive
 #. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
-#: ../src/Term.cs:379
-#: ../src/Widgets/FindBar.cs:177
-#: ../src/f-spot.glade.h:273
+#: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:533
 msgid "or"
 msgstr "或"
 
-#: ../src/ThreadProgressDialog.cs:66
-msgid "Retry"
-msgstr "重试"
+#: ../src/ThumbnailCommand.cs:21
+msgid "Updating Thumbnails"
+msgstr "更新缩略图"
 
-#: ../src/TimeDialog.cs:126
-#: ../src/f-spot.glade.h:166
-#, csharp-format
-msgid "Shift all photos by {0}"
-msgstr "所有照片平移 {0}"
+#: ../src/ThumbnailCommand.cs:29
+#, fuzzy, csharp-format
+#| msgid "Uploading picture \"{0}\""
+msgid "Updating picture \"{0}\""
+msgstr "正在上传图片 \"{0}\""
 
-#: ../src/UI.Dialog/AboutDialog.cs:70
+#: ../src/UI.Dialog/AboutDialog.cs:99
 msgid "Photo management for GNOME"
 msgstr "GNOME 照片管理器"
 
-#: ../src/UI.Dialog/AboutDialog.cs:71
-msgid "Copyright © 2003-2008 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:100
+#, fuzzy
+#| msgid "Copyright © 2003-2008 Novell Inc."
+msgid "Copyright © 2003-2010 Novell Inc."
 msgstr "版权所有 (C) 2003-2006 Novell Inc."
 
-#: ../src/UI.Dialog/AboutDialog.cs:96
+#: ../src/UI.Dialog/AboutDialog.cs:124
 msgid "translator-credits"
 msgstr "开源软件国际化之简体中文组 http://i18n.linux.net.cn"
 
-#: ../src/UI.Dialog/AboutDialog.cs:101
+#: ../src/UI.Dialog/AboutDialog.cs:129
 msgid "F-Spot Website"
 msgstr "F-Spot 网站"
 
-#: ../src/UI.Dialog/ExceptionDialog.cs:24
-msgid "F-Spot Encountered a Fatal Error"
-msgstr "F-Spot 遇到了严重错误"
-
-#: ../src/UI.Dialog/ExceptionDialog.cs:60
-msgid "Error Details"
-msgstr "错误细节"
-
-#: ../src/UI.Dialog/ExceptionDialog.cs:104
-msgid "An unhandled exception was thrown: "
-msgstr "抛出了无法处理的异常:"
-
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
-msgid "Error loading database."
-msgstr "装入数据库出错。"
-
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
 #, 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 "在装入照片数据库时 F-Spot 遇到了错误。旧的数据库已经移动到 {0},新数据库已经建立完毕。"
-
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
-msgid "Label"
-msgstr "标签"
-
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
-msgid "Ratio"
-msgstr "比率"
+msgid "Shift all photos by {0}"
+msgstr "所有照片平移 {0}"
 
-#: ../src/Updater.cs:501
-msgid "Updating F-Spot Database"
-msgstr "更新 F-Spot 数据库"
+#: ../src/UI.Dialog/DateRangeDialog.cs:90
+msgid "Today"
+msgstr "今日"
 
-#: ../src/Updater.cs:502
-msgid "Please wait while your F-Spot gallery's database is updated. This may take some time."
-msgstr "请稍候,正在更新您的 F-Spot 图库。这可能要花一点时间。"
+#: ../src/UI.Dialog/DateRangeDialog.cs:92
+msgid "Yesterday"
+msgstr "昨天"
 
-#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
-msgid "Unable to create temporary file"
-msgstr "无法创建临时文件"
+#: ../src/UI.Dialog/DateRangeDialog.cs:94
+msgid "Last 7 days"
+msgstr "7天前"
 
-#: ../src/Utils/GnomeUtil.cs:49
-msgid "The \"F-Spot Manual\" could not be found.  Please verify that your installation has been completed successfully."
-msgstr "没有找到 \"F-Spot 手册\" 。请确认你的安装是成功完成的。"
+#: ../src/UI.Dialog/DateRangeDialog.cs:96
+msgid "Last 30 days"
+msgstr "30天前"
 
-#: ../src/Widgets/CustomPrintWidget.cs:99
-msgid "Page Setup"
-msgstr "页面设置"
+#: ../src/UI.Dialog/DateRangeDialog.cs:98
+msgid "Last 90 days"
+msgstr "90天前"
 
-#: ../src/Widgets/CustomPrintWidget.cs:103
-#: ../src/Widgets/CustomPrintWidget.cs:105
-#: ../src/Widgets/CustomPrintWidget.cs:111
-#, csharp-format
-msgid "Paper Size: {0} x {1} mm"
-msgstr "页面大小:{0} x {1} 毫米"
+#: ../src/UI.Dialog/DateRangeDialog.cs:100
+msgid "Last 360 days"
+msgstr "360天前"
 
-#: ../src/Widgets/CustomPrintWidget.cs:121
-msgid "Photos per page"
-msgstr "每页照片数"
+#: ../src/UI.Dialog/DateRangeDialog.cs:102
+msgid "Current Week (Mon-Sun)"
+msgstr "本周(周一到周日)"
 
-#. ppp1.Toggled += TriggerChanged;
-#. ppp2.Toggled += TriggerChanged;
-#. ppp4.Toggled += TriggerChanged;
-#. ppp9.Toggled += TriggerChanged;
-#: ../src/Widgets/CustomPrintWidget.cs:133
-msgid "Repeat"
-msgstr "重复"
+#: ../src/UI.Dialog/DateRangeDialog.cs:104
+msgid "Previous Week (Mon-Sun)"
+msgstr "上周(周一到周日)"
 
-#: ../src/Widgets/CustomPrintWidget.cs:134
-msgid "Print cut marks"
-msgstr "打印裁剪标记"
+#: ../src/UI.Dialog/DateRangeDialog.cs:122
+msgid "Customized Range"
+msgstr "自定范围"
 
-#: ../src/Widgets/CustomPrintWidget.cs:142
-msgid "Full Page (no margin)"
-msgstr "全页面(无边)"
+#: ../src/UI.Dialog/EditExceptionDialog.cs:40
+msgid "Error editing photo"
+msgstr "编辑照片出错"
 
-#. Note for translators: "Zoom" is a Fit Mode
-#: ../src/Widgets/CustomPrintWidget.cs:146
-msgid "Zoom"
-msgstr "放大"
+#: ../src/UI.Dialog/EditTagIconDialog.cs:44
+#, csharp-format
+msgid "Edit Icon for Tag {0}"
+msgstr "编辑标记 {0} 的图标"
 
-#: ../src/Widgets/CustomPrintWidget.cs:147
-msgid "Fill"
-msgstr "填满"
+#: ../src/UI.Dialog/EditTagIconDialog.cs:66
+msgid "Select Photo from file"
+msgstr "从文件中选择照片"
 
-#: ../src/Widgets/CustomPrintWidget.cs:148
-msgid "Scaled"
+#: ../src/UI.Dialog/EditTagIconDialog.cs:88
+#, 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>来自照片</b>\n"
+"你可以使用你库中的任何一张照片作为本标记的图标。\n"
+"但是你必须首先有至少一张照片与该标记相关联。\n"
+"请标记某张照片作为 '{0}' ,然后回到这里用它作为一个图标。"
 
-#: ../src/Widgets/CustomPrintWidget.cs:154
-msgid "White borders"
-msgstr "白边"
-
-#: ../src/Widgets/CustomPrintWidget.cs:158
-msgid "Custom Text: "
-msgstr "自定文本:"
-
-#: ../src/Widgets/EditorPage.cs:29
-#: ../src/Widgets/Sidebar.cs:71
-msgid "Edit"
-msgstr "编辑"
-
-#: ../src/Widgets/EditorPage.cs:201
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:46
-msgid "No selection available"
-msgstr "没有选中范围"
-
-#: ../src/Widgets/EditorPage.cs:202
-msgid "This tool requires an active selection. Please select a region of the photo and try the operation again"
-msgstr "此工具需要选中范围。请先选中"
-
-#: ../src/Widgets/EditorPage.cs:219
-msgid "Error saving adjusted photo"
-msgid_plural "Error saving adjusted photos"
-msgstr[0] "保存调整后照片出错"
+#: ../src/UI.Dialog/EditTagIconDialog.cs:166
+msgid "Unable to load image"
+msgstr "无法载入图像"
 
-#: ../src/Widgets/EditorPage.cs:221
+#: ../src/UI.Dialog/EditTagIconDialog.cs:167
 #, csharp-format
-msgid "Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."
-msgstr "收到例外 \"{0}\"。注意在你能够编辑前,你必须将 RAW 文件转为 JPEG 格式。"
-
-#: ../src/Widgets/FindBar.cs:58
-msgid "Find:"
-msgstr "查找:"
-
-#: ../src/Widgets/FindBar.cs:177
-#: ../src/f-spot.glade.h:265
-msgid "and"
-msgstr "和"
-
-#: ../src/Widgets/InfoBox.cs:179
-msgid "Histogram"
-msgstr "直方图"
-
-#: ../src/Widgets/InfoBox.cs:214
-msgid "Date"
-msgstr "日期"
-
-#: ../src/Widgets/InfoBox.cs:217
-#: ../extensions/Exporters/CDExport/CDExport.glade.h:5
-msgid "Size"
-msgstr "大小"
-
-#: ../src/Widgets/InfoBox.cs:220
-msgid "Exposure"
-msgstr "曝光"
-
-#: ../src/Widgets/InfoBox.cs:224
-msgid "Focal Length"
-msgstr "焦距"
+msgid "Unable to load \"{0}\" as icon for the tag"
+msgstr "无法载入 \"{0}\" 作为标志的图标"
 
-#: ../src/Widgets/InfoBox.cs:230
-msgid "File Size"
-msgstr "文件大小"
+#: ../src/UI.Dialog/EditTagIconDialog.cs:205
+#, csharp-format
+msgid "Photo {0} of {1}"
+msgstr "第{0}张照片,共{1}张"
 
-#: ../src/Widgets/InfoBox.cs:233
-msgid "Rating"
-msgstr "评分"
+#: ../src/UI.Dialog/ExceptionDialog.cs:24
+msgid "F-Spot Encountered a Fatal Error"
+msgstr "F-Spot 遇到了严重错误"
 
-#: ../src/Widgets/InfoBox.cs:406
-#: ../src/Widgets/InfoBox.cs:429
-#: ../src/Widgets/InfoBox.cs:439
-#: ../src/Widgets/InfoBox.cs:448
-msgid "(Unknown)"
-msgstr "(未知)"
+#: ../src/UI.Dialog/ExceptionDialog.cs:60
+msgid "Error Details"
+msgstr "错误细节"
 
-#: ../src/Widgets/InfoBox.cs:416
-msgid "(wrong format)"
-msgstr "(错误的格式)"
+#: ../src/UI.Dialog/ExceptionDialog.cs:104
+msgid "An unhandled exception was thrown: "
+msgstr "抛出了无法处理的异常:"
 
-#: ../src/Widgets/InfoBox.cs:554
-msgid "(File not found)"
-msgstr "(文件未找到)"
+#: ../src/UI.Dialog/ImportDialog.cs:15
+#, fuzzy
+#| msgid "Open _Folder..."
+msgid "Choose Folder..."
+msgstr "打开文件夹(_F)..."
 
-#: ../src/Widgets/InfoBox.cs:598
-#, csharp-format
-msgid "{0} Photos"
-msgstr "{0} 照片"
+#: ../src/UI.Dialog/ImportDialog.cs:129
+#, fuzzy
+#| msgid "Import Source:"
+msgid "Choose Import source..."
+msgstr "导入源:"
 
-#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:618
-#, csharp-format
-msgid ""
-"On {0} between \n"
-"{1} and {2}"
-msgstr ""
-"{0} 在 \n"
-"{1} 和 {2} 之间"
+#: ../src/UI.Dialog/ImportDialog.cs:141
+msgid "(No Cameras Detected)"
+msgstr "(未检测到相机)"
 
-#: ../src/Widgets/InfoBox.cs:623
-#, csharp-format
+#: ../src/UI.Dialog/ImportDialog.cs:176
 msgid ""
-"Between {0} \n"
-"and {1}"
+"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 ""
-"在 {0} \n"
-"和 {1} 之间"
-
-#: ../src/Widgets/InfoBox.cs:647
-msgid "(At least one File not found)"
-msgstr "(至少有一个文件未找到)"
-
-#: ../src/Widgets/InfoBox.cs:761
-msgid "Show Photo Name"
-msgstr "显示照片名"
 
-#: ../src/Widgets/InfoBox.cs:770
-msgid "Show Date"
-msgstr "显示日期"
-
-#: ../src/Widgets/InfoBox.cs:779
-msgid "Show Size"
-msgstr "显示大小"
-
-#: ../src/Widgets/InfoBox.cs:788
-msgid "Show Exposure"
-msgstr "显示曝光"
-
-#: ../src/Widgets/InfoBox.cs:797
-msgid "Show Focal Length"
-msgstr "显示焦距"
-
-#: ../src/Widgets/InfoBox.cs:806
-msgid "Show Camera"
-msgstr "显示相机"
-
-#: ../src/Widgets/InfoBox.cs:815
-msgid "Show File Size"
-msgstr "显示文件大小"
+#: ../src/UI.Dialog/ImportDialog.cs:177
+#, fuzzy
+#| msgid "Rating"
+msgid "Warning"
+msgstr "评分"
 
-#: ../src/Widgets/MetadataDisplay.cs:23
-msgid "Metadata"
-msgstr "元数据"
+#: ../src/UI.Dialog/ImportDialog.cs:286
+#, fuzzy, csharp-format
+#| msgid "Photo {0} of {1}"
+msgid "Importing Photos: {0} of {1}..."
+msgstr "第{0}张照片,共{1}张"
 
-#: ../src/Widgets/MetadataDisplay.cs:104
-msgid "Extended Metadata"
-msgstr "扩展的元数据"
+#: ../src/UI.Dialog/ImportDialog.cs:310
+#, fuzzy
+#| msgid "Rotating photos"
+msgid "Importing photos..."
+msgstr "旋转照片"
 
-#: ../src/Widgets/MetadataDisplay.cs:223
-msgid "Picasaweb"
-msgstr "Picasaweb"
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:317
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "查找照片... (你可以继续点击导入)"
 
-#: ../src/Widgets/MetadataDisplay.cs:225
-msgid "SmugMug"
-msgstr "SmugMug"
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
+#: ../src/UI.Dialog/PreferenceDialog.cs:80
+#, fuzzy
+#| msgid "(None)"
+msgid "None"
+msgstr "(无)"
 
-#: ../src/Widgets/MetadataDisplay.cs:227
-msgid "Gallery2"
-msgstr "图库2"
+#: ../src/UI.Dialog/PreferenceDialog.cs:59
+#, fuzzy
+#| msgid "System Theme"
+msgid "System profile"
+msgstr "系统主题"
 
-#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:387
-msgid "No Extended Metadata Available"
-msgstr "无可用的扩展元信息"
+#: ../src/UI.Dialog/PreferenceDialog.cs:97
+msgid "Standard theme"
+msgstr "标准的主题"
 
-#: ../src/Widgets/MetadataDisplay.cs:405
-msgid "No active photo"
-msgstr "无活动照片"
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
+msgid "Error loading database."
+msgstr "装入数据库出错。"
 
-#: ../src/Widgets/MetadataDisplay.cs:407
+#: ../src/UI.Dialog/RepairDbDialog.cs:23
 #, csharp-format
-msgid "The photo \"{0}\" does not exist"
-msgstr "照片“{0}”不存在"
-
-#: ../src/Widgets/MetadataDisplay.cs:410
-msgid "No metadata available"
-msgstr "无可用的元信息"
-
-#: ../src/Widgets/RatingMenuItem.cs:56
-msgid "Rating:"
-msgstr "评分:"
-
-#: ../src/XmpTagsImporter.cs:89
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:6
-msgid "Location"
-msgstr "位置"
-
-#: ../src/XmpTagsImporter.cs:90
-msgid "Country"
-msgstr "国家"
+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 ""
+"在装入照片数据库时 F-Spot 遇到了错误。旧的数据库已经移动到 {0},新数据库已经"
+"建立完毕。"
 
-#: ../src/XmpTagsImporter.cs:91
-msgid "City"
-msgstr "城市"
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
+msgid "Label"
+msgstr "标签"
 
-#: ../src/XmpTagsImporter.cs:92
-msgid "State"
-msgstr "州"
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
+msgid "Ratio"
+msgstr "比率"
 
-#. namespace
-#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
+msgid "Retry"
+msgstr "重试"
 
-#: ../src/f-spot.glade.h:2
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:1
 msgid "0000:00:00 00:00:00"
 msgstr "0000:00:00 00:00:00"
 
-#: ../src/f-spot.glade.h:3
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:2
 msgid "00:00:00"
 msgstr "00:00:00"
 
-#: ../src/f-spot.glade.h:4
-msgid "1 of 1"
-msgstr "1/1"
-
-#: ../src/f-spot.glade.h:5
-msgid "1024 px"
-msgstr "1024 像素"
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:3
+msgid "5"
+msgstr "5"
 
-#: ../src/f-spot.glade.h:6
-msgid "320 px"
-msgstr "320 像素"
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:4
+msgid "<b>Action</b>"
+msgstr "<b>动作</b>"
 
-#: ../src/f-spot.glade.h:7
-msgid "480 px"
-msgstr "480 像素"
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:6
+msgid "<b>Reference Photo</b>"
+msgstr "<b>参考照片</b>"
 
-#: ../src/f-spot.glade.h:8
-msgid "5"
-msgstr "5"
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:7
+msgid "Adjust Time"
+msgstr "调整时间"
 
-#: ../src/f-spot.glade.h:9
-msgid "640 px"
-msgstr "640 像素"
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:8
+msgid "Adjusted date: "
+msgstr "调整日期:"
 
-#: ../src/f-spot.glade.h:10
-msgid "800 px"
-msgstr "800 像素"
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:9
+msgid "Current date:"
+msgstr "当前日期:"
 
-#: ../src/f-spot.glade.h:11
-msgid "<b></b>"
-msgstr "<b></b>"
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:11
+msgid "Space all photos by"
+msgstr "平移所有照片根据"
 
-#: ../src/f-spot.glade.h:12
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-msgid "<b>Account</b>"
-msgstr "<b>账户</b>"
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:12
+msgid "difference:"
+msgstr "差异:"
 
-#: ../src/f-spot.glade.h:13
-msgid "<b>Action</b>"
-msgstr "<b>动作</b>"
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:13
+msgid "min. Starting at {0}"
+msgstr "最小开始于 {0}"
 
-#: ../src/f-spot.glade.h:14
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-msgid "<b>Album</b>"
-msgstr "<b>相册</b>"
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
+#, fuzzy
+#| msgid "_Create"
+msgid "C_reate"
+msgstr "创建(_C)"
 
-#: ../src/f-spot.glade.h:15
-msgid "<b>Co_rrections</b>"
-msgstr "<b>校正(_R)</b>"
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:2
+msgid "Create _icon for this tag when first used"
+msgstr "第一次使用时为这个标签创建图标(_I)"
 
-#: ../src/f-spot.glade.h:16
-msgid "<b>Color Management</b>"
-msgstr "<b>颜色管理</b>"
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr "上层标记(_a):"
 
-#: ../src/f-spot.glade.h:17
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-msgid "<b>Destination</b>"
-msgstr "<b>目的</b>"
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "标记名称(_T):"
 
-#: ../src/f-spot.glade.h:18
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
 msgid "<b>End Date</b>"
 msgstr "<b>结束日期</b>"
 
-#: ../src/f-spot.glade.h:19
-msgid "<b>From External Photo</b>"
-msgstr "<b>从外部照片</b>"
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:2
+msgid "<b>Select period</b>"
+msgstr "<b>选择周期</b>"
 
-#: ../src/f-spot.glade.h:20
-msgid "<b>From Photo</b>"
-msgstr "<b>从照片</b>"
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:3
+msgid "<b>Start Date</b>"
+msgstr "<b>开始日期</b>"
 
-#: ../src/f-spot.glade.h:21
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-msgid "<b>Gallery</b>"
-msgstr "<b>图库</b>"
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:4
+msgid "Cancel, do not change the current timeline. "
+msgstr "取消,不改变当前时间线。"
 
-#: ../src/f-spot.glade.h:22
-msgid "<b>Image Interpolation</b>"
-msgstr "<b>图像插值</b>"
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:5
+msgid "Only photos taken within these dates will be displayed."
+msgstr "仅显示在这些日期内拍摄的照片"
 
-#: ../src/f-spot.glade.h:23
-msgid "<b>Import Settings</b>"
-msgstr "<b>导入设定</b>"
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:6
+msgid "Set date range"
+msgstr "设定日期范围"
 
-#: ../src/f-spot.glade.h:24
-msgid "<b>Max Rating</b>"
-msgstr "<b>最高评分</b>"
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
+msgid "Edit Tag"
+msgstr "编辑标记"
 
-#: ../src/f-spot.glade.h:25
-msgid "<b>Metadata</b>"
-msgstr "<b>元数据</b>"
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
+msgid "Edit icon"
+msgstr "编辑图标"
 
-#: ../src/f-spot.glade.h:26
-msgid "<b>Min Rating</b>"
-msgstr "<b>最低评分</b>"
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+msgid "_Icon:"
+msgstr "图标(_I):"
 
-#: ../src/f-spot.glade.h:27
-msgid "<b>Photograph Layout</b>"
-msgstr "<b>照片布局</b>"
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:1
+msgid "<b>From External Photo</b>"
+msgstr "<b>从外部照片</b>"
 
-#: ../src/f-spot.glade.h:28
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:1
-msgid "<b>Photos</b>"
-msgstr "<b>照片</b>"
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:2
+msgid "<b>From Photo</b>"
+msgstr "<b>从照片</b>"
 
-#: ../src/f-spot.glade.h:29
-msgid "<b>Predefined</b>"
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:3
+#, fuzzy
+#| msgid "<b>Predefined</b>"
+msgid "<b>Predefined icons</b>"
 msgstr "<b>预定义</b>"
 
-#: ../src/f-spot.glade.h:30
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:4
 msgid "<b>Preview</b>"
 msgstr "<b>预览</b>"
 
-#: ../src/f-spot.glade.h:31
-msgid "<b>Printer Details</b>"
-msgstr "<b>打印机细节</b>"
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:5
+msgid "Design icon from"
+msgstr ""
 
-#: ../src/f-spot.glade.h:32
-msgid "<b>Reference Photo</b>"
-msgstr "<b>参考照片</b>"
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:6
+msgid "Edit Tag Icon"
+msgstr "编辑标记图标"
 
-#: ../src/f-spot.glade.h:33
-msgid "<b>Screensaver</b>"
-msgstr "<b>屏幕保护程序</b>"
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:7
+msgid "No _image"
+msgstr "无图像(_i)"
 
-#: ../src/f-spot.glade.h:34
-msgid "<b>Select period</b>"
-msgstr "<b>选择周期</b>"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:1
+msgid "<b>View all pictures imported</b>"
+msgstr "<b>查看所有已导入的图片</b>"
 
-#: ../src/f-spot.glade.h:35
-msgid "<b>Size</b>"
-msgstr "<b>大小</b>"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:2
+msgid "Display only those photos that were imported in specified Rolls."
+msgstr "仅显示在指定清单中导入的照片"
 
-#: ../src/f-spot.glade.h:36
-msgid "<b>Start Date</b>"
-msgstr "<b>开始日期</b>"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
+msgid "Filter on selected rolls"
+msgstr "在选定清单中过滤"
 
-#: ../src/f-spot.glade.h:37
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-msgid "<b>Style</b>"
-msgstr "<b>样式</b>"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
+msgid "Number of photos in selected rolls:"
+msgstr "选定清单的照片张数"
 
-#: ../src/f-spot.glade.h:38
-msgid "<b>Summary</b>"
-msgstr "<b>简要</b>"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
+msgid "Show all photos."
+msgstr "显示所有照片。"
 
-#: ../src/f-spot.glade.h:39
-msgid "<b>Theming</b>"
-msgstr "<b>主题</b>"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
+#, fuzzy
+#| msgid "Date"
+msgid "after"
+msgstr "日期"
 
-#: ../src/f-spot.glade.h:40
-msgid "<b>Transparent Parts</b>"
-msgstr "<b>透明部分</b>"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:534
+msgid "and"
+msgstr "和"
 
-#: ../src/f-spot.glade.h:41
-msgid "<b>View all pictures imported</b>"
-msgstr "<b>查看所有已导入的图片</b>"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:8
+#, fuzzy
+#| msgid "Path"
+msgid "at"
+msgstr "路径"
 
-#: ../src/f-spot.glade.h:42
-msgid "<b>_White Balance</b>"
-msgstr "<b>白平衡(_W)</b>"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:9
+#, fuzzy
+#| msgid ""
+#| "at\n"
+#| "after\n"
+#| "between"
+msgid "between"
+msgstr ""
+"在\n"
+"之后\n"
+"之间"
 
-#: ../src/f-spot.glade.h:43
-msgid "<small></small>"
-msgstr "<small></small>"
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:1
+msgid "Color profile for display:"
+msgstr ""
 
-#: ../src/f-spot.glade.h:44
-msgid "<small><i>Choose the folder where F-Spot should store newly imported photos</i></small>"
-msgstr "<small><i>选择 F-Spot 将保存新导入照片的文件夹</i></small>"
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:2
+msgid "Color profile for printing:"
+msgstr ""
 
-#: ../src/f-spot.glade.h:45
-msgid ""
-"<small><i>Enable this option to store tags and descriptions inside \n"
-"supported image formats.</i></small>"
-msgstr "<small><i>启用此选项可在支持的图像格式中存储标记和描述。</i></small>"
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:3
+#, fuzzy
+#| msgid "Preferences"
+msgid "F-Spot Preferences"
+msgstr "首选项"
 
-#: ../src/f-spot.glade.h:47
-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>启用这个将允许在放大过的图片上插值。你不应该在查看时禁用,但在图标设计时禁用插值可能有用</i></small>"
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:4
+msgid "F-Spot appearance:"
+msgstr "F-Spot 外观:"
 
-#: ../src/f-spot.glade.h:48
-msgid "<small><i>While acting as a screensaver, F-Spot can display all of your images, or a small subset based on tags.</i></small>"
-msgstr "<small><i>当作为屏幕保护程序时,F-Spot 能够显示你所有的图像,或者是基于标记的一小部分图像</i></small>"
+#: ../src/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 ""
 
-#: ../src/f-spot.glade.h:49
-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>你能选择如何显示图片的透明部分。这个选项对于照片没有映像,但当查看图标或有透明部分的图片时,设定这个作为检查模板或自定义颜色可能有用。</i></small>"
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:7
+msgid ""
+"Never modify image files.\n"
+"<small>Write XMP files next to the images instead.</small>"
+msgstr ""
 
-#: ../src/f-spot.glade.h:50
-msgid "<small><i>You'll have to restart f-spot to load the new theme.</i></small>"
-msgstr "<small><i>你必须重新启动 f-spot 以载入新主题</i></small>"
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
+msgid "Select A Folder"
+msgstr "选择一个文件夹"
 
-#: ../src/f-spot.glade.h:51
-msgid "Adjust Time"
-msgstr "调整时间"
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
+msgid "Separately from the image files"
+msgstr "从图像文件分享"
 
-#: ../src/f-spot.glade.h:52
-msgid "Adjust _Time..."
-msgstr "调整时间(_T)..."
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:11
+msgid "Store tags and descriptions for photos:"
+msgstr "储存照片的标签和描述:"
 
-#: ../src/f-spot.glade.h:53
-msgid "Adjusted date: "
-msgstr "调整日期:"
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:12
+msgid "When importing photos, copy them to:"
+msgstr "复制正在导入的照片到:"
 
-#: ../src/f-spot.glade.h:55
-msgid "Arrange _by"
-msgstr "排列方式(_B)"
+#: ../src/UI.Dialog/ui/RatingFilterDialog.ui.h:1
+msgid "<b>Max Rating</b>"
+msgstr "<b>最高评分</b>"
 
-#: ../src/f-spot.glade.h:56
-msgid "As _background"
-msgstr "作为背景(_b)"
+#: ../src/UI.Dialog/ui/RatingFilterDialog.ui.h:2
+msgid "<b>Min Rating</b>"
+msgstr "<b>最低评分</b>"
 
-#: ../src/f-spot.glade.h:57
-msgid "As _custom color: "
-msgstr "作为自定义颜色(_c)"
+#: ../src/UI.Dialog/ui/RatingFilterDialog.ui.h:3
+msgid "Set Rating Filter"
+msgstr "设定评分过滤"
 
-#: ../src/f-spot.glade.h:58
-msgid "As check _pattern"
-msgstr "作为检查模板(_p)"
+#: ../src/UI.Dialog/ui/RepairDialog.ui.h:1
+msgid "Repair"
+msgstr "修改"
 
-#: ../src/f-spot.glade.h:59
+#: ../src/ui/import.ui.h:1
 msgid "Attach Tags:"
 msgstr "附加标记:"
 
-#: ../src/f-spot.glade.h:60
-msgid "Attach tag:"
-msgstr "附加标记:"
-
-#: ../src/f-spot.glade.h:61
-#: ../extensions/Exporters/CDExport/CDExport.glade.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-msgid "Autorotate"
-msgstr "自动旋转"
+#: ../src/ui/import.ui.h:2
+msgid "Copy files to the Photos folder"
+msgstr "将文件复制到照片文件夹"
 
-#: ../src/f-spot.glade.h:63
-msgid "By _Date"
-msgstr "根据日期(_D)"
+#: ../src/ui/import.ui.h:3
+msgid "Detect duplicates"
+msgstr "探测重复的图片"
 
-#: ../src/f-spot.glade.h:64
-msgid "By _Import Roll"
-msgstr "根据导入清单(_I)"
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:6
+#, fuzzy
+#| msgid "Import roll"
+msgid "Import from:"
+msgstr "导入清单"
 
-#: ../src/f-spot.glade.h:65
-msgid "By _Rating"
-msgstr "根据评分(_R)"
+#: ../src/ui/import.ui.h:7
+msgid "Include subfolders"
+msgstr "包含子目录"
 
-#: ../src/f-spot.glade.h:66
-msgid "CD"
-msgstr "光盘"
+#: ../src/ui/import.ui.h:8
+msgid "Remove original files after import"
+msgstr ""
 
-#: ../src/f-spot.glade.h:67
-msgid "C_aption:"
-msgstr "标题(_A):"
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 像素"
 
-#: ../src/f-spot.glade.h:68
-msgid "C_ontrast:"
-msgstr "对比度(_O):"
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 像素"
 
-#: ../src/f-spot.glade.h:69
-msgid "Camera Selection"
-msgstr "相机选择"
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 像素"
 
-#: ../src/f-spot.glade.h:70
-msgid "Cancel, do not change the current timeline. "
-msgstr "取消,不改变当前时间线。"
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 像素"
 
-#: ../src/f-spot.glade.h:71
-msgid "Co_nfigure"
-msgstr "配置(_N)"
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 像素"
 
-#: ../src/f-spot.glade.h:72
-msgid "Copy Locat_ion"
-msgstr "复制位置(_I)"
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>大小</b>"
 
-#: ../src/f-spot.glade.h:73
-msgid "Copy files to the Photos folder"
-msgstr "将文件复制到照片文件夹"
+#: ../src/ui/mail_dialog.ui.h:8
+msgid "<b>Summary</b>"
+msgstr "<b>简要</b>"
 
-#: ../src/f-spot.glade.h:74
+#: ../src/ui/mail_dialog.ui.h:9
 msgid "Create Mail"
 msgstr "创建邮件"
 
-#: ../src/f-spot.glade.h:75
-msgid "Create New _Tag..."
-msgstr "创建新标记(_T)..."
-
-#: ../src/f-spot.glade.h:76
-msgid "Create _New Version..."
-msgstr "创建新版本(_N)..."
-
-#: ../src/f-spot.glade.h:77
+#: ../src/ui/mail_dialog.ui.h:10
 msgid "Create a mail with the selected photos (possibly resized) attached"
 msgstr "使用选定的照片(可能调整过大小)作为附件创建一封邮件"
 
-#: ../src/f-spot.glade.h:78
-msgid "Crop photo to _fit"
-msgstr "剪裁照片以适合(_F)"
-
-#: ../src/f-spot.glade.h:79
-msgid "Current date:"
-msgstr "当前日期:"
-
-#: ../src/f-spot.glade.h:80
-msgid "Custom Theme"
-msgstr "自定义主题"
-
-#: ../src/f-spot.glade.h:81
-msgid "Detect duplicates"
-msgstr "探测重复的图片"
-
-#: ../src/f-spot.glade.h:82
-msgid "Display File _Names"
-msgstr "显示文件名(_N)"
-
-#: ../src/f-spot.glade.h:83
-msgid "Display only those photos that were imported in specified Rolls."
-msgstr "仅显示在指定清单中导入的照片"
-
-#: ../src/f-spot.glade.h:84
+#: ../src/ui/mail_dialog.ui.h:11
 msgid "Do not send a mail"
 msgstr "不发送邮件"
 
-#: ../src/f-spot.glade.h:85
-msgid "E-_Mail:"
-msgstr "电子邮件(_M):"
-
-#: ../src/f-spot.glade.h:86
-msgid "E_xport titles and comments"
-msgstr "导出标题和注释(_X)"
-
-#: ../src/f-spot.glade.h:87
-msgid "Edit Tag Icon"
-msgstr "编辑标记图标"
-
-#: ../src/f-spot.glade.h:88
-msgid "Edit icon"
-msgstr "编辑图标"
-
-#: ../src/f-spot.glade.h:90
+#: ../src/ui/mail_dialog.ui.h:12
 msgid "Estimated new size"
 msgstr "估计新大小"
 
-#: ../src/f-spot.glade.h:91
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:3
-msgid "Export"
-msgstr "导出"
-
-#: ../src/f-spot.glade.h:92
+#: ../src/ui/mail_dialog.ui.h:13
 msgid "Extra large"
 msgstr "非常大"
 
-#: ../src/f-spot.glade.h:93
-msgid "F-Spot"
-msgstr "F-Spot"
-
-#: ../src/f-spot.glade.h:94
-msgid "F-Spot View"
-msgstr "F-Spot 查看"
-
-#: ../src/f-spot.glade.h:96
-msgid "Filter on selected rolls"
-msgstr "在选定清单中过滤"
-
-#: ../src/f-spot.glade.h:97
-msgid "Fin_d"
-msgstr "查找(_D)"
-
-#: ../src/f-spot.glade.h:99
-msgid "From List:"
-msgstr "来自清单:"
-
-#: ../src/f-spot.glade.h:100
-msgid "From gtkrc File:"
-msgstr "来自 gtkrc 文件:"
-
-#: ../src/f-spot.glade.h:101
-msgid ""
-"Full Page\n"
-"Standard - 4x6"
-msgstr ""
-"整页\n"
-"标准 - 4x6"
-
-#: ../src/f-spot.glade.h:103
-msgid "G_allery:"
-msgstr "图库(_A):"
-
-#: ../src/f-spot.glade.h:104
-msgid "Gallery"
-msgstr "图库"
-
-#: ../src/f-spot.glade.h:105
-msgid ""
-"Hairline\n"
-"0.25\"\n"
-"0.5\"\n"
-"1\"\n"
-msgstr ""
-"发丝细轮廓线\n"
-"0.25\"\n"
-"0.5\"\n"
-"1\"\n"
-
-#: ../src/f-spot.glade.h:110
-msgid "Images tagged with:"
-msgstr "图像标记为:"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:113
-msgid "Import Source:"
-msgstr "导入源:"
-
-#: ../src/f-spot.glade.h:114
-msgid "Include subfolders"
-msgstr "包含子目录"
-
-#: ../src/f-spot.glade.h:115
+#: ../src/ui/mail_dialog.ui.h:14
 msgid "Large"
 msgstr "大的"
 
-#: ../src/f-spot.glade.h:116
-msgid "Make F-Spot your screensaver"
-msgstr "将 F-Spot 设为您的屏幕保护程序"
-
-#: ../src/f-spot.glade.h:117
-msgid "Manage _Extensions"
-msgstr "管理扩展(_E)"
-
-#: ../src/f-spot.glade.h:118
-msgid "Manage your custom selection ratios"
-msgstr "管理你的自定选定比率"
-
-#: ../src/f-spot.glade.h:119
+#: ../src/ui/mail_dialog.ui.h:15
 msgid "Medium"
 msgstr "媒介"
 
-#: ../src/f-spot.glade.h:120
-msgid "N_umber of Copies:"
-msgstr "副本数(_U):"
-
-#: ../src/f-spot.glade.h:122
-msgid "No _image"
-msgstr "无图像(_i)"
-
-#: ../src/f-spot.glade.h:123
-msgid ""
-"None\n"
-"Title\n"
-"Filename\n"
-"Date\n"
-"Photo Details"
-msgstr ""
-"无\n"
-"标题\n"
-"文件名\n"
-"日期\n"
-"照片细节"
-
-#: ../src/f-spot.glade.h:128
-msgid "Number of photos in selected rolls:"
-msgstr "选定清单的照片张数"
-
-#: ../src/f-spot.glade.h:129
+#: ../src/ui/mail_dialog.ui.h:16
 msgid "Number of pictures"
 msgstr "图片数"
 
-#: ../src/f-spot.glade.h:130
-msgid "Only photos taken within these dates will be displayed."
-msgstr "仅显示在这些日期内拍摄的照片"
-
-#: ../src/f-spot.glade.h:131
-msgid "Open _Folder..."
-msgstr "打开文件夹(_F)..."
-
-#: ../src/f-spot.glade.h:133
+#: ../src/ui/mail_dialog.ui.h:18
 msgid "Original size (possible very large file size)"
 msgstr "原始大小(可能非常大的文件大小)"
 
-#: ../src/f-spot.glade.h:134
-msgid "P_arent Tag:"
-msgstr "上层标记(_a):"
-
-#: ../src/f-spot.glade.h:135
-msgid "P_hoto Source:"
-msgstr "照片源(_h):"
-
-#: ../src/f-spot.glade.h:136
-msgid "Page 1 of 3"
-msgstr "第 1 页,共 3 页"
+#: ../src/ui/mail_dialog.ui.h:19
+msgid "Small"
+msgstr "小的"
 
-#: ../src/f-spot.glade.h:137
-msgid "Page Set_up..."
-msgstr "页面设置(_u)..."
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Tiny"
+msgstr "微小的"
 
-#: ../src/f-spot.glade.h:138
-msgid "Pause"
-msgstr "暂停"
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Total original size"
+msgstr "全部原始大小"
 
-#: ../src/f-spot.glade.h:139
-msgid "Photo 0 of 0"
-msgstr "照片 0 ,共 0"
+#: ../src/ui/mail_dialog.ui.h:22
+msgid "_Create Mail"
+msgstr "创建邮件(_C)"
 
-#: ../src/f-spot.glade.h:140
-msgid "Photo _Size:"
-msgstr "照片大小(_S):"
+#: ../src/ui/main_window.ui.h:1
+msgid "Adjust _Time..."
+msgstr "调整时间(_T)..."
 
-#: ../src/f-spot.glade.h:141
-msgid "Preferences"
-msgstr "首选项"
+#: ../src/ui/main_window.ui.h:2
+msgid "Arrange _by"
+msgstr "排列方式(_B)"
 
-#: ../src/f-spot.glade.h:143
-msgid "Print crop _marks"
-msgstr "打印裁剪标记(_m)"
+#: ../src/ui/main_window.ui.h:4
+msgid "By _Date"
+msgstr "根据日期(_D)"
 
-#: ../src/f-spot.glade.h:144
-msgid "Print..."
-msgstr "打印..."
+#: ../src/ui/main_window.ui.h:5
+msgid "By _Import Roll"
+msgstr "根据导入清单(_I)"
 
-#: ../src/f-spot.glade.h:145
-msgid "Re_fresh Thumbnail"
-msgstr "刷新缩略图(_f)"
+#: ../src/ui/main_window.ui.h:6
+msgid "By _Rating"
+msgstr "根据评分(_R)"
 
-#: ../src/f-spot.glade.h:147
-msgid "Repair"
-msgstr "修改"
+#: ../src/ui/main_window.ui.h:7
+#, fuzzy
+#| msgid "Crop"
+msgid "Copy"
+msgstr "裁剪"
 
-#: ../src/f-spot.glade.h:150
-msgid "Select A Folder"
-msgstr "选择一个文件夹"
+#: ../src/ui/main_window.ui.h:8
+msgid "Create New _Tag..."
+msgstr "创建新标记(_T)..."
 
-#: ../src/f-spot.glade.h:151
-msgid "Select A gtkrc File"
-msgstr "选择一个 gtkrc 文件"
+#: ../src/ui/main_window.ui.h:9
+msgid "Create _New Version..."
+msgstr "创建新版本(_N)..."
 
-#: ../src/f-spot.glade.h:152
-msgid "Select Photos to Copy From Camera..."
-msgstr "从相机选择照片进行复制"
+#: ../src/ui/main_window.ui.h:10
+#, fuzzy
+#| msgid "_Delete Version"
+msgid "De_tach Version"
+msgstr "删除版本(_D)"
 
-#: ../src/f-spot.glade.h:154
-msgid "Select _None"
-msgstr "均不选择(_N)"
+#: ../src/ui/main_window.ui.h:11
+msgid "Fin_d"
+msgstr "查找(_D)"
 
-#: ../src/f-spot.glade.h:155
-msgid "Select a Tag..."
-msgstr "选择一个标记..."
+#: ../src/ui/main_window.ui.h:12
+msgid "Manage _Extensions"
+msgstr "管理扩展(_E)"
 
-#: ../src/f-spot.glade.h:156
-msgid "Select the camera from which you want to transfer files"
-msgstr "选择您想要传送文件的相机"
+#: ../src/ui/main_window.ui.h:13
+msgid "Page Set_up..."
+msgstr "页面设置(_u)..."
 
-#: ../src/f-spot.glade.h:157
-msgid "Selected Camera: "
-msgstr "选择相机:"
+#: ../src/ui/main_window.ui.h:14
+msgid "Re_fresh Thumbnail"
+msgstr "刷新缩略图(_f)"
 
-#: ../src/f-spot.glade.h:158
-msgid ""
-"Selection\n"
-"Gallery\n"
-"Viewport"
-msgstr ""
-"选定\n"
-"画库\n"
-"查看窗"
+#: ../src/ui/main_window.ui.h:18
+msgid "Select _All"
+msgstr "全部选中(_A)"
 
-#: ../src/f-spot.glade.h:161
-msgid "Selection Constraints"
-msgstr "选定对比度"
+#: ../src/ui/main_window.ui.h:19
+msgid "Select _None"
+msgstr "均不选择(_N)"
 
-#: ../src/f-spot.glade.h:162
+#: ../src/ui/main_window.ui.h:20
 msgid "Send by _Mail..."
 msgstr "通过邮件发送(_M)..."
 
-#: ../src/f-spot.glade.h:163
-msgid "Set Rating Filter"
-msgstr "设定评分过滤"
-
-#: ../src/f-spot.glade.h:164
+#: ../src/ui/main_window.ui.h:21 ../src/ui/single_view.ui.h:3
 msgid "Set as _Background"
 msgstr "设置为背景(_B)"
 
-#: ../src/f-spot.glade.h:165
-msgid "Set date range"
-msgstr "设定日期范围"
-
-#: ../src/f-spot.glade.h:167
-msgid "Show all photos."
-msgstr "显示所有照片。"
-
-#: ../src/f-spot.glade.h:168
-msgid "Show or hide the side pane"
-msgstr "显示或隐藏侧边栏"
-
-#: ../src/f-spot.glade.h:169
-msgid "Show or hide the toolbar"
-msgstr "显示或隐藏工具栏"
-
-#: ../src/f-spot.glade.h:170
-msgid "Side _pane"
-msgstr "侧边窗格(_p)"
-
-#: ../src/f-spot.glade.h:171
+#: ../src/ui/main_window.ui.h:22
 msgid "Side_bar"
 msgstr "侧边栏"
 
-#: ../src/f-spot.glade.h:172
-msgid "Small"
-msgstr "小的"
-
-#: ../src/f-spot.glade.h:173
-msgid "Space all photos by"
-msgstr "平移所有照片根据"
-
-#: ../src/f-spot.glade.h:174
-msgid "Specify if an original size picture should be rotated or not. Smaller sizes are automatically rotated."
-msgstr "指定一张原始大小的图片是否应当旋转。较小的将自动进行旋转。"
-
-#: ../src/f-spot.glade.h:175
-msgid "Strip image _metadata"
-msgstr "去除图像元数据(_m)"
-
-#: ../src/f-spot.glade.h:176
-msgid "System Theme"
-msgstr "系统主题"
-
-#: ../src/f-spot.glade.h:177
+#: ../src/ui/main_window.ui.h:23
 msgid "T_ags"
 msgstr "标记(_a)"
 
-#: ../src/f-spot.glade.h:178
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1178
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1179
-msgid "Tags: "
-msgstr "标记:"
-
-#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:180
-msgid "Te_mp:"
-msgstr "温度(_m):"
-
-#: ../src/f-spot.glade.h:181
+#: ../src/ui/main_window.ui.h:25
 msgid "Thumbnail _elements"
 msgstr "缩略图元素(_e)"
 
-#: ../src/f-spot.glade.h:182
-msgid "Tiny"
-msgstr "微小的"
-
-#: ../src/f-spot.glade.h:183
+#: ../src/ui/main_window.ui.h:26
 msgid "Too_lbar"
 msgstr "工具栏(_l)"
 
-#: ../src/f-spot.glade.h:184
-msgid "Total original size"
-msgstr "全部原始大小"
-
-#: ../src/f-spot.glade.h:185
-msgid "Try to use the system display profile"
-msgstr "尝试使用系统的显示简表"
-
-#: ../src/f-spot.glade.h:186
+#: ../src/ui/main_window.ui.h:27
 msgid "View"
 msgstr "查看"
 
-#: ../src/f-spot.glade.h:187
-msgid "Will print using: US Letter size on Generic Postscript"
-msgstr "打印将使用:在通用的 Postscript上的美国信纸大小"
-
-#: ../src/f-spot.glade.h:188
-msgid "Write _metadata to file"
-msgstr "写入元数据到文件(_m)"
-
-#: ../src/f-spot.glade.h:189
+#: ../src/ui/main_window.ui.h:28 ../src/ui/single_view.ui.h:7
 msgid "Zoom _in"
 msgstr "放大(_i)"
 
-#: ../src/f-spot.glade.h:190
+#: ../src/ui/main_window.ui.h:29 ../src/ui/single_view.ui.h:8
 msgid "Zoom _out"
 msgstr "缩小(_o)"
 
-#: ../src/f-spot.glade.h:191
+#: ../src/ui/main_window.ui.h:30 ../src/ui/single_view.ui.h:9
 msgid "Zoom in"
 msgstr "放大"
 
-#: ../src/f-spot.glade.h:192
+#: ../src/ui/main_window.ui.h:31 ../src/ui/single_view.ui.h:10
 msgid "Zoom out"
 msgstr "缩小"
 
-#: ../src/f-spot.glade.h:194
+#: ../src/ui/main_window.ui.h:32
+msgid "_Attach Tag"
+msgstr "附加标记(_A)"
+
+#: ../src/ui/main_window.ui.h:33
 msgid "_Attach Tag to Selection"
 msgstr "给选中对象附加标记(_A)"
 
-#: ../src/f-spot.glade.h:195
-msgid "_Border:"
-msgstr "边际(_B):"
-
-#: ../src/f-spot.glade.h:196
-msgid "_Brightness:"
-msgstr "亮度(_B):"
-
-#: ../src/f-spot.glade.h:198
+#: ../src/ui/main_window.ui.h:35
 msgid "_Clear Rating Filter"
 msgstr "清除评分过滤(_C)"
 
-#: ../src/f-spot.glade.h:199
+#: ../src/ui/main_window.ui.h:36
 msgid "_Clear Roll Filter"
-msgstr ""
+msgstr "清除滚动过滤器 (_C)"
 
-#: ../src/f-spot.glade.h:200
+#: ../src/ui/main_window.ui.h:38
 msgid "_Components"
 msgstr "构成(_C)"
 
-#: ../src/f-spot.glade.h:201
+#: ../src/ui/main_window.ui.h:39
 msgid "_Contents"
 msgstr "内容(_C)"
 
-#: ../src/f-spot.glade.h:202
-#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
-msgid "_Create"
-msgstr "创建(_C)"
-
-#: ../src/f-spot.glade.h:203
-msgid "_Create Mail"
-msgstr "创建邮件(_C)"
-
-#: ../src/f-spot.glade.h:204
+#: ../src/ui/main_window.ui.h:40
 msgid "_Dates"
 msgstr "日期(_D)"
 
-#: ../src/f-spot.glade.h:206
+#: ../src/ui/main_window.ui.h:42
 msgid "_Delete Selected Tag"
 msgstr "删除选中的标记(_D)"
 
-#: ../src/f-spot.glade.h:207
+#: ../src/ui/main_window.ui.h:43
 msgid "_Delete Version"
 msgstr "删除版本(_D)"
 
-#: ../src/f-spot.glade.h:208
-msgid "_Display:"
-msgstr "显示(_D):"
-
-#: ../src/f-spot.glade.h:209
+#: ../src/ui/main_window.ui.h:44 ../src/ui/single_view.ui.h:11
 msgid "_Edit"
 msgstr "编辑(_E)"
 
-#: ../src/f-spot.glade.h:210
-msgid "_Edit Selected Tag..."
-msgstr "编辑选中的标记(_E)..."
-
-#: ../src/f-spot.glade.h:211
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
-msgid "_Export"
-msgstr "导出(_E)"
-
-#: ../src/f-spot.glade.h:212
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
-msgid "_Export tags"
-msgstr "导出标记(_E)"
+#: ../src/ui/main_window.ui.h:45
+#, fuzzy
+#| msgid "Edit Tag"
+msgid "_Edit Tag..."
+msgstr "编辑标记"
 
-#: ../src/f-spot.glade.h:213
+#: ../src/ui/main_window.ui.h:46
 msgid "_Export to"
 msgstr "导出到(_E)"
 
-#: ../src/f-spot.glade.h:214
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
-msgid "_Export to Album:"
-msgstr "导出到画册(_E):"
-
-#: ../src/f-spot.glade.h:215
-msgid "_Exposure:"
-msgstr "曝光度(_E):"
-
-#: ../src/f-spot.glade.h:216
+#: ../src/ui/main_window.ui.h:47
 msgid "_Filmstrip"
 msgstr "胶片效果(_F)"
 
-#: ../src/f-spot.glade.h:217
-msgid "_Flickr"
-msgstr "Flickr(_F)"
-
-#: ../src/f-spot.glade.h:218
-msgid "_Folder"
-msgstr "文件夹(_F)"
-
-#: ../src/f-spot.glade.h:219
+#: ../src/ui/main_window.ui.h:48 ../src/ui/single_view.ui.h:13
 msgid "_Fullscreen"
 msgstr "全屏(_F)"
 
-#: ../src/f-spot.glade.h:220
-msgid "_Gallery"
-msgstr "图库(_G)"
-
-#: ../src/f-spot.glade.h:221
+#: ../src/ui/main_window.ui.h:49 ../src/ui/single_view.ui.h:14
 msgid "_Help"
 msgstr "帮助(_H)"
 
-#: ../src/f-spot.glade.h:222
+#: ../src/ui/main_window.ui.h:50
 msgid "_Hidden"
 msgstr "隐藏(_H)"
 
-#: ../src/f-spot.glade.h:223
-msgid "_Hue:"
-msgstr "色调(_H)"
-
-#: ../src/f-spot.glade.h:224
-msgid "_Icon:"
-msgstr "图标(_I):"
-
-#: ../src/f-spot.glade.h:225
+#: ../src/ui/main_window.ui.h:51
 msgid "_Import..."
 msgstr "导入(_I)..."
 
-#: ../src/f-spot.glade.h:226
-msgid "_Interpolate image on zoom"
-msgstr ""
+#: ../src/ui/main_window.ui.h:52
+#, fuzzy
+#| msgid "Camera Selection"
+msgid "_Invert Selection"
+msgstr "相机选择"
 
-#: ../src/f-spot.glade.h:227
+#: ../src/ui/main_window.ui.h:53
 msgid "_Large"
 msgstr "大的(_L)"
 
-#: ../src/f-spot.glade.h:228
+#: ../src/ui/main_window.ui.h:54
 msgid "_Last Import Roll"
 msgstr "上次导入清单(_L)"
 
-#: ../src/f-spot.glade.h:229
+#: ../src/ui/main_window.ui.h:55
 msgid "_Loupe"
 msgstr "放大镜效果(_L)"
 
-#: ../src/f-spot.glade.h:230
+#: ../src/ui/main_window.ui.h:56
 msgid "_Medium"
 msgstr "中等(_M)"
 
-#: ../src/f-spot.glade.h:231
-msgid "_Month"
-msgstr "月(_M)"
-
-#: ../src/f-spot.glade.h:232
-msgid "_New Window"
-msgstr "新窗口(_N"
-
-#: ../src/f-spot.glade.h:233
-msgid "_Open album in browser when done uploading"
-msgstr "当上传完毕时在浏览器中打开画册(_O)"
-
-#: ../src/f-spot.glade.h:234
-msgid "_Open destination when done exporting"
-msgstr "当导出完毕时打开目的地(_O)"
-
-#: ../src/f-spot.glade.h:235
+#: ../src/ui/main_window.ui.h:57 ../src/ui/single_view.ui.h:15
 msgid "_Photo"
 msgstr "照片(_P)"
 
-#: ../src/f-spot.glade.h:236
-msgid "_Print output:"
-msgstr "打印输出(_P):"
-
-#: ../src/f-spot.glade.h:237
+#: ../src/ui/main_window.ui.h:58
 msgid "_Quit"
 msgstr "退出(_Q)"
 
-#: ../src/f-spot.glade.h:238
+#: ../src/ui/main_window.ui.h:59
 msgid "_Ratings"
 msgstr "评分(_R)"
 
-#: ../src/f-spot.glade.h:240
+#: ../src/ui/main_window.ui.h:61
 msgid "_Remove Tag From Selection"
 msgstr "删除选中对象的标记(_R)"
 
-#: ../src/f-spot.glade.h:241
+#: ../src/ui/main_window.ui.h:62
 msgid "_Rename Version"
 msgstr "重命名版本(_R)"
 
-#: ../src/f-spot.glade.h:242
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
-msgid "_Resize to: "
-msgstr "调整大小到(_R):"
-
-#: ../src/f-spot.glade.h:244
-msgid "_Saturation:"
-msgstr "饱和度(_S)"
-
-#: ../src/f-spot.glade.h:245
-msgid "_Scale photos to no larger than: "
-msgstr "放大照片不超过(_S):"
+#: ../src/ui/main_window.ui.h:63
+msgid "_Reverse Order"
+msgstr "逆序(_R)"
 
-#: ../src/f-spot.glade.h:246
+#: ../src/ui/main_window.ui.h:64
 msgid "_Select Import Rolls..."
 msgstr "选择导入清单(_S)..."
 
-#: ../src/f-spot.glade.h:247
+#: ../src/ui/main_window.ui.h:65
 msgid "_Set Date Range..."
 msgstr "设定日期范围(_S)..."
 
-#: ../src/f-spot.glade.h:248
+#: ../src/ui/main_window.ui.h:66
 msgid "_Set Rating filter..."
 msgstr "设定评分过滤(_S)..."
 
-#: ../src/f-spot.glade.h:249
+#: ../src/ui/main_window.ui.h:67
 msgid "_Sharpen..."
 msgstr "锐化(_S)..."
 
-#: ../src/f-spot.glade.h:250
+#: ../src/ui/main_window.ui.h:68 ../src/ui/single_view.ui.h:16
 msgid "_Slideshow"
 msgstr "幻灯片(_S)"
 
-#: ../src/f-spot.glade.h:251
+#: ../src/ui/main_window.ui.h:69
 msgid "_Small"
 msgstr "小的(_S)"
 
-#: ../src/f-spot.glade.h:252
-msgid "_Strip metadata"
-msgstr "去除元数据(_S)"
-
-#: ../src/f-spot.glade.h:253
+#: ../src/ui/main_window.ui.h:70
 msgid "_Tag Icons"
 msgstr "标记图标(_T)"
 
-#: ../src/f-spot.glade.h:254
-msgid "_Tag Name:"
-msgstr "标记名称(_T):"
-
-#: ../src/f-spot.glade.h:255
+#: ../src/ui/main_window.ui.h:71
 msgid "_Tags"
 msgstr "标记(_T)"
 
-#: ../src/f-spot.glade.h:256
+#: ../src/ui/main_window.ui.h:72
 msgid "_Timeline"
 msgstr "时间线(_T)"
 
-#: ../src/f-spot.glade.h:257
-msgid "_Tint:"
-msgstr "染色(_T)"
-
-#: ../src/f-spot.glade.h:258
-msgid "_Toolbar"
-msgstr "工具栏(_T)"
-
-#: ../src/f-spot.glade.h:259
+#: ../src/ui/main_window.ui.h:73
 msgid "_Tools"
 msgstr "工具(_T)"
 
-#: ../src/f-spot.glade.h:260
-msgid "_URI:"
-msgstr "URI(_U):"
-
-#: ../src/f-spot.glade.h:261
+#: ../src/ui/main_window.ui.h:74
 msgid "_Untagged Photos"
 msgstr "无标记的照片(_U)"
 
-#: ../src/f-spot.glade.h:262
+#: ../src/ui/main_window.ui.h:75
 msgid "_Version"
 msgstr "版本(_V)"
 
-#: ../src/f-spot.glade.h:263
+#: ../src/ui/main_window.ui.h:76 ../src/ui/single_view.ui.h:18
 msgid "_View"
 msgstr "查看(_V)"
 
-#: ../src/f-spot.glade.h:264
-msgid "_Virtual Filesystem"
-msgstr "虚拟文件系统(_V)"
+#: ../src/ui/single_view.ui.h:1
+msgid "Display File _Names"
+msgstr "显示文件名(_N)"
 
-#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:267
+#: ../src/ui/single_view.ui.h:2
+msgid "F-Spot View"
+msgstr "F-Spot 查看"
+
+#: ../src/ui/single_view.ui.h:4
+msgid "Show or hide the side pane"
+msgstr "显示或隐藏侧边栏"
+
+#: ../src/ui/single_view.ui.h:5
+msgid "Show or hide the toolbar"
+msgstr "显示或隐藏工具栏"
+
+#: ../src/ui/single_view.ui.h:6
+msgid "Side _pane"
+msgstr "侧边窗格(_p)"
+
+#: ../src/ui/single_view.ui.h:17
+msgid "_Toolbar"
+msgstr "工具栏(_T)"
+
+#: ../src/ui/viewer_preferences.ui.h:1
+msgid "<b>Image Interpolation</b>"
+msgstr "<b>图像插值</b>"
+
+#: ../src/ui/viewer_preferences.ui.h:2
+msgid "<b>Transparent Parts</b>"
+msgstr "<b>透明部分</b>"
+
+#: ../src/ui/viewer_preferences.ui.h:3
 msgid ""
-"at\n"
-"after\n"
-"between"
+"<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 ""
-"在\n"
-"之后\n"
-"之间"
+"<small><i>启用这个将允许在放大过的图片上插值。你不应该在查看时禁用,但在图标"
+"设计时禁用插值可能有用</i></small>"
 
-#: ../src/f-spot.glade.h:270
-msgid "difference:"
-msgstr "差异:"
+#: ../src/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>你能选择如何显示图片的透明部分。这个选项对于照片没有映像,但当查看"
+"图标或有透明部分的图片时,设定这个作为检查模板或自定义颜色可能有用。</i></"
+"small>"
 
-#: ../src/f-spot.glade.h:271
-msgid "img_000.jpg"
-msgstr "img_000.jpg"
+#: ../src/ui/viewer_preferences.ui.h:5
+msgid "As _background"
+msgstr "作为背景(_b)"
 
-#: ../src/f-spot.glade.h:272
-msgid "min. Starting at {0}"
-msgstr "最小开始于 {0}"
+#: ../src/ui/viewer_preferences.ui.h:6
+msgid "As _custom color: "
+msgstr "作为自定义颜色(_c)"
 
-#: ../src/f-spot.glade.h:274
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:19
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
-msgid "pixels"
-msgstr "像素"
+#: ../src/ui/viewer_preferences.ui.h:7
+msgid "As check _pattern"
+msgstr "作为检查模板(_p)"
+
+#: ../src/ui/viewer_preferences.ui.h:8
+msgid "Preferences"
+msgstr "首选项"
 
-#: ../src/f-spot.glade.h:275
-msgid "x"
-msgstr "x"
+#: ../src/ui/viewer_preferences.ui.h:9
+msgid "_Interpolate image on zoom"
+msgstr ""
 
-#: ../tools/f-spot-screensaver.desktop.in.h:1
-msgid "Display a slideshow from F-Spot"
-msgstr "由 F-Spot 显示幻灯片"
+#: ../src/Updater.cs:727
+msgid "Updating F-Spot Database"
+msgstr "更新 F-Spot 数据库"
 
-#: ../tools/f-spot-screensaver.desktop.in.h:2
-msgid "F-Spot photos"
-msgstr "F-Spot 照片"
+#: ../src/Updater.cs:728
+msgid ""
+"Please wait while your F-Spot gallery's database is updated. This may take "
+"some time."
+msgstr "请稍候,正在更新您的 F-Spot 图库。这可能要花一点时间。"
 
-#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
-msgid "_CD..."
-msgstr "CD(_C)..."
+#: ../src/Widgets/CustomPrintWidget.cs:119
+msgid "Page Setup"
+msgstr "页面设置"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:219
+#: ../src/Widgets/CustomPrintWidget.cs:123
+#: ../src/Widgets/CustomPrintWidget.cs:127
+#: ../src/Widgets/CustomPrintWidget.cs:133
 #, csharp-format
-msgid "Transferring picture \"{0}\" To CD"
-msgstr "传送图片 \"{0}\" 到光盘"
+msgid "Paper Size: {0} x {1} mm"
+msgstr "页面大小:{0} x {1} 毫米"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:246
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:284
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:552
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:702
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:606
-msgid "Done Sending Photos"
-msgstr "发送照片完成"
+#: ../src/Widgets/CustomPrintWidget.cs:130
+msgid "Set Page Size and Orientation"
+msgstr "设置页面尺寸和方向"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:248
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:286
-msgid "Transfer Complete"
-msgstr "传输完毕"
+#: ../src/Widgets/CustomPrintWidget.cs:141
+msgid "Photos per page"
+msgstr "每页照片数"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:255
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:291
-msgid "Error While Transferring"
-msgstr "传送时出错"
+#: ../src/Widgets/CustomPrintWidget.cs:151
+msgid "Repeat"
+msgstr "重复"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:262
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:310
-msgid "Error Transferring"
-msgstr "传送出错"
+#: ../src/Widgets/CustomPrintWidget.cs:152
+msgid "Print cut marks"
+msgstr "打印裁剪标记"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:280
-msgid "copying..."
-msgstr "正在复制..."
+#: ../src/Widgets/CustomPrintWidget.cs:158
+#, fuzzy
+#| msgid "Photos"
+msgid "Photos layout"
+msgstr "照片"
+
+#: ../src/Widgets/CustomPrintWidget.cs:160
+msgid "Full Page (no margin)"
+msgstr "全页面(无边)"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:296
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:332
-msgid "Error: Error while transferring; Aborting"
-msgstr "错误:传送时出错;正在放弃"
+#. Note for translators: "Zoom" is a Fit Mode
+#: ../src/Widgets/CustomPrintWidget.cs:163
+msgid "Zoom"
+msgstr "放大"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:299
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:335
-msgid "Error: File Already Exists; Aborting"
-msgstr "错误:文件已存在;放弃中"
+#: ../src/Widgets/CustomPrintWidget.cs:164
+msgid "Fill"
+msgstr "填满"
 
-#: ../extensions/Exporters/CDExport/CDExport.glade.h:1
-msgid "<b><i>There is some previously scheduled items to write</i></b>"
-msgstr "<b><i>有一些预定的项目要写入</i></b>"
+#: ../src/Widgets/CustomPrintWidget.cs:165
+msgid "Scaled"
+msgstr ""
 
-#: ../extensions/Exporters/CDExport/CDExport.glade.h:2
-msgid "<b>Photos to Burn</b>"
-msgstr "<b>要刻录照片</b>"
+#: ../src/Widgets/CustomPrintWidget.cs:170
+msgid "White borders"
+msgstr "白边"
 
-#: ../extensions/Exporters/CDExport/CDExport.glade.h:4
-msgid "Create CD"
-msgstr "创建光盘"
+#: ../src/Widgets/CustomPrintWidget.cs:176
+#, fuzzy
+#| msgid "Custom Text: "
+msgid "Custom Text"
+msgstr "自定文本:"
 
-#: ../extensions/Exporters/CDExport/CDExport.glade.h:6
-msgid "Size of the exported selection:"
-msgstr "要导出的选定的大小:"
+#: ../src/Widgets/CustomPrintWidget.cs:180
+#, fuzzy
+#| msgid "Photos"
+msgid "Photos infos"
+msgstr "照片"
 
-#: ../extensions/Exporters/CDExport/CDExport.glade.h:7
-msgid "_Browse Previously Scheduled Files"
-msgstr "浏览之前预定的文件(_B)"
+#: ../src/Widgets/CustomPrintWidget.cs:182
+#, fuzzy
+#| msgid "_File name:"
+msgid "Print file name"
+msgstr "文件名(_F):"
 
-#: ../extensions/Exporters/CDExport/CDExport.glade.h:8
-msgid "_Write only these photos to CD"
-msgstr "仅写入这些照片到光盘(_W)"
+#: ../src/Widgets/CustomPrintWidget.cs:183
+#, fuzzy
+#| msgid "Previous photo"
+msgid "Print photo date"
+msgstr "上张照片"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:1
-msgid "_23hq..."
-msgstr "23hq(_2)..."
+#: ../src/Widgets/CustomPrintWidget.cs:184
+#, fuzzy
+#| msgid "Previous photo"
+msgid "Print photo time"
+msgstr "上张照片"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:2
-msgid "_Flickr..."
-msgstr "Flickr(_F)..."
+#: ../src/Widgets/CustomPrintWidget.cs:185
+#, fuzzy
+#| msgid "Print cut marks"
+msgid "Print photo tags"
+msgstr "打印裁剪标记"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:3
-msgid "_Zooomr..."
-msgstr "Zooomr(_Z)..."
+#: ../src/Widgets/CustomPrintWidget.cs:186
+msgid "Print photo comment"
+msgstr "打印照片备注"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
-msgid "Authorize"
-msgstr "授权"
+#: ../src/Widgets/EditorPage.cs:32 ../src/Widgets/Sidebar.cs:54
+msgid "Edit"
+msgstr "编辑"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../src/Widgets/EditorPage.cs:200
+msgid ""
+"This tool requires an active selection. Please select a region of the photo "
+"and try the operation again"
+msgstr "此工具需要选中范围。请先选中"
+
+#: ../src/Widgets/EditorPage.cs:218
+msgid "Error saving adjusted photo"
+msgid_plural "Error saving adjusted photos"
+msgstr[0] "保存调整后照片出错"
+
+#: ../src/Widgets/EditorPage.cs:220
 #, csharp-format
-msgid "Return to this window after you have finished the authorization process on {0} and click the \"Complete Authorization\" button below"
+msgid ""
+"Received exception \"{0}\". Note that you have to develop RAW files into "
+"JPEG before you can edit them."
 msgstr ""
+"收到例外 \"{0}\"。注意在你能够编辑前,你必须将 RAW 文件转为 JPEG 格式。"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
-msgid "Complete Authorization"
-msgstr "完成验证"
+#: ../src/Widgets/Filmstrip.cs:470
+msgid "_Horizontal"
+msgstr "水平(_H)"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
-#, csharp-format
-msgid "Logging into {0}"
-msgstr "正在登录到 {0}"
+#: ../src/Widgets/Filmstrip.cs:474
+msgid "_Vertical"
+msgstr "竖直(_V)"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
-msgid "Checking credentials..."
-msgstr "正在检查凭证..."
+#: ../src/Widgets/FindBar.cs:59
+msgid "Find:"
+msgstr "查找:"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
-#, csharp-format
-msgid "Welcome {0} you are connected to {1}"
-msgstr "欢迎 {0} ,你已经连接到 {1}"
+#: ../src/Widgets/FolderTreePage.cs:22
+#, fuzzy
+#| msgid "Folder"
+msgid "Folders"
+msgstr "文件夹"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
-#, csharp-format
-msgid "Sign in as a different user"
-msgstr "作为另外的用户登录"
+#: ../src/Widgets/FolderTreeView.cs:127
+#, fuzzy
+#| msgid "_Virtual Filesystem"
+msgid "Filesystem"
+msgstr "虚拟文件系统(_V)"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
-#, csharp-format
-msgid "Used {0} of your allowed {1} monthly quota"
-msgstr "已使用 {0} ,每月共允许 {1} 配额"
+#: ../src/Widgets/InfoBox.cs:182
+msgid "Histogram"
+msgstr "直方图"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
-msgid "Unable to log on"
-msgstr "无法登录"
+#: ../src/Widgets/InfoBox.cs:201
+msgid "Image Information"
+msgstr "图片信息"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../src/Widgets/InfoBox.cs:215
+msgid "Version"
+msgstr "版本"
+
+#: ../src/Widgets/InfoBox.cs:218
+msgid "Date"
+msgstr "日期"
+
+#: ../src/Widgets/InfoBox.cs:224
+msgid "Exposure"
+msgstr "曝光"
+
+#: ../src/Widgets/InfoBox.cs:228
+msgid "Focal Length"
+msgstr "焦距"
+
+#: ../src/Widgets/InfoBox.cs:231
+msgid "Camera"
+msgstr "相机"
+
+#: ../src/Widgets/InfoBox.cs:234
+msgid "File Size"
+msgstr "文件大小"
+
+#: ../src/Widgets/InfoBox.cs:237
+msgid "Rating"
+msgstr "评分"
+
+#: ../src/Widgets/InfoBox.cs:327
+msgid "(wrong format)"
+msgstr "(错误的格式)"
+
+#: ../src/Widgets/InfoBox.cs:353 ../src/Widgets/InfoBox.cs:364
+#: ../src/Widgets/InfoBox.cs:374
+msgid "(Unknown)"
+msgstr "(未知)"
+
+#: ../src/Widgets/InfoBox.cs:474
+#, fuzzy, csharp-format
+#| msgid "(No Edits)"
+msgid "(One Edit)"
+msgid_plural "({0} Edits)"
+msgstr[0] "(无编辑)"
+
+#: ../src/Widgets/InfoBox.cs:484
+msgid "(File read error)"
+msgstr "(文件读取错误)"
+
+#: ../src/Widgets/InfoBox.cs:529
 #, csharp-format
-msgid "Waiting for response {0} of {1}"
-msgstr "正在等待响应 {0},共 {1}"
+msgid "{0} Photos"
+msgstr "{0} 张照片"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:241
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:779
+#. Note for translators: {0} is a date, {1} and {2} are times.
+#: ../src/Widgets/InfoBox.cs:549
 #, csharp-format
-msgid "Uploading picture \"{0}\""
-msgstr "正在上传图片 \"{0}\""
+msgid ""
+"On {0} between \n"
+"{1} and {2}"
+msgstr ""
+"{0} 在 \n"
+"{1} 和 {2} 之间"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../src/Widgets/InfoBox.cs:554
 #, csharp-format
-msgid "Error Uploading To {0}: {1}"
-msgstr "上传到 {0} 时出错:{1}"
+msgid ""
+"Between {0} \n"
+"and {1}"
+msgstr ""
+"在 {0} \n"
+"和 {1} 之间"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:810
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:554
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:608
-msgid "Upload Complete"
-msgstr "上传完毕"
+#: ../src/Widgets/InfoBox.cs:581
+msgid "(At least one File not found)"
+msgstr "(至少有一个文件未找到)"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
-msgid "Unable to log on."
-msgstr "无法登录。"
+#: ../src/Widgets/InfoBox.cs:698
+msgid "Show Photo Name"
+msgstr "显示照片名"
+
+#: ../src/Widgets/InfoBox.cs:707
+msgid "Show Date"
+msgstr "显示日期"
+
+#: ../src/Widgets/InfoBox.cs:716
+msgid "Show Size"
+msgstr "显示大小"
+
+#: ../src/Widgets/InfoBox.cs:725
+msgid "Show Exposure"
+msgstr "显示曝光"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../src/Widgets/InfoBox.cs:734
+msgid "Show Focal Length"
+msgstr "显示焦距"
+
+#: ../src/Widgets/InfoBox.cs:743
+msgid "Show Camera"
+msgstr "显示相机"
+
+#: ../src/Widgets/InfoBox.cs:752
+msgid "Show File Size"
+msgstr "显示文件大小"
+
+#: ../src/Widgets/MetadataDisplay.cs:25
+msgid "Metadata"
+msgstr "元数据"
+
+#: ../src/Widgets/MetadataDisplay.cs:106
+msgid "Extended Metadata"
+msgstr "扩展的元数据"
+
+#: ../src/Widgets/MetadataDisplay.cs:359
+msgid "No active photo"
+msgstr "无活动照片"
+
+#: ../src/Widgets/MetadataDisplay.cs:361
 #, 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 "F-Spot 无法登录到 {0}。请确认你已经通过 {0} 的网络浏览器界面获得了授权。"
+msgid "The photo \"{0}\" does not exist"
+msgstr "照片“{0}”不存在"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:732
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:478
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:521
-msgid "Uploading Pictures"
-msgstr "正在上传图片"
+#: ../src/Widgets/MetadataDisplay.cs:363
+msgid "No metadata available"
+msgstr "无可用的元信息"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:4
-msgid "<b>Viewing permissions</b>"
-msgstr "<b>查看权限</b>"
+#: ../src/Widgets/OpenWithMenu.cs:72
+msgid "No applications available"
+msgstr "无可用的应用程序"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:7
-msgid "Export tag _hierarchy"
-msgstr "导出标记层次(_h)"
+#: ../src/Widgets/RatingMenuItem.cs:57
+msgid "Rating:"
+msgstr "评分:"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.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 需要你的授权以能够上传照片到你的 {0} 账户。按下 \"授权\" 按钮以打开网络浏览器并给与 F-Spot 授权。"
+#: ../tools/f-spot-screensaver.desktop.in.h:1
+msgid "Display a slideshow from F-Spot"
+msgstr "由 F-Spot 显示幻灯片"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:9
-msgid "Ignore _top level tags"
-msgstr "忽略顶层的标记(_t)"
+#: ../tools/f-spot-screensaver.desktop.in.h:2
+msgid "F-Spot photos"
+msgstr "F-Spot 照片"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:10
-msgid "Private"
-msgstr "私人的"
+#~ msgid "Author:"
+#~ msgstr "作者:"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:11
-msgid "Public"
-msgstr "公开的"
+#~ msgid "Copyright:"
+#~ msgstr "版权"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:12
-msgid "Strip _metadata"
-msgstr "去除元数据(_m)"
+#~ msgid "Extension Dependencies:"
+#~ msgstr "扩展的依赖关系:"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:13
-msgid "Visible to Family"
-msgstr "家人可见"
+#~ msgid "All registered repositories"
+#~ msgstr "所有注册过的软件库"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:14
-msgid "Visible to Friends"
-msgstr "朋友可见"
+#~ msgid "Are you sure you want to cancel the installation?"
+#~ msgstr "你确认你想取消本次安装吗?"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:18
-msgid "_View photos in browser when done uploading"
-msgstr "完成上载后在浏览器中查看(_V)"
+#~ msgid "The following packages will be uninstalled:"
+#~ msgstr "下列软件包将被卸载:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.addin.xml.h:1
-msgid "F_older..."
-msgstr "文件夹(_o)..."
+#~ msgid ""
+#~ "There are other extensions that depend on the previous ones which will "
+#~ "also be uninstalled:"
+#~ msgstr "依赖于前面扩展的一些扩展也将被卸载:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:139
-msgid "Select Export Folder"
-msgstr "选择导出文件夹"
+#~ msgid ""
+#~ "The selected extensions can't be installed because there are dependency "
+#~ "conflicts."
+#~ msgstr "因为依赖冲突,选定的扩展无法安装。"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:197
-msgid "Building Gallery"
-msgstr "正在建立图库"
+#~ msgid "The following packages will be installed:"
+#~ msgstr "下列软件包将被安装:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:247
-#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "上传图片 \"{0}\" 到图库出错:{2}{1}"
+#~ msgid " (in user directory)"
+#~ msgstr "(在用户目录中)"
 
-#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:809
-msgid "Light"
-msgstr "亮"
+#~ msgid "The following packages need to be uninstalled:"
+#~ msgstr "下列软件包也需要卸载:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:810
-msgid "Dark"
-msgstr "黑"
+#~ msgid "The following dependencies could not be resolved:"
+#~ msgstr "无法解决下列依赖关系:"
 
-#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-msgid "Prev"
-msgstr "预览"
+#~ msgid "The installation has been successfully completed."
+#~ msgstr "安装成功完成。"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1102
-msgid "Gallery generated by"
-msgstr "画廊生成由"
+#~ msgid "The installation failed!"
+#~ msgstr "安装失败!"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1142
-msgid "Show Styles"
-msgstr "显示风格"
+#~ msgid "The installation has completed with warnings."
+#~ msgstr "安装完成但有警告信息。"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1143
-msgid "Hide Styles"
-msgstr "隐藏风格"
+#~ msgid "The uninstallation has been successfully completed."
+#~ msgstr "卸载成功完成。"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1310
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1443
-msgid "Page:"
-msgstr "页面:"
+#~ msgid "The uninstallation failed!"
+#~ msgstr "卸载失败!"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
-msgid "\n"
-msgstr "\n"
+#~ msgid "The uninstallation has completed with warnings."
+#~ msgstr "卸载完成但有警告信息。"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
-msgid "<b>Export Method</b>"
-msgstr "<b>导出方式</b>"
+#~ msgid "Repository"
+#~ msgstr "软件库"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
-msgid "Create _gallery using \"Original\""
-msgstr "使用 \"Original\" 创建画库(_g)"
+#~ msgid "Installation cancelled"
+#~ msgstr "安装已取消"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
-msgid "Create standalone _web gallery"
-msgstr "创建独立的网络画库(_w)"
+#~ msgid "Some of the required extensions were not found"
+#~ msgstr "一些要求的扩展没有找到"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
-msgid "D_escription:"
-msgstr "描述(_e):"
+#~ msgid "Installation failed"
+#~ msgstr "安装失败"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
-msgid "Export _tags"
-msgstr "导出标记(_t)"
+#~ msgid "Extension"
+#~ msgstr "扩展"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
-msgid "Export tag _icons"
-msgstr "导出标记图标(_i)"
+#~ msgid "Other"
+#~ msgstr "其他"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
-msgid "Folder Export"
-msgstr "文件夹导出"
+#~ msgid "Url"
+#~ msgstr "Url"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
-msgid "G_allery Name:"
-msgstr "图库名(_a):"
+#~ msgid "Exception occurred: {0}"
+#~ msgstr "发生例外:{0}"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
-msgid "Open _destination when done exporting"
-msgstr "导出完毕时打开目的地(_d)"
+#~ msgid "Package"
+#~ msgstr "软件包"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
-msgid "_Folder:"
-msgstr "文件夹(_F):"
+#~ msgid "Extension Installation"
+#~ msgstr "扩展安装"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:18
-msgid "_Save the files only"
-msgstr "仅保存文件(_S)"
+#~ msgid "<b>Select the extensions to install and click on Next</b>"
+#~ msgstr "选择要安装的扩展,单击下一步"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
-msgid "Web _Gallery..."
-msgstr "网络图库(_G)..."
+#~ msgid "Install from:"
+#~ msgstr "安装自:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
-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 ""
-"无法连接到未知版本的某个画库。\n"
-"请检查你装有 Remote 插件 1.0.8 或更高版本"
+#~ msgid "_Repositories..."
+#~ msgstr "软件库(_R)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:393
-msgid "Invalid URL"
-msgstr "无效的 URL"
+#~ msgid "Show all packages"
+#~ msgstr "显示所有软件包"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:394
-msgid "The gallery URL entry does not appear to be a valid URL"
-msgstr "该画库的 URL 地址不像是有效的 URL 地址。"
+#~ msgid "Show new versions only"
+#~ msgstr "仅显示新版本"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:404
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:431
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:442
-msgid "Error while connecting to Gallery"
-msgstr "连接到画库时出错"
+#~ msgid "Show updates only"
+#~ msgstr "仅显示更新"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:405
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:432
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:443
-#, csharp-format
-msgid "The following error was encountered while attempting to log in: {0}"
-msgstr "尝试登录时遇到下列错误:{0}"
+#~ msgid "_Unselect All"
+#~ msgstr "全部不选(_U)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:419
-msgid "A Gallery with this name already exists"
-msgstr "已存在同名画库"
+#~ msgid "label124"
+#~ msgstr "标签124"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:420
-#, csharp-format
-msgid "There is already a Gallery with the same name in your registered Galleries. Please choose a unique name."
-msgstr "在你登记的画库中已存在同名画库。请选择某个唯一的名称。"
+#~ msgid "Overall Progress:"
+#~ msgstr "全部过程:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:530
-msgid "(TopLevel)"
-msgstr "(最顶层)"
+#~ msgid "Downloading extensions..."
+#~ msgstr "正在下载扩展..."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:592
-msgid "Invalid Gallery name"
-msgstr "无效的画廊名"
+#~ msgid "Extension Manager"
+#~ msgstr "扩展管理器"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:593
-msgid ""
-"The gallery name contains invalid characters.\n"
-"Only letters, numbers, - and _ are allowed"
-msgstr ""
-"图库名字包含无效的字符。\n"
-"仅允许字母,数字,- 和 _ 。"
+#~ msgid "Additional extensions are required to perform this operation."
+#~ msgstr "执行该操作需要额外的扩展。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
-#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery: {1}"
-msgstr "上传图片 \"{0}\" 到画库时出错:{1}"
+#~ msgid "The following extensions will be installed:"
+#~ msgstr "下列扩展将被安装:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:826
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:725
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:629
-msgid "(No Gallery)"
-msgstr "(无图库)"
+#~ msgid "<big><b>Extension Manager</b></big>"
+#~ msgstr "<big><b>扩展管理器</b></big>"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:918
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:852
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:725
-msgid "(Not Connected)"
-msgstr "(没有连接)"
+#~ msgid "The following extensions are currently installed:"
+#~ msgstr "当前已安装下列扩展:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:919
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:853
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
-msgid "(No Albums)"
-msgstr "(无画册)"
+#~ msgid "_Install Extensions..."
+#~ msgstr "安装扩展(_I)..."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:971
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:767
-msgid "No account selected"
-msgstr "没有账户选定"
+#~ msgid "_Uninstall..."
+#~ msgstr "卸载(_U)..."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:5
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:5
-msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
-msgstr "<span weight='bold' size='larger'>连接到画库时出错</span>\n"
+#~ msgid "Enable"
+#~ msgstr "启用"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
-msgid "Export _titles and comments"
-msgstr "导出标题和注释(_t)"
+#~ msgid "Disable"
+#~ msgstr "禁用"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
-msgid "Open _album in browser when done uploading"
-msgstr "上传完毕时在浏览器中打开画册(_a)"
+#~ msgid "Details"
+#~ msgstr "细节"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
-msgid "Please verify that the settings for this gallery are correct."
-msgstr "请确认该画库的设定是正确的。"
+#~ msgid "Extension Repository Management"
+#~ msgstr "扩展软件库管理"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
-msgid "U_RL:"
-msgstr "URL(_R):"
+#~ msgid "Add New Repository"
+#~ msgstr "添加新的软件库"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
-msgid "_Album Name:"
-msgstr "相册名(_A):"
+#~ msgid "Select the location of the repository you want to register:"
+#~ msgstr "选择您想要注册的软件库位置:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
-msgid "_Description:"
-msgstr "描述(_D):"
+#~ msgid "Register an on-line repository"
+#~ msgstr "注册为在线软件库"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
-msgid "_Gallery Name:"
-msgstr "图库名(_G):"
+#~ msgid "Url:"
+#~ msgstr "Url:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
-msgid "_Gallery:"
-msgstr "图库(_G):"
+#~ msgid "Register a local repository"
+#~ msgstr "注册一个本地软件库"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
-msgid "_Parent Album:"
-msgstr "上层相册(_P):"
+#~ msgid "Path:"
+#~ msgstr "路径:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:4
-msgid "_Password:"
-msgstr "密码(_P):"
+#~ msgid "Browse..."
+#~ msgstr "浏览..."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
-msgid "_Title:"
-msgstr "标题(_T):"
+#~ msgid "(provided by {0})"
+#~ msgstr "(由 {0} 提供)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:5
-msgid "_Username:"
-msgstr "用户名(_U):"
+#~ msgid "Disabled extensions can't be loaded."
+#~ msgstr "无法载入已禁用的扩展。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
-msgid "Error reading server response"
-msgstr "读取服务器响应时出错"
+#~ msgid "Loading {0} extension"
+#~ msgstr "正在载入 {0} 扩展"
 
-#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
-msgid "Server returned response without Gallery content"
-msgstr "服务器返回响应但没有画库内容"
+#~ msgid "The required extension '{0}' is disabled."
+#~ msgstr "需要的扩展 '{0}' 目前被禁用。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
-msgid "Error while creating new album"
-msgstr "创建新画册时出现错误"
+#~ msgid "The required extension '{0}' is not installed."
+#~ msgstr "需要的扩展 '{0}' 目前没有安装。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
-#, csharp-format
-msgid ""
-"The following error was encountered while attempting to perform the requested operation:\n"
-"{0} ({1})"
-msgstr ""
-"当尝试执行要求的操作时遇到下列错误:\n"
-"{0} ({1})"
+#~ msgid "No image loaded."
+#~ msgstr "未装入图像。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.addin.xml.h:1
-msgid "F_acebook..."
-msgstr "Facebook(_a)..."
+#~ msgid "Can't save non local files."
+#~ msgstr "无法保存非本地文件。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:256
-msgid "Too many images to export"
-msgstr "太多图像要导出了"
+#~ msgid "Unsupported image type for saving."
+#~ msgstr "不支持保存的图像类型。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:256
-msgid "Facebook only permits 60 photographs per album.  Please refine your selection and try again."
-msgstr "Facebook 仅允许每个相册60张照片。请重新选择后再试。"
+#~ msgid "interpolation type"
+#~ msgstr "插值类型"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:279
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:365
-msgid "You are not logged in."
-msgstr "你还未登录。"
+#~ msgid "the type of interpolation to use"
+#~ msgstr "使用的插值类型"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
-msgid "Waiting for authentication"
-msgstr "正在等待验证"
+#~ msgid "check type"
+#~ msgstr "检查类型"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
-msgid "F-Spot will now launch your browser so that you can log into Facebook.  Turn on the \"Save my login information\" checkbox on Facebook and F-Spot will log into Facebook automatically from now on."
-msgstr "F-Spot 现在将启动你的浏览器,以便你能够登录进 Facebook。打开 \"Save my login information\" "
+#~ msgid "the type of chequering to use"
+#~ msgstr "要使用的格子类型"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
-msgid "Error logging into Facebook"
-msgstr "登录到 Facebook 时出错"
+#~ msgid "the size of chequers to use"
+#~ msgstr "要使用的格子大小"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
-msgid "There was a problem logging into Facebook.  Check your credentials and try again."
-msgstr "登录到 Facebook 遇到一个问题。请检查你的用户名和密码后再试。"
+#~ msgid "dither"
+#~ msgstr "抖动"
 
-#. Note for translators: {0} and {1} are respectively firstname and surname of the user
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:339
-#, csharp-format
-msgid "{0} {1} is logged into Facebook"
-msgstr "{0} {1} 已登录到 Facebook"
+#~ msgid "dither type"
+#~ msgstr "抖动类型"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:492
-msgid "Album must have a name"
-msgstr "相册必须有个名字"
+#~ msgid "Unknown transform type %d"
+#~ msgstr "未知变形类型 %d"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:492
-msgid "Please name your album or choose an existing album."
-msgstr "请为你的画册取个名字或选择一个现存的画册。"
+#~ msgid "Operation failed"
+#~ msgstr "操作失败"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:505
-msgid "Creating a new album failed"
-msgstr "创建新相册失败"
+#~ msgid "Preview"
+#~ msgstr "预览"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:505
-#, csharp-format
-msgid ""
-"An error occurred creating a new album.\n"
-"\n"
-"{0}"
-msgstr ""
-"创建新相册时发生错误。\n"
-"\n"
-"{0}"
+#~ msgid "File"
+#~ msgstr "文件"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:529
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:564
-#, csharp-format
-msgid "Uploading picture \"{0}\" ({1} of {2})"
-msgstr "上传图片 \"{0}\" (第 {1} 张,共 {2} 张)"
+#~ msgid "Select Tag"
+#~ msgstr "选择标记"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:543
-#, csharp-format
-msgid "Error Uploading To Facebook: {0}"
-msgstr "上传到 Facebook 时出错:{0}"
+#~ msgid "Downloading Previews"
+#~ msgstr "正下载预览"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:1
-msgid "Caption"
-msgstr "标题"
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "下载 {0} 预览"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:2
-msgid "Create a new album"
-msgstr "创建一个新画册"
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "正复制{1}个文件中的第{0}个"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:3
-msgid "Description"
-msgstr "描述"
+#~ msgid "Error transferring file"
+#~ msgstr "传送文件出错"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:4
-msgid "Export to Facebook"
-msgstr "导出到 Facebook"
+#~ msgid "Done Copying Files"
+#~ msgstr "复制文件完毕"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:5
-msgid "In this photo"
-msgstr "在本照片中"
+#~ msgid "Download Complete"
+#~ msgstr "下载完成"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:7
-msgid "Login"
-msgstr "登录"
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "从相机传送“{0}”"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:8
-msgid "Logout"
-msgstr "注销"
+#~ msgid "Port"
+#~ msgstr "端口"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:10
-msgid "This is who I am"
-msgstr "这就是我"
+#~ msgid "Import error"
+#~ msgstr "导入错误"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:11
-msgid "Use an existing album"
-msgstr "使用现存的相册"
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "出现错误当导入 {0}{2}{2}{1}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.glade.h:12
-msgid "Who is this?"
-msgstr "这是谁?"
+#~ msgid "No way to save files of type \"{0}\""
+#~ msgstr "没有办法保存类型为 \"{0}\" 的文件"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
-msgid "Compressed fil_e..."
-msgstr "压缩文件(_e)..."
+#~ msgid "Dissolve"
+#~ msgstr "叠化"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-msgid "This tool requires an active selection. Please select one or more pictures and try again"
-msgstr "此工具需要一个现有的选中范围。请先选中一个或多个图片后再试"
+#~ msgid "Flip"
+#~ msgstr "翻转"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:63
-msgid "Select export folder"
-msgstr "选择导出文件夹"
+#~ msgid "Cover"
+#~ msgstr "覆盖"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:101
-msgid "Exporting files"
-msgstr "正在导出文件"
+#~ msgid "Reveal"
+#~ msgstr "揭开"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:107
-#, csharp-format
-msgid "Preparing photo \"{0}\""
-msgstr "正在准备照片 \"{0}\""
+#~ msgid "Wipe"
+#~ msgstr "转场"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:2
-msgid "_File name:"
-msgstr "文件名(_F):"
+#~ msgid "Split"
+#~ msgstr "分割"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:3
-msgid "_Location:"
-msgstr "位置(_L):"
+#~ msgid "Push"
+#~ msgstr "推移"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:4
-msgid "_Scale:"
-msgstr "缩放(_S):"
+#~ msgid "More directories"
+#~ msgstr "更多目录"
 
-#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
-msgid "Merge Db"
-msgstr "合并数据库"
+#~ msgid "Arrange by _Month"
+#~ msgstr "按月排列(_M)"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:73
-msgid "Error opening the selected file"
-msgstr "打开选定文件时出错"
+#~ msgid "Arrange by _Folder"
+#~ msgstr "按文件夹排列(_F)"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:74
-#, csharp-format
-msgid ""
-"The file you selected is not a valid or supported database.\n"
-"\n"
-"Received exception \"{0}\"."
-msgstr ""
-"你选定的文件是无效或不支持的数据库。n\n"
-"收到例外 \"{0}\"。"
+#~ msgid "Image Directory"
+#~ msgstr "图像目录"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.h:1
-msgid "<small><i>Choose the location of the database you want to import from</i></small>"
-msgstr "<small><i>选择你想导入的数据库位置</i></small>"
+#~ msgid "Thumbnail Directory"
+#~ msgstr "缩略图目录"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.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 ""
+#~ msgid "Exif Directory"
+#~ msgstr "Exif 目录"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.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 ""
+#~ msgid "GPS Directory"
+#~ msgstr "GPS 目录"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.h:7
-msgid "A Single Import Roll"
-msgstr "单一导入清单"
+#~ msgid "InterOperability Directory"
+#~ msgstr "互操作性目录"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.h:8
-msgid "Copy images to photos folder"
-msgstr "复制图像到照片文件夹"
+#~ msgid "Unknown Directory"
+#~ msgstr "未知目录"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.h:9
-msgid "Database Location:"
-msgstr "数据库位置:"
+#~ msgid "Writing to this file format is not supported"
+#~ msgstr "无支持写入为该文件格式"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.h:10
-msgid "Everything"
-msgstr "所有东西"
+#~ msgid "IPTC Information Interchange Model (IIM) Version number"
+#~ msgstr "IPTC 信息互换模式 (IIM) 版本号"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.h:11
-msgid "Import:"
-msgstr "导入:"
+#~ msgid "OSI Destination routing information"
+#~ msgstr "OSI 目的路由信息"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.h:12
-msgid "Keep the images at their original location"
-msgstr "将图像保持在原位置"
+#~ msgid "IPTC file format"
+#~ msgstr "IPTC 文件格式"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.h:13
-msgid "Merge another f-spot collection"
-msgstr "合并另外的 f-spot 收藏"
+#~ msgid "Identifies the provider and product"
+#~ msgstr "标识提供者和产品"
 
-#: ../extensions/Tools/MergeDb/MergeDb.glade.h:14
-msgid "New Rolls Only"
-msgstr "仅新清单"
+#~ msgid "A unique number identifying the envelope"
+#~ msgstr "标识信封的唯一编号"
 
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
-#, 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 ""
+#~ msgid "A unique number"
+#~ msgstr "唯一编号"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml.h:1
-msgid "_PicasaWeb..."
-msgstr "_PicasaWeb..."
+#~ msgid ""
+#~ "The envelope handling priority between 1 (most urgent) and 9 (least "
+#~ "urgent)"
+#~ msgstr "信封处理优先性在1 (最紧急) 和9 (最不紧急) 之间"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
-msgid "Error while creating Album"
-msgstr "创建专辑时出错"
+#~ msgid "The year, month and day (CCYYMMDD) the service sent the material"
+#~ msgstr "年,月,日 (CCYYMMDD) "
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
-#, csharp-format
-msgid "The following error was encountered while attempting to create an album: {0}"
-msgstr "当尝试创建画册时遇到下列错误:{0}"
+#~ msgid "The hour, minute and second (HHMMSS) the service sent the material"
+#~ msgstr "小时,分钟,秒 (HHMMSS) "
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
-#, csharp-format
-msgid "{0} Sent"
-msgstr "{0} 已发送"
+#~ msgid "The character set designation"
+#~ msgstr "字符集识别"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
-#, csharp-format
-msgid "{0} of approx. {1}"
-msgstr "第 {0},总共约 {1}"
+#~ msgid "Abstract Relationship Method (ARM) identifier"
+#~ msgstr "抽象关系方式 (ARM) 识别"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:593
-#, csharp-format
-msgid "Error Uploading To Gallery: {0}"
-msgstr "上传到画廊时出错:{0}"
+#~ msgid "Abstract Relationship Method (ARM) version number."
+#~ msgstr "抽象关系方式 (ARM) 版本号"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:776
-msgid "Available space:"
-msgstr "可用空间:"
+#~ msgid "Object type reference"
+#~ msgstr "对象类型参考"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:893
-#, csharp-format
-msgid ""
-"<small>The selected album has a limit of {0} pictures,\n"
-"which would be passed with the current selection of {1} images</small>"
-msgstr ""
-"<small>选定的画册限于 {0} 张图片。\n"
-"当前选定的图像将超过 {1} 张图像</small>"
+#~ msgid "Object attribute reference"
+#~ msgstr "对象属性参考"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:3
-msgid "<b>PicasaWeb Export</b>"
-msgstr "<b>PicasaWeb 导出</b>"
+#~ msgid "Object name"
+#~ msgstr "对象名称"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:7
-msgid "<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
-msgstr "<span weight='bold' size='larger'>你的谷歌(Google)账户已被锁定</span>\n"
+#~ msgid "Copyright information for"
+#~ msgstr "版权信息"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:12
-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 ""
+#~ msgid "Creator of the content"
+#~ msgstr "内容创建者"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
-msgid "Public Album"
-msgstr "公开相册"
+#~ msgid "Provider of the object"
+#~ msgstr "对象提供者"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
-msgid "_Album Title:"
-msgstr "相册标题(_A):"
+#~ msgid "The title of the author or creator"
+#~ msgstr "作者或创建者的头衔"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
-msgid "_Autorotate"
-msgstr "自动旋转(_A)"
+#~ msgid "Headline of the content"
+#~ msgstr "目录头条"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
-msgid "_Captcha:"
-msgstr "个人头像(_C):"
+#~ msgid "Unknown IIM DataSet"
+#~ msgstr "未知的 IIM 数据集"
 
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:3
-msgid "<b>SmugMug Export</b>"
-msgstr "<b>SmugMug 导出</b>"
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "正装入{1}个文件中的第{0}个"
 
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
-msgid "_Account:"
-msgstr "账户(_A):"
+#~ msgid "Done Loading"
+#~ msgstr "装入完毕"
 
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.addin.xml.h:1
-msgid "_SmugMug..."
-msgstr "SmugMug(_S)..."
+#~ msgid "Directory does not exist."
+#~ msgstr "目录不存在。"
 
-#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:126
-#, csharp-format
-msgid "Uploading photo \"{0}\""
-msgstr "正在上传照片 \"{0}\""
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist.  Please choose a "
+#~ "different directory"
+#~ msgstr "你选择的目录“{0}”不存在,请选择一个不同的目录"
 
-#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:181
-msgid "Logging into Tabblo"
-msgstr "正在登录到 Tabblo"
+#~ msgid "No cameras detected."
+#~ msgstr "未检测到相机。"
 
-#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:241
-msgid "Obtaining URL for upload"
-msgstr "正在获取上传的 URL 地址"
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system.  Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr "F-Spot 无法找到任何连接至系统的相机,请确保相机已经连接并且有电"
 
-#: ../extensions/Exporters/TabbloExport/TabbloExport.addin.xml.h:1
-msgid "_Tabblo..."
-msgstr "Tabblo(_T)..."
+#~ msgid "Error connecting to camera"
+#~ msgstr "连接到相机出错"
 
-#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:165
-msgid "Done sending photos"
-msgstr "发送照片完毕"
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "当连接至相机时收到错误“{0}”"
 
-#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:167
-msgid "Upload complete"
-msgstr "上传完毕"
+#~ msgid "Creator"
+#~ msgstr "创建者"
 
-#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:173
-msgid "Error uploading to Tabblo: "
-msgstr "上传到 Tabblo 时出错:"
+#~ msgid "Title"
+#~ msgstr "标题"
 
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:2
-msgid "<b>Tabblo account</b>"
-msgstr "<b>Tabblo 账户</b>"
+#~ msgid "Copyright"
+#~ msgstr "版权"
 
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:1
-msgid "<b>{0}</b>."
-msgstr "<b>{0}</b>"
+#~ msgid "Subject and Keywords"
+#~ msgstr "主题和关键字"
 
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:2
-msgid "A trust error occured while attempting to access"
-msgstr "当尝试访问时发生一个信任错误"
+#~ msgid "Compression"
+#~ msgstr "压缩比"
 
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:3
-msgid "Abort this session"
-msgstr "放弃本次进程"
+#~ msgid "Orientation"
+#~ msgstr "方向"
 
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:4
-msgid "Always trust this site's certificate"
-msgstr "永远信任该网站的证书"
+#~ msgid "Photometric Interpretation"
+#~ msgstr "光度解释"
 
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:5
-msgid "Do you wish to:"
-msgstr "你希望到:"
+#~ msgid "Resolution Unit"
+#~ msgstr "分辨率单位"
 
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:6
-msgid "Trust Error"
-msgstr "信任错误"
+#~ msgid "Exposure Program"
+#~ msgstr "曝光程序"
 
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:7
-msgid "Trust the site's certificate this once"
-msgstr "本次信任该网站的证书"
+#~ msgid "Metering Mode"
+#~ msgstr "测光模式"
+
+#~ msgid "Exposure Mode"
+#~ msgstr "曝光模式"
+
+#~ msgid "Custom Rendered"
+#~ msgstr "自定渲染"
+
+#~ msgid "Components Configuration"
+#~ msgstr "组件配置"
+
+#~ msgid "Light Source"
+#~ msgstr "光源"
+
+#~ msgid "Sensing Method"
+#~ msgstr "传感方式"
+
+#~ msgid "Color Space"
+#~ msgstr "色彩空间"
+
+#~ msgid "White Balance"
+#~ msgstr "白平衡"
+
+#~ msgid "Focal Plane Resolution Unit"
+#~ msgstr "焦平面分辨率单位"
+
+#~ msgid "File Source Type"
+#~ msgstr "文件源类型"
+
+#~ msgid "Scene Capture Type"
+#~ msgstr "场景捕获类型"
+
+#~ msgid "Gain Control"
+#~ msgstr "增益控制"
+
+#~ msgid "Contrast"
+#~ msgstr "对比度"
+
+#~ msgid "Saturation"
+#~ msgstr "饱和度"
+
+#~ msgid "Sharpness"
+#~ msgstr "锐度"
+
+#~ msgid "Scene Type"
+#~ msgstr "场景类型"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "无法创建新版本"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "收到异常“{0}”。无法创建版本“{1}”"
+
+#~ msgid "Really Delete?"
+#~ msgstr "真的删除吗?"
+
+#~ msgid "Cancel"
+#~ msgstr "取消"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "无法删除版本"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "收到异常“{0}”。无法删除版本“{1}”"
+
+#~ msgid "Could not rename a version"
+#~ msgstr "无法重命名版本"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr "收到异常“{0}”。无法重命名版本“{1}”"
+
+#~ msgid "Comment:"
+#~ msgstr "注释:"
+
+#~ msgid "my photos"
+#~ msgstr "我的照片"
+
+#~ msgid "Tag Name:"
+#~ msgstr "标记名称:"
+
+#~ msgid "Edit Selected Tag..."
+#~ msgstr "编辑选中的标记..."
+
+#~ msgid "Unable to create temporary file"
+#~ msgstr "无法创建临时文件"
+
+#~ msgid ""
+#~ "The \"F-Spot Manual\" could not be found.  Please verify that your "
+#~ "installation has been completed successfully."
+#~ msgstr "没有找到 \"F-Spot 手册\" 。请确认你的安装是成功完成的。"
+
+#~ msgid "(File not found)"
+#~ msgstr "(文件未找到)"
+
+#~ msgid "Picasaweb"
+#~ msgstr "Picasaweb"
+
+#~ msgid "SmugMug"
+#~ msgstr "SmugMug"
+
+#~ msgid "Gallery2"
+#~ msgstr "图库2"
+
+#~ msgid "No Extended Metadata Available"
+#~ msgstr "无可用的扩展元信息"
+
+#~ msgid "Country"
+#~ msgstr "国家"
+
+#~ msgid "City"
+#~ msgstr "城市"
+
+#~ msgid "State"
+#~ msgstr "州"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "1 of 1"
+#~ msgstr "1/1"
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "<b>Color Management</b>"
+#~ msgstr "<b>颜色管理</b>"
+
+#~ msgid "<b>Metadata</b>"
+#~ msgstr "<b>元数据</b>"
+
+#~ msgid "<b>Photograph Layout</b>"
+#~ msgstr "<b>照片布局</b>"
+
+#~ msgid "<b>Printer Details</b>"
+#~ msgstr "<b>打印机细节</b>"
+
+#~ msgid "<b>Screensaver</b>"
+#~ msgstr "<b>屏幕保护程序</b>"
+
+#~ msgid "<b>Theming</b>"
+#~ msgstr "<b>主题</b>"
+
+#~ msgid "<small></small>"
+#~ msgstr "<small></small>"
+
+#~ msgid ""
+#~ "<small><i>Choose the folder where F-Spot should store newly imported "
+#~ "photos</i></small>"
+#~ msgstr "<small><i>选择 F-Spot 将保存新导入照片的文件夹</i></small>"
+
+#~ msgid ""
+#~ "<small><i>Enable this option to store tags and descriptions inside \n"
+#~ "supported image formats.</i></small>"
+#~ msgstr ""
+#~ "<small><i>启用此选项可在支持的图像格式中存储标记和描述。</i></small>"
+
+#~ msgid ""
+#~ "<small><i>While acting as a screensaver, F-Spot can display all of your "
+#~ "images, or a small subset based on tags.</i></small>"
+#~ msgstr ""
+#~ "<small><i>当作为屏幕保护程序时,F-Spot 能够显示你所有的图像,或者是基于标"
+#~ "记的一小部分图像</i></small>"
+
+#~ msgid ""
+#~ "<small><i>You'll have to restart f-spot to load the new theme.</i></small>"
+#~ msgstr "<small><i>你必须重新启动 f-spot 以载入新主题</i></small>"
+
+#~ msgid "Attach tag:"
+#~ msgstr "附加标记:"
+
+#~ msgid "Autorotate"
+#~ msgstr "自动旋转"
+
+#~ msgid "CD"
+#~ msgstr "光盘"
+
+#~ msgid "Co_nfigure"
+#~ msgstr "配置(_N)"
+
+#~ msgid "Copy Locat_ion"
+#~ msgstr "复制位置(_I)"
+
+#~ msgid "Crop photo to _fit"
+#~ msgstr "剪裁照片以适合(_F)"
+
+#~ msgid "Custom Theme"
+#~ msgstr "自定义主题"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "电子邮件(_M):"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "导出标题和注释(_X)"
+
+#~ msgid "From List:"
+#~ msgstr "来自清单:"
+
+#~ msgid "From gtkrc File:"
+#~ msgstr "来自 gtkrc 文件:"
+
+#~ msgid ""
+#~ "Full Page\n"
+#~ "Standard - 4x6"
+#~ msgstr ""
+#~ "整页\n"
+#~ "标准 - 4x6"
+
+#~ msgid "Gallery"
+#~ msgstr "图库"
+
+#~ msgid ""
+#~ "Hairline\n"
+#~ "0.25\"\n"
+#~ "0.5\"\n"
+#~ "1\"\n"
+#~ msgstr ""
+#~ "发丝细轮廓线\n"
+#~ "0.25\"\n"
+#~ "0.5\"\n"
+#~ "1\"\n"
+
+#~ msgid "N_umber of Copies:"
+#~ msgstr "副本数(_U):"
+
+#~ msgid ""
+#~ "None\n"
+#~ "Title\n"
+#~ "Filename\n"
+#~ "Date\n"
+#~ "Photo Details"
+#~ msgstr ""
+#~ "无\n"
+#~ "标题\n"
+#~ "文件名\n"
+#~ "日期\n"
+#~ "照片细节"
+
+#~ msgid "P_hoto Source:"
+#~ msgstr "照片源(_h):"
+
+#~ msgid "Page 1 of 3"
+#~ msgstr "第 1 页,共 3 页"
+
+#~ msgid "Pause"
+#~ msgstr "暂停"
+
+#~ msgid "Photo 0 of 0"
+#~ msgstr "照片 0 ,共 0"
+
+#~ msgid "Photo _Size:"
+#~ msgstr "照片大小(_S):"
+
+#~ msgid "Print crop _marks"
+#~ msgstr "打印裁剪标记(_m)"
+
+#~ msgid "Print..."
+#~ msgstr "打印..."
+
+#~ msgid "Select A gtkrc File"
+#~ msgstr "选择一个 gtkrc 文件"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "从相机选择照片进行复制"
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "选择您想要传送文件的相机"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "选择相机:"
+
+#~ msgid ""
+#~ "Selection\n"
+#~ "Gallery\n"
+#~ "Viewport"
+#~ msgstr ""
+#~ "选定\n"
+#~ "画库\n"
+#~ "查看窗"
+
+#~ msgid ""
+#~ "Specify if an original size picture should be rotated or not. Smaller "
+#~ "sizes are automatically rotated."
+#~ msgstr "指定一张原始大小的图片是否应当旋转。较小的将自动进行旋转。"
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "去除图像元数据(_m)"
+
+#~ msgid "Try to use the system display profile"
+#~ msgstr "尝试使用系统的显示简表"
+
+#~ msgid "Will print using: US Letter size on Generic Postscript"
+#~ msgstr "打印将使用:在通用的 Postscript上的美国信纸大小"
+
+#~ msgid "Write _metadata to file"
+#~ msgstr "写入元数据到文件(_m)"
+
+#~ msgid "_Border:"
+#~ msgstr "边际(_B):"
+
+#~ msgid "_Edit Selected Tag..."
+#~ msgstr "编辑选中的标记(_E)..."
+
+#~ msgid "_Flickr"
+#~ msgstr "Flickr(_F)"
+
+#~ msgid "_Folder"
+#~ msgstr "文件夹(_F)"
+
+#~ msgid "_Gallery"
+#~ msgstr "图库(_G)"
+
+#~ msgid "_Month"
+#~ msgstr "月(_M)"
+
+#~ msgid "_New Window"
+#~ msgstr "新窗口(_N"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "当上传完毕时在浏览器中打开画册(_O)"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "当导出完毕时打开目的地(_O)"
+
+#~ msgid "_Print output:"
+#~ msgstr "打印输出(_P):"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "放大照片不超过(_S):"
+
+#~ msgid "_Strip metadata"
+#~ msgstr "去除元数据(_S)"
+
+#~ msgid "_URI:"
+#~ msgstr "URI(_U):"
+
+#~ msgid "img_000.jpg"
+#~ msgstr "img_000.jpg"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "错误:传送时出错;正在放弃"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "错误:文件已存在;放弃中"
+
+#~ msgid "\n"
+#~ msgstr "\n"
+
+#~ msgid ""
+#~ "F-Spot will now launch your browser so that you can log into Facebook.  "
+#~ "Turn on the \"Save my login information\" checkbox on Facebook and F-Spot "
+#~ "will log into Facebook automatically from now on."
+#~ msgstr ""
+#~ "F-Spot 现在将启动你的浏览器,以便你能够登录进 Facebook。打开 \"Save my "
+#~ "login information\" "
+
+#~ msgid "This is who I am"
+#~ msgstr "这就是我"
+
+#~ msgid "Available space:"
+#~ msgstr "可用空间:"
+
+#~ msgid "_Autorotate"
+#~ msgstr "自动旋转(_A)"
 
+#~ msgid "<b>{0}</b>."
+#~ msgstr "<b>{0}</b>"
diff --git a/po/zh_HK.po b/po/zh_HK.po
index 291084f..e73878f 100644
--- a/po/zh_HK.po
+++ b/po/zh_HK.po
@@ -9,10 +9,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: f-spot 0.6.1.5\n"
+"Project-Id-Version: f-spot 0.7.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-08 19:12+0800\n"
-"PO-Revision-Date: 2010-05-08 19:12+0800\n"
+"POT-Creation-Date: 2010-08-04 18:59+0800\n"
+"PO-Revision-Date: 2010-08-04 19:01+0800\n"
 "Last-Translator: Cheng-Chia Tseng <pswo10680 at gmail.com>\n"
 "Language-Team: Chinese (Hong Kong) <community at linuxhall.org>\n"
 "MIME-Version: 1.0\n"
@@ -20,106 +20,125 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
+#: ../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 相片管理員"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "組織、享受、並分享你的相片"
+
+#: ../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 "相片管理員"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "匯入至 F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-Spot 相片檢視器"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "相片檢視器"
+
 #: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
 msgid "_CD..."
 msgstr "_CD..."
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
+#: ../extensions/Exporters/CDExport/CDExport.cs:155
 msgid "Transferring Pictures"
-msgstr "正在傳輸圖片"
+msgstr "正在傳送圖片"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:218
+#: ../extensions/Exporters/CDExport/CDExport.cs:208
 #, csharp-format
 msgid "Transferring picture \"{0}\" To CD"
-msgstr "傳送圖片 \"{0}\" 到 CD"
+msgstr "正在傳送圖片「{0}」至 CD"
 
 #. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../extensions/Exporters/CDExport/CDExport.cs:210
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:360
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:209
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:773
+#: ../src/MainWindow.cs:645 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
 #, csharp-format
 msgid "{0} of {1}"
 msgstr "{1} 之 {0}"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
+#: ../extensions/Exporters/CDExport/CDExport.cs:223
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:378
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:390
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:696
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
 msgid "Done Sending Photos"
 msgstr "傳送相片完成"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
+#: ../extensions/Exporters/CDExport/CDExport.cs:225
 msgid "Transfer Complete"
 msgstr "傳輸完畢"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
+#: ../extensions/Exporters/CDExport/CDExport.cs:232
 msgid "Error While Transferring"
 msgstr "傳輸時發生錯誤"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/CDExport/CDExport.cs:240
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:266
 msgid "Error Transferring"
 msgstr "傳輸發生錯誤"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:263
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
 msgid "copying..."
 msgstr "正在複製..."
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:1
-msgid "<b><i>There is some previously scheduled items to write</i></b>"
+msgid "<b><i>There are some previously scheduled items to write</i></b>"
 msgstr "<b><i>有一些之前規劃好的項目要寫入</i></b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:2
 msgid "<b>Photos to Burn</b>"
-msgstr "<b>要燒錄的圖片</b>"
+msgstr "<b>要燒錄的相片</b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
-msgid "Autorotate"
-msgstr "自動旋轉"
-
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 msgid "Create CD"
 msgstr "建立 CD"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 #: ../src/Widgets/InfoBox.cs:221
 msgid "Size"
 msgstr "大小"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
 msgid "Size of the exported selection:"
 msgstr "匯出的選取項目大小:"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
 msgid "_Browse Previously Scheduled Files"
 msgstr "瀏覽之前規劃好的檔案(_B)"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/ui/single_view.ui.h:12
 msgid "_Export"
 msgstr "匯出(_E)"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:9
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
 msgid "_Write only these photos to CD"
 msgstr "僅把這些相片寫入到 CD 中(_W)"
 
@@ -127,11 +146,11 @@ msgstr "僅把這些相片寫入到 CD 中(_W)"
 msgid "F_acebook..."
 msgstr "F_acebook..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
 msgid "Waiting for authorization"
 msgstr "正在等候授權"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:101
 msgid ""
 "F-Spot will now launch your browser so that you can enable the permission "
 "you just selected.\n"
@@ -143,11 +162,11 @@ msgstr ""
 "\n"
 "一旦你被導入 Facebook 後再返回此應用程式,請點擊下方的「確認」。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
 msgid "Too many images to export"
-msgstr "太多要匯出的相片"
+msgstr "太多要匯出的圖片"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:283
 #, csharp-format
 msgid ""
 "Facebook only permits {0} photographs per album.  Please refine your "
@@ -155,26 +174,18 @@ msgid ""
 msgstr "Fackebook 只許可每個相簿內存放 {0} 張相片。請精挑細選你的選取項目,並重試。"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "正在上傳圖片"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
 msgid "Album must have a name"
 msgstr "相簿必須要有名稱"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:299
 msgid "Please name your album or choose an existing album."
 msgstr "請命名你的相簿或是選擇已存在的相簿。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
 msgid "Creating a new album failed"
 msgstr "建立新相簿失敗"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:314
 #, csharp-format
 msgid ""
 "An error occurred creating a new album.\n"
@@ -185,45 +196,53 @@ msgstr ""
 "\n"
 "{0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:327
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:486
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:726
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:593
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:515
+msgid "Uploading Pictures"
+msgstr "正在上傳圖片"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:355
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:652
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:554
 #, csharp-format
 msgid "Uploading picture \"{0}\" ({1} of {2})"
-msgstr "正在上傳圖片 \"{0}\" ({2} 之 {1})"
+msgstr "正在上傳圖片「{0}」({2} 之 {1})"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
 #, csharp-format
 msgid "Error Uploading To Facebook: {0}"
-msgstr "上傳到 Facebook 時發生錯誤:{0}"
+msgstr "上傳至 Facebook 時發生錯誤:{0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:215
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:789
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:685
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:585
 #: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
 msgid "Error"
 msgstr "錯誤"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:800
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:698
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:598
 msgid "Upload Complete"
 msgstr "上傳完畢"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:383
 msgid "Visit F-Spot group on Facebook"
 msgstr "造訪 Facebook 上的 F-Spot 羣組"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
 msgid "Waiting for authentication"
 msgstr "正在等候認證"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:214
 msgid ""
 "F-Spot will now launch your browser so that you can log into Facebook.\n"
 "\n"
@@ -235,51 +254,51 @@ msgstr ""
 "\n"
 "一旦你被導入 Facebook 後再返回此應用程式,請點擊下方的「確認」。F-Spot 將會對你在 gnome-keyring 內的作業階段製作快取;若可能的話,在未來的 Facebook 匯出中都會重複使用它。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:219
 msgid "Authenticating..."
 msgstr "正在認證..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
 msgid "Error logging into Facebook"
-msgstr "登入到 Facebook 時發生錯誤"
+msgstr "登入 Facebook 時發生錯誤"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:230
 msgid ""
 "There was a problem logging into Facebook.  Check your credentials and try "
 "again."
 msgstr "登入 Facebook 時發生問題。請確認你的認證,並重試。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:239
 msgid "Authorizing Session"
 msgstr "正在授權作業階段"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:248
 msgid "Session established, fetching user info..."
 msgstr "作業階段已建立,正在擷取使用者資訊..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:254
 msgid "Session established, fetching friend list..."
 msgstr "作業階段已建立,正在擷取朋友清單..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:264
 msgid "Session established, fetching friend details..."
 msgstr "作業階段已建立,正在擷取朋友詳細資料..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:276
 msgid "Session established, fetching photo albums..."
 msgstr "作業階段已建立,正在擷取相簿..."
 
 #. Note for translators: {0} and {1} are respectively firstname and surname of the user
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:286
 #, csharp-format
 msgid "{0} {1} is logged into Facebook"
 msgstr "{0} {1} 已登入 Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
 msgid "Facebook Connection Error"
 msgstr "Facebook 連線錯誤"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:296
 #, csharp-format
 msgid ""
 "There was an error when downloading your information from Facebook.\n"
@@ -290,7 +309,7 @@ msgstr ""
 "\n"
 "Facebook 說:{0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:325
 msgid "You are not logged in."
 msgstr "你並未登入。"
 
@@ -319,7 +338,6 @@ msgid "In this photo"
 msgstr "於此相片"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:7
-#: ../src/XmpTagsImporter.cs:90
 msgid "Location"
 msgstr "位置"
 
@@ -368,72 +386,72 @@ msgstr "_Flickr..."
 msgid "_Zooomr..."
 msgstr "_Zooomr..."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:107
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
 msgid "Authorize"
 msgstr "授權"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
 #, csharp-format
 msgid ""
 "Return to this window after you have finished the authorization process on "
 "{0} and click the \"Complete Authorization\" button below"
 msgstr "在你於 {0} 完成認證程序後請返回本視窗,並點擊下方的「完成認證」按鈕"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:114
 msgid "Complete Authorization"
 msgstr "完成授權"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
 #, csharp-format
 msgid "Logging into {0}"
 msgstr "正在登入 {0}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:120
 msgid "Checking credentials..."
 msgstr "正在檢查證書..."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:127
 #, csharp-format
 msgid "Welcome {0} you are connected to {1}"
 msgstr "歡迎 {0} 你已連線到 {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:130
 #, csharp-format
 msgid "Sign in as a different user"
 msgstr "以不同使用者登入"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:135
 #, csharp-format
 msgid "Used {0} of your allowed {1} monthly quota"
 msgstr "已使用你被允許的 {1} 每月配額中的 {0}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:239
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:308
 msgid "Unable to log on"
 msgstr "無法登入"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:328
 #, csharp-format
 msgid "Waiting for response {0} of {1}"
 msgstr "正在等待回應 {1} 個中的第 {0} 個"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:355
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:769
 #, csharp-format
 msgid "Uploading picture \"{0}\""
-msgstr "正在上傳圖片 \"{0}\""
+msgstr "正在上傳圖片「{0}」"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:378
 #, csharp-format
 msgid "Error Uploading To {0}: {1}"
-msgstr "上傳至 {0} 時發生錯誤: {1}"
+msgstr "上傳至 {0} 時發生錯誤:{1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:465
 msgid "Unable to log on."
 msgstr "無法登入。"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:466
 #, csharp-format
 msgid ""
 "F-Spot was unable to log on to {0}.  Make sure you have given the "
@@ -441,26 +459,24 @@ msgid ""
 msgstr "F-Spot 無法登入至 {0}。請確定你已使用 {0} 的網頁瀏覽介面進行驗證。"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
 msgid "<b>Account</b>"
 msgstr "<b>帳號</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5 ../src/ui/mail_dialog.ui.h:6
 msgid "<b>Photos</b>"
 msgstr "<b>相片</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
 msgid "<b>Style</b>"
 msgstr "<b>風格</b>"
 
@@ -469,11 +485,10 @@ msgid "<b>Viewing permissions</b>"
 msgstr "<b>檢視權限</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
 msgid "Export"
 msgstr "匯出"
 
@@ -513,17 +528,15 @@ msgid "Visible to Friends"
 msgstr "朋友可以看到"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
 msgid "_Export tags"
 msgstr "匯出標籤(_E)"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:18
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
 msgid "_Resize to: "
 msgstr "重新調整大小為(_R):"
 
@@ -532,11 +545,10 @@ msgid "_View photos in browser when done uploading"
 msgstr "完成上傳後用瀏覽器檢視相片(_V)"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
 msgid "pixels"
 msgstr "像素"
 
@@ -544,187 +556,204 @@ msgstr "像素"
 msgid "F_older..."
 msgstr "資料夾(_O)..."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:117
 msgid "Select Export Folder"
 msgstr "選取匯出資料夾"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:169
 msgid "Building Gallery"
 msgstr "正在建立圖庫"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:206
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "正在匯出「{0}」..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:213
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "複製「{0}」至圖庫 {2}{1} 時發生錯誤"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:239
 #, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "上傳照片 \"{0}\" 到圖庫 {2}{1} 時發生錯誤"
+msgid "Transferring to \"{0}\""
+msgstr "傳輸至「{0}」"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "錯誤:傳輸時發生錯誤;正在中止"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:240
+msgid "Transferring..."
+msgstr "正在傳輸..."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "錯誤:檔案已存在;正在中止"
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+msgid "Export Complete."
+msgstr "匯出完成。"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:247
+msgid "Exporting Photos Completed."
+msgstr "匯出相片完成。"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:312
+msgid "Exporting Photos"
+msgstr "正在匯出相片"
 
 #. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:716
 msgid "Light"
 msgstr "亮"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
 msgid "Dark"
 msgstr "暗"
 
 #. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:897
 msgid "Prev"
 msgstr "上一步"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:899
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
 msgid "Index"
 msgstr "索引"
 
 #. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:902
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1074
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1114
+#: ../src/MainWindow.cs:349 ../src/Widgets/Sidebar.cs:56
 msgid "Tags"
 msgstr "標籤"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:905
+#: ../src/ItemAction.cs:102
 msgid "Next"
 msgstr "下一步"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1009
 msgid "Gallery generated by"
 msgstr "產生圖庫由"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1049
 msgid "Show Styles"
 msgstr "顯示風格"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
 msgid "Hide Styles"
 msgstr "隱藏風格"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1085
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1086
 #: ../src/ui/main_window.ui.h:24
 msgid "Tags: "
 msgstr "標籤:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1350
 msgid "Page:"
-msgstr "頁:"
+msgstr "頁面:"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
-msgid "\n"
-msgstr "\n"
-
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
 msgid "<b>Destination</b>"
 msgstr "<b>目的地</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:2
 msgid "<b>Export Method</b>"
 msgstr "<b>匯出方式</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
 msgid "Create _gallery using \"Original\""
 msgstr "使用「原始版本」建立圖庫(_G)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
 msgid "Create standalone _web gallery"
 msgstr "建立獨立的網絡圖庫(_W)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
 msgid "D_escription:"
 msgstr "描述(_D):"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
 msgid "Export _tags"
 msgstr "匯出標籤(_T)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
 msgid "Export tag _icons"
 msgstr "匯出標籤圖示(_I)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
 msgid "Folder Export"
 msgstr "匯出資料夾"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
 msgid "G_allery Name:"
 msgstr "圖庫名稱(_A):"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
 msgid "Open _destination when done exporting"
 msgstr "完成匯出後開啟目的地(_D)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
 msgid "_Folder:"
 msgstr "資料夾(_F):"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:19
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
 msgid "_Save the files only"
 msgstr "只儲存檔案(_S)"
 
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "預期外的錯誤"
+
 #: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
 msgid "Web _Gallery..."
 msgstr "網絡圖庫(_G)..."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:54
 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 "無"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:391
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
 msgid "Invalid URL"
 msgstr "無效的 URL"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:393
 msgid "The gallery URL entry does not appear to be a valid URL"
 msgstr "這個圖庫網址條目不是有效的網址"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:402
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:440
-msgid "Error while connecting to Gallery"
-msgstr "連接到圖庫時發生錯誤"
-
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
+msgid "Error while connecting to Gallery"
+msgstr "連接到圖庫時發生錯誤"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:404
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:431
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:442
 #, csharp-format
 msgid "The following error was encountered while attempting to log in: {0}"
 msgstr "試圖登入時遭遇到下列錯誤:{0}"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:417
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
 msgid "A Gallery with this name already exists"
 msgstr "已存在相同名稱的圖庫"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:419
 #, csharp-format
 msgid ""
 "There is already a Gallery with the same name in your registered Galleries. "
 "Please choose a unique name."
 msgstr "在你註冊的圖庫中已經有相同名稱的圖庫。請選擇不同的名稱。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:529
 msgid "(TopLevel)"
 msgstr "(最頂層)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:590
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
 msgid "Invalid Gallery name"
 msgstr "不正確的相簿名稱"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:592
 msgid ""
 "The gallery name contains invalid characters.\n"
 "Only letters, numbers, - and _ are allowed"
@@ -732,44 +761,42 @@ msgstr ""
 "圖庫名稱包含無效的字符。\n"
 "只允許使用字母、數字,- 與 _"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:796
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:788
 #, csharp-format
 msgid "Error uploading picture \"{0}\" to Gallery: {1}"
-msgstr "上傳照片 \"{0}\" 到圖庫 {1} 時發生錯誤"
+msgstr "上傳圖片「{0}」至圖庫 {1} 時發生錯誤"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:816
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:714
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:614
 msgid "(No Gallery)"
 msgstr "(無圖庫)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:908
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:836
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:710
 msgid "(Not Connected)"
 msgstr "(沒有連接)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:909
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:837
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:711
 msgid "(No Albums)"
 msgstr "(無相簿)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:961
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:902
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:752
 msgid "No account selected"
 msgstr "沒有選取任何帳號"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
 msgid "<b>Album</b>"
 msgstr "<b>相簿</b>"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
 msgid "<b>Gallery</b>"
 msgstr "<b>圖庫</b>"
 
@@ -778,87 +805,86 @@ msgstr "<b>圖庫</b>"
 msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
 msgstr "<span weight='bold' size='larger'>連接到圖庫時發生錯誤</span>\n"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
 msgid "Export _titles and comments"
 msgstr "匯出標題和註解(_T)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
 msgid "Open _album in browser when done uploading"
 msgstr "完成上傳後在瀏覽器中開啟圖庫(_A)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
 msgid "Please verify that the settings for this gallery are correct."
 msgstr "請確定這個圖庫的設定是正確的。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
 msgid "U_RL:"
-msgstr "U_RL:"
+msgstr "U_RL:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
 msgid "_Album Name:"
 msgstr "相簿名稱(_A):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
 msgid "_Description:"
 msgstr "描述(_D):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
 msgid "_Export to Album:"
 msgstr "匯出到相簿(_E):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
 msgid "_Gallery Name:"
 msgstr "圖庫名稱(_G):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
 msgid "_Gallery:"
 msgstr "圖庫(_G):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
 msgid "_Parent Album:"
 msgstr "父相簿(_P):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
 msgid "_Password:"
 msgstr "密碼(_P):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
 msgid "_Title:"
 msgstr "標題(_T):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
 msgid "_Username:"
 msgstr "用戶名稱(_U):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:363
 msgid "Error reading server response"
 msgstr "伺服器回應讀取錯誤"
 
 #. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:375
 msgid "Server returned response without Gallery content"
 msgstr "伺服器回應無圖庫內容"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
 msgid "Error while creating new album"
 msgstr "建立新相簿時發生錯誤"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:713
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to perform the "
@@ -872,45 +898,45 @@ msgstr ""
 msgid "_PicasaWeb..."
 msgstr "_PicasaWeb..."
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:444
 msgid "Error while creating Album"
 msgstr "建立相簿時發生錯誤"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:445
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to create an album: {0}"
 msgstr "試圖建立相簿時遭遇到下列錯誤:{0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:615
 #, csharp-format
 msgid "{0} Sent"
 msgstr "已送出{0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:617
 #, csharp-format
 msgid "{0} of approx. {1}"
 msgstr "{0} / 大約 {1}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:683
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:583
 #, csharp-format
 msgid "Error Uploading To Gallery: {0}"
 msgstr "上傳到圖庫時發生錯誤:{0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:765
 #, csharp-format
 msgid "Available space: {0}, {1}% used out of {2}"
 msgstr "可用空間:{0},已使用 {2} 中的 {1}%"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:878
 #, 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 ""
 "所選的相簿限制 {0} 張圖片,\n"
-"目前所選的 {1} 個圖像將會被忽略"
+"目前所選的 {1} 個圖片將會被忽略"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:3
 msgid "<b>PicasaWeb Export</b>"
@@ -928,24 +954,20 @@ msgid ""
 "the 'Captcha' field. <i>Letters are not case-sensitive</i>"
 msgstr ""
 "請驗證此圖庫的設定值是否都正確。\n"
-"輸入「Captcha」欄位內圖像的\n"
+"輸入「Captcha」欄位內圖片的\n"
 "字母。<i>字母大小寫都可以</i>"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
 msgid "Public Album"
 msgstr "公開相簿"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
 msgid "_Album Title:"
 msgstr "相簿標題(_A):"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
-msgid "_Autorotate"
-msgstr "自動旋轉(_A)"
-
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
 msgid "_Captcha:"
 msgstr "_Captcha:"
 
@@ -957,14 +979,14 @@ msgstr "_SmugMug..."
 msgid "<b>SmugMug Export</b>"
 msgstr "<b>SmugMug 匯出</b>"
 
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
 msgid "_Account:"
 msgstr "帳號(_A):"
 
 #: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:132
 #, csharp-format
 msgid "Uploading photo \"{0}\""
-msgstr "正在上傳相片 \"{0}\""
+msgstr "正在上傳相片「{0}」"
 
 #: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:206
 msgid "Logging into Tabblo"
@@ -1019,30 +1041,26 @@ msgid "_Attach to exported photos:"
 msgstr "附加到匯出的相片中(_A):"
 
 #: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
-msgid "<b>{0}</b>."
-msgstr "<b>{0}</b>。"
-
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "A trust error occured while attempting to access"
 msgstr "試圖存取時發生信任上的錯誤"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "Abort this session"
 msgstr "中止此作業階段"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
 msgid "Always trust this site's certificate"
 msgstr "總是信任此網站的證書"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
 msgid "Do you wish to:"
 msgstr "你希望:"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
 msgid "Trust Error"
 msgstr "信任上的錯誤"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
 msgid "Trust the site's certificate this once"
 msgstr "只有這次才信任這個網站的證書"
 
@@ -1050,29 +1068,29 @@ msgstr "只有這次才信任這個網站的證書"
 msgid "Compressed fil_e..."
 msgstr "壓縮的檔案(_E)..."
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../src/Widgets/EditorPage.cs:199
 msgid "No selection available"
 msgstr "無可用的選取項目"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:49
 msgid ""
 "This tool requires an active selection. Please select one or more pictures "
 "and try again"
 msgstr "此工具需要作用中的選取項目。請選取一個或是更多圖片,並重試"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:64
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:65
 msgid "Select export folder"
 msgstr "選取匯出資料夾"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:102
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:103
 msgid "Exporting files"
 msgstr "正在匯出檔案"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:109
 #, csharp-format
 msgid "Preparing photo \"{0}\""
-msgstr "正在準備相片 \"{0}\""
+msgstr "正在準備相片「{0}」"
 
 #: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
 msgid "_Create"
@@ -1090,35 +1108,35 @@ msgstr "位置(_L):"
 msgid "_Scale:"
 msgstr "縮放(_S):"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:53
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "檢查有無複本..."
+
+#: ../extensions/Tools/HashJob/HashJob.cs:54
 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 "為了要偵測你在 0.5.0 版之前匯入的圖片是否有複本,F-Spot 需要分析你的圖像收藏。因為這相當耗費時間,所以預設上不會執行。你可以使用此對話方塊來「開始」或「暫停」此更新程序。"
+msgstr "為了要偵測你在 0.5.0 版之前匯入的圖片是否有複本,F-Spot 需要分析你的圖片收藏。因為這相當耗費時間,所以預設上不會執行。你可以使用此對話方塊來「開始」或「暫停」此更新程序。"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:59
+#: ../extensions/Tools/HashJob/HashJob.cs:60
 #, csharp-format
 msgid ""
 "You currently have {0} photos needing md5 calculation, and {1} pending jobs"
 msgstr "你目前有 {0} 張相片需要 md5 計算,以及 {1} 個擱置的工作"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:76 ../src/ui/main_window.ui.h:37
 msgid "_Close"
 msgstr "關閉(_C)"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:102
+#: ../extensions/Tools/HashJob/HashJob.cs:103
 msgid "Processing images..."
-msgstr "正在處理圖像..."
+msgstr "正在處理圖片..."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:108
+#: ../extensions/Tools/HashJob/HashJob.cs:109
 msgid "Stopped"
 msgstr "已停止"
 
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Check for Duplicates..."
-msgstr "檢查有無複本..."
-
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
 msgid "F-Spot Gallery"
 msgstr "F-Spot 圖庫"
@@ -1150,6 +1168,19 @@ msgstr "已選"
 msgid "Live Web Gallery"
 msgstr "Live 網絡圖庫"
 
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:90
+msgid "none"
+msgstr "無"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:93
+#, csharp-format
+msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
+msgstr "圖庫:{0},相片:{1},上個用戶端:{3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:157
+msgid "Gallery is inactive"
+msgstr "圖庫未啟用"
+
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
 msgid ""
 "<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1186,7 +1217,7 @@ msgstr "圖庫 URL:"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:11
 msgid "Limit number of shared photos to"
-msgstr "限制照片分享的張數"
+msgstr "限制相片分享的張數"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
 msgid "Options:"
@@ -1208,28 +1239,15 @@ msgstr "分享:"
 msgid "Views:"
 msgstr "檢視數:"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "無"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
-msgstr "圖庫:{0},相片:{1},上個用戶端:{3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "圖庫未啟用"
-
 #: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
 msgid "Merge Db"
 msgstr "合併資料庫"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:73
+#: ../extensions/Tools/MergeDb/MergeDb.cs:74
 msgid "Error opening the selected file"
 msgstr "開啟所選的檔案時發生錯誤"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:74
+#: ../extensions/Tools/MergeDb/MergeDb.cs:75
 #, csharp-format
 msgid ""
 "The file you selected is not a valid or supported database.\n"
@@ -1265,7 +1283,7 @@ 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>在本機複製這些圖像,或是將它們維持在它們的地方。如果你選擇了後者,請確保該位置對 f-spot 維持在可存取的狀態。</i></small>"
+msgstr "<small><i>在本機複製這些圖片,或是將它們維持在它們的地方。如果你選擇了後者,請確保該位置對 f-spot 維持在可存取的狀態。</i></small>"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:7
 msgid "A Single Import Roll"
@@ -1273,7 +1291,7 @@ msgstr "單一的匯入膠卷"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:8
 msgid "Copy images to photos folder"
-msgstr "複製圖像至相片資料夾"
+msgstr "複製圖片至相片資料夾"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:9
 msgid "Database Location:"
@@ -1289,7 +1307,7 @@ msgstr "匯入:"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:12
 msgid "Keep the images at their original location"
-msgstr "維持這些圖像在它們原本的位置"
+msgstr "維持這些圖片在它們原本的位置"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:13
 msgid "Merge another F-Spot collection"
@@ -1300,11 +1318,11 @@ msgid "New Rolls Only"
 msgstr "只有新的膠卷"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291 ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
 msgid "Skip"
 msgstr "跳過"
 
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
 #, csharp-format
 msgid ""
 "<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1318,9 +1336,9 @@ msgid "Configure Screensaver"
 msgstr "組態螢幕保護程式"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
-#: ../src/UI.Dialog/DateRangeDialog.cs:129
+#: ../src/UI.Dialog/DateRangeDialog.cs:120
 msgid "All Images"
-msgstr "所有圖像"
+msgstr "所有圖片"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:2
 msgid "Delay:"
@@ -1332,7 +1350,7 @@ msgstr "顯示:"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:4
 msgid "Images tagged with:"
-msgstr "含有標籤的圖像:"
+msgstr "含有標籤的圖片:"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:5
 msgid "Make F-Spot my screensaver"
@@ -1342,123 +1360,211 @@ msgstr "讓 F-Spot 做為你的螢幕保護程式"
 msgid "Screensaver Configuration"
 msgstr "螢幕保護程式組態"
 
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "透明部分的顯示方式。"
 
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "F-Spot 相片管理員"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "啟用此選項以允許對拉近拉遠的圖片進行插補處理。"
 
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "組織、享受、並分享你的相片"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "匯入對話窗高度。"
 
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "相片管理員"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "主視窗高度。"
 
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "匯入至 F-Spot"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "相片檢視器視窗高度。"
 
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "F-Spot 相片檢視器"
+#: ../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 "如果設置了「透明」選項,此選項內指定的顏色當檢視圖片時會替代透明顏色使用。"
 
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "相片檢視器"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "拉近或拉遠時對圖片進行插補處理。"
 
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "找不到檔案"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "最大化主視窗。"
 
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "未知的轉換類型 %d"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "最大化相片檢視器視窗。"
 
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "操作失敗"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "自選作為 F-Spot 主題的 gtkrc 路徑。"
 
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "預覽"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "於縮圖檢視內顯示日期。"
 
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "路徑"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "於縮圖檢視內顯示評等。"
 
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "檔案"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "於縮圖檢視內顯示標籤。"
 
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "選取標籤"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "於檢視器視窗內顯示檔案名稱。"
 
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "正在下載預覽"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "於主視窗顯示幻燈片帶。"
 
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "正在下載 {0} 的預覽"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "於主視窗顯示側邊列。"
 
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "正在複製 {1} 之 {0}"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "於主視窗顯示時間軸。"
 
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "傳輸檔案時發生錯誤"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "於主視窗顯示工具列。"
 
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "下載完畢"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "於相片檢視器視窗內顯示工具列。"
 
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "複製檔案完成"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "顯示於側邊列的標籤圖示大小。"
 
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "從數碼相機傳輸 \"{0}\""
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "主視窗要使用的 X 軸位置。"
 
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "數碼相機"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "相片檢視器視窗要使用的 X 軸位置。"
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "主視窗要使用的 Y 軸位置。"
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "相片檢視器視窗要使用的 Y 軸位置。"
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "透明部分要使用的替代顏色。"
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "匯入對話窗要使用的高度。"
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "主視窗要使用的高度。"
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "相片檢視器視窗要使用的高度。"
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "幻燈片帶的方向,如果有顯示的話。"
 
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "連接埠"
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "幻燈片帶的方向。"
 
-#: ../src/Core/App.cs:278
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "主視窗內的側邊列大小 (闊度)。"
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "主視窗內的側邊列大小。"
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "匯入對話窗要使用的闊度。"
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "主視窗要使用的闊度。"
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "相片檢視器視窗要使用的闊度。"
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "使用目前相片的檔案名稱作為檢視器視窗標題。"
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "匯入對話窗闊度。"
+
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "主視窗闊度。"
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "相片檢視器視窗闊度。"
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "匯入對話窗內的預覽圖片窗格闊度。"
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "主視窗的 X 軸位置。"
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "相片檢視器視窗的 X 軸位置。"
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "主視窗的 Y 軸位置。"
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "相片檢視器視窗的 Y 軸位置。"
+
+#: ../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 "<small><i>你可以選擇要如何顯示圖片內的透明部份。此選項對相片不會造成任何影響,但是當檢視含有透明部份的圖示或是其他美工時,將此設為 CHECK_PATTERN 或 CUSTOM_COLOR 應該很有用。</i></small>"
+
+#: ../src/Core/App.cs:290
 #, csharp-format
 msgid "No photos matching {0} found"
 msgstr "找不到符合 {0} 的相片"
 
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:291
 #, 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 ""
-"沒有任何標示為 \"{0}\" 的相片。你可以標示一些\n"
+"沒有任何標示為「{0}」的相片。你可以標示一些\n"
 "相片,或着在 F-Spot 的選項中選擇其他的標籤。"
 
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:295
 msgid "Search returned no results"
 msgstr "沒有找到搜尋結果"
 
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:296
 msgid ""
 "The tag F-Spot is looking for does not exist. Try\n"
 "selecting a different tag in the F-Spot preference\n"
@@ -1468,37 +1574,26 @@ msgstr ""
 "請試試在 F-Spot 偏好對話方塊選擇其他標籤。"
 
 #. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:405
 msgid "Reparented"
 msgstr "重定母本"
 
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "重定母本 ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:422
 #, csharp-format
 msgid "Modified"
 msgid_plural "Modified ({0})"
 msgstr[0] "已修改 ({0})"
 
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1}"
 msgstr "在 {1} 中已修改"
 
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1} ({0})"
 msgstr "在 {1} ({0})中已修改"
 
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:62
-msgid "Original"
-msgstr "原始版本"
-
 #: ../src/Editors/AutoStretchEditor.cs:17
 msgid "Auto Color"
 msgstr "自動校色"
@@ -1511,43 +1606,43 @@ msgstr "調節色彩"
 msgid "Adjust"
 msgstr "調整"
 
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
 msgid "4 x 3 (Book)"
 msgstr "4 x 3 (書本)"
 
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
 msgid "4 x 6 (Postcard)"
 msgstr "4 x 6 (明信片)"
 
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
 msgid "5 x 7 (L, 2L)"
 msgstr "5 x 7 (L, 2L)"
 
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
 msgid "8 x 10"
 msgstr "8 x 10"
 
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
 msgid "Square"
 msgstr "正方形"
 
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
 msgid "Crop"
 msgstr "裁剪"
 
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
 msgid "Select the area that needs cropping."
 msgstr "選取需要剪裁的區域。"
 
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
 msgid "No Constraint"
 msgstr "無限制"
 
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
 msgid "Same as photo"
 msgstr "與相片一樣"
 
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
 msgid "Custom Ratios..."
 msgstr "自選比例..."
 
@@ -1576,28 +1671,9 @@ msgid "Soft Focus"
 msgstr "柔焦"
 
 #: ../src/Editors/TiltEditor.cs:30
-#, fuzzy
 msgid "Straighten"
 msgstr "拉直"
 
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "匯入發生錯誤"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "匯入 {0}{2}{2}{1} 時發生錯誤"
-
-#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
-#, csharp-format
-msgid "No way to save files of type \"{0}\""
-msgstr "無法儲存 \"{0}\" 類型的檔案"
-
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "預期外的錯誤"
-
 #: ../src/FSpot.addin.xml.h:1
 msgid "Copy Photo"
 msgstr "複製相片"
@@ -1614,13 +1690,13 @@ msgstr "開啟以(_W)"
 msgid "Rem_ove Tag"
 msgstr "移除標記(_O)"
 
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/SingleView.cs:427
+#: ../src/ui/main_window.ui.h:16
 msgid "Rotate _Left"
 msgstr "往左旋轉(_L)"
 
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:70
-#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/SingleView.cs:428
+#: ../src/ui/main_window.ui.h:17
 msgid "Rotate _Right"
 msgstr "往右旋轉(_R)"
 
@@ -1628,471 +1704,85 @@ msgstr "往右旋轉(_R)"
 msgid "Tools"
 msgstr "工具"
 
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "附加標籤(_A)"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:41
 msgid "_Delete From Drive"
 msgstr "從磁碟機中刪除(_D)"
 
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:60
 msgid "_Remove From Catalog"
 msgstr "從編目中移除(_R)"
 
 #: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
-msgid "1024 px"
-msgstr "1024 px"
-
-#: ../src/f-spot.glade.h:3
-msgid "320 px"
-msgstr "320 px"
-
-#: ../src/f-spot.glade.h:4
-msgid "480 px"
-msgstr "480 px"
-
-#: ../src/f-spot.glade.h:5
-msgid "640 px"
-msgstr "640 px"
-
-#: ../src/f-spot.glade.h:6
-msgid "800 px"
-msgstr "800 px"
-
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
 msgid "<b>Co_rrections</b>"
 msgstr "<b>校正(_R)</b>"
 
-#: ../src/f-spot.glade.h:13
-msgid "<b>Image Interpolation</b>"
-msgstr "<b>圖像插補</b>"
-
-#: ../src/f-spot.glade.h:15
-msgid "<b>Size</b>"
-msgstr "<b>大小</b>"
-
-#: ../src/f-spot.glade.h:17
-msgid "<b>Summary</b>"
-msgstr "<b>摘要</b>"
-
-#: ../src/f-spot.glade.h:18
-msgid "<b>Transparent Parts</b>"
-msgstr "<b>透明部份</b>"
-
-#: ../src/f-spot.glade.h:19
-msgid "<b>View all pictures imported</b>"
-msgstr "<b>檢視匯入的所有圖片</b>"
-
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:2
 msgid "<b>_White Balance</b>"
 msgstr "<b>白平衡(_W)</b>"
 
-#: ../src/f-spot.glade.h:21
-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>啟用此選項來允許針對拉近拉遠的圖像進行插補處理。你不應該停用此選項以檢視相片,但是停用插補處理可能對於圖示設定很有用處。</i></small>"
-
-#: ../src/f-spot.glade.h:22
-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>你可以選擇要如何顯示圖像內的透明部份。此選項對相片不會造成任何影響,但是當檢視含有透明部份的圖示或是其他美工時,將此設為格子花紋或是自選色彩應該很有用。</i></small>"
-
-#: ../src/f-spot.glade.h:23
-msgid "As _background"
-msgstr "設為背景(_B)"
-
-#: ../src/f-spot.glade.h:24
-msgid "As _custom color: "
-msgstr "設為自選色彩(_C): "
-
-#: ../src/f-spot.glade.h:25
-msgid "As check _pattern"
-msgstr "設為格子花紋(_P)"
-
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "附加標籤:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "附加標籤:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:3
 msgid "C_ontrast:"
 msgstr "對比(_O):"
 
-#: ../src/f-spot.glade.h:31
-msgid "C_reate"
-msgstr "建立(_R)"
-
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "數碼相機選取"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "複製檔案至相片資料夾"
-
-#: ../src/f-spot.glade.h:34
-msgid "Create Mail"
-msgstr "建立郵件"
-
-#: ../src/f-spot.glade.h:35
-msgid "Create _icon for this tag when first used"
-msgstr "當第一次使用時為此標籤建立圖示(_I)"
-
-#: ../src/f-spot.glade.h:36
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr "建立郵件並將所選相片(可能會被縮放)作為附件"
-
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr "偵測複本"
-
-#: ../src/f-spot.glade.h:38
-msgid "Display File _Names"
-msgstr "顯示檔案名稱(_N)"
-
-#: ../src/f-spot.glade.h:39
-msgid "Display only those photos that were imported in specified Rolls."
-msgstr "只顯示那些被匯入指定膠卷內的相片。"
-
-#: ../src/f-spot.glade.h:40
-msgid "Do not send a mail"
-msgstr "不要寄出郵件"
-
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "電子郵件(_M):"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "匯出標題和註解(_X)"
-
-#: ../src/f-spot.glade.h:43
-msgid "Estimated new size"
-msgstr "估計新大小"
-
-#: ../src/f-spot.glade.h:45
-msgid "Extra large"
-msgstr "非常大"
-
-#: ../src/f-spot.glade.h:46
-msgid "F-Spot View"
-msgstr "F-Spot 檢視"
-
-#: ../src/f-spot.glade.h:48
-msgid "Filter on selected rolls"
-msgstr "所選膠卷的過濾條件"
-
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "G_allery:"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "圖庫"
-
-#: ../src/f-spot.glade.h:51 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "匯入"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "匯入來源:"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "包括子目錄(_C)"
-
-#: ../src/f-spot.glade.h:55
-msgid "Large"
-msgstr "大"
-
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:4
 msgid "Manage your custom selection ratios"
 msgstr "管理你自選的選取比例"
 
-#: ../src/f-spot.glade.h:57
-msgid "Medium"
-msgstr "中"
-
-#: ../src/f-spot.glade.h:59
-msgid "Number of photos in selected rolls:"
-msgstr "所選膠卷內的相片數量:"
-
-#: ../src/f-spot.glade.h:60
-msgid "Number of pictures"
-msgstr "圖片數目:"
-
-#: ../src/f-spot.glade.h:61
-msgid "Open _Folder..."
-msgstr "開啟資料夾(_F)..."
-
-#: ../src/f-spot.glade.h:63
-msgid "Original size (possible very large file size)"
-msgstr "原始大小(檔案可能非常大)"
-
-#: ../src/f-spot.glade.h:64 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
-msgid "P_arent Tag:"
-msgstr "父標籤(_A):"
-
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "暫停"
-
-#: ../src/f-spot.glade.h:66
-msgid "Preferences"
-msgstr "偏好設定"
-
-#: ../src/f-spot.glade.h:67 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "上一次"
-
-#: ../src/f-spot.glade.h:68
-msgid "Repair"
-msgstr "修復"
-
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "選擇要從數碼相機複製的相片..."
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:5 ../src/ui/tag_selection_dialog.ui.h:1
 msgid "Select a Tag..."
 msgstr "選擇標籤..."
 
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr "請選擇你要傳輸檔案的數碼相機"
-
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "選擇的相機: "
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:6
 msgid "Selection Constraints"
 msgstr "選取限制"
 
-#: ../src/f-spot.glade.h:76 ../src/ui/main_window.ui.h:21
-msgid "Set as _Background"
-msgstr "設定為背景(_B)"
-
-#: ../src/f-spot.glade.h:77
-msgid "Show all photos."
-msgstr "顯示所有相片。"
-
-#: ../src/f-spot.glade.h:78
-msgid "Show or hide the side pane"
-msgstr "顯示或隱藏側面的長方格"
-
-#: ../src/f-spot.glade.h:79
-msgid "Show or hide the toolbar"
-msgstr "顯示或隱藏工具列"
-
-#: ../src/f-spot.glade.h:80
-msgid "Side _pane"
-msgstr "側面的長方格(_P)"
-
-#: ../src/f-spot.glade.h:81
-msgid "Small"
-msgstr "小"
-
-#: ../src/f-spot.glade.h:82
-msgid ""
-"Specify if an original size picture should be rotated or not. Smaller sizes "
-"are automatically rotated."
-msgstr "指定原始大小的圖片是否該被旋轉。大小較小的會被自動旋轉。"
-
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "除去圖像的中介資料(_M)"
-
 #. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:8
 msgid "Te_mp:"
 msgstr "溫度(_M):"
 
-#: ../src/f-spot.glade.h:86
-msgid "Tiny"
-msgstr "極小"
-
-#: ../src/f-spot.glade.h:87
-msgid "Total original size"
-msgstr "總計原始大小"
-
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:28
-msgid "Zoom _in"
-msgstr "拉近(_I)"
-
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:29
-msgid "Zoom _out"
-msgstr "拉遠(_O)"
-
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:30
-msgid "Zoom in"
-msgstr "拉近"
-
-#: ../src/f-spot.glade.h:91 ../src/ui/main_window.ui.h:31
-msgid "Zoom out"
-msgstr "拉遠"
-
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:9
 msgid "_Brightness:"
 msgstr "亮度(_B):"
 
-#: ../src/f-spot.glade.h:93
-msgid "_Create Mail"
-msgstr "建立郵件(_C)"
-
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
-msgid "_Edit"
-msgstr "編輯(_E)"
-
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:10
 msgid "_Exposure:"
 msgstr "曝光(_E):"
 
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
-msgid "_Fullscreen"
-msgstr "全螢幕(_F)"
-
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Gallery"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
-msgid "_Help"
-msgstr "求助(_H)"
-
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:11
 msgid "_Hue:"
 msgstr "色調(_H):"
 
-#: ../src/f-spot.glade.h:104
-msgid "_Interpolate image on zoom"
-msgstr "拉近或拉遠圖片時對圖像進行插補(_I)"
-
-#: ../src/f-spot.glade.h:105
-msgid "_New Window"
-msgstr "新視窗(_N)"
-
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "完成上傳後在瀏覽器中開啟圖庫(_O)"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "完成匯出後開啟目的地(_O)"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
-msgid "_Photo"
-msgstr "相片(_P)"
-
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:12
 msgid "_Saturation:"
 msgstr "飽和度(_S):"
 
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "相片縮放不能超過(_S):"
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
-msgid "_Slideshow"
-msgstr "幻燈片(_8)"
-
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "除去中介資料(_S)"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
-msgid "_Tag Name:"
-msgstr "標籤名稱(_T):"
-
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:13
 msgid "_Tint:"
 msgstr "色相(_T):"
 
-#: ../src/f-spot.glade.h:116
-msgid "_Toolbar"
-msgstr "工具列(_T)"
-
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
-msgid "_View"
-msgstr "檢視(_V)"
-
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "虛擬檔案系統(_V)"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
-msgid "and"
-msgstr "及"
-
-#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
-msgid ""
-"at\n"
-"after\n"
-"between"
-msgstr ""
-"於\n"
-"晚於\n"
-"介於"
-
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
 #: ../src/FullScreenView.cs:58
 msgid "Hide"
 msgstr "隱藏"
 
 #: ../src/FullScreenView.cs:60
-msgid "Hide Toolbar"
+msgid "Hide toolbar"
 msgstr "隱藏工具列"
 
 #: ../src/FullScreenView.cs:66
 msgid "Info"
 msgstr "資訊"
 
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:201
-msgid "Image Information"
-msgstr "圖像資訊"
+#: ../src/FullScreenView.cs:68
+msgid "Image information"
+msgstr "圖片資訊"
 
 #: ../src/FullScreenView.cs:73
 msgid "Exit fullscreen"
 msgstr "退出全螢幕"
 
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:341
-#: ../src/SingleView.cs:88
+#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:314
+#: ../src/SingleView.cs:91
 msgid "Slideshow"
 msgstr "幻燈片"
 
@@ -2112,201 +1802,16 @@ msgstr "更多日期"
 msgid "More"
 msgstr "更多"
 
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:34
 msgid "_Clear Date Range"
 msgstr "清除日期範圍(_C)"
 
-#: ../src/Imaging/Exif.cs:228
-msgid "Image Directory"
-msgstr "圖像目錄"
-
-#: ../src/Imaging/Exif.cs:230
-msgid "Thumbnail Directory"
-msgstr "縮圖目錄"
-
-#: ../src/Imaging/Exif.cs:232
-msgid "Exif Directory"
-msgstr "Exif 目錄"
-
-#: ../src/Imaging/Exif.cs:234
-msgid "GPS Directory"
-msgstr "GPS 目錄"
-
-#: ../src/Imaging/Exif.cs:236
-msgid "InterOperability Directory"
-msgstr "互通目錄"
-
-#: ../src/Imaging/Exif.cs:238
-msgid "Unknown Directory"
-msgstr "未知目錄"
-
-#: ../src/Imaging/ImageFile.cs:117
-msgid "Writing to this file format is not supported"
-msgstr "不支援寫入此檔案格式"
-
-#: ../src/Imaging/IptcFile.cs:145
-msgid "IPTC Information Interchange Model (IIM) Version number"
-msgstr "IPTC Information Interchange Model (IIM) 版本號碼"
-
-#: ../src/Imaging/IptcFile.cs:147
-msgid "OSI Destination routing information"
-msgstr "OSI 目標路由資訊"
-
-#: ../src/Imaging/IptcFile.cs:149
-msgid "IPTC file format"
-msgstr "IPTC 檔案格式"
-
-#: ../src/Imaging/IptcFile.cs:151
-msgid "Identifies the provider and product"
-msgstr "識別供應商與產品"
-
-#: ../src/Imaging/IptcFile.cs:153
-msgid "A unique number identifying the envelope"
-msgstr "用來辨別信封的唯一編號"
-
-#: ../src/Imaging/IptcFile.cs:155
-msgid "A unique number"
-msgstr "一個獨特的號碼"
-
-#: ../src/Imaging/IptcFile.cs:157
-msgid ""
-"The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
-msgstr "信封處理優先序介於 1 (最緊急) 與 9 (最不緊急) 之間"
-
-#: ../src/Imaging/IptcFile.cs:159
-msgid "The year, month and day (CCYYMMDD) the service sent the material"
-msgstr "附註年月日 (CCYYMMDD) 的服務"
-
-#: ../src/Imaging/IptcFile.cs:161
-msgid "The hour, minute and second (HHMMSS) the service sent the material"
-msgstr "這個服務送出該資料的時間,以時、分與秒標記 (HHMMSS)"
-
-#: ../src/Imaging/IptcFile.cs:163
-msgid "The character set designation"
-msgstr "設定的字符編碼"
-
-#: ../src/Imaging/IptcFile.cs:165
-msgid "External globally unique object identifier"
-msgstr "外部全域獨立物件識別碼"
-
-#: ../src/Imaging/IptcFile.cs:170
-msgid "Abstract Relationship Method (ARM) identifier"
-msgstr "抽象關聯模式 (ARM) 識別碼"
-
-#: ../src/Imaging/IptcFile.cs:172
-msgid "Abstract Relationship Method (ARM) version number."
-msgstr "抽象關係方法 (ARM) 版本編號。"
-
-#: ../src/Imaging/IptcFile.cs:175
-msgid "Number identifying the IIM version this application record uses"
-msgstr "作為辨識此應用程式紀錄所使用的 IIM 版本之用的編號"
-
-#: ../src/Imaging/IptcFile.cs:177
-msgid "Object type reference"
-msgstr "物件型態參考"
-
-#: ../src/Imaging/IptcFile.cs:182
-msgid "Object attribute reference"
-msgstr "物件屬性參考"
-
-#: ../src/Imaging/IptcFile.cs:188 ../src/Imaging/IptcFile.cs:192
-msgid "Object name"
-msgstr "物件名稱"
-
-#: ../src/Imaging/IptcFile.cs:190
-msgid "Status of the objectdata according to the provider"
-msgstr "根據供應商物件資料提供的狀態"
-
-#: ../src/Imaging/IptcFile.cs:194
-msgid "Location within a city or area where the object originates"
-msgstr "該物件起源自何城市或區域"
-
-#: ../src/Imaging/IptcFile.cs:197
-msgid "Name of the city the content is focussing on"
-msgstr "內容所聚焦的城市其名稱"
-
-#: ../src/Imaging/IptcFile.cs:200
-msgid "Copyright information for"
-msgstr "其版權資訊"
-
-#: ../src/Imaging/IptcFile.cs:203
-msgid "Full name of the country of the focus of the content"
-msgstr "內容所聚焦的地區其全名"
-
-#: ../src/Imaging/IptcFile.cs:206
-msgid ""
-"Two or three letter ISO3166 code of the country of the focus of the content"
-msgstr "內容所聚焦的地區其 ISO3166 代碼,由 2-3 個字母組成"
-
-#: ../src/Imaging/IptcFile.cs:209
-msgid "Creator of the content"
-msgstr "內容建立者"
-
-#: ../src/Imaging/IptcFile.cs:212
-msgid "Provider of the object"
-msgstr "物件提供者"
-
-#: ../src/Imaging/IptcFile.cs:215
-msgid "The title of the author or creator"
-msgstr "作者或建立者的標題"
-
-#: ../src/Imaging/IptcFile.cs:218
-msgid ""
-"The person involved in writing, editing or correcting the object data or "
-"caption/abstract"
-msgstr "這個人參與過寫作、編輯、或是校正這個物件資料或是相片說明/摘要"
-
-#: ../src/Imaging/IptcFile.cs:222
-msgid "Headline of the content"
-msgstr "內容的標題"
-
-#: ../src/Imaging/IptcFile.cs:225
-msgid ""
-"Instructions from the creator to the receiver not covered by other fields"
-msgstr "來自建立者給予接收者的指示,沒有被其他領域涵蓋"
-
-#: ../src/Imaging/IptcFile.cs:228
-msgid "Intellectual genre of the object"
-msgstr "物件的智慧類型"
-
-#: ../src/Imaging/IptcFile.cs:241
-msgid "Unknown IIM DataSet"
-msgstr "不明的 IIM DataSet"
-
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "選擇資料夾"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(偵測不到數碼相機)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "正在載入 {1} 之 {0}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "完成載入"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "目錄不存在。"
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist.  Please choose a "
-"different directory"
-msgstr "你選擇的目錄 \"{0}\" 不存在。請選擇另外的目錄"
-
-#: ../src/ImportCommand.cs:738 ../src/ImportCommand.cs:740
-#: ../src/XmpTagsImporter.cs:89
+#: ../src/Import/ImportController.cs:468 ../src/Import/ImportController.cs:470
+#: ../src/Import/MetadataImporter.cs:50
 msgid "Imported Tags"
 msgstr "匯入的標籤"
 
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:308 ../src/SingleView.cs:71
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:281 ../src/SingleView.cs:74
 msgid "Rotate Left"
 msgstr "向左旋轉"
 
@@ -2314,7 +1819,7 @@ msgstr "向左旋轉"
 msgid "Rotate picture left"
 msgstr "將圖片向左旋轉"
 
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:312 ../src/SingleView.cs:76
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:285 ../src/SingleView.cs:79
 msgid "Rotate Right"
 msgstr "向右旋轉"
 
@@ -2326,123 +1831,128 @@ msgstr "將圖片向右旋轉"
 msgid "Next picture"
 msgstr "下一張圖片"
 
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "上一次"
+
 #: ../src/ItemAction.cs:124
 msgid "Previous picture"
 msgstr "上一張圖片"
 
-#: ../src/MainWindow.cs:303
+#: ../src/Jobs/SyncMetadataJob.cs:73
+#, csharp-format
+msgid ""
+"Metadata of file {0} may be corrupt, refusing to write to it, falling back "
+"to XMP sidecar."
+msgstr "檔案 {0} 的中介資料可能損壞,拒絕寫入,回溯至 XMP sidecar。"
+
+#: ../src/MainWindow.cs:274 ../src/UI.Dialog/ImportDialog.cs:195
+#: ../src/ui/import.ui.h:3
+msgid "Import"
+msgstr "匯入"
+
+#: ../src/MainWindow.cs:276
 msgid "Import new images"
-msgstr "匯入新圖像"
+msgstr "匯入新圖片"
 
-#: ../src/MainWindow.cs:319 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:292 ../src/ui/main_window.ui.h:3
 msgid "Browse"
 msgstr "瀏覽"
 
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:296
 msgid "Browse many photos simultaneously"
 msgstr "同時瀏覽多個相片"
 
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:300
 msgid "Edit Image"
-msgstr "編輯圖像"
+msgstr "編輯圖片"
 
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:304
 msgid "View and edit a photo"
 msgstr "檢視及編輯相片"
 
-#: ../src/MainWindow.cs:336 ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:309 ../src/SingleView.cs:86
 msgid "Fullscreen"
 msgstr "全螢幕"
 
-#: ../src/MainWindow.cs:338 ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:311 ../src/SingleView.cs:88
 msgid "View photos fullscreen"
 msgstr "全螢幕檢視相片"
 
-#: ../src/MainWindow.cs:343 ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:316 ../src/SingleView.cs:93
 msgid "View photos in a slideshow"
 msgstr "於幻燈片中檢視相片"
 
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:331
 msgid "Previous photo"
 msgstr "上一張相片"
 
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:336
 msgid "Next photo"
 msgstr "下一張相片"
 
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "偵測不到數碼相機。"
-
-#: ../src/MainWindow.cs:1519
-msgid ""
-"F-Spot was unable to find any cameras attached to this system.  Double check "
-"that the camera is connected and has power"
-msgstr "F-Spot 無法找到任何連接到系統的數碼相機。請再次確定它已連接並且電源已開啟。"
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "連接數碼相機時發生錯誤"
+#: ../src/MainWindow.cs:413
+msgid "Show _Find Bar"
+msgstr "顯示搜尋列(_F)"
 
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "連接數碼相機時收到錯誤 \"{0}\""
+#: ../src/MainWindow.cs:416
+msgid "Hide _Find Bar"
+msgstr "隱藏搜尋列(_F)"
 
 #. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1724
 #, csharp-format
 msgid "Merge the selected tag"
 msgid_plural "Merge the {0} selected tags?"
 msgstr[0] "合併選定的 {0} 個標籤?"
 
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1751
 msgid ""
 "This operation will merge the selected tags and any sub-tags into a single "
 "tag."
 msgstr "此操作將合併所選的標籤與任何子標籤為單一標籤。"
 
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1753
 msgid "_Merge Tags"
 msgstr "合併標籤(_M)"
 
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1958
 #, csharp-format
 msgid "{0} Photo out of {1}"
 msgid_plural "{0} Photos out of {1}"
 msgstr[0] "{1} 張相片中的第 {0} 張"
 
-#: ../src/MainWindow.cs:2082 ../src/SingleView.cs:467
+#: ../src/MainWindow.cs:1960 ../src/SingleView.cs:469
 #, csharp-format
 msgid "{0} Photo"
 msgid_plural "{0} Photos"
 msgstr[0] "{0} 張相片"
 
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1963
 #, csharp-format
 msgid " ({0} selected)"
 msgid_plural " ({0} selected)"
 msgstr[0] " (已選 {0} 張)"
 
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2044
 msgid "_Ok"
 msgstr "確定(_O)"
 
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2045
 msgid "Error Deleting Picture"
 msgstr "刪除圖片時發生錯誤"
 
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2050
 #, csharp-format
 msgid "No permission to delete the file:{1}{0}"
 msgstr "沒有刪除檔案的權限:{1}{0}"
 
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2054
 #, csharp-format
 msgid "An error of type {0} occurred while deleting the file:{2}{1}"
 msgstr "刪除檔案時發生類型 {0} 的錯誤:{2}{1}"
 
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2086
 #, csharp-format
 msgid "Delete the selected photo permanently?"
 msgid_plural "Delete the {0} selected photos permanently?"
@@ -2450,18 +1960,18 @@ msgstr[0] ""
 "要永久刪除選擇的相片嗎?\n"
 "要永久刪除選擇的 {0} 張相片嗎?"
 
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2090
 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] "這樣會從磁碟機中刪除這張相片的所有版本。"
 
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2093
 msgid "_Delete photo"
 msgid_plural "_Delete photos"
 msgstr[0] "刪除相片(_D)"
 
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2129
 #, csharp-format
 msgid "Remove the selected photo from F-Spot?"
 msgid_plural "Remove the {0} selected photos from F-Spot?"
@@ -2469,84 +1979,84 @@ msgstr[0] ""
 "要從 F-Spot 移除已選的相片嗎?\n"
 "要從 F-Spot 移除已選的 {0} 張相片嗎?"
 
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2134
 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 "如果你要從 F-Spot 編目中移除相片,那麼所有標籤資訊都會一併消失。不過,你仍然可以再次把相片匯入至 F-Spot 中。"
 
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2135
 msgid "_Remove from Catalog"
 msgstr "從編目中移除(_R)"
 
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2209
 #, csharp-format
 msgid "Delete tag \"{0}\"?"
-msgstr "刪除標籤\"{0}\"?"
+msgstr "要刪除「{0}」標籤嗎?"
 
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2211
 #, csharp-format
 msgid "Delete the {0} selected tags?"
 msgstr "刪除選定的標籤 {0} ?"
 
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2216
 msgid "photo"
 msgid_plural "photos"
 msgstr[0] "相片"
 
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2218
 #, 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] "如果你刪除此標籤,那麼與 {0} {1} 的關聯都會消失。"
 
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2223
 msgid "_Delete tag"
 msgid_plural "_Delete tags"
 msgstr[0] "刪除標籤(_D)"
 
 #. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2237
 msgid "Tag is not empty"
 msgstr "標籤不是空的"
 
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2238
 #, csharp-format
 msgid ""
 "Can not delete tags that have tags within them.  Please delete tags under "
 "\"{0}\" first"
 msgstr "無法刪除內含標籤的標籤。請先刪除「{0}」下的標籤"
 
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2678
 msgid "Rotate selected photo left"
 msgid_plural "Rotate selected photos left"
 msgstr[0] "將已選的相片向左旋轉"
 
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2691
 msgid "Rotate selected photo right"
 msgid_plural "Rotate selected photos right"
 msgstr[0] "將已選的相片向右旋轉"
 
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2702
 #, csharp-format
 msgid "Find _Selected Tag"
 msgid_plural "Find _Selected Tags"
 msgstr[0] "尋找選定的標籤(_S)"
 
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2706
 #, csharp-format
 msgid "Find Selected Tag _With"
 msgid_plural "Find Selected Tags _With"
 msgstr[0] "尋找選定的標籤以(_W)"
 
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2747
 msgid "Create New Version?"
 msgid_plural "Create New Versions?"
 msgstr[0] "建立新版本?"
 
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2749
 #, csharp-format
 msgid ""
 "Before launching {1}, should F-Spot create a new version of the selected "
@@ -2556,272 +2066,156 @@ msgid_plural ""
 "photos to preserve the originals?"
 msgstr[0] "在啟動 {1} 之前,F-Spot 應該為所選相片建立新的版本以保留原始版本嗎?"
 
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2771
 msgid "XCF version"
 msgstr "XCF 版本"
 
-#: ../src/MetadataStore.cs:19
-msgid "Creator"
-msgstr "建立者"
-
-#: ../src/MetadataStore.cs:20
-msgid "Title"
-msgstr "標題"
-
-#: ../src/MetadataStore.cs:21
-msgid "Copyright"
-msgstr "版權"
-
-#: ../src/MetadataStore.cs:22
-msgid "Subject and Keywords"
-msgstr "主題與關鍵字"
-
-#: ../src/MetadataStore.cs:23
-msgid "Compression"
-msgstr "壓縮"
-
-#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
-#. "when Planar Configuration=1, this implies that all components must have
-#. the same BitsPerSample value; when Planar Configuration=2, different
-#. components could have different bit depths."
-#: ../src/MetadataStore.cs:29
-msgid "Planar Configuration"
-msgstr "平面設定"
-
-#: ../src/MetadataStore.cs:31
-msgid "Orientation"
-msgstr "方向"
-
-#: ../src/MetadataStore.cs:33
-msgid "Photometric Interpretation"
-msgstr "光度解譯"
-
-#: ../src/MetadataStore.cs:35
-msgid "Resolution Unit"
-msgstr "解像度單位"
-
-#: ../src/MetadataStore.cs:37
-msgid "Exposure Program"
-msgstr "曝光模式"
-
-#: ../src/MetadataStore.cs:39
-msgid "Metering Mode"
-msgstr "測量模式"
-
-#: ../src/MetadataStore.cs:41
-msgid "Exposure Mode"
-msgstr "曝光模式"
-
-#: ../src/MetadataStore.cs:43
-msgid "Custom Rendered"
-msgstr "自選繪製"
-
-#: ../src/MetadataStore.cs:45
-msgid "Components Configuration"
-msgstr "元件設定"
-
-#: ../src/MetadataStore.cs:47
-msgid "Light Source"
-msgstr "光源"
-
-#: ../src/MetadataStore.cs:49
-msgid "Sensing Method"
-msgstr "感測方法"
-
-#: ../src/MetadataStore.cs:51
-msgid "Color Space"
-msgstr "色彩空間"
-
-#: ../src/MetadataStore.cs:53
-msgid "White Balance"
-msgstr "白平衡"
-
-#: ../src/MetadataStore.cs:55
-msgid "Focal Plane Resolution Unit"
-msgstr "對焦平面解像度單位"
-
-#: ../src/MetadataStore.cs:57
-msgid "File Source Type"
-msgstr "來源檔案類型"
-
-#: ../src/MetadataStore.cs:59
-msgid "Scene Capture Type"
-msgstr "情境捕捉類型"
-
-#. Translators: Gain Control is the label for the exif:GainControl tag
-#. "This tag indicates the degree of overall image gain adjustment."
-#: ../src/MetadataStore.cs:63
-msgid "Gain Control"
-msgstr "取得控制"
-
-#: ../src/MetadataStore.cs:65
-msgid "Contrast"
-msgstr "對比度"
-
-#: ../src/MetadataStore.cs:67
-msgid "Saturation"
-msgstr "飽和度"
-
-#: ../src/MetadataStore.cs:69
-msgid "Sharpness"
-msgstr "銳利"
-
-#: ../src/MetadataStore.cs:71
-msgid "Scene Type"
-msgstr "情境類型"
+#: ../src/PhotoStore.cs:165 ../src/ui/mail_dialog.ui.h:17
+msgid "Original"
+msgstr "原始版本"
 
 #. Fixme this should really set parent menu
 #. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
 msgid "(No Tags)"
 msgstr "(無標籤)"
 
-#: ../src/PhotoVersionCommands.cs:58
+#: ../src/PhotoVersionCommands.cs:59
 msgid "Create New Version"
 msgstr "建立新的版本"
 
-#: ../src/PhotoVersionCommands.cs:59
+#: ../src/PhotoVersionCommands.cs:60
 msgid "Name:"
 msgstr "名稱:"
 
-#: ../src/PhotoVersionCommands.cs:63
+#: ../src/PhotoVersionCommands.cs:64
 msgid "Rename Version"
 msgstr "重新命名版本"
 
-#: ../src/PhotoVersionCommands.cs:64
+#: ../src/PhotoVersionCommands.cs:65
 msgid "New name:"
 msgstr "新的名稱:"
 
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "無法建立新版本"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "收到異常 \"{0}\"。無法建立版本 \"{1}\""
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "真的要刪除?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "取消"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:125
 msgid "Delete"
 msgstr "刪除"
 
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:126
 #, csharp-format
 msgid "Really delete version \"{0}\"?"
-msgstr "真的要刪除版本 \"{0}\" ?"
+msgstr "真的要刪除「{0}」版本嗎?"
 
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "無法刪除版本"
+#: ../src/PhotoVersionCommands.cs:127
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "這會移除該版本並且從磁碟上刪除相對應的檔案。"
 
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:172
+msgid "De_tach"
+msgstr "分離(_T)"
+
+#: ../src/PhotoVersionCommands.cs:173
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "收到異常 \"{0}\"。無法刪除版本 \"{1}\""
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "真的要從「{1}」分離版本「{0}」嗎?"
+
+#: ../src/PhotoVersionCommands.cs:174
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr "這會讓各版本相片在相片庫內顯現為獨立的相片。若要還原,請將新相片拖放回其母本。"
 
 #: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "無法將版本重新命名"
+msgid "Re_parent"
+msgstr "重定母本(_P)"
 
 #: ../src/PhotoVersionCommands.cs:197
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "收到異常 \"{0}\"。無法重新命名版本 \"{1}\""
-
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
-msgid "(No Edits)"
-msgstr "(無修改)"
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "真的要將「{2}」張相片重定母本為「{1}」的版本嗎 ?"
 
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "編輯相片時發生錯誤"
+#: ../src/PhotoVersionCommands.cs:200
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr "這會讓多張相片在相片庫內顯現為單一個。可以使用「相片」選單將眾版本分離。"
 
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
+#: ../src/PhotoVersionCommands.cs:240
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "收到異常 \"{0}\"。無法儲存相片 {1}"
+msgid "Received exception \"{0}\"."
+msgstr "收到異常「{0}」。"
+
+#: ../src/PhotoVersionMenu.cs:54 ../src/Widgets/InfoBox.cs:470
+msgid "(No Edits)"
+msgstr "(無修改)"
 
-#: ../src/PhotoView.cs:357
-msgid "Comment:"
-msgstr "註解:"
+#: ../src/PhotoView.cs:336
+msgid "Description:"
+msgstr "描述:"
 
-#: ../src/Preferences.cs:152
+#: ../src/Preferences.cs:157
 msgid "Photos"
 msgstr "相片"
 
-#: ../src/PrintOperation.cs:32
+#: ../src/PrintOperation.cs:33
 msgid "Image Settings"
-msgstr "圖像設定"
+msgstr "圖片設定"
 
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
 msgid "Find: "
 msgstr "尋找: "
 
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
 msgid "Untagged photos"
 msgstr "未標籤的相片"
 
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
 msgid "Rated photos"
 msgstr "已評分的相片"
 
 #. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
 msgid "Import roll"
 msgstr "匯入膠卷"
 
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
 msgid "Clear search"
 msgstr "清除搜尋"
 
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
 msgid "Refresh search"
 msgstr "更新搜尋"
 
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
 msgid "No matching photos found"
 msgstr "找不到符合的相片"
 
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "隱藏搜尋列(_F)"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "顯示搜尋列(_F)"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:74
 msgid "Unable to rotate this type of photo"
 msgstr "無法旋轉這種相片"
 
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:93
 msgid "Unable to rotate readonly file"
 msgstr "無法旋轉唯讀檔"
 
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:156
 msgid "Rotating photos"
 msgstr "正在旋轉相片"
 
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:167
 #, csharp-format
 msgid "Rotating photo \"{0}\""
-msgstr "正在旋轉圖片\"{0}\""
+msgstr "正在旋轉相片「{0}」"
 
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:180
 msgid "Directory not found"
 msgstr "找不到目錄"
 
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:182
+msgid "File not found"
+msgstr "找不到檔案"
+
+#: ../src/RotateCommand.cs:200
 #, csharp-format
 msgid "Unable to rotate photo"
 msgid_plural "Unable to rotate {0} photos"
@@ -2829,7 +2223,7 @@ msgstr[0] ""
 "無法旋轉這張相片\n"
 "無法旋轉這 {0} 張相片"
 
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:202
 #, csharp-format
 msgid ""
 "The photo could not be rotated because it is on a read only file system or "
@@ -2841,88 +2235,97 @@ msgstr[0] ""
 "無法旋轉這張相片,因為它位於一個唯讀的檔案系統,例如光碟片。請檢查權限,然後再試一次。\n"
 "無法旋轉這 {0} 張相片,因為它位於一個唯讀的檔案系統,例如光碟片。請檢查權限,然後再試一次。"
 
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:229
 #, csharp-format
 msgid "Received error \"{0}\" while attempting to rotate {1}"
-msgstr "試圖旋轉 {1} 時接收到錯誤 \"{0}\""
+msgstr "試圖旋轉 {1} 時接收到錯誤「{0}」"
 
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:234
 msgid "Error while rotating photo."
 msgstr "旋轉相片時發生錯誤。"
 
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:211
 msgid "Preparing email"
 msgstr "正在準備電子郵件"
 
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:255
 #, csharp-format
 msgid "Exporting picture \"{0}\""
-msgstr "正在匯出圖片\"{0}\""
+msgstr "正在匯出圖片「{0}」"
 
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:274
 msgid "Error processing image"
-msgstr "處理圖像時錯誤"
+msgstr "處理圖片時錯誤"
 
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:275
 #, csharp-format
 msgid "An error occured while processing \"{0}\": {1}"
 msgstr "當處理「{0}」時發生錯誤:{1}"
 
 #. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:288
 msgid "My Photos"
 msgstr "我的相片"
 
-#: ../src/Sharpener.cs:72
+#: ../src/Sharpener.cs:73
 msgid "Error saving sharpened photo"
 msgstr "儲存銳化相片時發生錯誤"
 
-#: ../src/Sharpener.cs:102
+#: ../src/Sharpener.cs:74 ../src/UI.Dialog/EditExceptionDialog.cs:27
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "收到異常「{0}」。無法儲存相片 {1}"
+
+#: ../src/Sharpener.cs:103
 msgid "Sharpen"
 msgstr "銳化"
 
-#: ../src/Sharpener.cs:112
+#: ../src/Sharpener.cs:113
 msgid "Amount:"
 msgstr "數量:"
 
-#: ../src/Sharpener.cs:113
+#: ../src/Sharpener.cs:114
 msgid "Radius:"
 msgstr "半徑:"
 
-#: ../src/Sharpener.cs:114
+#: ../src/Sharpener.cs:115
 msgid "Threshold:"
 msgstr "門檻值:"
 
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:76
 msgid "Rotate photo left"
 msgstr "往左旋轉相片"
 
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:81
 msgid "Rotate photo right"
 msgstr "往右旋轉相片"
 
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:118
 msgid "Folder"
 msgstr "資料夾"
 
-#: ../src/SingleView.cs:341
+#: ../src/SingleView.cs:343
 msgid "Open"
 msgstr "開啟"
 
-#: ../src/SingleView.cs:428
+#: ../src/SingleView.cs:346
+msgid "Select Folder"
+msgstr "選擇資料夾"
+
+#: ../src/SingleView.cs:430
 msgid "Set as Background"
 msgstr "設為背景"
 
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:116 ../src/TagSelectionWidget.cs:492
+#: ../src/UI.Dialog/EditTagDialog.cs:76
 msgid "This name is already in use"
 msgstr "這個名稱已被使用"
 
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:166
 msgid "Create New Tag"
 msgstr "建立新標籤"
 
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:167
 msgid "Name of New Tag:"
 msgstr "新標籤名稱:"
 
@@ -2932,7 +2335,7 @@ msgid "Find"
 msgid_plural "Find"
 msgstr[0] "尋找"
 
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
 msgid "Create New Tag..."
 msgstr "建立新標籤..."
 
@@ -2962,12 +2365,12 @@ msgstr "合併標籤"
 #: ../src/TagQueryWidget.cs:34
 #, csharp-format
 msgid "Include Photos Tagged \"{0}\""
-msgstr "包含被標為 \"{0}\" 的相片"
+msgstr "包含被標為「{0}」的相片"
 
 #: ../src/TagQueryWidget.cs:39
 #, csharp-format
 msgid "Exclude Photos Tagged \"{0}\""
-msgstr "不包含被標為 \"{0}\" 的相片"
+msgstr "不包含被標為「{0}」的相片"
 
 #: ../src/TagQueryWidget.cs:44
 msgid "Remove From Search"
@@ -2983,41 +2386,41 @@ msgstr[0] "尋找以(_W)"
 msgid "All"
 msgstr "全部"
 
-#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:592
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
 #, csharp-format
 msgid "Not {0}"
 msgstr "非 {0}"
 
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
 msgid "Drag tags here to search for them"
 msgstr "拖曳標籤至此來為他們搜尋"
 
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:491
 msgid "Error renaming tag"
 msgstr "重新命名標籤時發生錯誤"
 
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:205
 msgid "Favorites"
 msgstr "最愛"
 
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:210
 msgid "Hidden"
 msgstr "隱藏"
 
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:218
 msgid "People"
 msgstr "人物"
 
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:223
 msgid "Places"
 msgstr "地方"
 
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:228
 msgid "Events"
 msgstr "事件"
 
 #. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:241 ../src/Widgets/InfoBox.cs:344
 msgid "(None)"
 msgstr "(無)"
 
@@ -3037,34 +2440,36 @@ msgstr " 或 "
 #. OPS The operators we support, case insensitive
 #. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
 #: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:533
 msgid "or"
 msgstr "或"
 
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
 msgid "Updating Thumbnails"
 msgstr "正在更新縮圖"
 
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
 #, csharp-format
 msgid "Updating picture \"{0}\""
-msgstr "正在上傳圖片 \"{0}\""
+msgstr "正在上傳圖片「{0}」"
 
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:99
 msgid "Photo management for GNOME"
 msgstr "GNOME 的相片管理"
 
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
-
 #: ../src/UI.Dialog/AboutDialog.cs:100
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
+
+#: ../src/UI.Dialog/AboutDialog.cs:124
 msgid "translator-credits"
 msgstr ""
-"GNOME 程式中文化郵件論壇\n"
-"community at linuxhall.org\n"
+"GNOME 專案中文化郵件論壇\n"
+"chinese-l10n at googlegroups.com\n"
 "\n"
-"Hialan Liu <hialan.liu at gmail.com>, 2007Stanley Wong <stanley18fan0k at yahoo.com.hk>, 2005\n"
+"Stanley Wong <stanley18fan0k at yahoo.com.hk>, 2005\n"
+"Hialan Liu <hialan.liu at gmail.com>, 2007\n"
+"Cheng-Chia Tseng <pswo10680 at gmail.com>, 2010.\n"
 "\n"
 "Launchpad Contributions:\n"
 "  Accord Tsai https://launchpad.net/~accordtsai\n"
@@ -3076,62 +2481,66 @@ msgstr ""
 "  Tenki https://launchpad.net/~tenki-jih\n"
 "  nckuhuahua https://launchpad.net/~nckuhuahua"
 
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:129
 msgid "F-Spot Website"
 msgstr "F-Spot 網站"
 
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
 #: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
 #, csharp-format
 msgid "Shift all photos by {0}"
 msgstr "根據 {0} 轉換所有相片"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:99
+#: ../src/UI.Dialog/DateRangeDialog.cs:90
 msgid "Today"
 msgstr "今天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:101
+#: ../src/UI.Dialog/DateRangeDialog.cs:92
 msgid "Yesterday"
 msgstr "昨天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:103
+#: ../src/UI.Dialog/DateRangeDialog.cs:94
 msgid "Last 7 days"
 msgstr "最近 7 天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:105
+#: ../src/UI.Dialog/DateRangeDialog.cs:96
 msgid "Last 30 days"
 msgstr "最近 30 天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:107
+#: ../src/UI.Dialog/DateRangeDialog.cs:98
 msgid "Last 90 days"
 msgstr "最近 90 天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:109
+#: ../src/UI.Dialog/DateRangeDialog.cs:100
 msgid "Last 360 days"
 msgstr "最近 360 天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:111
+#: ../src/UI.Dialog/DateRangeDialog.cs:102
 msgid "Current Week (Mon-Sun)"
 msgstr "本週 (星期一~星期日)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:113
+#: ../src/UI.Dialog/DateRangeDialog.cs:104
 msgid "Previous Week (Mon-Sun)"
 msgstr "前一週 (星期一~星期日)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:131
+#: ../src/UI.Dialog/DateRangeDialog.cs:122
 msgid "Customized Range"
 msgstr "自選範圍"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:40
+msgid "Error editing photo"
+msgstr "編輯相片時發生錯誤"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:44
 #, csharp-format
 msgid "Edit Icon for Tag {0}"
 msgstr "修改標籤 {0} 的圖示"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:66
 msgid "Select Photo from file"
 msgstr "從檔案選擇相片"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:88
 #, csharp-format
 msgid ""
 "\n"
@@ -3148,16 +2557,16 @@ msgstr ""
 " 請將某相片加上「{0}」標籤,並返回這裏\n"
 " 以將它作為圖示使用。"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:166
 msgid "Unable to load image"
-msgstr "無法載入圖像"
+msgstr "無法載入圖片"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:167
 #, csharp-format
 msgid "Unable to load \"{0}\" as icon for the tag"
 msgstr "無法讀取「{0}」作為標籤圖示"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:205
 #, csharp-format
 msgid "Photo {0} of {1}"
 msgstr "{1}張相片中的第{0}張"
@@ -3174,39 +2583,81 @@ msgstr "錯誤細節"
 msgid "An unhandled exception was thrown: "
 msgstr "出現了預期外的錯誤: "
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "選擇資料夾..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:131
+msgid "Choose Import source..."
+msgstr "選擇匯入來源..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:143
+msgid "(No Cameras Detected)"
+msgstr "(偵測不到數碼相機)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:178
+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 ""
+"勾選此選項將在相機成功完成匯入後,從相機移除所匯入的相片。\n"
+"\n"
+"一般建議在你從相機移除你的相片之前先將它們備份。<b>使用此選項請自負風險!</b>"
+
+#: ../src/UI.Dialog/ImportDialog.cs:179
+msgid "Warning"
+msgstr "警告"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "正在匯入相片:{0}/{1}..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:312
+msgid "Importing photos..."
+msgstr "正在匯入相片..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:319
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "正在搜尋相片... (你已經可以點擊「匯入」以繼續)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
+#: ../src/UI.Dialog/PreferenceDialog.cs:80
 msgid "None"
 msgstr "無"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:59
 msgid "System profile"
 msgstr "系統個人設定檔"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:97
 msgid "Standard theme"
 msgstr "標準主題"
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
 msgid "Error loading database."
 msgstr "載入資料庫時發生錯誤。"
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:23
 #, 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 "當 F-Spot 載入相片資料庫時遭遇到錯誤。舊的資料庫已經被移至 {0},新的資料庫已經建立。"
 
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
 msgid "Label"
 msgstr "標籤"
 
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
 msgid "Ratio"
 msgstr "比例"
 
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
 msgid "Retry"
 msgstr "重試"
 
@@ -3254,6 +2705,24 @@ msgstr "差異:"
 msgid "min. Starting at {0}"
 msgstr "分。開始於 {0}"
 
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
+msgid "C_reate"
+msgstr "建立(_R)"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:2
+msgid "Create _icon for this tag when first used"
+msgstr "當第一次使用時為此標籤建立圖示(_I)"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr "父標籤(_A):"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "標籤名稱(_T):"
+
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
 msgid "<b>End Date</b>"
 msgstr "<b>結束日期</b>"
@@ -3279,18 +2748,14 @@ msgid "Set date range"
 msgstr "設定日期範圍"
 
 #: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
-msgid "<small></small>"
-msgstr "<small></small>"
-
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit Tag"
 msgstr "編輯標籤"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit icon"
 msgstr "編輯圖示"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
 msgid "_Icon:"
 msgstr "圖示(_I):"
 
@@ -3320,11 +2785,44 @@ msgstr "編輯標籤圖示"
 
 #: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:7
 msgid "No _image"
-msgstr "沒有圖像(_I)"
+msgstr "沒有圖片(_I)"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:1
+msgid "<b>View all pictures imported</b>"
+msgstr "<b>檢視匯入的所有圖片</b>"
 
-#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:8
-msgid "Photo 0 of 0"
-msgstr "0 張中的第 0 張相片"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:2
+msgid "Display only those photos that were imported in specified Rolls."
+msgstr "只顯示那些被匯入指定膠卷內的相片。"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
+msgid "Filter on selected rolls"
+msgstr "所選膠卷的過濾條件"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
+msgid "Number of photos in selected rolls:"
+msgstr "所選膠卷內的相片數量:"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
+msgid "Show all photos."
+msgstr "顯示所有相片。"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
+msgid "after"
+msgstr "睌於"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:534
+msgid "and"
+msgstr "及"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:8
+msgid "at"
+msgstr "於"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:9
+msgid "between"
+msgstr "介於"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:1
 msgid "Color profile for display:"
@@ -3347,22 +2845,30 @@ msgid ""
 "Inside the image files when possible\n"
 "<small>Makes them accessible to other image-editing programs.</small>"
 msgstr ""
-"如果可以的話放在圖像檔內\n"
-"<small>讓其他圖像編輯程式可以存取。</small>"
+"如果可以的話放在圖片檔內\n"
+"<small>讓其他圖片編輯程式可以存取。</small>"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:7
+msgid ""
+"Never modify image files.\n"
+"<small>Write XMP files next to the images instead.</small>"
+msgstr ""
+"永遠都不修改圖片檔案。\n"
+"<small>寫入圖片檔旁的 XMP 檔,而不是該圖片檔。</small>"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
 msgid "Select A Folder"
 msgstr "選擇資料夾"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:8
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
 msgid "Separately from the image files"
-msgstr "從圖像檔分離"
+msgstr "從圖片檔分離"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:11
 msgid "Store tags and descriptions for photos:"
 msgstr "為這些相片儲存標籤與描述:"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:12
 msgid "When importing photos, copy them to:"
 msgstr "當匯入相片時,將它們複製到:"
 
@@ -3378,6 +2884,133 @@ msgstr "<b>最低評分</b>"
 msgid "Set Rating Filter"
 msgstr "設定評分過濾器"
 
+#: ../src/UI.Dialog/ui/RepairDialog.ui.h:1
+msgid "Repair"
+msgstr "修復"
+
+#: ../src/ui/import.ui.h:1
+#, fuzzy
+#| msgid "Copy files to the Photos folder"
+msgid "C_opy files to the Photos folder"
+msgstr "複製檔案至相片資料夾"
+
+#: ../src/ui/import.ui.h:2
+#, fuzzy
+#| msgid "Include subfolders"
+msgid "I_nclude subfolders"
+msgstr "包括子目錄(_C)"
+
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:5
+#, fuzzy
+#| msgid "Import from:"
+msgid "Import _from:"
+msgstr "匯入自:"
+
+#: ../src/ui/import.ui.h:6
+#, fuzzy
+#| msgid "Attach tag:"
+msgid "_Attach tags:"
+msgstr "附加標籤:"
+
+#: ../src/ui/import.ui.h:7
+#, fuzzy
+#| msgid "Detect duplicates"
+msgid "_Detect duplicates"
+msgstr "偵測複本"
+
+#: ../src/ui/import.ui.h:8
+#, fuzzy
+#| msgid "Import"
+msgid "_Import"
+msgstr "匯入"
+
+#: ../src/ui/import.ui.h:9
+#, fuzzy
+#| msgid "Remove original files after import"
+msgid "_Remove original files after import"
+msgstr "在匯入後移除原始檔案"
+
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 px"
+
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 px"
+
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 px"
+
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 px"
+
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 px"
+
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>大小</b>"
+
+#: ../src/ui/mail_dialog.ui.h:8
+msgid "<b>Summary</b>"
+msgstr "<b>摘要</b>"
+
+#: ../src/ui/mail_dialog.ui.h:9
+msgid "Create Mail"
+msgstr "建立郵件"
+
+#: ../src/ui/mail_dialog.ui.h:10
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr "建立郵件並將所選相片 (可能會被縮放) 作為附件"
+
+#: ../src/ui/mail_dialog.ui.h:11
+msgid "Do not send a mail"
+msgstr "不要寄出郵件"
+
+#: ../src/ui/mail_dialog.ui.h:12
+msgid "Estimated new size"
+msgstr "估計新大小"
+
+#: ../src/ui/mail_dialog.ui.h:13
+msgid "Extra large"
+msgstr "非常大"
+
+#: ../src/ui/mail_dialog.ui.h:14
+msgid "Large"
+msgstr "大"
+
+#: ../src/ui/mail_dialog.ui.h:15
+msgid "Medium"
+msgstr "中"
+
+#: ../src/ui/mail_dialog.ui.h:16
+msgid "Number of pictures"
+msgstr "圖片數目:"
+
+#: ../src/ui/mail_dialog.ui.h:18
+msgid "Original size (possible very large file size)"
+msgstr "原始大小(檔案可能非常大)"
+
+#: ../src/ui/mail_dialog.ui.h:19
+msgid "Small"
+msgstr "小"
+
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Tiny"
+msgstr "極小"
+
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Total original size"
+msgstr "總計原始大小"
+
+#: ../src/ui/mail_dialog.ui.h:22
+msgid "_Create Mail"
+msgstr "建立郵件(_C)"
+
 #: ../src/ui/main_window.ui.h:1
 msgid "Adjust _Time..."
 msgstr "調整時間(_T)..."
@@ -3410,6 +3043,10 @@ msgstr "建立新標籤(_T)..."
 msgid "Create _New Version..."
 msgstr "建立新版本(_N)..."
 
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "分離版本(_T)"
+
 #: ../src/ui/main_window.ui.h:11
 msgid "Fin_d"
 msgstr "尋找(_D)"
@@ -3438,6 +3075,10 @@ msgstr "取消選擇(_N)"
 msgid "Send by _Mail..."
 msgstr "以郵件傳送(_M)..."
 
+#: ../src/ui/main_window.ui.h:21 ../src/ui/single_view.ui.h:3
+msgid "Set as _Background"
+msgstr "設定為背景(_B)"
+
 #: ../src/ui/main_window.ui.h:22
 msgid "Side_bar"
 msgstr "側邊列(_B)"
@@ -3458,6 +3099,26 @@ msgstr "工具列(_L)"
 msgid "View"
 msgstr "檢視"
 
+#: ../src/ui/main_window.ui.h:28 ../src/ui/single_view.ui.h:7
+msgid "Zoom _in"
+msgstr "拉近(_I)"
+
+#: ../src/ui/main_window.ui.h:29 ../src/ui/single_view.ui.h:8
+msgid "Zoom _out"
+msgstr "拉遠(_O)"
+
+#: ../src/ui/main_window.ui.h:30 ../src/ui/single_view.ui.h:9
+msgid "Zoom in"
+msgstr "拉近"
+
+#: ../src/ui/main_window.ui.h:31 ../src/ui/single_view.ui.h:10
+msgid "Zoom out"
+msgstr "拉遠"
+
+#: ../src/ui/main_window.ui.h:32
+msgid "_Attach Tag"
+msgstr "附加標籤(_A)"
+
 #: ../src/ui/main_window.ui.h:33
 msgid "_Attach Tag to Selection"
 msgstr "將選取項目附上標籤(_A)"
@@ -3490,6 +3151,10 @@ msgstr "刪除選定的標籤(_D)"
 msgid "_Delete Version"
 msgstr "刪除版本(_D)"
 
+#: ../src/ui/main_window.ui.h:44 ../src/ui/single_view.ui.h:11
+msgid "_Edit"
+msgstr "編輯(_E)"
+
 #: ../src/ui/main_window.ui.h:45
 msgid "_Edit Tag..."
 msgstr "編輯標籤(_E)..."
@@ -3502,6 +3167,14 @@ msgstr "匯出至(_E)"
 msgid "_Filmstrip"
 msgstr "幻燈片帶(_F)"
 
+#: ../src/ui/main_window.ui.h:48 ../src/ui/single_view.ui.h:13
+msgid "_Fullscreen"
+msgstr "全螢幕(_F)"
+
+#: ../src/ui/main_window.ui.h:49 ../src/ui/single_view.ui.h:14
+msgid "_Help"
+msgstr "求助(_H)"
+
 #: ../src/ui/main_window.ui.h:50
 msgid "_Hidden"
 msgstr "隱藏(_H)"
@@ -3511,100 +3184,178 @@ msgid "_Import..."
 msgstr "匯入(_I)..."
 
 #: ../src/ui/main_window.ui.h:52
+msgid "_Invert Selection"
+msgstr "反轉選取(_I)"
+
+#: ../src/ui/main_window.ui.h:53
 msgid "_Large"
 msgstr "大(_L)"
 
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:54
 msgid "_Last Import Roll"
 msgstr "最近匯入膠卷(_L)"
 
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:55
 msgid "_Loupe"
 msgstr "放大鏡(_L)"
 
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:56
 msgid "_Medium"
 msgstr "中(_M)"
 
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:57 ../src/ui/single_view.ui.h:15
+msgid "_Photo"
+msgstr "相片(_P)"
+
+#: ../src/ui/main_window.ui.h:58
 msgid "_Quit"
 msgstr "離開(_Q)"
 
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:59
 msgid "_Ratings"
 msgstr "評分(_R)"
 
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:61
 msgid "_Remove Tag From Selection"
 msgstr "從選取項目中移附標籤(_R)"
 
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:62
 msgid "_Rename Version"
 msgstr "重新命名版本(_R)"
 
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:63
 msgid "_Reverse Order"
 msgstr "順序反轉(_R)"
 
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:64
 msgid "_Select Import Rolls..."
 msgstr "選擇匯入膠卷(_S)..."
 
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:65
 msgid "_Set Date Range..."
 msgstr "設定日期範圍(_S)..."
 
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:66
 msgid "_Set Rating filter..."
 msgstr "設定評分過濾器(_S)..."
 
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:67
 msgid "_Sharpen..."
 msgstr "銳化(_S)..."
 
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:68 ../src/ui/single_view.ui.h:16
+msgid "_Slideshow"
+msgstr "幻燈片(_8)"
+
+#: ../src/ui/main_window.ui.h:69
 msgid "_Small"
 msgstr "小(_S)"
 
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:70
 msgid "_Tag Icons"
 msgstr "標籤圖示(_T)"
 
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:71
 msgid "_Tags"
 msgstr "標籤(_T)"
 
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:72
 msgid "_Timeline"
 msgstr "時間軸(_T)"
 
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:73
 msgid "_Tools"
 msgstr "工具(_T)"
 
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:74
 msgid "_Untagged Photos"
 msgstr "未標籤的相片(_U)"
 
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:75
 msgid "_Version"
 msgstr "版本(_V)"
 
-#: ../src/Updater.cs:622
+#: ../src/ui/main_window.ui.h:76 ../src/ui/single_view.ui.h:18
+msgid "_View"
+msgstr "檢視(_V)"
+
+#: ../src/ui/single_view.ui.h:1
+msgid "Display File _Names"
+msgstr "顯示檔案名稱(_N)"
+
+#: ../src/ui/single_view.ui.h:2
+msgid "F-Spot View"
+msgstr "F-Spot 檢視"
+
+#: ../src/ui/single_view.ui.h:4
+msgid "Show or hide the side pane"
+msgstr "顯示或隱藏側面的長方格"
+
+#: ../src/ui/single_view.ui.h:5
+msgid "Show or hide the toolbar"
+msgstr "顯示或隱藏工具列"
+
+#: ../src/ui/single_view.ui.h:6
+msgid "Side _pane"
+msgstr "側面的長方格(_P)"
+
+#: ../src/ui/single_view.ui.h:17
+msgid "_Toolbar"
+msgstr "工具列(_T)"
+
+#: ../src/ui/viewer_preferences.ui.h:1
+msgid "<b>Image Interpolation</b>"
+msgstr "<b>圖片插補</b>"
+
+#: ../src/ui/viewer_preferences.ui.h:2
+msgid "<b>Transparent Parts</b>"
+msgstr "<b>透明部份</b>"
+
+#: ../src/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>啟用此選項來允許針對拉近拉遠的圖片進行插補處理。你不應該停用此選項以檢視相片,但是停用插補處理可能對於圖示設定很有用處。</i></small>"
+
+#: ../src/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>你可以選擇要如何顯示圖片內的透明部份。此選項對相片不會造成任何影響,但是當檢視含有透明部份的圖示或是其他美工時,將此設為格子花紋或是自選色彩應該很有用。</i></small>"
+
+#: ../src/ui/viewer_preferences.ui.h:5
+msgid "As _background"
+msgstr "設為背景(_B)"
+
+#: ../src/ui/viewer_preferences.ui.h:6
+msgid "As _custom color: "
+msgstr "設為自選色彩(_C): "
+
+#: ../src/ui/viewer_preferences.ui.h:7
+msgid "As check _pattern"
+msgstr "設為格子花紋(_P)"
+
+#: ../src/ui/viewer_preferences.ui.h:8
+msgid "Preferences"
+msgstr "偏好設定"
+
+#: ../src/ui/viewer_preferences.ui.h:9
+msgid "_Interpolate image on zoom"
+msgstr "拉近或拉遠圖片時對圖片進行插補(_I)"
+
+#: ../src/Updater.cs:727
 msgid "Updating F-Spot Database"
 msgstr "正在更新 F-Spot 資料庫"
 
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:728
 msgid ""
 "Please wait while your F-Spot gallery's database is updated. This may take "
 "some time."
 msgstr "你的 F-Spot 圖庫資料庫正在更新,請稍後。這或許會需要一些時間。"
 
-#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
-msgid "Unable to create temporary file"
-msgstr "無法建立暫存檔"
-
 #: ../src/Widgets/CustomPrintWidget.cs:119
 msgid "Page Setup"
 msgstr "頁面設定"
@@ -3622,7 +3373,7 @@ msgstr "設定頁面大小與方向"
 
 #: ../src/Widgets/CustomPrintWidget.cs:141
 msgid "Photos per page"
-msgstr "每頁照片張數"
+msgstr "每頁相片張數"
 
 #: ../src/Widgets/CustomPrintWidget.cs:151
 msgid "Repeat"
@@ -3685,37 +3436,37 @@ msgstr "打印相片標籤"
 msgid "Print photo comment"
 msgstr "打印相片註解"
 
-#: ../src/Widgets/EditorPage.cs:30 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:32 ../src/Widgets/Sidebar.cs:54
 msgid "Edit"
 msgstr "編輯"
 
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:200
 msgid ""
 "This tool requires an active selection. Please select a region of the photo "
 "and try the operation again"
-msgstr "此工具需要作用中的選取項目。請選取一個圖片的區域,或是重試操作"
+msgstr "此工具需要作用中的選取項目。請選取相片的一塊區域,或是重試操作"
 
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:218
 msgid "Error saving adjusted photo"
 msgid_plural "Error saving adjusted photos"
 msgstr[0] "儲存調整過的相片時發生錯誤"
 
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:220
 #, csharp-format
 msgid ""
 "Received exception \"{0}\". Note that you have to develop RAW files into "
 "JPEG before you can edit them."
 msgstr "接收到例外「{0}」。請注意你在編輯它們之前必須先將 RAW 檔轉換為 JPEG。"
 
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:470
 msgid "_Horizontal"
 msgstr "水平(_H)"
 
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:474
 msgid "_Vertical"
 msgstr "垂直(_V)"
 
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
 msgid "Find:"
 msgstr "尋找:"
 
@@ -3723,7 +3474,7 @@ msgstr "尋找:"
 msgid "Folders"
 msgstr "資料夾"
 
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
 msgid "Filesystem"
 msgstr "檔案系統"
 
@@ -3731,6 +3482,10 @@ msgstr "檔案系統"
 msgid "Histogram"
 msgstr "長條圖"
 
+#: ../src/Widgets/InfoBox.cs:201
+msgid "Image Information"
+msgstr "圖片資訊"
+
 #: ../src/Widgets/InfoBox.cs:215
 msgid "Version"
 msgstr "版本"
@@ -3747,6 +3502,10 @@ msgstr "曝光"
 msgid "Focal Length"
 msgstr "焦距"
 
+#: ../src/Widgets/InfoBox.cs:231
+msgid "Camera"
+msgstr "數碼相機"
+
 #: ../src/Widgets/InfoBox.cs:234
 msgid "File Size"
 msgstr "檔案大小"
@@ -3755,33 +3514,32 @@ msgstr "檔案大小"
 msgid "Rating"
 msgstr "評等"
 
-#: ../src/Widgets/InfoBox.cs:390 ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:327
 msgid "(wrong format)"
 msgstr "(錯誤的格式)"
 
-#: ../src/Widgets/InfoBox.cs:418 ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451 ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:353 ../src/Widgets/InfoBox.cs:364
+#: ../src/Widgets/InfoBox.cs:374
 msgid "(Unknown)"
 msgstr "(未知)"
 
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:474
 #, csharp-format
 msgid "(One Edit)"
 msgid_plural "({0} Edits)"
 msgstr[0] "(編輯 {0} 次)"
 
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:484
 msgid "(File read error)"
 msgstr "(檔案讀取錯誤)"
 
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:529
 #, csharp-format
 msgid "{0} Photos"
 msgstr "{0} 張相片"
 
 #. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:549
 #, csharp-format
 msgid ""
 "On {0} between \n"
@@ -3790,7 +3548,7 @@ msgstr ""
 "於 {0} 介於 \n"
 "{1} 與 {2}"
 
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:554
 #, csharp-format
 msgid ""
 "Between {0} \n"
@@ -3799,35 +3557,35 @@ msgstr ""
 "介於 {0} \n"
 "以及 {1}"
 
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:581
 msgid "(At least one File not found)"
 msgstr "(至少有一個檔案找不到)"
 
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:698
 msgid "Show Photo Name"
 msgstr "顯示相片名稱"
 
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:707
 msgid "Show Date"
 msgstr "顯示日期"
 
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:716
 msgid "Show Size"
 msgstr "顯示大小"
 
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:725
 msgid "Show Exposure"
 msgstr "顯示曝光"
 
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:734
 msgid "Show Focal Length"
 msgstr "顯示焦距"
 
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:743
 msgid "Show Camera"
 msgstr "顯示相機"
 
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:752
 msgid "Show File Size"
 msgstr "顯示檔案大小"
 
@@ -3839,45 +3597,27 @@ msgstr "中介資料"
 msgid "Extended Metadata"
 msgstr "擴展的中介資料"
 
-#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:394
-msgid "No Extended Metadata Available"
-msgstr "無可用的擴展式中介資料"
-
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:359
 msgid "No active photo"
 msgstr "沒有活動中的相片"
 
-#: ../src/Widgets/MetadataDisplay.cs:414
+#: ../src/Widgets/MetadataDisplay.cs:361
 #, csharp-format
 msgid "The photo \"{0}\" does not exist"
-msgstr "相片 \"{0}\" 並不存在"
+msgstr "相片「{0}」並不存在"
 
-#: ../src/Widgets/MetadataDisplay.cs:417
+#: ../src/Widgets/MetadataDisplay.cs:363
 msgid "No metadata available"
 msgstr "無可用的中介資料"
 
-#: ../src/Widgets/OpenWithMenu.cs:71
+#: ../src/Widgets/OpenWithMenu.cs:72
 msgid "No applications available"
 msgstr "無可用的應用程式"
 
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
 msgid "Rating:"
 msgstr "評分:"
 
-#: ../src/XmpTagsImporter.cs:91
-msgid "Country"
-msgstr "國家"
-
-#: ../src/XmpTagsImporter.cs:92
-msgid "City"
-msgstr "城市"
-
-#: ../src/XmpTagsImporter.cs:93
-msgid "State"
-msgstr "州"
-
-#. namespace
 #: ../tools/f-spot-screensaver.desktop.in.h:1
 msgid "Display a slideshow from F-Spot"
 msgstr "從 F-Spot 播放幻燈片"
@@ -3886,6 +3626,426 @@ msgstr "從 F-Spot 播放幻燈片"
 msgid "F-Spot photos"
 msgstr "F-Spot 相片"
 
+#~ msgid "Attach Tags:"
+#~ msgstr "附加標籤:"
+
+#~ msgid "Autorotate"
+#~ msgstr "自動旋轉"
+
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "錯誤:傳輸時發生錯誤;正在中止"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "錯誤:檔案已存在;正在中止"
+
+#~ msgid "\n"
+#~ msgstr "\n"
+
+#~ msgid "_Autorotate"
+#~ msgstr "自動旋轉(_A)"
+
+#~ msgid "<b>{0}</b>."
+#~ msgstr "<b>{0}</b>。"
+
+#~ msgid "Unknown transform type %d"
+#~ msgstr "未知的轉換類型 %d"
+
+#~ msgid "Operation failed"
+#~ msgstr "操作失敗"
+
+#~ msgid "Preview"
+#~ msgstr "預覽"
+
+#~ msgid "File"
+#~ msgstr "檔案"
+
+#~ msgid "Select Tag"
+#~ msgstr "選取標籤"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "正在下載預覽"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "正在下載 {0} 的預覽"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "正在複製 {1} 之 {0}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "傳輸檔案時發生錯誤"
+
+#~ msgid "Download Complete"
+#~ msgstr "下載完畢"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "複製檔案完成"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "從數位相機傳輸 \"{0}\""
+
+#~ msgid "Port"
+#~ msgstr "連接埠"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "重定母本 ({0})"
+
+#~ msgid "Import error"
+#~ msgstr "匯入發生錯誤"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "匯入 {0}{2}{2}{1} 時發生錯誤"
+
+#~ msgid "No way to save files of type \"{0}\""
+#~ msgstr "無法儲存 \"{0}\" 類型的檔案"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "電子郵件(_M):"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "匯出標題和註解(_X)"
+
+#~ msgid "G_allery:"
+#~ msgstr "G_allery:"
+
+#~ msgid "Gallery"
+#~ msgstr "圖庫"
+
+#~ msgid "Pause"
+#~ msgstr "暫停"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "選擇要從數位相機複製的相片..."
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "請選擇您要傳輸檔案的數位相機"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "選擇的相機: "
+
+#~ msgid ""
+#~ "Specify if an original size picture should be rotated or not. Smaller "
+#~ "sizes are automatically rotated."
+#~ msgstr "指定原始大小的圖片是否該被旋轉。大小較小的會被自動旋轉。"
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "除去圖片的中介資料(_M)"
+
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Gallery"
+
+#~ msgid "_New Window"
+#~ msgstr "新視窗(_N)"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "完成上傳後在瀏覽器中開啟圖庫(_O)"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "完成匯出後開啟目的地(_O)"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "相片縮放不能超過(_S):"
+
+#~ msgid "_Strip metadata"
+#~ msgstr "除去中介資料(_S)"
+
+#~ msgid "_URI:"
+#~ msgstr "_URI:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "虛擬檔案系統(_V)"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Image Directory"
+#~ msgstr "圖片目錄"
+
+#~ msgid "Thumbnail Directory"
+#~ msgstr "縮圖目錄"
+
+#~ msgid "Exif Directory"
+#~ msgstr "Exif 目錄"
+
+#~ msgid "GPS Directory"
+#~ msgstr "GPS 目錄"
+
+#~ msgid "InterOperability Directory"
+#~ msgstr "互通目錄"
+
+#~ msgid "Unknown Directory"
+#~ msgstr "未知目錄"
+
+#~ msgid "Writing to this file format is not supported"
+#~ msgstr "不支援寫入此檔案格式"
+
+#~ msgid "IPTC Information Interchange Model (IIM) Version number"
+#~ msgstr "IPTC Information Interchange Model (IIM) 版本號碼"
+
+#~ msgid "OSI Destination routing information"
+#~ msgstr "OSI 目標路由資訊"
+
+#~ msgid "IPTC file format"
+#~ msgstr "IPTC 檔案格式"
+
+#~ msgid "Identifies the provider and product"
+#~ msgstr "識別供應商與產品"
+
+#~ msgid "A unique number identifying the envelope"
+#~ msgstr "用來辨別信封的唯一編號"
+
+#~ msgid "A unique number"
+#~ msgstr "一個獨特的號碼"
+
+#~ msgid ""
+#~ "The envelope handling priority between 1 (most urgent) and 9 (least "
+#~ "urgent)"
+#~ msgstr "信封處理優先序介於 1 (最緊急) 與 9 (最不緊急) 之間"
+
+#~ msgid "The year, month and day (CCYYMMDD) the service sent the material"
+#~ msgstr "附註年月日 (CCYYMMDD) 的服務"
+
+#~ msgid "The hour, minute and second (HHMMSS) the service sent the material"
+#~ msgstr "這個服務送出該資料的時間,以時、分與秒標記 (HHMMSS)"
+
+#~ msgid "The character set designation"
+#~ msgstr "設定的字元編碼"
+
+#~ msgid "External globally unique object identifier"
+#~ msgstr "外部全域獨立物件識別碼"
+
+#~ msgid "Abstract Relationship Method (ARM) identifier"
+#~ msgstr "抽象關聯模式 (ARM) 識別碼"
+
+#~ msgid "Abstract Relationship Method (ARM) version number."
+#~ msgstr "抽象關係方法 (ARM) 版本編號。"
+
+#~ msgid "Number identifying the IIM version this application record uses"
+#~ msgstr "作為辨識此應用程式紀錄所使用的 IIM 版本之用的編號"
+
+#~ msgid "Object type reference"
+#~ msgstr "物件型態參考"
+
+#~ msgid "Object attribute reference"
+#~ msgstr "物件屬性參考"
+
+#~ msgid "Object name"
+#~ msgstr "物件名稱"
+
+#~ msgid "Status of the objectdata according to the provider"
+#~ msgstr "根據供應商物件資料提供的狀態"
+
+#~ msgid "Location within a city or area where the object originates"
+#~ msgstr "該物件起源自何城市或區域"
+
+#~ msgid "Name of the city the content is focussing on"
+#~ msgstr "內容所聚焦的城市其名稱"
+
+#~ msgid "Copyright information for"
+#~ msgstr "其版權資訊"
+
+#~ msgid "Full name of the country of the focus of the content"
+#~ msgstr "內容所聚焦的地區其全名"
+
+#~ msgid ""
+#~ "Two or three letter ISO3166 code of the country of the focus of the "
+#~ "content"
+#~ msgstr "內容所聚焦的地區其 ISO3166 代碼,由 2-3 個字母組成"
+
+#~ msgid "Creator of the content"
+#~ msgstr "內容建立者"
+
+#~ msgid "Provider of the object"
+#~ msgstr "物件提供者"
+
+#~ msgid "The title of the author or creator"
+#~ msgstr "作者或建立者的標題"
+
+#~ msgid ""
+#~ "The person involved in writing, editing or correcting the object data or "
+#~ "caption/abstract"
+#~ msgstr "這個人參與過寫作、編輯、或是校正這個物件資料或是相片說明/摘要"
+
+#~ msgid "Headline of the content"
+#~ msgstr "內容的標題"
+
+#~ msgid ""
+#~ "Instructions from the creator to the receiver not covered by other fields"
+#~ msgstr "來自建立者給予接收者的指示,沒有被其他領域涵蓋"
+
+#~ msgid "Intellectual genre of the object"
+#~ msgstr "物件的智慧類型"
+
+#~ msgid "Unknown IIM DataSet"
+#~ msgstr "不明的 IIM DataSet"
+
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "正在載入 {1} 之 {0}"
+
+#~ msgid "Done Loading"
+#~ msgstr "完成載入"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "目錄不存在。"
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist.  Please choose a "
+#~ "different directory"
+#~ msgstr "您選擇的目錄 \"{0}\" 不存在。請選擇另外的目錄"
+
+#~ msgid "No cameras detected."
+#~ msgstr "偵測不到數位相機。"
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system.  Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "F-Spot 無法找到任何連接到系統的數位相機。請再次確定它已連接並且電源已開"
+#~ "啟。"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "連接數位相機時發生錯誤"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "連接數位相機時收到錯誤 \"{0}\""
+
+#~ msgid "Creator"
+#~ msgstr "建立者"
+
+#~ msgid "Title"
+#~ msgstr "標題"
+
+#~ msgid "Copyright"
+#~ msgstr "版權"
+
+#~ msgid "Subject and Keywords"
+#~ msgstr "主題與關鍵字"
+
+#~ msgid "Compression"
+#~ msgstr "壓縮"
+
+#~ msgid "Planar Configuration"
+#~ msgstr "平面設定"
+
+#~ msgid "Orientation"
+#~ msgstr "方向"
+
+#~ msgid "Photometric Interpretation"
+#~ msgstr "光度解譯"
+
+#~ msgid "Resolution Unit"
+#~ msgstr "解析度單位"
+
+#~ msgid "Exposure Program"
+#~ msgstr "曝光模式"
+
+#~ msgid "Metering Mode"
+#~ msgstr "測量模式"
+
+#~ msgid "Exposure Mode"
+#~ msgstr "曝光模式"
+
+#~ msgid "Custom Rendered"
+#~ msgstr "自訂繪製"
+
+#~ msgid "Components Configuration"
+#~ msgstr "元件設定"
+
+#~ msgid "Light Source"
+#~ msgstr "光源"
+
+#~ msgid "Sensing Method"
+#~ msgstr "感測方法"
+
+#~ msgid "Color Space"
+#~ msgstr "色彩空間"
+
+#~ msgid "White Balance"
+#~ msgstr "白平衡"
+
+#~ msgid "Focal Plane Resolution Unit"
+#~ msgstr "對焦平面解析度單位"
+
+#~ msgid "File Source Type"
+#~ msgstr "來源檔案類型"
+
+#~ msgid "Scene Capture Type"
+#~ msgstr "情境捕捉類型"
+
+#~ msgid "Gain Control"
+#~ msgstr "取得控制"
+
+#~ msgid "Contrast"
+#~ msgstr "對比度"
+
+#~ msgid "Saturation"
+#~ msgstr "飽和度"
+
+#~ msgid "Sharpness"
+#~ msgstr "銳利"
+
+#~ msgid "Scene Type"
+#~ msgstr "情境類型"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "無法建立新版本"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "收到異常 \"{0}\"。無法建立版本 \"{1}\""
+
+#~ msgid "Really Delete?"
+#~ msgstr "真的要刪除?"
+
+#~ msgid "Cancel"
+#~ msgstr "取消"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "無法刪除版本"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "收到異常 \"{0}\"。無法刪除版本 \"{1}\""
+
+#~ msgid "Could not rename a version"
+#~ msgstr "無法將版本重新命名"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr "收到異常 \"{0}\"。無法重新命名版本 \"{1}\""
+
+#~ msgid "Comment:"
+#~ msgstr "註解:"
+
+#~ msgid "<small></small>"
+#~ msgstr "<small></small>"
+
+#~ msgid "Photo 0 of 0"
+#~ msgstr "0 張中的第 0 張相片"
+
+#~ msgid "Unable to create temporary file"
+#~ msgstr "無法建立暫存檔"
+
+#~ msgid "No Extended Metadata Available"
+#~ msgstr "無可用的擴展式中介資料"
+
+#~ msgid "Country"
+#~ msgstr "國家"
+
+#~ msgid "City"
+#~ msgstr "城市"
+
+#~ msgid "State"
+#~ msgstr "州"
+
 #~ msgid "Package"
 #~ msgstr "套件"
 
@@ -4094,7 +4254,7 @@ msgstr "F-Spot 相片"
 #~ "{0}\n"
 #~ "before closing?"
 #~ msgstr[0] ""
-#~ "在關閉之前要儲存變更到影像:\n"
+#~ "在關閉之前要儲存變更到圖片:\n"
 #~ "{0}\n"
 #~ "嗎?"
 
@@ -4104,7 +4264,7 @@ msgstr "F-Spot 相片"
 #~ msgid_plural ""
 #~ "If you don't save, the changes you have made to these images will be "
 #~ "permanently lost"
-#~ msgstr[0] "如果您不儲存,您對這些影像所做出的變更將會永久喪失"
+#~ msgstr[0] "如果您不儲存,您對這些圖片所做出的變更將會永久喪失"
 
 #~ msgid "Discard changes"
 #~ msgstr "捨棄變更"
@@ -4117,7 +4277,7 @@ msgstr "F-Spot 相片"
 #~ msgstr[0] "儲存所有"
 
 #~ msgid "Copy Locat_ion"
-#~ msgstr "複製影像位置(_I)"
+#~ msgstr "複製圖片位置(_I)"
 
 #~ msgid "_Edit Selected Tag..."
 #~ msgstr "編輯選定的標籤(_E)..."
diff --git a/po/zh_TW.po b/po/zh_TW.po
index a390ad4..a396fcb 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -9,10 +9,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: f-spot 0.6.1.5\n"
+"Project-Id-Version: f-spot 0.7.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-08 19:12+0800\n"
-"PO-Revision-Date: 2010-05-08 08:25+0800\n"
+"POT-Creation-Date: 2010-08-04 18:59+0800\n"
+"PO-Revision-Date: 2010-07-26 12:28+0800\n"
 "Last-Translator: Cheng-Chia Tseng <pswo10680 at gmail.com>\n"
 "Language-Team: Chinese-l10n <chinese-l10n at googlegroups.com>\n"
 "MIME-Version: 1.0\n"
@@ -20,106 +20,125 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
+#: ../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 相片管理員"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "組織、享受、並分享您的相片"
+
+#: ../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 "相片管理員"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "匯入至 F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-Spot 相片檢視器"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "相片檢視器"
+
 #: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
 msgid "_CD..."
 msgstr "_CD..."
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
+#: ../extensions/Exporters/CDExport/CDExport.cs:155
 msgid "Transferring Pictures"
-msgstr "正在傳輸圖片"
+msgstr "正在傳送圖片"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:218
+#: ../extensions/Exporters/CDExport/CDExport.cs:208
 #, csharp-format
 msgid "Transferring picture \"{0}\" To CD"
-msgstr "傳送圖片 \"{0}\" 到 CD"
+msgstr "正在傳送圖片「{0}」至 CD"
 
 #. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../extensions/Exporters/CDExport/CDExport.cs:210
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:360
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:209
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:773
+#: ../src/MainWindow.cs:645 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
 #, csharp-format
 msgid "{0} of {1}"
 msgstr "{1} 之 {0}"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
+#: ../extensions/Exporters/CDExport/CDExport.cs:223
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:378
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:390
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:798
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:696
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
 msgid "Done Sending Photos"
 msgstr "傳送相片完成"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
+#: ../extensions/Exporters/CDExport/CDExport.cs:225
 msgid "Transfer Complete"
 msgstr "傳輸完畢"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
+#: ../extensions/Exporters/CDExport/CDExport.cs:232
 msgid "Error While Transferring"
 msgstr "傳輸時發生錯誤"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/CDExport/CDExport.cs:240
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:266
 msgid "Error Transferring"
 msgstr "傳輸發生錯誤"
 
-#: ../extensions/Exporters/CDExport/CDExport.cs:263
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
 msgid "copying..."
 msgstr "正在複製..."
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:1
-msgid "<b><i>There is some previously scheduled items to write</i></b>"
+msgid "<b><i>There are some previously scheduled items to write</i></b>"
 msgstr "<b><i>有一些之前規劃好的項目要寫入</i></b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:2
 msgid "<b>Photos to Burn</b>"
-msgstr "<b>要燒錄的圖片</b>"
+msgstr "<b>要燒錄的相片</b>"
 
 #: ../extensions/Exporters/CDExport/CDExport.ui.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
-msgid "Autorotate"
-msgstr "自動旋轉"
-
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 msgid "Create CD"
 msgstr "建立 CD"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
 #: ../src/Widgets/InfoBox.cs:221
 msgid "Size"
 msgstr "大小"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
 msgid "Size of the exported selection:"
 msgstr "匯出的選取項目大小:"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
 msgid "_Browse Previously Scheduled Files"
 msgstr "瀏覽之前規劃好的檔案(_B)"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/ui/single_view.ui.h:12
 msgid "_Export"
 msgstr "匯出(_E)"
 
-#: ../extensions/Exporters/CDExport/CDExport.ui.h:9
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
 msgid "_Write only these photos to CD"
 msgstr "僅把這些相片寫入到 CD 中(_W)"
 
@@ -127,11 +146,11 @@ msgstr "僅把這些相片寫入到 CD 中(_W)"
 msgid "F_acebook..."
 msgstr "F_acebook..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
 msgid "Waiting for authorization"
 msgstr "正在等候授權"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:101
 msgid ""
 "F-Spot will now launch your browser so that you can enable the permission "
 "you just selected.\n"
@@ -143,11 +162,11 @@ msgstr ""
 "\n"
 "一旦您被導入 Facebook 後再返回此應用程式,請點擊下方的「確認」。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
 msgid "Too many images to export"
-msgstr "太多要匯出的相片"
+msgstr "太多要匯出的圖片"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:283
 #, csharp-format
 msgid ""
 "Facebook only permits {0} photographs per album.  Please refine your "
@@ -156,26 +175,18 @@ msgstr ""
 "Fackebook 只許可每個相簿內存放 {0} 張相片。請精挑細選您的選取項目,並重試。"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "正在上載圖片"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
 msgid "Album must have a name"
 msgstr "相簿必須要有名稱"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:299
 msgid "Please name your album or choose an existing album."
 msgstr "請命名您的相簿或是選擇已存在的相簿。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
 msgid "Creating a new album failed"
 msgstr "建立新相簿失敗"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:314
 #, csharp-format
 msgid ""
 "An error occurred creating a new album.\n"
@@ -186,45 +197,53 @@ msgstr ""
 "\n"
 "{0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:327
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:486
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:726
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:593
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:515
+msgid "Uploading Pictures"
+msgstr "正在上傳圖片"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:355
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:652
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:554
 #, csharp-format
 msgid "Uploading picture \"{0}\" ({1} of {2})"
-msgstr "正在上傳圖片 \"{0}\" ({2} 之 {1})"
+msgstr "正在上傳圖片「{0}」({2} 之 {1})"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
 #, csharp-format
 msgid "Error Uploading To Facebook: {0}"
-msgstr "上傳到 Facebook 時發生錯誤:{0}"
+msgstr "上傳至 Facebook 時發生錯誤:{0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:215
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:789
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:685
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:585
 #: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
 msgid "Error"
 msgstr "錯誤"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:800
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:698
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:598
 msgid "Upload Complete"
 msgstr "上載完畢"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:383
 msgid "Visit F-Spot group on Facebook"
 msgstr "造訪 Facebook 上的 F-Spot 群組"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
 msgid "Waiting for authentication"
 msgstr "正在等候認證"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:214
 msgid ""
 "F-Spot will now launch your browser so that you can log into Facebook.\n"
 "\n"
@@ -238,51 +257,51 @@ msgstr ""
 "您在 gnome-keyring 內的作業階段製作快取;若可能的話,在未來的 Facebook 匯出中"
 "都會重複使用它。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:219
 msgid "Authenticating..."
 msgstr "正在認證..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
 msgid "Error logging into Facebook"
-msgstr "登入到 Facebook 時發生錯誤"
+msgstr "登入 Facebook 時發生錯誤"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:230
 msgid ""
 "There was a problem logging into Facebook.  Check your credentials and try "
 "again."
 msgstr "登入 Facebook 時發生問題。請確認您的認證,並重試。"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:239
 msgid "Authorizing Session"
 msgstr "正在授權作業階段"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:248
 msgid "Session established, fetching user info..."
 msgstr "作業階段已建立,正在擷取使用者資訊..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:254
 msgid "Session established, fetching friend list..."
 msgstr "作業階段已建立,正在擷取朋友清單..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:264
 msgid "Session established, fetching friend details..."
 msgstr "作業階段已建立,正在擷取朋友詳細資料..."
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:276
 msgid "Session established, fetching photo albums..."
 msgstr "作業階段已建立,正在擷取相簿..."
 
 #. Note for translators: {0} and {1} are respectively firstname and surname of the user
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:286
 #, csharp-format
 msgid "{0} {1} is logged into Facebook"
 msgstr "{0} {1} 已登入 Facebook"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
 msgid "Facebook Connection Error"
 msgstr "Facebook 連線錯誤"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:296
 #, csharp-format
 msgid ""
 "There was an error when downloading your information from Facebook.\n"
@@ -293,7 +312,7 @@ msgstr ""
 "\n"
 "Facebook 說:{0}"
 
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:325
 msgid "You are not logged in."
 msgstr "您並未登入。"
 
@@ -322,7 +341,6 @@ msgid "In this photo"
 msgstr "於此相片"
 
 #: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:7
-#: ../src/XmpTagsImporter.cs:90
 msgid "Location"
 msgstr "位置"
 
@@ -371,72 +389,72 @@ msgstr "_Flickr..."
 msgid "_Zooomr..."
 msgstr "_Zooomr..."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:107
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
 msgid "Authorize"
 msgstr "授權"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
 #, csharp-format
 msgid ""
 "Return to this window after you have finished the authorization process on "
 "{0} and click the \"Complete Authorization\" button below"
 msgstr "在您於 {0} 完成認證程序後請返回本視窗,並點擊下方的「完成認證」按鈕"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:114
 msgid "Complete Authorization"
 msgstr "完成授權"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
 #, csharp-format
 msgid "Logging into {0}"
 msgstr "正在登入 {0}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:120
 msgid "Checking credentials..."
 msgstr "正在檢查憑證..."
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:127
 #, csharp-format
 msgid "Welcome {0} you are connected to {1}"
 msgstr "歡迎 {0} 您已連線到 {1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:130
 #, csharp-format
 msgid "Sign in as a different user"
 msgstr "以不同使用者登入"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:135
 #, csharp-format
 msgid "Used {0} of your allowed {1} monthly quota"
 msgstr "已使用您被允許的 {1} 每月配額中的 {0}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:239
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:308
 msgid "Unable to log on"
 msgstr "無法登入"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:328
 #, csharp-format
 msgid "Waiting for response {0} of {1}"
 msgstr "正在等待回應 {1} 個中的第 {0} 個"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:355
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:769
 #, csharp-format
 msgid "Uploading picture \"{0}\""
-msgstr "正在上載圖片 \"{0}\""
+msgstr "正在上傳圖片「{0}」"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:378
 #, csharp-format
 msgid "Error Uploading To {0}: {1}"
-msgstr "上傳至 {0} 時發生錯誤: {1}"
+msgstr "上傳至 {0} 時發生錯誤:{1}"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:465
 msgid "Unable to log on."
 msgstr "無法登入。"
 
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:466
 #, csharp-format
 msgid ""
 "F-Spot was unable to log on to {0}.  Make sure you have given the "
@@ -444,26 +462,24 @@ msgid ""
 msgstr "F-Spot 無法登入至 {0}。請確定您已使用 {0} 的網頁瀏覽介面進行驗證。"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
 msgid "<b>Account</b>"
 msgstr "<b>帳號</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5 ../src/ui/mail_dialog.ui.h:6
 msgid "<b>Photos</b>"
 msgstr "<b>相片</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
 msgid "<b>Style</b>"
 msgstr "<b>風格</b>"
 
@@ -472,11 +488,10 @@ msgid "<b>Viewing permissions</b>"
 msgstr "<b>檢視權限</b>"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
 msgid "Export"
 msgstr "匯出"
 
@@ -518,17 +533,15 @@ msgid "Visible to Friends"
 msgstr "朋友可以看到"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
 msgid "_Export tags"
 msgstr "匯出標籤(_E)"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:18
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
 msgid "_Resize to: "
 msgstr "重新調整大小為(_R):"
 
@@ -537,11 +550,10 @@ msgid "_View photos in browser when done uploading"
 msgstr "完成上傳後用瀏覽器檢視相片(_V)"
 
 #: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
 msgid "pixels"
 msgstr "像素"
 
@@ -549,187 +561,204 @@ msgstr "像素"
 msgid "F_older..."
 msgstr "資料夾(_O)..."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:117
 msgid "Select Export Folder"
 msgstr "選取匯出資料夾"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:169
 msgid "Building Gallery"
 msgstr "正在建立圖庫"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:206
 #, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "上傳照片 \"{0}\" 到圖庫 {2}{1} 時發生錯誤"
+msgid "Exporting \"{0}\"..."
+msgstr "正在匯出「{0}」..."
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "錯誤:傳輸時發生錯誤;正在中止"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:213
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "複製「{0}」至圖庫 {2}{1} 時發生錯誤"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "錯誤:檔案已存在;正在中止"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:239
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "傳輸至「{0}」"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:240
+msgid "Transferring..."
+msgstr "正在傳輸..."
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+msgid "Export Complete."
+msgstr "匯出完成。"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:247
+msgid "Exporting Photos Completed."
+msgstr "匯出相片完成。"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:312
+msgid "Exporting Photos"
+msgstr "正在匯出相片"
 
 #. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:716
 msgid "Light"
 msgstr "亮"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:717
 msgid "Dark"
 msgstr "暗"
 
 #. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:897
 msgid "Prev"
 msgstr "上一步"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:899
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
 msgid "Index"
 msgstr "索引"
 
 #. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:902
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1074
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1114
+#: ../src/MainWindow.cs:349 ../src/Widgets/Sidebar.cs:56
 msgid "Tags"
 msgstr "標籤"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:905
+#: ../src/ItemAction.cs:102
 msgid "Next"
 msgstr "下一步"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1009
 msgid "Gallery generated by"
 msgstr "產生圖庫由"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1049
 msgid "Show Styles"
 msgstr "顯示風格"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1050
 msgid "Hide Styles"
 msgstr "隱藏風格"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1085
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1086
 #: ../src/ui/main_window.ui.h:24
 msgid "Tags: "
 msgstr "標籤:"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1217
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1350
 msgid "Page:"
-msgstr "頁:"
+msgstr "頁面:"
 
 #: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
-msgid "\n"
-msgstr "\n"
-
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
 msgid "<b>Destination</b>"
 msgstr "<b>目的地</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:2
 msgid "<b>Export Method</b>"
 msgstr "<b>匯出方式</b>"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
 msgid "Create _gallery using \"Original\""
 msgstr "使用「原始版本」建立圖庫(_G)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
 msgid "Create standalone _web gallery"
 msgstr "建立獨立的網路圖庫(_W)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
 msgid "D_escription:"
 msgstr "描述(_D):"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
 msgid "Export _tags"
 msgstr "匯出標籤(_T)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
 msgid "Export tag _icons"
 msgstr "匯出標籤圖示(_I)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
 msgid "Folder Export"
 msgstr "匯出資料夾"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
 msgid "G_allery Name:"
 msgstr "圖庫名稱(_A):"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
 msgid "Open _destination when done exporting"
 msgstr "完成匯出後開啟目的地(_D)"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
 msgid "_Folder:"
 msgstr "資料夾(_F):"
 
-#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:19
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
 msgid "_Save the files only"
 msgstr "只儲存檔案(_S)"
 
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "預期外的錯誤"
+
 #: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
 msgid "Web _Gallery..."
 msgstr "網路圖庫(_G)..."
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:54
 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 "無"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:391
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
 msgid "Invalid URL"
 msgstr "無效的 URL"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:393
 msgid "The gallery URL entry does not appear to be a valid URL"
 msgstr "這個圖庫網址條目不是有效的網址"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:402
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:440
-msgid "Error while connecting to Gallery"
-msgstr "連接到圖庫時發生錯誤"
-
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
 #: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
+msgid "Error while connecting to Gallery"
+msgstr "連接到圖庫時發生錯誤"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:404
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:431
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:442
 #, csharp-format
 msgid "The following error was encountered while attempting to log in: {0}"
 msgstr "試圖登入時遭遇到下列錯誤:{0}"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:417
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
 msgid "A Gallery with this name already exists"
 msgstr "已存在相同名稱的圖庫"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:419
 #, csharp-format
 msgid ""
 "There is already a Gallery with the same name in your registered Galleries. "
 "Please choose a unique name."
 msgstr "在您註冊的圖庫中已經有相同名稱的圖庫。請選擇不同的名稱。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:529
 msgid "(TopLevel)"
 msgstr "(最頂層)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:590
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
 msgid "Invalid Gallery name"
 msgstr "不正確的相簿名稱"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:592
 msgid ""
 "The gallery name contains invalid characters.\n"
 "Only letters, numbers, - and _ are allowed"
@@ -737,44 +766,42 @@ msgstr ""
 "圖庫名稱包含無效的字元。\n"
 "只允許使用字母、數字,- 與 _"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:796
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:788
 #, csharp-format
 msgid "Error uploading picture \"{0}\" to Gallery: {1}"
-msgstr "上傳照片 \"{0}\" 到圖庫 {1} 時發生錯誤"
+msgstr "上傳圖片「{0}」至圖庫 {1} 時發生錯誤"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:816
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:714
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:614
 msgid "(No Gallery)"
 msgstr "(無圖庫)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:908
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:836
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:710
 msgid "(Not Connected)"
 msgstr "(沒有連接)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:909
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:837
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:711
 msgid "(No Albums)"
 msgstr "(無相簿)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:961
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:902
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:752
 msgid "No account selected"
 msgstr "沒有選取任何帳號"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
 #: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
 msgid "<b>Album</b>"
 msgstr "<b>相簿</b>"
 
 #: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
 msgid "<b>Gallery</b>"
 msgstr "<b>圖庫</b>"
 
@@ -783,87 +810,86 @@ msgstr "<b>圖庫</b>"
 msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
 msgstr "<span weight='bold' size='larger'>連接到圖庫時發生錯誤</span>\n"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
 msgid "Export _titles and comments"
 msgstr "匯出標題和註解(_T)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
 msgid "Open _album in browser when done uploading"
 msgstr "完成上傳後在瀏覽器中開啟圖庫(_A)"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
 msgid "Please verify that the settings for this gallery are correct."
 msgstr "請確定這個圖庫的設定是正確的。"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
 msgid "U_RL:"
-msgstr "U_RL:"
+msgstr "U_RL:"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
 msgid "_Album Name:"
 msgstr "相簿名稱(_A):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
 msgid "_Description:"
 msgstr "描述(_D):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
 msgid "_Export to Album:"
 msgstr "匯出到相簿(_E):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
 msgid "_Gallery Name:"
 msgstr "圖庫名稱(_G):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
 msgid "_Gallery:"
 msgstr "圖庫(_G):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
 msgid "_Parent Album:"
 msgstr "父相簿(_P):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
 msgid "_Password:"
 msgstr "密碼(_P):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
 msgid "_Title:"
 msgstr "標題(_T):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
 #: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
 msgid "_Username:"
 msgstr "用戶名稱(_U):"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:363
 msgid "Error reading server response"
 msgstr "伺服器回應讀取錯誤"
 
 #. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:375
 msgid "Server returned response without Gallery content"
 msgstr "伺服器回應無圖庫內容"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
 msgid "Error while creating new album"
 msgstr "建立新相簿時發生錯誤"
 
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:713
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to perform the "
@@ -877,45 +903,45 @@ msgstr ""
 msgid "_PicasaWeb..."
 msgstr "_PicasaWeb..."
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:444
 msgid "Error while creating Album"
 msgstr "建立相簿時發生錯誤"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:445
 #, csharp-format
 msgid ""
 "The following error was encountered while attempting to create an album: {0}"
 msgstr "試圖建立相簿時遭遇到下列錯誤:{0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:615
 #, csharp-format
 msgid "{0} Sent"
 msgstr "已送出{0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:617
 #, csharp-format
 msgid "{0} of approx. {1}"
 msgstr "{0} / 大約 {1}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:683
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:583
 #, csharp-format
 msgid "Error Uploading To Gallery: {0}"
 msgstr "上傳到圖庫時發生錯誤:{0}"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:765
 #, csharp-format
 msgid "Available space: {0}, {1}% used out of {2}"
 msgstr "可用空間:{0},已使用 {2} 中的 {1}%"
 
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:878
 #, 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 ""
 "所選的相簿限制 {0} 張圖片,\n"
-"目前所選的 {1} 個影像將會被忽略"
+"目前所選的 {1} 個圖片將會被忽略"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:3
 msgid "<b>PicasaWeb Export</b>"
@@ -933,24 +959,20 @@ msgid ""
 "the 'Captcha' field. <i>Letters are not case-sensitive</i>"
 msgstr ""
 "請驗證此圖庫的設定值是否都正確。\n"
-"輸入「Captcha」欄位內影像的\n"
+"輸入「Captcha」欄位內圖片的\n"
 "字母。<i>字母大小寫都可以</i>"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
 msgid "Public Album"
 msgstr "公開相簿"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
 msgid "_Album Title:"
 msgstr "相簿標題(_A):"
 
 #: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
-msgid "_Autorotate"
-msgstr "自動旋轉(_A)"
-
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
 msgid "_Captcha:"
 msgstr "_Captcha:"
 
@@ -962,14 +984,14 @@ msgstr "_SmugMug..."
 msgid "<b>SmugMug Export</b>"
 msgstr "<b>SmugMug 匯出</b>"
 
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
 msgid "_Account:"
 msgstr "帳號(_A):"
 
 #: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:132
 #, csharp-format
 msgid "Uploading photo \"{0}\""
-msgstr "正在上傳相片 \"{0}\""
+msgstr "正在上傳相片「{0}」"
 
 #: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:206
 msgid "Logging into Tabblo"
@@ -1027,30 +1049,26 @@ msgid "_Attach to exported photos:"
 msgstr "附加到匯出的相片中(_A):"
 
 #: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
-msgid "<b>{0}</b>."
-msgstr "<b>{0}</b>。"
-
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "A trust error occured while attempting to access"
 msgstr "試圖存取時發生信任上的錯誤"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
 msgid "Abort this session"
 msgstr "中止此作業階段"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
 msgid "Always trust this site's certificate"
 msgstr "總是信任此網站的憑證"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
 msgid "Do you wish to:"
 msgstr "您希望:"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
 msgid "Trust Error"
 msgstr "信任上的錯誤"
 
-#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
 msgid "Trust the site's certificate this once"
 msgstr "只有這次才信任這個網站的憑證"
 
@@ -1058,29 +1076,29 @@ msgstr "只有這次才信任這個網站的憑證"
 msgid "Compressed fil_e..."
 msgstr "壓縮的檔案(_E)..."
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../src/Widgets/EditorPage.cs:199
 msgid "No selection available"
 msgstr "無可用的選取項目"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:49
 msgid ""
 "This tool requires an active selection. Please select one or more pictures "
 "and try again"
 msgstr "此工具需要作用中的選取項目。請選取一個或是更多圖片,並重試"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:64
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:65
 msgid "Select export folder"
 msgstr "選取匯出資料夾"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:102
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:103
 msgid "Exporting files"
 msgstr "正在匯出檔案"
 
-#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:109
 #, csharp-format
 msgid "Preparing photo \"{0}\""
-msgstr "正在準備相片 \"{0}\""
+msgstr "正在準備相片「{0}」"
 
 #: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
 msgid "_Create"
@@ -1098,38 +1116,38 @@ msgstr "位置(_L):"
 msgid "_Scale:"
 msgstr "縮放(_S):"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:53
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "檢查有無複本..."
+
+#: ../extensions/Tools/HashJob/HashJob.cs:54
 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 ""
-"為了要偵測您在 0.5.0 版之前匯入的圖片是否有複本,F-Spot 需要分析您的影像收"
+"為了要偵測您在 0.5.0 版之前匯入的圖片是否有複本,F-Spot 需要分析您的圖片收"
 "藏。因為這相當耗費時間,所以預設上不會執行。您可以使用此對話方塊來「開始」或"
 "「暫停」此更新程序。"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:59
+#: ../extensions/Tools/HashJob/HashJob.cs:60
 #, csharp-format
 msgid ""
 "You currently have {0} photos needing md5 calculation, and {1} pending jobs"
 msgstr "您目前有 {0} 張相片需要 md5 計算,以及 {1} 個擱置的工作"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:76 ../src/ui/main_window.ui.h:37
 msgid "_Close"
 msgstr "關閉(_C)"
 
-#: ../extensions/Tools/HashJob/HashJob.cs:102
+#: ../extensions/Tools/HashJob/HashJob.cs:103
 msgid "Processing images..."
-msgstr "正在處理影像..."
+msgstr "正在處理圖片..."
 
-#: ../extensions/Tools/HashJob/HashJob.cs:108
+#: ../extensions/Tools/HashJob/HashJob.cs:109
 msgid "Stopped"
 msgstr "已停止"
 
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Check for Duplicates..."
-msgstr "檢查有無複本..."
-
 #: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
 msgid "F-Spot Gallery"
 msgstr "F-Spot 圖庫"
@@ -1161,6 +1179,19 @@ msgstr "已選"
 msgid "Live Web Gallery"
 msgstr "Live 網路圖庫"
 
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:90
+msgid "none"
+msgstr "無"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:93
+#, csharp-format
+msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
+msgstr "圖庫:{0},相片:{1},上個用戶端:{3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:157
+msgid "Gallery is inactive"
+msgstr "圖庫未啟用"
+
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
 msgid ""
 "<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1199,7 +1230,7 @@ msgstr "圖庫 URL:"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:11
 msgid "Limit number of shared photos to"
-msgstr "限制照片分享的張數"
+msgstr "限制相片分享的張數"
 
 #: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
 msgid "Options:"
@@ -1221,28 +1252,15 @@ msgstr "分享:"
 msgid "Views:"
 msgstr "檢視數:"
 
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "無"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0},  Photos: {1},  Last client: {3}"
-msgstr "圖庫:{0},相片:{1},上個用戶端:{3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "圖庫未啟用"
-
 #: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
 msgid "Merge Db"
 msgstr "合併資料庫"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:73
+#: ../extensions/Tools/MergeDb/MergeDb.cs:74
 msgid "Error opening the selected file"
 msgstr "開啟所選的檔案時發生錯誤"
 
-#: ../extensions/Tools/MergeDb/MergeDb.cs:74
+#: ../extensions/Tools/MergeDb/MergeDb.cs:75
 #, csharp-format
 msgid ""
 "The file you selected is not a valid or supported database.\n"
@@ -1281,7 +1299,7 @@ msgid ""
 "the later, be sure that this location will stay accessible from f-spot.</i></"
 "small>"
 msgstr ""
-"<small><i>在本機複製這些影像,或是將它們維持在它們的地方。如果您選擇了後者,"
+"<small><i>在本機複製這些圖片,或是將它們維持在它們的地方。如果您選擇了後者,"
 "請確保該位置對 f-spot 維持在可存取的狀態。</i></small>"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:7
@@ -1290,7 +1308,7 @@ msgstr "單一的匯入膠卷"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:8
 msgid "Copy images to photos folder"
-msgstr "複製影像至相片資料夾"
+msgstr "複製圖片至相片資料夾"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:9
 msgid "Database Location:"
@@ -1306,7 +1324,7 @@ msgstr "匯入:"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:12
 msgid "Keep the images at their original location"
-msgstr "維持這些影像在它們原本的位置"
+msgstr "維持這些圖片在它們原本的位置"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:13
 msgid "Merge another F-Spot collection"
@@ -1317,11 +1335,11 @@ msgid "New Rolls Only"
 msgstr "只有新的膠卷"
 
 #: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291 ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
 msgid "Skip"
 msgstr "跳過"
 
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
 #, csharp-format
 msgid ""
 "<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1335,9 +1353,9 @@ msgid "Configure Screensaver"
 msgstr "組態螢幕保護程式"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
-#: ../src/UI.Dialog/DateRangeDialog.cs:129
+#: ../src/UI.Dialog/DateRangeDialog.cs:120
 msgid "All Images"
-msgstr "所有影像"
+msgstr "所有圖片"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:2
 msgid "Delay:"
@@ -1349,7 +1367,7 @@ msgstr "顯示:"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:4
 msgid "Images tagged with:"
-msgstr "含有標籤的影像:"
+msgstr "含有標籤的圖片:"
 
 #: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:5
 msgid "Make F-Spot my screensaver"
@@ -1359,123 +1377,215 @@ msgstr "讓 F-Spot 做為您的螢幕保護程式"
 msgid "Screensaver Configuration"
 msgstr "螢幕保護程式組態"
 
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "透明部分的顯示方式。"
 
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "F-Spot 相片管理員"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "啟用此選項以允許對拉近拉遠的圖片進行插補處理。"
 
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "組織、享受、並分享您的相片"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "匯入對話窗高度。"
 
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "相片管理員"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "主視窗高度。"
 
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "匯入至 F-Spot"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "相片檢視器視窗高度。"
 
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "F-Spot 相片檢視器"
+#: ../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 ""
+"如果設置了「透明」選項,此選項內指定的顏色當檢視圖片時會替代透明顏色使用。"
 
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "相片檢視器"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "拉近或拉遠時對圖片進行插補處理。"
 
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "找不到檔案"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "最大化主視窗。"
 
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "未知的轉換類型 %d"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "最大化相片檢視器視窗。"
 
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "操作失敗"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "自訂作為 F-Spot 主題的 gtkrc 路徑。"
 
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "預覽"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "於縮圖檢視內顯示日期。"
 
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "路徑"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "於縮圖檢視內顯示評等。"
 
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "檔案"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "於縮圖檢視內顯示標籤。"
 
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "選取標籤"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "於檢視器視窗內顯示檔案名稱。"
 
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "正在下載預覽"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "於主視窗顯示幻燈片帶。"
 
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "正在下載 {0} 的預覽"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "於主視窗顯示側邊列。"
 
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "正在複製 {1} 之 {0}"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "於主視窗顯示時間軸。"
 
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "傳輸檔案時發生錯誤"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "於主視窗顯示工具列。"
 
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "下載完畢"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "於相片檢視器視窗內顯示工具列。"
 
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "複製檔案完成"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "顯示於側邊列的標籤圖示大小。"
 
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "從數位相機傳輸 \"{0}\""
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "主視窗要使用的 X 軸位置。"
 
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "數位相機"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "相片檢視器視窗要使用的 X 軸位置。"
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "主視窗要使用的 Y 軸位置。"
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "相片檢視器視窗要使用的 Y 軸位置。"
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "透明部分要使用的替代顏色。"
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "匯入對話窗要使用的高度。"
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "主視窗要使用的高度。"
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "相片檢視器視窗要使用的高度。"
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "幻燈片帶的方向,如果有顯示的話。"
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "幻燈片帶的方向。"
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "主視窗內的側邊列大小 (寬度)。"
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "主視窗內的側邊列大小。"
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "匯入對話窗要使用的寬度。"
 
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "連接埠"
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "主視窗要使用的寬度。"
 
-#: ../src/Core/App.cs:278
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "相片檢視器視窗要使用的寬度。"
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "使用目前相片的檔案名稱作為檢視器視窗標題。"
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "匯入對話窗寬度。"
+
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "主視窗寬度。"
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "相片檢視器視窗寬度。"
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "匯入對話窗內的預覽圖片窗格寬度。"
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "主視窗的 X 軸位置。"
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "相片檢視器視窗的 X 軸位置。"
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "主視窗的 Y 軸位置。"
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "相片檢視器視窗的 Y 軸位置。"
+
+#: ../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 ""
+"<small><i>您可以選擇要如何顯示圖片內的透明部份。此選項對相片不會造成任何影"
+"響,但是當檢視含有透明部份的圖示或是其他美工時,將此設為 CHECK_PATTERN 或 "
+"CUSTOM_COLOR 應該很有用。</i></small>"
+
+#: ../src/Core/App.cs:290
 #, csharp-format
 msgid "No photos matching {0} found"
 msgstr "找不到符合 {0} 的相片"
 
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:291
 #, 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 ""
-"沒有任何標示為 \"{0}\" 的相片。您可以標示一些\n"
+"沒有任何標示為「{0}」的相片。您可以標示一些\n"
 "相片,或著在 F-Spot 的選項中選擇其他的標籤。"
 
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:295
 msgid "Search returned no results"
 msgstr "沒有找到搜尋結果"
 
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:296
 msgid ""
 "The tag F-Spot is looking for does not exist. Try\n"
 "selecting a different tag in the F-Spot preference\n"
@@ -1485,37 +1595,26 @@ msgstr ""
 "請試試在 F-Spot 偏好對話方塊選擇其他標籤。"
 
 #. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:405
 msgid "Reparented"
 msgstr "重定母本"
 
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "重定母本 ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:422
 #, csharp-format
 msgid "Modified"
 msgid_plural "Modified ({0})"
 msgstr[0] "已修改 ({0})"
 
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1}"
 msgstr "在 {1} 中已修改"
 
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:445
 #, csharp-format
 msgid "Modified in {1} ({0})"
 msgstr "在 {1} ({0})中已修改"
 
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:62
-msgid "Original"
-msgstr "原始版本"
-
 #: ../src/Editors/AutoStretchEditor.cs:17
 msgid "Auto Color"
 msgstr "自動校色"
@@ -1528,43 +1627,43 @@ msgstr "調節色彩"
 msgid "Adjust"
 msgstr "調整"
 
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
 msgid "4 x 3 (Book)"
 msgstr "4 x 3 (書本)"
 
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
 msgid "4 x 6 (Postcard)"
 msgstr "4 x 6 (明信片)"
 
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
 msgid "5 x 7 (L, 2L)"
 msgstr "5 x 7 (L, 2L)"
 
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
 msgid "8 x 10"
 msgstr "8 x 10"
 
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
 msgid "Square"
 msgstr "正方形"
 
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
 msgid "Crop"
 msgstr "裁剪"
 
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
 msgid "Select the area that needs cropping."
 msgstr "選取需要剪裁的區域。"
 
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
 msgid "No Constraint"
 msgstr "無限制"
 
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
 msgid "Same as photo"
 msgstr "與相片一樣"
 
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
 msgid "Custom Ratios..."
 msgstr "自訂比例..."
 
@@ -1593,28 +1692,9 @@ msgid "Soft Focus"
 msgstr "柔焦"
 
 #: ../src/Editors/TiltEditor.cs:30
-#, fuzzy
 msgid "Straighten"
 msgstr "拉直"
 
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "匯入發生錯誤"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "匯入 {0}{2}{2}{1} 時發生錯誤"
-
-#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
-#, csharp-format
-msgid "No way to save files of type \"{0}\""
-msgstr "無法儲存 \"{0}\" 類型的檔案"
-
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "預期外的錯誤"
-
 #: ../src/FSpot.addin.xml.h:1
 msgid "Copy Photo"
 msgstr "複製相片"
@@ -1631,13 +1711,13 @@ msgstr "開啟以(_W)"
 msgid "Rem_ove Tag"
 msgstr "移除標記(_O)"
 
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/SingleView.cs:427
+#: ../src/ui/main_window.ui.h:16
 msgid "Rotate _Left"
 msgstr "往左旋轉(_L)"
 
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:70
-#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/SingleView.cs:428
+#: ../src/ui/main_window.ui.h:17
 msgid "Rotate _Right"
 msgstr "往右旋轉(_R)"
 
@@ -1645,476 +1725,85 @@ msgstr "往右旋轉(_R)"
 msgid "Tools"
 msgstr "工具"
 
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "附加標籤(_A)"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:41
 msgid "_Delete From Drive"
 msgstr "從磁碟機中刪除(_D)"
 
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:60
 msgid "_Remove From Catalog"
 msgstr "從編目中移除(_R)"
 
 #: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
-msgid "1024 px"
-msgstr "1024 px"
-
-#: ../src/f-spot.glade.h:3
-msgid "320 px"
-msgstr "320 px"
-
-#: ../src/f-spot.glade.h:4
-msgid "480 px"
-msgstr "480 px"
-
-#: ../src/f-spot.glade.h:5
-msgid "640 px"
-msgstr "640 px"
-
-#: ../src/f-spot.glade.h:6
-msgid "800 px"
-msgstr "800 px"
-
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
 msgid "<b>Co_rrections</b>"
 msgstr "<b>校正(_R)</b>"
 
-#: ../src/f-spot.glade.h:13
-msgid "<b>Image Interpolation</b>"
-msgstr "<b>影像插補</b>"
-
-#: ../src/f-spot.glade.h:15
-msgid "<b>Size</b>"
-msgstr "<b>大小</b>"
-
-#: ../src/f-spot.glade.h:17
-msgid "<b>Summary</b>"
-msgstr "<b>摘要</b>"
-
-#: ../src/f-spot.glade.h:18
-msgid "<b>Transparent Parts</b>"
-msgstr "<b>透明部份</b>"
-
-#: ../src/f-spot.glade.h:19
-msgid "<b>View all pictures imported</b>"
-msgstr "<b>檢視匯入的所有圖片</b>"
-
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:2
 msgid "<b>_White Balance</b>"
 msgstr "<b>白平衡(_W)</b>"
 
-#: ../src/f-spot.glade.h:21
-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>啟用此選項來允許針對拉近拉遠的影像進行插補處理。您不應該停用此選項"
-"以檢視相片,但是停用插補處理可能對於圖示設定很有用處。</i></small>"
-
-#: ../src/f-spot.glade.h:22
-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>您可以選擇要如何顯示影像內的透明部份。此選項對相片不會造成任何影"
-"響,但是當檢視含有透明部份的圖示或是其他美工時,將此設為格子花紋或是自訂色彩"
-"應該很有用。</i></small>"
-
-#: ../src/f-spot.glade.h:23
-msgid "As _background"
-msgstr "設為背景(_B)"
-
-#: ../src/f-spot.glade.h:24
-msgid "As _custom color: "
-msgstr "設為自訂色彩(_C): "
-
-#: ../src/f-spot.glade.h:25
-msgid "As check _pattern"
-msgstr "設為格子花紋(_P)"
-
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "附加標籤:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "附加標籤:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:3
 msgid "C_ontrast:"
 msgstr "對比(_O):"
 
-#: ../src/f-spot.glade.h:31
-msgid "C_reate"
-msgstr "建立(_R)"
-
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "數位相機選取"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "複製檔案至相片資料夾"
-
-#: ../src/f-spot.glade.h:34
-msgid "Create Mail"
-msgstr "建立郵件"
-
-#: ../src/f-spot.glade.h:35
-msgid "Create _icon for this tag when first used"
-msgstr "當第一次使用時為此標籤建立圖示(_I)"
-
-#: ../src/f-spot.glade.h:36
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr "建立郵件並將所選相片(可能會被縮放)作為附件"
-
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr "偵測複本"
-
-#: ../src/f-spot.glade.h:38
-msgid "Display File _Names"
-msgstr "顯示檔案名稱(_N)"
-
-#: ../src/f-spot.glade.h:39
-msgid "Display only those photos that were imported in specified Rolls."
-msgstr "只顯示那些被匯入指定膠卷內的相片。"
-
-#: ../src/f-spot.glade.h:40
-msgid "Do not send a mail"
-msgstr "不要寄出郵件"
-
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "電子郵件(_M):"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "匯出標題和註解(_X)"
-
-#: ../src/f-spot.glade.h:43
-msgid "Estimated new size"
-msgstr "估計新大小"
-
-#: ../src/f-spot.glade.h:45
-msgid "Extra large"
-msgstr "非常大"
-
-#: ../src/f-spot.glade.h:46
-msgid "F-Spot View"
-msgstr "F-Spot 檢視"
-
-#: ../src/f-spot.glade.h:48
-msgid "Filter on selected rolls"
-msgstr "所選膠卷的過濾條件"
-
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "G_allery:"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "圖庫"
-
-#: ../src/f-spot.glade.h:51 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "匯入"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "匯入來源:"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "包括子目錄(_C)"
-
-#: ../src/f-spot.glade.h:55
-msgid "Large"
-msgstr "大"
-
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:4
 msgid "Manage your custom selection ratios"
 msgstr "管理您自訂的選取比例"
 
-#: ../src/f-spot.glade.h:57
-msgid "Medium"
-msgstr "中"
-
-#: ../src/f-spot.glade.h:59
-msgid "Number of photos in selected rolls:"
-msgstr "所選膠卷內的相片數量:"
-
-#: ../src/f-spot.glade.h:60
-msgid "Number of pictures"
-msgstr "圖片數目:"
-
-#: ../src/f-spot.glade.h:61
-msgid "Open _Folder..."
-msgstr "開啟資料夾(_F)..."
-
-#: ../src/f-spot.glade.h:63
-msgid "Original size (possible very large file size)"
-msgstr "原始大小(檔案可能非常大)"
-
-#: ../src/f-spot.glade.h:64 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
-msgid "P_arent Tag:"
-msgstr "父標籤(_A):"
-
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "暫停"
-
-#: ../src/f-spot.glade.h:66
-msgid "Preferences"
-msgstr "偏好設定"
-
-#: ../src/f-spot.glade.h:67 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "上一次"
-
-#: ../src/f-spot.glade.h:68
-msgid "Repair"
-msgstr "修復"
-
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "選擇要從數位相機複製的相片..."
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:5 ../src/ui/tag_selection_dialog.ui.h:1
 msgid "Select a Tag..."
 msgstr "選擇標籤..."
 
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr "請選擇您要傳輸檔案的數位相機"
-
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "選擇的相機: "
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:6
 msgid "Selection Constraints"
 msgstr "選取限制"
 
-#: ../src/f-spot.glade.h:76 ../src/ui/main_window.ui.h:21
-msgid "Set as _Background"
-msgstr "設定為背景(_B)"
-
-#: ../src/f-spot.glade.h:77
-msgid "Show all photos."
-msgstr "顯示所有相片。"
-
-#: ../src/f-spot.glade.h:78
-msgid "Show or hide the side pane"
-msgstr "顯示或隱藏側面的長方格"
-
-#: ../src/f-spot.glade.h:79
-msgid "Show or hide the toolbar"
-msgstr "顯示或隱藏工具列"
-
-#: ../src/f-spot.glade.h:80
-msgid "Side _pane"
-msgstr "側面的長方格(_P)"
-
-#: ../src/f-spot.glade.h:81
-msgid "Small"
-msgstr "小"
-
-#: ../src/f-spot.glade.h:82
-msgid ""
-"Specify if an original size picture should be rotated or not. Smaller sizes "
-"are automatically rotated."
-msgstr "指定原始大小的圖片是否該被旋轉。大小較小的會被自動旋轉。"
-
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "除去影像的中介資料(_M)"
-
 #. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:8
 msgid "Te_mp:"
 msgstr "溫度(_M):"
 
-#: ../src/f-spot.glade.h:86
-msgid "Tiny"
-msgstr "極小"
-
-#: ../src/f-spot.glade.h:87
-msgid "Total original size"
-msgstr "總計原始大小"
-
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:28
-msgid "Zoom _in"
-msgstr "拉近(_I)"
-
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:29
-msgid "Zoom _out"
-msgstr "拉遠(_O)"
-
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:30
-msgid "Zoom in"
-msgstr "拉近"
-
-#: ../src/f-spot.glade.h:91 ../src/ui/main_window.ui.h:31
-msgid "Zoom out"
-msgstr "拉遠"
-
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:9
 msgid "_Brightness:"
 msgstr "亮度(_B):"
 
-#: ../src/f-spot.glade.h:93
-msgid "_Create Mail"
-msgstr "建立郵件(_C)"
-
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
-msgid "_Edit"
-msgstr "編輯(_E)"
-
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:10
 msgid "_Exposure:"
 msgstr "曝光(_E):"
 
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
-msgid "_Fullscreen"
-msgstr "全螢幕(_F)"
-
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Gallery"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
-msgid "_Help"
-msgstr "求助(_H)"
-
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:11
 msgid "_Hue:"
 msgstr "色調(_H):"
 
-#: ../src/f-spot.glade.h:104
-msgid "_Interpolate image on zoom"
-msgstr "拉近或拉遠圖片時對影像進行插補(_I)"
-
-#: ../src/f-spot.glade.h:105
-msgid "_New Window"
-msgstr "新視窗(_N)"
-
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "完成上傳後在瀏覽器中開啟圖庫(_O)"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "完成匯出後開啟目的地(_O)"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
-msgid "_Photo"
-msgstr "相片(_P)"
-
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:12
 msgid "_Saturation:"
 msgstr "飽和度(_S):"
 
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "相片縮放不能超過(_S):"
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
-msgid "_Slideshow"
-msgstr "幻燈片(_8)"
-
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "除去中介資料(_S)"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
-msgid "_Tag Name:"
-msgstr "標籤名稱(_T):"
-
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:13
 msgid "_Tint:"
 msgstr "色相(_T):"
 
-#: ../src/f-spot.glade.h:116
-msgid "_Toolbar"
-msgstr "工具列(_T)"
-
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
-msgid "_View"
-msgstr "檢視(_V)"
-
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "虛擬檔案系統(_V)"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
-msgid "and"
-msgstr "及"
-
-#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
-msgid ""
-"at\n"
-"after\n"
-"between"
-msgstr ""
-"於\n"
-"晚於\n"
-"介於"
-
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
 #: ../src/FullScreenView.cs:58
 msgid "Hide"
 msgstr "隱藏"
 
 #: ../src/FullScreenView.cs:60
-msgid "Hide Toolbar"
+msgid "Hide toolbar"
 msgstr "隱藏工具列"
 
 #: ../src/FullScreenView.cs:66
 msgid "Info"
 msgstr "資訊"
 
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:201
-msgid "Image Information"
-msgstr "影像資訊"
+#: ../src/FullScreenView.cs:68
+msgid "Image information"
+msgstr "圖片資訊"
 
 #: ../src/FullScreenView.cs:73
 msgid "Exit fullscreen"
 msgstr "退出全螢幕"
 
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:341
-#: ../src/SingleView.cs:88
+#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:314
+#: ../src/SingleView.cs:91
 msgid "Slideshow"
 msgstr "幻燈片"
 
@@ -2134,201 +1823,16 @@ msgstr "更多日期"
 msgid "More"
 msgstr "更多"
 
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:34
 msgid "_Clear Date Range"
 msgstr "清除日期範圍(_C)"
 
-#: ../src/Imaging/Exif.cs:228
-msgid "Image Directory"
-msgstr "影像目錄"
-
-#: ../src/Imaging/Exif.cs:230
-msgid "Thumbnail Directory"
-msgstr "縮圖目錄"
-
-#: ../src/Imaging/Exif.cs:232
-msgid "Exif Directory"
-msgstr "Exif 目錄"
-
-#: ../src/Imaging/Exif.cs:234
-msgid "GPS Directory"
-msgstr "GPS 目錄"
-
-#: ../src/Imaging/Exif.cs:236
-msgid "InterOperability Directory"
-msgstr "互通目錄"
-
-#: ../src/Imaging/Exif.cs:238
-msgid "Unknown Directory"
-msgstr "未知目錄"
-
-#: ../src/Imaging/ImageFile.cs:117
-msgid "Writing to this file format is not supported"
-msgstr "不支援寫入此檔案格式"
-
-#: ../src/Imaging/IptcFile.cs:145
-msgid "IPTC Information Interchange Model (IIM) Version number"
-msgstr "IPTC Information Interchange Model (IIM) 版本號碼"
-
-#: ../src/Imaging/IptcFile.cs:147
-msgid "OSI Destination routing information"
-msgstr "OSI 目標路由資訊"
-
-#: ../src/Imaging/IptcFile.cs:149
-msgid "IPTC file format"
-msgstr "IPTC 檔案格式"
-
-#: ../src/Imaging/IptcFile.cs:151
-msgid "Identifies the provider and product"
-msgstr "識別供應商與產品"
-
-#: ../src/Imaging/IptcFile.cs:153
-msgid "A unique number identifying the envelope"
-msgstr "用來辨別信封的唯一編號"
-
-#: ../src/Imaging/IptcFile.cs:155
-msgid "A unique number"
-msgstr "一個獨特的號碼"
-
-#: ../src/Imaging/IptcFile.cs:157
-msgid ""
-"The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
-msgstr "信封處理優先序介於 1 (最緊急) 與 9 (最不緊急) 之間"
-
-#: ../src/Imaging/IptcFile.cs:159
-msgid "The year, month and day (CCYYMMDD) the service sent the material"
-msgstr "附註年月日 (CCYYMMDD) 的服務"
-
-#: ../src/Imaging/IptcFile.cs:161
-msgid "The hour, minute and second (HHMMSS) the service sent the material"
-msgstr "這個服務送出該資料的時間,以時、分與秒標記 (HHMMSS)"
-
-#: ../src/Imaging/IptcFile.cs:163
-msgid "The character set designation"
-msgstr "設定的字元編碼"
-
-#: ../src/Imaging/IptcFile.cs:165
-msgid "External globally unique object identifier"
-msgstr "外部全域獨立物件識別碼"
-
-#: ../src/Imaging/IptcFile.cs:170
-msgid "Abstract Relationship Method (ARM) identifier"
-msgstr "抽象關聯模式 (ARM) 識別碼"
-
-#: ../src/Imaging/IptcFile.cs:172
-msgid "Abstract Relationship Method (ARM) version number."
-msgstr "抽象關係方法 (ARM) 版本編號。"
-
-#: ../src/Imaging/IptcFile.cs:175
-msgid "Number identifying the IIM version this application record uses"
-msgstr "作為辨識此應用程式紀錄所使用的 IIM 版本之用的編號"
-
-#: ../src/Imaging/IptcFile.cs:177
-msgid "Object type reference"
-msgstr "物件型態參考"
-
-#: ../src/Imaging/IptcFile.cs:182
-msgid "Object attribute reference"
-msgstr "物件屬性參考"
-
-#: ../src/Imaging/IptcFile.cs:188 ../src/Imaging/IptcFile.cs:192
-msgid "Object name"
-msgstr "物件名稱"
-
-#: ../src/Imaging/IptcFile.cs:190
-msgid "Status of the objectdata according to the provider"
-msgstr "根據供應商物件資料提供的狀態"
-
-#: ../src/Imaging/IptcFile.cs:194
-msgid "Location within a city or area where the object originates"
-msgstr "該物件起源自何城市或區域"
-
-#: ../src/Imaging/IptcFile.cs:197
-msgid "Name of the city the content is focussing on"
-msgstr "內容所聚焦的城市其名稱"
-
-#: ../src/Imaging/IptcFile.cs:200
-msgid "Copyright information for"
-msgstr "其版權資訊"
-
-#: ../src/Imaging/IptcFile.cs:203
-msgid "Full name of the country of the focus of the content"
-msgstr "內容所聚焦的地區其全名"
-
-#: ../src/Imaging/IptcFile.cs:206
-msgid ""
-"Two or three letter ISO3166 code of the country of the focus of the content"
-msgstr "內容所聚焦的地區其 ISO3166 代碼,由 2-3 個字母組成"
-
-#: ../src/Imaging/IptcFile.cs:209
-msgid "Creator of the content"
-msgstr "內容建立者"
-
-#: ../src/Imaging/IptcFile.cs:212
-msgid "Provider of the object"
-msgstr "物件提供者"
-
-#: ../src/Imaging/IptcFile.cs:215
-msgid "The title of the author or creator"
-msgstr "作者或建立者的標題"
-
-#: ../src/Imaging/IptcFile.cs:218
-msgid ""
-"The person involved in writing, editing or correcting the object data or "
-"caption/abstract"
-msgstr "這個人參與過寫作、編輯、或是校正這個物件資料或是相片說明/摘要"
-
-#: ../src/Imaging/IptcFile.cs:222
-msgid "Headline of the content"
-msgstr "內容的標題"
-
-#: ../src/Imaging/IptcFile.cs:225
-msgid ""
-"Instructions from the creator to the receiver not covered by other fields"
-msgstr "來自建立者給予接收者的指示,沒有被其他領域涵蓋"
-
-#: ../src/Imaging/IptcFile.cs:228
-msgid "Intellectual genre of the object"
-msgstr "物件的智慧類型"
-
-#: ../src/Imaging/IptcFile.cs:241
-msgid "Unknown IIM DataSet"
-msgstr "不明的 IIM DataSet"
-
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "選擇資料夾"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(偵測不到數位相機)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "正在載入 {1} 之 {0}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "完成載入"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "目錄不存在。"
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist.  Please choose a "
-"different directory"
-msgstr "您選擇的目錄 \"{0}\" 不存在。請選擇另外的目錄"
-
-#: ../src/ImportCommand.cs:738 ../src/ImportCommand.cs:740
-#: ../src/XmpTagsImporter.cs:89
+#: ../src/Import/ImportController.cs:468 ../src/Import/ImportController.cs:470
+#: ../src/Import/MetadataImporter.cs:50
 msgid "Imported Tags"
 msgstr "匯入的標籤"
 
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:308 ../src/SingleView.cs:71
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:281 ../src/SingleView.cs:74
 msgid "Rotate Left"
 msgstr "向左旋轉"
 
@@ -2336,7 +1840,7 @@ msgstr "向左旋轉"
 msgid "Rotate picture left"
 msgstr "將圖片向左旋轉"
 
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:312 ../src/SingleView.cs:76
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:285 ../src/SingleView.cs:79
 msgid "Rotate Right"
 msgstr "向右旋轉"
 
@@ -2348,124 +1852,128 @@ msgstr "將圖片向右旋轉"
 msgid "Next picture"
 msgstr "下一張圖片"
 
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "上一次"
+
 #: ../src/ItemAction.cs:124
 msgid "Previous picture"
 msgstr "上一張圖片"
 
-#: ../src/MainWindow.cs:303
+#: ../src/Jobs/SyncMetadataJob.cs:73
+#, csharp-format
+msgid ""
+"Metadata of file {0} may be corrupt, refusing to write to it, falling back "
+"to XMP sidecar."
+msgstr "檔案 {0} 的中介資料可能損壞,拒絕寫入,回溯至 XMP sidecar。"
+
+#: ../src/MainWindow.cs:274 ../src/UI.Dialog/ImportDialog.cs:195
+#: ../src/ui/import.ui.h:3
+msgid "Import"
+msgstr "匯入"
+
+#: ../src/MainWindow.cs:276
 msgid "Import new images"
-msgstr "匯入新影像"
+msgstr "匯入新圖片"
 
-#: ../src/MainWindow.cs:319 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:292 ../src/ui/main_window.ui.h:3
 msgid "Browse"
 msgstr "瀏覽"
 
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:296
 msgid "Browse many photos simultaneously"
 msgstr "同時瀏覽多個相片"
 
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:300
 msgid "Edit Image"
-msgstr "編輯影像"
+msgstr "編輯圖片"
 
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:304
 msgid "View and edit a photo"
 msgstr "檢視及編輯相片"
 
-#: ../src/MainWindow.cs:336 ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:309 ../src/SingleView.cs:86
 msgid "Fullscreen"
 msgstr "全螢幕"
 
-#: ../src/MainWindow.cs:338 ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:311 ../src/SingleView.cs:88
 msgid "View photos fullscreen"
 msgstr "全螢幕檢視相片"
 
-#: ../src/MainWindow.cs:343 ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:316 ../src/SingleView.cs:93
 msgid "View photos in a slideshow"
 msgstr "於幻燈片中檢視相片"
 
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:331
 msgid "Previous photo"
 msgstr "上一張相片"
 
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:336
 msgid "Next photo"
 msgstr "下一張相片"
 
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "偵測不到數位相機。"
-
-#: ../src/MainWindow.cs:1519
-msgid ""
-"F-Spot was unable to find any cameras attached to this system.  Double check "
-"that the camera is connected and has power"
-msgstr ""
-"F-Spot 無法找到任何連接到系統的數位相機。請再次確定它已連接並且電源已開啟。"
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "連接數位相機時發生錯誤"
+#: ../src/MainWindow.cs:413
+msgid "Show _Find Bar"
+msgstr "顯示搜尋列(_F)"
 
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "連接數位相機時收到錯誤 \"{0}\""
+#: ../src/MainWindow.cs:416
+msgid "Hide _Find Bar"
+msgstr "隱藏搜尋列(_F)"
 
 #. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1724
 #, csharp-format
 msgid "Merge the selected tag"
 msgid_plural "Merge the {0} selected tags?"
 msgstr[0] "合併選定的 {0} 個標籤?"
 
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1751
 msgid ""
 "This operation will merge the selected tags and any sub-tags into a single "
 "tag."
 msgstr "此操作將合併所選的標籤與任何子標籤為單一標籤。"
 
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1753
 msgid "_Merge Tags"
 msgstr "合併標籤(_M)"
 
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1958
 #, csharp-format
 msgid "{0} Photo out of {1}"
 msgid_plural "{0} Photos out of {1}"
 msgstr[0] "{1} 張相片中的第 {0} 張"
 
-#: ../src/MainWindow.cs:2082 ../src/SingleView.cs:467
+#: ../src/MainWindow.cs:1960 ../src/SingleView.cs:469
 #, csharp-format
 msgid "{0} Photo"
 msgid_plural "{0} Photos"
 msgstr[0] "{0} 張相片"
 
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1963
 #, csharp-format
 msgid " ({0} selected)"
 msgid_plural " ({0} selected)"
 msgstr[0] " (已選 {0} 張)"
 
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2044
 msgid "_Ok"
 msgstr "確定(_O)"
 
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2045
 msgid "Error Deleting Picture"
 msgstr "刪除圖片時發生錯誤"
 
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2050
 #, csharp-format
 msgid "No permission to delete the file:{1}{0}"
 msgstr "沒有刪除檔案的權限:{1}{0}"
 
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2054
 #, csharp-format
 msgid "An error of type {0} occurred while deleting the file:{2}{1}"
 msgstr "刪除檔案時發生類型 {0} 的錯誤:{2}{1}"
 
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2086
 #, csharp-format
 msgid "Delete the selected photo permanently?"
 msgid_plural "Delete the {0} selected photos permanently?"
@@ -2473,18 +1981,18 @@ msgstr[0] ""
 "要永久刪除選擇的相片嗎?\n"
 "要永久刪除選擇的 {0} 張相片嗎?"
 
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2090
 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] "這樣會從磁碟機中刪除這張相片的所有版本。"
 
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2093
 msgid "_Delete photo"
 msgid_plural "_Delete photos"
 msgstr[0] "刪除相片(_D)"
 
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2129
 #, csharp-format
 msgid "Remove the selected photo from F-Spot?"
 msgid_plural "Remove the {0} selected photos from F-Spot?"
@@ -2492,7 +2000,7 @@ msgstr[0] ""
 "要從 F-Spot 移除已選的相片嗎?\n"
 "要從 F-Spot 移除已選的 {0} 張相片嗎?"
 
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2134
 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 "
@@ -2501,77 +2009,77 @@ msgstr ""
 "如果您要從 F-Spot 編目中移除相片,那麼所有標籤資訊都會一併消失。不過,您仍然"
 "可以再次把相片匯入至 F-Spot 中。"
 
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2135
 msgid "_Remove from Catalog"
 msgstr "從編目中移除(_R)"
 
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2209
 #, csharp-format
 msgid "Delete tag \"{0}\"?"
-msgstr "刪除標籤\"{0}\"?"
+msgstr "要刪除「{0}」標籤嗎?"
 
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2211
 #, csharp-format
 msgid "Delete the {0} selected tags?"
 msgstr "刪除選定的標籤 {0} ?"
 
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2216
 msgid "photo"
 msgid_plural "photos"
 msgstr[0] "相片"
 
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2218
 #, 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] "如果您刪除此標籤,那麼與 {0} {1} 的關聯都會消失。"
 
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2223
 msgid "_Delete tag"
 msgid_plural "_Delete tags"
 msgstr[0] "刪除標籤(_D)"
 
 #. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2237
 msgid "Tag is not empty"
 msgstr "標籤不是空的"
 
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2238
 #, csharp-format
 msgid ""
 "Can not delete tags that have tags within them.  Please delete tags under "
 "\"{0}\" first"
 msgstr "無法刪除內含標籤的標籤。請先刪除「{0}」下的標籤"
 
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2678
 msgid "Rotate selected photo left"
 msgid_plural "Rotate selected photos left"
 msgstr[0] "將已選的相片向左旋轉"
 
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2691
 msgid "Rotate selected photo right"
 msgid_plural "Rotate selected photos right"
 msgstr[0] "將已選的相片向右旋轉"
 
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2702
 #, csharp-format
 msgid "Find _Selected Tag"
 msgid_plural "Find _Selected Tags"
 msgstr[0] "尋找選定的標籤(_S)"
 
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2706
 #, csharp-format
 msgid "Find Selected Tag _With"
 msgid_plural "Find Selected Tags _With"
 msgstr[0] "尋找選定的標籤以(_W)"
 
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2747
 msgid "Create New Version?"
 msgid_plural "Create New Versions?"
 msgstr[0] "建立新版本?"
 
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2749
 #, csharp-format
 msgid ""
 "Before launching {1}, should F-Spot create a new version of the selected "
@@ -2582,272 +2090,159 @@ msgid_plural ""
 msgstr[0] ""
 "在啟動 {1} 之前,F-Spot 應該為所選相片建立新的版本以保留原始版本嗎?"
 
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2771
 msgid "XCF version"
 msgstr "XCF 版本"
 
-#: ../src/MetadataStore.cs:19
-msgid "Creator"
-msgstr "建立者"
-
-#: ../src/MetadataStore.cs:20
-msgid "Title"
-msgstr "標題"
-
-#: ../src/MetadataStore.cs:21
-msgid "Copyright"
-msgstr "版權"
-
-#: ../src/MetadataStore.cs:22
-msgid "Subject and Keywords"
-msgstr "主題與關鍵字"
-
-#: ../src/MetadataStore.cs:23
-msgid "Compression"
-msgstr "壓縮"
-
-#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
-#. "when Planar Configuration=1, this implies that all components must have
-#. the same BitsPerSample value; when Planar Configuration=2, different
-#. components could have different bit depths."
-#: ../src/MetadataStore.cs:29
-msgid "Planar Configuration"
-msgstr "平面設定"
-
-#: ../src/MetadataStore.cs:31
-msgid "Orientation"
-msgstr "方向"
-
-#: ../src/MetadataStore.cs:33
-msgid "Photometric Interpretation"
-msgstr "光度解譯"
-
-#: ../src/MetadataStore.cs:35
-msgid "Resolution Unit"
-msgstr "解析度單位"
-
-#: ../src/MetadataStore.cs:37
-msgid "Exposure Program"
-msgstr "曝光模式"
-
-#: ../src/MetadataStore.cs:39
-msgid "Metering Mode"
-msgstr "測量模式"
-
-#: ../src/MetadataStore.cs:41
-msgid "Exposure Mode"
-msgstr "曝光模式"
-
-#: ../src/MetadataStore.cs:43
-msgid "Custom Rendered"
-msgstr "自訂繪製"
-
-#: ../src/MetadataStore.cs:45
-msgid "Components Configuration"
-msgstr "元件設定"
-
-#: ../src/MetadataStore.cs:47
-msgid "Light Source"
-msgstr "光源"
-
-#: ../src/MetadataStore.cs:49
-msgid "Sensing Method"
-msgstr "感測方法"
-
-#: ../src/MetadataStore.cs:51
-msgid "Color Space"
-msgstr "色彩空間"
-
-#: ../src/MetadataStore.cs:53
-msgid "White Balance"
-msgstr "白平衡"
-
-#: ../src/MetadataStore.cs:55
-msgid "Focal Plane Resolution Unit"
-msgstr "對焦平面解析度單位"
-
-#: ../src/MetadataStore.cs:57
-msgid "File Source Type"
-msgstr "來源檔案類型"
-
-#: ../src/MetadataStore.cs:59
-msgid "Scene Capture Type"
-msgstr "情境捕捉類型"
-
-#. Translators: Gain Control is the label for the exif:GainControl tag
-#. "This tag indicates the degree of overall image gain adjustment."
-#: ../src/MetadataStore.cs:63
-msgid "Gain Control"
-msgstr "取得控制"
-
-#: ../src/MetadataStore.cs:65
-msgid "Contrast"
-msgstr "對比度"
-
-#: ../src/MetadataStore.cs:67
-msgid "Saturation"
-msgstr "飽和度"
-
-#: ../src/MetadataStore.cs:69
-msgid "Sharpness"
-msgstr "銳利"
-
-#: ../src/MetadataStore.cs:71
-msgid "Scene Type"
-msgstr "情境類型"
+#: ../src/PhotoStore.cs:165 ../src/ui/mail_dialog.ui.h:17
+msgid "Original"
+msgstr "原始版本"
 
 #. Fixme this should really set parent menu
 #. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
 msgid "(No Tags)"
 msgstr "(無標籤)"
 
-#: ../src/PhotoVersionCommands.cs:58
+#: ../src/PhotoVersionCommands.cs:59
 msgid "Create New Version"
 msgstr "建立新的版本"
 
-#: ../src/PhotoVersionCommands.cs:59
+#: ../src/PhotoVersionCommands.cs:60
 msgid "Name:"
 msgstr "名稱:"
 
-#: ../src/PhotoVersionCommands.cs:63
+#: ../src/PhotoVersionCommands.cs:64
 msgid "Rename Version"
 msgstr "重新命名版本"
 
-#: ../src/PhotoVersionCommands.cs:64
+#: ../src/PhotoVersionCommands.cs:65
 msgid "New name:"
 msgstr "新的名稱:"
 
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "無法建立新版本"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "收到異常 \"{0}\"。無法建立版本 \"{1}\""
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "真的要刪除?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "取消"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:125
 msgid "Delete"
 msgstr "刪除"
 
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:126
 #, csharp-format
 msgid "Really delete version \"{0}\"?"
-msgstr "真的要刪除版本 \"{0}\" ?"
+msgstr "真的要刪除「{0}」版本嗎?"
 
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "無法刪除版本"
+#: ../src/PhotoVersionCommands.cs:127
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "這會移除該版本並且從磁碟上刪除相對應的檔案。"
 
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:172
+msgid "De_tach"
+msgstr "分離(_T)"
+
+#: ../src/PhotoVersionCommands.cs:173
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "收到異常 \"{0}\"。無法刪除版本 \"{1}\""
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "真的要從「{1}」分離版本「{0}」嗎?"
+
+#: ../src/PhotoVersionCommands.cs:174
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"這會讓各版本相片在相片庫內顯現為獨立的相片。若要還原,請將新相片拖放回其母"
+"本。"
 
 #: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "無法將版本重新命名"
+msgid "Re_parent"
+msgstr "重定母本(_P)"
 
 #: ../src/PhotoVersionCommands.cs:197
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "收到異常 \"{0}\"。無法重新命名版本 \"{1}\""
-
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
-msgid "(No Edits)"
-msgstr "(無修改)"
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "真的要將「{2}」張相片重定母本為「{1}」的版本嗎 ?"
 
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "編輯相片時發生錯誤"
+#: ../src/PhotoVersionCommands.cs:200
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+"這會讓多張相片在相片庫內顯現為單一個。可以使用「相片」選單將眾版本分離。"
 
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
+#: ../src/PhotoVersionCommands.cs:240
 #, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "收到異常 \"{0}\"。無法儲存相片 {1}"
+msgid "Received exception \"{0}\"."
+msgstr "收到異常「{0}」。"
+
+#: ../src/PhotoVersionMenu.cs:54 ../src/Widgets/InfoBox.cs:470
+msgid "(No Edits)"
+msgstr "(無修改)"
 
-#: ../src/PhotoView.cs:357
-msgid "Comment:"
-msgstr "註解:"
+#: ../src/PhotoView.cs:336
+msgid "Description:"
+msgstr "描述:"
 
-#: ../src/Preferences.cs:152
+#: ../src/Preferences.cs:157
 msgid "Photos"
 msgstr "相片"
 
-#: ../src/PrintOperation.cs:32
+#: ../src/PrintOperation.cs:33
 msgid "Image Settings"
-msgstr "影像設定"
+msgstr "圖片設定"
 
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
 msgid "Find: "
 msgstr "尋找: "
 
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
 msgid "Untagged photos"
 msgstr "未標籤的相片"
 
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
 msgid "Rated photos"
 msgstr "已評分的相片"
 
 #. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
 msgid "Import roll"
 msgstr "匯入膠卷"
 
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
 msgid "Clear search"
 msgstr "清除搜尋"
 
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
 msgid "Refresh search"
 msgstr "更新搜尋"
 
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
 msgid "No matching photos found"
 msgstr "找不到符合的相片"
 
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "隱藏搜尋列(_F)"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "顯示搜尋列(_F)"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:74
 msgid "Unable to rotate this type of photo"
 msgstr "無法旋轉這種相片"
 
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:93
 msgid "Unable to rotate readonly file"
 msgstr "無法旋轉唯讀檔"
 
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:156
 msgid "Rotating photos"
 msgstr "正在旋轉相片"
 
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:167
 #, csharp-format
 msgid "Rotating photo \"{0}\""
-msgstr "正在旋轉圖片\"{0}\""
+msgstr "正在旋轉相片「{0}」"
 
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:180
 msgid "Directory not found"
 msgstr "找不到目錄"
 
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:182
+msgid "File not found"
+msgstr "找不到檔案"
+
+#: ../src/RotateCommand.cs:200
 #, csharp-format
 msgid "Unable to rotate photo"
 msgid_plural "Unable to rotate {0} photos"
@@ -2855,7 +2250,7 @@ msgstr[0] ""
 "無法旋轉這張相片\n"
 "無法旋轉這 {0} 張相片"
 
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:202
 #, csharp-format
 msgid ""
 "The photo could not be rotated because it is on a read only file system or "
@@ -2869,88 +2264,97 @@ msgstr[0] ""
 "無法旋轉這 {0} 張相片,因為它位於一個唯讀的檔案系統,例如光碟片。請檢查權限,"
 "然後再試一次。"
 
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:229
 #, csharp-format
 msgid "Received error \"{0}\" while attempting to rotate {1}"
-msgstr "試圖旋轉 {1} 時接收到錯誤 \"{0}\""
+msgstr "試圖旋轉 {1} 時接收到錯誤「{0}」"
 
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:234
 msgid "Error while rotating photo."
 msgstr "旋轉相片時發生錯誤。"
 
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:211
 msgid "Preparing email"
 msgstr "正在準備電子郵件"
 
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:255
 #, csharp-format
 msgid "Exporting picture \"{0}\""
-msgstr "正在匯出圖片\"{0}\""
+msgstr "正在匯出圖片「{0}」"
 
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:274
 msgid "Error processing image"
-msgstr "處理影像時錯誤"
+msgstr "處理圖片時錯誤"
 
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:275
 #, csharp-format
 msgid "An error occured while processing \"{0}\": {1}"
 msgstr "當處理「{0}」時發生錯誤:{1}"
 
 #. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:288
 msgid "My Photos"
 msgstr "我的相片"
 
-#: ../src/Sharpener.cs:72
+#: ../src/Sharpener.cs:73
 msgid "Error saving sharpened photo"
 msgstr "儲存銳化相片時發生錯誤"
 
-#: ../src/Sharpener.cs:102
+#: ../src/Sharpener.cs:74 ../src/UI.Dialog/EditExceptionDialog.cs:27
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "收到異常「{0}」。無法儲存相片 {1}"
+
+#: ../src/Sharpener.cs:103
 msgid "Sharpen"
 msgstr "銳化"
 
-#: ../src/Sharpener.cs:112
+#: ../src/Sharpener.cs:113
 msgid "Amount:"
 msgstr "數量:"
 
-#: ../src/Sharpener.cs:113
+#: ../src/Sharpener.cs:114
 msgid "Radius:"
 msgstr "半徑:"
 
-#: ../src/Sharpener.cs:114
+#: ../src/Sharpener.cs:115
 msgid "Threshold:"
 msgstr "門檻值:"
 
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:76
 msgid "Rotate photo left"
 msgstr "往左旋轉相片"
 
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:81
 msgid "Rotate photo right"
 msgstr "往右旋轉相片"
 
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:118
 msgid "Folder"
 msgstr "資料夾"
 
-#: ../src/SingleView.cs:341
+#: ../src/SingleView.cs:343
 msgid "Open"
 msgstr "開啟"
 
-#: ../src/SingleView.cs:428
+#: ../src/SingleView.cs:346
+msgid "Select Folder"
+msgstr "選擇資料夾"
+
+#: ../src/SingleView.cs:430
 msgid "Set as Background"
 msgstr "設為背景"
 
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:116 ../src/TagSelectionWidget.cs:492
+#: ../src/UI.Dialog/EditTagDialog.cs:76
 msgid "This name is already in use"
 msgstr "這個名稱已被使用"
 
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:166
 msgid "Create New Tag"
 msgstr "建立新標籤"
 
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:167
 msgid "Name of New Tag:"
 msgstr "新標籤名稱:"
 
@@ -2960,7 +2364,7 @@ msgid "Find"
 msgid_plural "Find"
 msgstr[0] "尋找"
 
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
 msgid "Create New Tag..."
 msgstr "建立新標籤..."
 
@@ -2990,12 +2394,12 @@ msgstr "合併標籤"
 #: ../src/TagQueryWidget.cs:34
 #, csharp-format
 msgid "Include Photos Tagged \"{0}\""
-msgstr "包含被標為 \"{0}\" 的相片"
+msgstr "包含被標為「{0}」的相片"
 
 #: ../src/TagQueryWidget.cs:39
 #, csharp-format
 msgid "Exclude Photos Tagged \"{0}\""
-msgstr "不包含被標為 \"{0}\" 的相片"
+msgstr "不包含被標為「{0}」的相片"
 
 #: ../src/TagQueryWidget.cs:44
 msgid "Remove From Search"
@@ -3011,41 +2415,41 @@ msgstr[0] "尋找以(_W)"
 msgid "All"
 msgstr "全部"
 
-#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:592
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
 #, csharp-format
 msgid "Not {0}"
 msgstr "非 {0}"
 
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
 msgid "Drag tags here to search for them"
 msgstr "拖曳標籤至此來為他們搜尋"
 
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:491
 msgid "Error renaming tag"
 msgstr "重新命名標籤時發生錯誤"
 
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:205
 msgid "Favorites"
 msgstr "最愛"
 
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:210
 msgid "Hidden"
 msgstr "隱藏"
 
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:218
 msgid "People"
 msgstr "人物"
 
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:223
 msgid "Places"
 msgstr "地方"
 
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:228
 msgid "Events"
 msgstr "事件"
 
 #. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:241 ../src/Widgets/InfoBox.cs:344
 msgid "(None)"
 msgstr "(無)"
 
@@ -3065,35 +2469,36 @@ msgstr " 或 "
 #. OPS The operators we support, case insensitive
 #. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
 #: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:533
 msgid "or"
 msgstr "或"
 
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
 msgid "Updating Thumbnails"
 msgstr "正在更新縮圖"
 
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
 #, csharp-format
 msgid "Updating picture \"{0}\""
-msgstr "正在上傳圖片 \"{0}\""
+msgstr "正在上傳圖片「{0}」"
 
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:99
 msgid "Photo management for GNOME"
 msgstr "GNOME 的相片管理"
 
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
-
 #: ../src/UI.Dialog/AboutDialog.cs:100
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
+
+#: ../src/UI.Dialog/AboutDialog.cs:124
 msgid "translator-credits"
 msgstr ""
-"GNOME 程式中文化郵件論壇\n"
-"community at linuxhall.org\n"
+"GNOME 專案中文化郵件論壇\n"
+"chinese-l10n at googlegroups.com\n"
 "\n"
-"Hialan Liu <hialan.liu at gmail.com>, 2007Stanley Wong <stanley18fan0k at yahoo."
-"com.hk>, 2005\n"
+"Stanley Wong <stanley18fan0k at yahoo.com.hk>, 2005\n"
+"Hialan Liu <hialan.liu at gmail.com>, 2007\n"
+"Cheng-Chia Tseng <pswo10680 at gmail.com>, 2010.\n"
 "\n"
 "Launchpad Contributions:\n"
 "  Accord Tsai https://launchpad.net/~accordtsai\n"
@@ -3105,62 +2510,66 @@ msgstr ""
 "  Tenki https://launchpad.net/~tenki-jih\n"
 "  nckuhuahua https://launchpad.net/~nckuhuahua"
 
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:129
 msgid "F-Spot Website"
 msgstr "F-Spot 網站"
 
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
 #: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
 #, csharp-format
 msgid "Shift all photos by {0}"
 msgstr "依 {0} 轉換所有相片"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:99
+#: ../src/UI.Dialog/DateRangeDialog.cs:90
 msgid "Today"
 msgstr "今天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:101
+#: ../src/UI.Dialog/DateRangeDialog.cs:92
 msgid "Yesterday"
 msgstr "昨天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:103
+#: ../src/UI.Dialog/DateRangeDialog.cs:94
 msgid "Last 7 days"
 msgstr "最近 7 天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:105
+#: ../src/UI.Dialog/DateRangeDialog.cs:96
 msgid "Last 30 days"
 msgstr "最近 30 天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:107
+#: ../src/UI.Dialog/DateRangeDialog.cs:98
 msgid "Last 90 days"
 msgstr "最近 90 天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:109
+#: ../src/UI.Dialog/DateRangeDialog.cs:100
 msgid "Last 360 days"
 msgstr "最近 360 天"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:111
+#: ../src/UI.Dialog/DateRangeDialog.cs:102
 msgid "Current Week (Mon-Sun)"
 msgstr "本週 (星期一~星期日)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:113
+#: ../src/UI.Dialog/DateRangeDialog.cs:104
 msgid "Previous Week (Mon-Sun)"
 msgstr "前一週 (星期一~星期日)"
 
-#: ../src/UI.Dialog/DateRangeDialog.cs:131
+#: ../src/UI.Dialog/DateRangeDialog.cs:122
 msgid "Customized Range"
 msgstr "自訂範圍"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:40
+msgid "Error editing photo"
+msgstr "編輯相片時發生錯誤"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:44
 #, csharp-format
 msgid "Edit Icon for Tag {0}"
 msgstr "修改標籤 {0} 的圖示"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:66
 msgid "Select Photo from file"
 msgstr "從檔案選擇相片"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:88
 #, csharp-format
 msgid ""
 "\n"
@@ -3177,16 +2586,16 @@ msgstr ""
 " 請將某相片加上「{0}」標籤,並返回這裡\n"
 " 以將它作為圖示使用。"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:166
 msgid "Unable to load image"
-msgstr "無法載入影像"
+msgstr "無法載入圖片"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:167
 #, csharp-format
 msgid "Unable to load \"{0}\" as icon for the tag"
 msgstr "無法讀取「{0}」作為標籤圖示"
 
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:205
 #, csharp-format
 msgid "Photo {0} of {1}"
 msgstr "{1}張相片中的第{0}張"
@@ -3203,24 +2612,66 @@ msgstr "錯誤細節"
 msgid "An unhandled exception was thrown: "
 msgstr "出現了預期外的錯誤: "
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "選擇資料夾..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:131
+msgid "Choose Import source..."
+msgstr "選擇匯入來源..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:143
+msgid "(No Cameras Detected)"
+msgstr "(偵測不到數位相機)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:178
+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 ""
+"勾選此選項將在相機成功完成匯入後,從相機移除所匯入的相片。\n"
+"\n"
+"一般建議在您從相機移除您的相片之前先將它們備份。<b>使用此選項請自負風險!</b>"
+
+#: ../src/UI.Dialog/ImportDialog.cs:179
+msgid "Warning"
+msgstr "警告"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "正在匯入相片:{0}/{1}..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:312
+msgid "Importing photos..."
+msgstr "正在匯入相片..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:319
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "正在搜尋相片... (您已經可以點擊「匯入」以繼續)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
+#: ../src/UI.Dialog/PreferenceDialog.cs:80
 msgid "None"
 msgstr "無"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:59
 msgid "System profile"
 msgstr "系統個人設定檔"
 
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:97
 msgid "Standard theme"
 msgstr "標準主題"
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
 msgid "Error loading database."
 msgstr "載入資料庫時發生錯誤。"
 
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:23
 #, csharp-format
 msgid ""
 "F-Spot encountered an error while loading the photo database. The old "
@@ -3229,15 +2680,15 @@ msgstr ""
 "當 F-Spot 載入相片資料庫時遭遇到錯誤。舊的資料庫已經被移至 {0},新的資料庫已"
 "經建立。"
 
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
 msgid "Label"
 msgstr "標籤"
 
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
 msgid "Ratio"
 msgstr "比例"
 
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
 msgid "Retry"
 msgstr "重試"
 
@@ -3285,6 +2736,24 @@ msgstr "差異:"
 msgid "min. Starting at {0}"
 msgstr "分。開始於 {0}"
 
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:1
+msgid "C_reate"
+msgstr "建立(_R)"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:2
+msgid "Create _icon for this tag when first used"
+msgstr "當第一次使用時為此標籤建立圖示(_I)"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "P_arent Tag:"
+msgstr "父標籤(_A):"
+
+#: ../src/UI.Dialog/ui/CreateTagDialog.ui.h:4
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Tag Name:"
+msgstr "標籤名稱(_T):"
+
 #: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
 msgid "<b>End Date</b>"
 msgstr "<b>結束日期</b>"
@@ -3310,18 +2779,14 @@ msgid "Set date range"
 msgstr "設定日期範圍"
 
 #: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
-msgid "<small></small>"
-msgstr "<small></small>"
-
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit Tag"
 msgstr "編輯標籤"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
 msgid "Edit icon"
 msgstr "編輯圖示"
 
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
 msgid "_Icon:"
 msgstr "圖示(_I):"
 
@@ -3351,11 +2816,44 @@ msgstr "編輯標籤圖示"
 
 #: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:7
 msgid "No _image"
-msgstr "沒有影像(_I)"
+msgstr "沒有圖片(_I)"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:1
+msgid "<b>View all pictures imported</b>"
+msgstr "<b>檢視匯入的所有圖片</b>"
 
-#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:8
-msgid "Photo 0 of 0"
-msgstr "0 張中的第 0 張相片"
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:2
+msgid "Display only those photos that were imported in specified Rolls."
+msgstr "只顯示那些被匯入指定膠卷內的相片。"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:3
+msgid "Filter on selected rolls"
+msgstr "所選膠卷的過濾條件"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:4
+msgid "Number of photos in selected rolls:"
+msgstr "所選膠卷內的相片數量:"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:5
+msgid "Show all photos."
+msgstr "顯示所有相片。"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:6
+msgid "after"
+msgstr "睌於"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:534
+msgid "and"
+msgstr "及"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:8
+msgid "at"
+msgstr "於"
+
+#: ../src/UI.Dialog/ui/LastImportRollFilterDialog.ui.h:9
+msgid "between"
+msgstr "介於"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:1
 msgid "Color profile for display:"
@@ -3378,22 +2876,30 @@ msgid ""
 "Inside the image files when possible\n"
 "<small>Makes them accessible to other image-editing programs.</small>"
 msgstr ""
-"如果可以的話放在影像檔內\n"
-"<small>讓其他影像編輯程式可以存取。</small>"
+"如果可以的話放在圖片檔內\n"
+"<small>讓其他圖片編輯程式可以存取。</small>"
 
 #: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:7
+msgid ""
+"Never modify image files.\n"
+"<small>Write XMP files next to the images instead.</small>"
+msgstr ""
+"永遠都不修改圖片檔案。\n"
+"<small>寫入圖片檔旁的 XMP 檔,而不是該圖片檔。</small>"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
 msgid "Select A Folder"
 msgstr "選擇資料夾"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:8
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
 msgid "Separately from the image files"
-msgstr "從影像檔分離"
+msgstr "從圖片檔分離"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:11
 msgid "Store tags and descriptions for photos:"
 msgstr "為這些相片儲存標籤與描述:"
 
-#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:12
 msgid "When importing photos, copy them to:"
 msgstr "當匯入相片時,將它們複製到:"
 
@@ -3409,6 +2915,133 @@ msgstr "<b>最低評分</b>"
 msgid "Set Rating Filter"
 msgstr "設定評分過濾器"
 
+#: ../src/UI.Dialog/ui/RepairDialog.ui.h:1
+msgid "Repair"
+msgstr "修復"
+
+#: ../src/ui/import.ui.h:1
+#, fuzzy
+#| msgid "Copy files to the Photos folder"
+msgid "C_opy files to the Photos folder"
+msgstr "複製檔案至相片資料夾"
+
+#: ../src/ui/import.ui.h:2
+#, fuzzy
+#| msgid "Include subfolders"
+msgid "I_nclude subfolders"
+msgstr "包括子目錄(_C)"
+
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:5
+#, fuzzy
+#| msgid "Import from:"
+msgid "Import _from:"
+msgstr "匯入自:"
+
+#: ../src/ui/import.ui.h:6
+#, fuzzy
+#| msgid "Attach tag:"
+msgid "_Attach tags:"
+msgstr "附加標籤:"
+
+#: ../src/ui/import.ui.h:7
+#, fuzzy
+#| msgid "Detect duplicates"
+msgid "_Detect duplicates"
+msgstr "偵測複本"
+
+#: ../src/ui/import.ui.h:8
+#, fuzzy
+#| msgid "Import"
+msgid "_Import"
+msgstr "匯入"
+
+#: ../src/ui/import.ui.h:9
+#, fuzzy
+#| msgid "Remove original files after import"
+msgid "_Remove original files after import"
+msgstr "在匯入後移除原始檔案"
+
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 px"
+
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 px"
+
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 px"
+
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 px"
+
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 px"
+
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>大小</b>"
+
+#: ../src/ui/mail_dialog.ui.h:8
+msgid "<b>Summary</b>"
+msgstr "<b>摘要</b>"
+
+#: ../src/ui/mail_dialog.ui.h:9
+msgid "Create Mail"
+msgstr "建立郵件"
+
+#: ../src/ui/mail_dialog.ui.h:10
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr "建立郵件並將所選相片 (可能會被縮放) 作為附件"
+
+#: ../src/ui/mail_dialog.ui.h:11
+msgid "Do not send a mail"
+msgstr "不要寄出郵件"
+
+#: ../src/ui/mail_dialog.ui.h:12
+msgid "Estimated new size"
+msgstr "估計新大小"
+
+#: ../src/ui/mail_dialog.ui.h:13
+msgid "Extra large"
+msgstr "非常大"
+
+#: ../src/ui/mail_dialog.ui.h:14
+msgid "Large"
+msgstr "大"
+
+#: ../src/ui/mail_dialog.ui.h:15
+msgid "Medium"
+msgstr "中"
+
+#: ../src/ui/mail_dialog.ui.h:16
+msgid "Number of pictures"
+msgstr "圖片數目:"
+
+#: ../src/ui/mail_dialog.ui.h:18
+msgid "Original size (possible very large file size)"
+msgstr "原始大小(檔案可能非常大)"
+
+#: ../src/ui/mail_dialog.ui.h:19
+msgid "Small"
+msgstr "小"
+
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Tiny"
+msgstr "極小"
+
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Total original size"
+msgstr "總計原始大小"
+
+#: ../src/ui/mail_dialog.ui.h:22
+msgid "_Create Mail"
+msgstr "建立郵件(_C)"
+
 #: ../src/ui/main_window.ui.h:1
 msgid "Adjust _Time..."
 msgstr "調整時間(_T)..."
@@ -3441,6 +3074,10 @@ msgstr "建立新標籤(_T)..."
 msgid "Create _New Version..."
 msgstr "建立新版本(_N)..."
 
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "分離版本(_T)"
+
 #: ../src/ui/main_window.ui.h:11
 msgid "Fin_d"
 msgstr "尋找(_D)"
@@ -3469,6 +3106,10 @@ msgstr "取消選擇(_N)"
 msgid "Send by _Mail..."
 msgstr "以郵件傳送(_M)..."
 
+#: ../src/ui/main_window.ui.h:21 ../src/ui/single_view.ui.h:3
+msgid "Set as _Background"
+msgstr "設定為背景(_B)"
+
 #: ../src/ui/main_window.ui.h:22
 msgid "Side_bar"
 msgstr "側邊列(_B)"
@@ -3489,6 +3130,26 @@ msgstr "工具列(_L)"
 msgid "View"
 msgstr "檢視"
 
+#: ../src/ui/main_window.ui.h:28 ../src/ui/single_view.ui.h:7
+msgid "Zoom _in"
+msgstr "拉近(_I)"
+
+#: ../src/ui/main_window.ui.h:29 ../src/ui/single_view.ui.h:8
+msgid "Zoom _out"
+msgstr "拉遠(_O)"
+
+#: ../src/ui/main_window.ui.h:30 ../src/ui/single_view.ui.h:9
+msgid "Zoom in"
+msgstr "拉近"
+
+#: ../src/ui/main_window.ui.h:31 ../src/ui/single_view.ui.h:10
+msgid "Zoom out"
+msgstr "拉遠"
+
+#: ../src/ui/main_window.ui.h:32
+msgid "_Attach Tag"
+msgstr "附加標籤(_A)"
+
 #: ../src/ui/main_window.ui.h:33
 msgid "_Attach Tag to Selection"
 msgstr "將選取項目附上標籤(_A)"
@@ -3521,6 +3182,10 @@ msgstr "刪除選定的標籤(_D)"
 msgid "_Delete Version"
 msgstr "刪除版本(_D)"
 
+#: ../src/ui/main_window.ui.h:44 ../src/ui/single_view.ui.h:11
+msgid "_Edit"
+msgstr "編輯(_E)"
+
 #: ../src/ui/main_window.ui.h:45
 msgid "_Edit Tag..."
 msgstr "編輯標籤(_E)..."
@@ -3533,6 +3198,14 @@ msgstr "匯出至(_E)"
 msgid "_Filmstrip"
 msgstr "幻燈片帶(_F)"
 
+#: ../src/ui/main_window.ui.h:48 ../src/ui/single_view.ui.h:13
+msgid "_Fullscreen"
+msgstr "全螢幕(_F)"
+
+#: ../src/ui/main_window.ui.h:49 ../src/ui/single_view.ui.h:14
+msgid "_Help"
+msgstr "求助(_H)"
+
 #: ../src/ui/main_window.ui.h:50
 msgid "_Hidden"
 msgstr "隱藏(_H)"
@@ -3542,100 +3215,183 @@ msgid "_Import..."
 msgstr "匯入(_I)..."
 
 #: ../src/ui/main_window.ui.h:52
+msgid "_Invert Selection"
+msgstr "反轉選取(_I)"
+
+#: ../src/ui/main_window.ui.h:53
 msgid "_Large"
 msgstr "大(_L)"
 
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:54
 msgid "_Last Import Roll"
 msgstr "最近匯入膠卷(_L)"
 
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:55
 msgid "_Loupe"
 msgstr "放大鏡(_L)"
 
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:56
 msgid "_Medium"
 msgstr "中(_M)"
 
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:57 ../src/ui/single_view.ui.h:15
+msgid "_Photo"
+msgstr "相片(_P)"
+
+#: ../src/ui/main_window.ui.h:58
 msgid "_Quit"
 msgstr "離開(_Q)"
 
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:59
 msgid "_Ratings"
 msgstr "評分(_R)"
 
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:61
 msgid "_Remove Tag From Selection"
 msgstr "從選取項目中移附標籤(_R)"
 
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:62
 msgid "_Rename Version"
 msgstr "重新命名版本(_R)"
 
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:63
 msgid "_Reverse Order"
 msgstr "順序反轉(_R)"
 
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:64
 msgid "_Select Import Rolls..."
 msgstr "選擇匯入膠卷(_S)..."
 
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:65
 msgid "_Set Date Range..."
 msgstr "設定日期範圍(_S)..."
 
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:66
 msgid "_Set Rating filter..."
 msgstr "設定評分過濾器(_S)..."
 
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:67
 msgid "_Sharpen..."
 msgstr "銳化(_S)..."
 
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:68 ../src/ui/single_view.ui.h:16
+msgid "_Slideshow"
+msgstr "幻燈片(_8)"
+
+#: ../src/ui/main_window.ui.h:69
 msgid "_Small"
 msgstr "小(_S)"
 
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:70
 msgid "_Tag Icons"
 msgstr "標籤圖示(_T)"
 
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:71
 msgid "_Tags"
 msgstr "標籤(_T)"
 
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:72
 msgid "_Timeline"
 msgstr "時間軸(_T)"
 
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:73
 msgid "_Tools"
 msgstr "工具(_T)"
 
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:74
 msgid "_Untagged Photos"
 msgstr "未標籤的相片(_U)"
 
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:75
 msgid "_Version"
 msgstr "版本(_V)"
 
-#: ../src/Updater.cs:622
+#: ../src/ui/main_window.ui.h:76 ../src/ui/single_view.ui.h:18
+msgid "_View"
+msgstr "檢視(_V)"
+
+#: ../src/ui/single_view.ui.h:1
+msgid "Display File _Names"
+msgstr "顯示檔案名稱(_N)"
+
+#: ../src/ui/single_view.ui.h:2
+msgid "F-Spot View"
+msgstr "F-Spot 檢視"
+
+#: ../src/ui/single_view.ui.h:4
+msgid "Show or hide the side pane"
+msgstr "顯示或隱藏側面的長方格"
+
+#: ../src/ui/single_view.ui.h:5
+msgid "Show or hide the toolbar"
+msgstr "顯示或隱藏工具列"
+
+#: ../src/ui/single_view.ui.h:6
+msgid "Side _pane"
+msgstr "側面的長方格(_P)"
+
+#: ../src/ui/single_view.ui.h:17
+msgid "_Toolbar"
+msgstr "工具列(_T)"
+
+#: ../src/ui/viewer_preferences.ui.h:1
+msgid "<b>Image Interpolation</b>"
+msgstr "<b>圖片插補</b>"
+
+#: ../src/ui/viewer_preferences.ui.h:2
+msgid "<b>Transparent Parts</b>"
+msgstr "<b>透明部份</b>"
+
+#: ../src/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>啟用此選項來允許針對拉近拉遠的圖片進行插補處理。您不應該停用此選項"
+"以檢視相片,但是停用插補處理可能對於圖示設定很有用處。</i></small>"
+
+#: ../src/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>您可以選擇要如何顯示圖片內的透明部份。此選項對相片不會造成任何影"
+"響,但是當檢視含有透明部份的圖示或是其他美工時,將此設為格子花紋或是自訂色彩"
+"應該很有用。</i></small>"
+
+#: ../src/ui/viewer_preferences.ui.h:5
+msgid "As _background"
+msgstr "設為背景(_B)"
+
+#: ../src/ui/viewer_preferences.ui.h:6
+msgid "As _custom color: "
+msgstr "設為自訂色彩(_C): "
+
+#: ../src/ui/viewer_preferences.ui.h:7
+msgid "As check _pattern"
+msgstr "設為格子花紋(_P)"
+
+#: ../src/ui/viewer_preferences.ui.h:8
+msgid "Preferences"
+msgstr "偏好設定"
+
+#: ../src/ui/viewer_preferences.ui.h:9
+msgid "_Interpolate image on zoom"
+msgstr "拉近或拉遠圖片時對圖片進行插補(_I)"
+
+#: ../src/Updater.cs:727
 msgid "Updating F-Spot Database"
 msgstr "正在更新 F-Spot 資料庫"
 
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:728
 msgid ""
 "Please wait while your F-Spot gallery's database is updated. This may take "
 "some time."
 msgstr "您的 F-Spot 圖庫資料庫正在更新,請稍後。這或許會需要一些時間。"
 
-#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
-msgid "Unable to create temporary file"
-msgstr "無法建立暫存檔"
-
 #: ../src/Widgets/CustomPrintWidget.cs:119
 msgid "Page Setup"
 msgstr "頁面設定"
@@ -3653,7 +3409,7 @@ msgstr "設定頁面大小與方向"
 
 #: ../src/Widgets/CustomPrintWidget.cs:141
 msgid "Photos per page"
-msgstr "每頁照片張數"
+msgstr "每頁相片張數"
 
 #: ../src/Widgets/CustomPrintWidget.cs:151
 msgid "Repeat"
@@ -3716,37 +3472,37 @@ msgstr "列印相片標籤"
 msgid "Print photo comment"
 msgstr "列印相片註解"
 
-#: ../src/Widgets/EditorPage.cs:30 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:32 ../src/Widgets/Sidebar.cs:54
 msgid "Edit"
 msgstr "編輯"
 
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:200
 msgid ""
 "This tool requires an active selection. Please select a region of the photo "
 "and try the operation again"
-msgstr "此工具需要作用中的選取項目。請選取一個圖片的區域,或是重試操作"
+msgstr "此工具需要作用中的選取項目。請選取相片的一塊區域,或是重試操作"
 
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:218
 msgid "Error saving adjusted photo"
 msgid_plural "Error saving adjusted photos"
 msgstr[0] "儲存調整過的相片時發生錯誤"
 
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:220
 #, csharp-format
 msgid ""
 "Received exception \"{0}\". Note that you have to develop RAW files into "
 "JPEG before you can edit them."
 msgstr "接收到例外「{0}」。請注意您在編輯它們之前必須先將 RAW 檔轉換為 JPEG。"
 
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:470
 msgid "_Horizontal"
 msgstr "水平(_H)"
 
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:474
 msgid "_Vertical"
 msgstr "垂直(_V)"
 
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
 msgid "Find:"
 msgstr "尋找:"
 
@@ -3754,7 +3510,7 @@ msgstr "尋找:"
 msgid "Folders"
 msgstr "資料夾"
 
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
 msgid "Filesystem"
 msgstr "檔案系統"
 
@@ -3762,6 +3518,10 @@ msgstr "檔案系統"
 msgid "Histogram"
 msgstr "長條圖"
 
+#: ../src/Widgets/InfoBox.cs:201
+msgid "Image Information"
+msgstr "圖片資訊"
+
 #: ../src/Widgets/InfoBox.cs:215
 msgid "Version"
 msgstr "版本"
@@ -3778,6 +3538,10 @@ msgstr "曝光"
 msgid "Focal Length"
 msgstr "焦距"
 
+#: ../src/Widgets/InfoBox.cs:231
+msgid "Camera"
+msgstr "數位相機"
+
 #: ../src/Widgets/InfoBox.cs:234
 msgid "File Size"
 msgstr "檔案大小"
@@ -3786,33 +3550,32 @@ msgstr "檔案大小"
 msgid "Rating"
 msgstr "評等"
 
-#: ../src/Widgets/InfoBox.cs:390 ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:327
 msgid "(wrong format)"
 msgstr "(錯誤的格式)"
 
-#: ../src/Widgets/InfoBox.cs:418 ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451 ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:353 ../src/Widgets/InfoBox.cs:364
+#: ../src/Widgets/InfoBox.cs:374
 msgid "(Unknown)"
 msgstr "(未知)"
 
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:474
 #, csharp-format
 msgid "(One Edit)"
 msgid_plural "({0} Edits)"
 msgstr[0] "(編輯 {0} 次)"
 
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:484
 msgid "(File read error)"
 msgstr "(檔案讀取錯誤)"
 
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:529
 #, csharp-format
 msgid "{0} Photos"
 msgstr "{0} 張相片"
 
 #. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:549
 #, csharp-format
 msgid ""
 "On {0} between \n"
@@ -3821,7 +3584,7 @@ msgstr ""
 "於 {0} 介於 \n"
 "{1} 與 {2}"
 
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:554
 #, csharp-format
 msgid ""
 "Between {0} \n"
@@ -3830,35 +3593,35 @@ msgstr ""
 "介於 {0} \n"
 "以及 {1}"
 
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:581
 msgid "(At least one File not found)"
 msgstr "(至少有一個檔案找不到)"
 
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:698
 msgid "Show Photo Name"
 msgstr "顯示相片名稱"
 
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:707
 msgid "Show Date"
 msgstr "顯示日期"
 
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:716
 msgid "Show Size"
 msgstr "顯示大小"
 
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:725
 msgid "Show Exposure"
 msgstr "顯示曝光"
 
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:734
 msgid "Show Focal Length"
 msgstr "顯示焦距"
 
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:743
 msgid "Show Camera"
 msgstr "顯示相機"
 
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:752
 msgid "Show File Size"
 msgstr "顯示檔案大小"
 
@@ -3870,45 +3633,27 @@ msgstr "中介資料"
 msgid "Extended Metadata"
 msgstr "擴展的中介資料"
 
-#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:394
-msgid "No Extended Metadata Available"
-msgstr "無可用的擴展式中介資料"
-
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:359
 msgid "No active photo"
 msgstr "沒有活動中的相片"
 
-#: ../src/Widgets/MetadataDisplay.cs:414
+#: ../src/Widgets/MetadataDisplay.cs:361
 #, csharp-format
 msgid "The photo \"{0}\" does not exist"
-msgstr "相片 \"{0}\" 並不存在"
+msgstr "相片「{0}」並不存在"
 
-#: ../src/Widgets/MetadataDisplay.cs:417
+#: ../src/Widgets/MetadataDisplay.cs:363
 msgid "No metadata available"
 msgstr "無可用的中介資料"
 
-#: ../src/Widgets/OpenWithMenu.cs:71
+#: ../src/Widgets/OpenWithMenu.cs:72
 msgid "No applications available"
 msgstr "無可用的應用程式"
 
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
 msgid "Rating:"
 msgstr "評分:"
 
-#: ../src/XmpTagsImporter.cs:91
-msgid "Country"
-msgstr "國家"
-
-#: ../src/XmpTagsImporter.cs:92
-msgid "City"
-msgstr "城市"
-
-#: ../src/XmpTagsImporter.cs:93
-msgid "State"
-msgstr "州"
-
-#. namespace
 #: ../tools/f-spot-screensaver.desktop.in.h:1
 msgid "Display a slideshow from F-Spot"
 msgstr "從 F-Spot 播放幻燈片"
@@ -3917,6 +3662,426 @@ msgstr "從 F-Spot 播放幻燈片"
 msgid "F-Spot photos"
 msgstr "F-Spot 相片"
 
+#~ msgid "Attach Tags:"
+#~ msgstr "附加標籤:"
+
+#~ msgid "Autorotate"
+#~ msgstr "自動旋轉"
+
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "錯誤:傳輸時發生錯誤;正在中止"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "錯誤:檔案已存在;正在中止"
+
+#~ msgid "\n"
+#~ msgstr "\n"
+
+#~ msgid "_Autorotate"
+#~ msgstr "自動旋轉(_A)"
+
+#~ msgid "<b>{0}</b>."
+#~ msgstr "<b>{0}</b>。"
+
+#~ msgid "Unknown transform type %d"
+#~ msgstr "未知的轉換類型 %d"
+
+#~ msgid "Operation failed"
+#~ msgstr "操作失敗"
+
+#~ msgid "Preview"
+#~ msgstr "預覽"
+
+#~ msgid "File"
+#~ msgstr "檔案"
+
+#~ msgid "Select Tag"
+#~ msgstr "選取標籤"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "正在下載預覽"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "正在下載 {0} 的預覽"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "正在複製 {1} 之 {0}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "傳輸檔案時發生錯誤"
+
+#~ msgid "Download Complete"
+#~ msgstr "下載完畢"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "複製檔案完成"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "從數位相機傳輸 \"{0}\""
+
+#~ msgid "Port"
+#~ msgstr "連接埠"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "重定母本 ({0})"
+
+#~ msgid "Import error"
+#~ msgstr "匯入發生錯誤"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "匯入 {0}{2}{2}{1} 時發生錯誤"
+
+#~ msgid "No way to save files of type \"{0}\""
+#~ msgstr "無法儲存 \"{0}\" 類型的檔案"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "電子郵件(_M):"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "匯出標題和註解(_X)"
+
+#~ msgid "G_allery:"
+#~ msgstr "G_allery:"
+
+#~ msgid "Gallery"
+#~ msgstr "圖庫"
+
+#~ msgid "Pause"
+#~ msgstr "暫停"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "選擇要從數位相機複製的相片..."
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "請選擇您要傳輸檔案的數位相機"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "選擇的相機: "
+
+#~ msgid ""
+#~ "Specify if an original size picture should be rotated or not. Smaller "
+#~ "sizes are automatically rotated."
+#~ msgstr "指定原始大小的圖片是否該被旋轉。大小較小的會被自動旋轉。"
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "除去圖片的中介資料(_M)"
+
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Gallery"
+
+#~ msgid "_New Window"
+#~ msgstr "新視窗(_N)"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "完成上傳後在瀏覽器中開啟圖庫(_O)"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "完成匯出後開啟目的地(_O)"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "相片縮放不能超過(_S):"
+
+#~ msgid "_Strip metadata"
+#~ msgstr "除去中介資料(_S)"
+
+#~ msgid "_URI:"
+#~ msgstr "_URI:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "虛擬檔案系統(_V)"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Image Directory"
+#~ msgstr "圖片目錄"
+
+#~ msgid "Thumbnail Directory"
+#~ msgstr "縮圖目錄"
+
+#~ msgid "Exif Directory"
+#~ msgstr "Exif 目錄"
+
+#~ msgid "GPS Directory"
+#~ msgstr "GPS 目錄"
+
+#~ msgid "InterOperability Directory"
+#~ msgstr "互通目錄"
+
+#~ msgid "Unknown Directory"
+#~ msgstr "未知目錄"
+
+#~ msgid "Writing to this file format is not supported"
+#~ msgstr "不支援寫入此檔案格式"
+
+#~ msgid "IPTC Information Interchange Model (IIM) Version number"
+#~ msgstr "IPTC Information Interchange Model (IIM) 版本號碼"
+
+#~ msgid "OSI Destination routing information"
+#~ msgstr "OSI 目標路由資訊"
+
+#~ msgid "IPTC file format"
+#~ msgstr "IPTC 檔案格式"
+
+#~ msgid "Identifies the provider and product"
+#~ msgstr "識別供應商與產品"
+
+#~ msgid "A unique number identifying the envelope"
+#~ msgstr "用來辨別信封的唯一編號"
+
+#~ msgid "A unique number"
+#~ msgstr "一個獨特的號碼"
+
+#~ msgid ""
+#~ "The envelope handling priority between 1 (most urgent) and 9 (least "
+#~ "urgent)"
+#~ msgstr "信封處理優先序介於 1 (最緊急) 與 9 (最不緊急) 之間"
+
+#~ msgid "The year, month and day (CCYYMMDD) the service sent the material"
+#~ msgstr "附註年月日 (CCYYMMDD) 的服務"
+
+#~ msgid "The hour, minute and second (HHMMSS) the service sent the material"
+#~ msgstr "這個服務送出該資料的時間,以時、分與秒標記 (HHMMSS)"
+
+#~ msgid "The character set designation"
+#~ msgstr "設定的字元編碼"
+
+#~ msgid "External globally unique object identifier"
+#~ msgstr "外部全域獨立物件識別碼"
+
+#~ msgid "Abstract Relationship Method (ARM) identifier"
+#~ msgstr "抽象關聯模式 (ARM) 識別碼"
+
+#~ msgid "Abstract Relationship Method (ARM) version number."
+#~ msgstr "抽象關係方法 (ARM) 版本編號。"
+
+#~ msgid "Number identifying the IIM version this application record uses"
+#~ msgstr "作為辨識此應用程式紀錄所使用的 IIM 版本之用的編號"
+
+#~ msgid "Object type reference"
+#~ msgstr "物件型態參考"
+
+#~ msgid "Object attribute reference"
+#~ msgstr "物件屬性參考"
+
+#~ msgid "Object name"
+#~ msgstr "物件名稱"
+
+#~ msgid "Status of the objectdata according to the provider"
+#~ msgstr "根據供應商物件資料提供的狀態"
+
+#~ msgid "Location within a city or area where the object originates"
+#~ msgstr "該物件起源自何城市或區域"
+
+#~ msgid "Name of the city the content is focussing on"
+#~ msgstr "內容所聚焦的城市其名稱"
+
+#~ msgid "Copyright information for"
+#~ msgstr "其版權資訊"
+
+#~ msgid "Full name of the country of the focus of the content"
+#~ msgstr "內容所聚焦的地區其全名"
+
+#~ msgid ""
+#~ "Two or three letter ISO3166 code of the country of the focus of the "
+#~ "content"
+#~ msgstr "內容所聚焦的地區其 ISO3166 代碼,由 2-3 個字母組成"
+
+#~ msgid "Creator of the content"
+#~ msgstr "內容建立者"
+
+#~ msgid "Provider of the object"
+#~ msgstr "物件提供者"
+
+#~ msgid "The title of the author or creator"
+#~ msgstr "作者或建立者的標題"
+
+#~ msgid ""
+#~ "The person involved in writing, editing or correcting the object data or "
+#~ "caption/abstract"
+#~ msgstr "這個人參與過寫作、編輯、或是校正這個物件資料或是相片說明/摘要"
+
+#~ msgid "Headline of the content"
+#~ msgstr "內容的標題"
+
+#~ msgid ""
+#~ "Instructions from the creator to the receiver not covered by other fields"
+#~ msgstr "來自建立者給予接收者的指示,沒有被其他領域涵蓋"
+
+#~ msgid "Intellectual genre of the object"
+#~ msgstr "物件的智慧類型"
+
+#~ msgid "Unknown IIM DataSet"
+#~ msgstr "不明的 IIM DataSet"
+
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "正在載入 {1} 之 {0}"
+
+#~ msgid "Done Loading"
+#~ msgstr "完成載入"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "目錄不存在。"
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist.  Please choose a "
+#~ "different directory"
+#~ msgstr "您選擇的目錄 \"{0}\" 不存在。請選擇另外的目錄"
+
+#~ msgid "No cameras detected."
+#~ msgstr "偵測不到數位相機。"
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system.  Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "F-Spot 無法找到任何連接到系統的數位相機。請再次確定它已連接並且電源已開"
+#~ "啟。"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "連接數位相機時發生錯誤"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "連接數位相機時收到錯誤 \"{0}\""
+
+#~ msgid "Creator"
+#~ msgstr "建立者"
+
+#~ msgid "Title"
+#~ msgstr "標題"
+
+#~ msgid "Copyright"
+#~ msgstr "版權"
+
+#~ msgid "Subject and Keywords"
+#~ msgstr "主題與關鍵字"
+
+#~ msgid "Compression"
+#~ msgstr "壓縮"
+
+#~ msgid "Planar Configuration"
+#~ msgstr "平面設定"
+
+#~ msgid "Orientation"
+#~ msgstr "方向"
+
+#~ msgid "Photometric Interpretation"
+#~ msgstr "光度解譯"
+
+#~ msgid "Resolution Unit"
+#~ msgstr "解析度單位"
+
+#~ msgid "Exposure Program"
+#~ msgstr "曝光模式"
+
+#~ msgid "Metering Mode"
+#~ msgstr "測量模式"
+
+#~ msgid "Exposure Mode"
+#~ msgstr "曝光模式"
+
+#~ msgid "Custom Rendered"
+#~ msgstr "自訂繪製"
+
+#~ msgid "Components Configuration"
+#~ msgstr "元件設定"
+
+#~ msgid "Light Source"
+#~ msgstr "光源"
+
+#~ msgid "Sensing Method"
+#~ msgstr "感測方法"
+
+#~ msgid "Color Space"
+#~ msgstr "色彩空間"
+
+#~ msgid "White Balance"
+#~ msgstr "白平衡"
+
+#~ msgid "Focal Plane Resolution Unit"
+#~ msgstr "對焦平面解析度單位"
+
+#~ msgid "File Source Type"
+#~ msgstr "來源檔案類型"
+
+#~ msgid "Scene Capture Type"
+#~ msgstr "情境捕捉類型"
+
+#~ msgid "Gain Control"
+#~ msgstr "取得控制"
+
+#~ msgid "Contrast"
+#~ msgstr "對比度"
+
+#~ msgid "Saturation"
+#~ msgstr "飽和度"
+
+#~ msgid "Sharpness"
+#~ msgstr "銳利"
+
+#~ msgid "Scene Type"
+#~ msgstr "情境類型"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "無法建立新版本"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "收到異常 \"{0}\"。無法建立版本 \"{1}\""
+
+#~ msgid "Really Delete?"
+#~ msgstr "真的要刪除?"
+
+#~ msgid "Cancel"
+#~ msgstr "取消"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "無法刪除版本"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "收到異常 \"{0}\"。無法刪除版本 \"{1}\""
+
+#~ msgid "Could not rename a version"
+#~ msgstr "無法將版本重新命名"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr "收到異常 \"{0}\"。無法重新命名版本 \"{1}\""
+
+#~ msgid "Comment:"
+#~ msgstr "註解:"
+
+#~ msgid "<small></small>"
+#~ msgstr "<small></small>"
+
+#~ msgid "Photo 0 of 0"
+#~ msgstr "0 張中的第 0 張相片"
+
+#~ msgid "Unable to create temporary file"
+#~ msgstr "無法建立暫存檔"
+
+#~ msgid "No Extended Metadata Available"
+#~ msgstr "無可用的擴展式中介資料"
+
+#~ msgid "Country"
+#~ msgstr "國家"
+
+#~ msgid "City"
+#~ msgstr "城市"
+
+#~ msgid "State"
+#~ msgstr "州"
+
 #~ msgid "Package"
 #~ msgstr "套件"
 
@@ -4125,7 +4290,7 @@ msgstr "F-Spot 相片"
 #~ "{0}\n"
 #~ "before closing?"
 #~ msgstr[0] ""
-#~ "在關閉之前要儲存變更到影像:\n"
+#~ "在關閉之前要儲存變更到圖片:\n"
 #~ "{0}\n"
 #~ "嗎?"
 
@@ -4135,7 +4300,7 @@ msgstr "F-Spot 相片"
 #~ msgid_plural ""
 #~ "If you don't save, the changes you have made to these images will be "
 #~ "permanently lost"
-#~ msgstr[0] "如果您不儲存,您對這些影像所做出的變更將會永久喪失"
+#~ msgstr[0] "如果您不儲存,您對這些圖片所做出的變更將會永久喪失"
 
 #~ msgid "Discard changes"
 #~ msgstr "捨棄變更"
@@ -4148,7 +4313,7 @@ msgstr "F-Spot 相片"
 #~ msgstr[0] "儲存所有"
 
 #~ msgid "Copy Locat_ion"
-#~ msgstr "複製影像位置(_I)"
+#~ msgstr "複製圖片位置(_I)"
 
 #~ msgid "_Edit Selected Tag..."
 #~ msgstr "編輯選定的標籤(_E)..."
diff --git a/src/Accelerometer.cs b/src/Accelerometer.cs
deleted file mode 100644
index f7148ea..0000000
--- a/src/Accelerometer.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-//
-// Support for the ThinkPad accelerometer.
-//
-
-using System;
-using System.IO;
-
-using FSpot.Utils;
-using Hyena;
-using TagLib.Image;
-
-namespace FSpot {
-
-	public class Accelerometer {
-		public const string SYSFS_FILE = "/sys/devices/platform/hdaps/position";
-
-		public static event EventHandler OrientationChanged;
-
-		public enum Orient {
-			Normal,
-			TiltClockwise,
-			TiltCounterclockwise,
-		}
-
-		private static Orient current_orientation;
-
-		public static Orient CurrentOrientation {
-			get {
-				return current_orientation;
-			}
-		}
-
-		public Accelerometer ()
-		{
-		}
-
-		public static ImageOrientation GetViewOrientation (ImageOrientation po)
-		{
-			if (timer == 0 && available)
-				SetupAccelerometer ();
-				
-			if (current_orientation == Orient.TiltCounterclockwise)
-				return FSpot.Utils.PixbufUtils.Rotate90 (po);
-
-			if (current_orientation == Orient.TiltClockwise)
-				return FSpot.Utils.PixbufUtils.Rotate270 (po);
-
-			return po;
-		}
-		
-		static uint timer = 0;
-		static bool available = true;
-
-		public static void SetupAccelerometer ()
-		{
-			if (!System.IO.File.Exists (SYSFS_FILE)) {
-				available = false;
-				return;
-			}
-
-			int x, y;
-
-			// Call once to set a baseline value.
-			// Hopefully the laptop is flat when this is
-			// called.
-			GetHDAPSCoords (out x, out y);
-
-			timer = GLib.Timeout.Add (500, new GLib.TimeoutHandler (CheckOrientation));
-		}
-
-		private static bool CheckOrientation ()
-		{
-			Orient new_orient = GetScreenOrientation ();
-
-			if (new_orient != current_orientation) {
-				current_orientation = new_orient;
-
-				EventHandler eh = OrientationChanged;
-				if (eh != null)
-					eh (null, EventArgs.Empty);
-
-				Log.Debug ("Laptop orientation changed...");
-			}
-
-			return true;
-		}
-
-		public static Orient GetScreenOrientation ()
-		{
-			int x, y;
-
-			GetHDAPSCoords (out x, out y);
-
-			if (x > 40)
-				return Orient.TiltClockwise;
-
-			if (x < -40)
-				return Orient.TiltCounterclockwise;
-
-			return Orient.Normal;
-		}
-
-		static int base_x = -1000; // initial nonsense values
-		static int base_y = -1000;
-
-		private static void GetHDAPSCoords (out int x, out int y)
-		{
-			try {
-				using (Stream file = System.IO.File.OpenRead (SYSFS_FILE)) {
-					StreamReader sr = new StreamReader (file);
-
-					string s = sr.ReadLine ();
-					string [] ss = s.Substring (1, s.Length - 2).Split (',');
-					x = int.Parse (ss [0]);
-					y = int.Parse (ss [1]);
-
-					if (base_x == -1000)
-						base_x = x;
-					
-					if (base_y == -1000)
-						base_y = y;
-
-					x -= base_x;
-					y -= base_y;
-
-					return;
-				}
-			} catch (IOException) {
-				x = 0;
-				y = 0;
-			}
-		}
-	}
-}
diff --git a/src/AssemblyInfo.cs b/src/AssemblyInfo.cs
index f672c8a..2e0b951 100644
--- a/src/AssemblyInfo.cs
+++ b/src/AssemblyInfo.cs
@@ -1,16 +1,64 @@
-/*
- * AssemblyInfo.cs
- *
- * Authors
- *   Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
+using System;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 
-[assembly: AssemblyVersion("0.7.1")]
+[assembly: ApplicationVersion ("0.7.2", "0.7.2")]
+[assembly: ApplicationBuildInformation ("git-checkout", "linux-gnu", "x86_64", "2010-08-10 13:36:15 CEST")]
+
+[assembly: AssemblyVersion ("0.7.0.0")]
 [assembly: AssemblyTitle ("F-Spot")]
-[assembly: AssemblyCopyright ("(c)2003-2008, Novell Inc")]
 [assembly: AssemblyDescription ("Personal photo management for the GNOME Desktop")]
+[assembly: AssemblyCopyright ("Copyright (C) 2003-2010 Novell Inc. and others")]
+[assembly: AssemblyCompany ("Novell, Inc.")]
+
+[AttributeUsage (AttributeTargets.Assembly, Inherited = false)]
+internal sealed class ApplicationVersionAttribute : Attribute
+{
+    private string release_version;
+    public string ReleaseVersion {
+        get { return release_version; }
+    }
+
+    private string display_version;
+    public string DisplayVersion {
+        get { return display_version; }
+    }
+
+    public ApplicationVersionAttribute (string releaseVersion, string displayVersion)
+    {
+        release_version = releaseVersion;
+        display_version = displayVersion;
+    }
+}
+
+[AttributeUsage (AttributeTargets.Assembly, Inherited = false)]
+internal sealed class ApplicationBuildInformationAttribute : Attribute
+{
+    private string vendor;
+    public string Vendor {
+        get { return vendor; }
+    }
+
+    private string host_os;
+    public string HostOperatingSystem {
+        get { return host_os; }
+    }
+
+    private string host_cpu;
+    public string HostCpu {
+        get { return host_cpu; }
+    }
+
+    private string build_time;
+    public string BuildTime {
+        get { return build_time; }
+    }
+
+    public ApplicationBuildInformationAttribute (string vendor, string hostOs, string hostCpu, string time)
+    {
+        this.vendor = vendor;
+        this.host_os = hostOs;
+        this.host_cpu = hostCpu;
+        this.build_time = time;
+    }
+}
diff --git a/src/AssemblyInfo.cs.in b/src/AssemblyInfo.cs.in
index 6ce23d3..a64ead6 100644
--- a/src/AssemblyInfo.cs.in
+++ b/src/AssemblyInfo.cs.in
@@ -1,16 +1,64 @@
-/*
- * AssemblyInfo.cs
- *
- * Authors
- *   Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
+using System;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 
-[assembly: AssemblyVersion("@VERSION@")]
+[assembly: ApplicationVersion ("@VERSION@", "@DISPLAY_VERSION@")]
+[assembly: ApplicationBuildInformation ("@BUILD_VENDOR_ID@", "@BUILD_HOST_OS@", "@BUILD_HOST_CPU@", "@BUILD_TIME@")]
+
+[assembly: AssemblyVersion ("@ASM_VERSION@")]
 [assembly: AssemblyTitle ("F-Spot")]
-[assembly: AssemblyCopyright ("(c)2003-2008, Novell Inc")]
 [assembly: AssemblyDescription ("Personal photo management for the GNOME Desktop")]
+[assembly: AssemblyCopyright ("Copyright (C) 2003-2010 Novell Inc. and others")]
+[assembly: AssemblyCompany ("Novell, Inc.")]
+
+[AttributeUsage (AttributeTargets.Assembly, Inherited = false)]
+internal sealed class ApplicationVersionAttribute : Attribute
+{
+    private string release_version;
+    public string ReleaseVersion {
+        get { return release_version; }
+    }
+
+    private string display_version;
+    public string DisplayVersion {
+        get { return display_version; }
+    }
+
+    public ApplicationVersionAttribute (string releaseVersion, string displayVersion)
+    {
+        release_version = releaseVersion;
+        display_version = displayVersion;
+    }
+}
+
+[AttributeUsage (AttributeTargets.Assembly, Inherited = false)]
+internal sealed class ApplicationBuildInformationAttribute : Attribute
+{
+    private string vendor;
+    public string Vendor {
+        get { return vendor; }
+    }
+
+    private string host_os;
+    public string HostOperatingSystem {
+        get { return host_os; }
+    }
+
+    private string host_cpu;
+    public string HostCpu {
+        get { return host_cpu; }
+    }
+
+    private string build_time;
+    public string BuildTime {
+        get { return build_time; }
+    }
+
+    public ApplicationBuildInformationAttribute (string vendor, string hostOs, string hostCpu, string time)
+    {
+        this.vendor = vendor;
+        this.host_os = hostOs;
+        this.host_cpu = hostCpu;
+        this.build_time = time;
+    }
+}
diff --git a/src/BitConverter.cs b/src/BitConverter.cs
deleted file mode 100644
index 00f34c5..0000000
--- a/src/BitConverter.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace FSpot {
-	//[Obsolete ("use Mono.DataConvert instead")]
-	public class BitConverter {
-		public static uint Swap (uint val, bool little) 
-		{
-			return (little != System.BitConverter.IsLittleEndian) ?
-				((uint) ((((uint) (val) & (uint) 0x000000ffU) << 24) |
-					 (((uint) (val) & (uint) 0x0000ff00U) <<  8) | 
-					 (((uint) (val) & (uint) 0x00ff0000U) >>  8) |
-					 (((uint) (val) & (uint) 0xff000000U) >> 24)))
-				: val;
-		}
-		
-		public static ushort Swap (ushort val, bool little)
-		{
-			return (little != System.BitConverter.IsLittleEndian) ?
-				((ushort) ((ushort)(val >> 8) | (ushort)(val << 8)))
-				: val;
-		}
-
-		public static ushort Swap (ushort val)
-		{
-			return ((ushort) ((ushort)(val >> 8) | (ushort)(val << 8)));
-		}
-		
-		public static ulong Swap (ulong val, bool little)
-		{
-		        return (little != System.BitConverter.IsLittleEndian) ?
-			((ulong) ((((ulong) (val) & (ulong) 0x00000000000000ffU) << 56) |     
-				  (((ulong) (val) & (ulong) 0x000000000000ff00U) << 40) |	
-				  (((ulong) (val) & (ulong) 0x0000000000ff0000U) << 24) |
-				  (((ulong) (val) & (ulong) 0x00000000ff000000U) <<  8) |
-				  (((ulong) (val) & (ulong) 0x000000ff00000000U) >>  8) |	
-				  (((ulong) (val) & (ulong) 0x0000ff0000000000U) >> 24) |
-				  (((ulong) (val) & (ulong) 0x00ff000000000000U) >> 40) |
-				  (((ulong) (val) & (ulong) 0xff00000000000000U) >> 56)))
-				: val;
-		}
-		
-		public static byte [] GetBytes (uint val, bool little) 
-		{
-			val = Swap (val, little);
-			return System.BitConverter.GetBytes (val);
-		}
-		
-		public static byte [] GetBytes (ushort val, bool little)
-		{
-			val = Swap (val, little);
-			return System.BitConverter.GetBytes (val);
-		}
-
-		public static byte [] GetBytes (ulong val, bool little)
-		{
-			val = Swap (val, little);
-			return System.BitConverter.GetBytes (val);
-		}
-		
-		public static ushort ToUInt16 (byte [] data, int position, bool little)
-		{
-			ushort val = System.BitConverter.ToUInt16 (data, position);
-			return Swap (val, little);
-		}
-
-		public static uint ToUInt32 (byte [] data, int position, bool little)
-		{
-			uint val = System.BitConverter.ToUInt32 (data, position);
-			return Swap (val, little);
-		}
-
-		public static float ToSingle (byte [] data, int position, bool little)
-		{
-			float retval;
-			unsafe {
-				uint * ptr;
-				ptr = (uint *)&retval;
-				*ptr = ToUInt32 (data, position, little);
-			}
-			return retval;
-		}
-
-		public static int ToInt32 (byte [] data, int position, bool little)
-		{
-			return unchecked ((int) ToUInt32 (data, position, little));
-		}
-
-		public static ulong ToUInt64 (byte [] data, int position, bool little)
-		{
-			ulong val = System.BitConverter.ToUInt64(data, position);
-			return Swap (val, little);
-		}
-	}
-}
diff --git a/src/Bling/Makefile.am b/src/Bling/Makefile.am
deleted file mode 100644
index d857bd4..0000000
--- a/src/Bling/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
-ASSEMBLY = FSpot.Bling
-TARGET = library
-LINK = $(REF_FSPOT_BLING)
-
-SOURCES = \
-	Animation.cs \
-	BackEase.cs \
-	CubicEase.cs \
-	DoubleAnimation.cs \
-	EasedAnimation.cs \
-	EasingFunction.cs \
-	EasingMode.cs \
-	QuinticEase.cs
-
-RESOURCES =
-
-include $(top_srcdir)/build/build.mk
diff --git a/src/Bling/Makefile.in b/src/Bling/Makefile.in
deleted file mode 100644
index eb1e9ac..0000000
--- a/src/Bling/Makefile.in
+++ /dev/null
@@ -1,807 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = src/Bling
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Bling
-TARGET = library
-LINK = $(REF_FSPOT_BLING) $(am__append_1)
-SOURCES = \
-	Animation.cs \
-	BackEase.cs \
-	CubicEase.cs \
-	DoubleAnimation.cs \
-	EasedAnimation.cs \
-	EasingFunction.cs \
-	EasingMode.cs \
-	QuinticEase.cs
-
-RESOURCES = 
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Bling/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign src/Bling/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/DependentListStore.cs b/src/Clients/MainApp/DependentListStore.cs
similarity index 100%
rename from src/DependentListStore.cs
rename to src/Clients/MainApp/DependentListStore.cs
diff --git a/src/Clients/MainApp/FSpot.ColorAdjustment/Adjustment.cs b/src/Clients/MainApp/FSpot.ColorAdjustment/Adjustment.cs
new file mode 100644
index 0000000..62f1474
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.ColorAdjustment/Adjustment.cs
@@ -0,0 +1,89 @@
+/*
+ * Adjustment.cs
+ *
+ * Copyright 2006, 2007 Novell Inc.
+ *
+ * Author
+ *   Larry Ewing <lewing at novell.com>
+ *   Ruben Vermeersch <ruben at savanne.be>
+ *
+ * See COPYING for license information
+ *
+ */
+
+using FSpot.Utils;
+using Cms;
+using Gdk;
+using System.Collections.Generic;
+
+namespace FSpot.ColorAdjustment {
+	public abstract class Adjustment {
+		protected int nsteps = 20;
+		private Cms.Intent intent = Cms.Intent.Perceptual;
+
+		// This is the input pixbuf, on which the adjustment will be performed.
+		protected readonly Gdk.Pixbuf Input;
+
+		private Cms.Profile input_profile;
+		public Cms.Profile InputProfile {
+			get {
+				if (input_profile == null)
+					input_profile = Cms.Profile.CreateStandardRgb ();
+
+				return input_profile;
+			}
+			set { input_profile = value; }
+		}
+
+		private Cms.Profile destination_profile;
+		public Cms.Profile DestinationProfile {
+			get {
+				if (destination_profile == null)
+					destination_profile = InputProfile;
+
+				return destination_profile;
+			}
+			set { destination_profile = value; }
+		}
+
+		public Adjustment (Pixbuf input, Cms.Profile input_profile)
+		{
+			Input = input;
+			InputProfile = input_profile;
+		}
+
+		protected abstract List <Cms.Profile> GenerateAdjustments ();
+
+		public Pixbuf Adjust ()
+		{
+			Gdk.Pixbuf final = new Gdk.Pixbuf (Gdk.Colorspace.Rgb,
+							   false, 8,
+							   Input.Width,
+							   Input.Height);
+			Cms.Profile [] list = GenerateAdjustments ().ToArray ();
+
+			if (Input.HasAlpha) {
+				Gdk.Pixbuf input_copy = (Gdk.Pixbuf)Input.Clone ();
+				Pixbuf alpha = PixbufUtils.Flatten (Input);
+				Transform transform = new Transform (list,
+								     PixbufUtils.PixbufCmsFormat (alpha),
+								     PixbufUtils.PixbufCmsFormat (final),
+								     intent, 0x0000);
+				PixbufUtils.ColorAdjust (alpha, final, transform);
+				PixbufUtils.ReplaceColor (final, input_copy);
+				alpha.Dispose ();
+				final.Dispose ();
+				final = input_copy;
+			} else {
+				Cms.Transform transform = new Cms.Transform (list,
+									     PixbufUtils.PixbufCmsFormat (Input),
+									     PixbufUtils.PixbufCmsFormat (final),
+									     intent, 0x0000);
+
+				PixbufUtils.ColorAdjust (Input, final, transform);
+			}
+
+			return final;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.ColorAdjustment/AutoStretch.cs b/src/Clients/MainApp/FSpot.ColorAdjustment/AutoStretch.cs
new file mode 100644
index 0000000..1037dee
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.ColorAdjustment/AutoStretch.cs
@@ -0,0 +1,59 @@
+/*
+ * AutoStretch.cs
+ *
+ * Author
+ *   Larry Ewing <lewing at novell.com>
+ *   Ruben Vermeersch <ruben at savanne.be>
+ *
+ * See COPYING for license information
+ *
+ */
+using Cms;
+using Gdk;
+using System;
+using System.Collections.Generic;
+using Hyena;
+
+namespace FSpot.ColorAdjustment {
+	public class AutoStretch : Adjustment {
+		public AutoStretch (Pixbuf input, Cms.Profile input_profile) : base (input, input_profile)
+		{
+		}
+
+		protected override List <Cms.Profile> GenerateAdjustments ()
+		{
+			List <Cms.Profile> profiles = new List <Cms.Profile> ();
+			Histogram hist = new Histogram (Input);
+			tables = new GammaTable [3];
+
+			for (int channel = 0; channel < tables.Length; channel++) {
+				int high, low;
+				hist.GetHighLow (channel, out high, out low);
+				Log.DebugFormat ("high = {0}, low = {1}", high, low);
+				tables [channel] = StretchChannel (255, low / 255.0, high / 255.0);
+			}
+			profiles.Add (new Cms.Profile (IccColorSpace.Rgb, tables));
+			return profiles;
+		}
+
+		GammaTable StretchChannel (int count, double low, double high)
+		{
+			ushort [] entries = new ushort [count];
+			for (int i = 0; i < entries.Length; i++) {
+				double val = i / (double)entries.Length;
+
+				if (high != low) {
+					val = Math.Max ((val - low), 0) / (high - low);
+				} else {
+					val = Math.Max ((val - low), 0);
+				}
+
+				entries [i] = (ushort) Math.Min (Math.Round (ushort.MaxValue * val), ushort.MaxValue);
+				//System.Console.WriteLine ("val {0}, result {1}", Math.Round (val * ushort.MaxValue), entries [i]);
+			}
+			return new GammaTable (entries);
+		}
+
+		GammaTable [] tables;
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.ColorAdjustment/Desaturate.cs b/src/Clients/MainApp/FSpot.ColorAdjustment/Desaturate.cs
new file mode 100644
index 0000000..f91bd6c
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.ColorAdjustment/Desaturate.cs
@@ -0,0 +1,40 @@
+/*
+ * Desaturate.cs
+ *
+ * Copyright 2006, 2007 Novell Inc.
+ *
+ * Author
+ *   Larry Ewing <lewing at novell.com>
+ *   Ruben Vermeersch <ruben at savanne.be>
+ *
+ * See COPYING for license information
+ *
+ */
+using Cms;
+using Gdk;
+using System.Collections.Generic;
+
+namespace FSpot.ColorAdjustment {
+	public class Desaturate : Adjustment {
+		public Desaturate (Pixbuf input, Cms.Profile input_profile) : base (input, input_profile)
+		{
+		}
+
+		protected override List <Cms.Profile> GenerateAdjustments ()
+		{
+			List <Cms.Profile> profiles = new List <Cms.Profile> ();
+			profiles.Add (InputProfile);
+			profiles.Add (Cms.Profile.CreateAbstract (nsteps,
+								  1.0,
+								  0.0,
+								  0.0,
+								  0.0,
+								  -100.0,
+								  null,
+								  ColorCIExyY.D50,
+								  ColorCIExyY.D50));
+			profiles.Add (DestinationProfile);
+			return profiles;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.ColorAdjustment/FullColorAdjustment.cs b/src/Clients/MainApp/FSpot.ColorAdjustment/FullColorAdjustment.cs
new file mode 100644
index 0000000..d5c4bc8
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.ColorAdjustment/FullColorAdjustment.cs
@@ -0,0 +1,60 @@
+/*
+ * FullColorAdjustment.cs
+ *
+ * Copyright 2006, 2007 Novell Inc.
+ *
+ * Author
+ *   Larry Ewing <lewing at novell.com>
+ *   Ruben Vermeersch <ruben at savanne.be>
+ *
+ * See COPYING for license information
+ *
+ */
+using Cms;
+using Gdk;
+using System;
+using System.Collections.Generic;
+
+namespace FSpot.ColorAdjustment {
+	public class FullColorAdjustment : Adjustment {
+		private double exposure;
+		private double brightness;
+		private double contrast;
+		private double hue;
+		private double saturation;
+		private Cms.ColorCIEXYZ src_wp;
+		private Cms.ColorCIEXYZ dest_wp;
+
+		public FullColorAdjustment (Pixbuf input, Cms.Profile input_profile,
+				double exposure, double brightness, double contrast,
+				double hue, double saturation,
+				Cms.ColorCIEXYZ src_wp, Cms.ColorCIEXYZ dest_wp)
+			: base (input, input_profile)
+		{
+			this.exposure = exposure;
+			this.brightness = brightness;
+			this.contrast = contrast;
+			this.hue = hue;
+			this.saturation = saturation;
+			this.src_wp = src_wp;
+			this.dest_wp = dest_wp;
+		}
+
+		protected override List <Cms.Profile> GenerateAdjustments ()
+		{
+			List <Cms.Profile> profiles = new List <Cms.Profile> ();
+			profiles.Add (InputProfile);
+			profiles.Add (Cms.Profile.CreateAbstract (nsteps,
+						Math.Pow (Math.Sqrt (2.0), exposure),
+						brightness,
+						contrast,
+						hue,
+						saturation,
+						null,
+						src_wp.ToxyY (),
+						dest_wp.ToxyY ()));
+			profiles.Add (DestinationProfile);
+			return profiles;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.ColorAdjustment/SepiaTone.cs b/src/Clients/MainApp/FSpot.ColorAdjustment/SepiaTone.cs
new file mode 100644
index 0000000..b8a4086
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.ColorAdjustment/SepiaTone.cs
@@ -0,0 +1,50 @@
+/*
+ * SepiaTone.cs
+ *
+ * Copyright 2006, 2007 Novell Inc.
+ *
+ * Author
+ *   Larry Ewing <lewing at novell.com>
+ *   Ruben Vermeersch <ruben at savanne.be>
+ *
+ * See COPYING for license information
+ *
+ */
+using Cms;
+using Gdk;
+using System.Collections.Generic;
+
+namespace FSpot.ColorAdjustment {
+	public class SepiaTone : Adjustment {
+		public SepiaTone (Pixbuf input, Cms.Profile input_profile) : base (input, input_profile)
+		{
+		}
+
+		protected override List <Cms.Profile> GenerateAdjustments ()
+		{
+			List <Cms.Profile> profiles = new List <Cms.Profile> ();
+			profiles.Add (InputProfile);
+			profiles.Add (Cms.Profile.CreateAbstract (nsteps,
+								  1.0,
+								  0.0,
+								  0.0,
+								  0.0,
+								  -100.0,
+								  null,
+								  ColorCIExyY.D50,
+								  ColorCIExyY.D50));
+
+			profiles.Add (Cms.Profile.CreateAbstract (nsteps,
+								  1.0,
+								  32.0,
+								  0.0,
+								  0.0,
+								  0.0,
+								  null,
+								  ColorCIExyY.D50,
+								  ColorCIExyY.WhitePointFromTemperature (9934)));
+			profiles.Add (DestinationProfile);
+			return profiles;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Database/Db.cs b/src/Clients/MainApp/FSpot.Database/Db.cs
new file mode 100644
index 0000000..e223561
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Database/Db.cs
@@ -0,0 +1,154 @@
+using System.IO;
+using System;
+using Hyena;
+
+// A Store maps to a SQL table.  We have separate stores (i.e. SQL tables) for tags, photos and imports.
+
+namespace FSpot.Database
+{
+
+// The Database puts the stores together.
+
+    public class Db : IDisposable
+    {
+
+        TagStore tag_store;
+        PhotoStore photo_store;
+        RollStore roll_store;
+        ExportStore export_store;
+        JobStore job_store;
+        MetaStore meta_store;
+        bool empty;
+        string path;
+
+        public TagStore Tags {
+            get { return tag_store; }
+        }
+
+        public RollStore Rolls {
+            get { return roll_store; }
+        }
+
+        public ExportStore Exports {
+            get { return export_store; }
+        }
+
+        public JobStore Jobs {
+            get { return job_store; }
+        }
+
+        public PhotoStore Photos {
+            get { return photo_store; }
+        }
+
+        public MetaStore Meta {
+            get { return meta_store; }
+        }
+
+        // This affects how often the database writes data back to disk, and
+        // therefore how likely corruption is in the event of power loss.
+        public bool Sync {
+            set {
+                string query = "PRAGMA synchronous = " + (value ? "ON" : "OFF");
+                Database.Execute (query);
+            }
+        }
+
+        FSpotDatabaseConnection database;
+        public FSpotDatabaseConnection Database {
+            get { return database; }
+        }
+
+
+        public string Repair ()
+        {
+            string backup_path = path;
+            int i = 0;
+            
+            while (File.Exists (backup_path)) {
+                backup_path = String.Format ("{0}-{1}-{2}{3}", Path.GetFileNameWithoutExtension (path), System.DateTime.Now.ToString ("yyyyMMdd"), i++, Path.GetExtension (path));
+            }
+            
+            File.Move (path, backup_path);
+            Init (path, true);
+            
+            return backup_path;
+        }
+
+        public void Init (string path, bool create_if_missing)
+        {
+            uint timer = Log.DebugTimerStart ();
+            bool new_db = !File.Exists (path);
+            this.path = path;
+            
+            if (new_db && !create_if_missing)
+                throw new Exception (path + ": File not found");
+            
+            database = new FSpotDatabaseConnection (path);
+            
+            // Load or create the meta table
+            meta_store = new MetaStore (Database, new_db);
+            
+            // Update the database schema if necessary
+            FSpot.Database.Updater.Run (Database);
+            
+            Database.BeginTransaction ();
+            
+            tag_store = new TagStore (Database, new_db);
+            roll_store = new RollStore (Database, new_db);
+            export_store = new ExportStore (Database, new_db);
+            job_store = new JobStore (Database, new_db);
+            photo_store = new PhotoStore (Database, new_db);
+            
+            Database.CommitTransaction ();
+            
+            empty = new_db;
+            Log.DebugTimerPrint (timer, "Db Initialization took {0}");
+        }
+
+        public bool Empty {
+            get { return empty; }
+        }
+
+        public void Dispose ()
+        {
+            Dispose (true);
+            GC.SuppressFinalize (this);
+        }
+
+        bool already_disposed = false;
+        protected virtual void Dispose (bool is_disposing)
+        {
+            if (already_disposed)
+                return;
+            if (is_disposing) {
+                //Free managed resources
+                Database.Dispose ();
+            }
+            //Free unmanaged resources
+            
+            already_disposed = true;
+        }
+
+        ~Db ()
+        {
+            Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
+            Dispose (false);
+        }
+
+        public void BeginTransaction ()
+        {
+            Database.BeginTransaction ();
+        }
+
+        public void CommitTransaction ()
+        {
+            Database.CommitTransaction ();
+        }
+
+        public void RollbackTransaction ()
+        {
+            Database.RollbackTransaction ();
+        }
+    }
+}
diff --git a/src/Clients/MainApp/FSpot.Database/DbException.cs b/src/Clients/MainApp/FSpot.Database/DbException.cs
new file mode 100644
index 0000000..d828cf4
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Database/DbException.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace FSpot.Database
+{
+    public class DbException : ApplicationException
+    {
+        public DbException (string msg) : base(msg)
+        {
+        }
+    }
+}
diff --git a/src/Clients/MainApp/FSpot.Database/DbStore.cs b/src/Clients/MainApp/FSpot.Database/DbStore.cs
new file mode 100644
index 0000000..b0ed52c
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Database/DbStore.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using Hyena;
+using FSpot.Core;
+
+namespace FSpot.Database
+{
+    public abstract class DbStore<T> where T : DbItem
+    {
+        // DbItem cache.
+
+        public event EventHandler<DbItemEventArgs<T>> ItemsAdded;
+        public event EventHandler<DbItemEventArgs<T>> ItemsRemoved;
+        public event EventHandler<DbItemEventArgs<T>> ItemsChanged;
+
+        protected Dictionary<uint, object> item_cache;
+        bool cache_is_immortal;
+
+        protected void AddToCache (T item)
+        {
+            if (item_cache.ContainsKey (item.Id))
+                item_cache.Remove (item.Id);
+            
+            if (cache_is_immortal)
+                item_cache.Add (item.Id, item);
+            else
+                item_cache.Add (item.Id, new WeakReference (item));
+        }
+
+        protected T LookupInCache (uint id)
+        {
+            if (!item_cache.ContainsKey (id))
+                return null;
+            
+            if (cache_is_immortal)
+                return item_cache[id] as T;
+            
+            WeakReference weakref = item_cache[id] as WeakReference;
+            return (T)weakref.Target;
+        }
+
+        protected void RemoveFromCache (T item)
+        {
+            item_cache.Remove (item.Id);
+        }
+
+        protected void EmitAdded (T item)
+        {
+            EmitAdded (new T[] { item });
+        }
+
+        protected void EmitAdded (T[] items)
+        {
+            EmitEvent (ItemsAdded, new DbItemEventArgs<T> (items));
+        }
+
+        protected void EmitChanged (T item)
+        {
+            EmitChanged (new T[] { item });
+        }
+
+        protected void EmitChanged (T[] items)
+        {
+            EmitChanged (items, new DbItemEventArgs<T> (items));
+        }
+
+        protected void EmitChanged (T[] items, DbItemEventArgs<T> args)
+        {
+            EmitEvent (ItemsChanged, args);
+        }
+
+        protected void EmitRemoved (T item)
+        {
+            EmitRemoved (new T[] { item });
+        }
+
+        protected void EmitRemoved (T[] items)
+        {
+            EmitEvent (ItemsRemoved, new DbItemEventArgs<T> (items));
+        }
+
+        private void EmitEvent (EventHandler<DbItemEventArgs<T>> evnt, DbItemEventArgs<T> args)
+        {
+            if (evnt == null)
+                // No subscribers.
+                return;
+            
+            ThreadAssist.ProxyToMain (() => { evnt (this, args); });
+        }
+
+        public bool CacheEmpty {
+            get { return item_cache.Count == 0; }
+        }
+
+
+        FSpotDatabaseConnection database;
+        protected FSpotDatabaseConnection Database {
+            get { return database; }
+        }
+
+
+        // Constructor.
+
+        public DbStore (FSpotDatabaseConnection database, bool cache_is_immortal)
+        {
+            this.database = database;
+            this.cache_is_immortal = cache_is_immortal;
+            
+            item_cache = new Dictionary<uint, object> ();
+        }
+
+
+        // Abstract methods.
+
+        public abstract T Get (uint id);
+        public abstract void Remove (T item);
+        // If you have made changes to "obj", you have to invoke Commit() to have the changes
+        // saved into the database.
+        public abstract void Commit (T item);
+    }
+}
diff --git a/src/Clients/MainApp/FSpot.Database/FSpotDatabaseConnection.cs b/src/Clients/MainApp/FSpot.Database/FSpotDatabaseConnection.cs
new file mode 100644
index 0000000..4b6aa19
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Database/FSpotDatabaseConnection.cs
@@ -0,0 +1,32 @@
+//
+// FSpotDatabaseConnection.cs
+//
+// Author:
+//   Mike Gemuende <mike at gemuende.de>
+//   Ruben Vermeersch <ruben at savanne.be>
+//
+// Copyright (c) 2010 Mike Gemuende <mike at gemuende.de>
+// Copyright (c) 2010 Ruben Vermeersch <ruben at savanne.be>
+//
+// This is free software. See COPYING for details.
+//
+
+using System;
+
+using Hyena.Data.Sqlite;
+
+namespace FSpot.Database
+{
+
+
+    public class FSpotDatabaseConnection : HyenaSqliteConnection
+    {
+
+        public FSpotDatabaseConnection (string dbpath) : base(dbpath)
+        {
+            //Execute ("PRAGMA synchronous = OFF");
+            //Execute ("PRAGMA temp_store = MEMORY");
+            //Execute ("PRAGMA count_changes = OFF");
+        }
+    }
+}
diff --git a/src/Clients/MainApp/FSpot.Database/Tests/UpdaterTests.cs b/src/Clients/MainApp/FSpot.Database/Tests/UpdaterTests.cs
new file mode 100644
index 0000000..e7e5e9d
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Database/Tests/UpdaterTests.cs
@@ -0,0 +1,258 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+using System;
+using Hyena;
+using FSpot;
+
+namespace FSpot.Database.Tests
+{
+    [TestFixture]
+    public class UpdaterTests
+    {
+        static bool initialized = false;
+        static void Initialize () {
+            GLib.GType.Init ();
+            Updater.silent = true;
+            initialized = true;
+        }
+
+        [Test]
+        public void Test_0_6_1_5 ()
+        {
+            TestUpdate ("0.6.1.5", "17.0");
+        }
+
+        [Test]
+        public void Test_0_6_2 ()
+        {
+            TestUpdate ("0.6.2", "17.1");
+        }
+
+        [Test]
+        public void Test_0_7_0_17_2 ()
+        {
+            TestUpdate ("0.7.0-17.2", "17.2");
+        }
+
+        [Test]
+        public void Test_0_7_0_18_0 ()
+        {
+            TestUpdate ("0.7.0-18.0", "18");
+        }
+
+        private void TestUpdate (string version, string revision)
+        {
+            if (!initialized)
+                Initialize ();
+
+            var uri = new SafeUri (Environment.CurrentDirectory + "/../tests/data/f-spot-"+version+".db");
+            var file = GLib.FileFactory.NewForUri (uri);
+            Assert.IsTrue (file.Exists, String.Format ("Test database for version {0} not found", version));
+
+            var tmp = System.IO.Path.GetTempFileName ();
+            var uri2 = new SafeUri (tmp);
+            var file2 = GLib.FileFactory.NewForUri (uri2);
+            file.Copy (file2, GLib.FileCopyFlags.Overwrite, null, null);
+
+            var db = new FSpotDatabaseConnection (uri2.AbsolutePath);
+            ValidateRevision (db, revision);
+
+            Updater.Run (db);
+            ValidateRevision (db, Updater.LatestVersion.ToString ());
+
+            ValidateTableStructure (db);
+
+            CheckPhotosTable (db);
+            CheckPhotoVersionsTable (db);
+            CheckTagsTable (db);
+
+            file2.Delete ();
+        }
+
+        private void ValidateRevision (FSpotDatabaseConnection db, string revision)
+        {
+            var query = "SELECT data FROM meta WHERE name = 'F-Spot Database Version'";
+            var found = db.Query<string> (query).ToString ();
+            Assert.AreEqual (revision, found);
+        }
+
+        private void ValidateTableStructure (FSpotDatabaseConnection db)
+        {
+            CheckTableExistance (db, "exports");
+            CheckTableExistance (db, "jobs");
+            CheckTableExistance (db, "meta");
+            CheckTableExistance (db, "photo_tags");
+            CheckTableExistance (db, "photo_versions");
+            CheckTableExistance (db, "photos");
+            CheckTableExistance (db, "rolls");
+            CheckTableExistance (db, "tags");
+        }
+
+        private void CheckTableExistance (FSpotDatabaseConnection db, string name)
+        {
+            Assert.IsTrue (db.TableExists (name), String.Format ("Expected table {0} does not exist.", name));
+        }
+
+        private void CheckPhotosTable (FSpotDatabaseConnection db)
+        {
+            CheckPhoto (db, 1, 1249579156, "file:///tmp/database/", "sample.jpg", "Testing!", 1, 2, 5);
+            CheckPhoto (db, 2, 1276191607, "file:///tmp/database/", "sample_canon_bibble5.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 3, 1249834364, "file:///tmp/database/", "sample_canon_zoombrowser.jpg", "%test comment%", 1, 1, 0);
+            CheckPhoto (db, 4, 1276191607, "file:///tmp/database/", "sample_gimp_exiftool.jpg", "", 1, 1, 5);
+            CheckPhoto (db, 5, 1242995279, "file:///tmp/database/", "sample_nikon1.jpg", "", 1, 1, 1);
+            CheckPhoto (db, 6, 1276191607, "file:///tmp/database/", "sample_nikon1_bibble5.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 7, 1167646774, "file:///tmp/database/", "sample_nikon2.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 8, 1276191607, "file:///tmp/database/", "sample_nikon2_bibble5.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 9, 1256140553, "file:///tmp/database/", "sample_nikon3.jpg", "                                    ", 1, 1, 0);
+            CheckPhoto (db, 10, 1238587697, "file:///tmp/database/", "sample_nikon4.jpg", "                                    ", 1, 1, 0);
+            CheckPhoto (db, 11, 1276191607, "file:///tmp/database/", "sample_no_metadata.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 12, 1265446642, "file:///tmp/database/", "sample_null_orientation.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 13, 1161575860, "file:///tmp/database/", "sample_olympus1.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 14, 1236006332, "file:///tmp/database/", "sample_olympus2.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 15, 1246010310, "file:///tmp/database/", "sample_panasonic.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 16, 1258799979, "file:///tmp/database/", "sample_sony1.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 17, 1257533767, "file:///tmp/database/", "sample_sony2.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 18, 1026565108, "file:///tmp/database/", "sample_xap.jpg", "", 1, 1, 4);
+            CheckPhoto (db, 19, 1093249257, "file:///tmp/database/", "sample_xmpcrash.jpg", "", 1, 1, 0);
+            CheckPhoto (db, 20, 1276191607, "file:///tmp/database/test/", "sample_tangled1.jpg", "test comment", 1, 1, 0);
+            CheckCount (db, "photos", 20);
+        }
+
+        private void CheckPhotoVersionsTable (FSpotDatabaseConnection db)
+        {
+            CheckPhotoVersion (db, 1, 1, "Original", "file:///tmp/database/", "sample.jpg", "", 1);
+            CheckPhotoVersion (db, 2, 1, "Original", "file:///tmp/database/", "sample_canon_bibble5.jpg", "", 1);
+            CheckPhotoVersion (db, 3, 1, "Original", "file:///tmp/database/", "sample_canon_zoombrowser.jpg", "", 1);
+            CheckPhotoVersion (db, 4, 1, "Original", "file:///tmp/database/", "sample_gimp_exiftool.jpg", "", 1);
+            CheckPhotoVersion (db, 5, 1, "Original", "file:///tmp/database/", "sample_nikon1.jpg", "", 1);
+            CheckPhotoVersion (db, 6, 1, "Original", "file:///tmp/database/", "sample_nikon1_bibble5.jpg", "", 1);
+            CheckPhotoVersion (db, 7, 1, "Original", "file:///tmp/database/", "sample_nikon2.jpg", "", 1);
+            CheckPhotoVersion (db, 8, 1, "Original", "file:///tmp/database/", "sample_nikon2_bibble5.jpg", "", 1);
+            CheckPhotoVersion (db, 9, 1, "Original", "file:///tmp/database/", "sample_nikon3.jpg", "", 1);
+            CheckPhotoVersion (db, 10, 1, "Original", "file:///tmp/database/", "sample_nikon4.jpg", "", 1);
+            CheckPhotoVersion (db, 1, 2, "Modified", "file:///tmp/database/", "sample%20(Modified).jpg", "", 0);
+            CheckPhotoVersion (db, 11, 1, "Original", "file:///tmp/database/", "sample_no_metadata.jpg", "", 1);
+            CheckPhotoVersion (db, 12, 1, "Original", "file:///tmp/database/", "sample_null_orientation.jpg", "", 1);
+            CheckPhotoVersion (db, 13, 1, "Original", "file:///tmp/database/", "sample_olympus1.jpg", "", 1);
+            CheckPhotoVersion (db, 14, 1, "Original", "file:///tmp/database/", "sample_olympus2.jpg", "", 1);
+            CheckPhotoVersion (db, 15, 1, "Original", "file:///tmp/database/", "sample_panasonic.jpg", "", 1);
+            CheckPhotoVersion (db, 16, 1, "Original", "file:///tmp/database/", "sample_sony1.jpg", "", 1);
+            CheckPhotoVersion (db, 17, 1, "Original", "file:///tmp/database/", "sample_sony2.jpg", "", 1);
+            CheckPhotoVersion (db, 18, 1, "Original", "file:///tmp/database/", "sample_xap.jpg", "", 1);
+            CheckPhotoVersion (db, 19, 1, "Original", "file:///tmp/database/", "sample_xmpcrash.jpg", "", 1);
+            CheckPhotoVersion (db, 20, 1, "Original", "file:///tmp/database/test/", "sample_tangled1.jpg", "", 1);
+            CheckCount (db, "photo_versions", 21);
+            CheckOriginalVersionCount (db);
+        }
+
+        private void CheckTagsTable (FSpotDatabaseConnection db)
+        {
+            CheckTag (db, 1, "Favorites", 0, 1, -10, "stock_icon:emblem-favorite");
+            CheckTag (db, 2, "Hidden", 0, 0, -9, "stock_icon:emblem-readonly");
+            CheckTag (db, 3, "People", 0, 1, -8, "stock_icon:emblem-people");
+            CheckTag (db, 4, "Places", 0, 1, -8, "stock_icon:emblem-places");
+            CheckTag (db, 5, "Events", 0, 1, -7, "stock_icon:emblem-event");
+            CheckTag (db, 6, "Imported Tags", 0, 1, 0, "stock_icon:gtk-new");
+            CheckTag (db, 7, "keyword1", 6, 1, 0, "");
+            CheckTag (db, 8, "keyword2", 6, 1, 0, "");
+            CheckTag (db, 9, "keyword3", 6, 1, 0, "");
+            CheckTag (db, 10, "keyword 1", 6, 1, 0, "");
+            CheckTag (db, 11, "keyword 2", 6, 1, 0, "");
+            CheckTag (db, 12, "Kirche Sulzbach", 6, 1, 0, "");
+            CheckTag (db, 13, "Nikon D70s", 6, 1, 0, "");
+            CheckTag (db, 14, "Food", 6, 1, 0, "");
+            CheckTag (db, 15, "2007", 6, 1, 0, "");
+            CheckTag (db, 16, "2006", 6, 1, 0, "");
+            CheckTag (db, 17, "Neujahr", 6, 1, 0, tag_icon_emblem);
+            CheckTag (db, 18, "Sylvester", 6, 1, 0, "");
+            CheckTag (db, 19, "Olympus µ 700", 6, 1, 0, "");
+            CheckTag (db, 20, "Rom 2006-10", 6, 1, 0, "");
+            CheckTag (db, 21, "Architecture", 5, 1, 0, tag_icon_img);
+            CheckTag (db, 22, "Flughafen", 6, 1, 0, "");
+            CheckTag (db, 23, "Basel", 6, 1, 0, "");
+            CheckTag (db, 24, "FreeFoto.com", 6, 1, 0, "");
+            CheckTag (db, 25, "City", 6, 1, 0, "stock_icon:emblem-places");
+            CheckTag (db, 26, " ", 25, 1, 0, "");
+            CheckTag (db, 27, "State", 6, 1, 0, "stock_icon:emblem-places");
+            CheckTag (db, 28, "Country", 6, 1, 0, "stock_icon:emblem-places");
+            CheckTag (db, 29, "Ubited Kingdom", 28, 1, 0, "");
+            CheckTag (db, 30, "Communications", 6, 1, 0, "");
+            CheckTag (db, 31, "Türkei 2004", 6, 1, 0, "");
+            CheckCount (db, "tags", 31);
+        }
+
+        private void CheckPhoto (FSpotDatabaseConnection db, uint id, uint time, string base_uri, string filename, string description, uint roll_id, uint default_version_id, uint rating)
+        {
+            var reader = db.Query ("SELECT id, time, base_uri, filename, description, roll_id, default_version_id, rating FROM photos WHERE id = " + id);
+            var found = false;
+            while (reader.Read ()) {
+                Assert.AreEqual (id, Convert.ToUInt32 (reader[0]), "id on photo "+id);
+                Assert.AreEqual (time, Convert.ToUInt32 (reader[1]), "time on photo "+id);
+                Assert.AreEqual (base_uri, reader[2], "base_uri on photo "+id);
+                Assert.AreEqual (filename, reader[3], "filename on photo "+id);
+                Assert.AreEqual (description, reader[4], "description on photo "+id);
+                Assert.AreEqual (roll_id, Convert.ToUInt32 (reader[5]), "roll_id on photo "+id);
+                Assert.AreEqual (default_version_id, Convert.ToUInt32 (reader[6]), "default_version_id on photo "+id);
+                Assert.AreEqual (rating, Convert.ToUInt32 (reader[7]), "rating on photo "+id);
+                found = true;
+            }
+            Assert.IsTrue (found, "photo "+id+" missing");
+        }
+
+        private void CheckPhotoVersion (FSpotDatabaseConnection db, uint photo_id, uint version_id, string name, string base_uri, string filename, string import_md5, uint is_protected)
+        {
+            var reader = db.Query ("SELECT photo_id, version_id, name, base_uri, filename, import_md5, protected FROM photo_versions WHERE photo_id = " + photo_id + " AND version_id = " + version_id);
+            var found = false;
+            while (reader.Read ()) {
+                Assert.AreEqual (photo_id, Convert.ToUInt32 (reader[0]), "photo_id on photo version "+photo_id+"/"+version_id);
+                Assert.AreEqual (version_id, Convert.ToUInt32 (reader[1]), "version_id on photo version "+photo_id+"/"+version_id);
+                Assert.AreEqual (name, reader[2], "name on photo version "+photo_id+"/"+version_id);
+                Assert.AreEqual (base_uri, reader[3], "base_uri on photo version "+photo_id+"/"+version_id);
+                Assert.AreEqual (filename, reader[4], "filename on photo version "+photo_id+"/"+version_id);
+                Assert.AreEqual (import_md5, reader[5], "import_md5 on photo version "+photo_id+"/"+version_id);
+                Assert.AreEqual (is_protected, Convert.ToUInt32 (reader[6]), "protected on photo version "+photo_id+"/"+version_id);
+                found = true;
+            }
+            Assert.IsTrue (found, "photo version "+photo_id+"/"+version_id+" missing");
+        }
+
+        private void CheckOriginalVersionCount (FSpotDatabaseConnection db)
+        {
+            var photo_count = GetCount (db, "photos", "1");
+            var orig_version_count = GetCount (db, "photo_versions", "version_id = 1");
+            Assert.AreEqual (photo_count, orig_version_count, "Expecting an original version for each photo");
+        }
+
+        private void CheckTag (FSpotDatabaseConnection db, uint id, string name, uint cat_id, int is_cat, int sort, string icon)
+        {
+            var reader = db.Query ("SELECT id, name, category_id, is_category, sort_priority, icon FROM tags WHERE id = " + id);
+            var found = false;
+            while (reader.Read ()) {
+                Assert.AreEqual (id, Convert.ToUInt32 (reader[0]), "id on tag "+id);
+                Assert.AreEqual (name, reader[1], "name on tag "+id);
+                Assert.AreEqual (cat_id, Convert.ToUInt32 (reader[2]), "category_id on tag "+id);
+                Assert.AreEqual (is_cat, Convert.ToInt32 (reader[3]), "is_cat on tag "+id);
+                Assert.AreEqual (sort, reader[4], "sort_priority on tag "+id);
+                Assert.AreEqual (icon, reader[5], "icon on tag "+id);
+                found = true;
+            }
+            Assert.IsTrue (found, "tag "+id+" missing");
+        }
+
+        private int GetCount (FSpotDatabaseConnection db, string table, string where)
+        {
+            return db.Query<int> ("SELECT COUNT(*) FROM "+table+" WHERE "+where);
+        }
+
+        private void CheckCount (FSpotDatabaseConnection db, string table, int count)
+        {
+            var counted = GetCount (db, table, "1");
+            Assert.AreEqual (count, counted, "Count on "+table);
+        }
+
+        private const string tag_icon_img = "R2RrUAAAJBgBAQACAAAAwAAAADAAAAAw////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBRlAATTZoFYE+dCKFRnQfBUZ4H3E+dBvFOmwb8UJwG71GeB9pRnge/UJ4InU+ZBlpVmQAP////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBJkgAOTZsHblCfBsxPnAf4c7cx9KHVb/+14Yr/x+mk/9fxv//i9s//1vC8/8Xpov+z4Ij/ndRp/2uxJ/NPmwf5UJ0Gxk6bBWZNmQAK////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AVaoABk6bB3NQnQbxeb04967egP/b88P/3vTH/73qkP+u5Xj/oeFj/5TdTv+L2j7/l95S/6TiaP+x5n3/wuuZ/+T20v/X8r7/qtx6/3G3L/ZPnAbuUJsFZlWqAAP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBNmgZTUJ0H6m+1LvbA6Jr/1PG4/6vkc/+H2Df/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3TSF/+M2kD/seZ9/9vzw/+45I7/Z7Ai9E+cB+FPmgdH////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AgIAAAk+eBY5apBT1sOCC/9Txt/+f4GD/dNIY/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3fTHf+q5HH/2fO//6fbdf9VoAz2UJwIfP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBVlQAMUZwHumuyJ/XJ7af/quRy/3fTHf9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/fNUm/7joif/E6p//Yaoa9VCcCKpVqgAG////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AE6dAA1QnAfZfsA/+Mzuqv+U3U7/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv+i4WT/zO6q/3K4LvdQnQbJVaoABv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AgIAAAk+dB7uAwUH4x+2i/4fYN/9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/4PXMP+t5Xf/x+2i/9byu//l99P/3vTH/87vrf+76Y//ld1P/3XTGf9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/j9tF/8vuqf9zuDH3UJwIpf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AT5wGi2yyKfTH7aL/hdg0/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv+h4WL/4/bQ//////////////////////////////////////////////////X87v/C65n/ftYo/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/47bQ//G7KH/YKgb9lGcCXH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBNmgZTXKQW9cDplv+R3Ej/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/jdpB/+D1zP//////////////////////////////////////////////////////////////////////9/zx/7PmgP900hf/c9IW/3PSFv9z0hb/c9IW/3PSFv+c31r/uuaO/1ahDfZOmAQ+////AP///wD///8A////AP///wD///8A////AP///wD///8A////AEmSAAdQnQfqqd52/5/gYP9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv+i4WT/+v32///////////////////////////////////////////////////////////////////////////////////////T8bX/etQh/3PSFv9z0hb/c9IW/3PSFv9z0hb/q+Rz/5vVYv9PnQfbAP8AAf///wD///8A////AP///wD///8A////AP///wD///8A////AE6ZB3VytzH0uumM/3XTGv9z0hb/c9IW/3PSFv9z0hb/c9IW/67leP/+//7/////////////////////////////////////////////////////////////////////////////////////////////////5PbR/3rUIf9z0hb/c9IW/3PSFv9z0hb/etQh/8Drlv9irBzzTpoGW////wD///8A////AP///wD///8A////AP///wD///8AVZkAD1GcCPKu4X3/j9tF/3PSFv9z0hb/c9IW/3PSFv9z0hb/md5V//3+/P////////////////////////////////////////////X58P/u9ej/7vXo//r8+P///////////////////////////////////////////9Pxtv900hf/c9IW/3PSFv9z0hb/c9IW/5rfV/+i22v/UJ0H6VWqAAb///8A////AP///wD///8A////AP///wD///8ATpsHc3m8Ofaw5nv/dNIX/3PSFv9z0hb/c9IW/3PSFv+A1iz/9vzv////////////////////////////////////////////9fnw/1WeD/9UnQ7/UpwN/3qzRP////////////////////////////////////////////////+054P/c9IW/3PSFv9z0hb/c9IW/3bTG/+56Ir/arIk806aBlv///8A////AP///wD///8A////AP///wD///8AUJ4Hz57XZ/+P20X/c9IW/3PSFv9z0hb/c9IW/3PSFv/G7aH/////////////////////////////////////////////////7vXo/1SdDv9Omgb/TpoG/2mpLP/////////////////////////////////////////////////4/fP/f9Yq/3PSFv9z0hb/c9IW/3PSFv+Z3lb/ktFU/1GdB7f///8A////AP///wD///8A////AP///wBNmQAUUp4L+bXmhf941B7/c9IW/3PSFv9z0hb/c9IW/4jZOv/9/vv//////////////////////+jy3//l8Nv/////////////////7vXo/1SdDv9Omgb/TpoG/2mpLP//////////////////////1ujF//b68v//////////////////////xOyc/3PSFv9z0hb/c9IW/3PSFv+B1y7/sOR+/1CbB/ZVqgAG////AP///wD///8A////AP///wBOmQVfcbUw9qbiav9z0hb/c9IW/3PSFv9z0hb/c9IW/73qkf//////////////////////+/35/1+jHf9TnQ7/kMBk/+/26f//////7vXo/1SdDv9Omgb/TpoG/2mpLP///////////9npyf9wrTb/UZwK/4+/Yv//////////////////////9/zx/3bTG/9z0hb/c9IW/3PSFv9z0hb/suZ+/2avH/FPmgdH////AP///wD///8A////AP///wBQngetj85R/5DbRv9z0hb/c9IW/3PSFv9z0hb/c9IW/+r43P//////////////////////sdKR/1efEf9Omgb/UpwM/1WfEP+ly4D/5/Le/1SdDv9Omgb/TpoG/2mpLP/n8d3/g7hQ/1WdD/9Pmgf/TpoG/1OdDv/l8Nr//////////////////////5jeVP9z0hb/c9IW/3PSFv9z0hb/nN9a/4THQ/5OmwWP////AP///wD///8A////AP///wBRngbNmdZf/4bYNf9z0hb/c9IW/3PSFv9z0hb/htg1////////////////////////////fbVI/1WeDv9Omgb/TpoG/06aBv9VnhD/Vp8S/1SdDv9Omgb/TpoG/1OdDv9VnhD/UZsK/06aBv9Omgb/TpoG/1SdDv+82aH//////////////////////7/rlf9z0hb/c9IW/3PSFv9z0hb/kdxH/47PT/9Rnwe0////AP///wD///8A////AP///wBQnQfjodxo/3/WKf9z0hb/c9IW/3PSFv9z0hb/l95S////////////////////////////+fz3/6/Rjv9YoBP/VZ0P/06aBv9Omgb/TpoG/0+bCP9Omgb/TpoG/1CbCP9Omgb/TpoG/06aBv9XnxP/aKgq/8ziuP///////////////////////////9LxtP9z0hb/c9IW/3PSFv9z0hb/idk7/5fWWv9RnwfR////AP///wD///8A////AP///wBPnAf1qOFw/3jUHv9z0hb/c9IW/3PSFv9z0hb/peJp///////////////////////////////////////3+vP/p8yC/1efEv9UnQ7/TpoG/06aBv9Omgb/TpoG/06aBv9Omgb/V58S/2ClIP/D3ar//v/+/////////////////////////////////+H1zv9z0hb/c9IW/3PSFv9z0hb/gtcv/5/cY/9QnQfo////AP///wD///8A////AFWqAANPmgf+rOR1/3PSFv9z0hb/c9IW/3PSFv9z0hb/rOR1/////////////////////////////////////////////f78/7DSkP9Pmgf/UJsI/06aBv9Omgb/TpoG/06aBv9UnhD/Vp8S/9LlwP///////////////////////////////////////////+n42v9z0hb/c9IW/3PSFv9z0hb/fNUl/6Tgaf9Pmwf4////AP///wD///8A////AP///wBOmwb4puFt/3bTG/9z0hb/c9IW/3PSFv9z0hb/n+Bg///////////////////////////////////////G36//YqUi/1afEf9Omgb/TpoG/06aBv9Omgb/TpoG/06aBv9Omgb/T5sH/1aeEf95s0P/3uzR/////////////////////////////////9v0xP9z0hb/c9IW/3PSFv9z0hb/gNYr/53cYP9QnQbs////AP///wD///8A////AP///wBRngfnnNtg/3zVJf9z0hb/c9IW/3PSFv9z0hb/ktxJ////////////////////////////1ujF/2qqLf9XnxL/TpoG/06aBv9Omgb/U50N/1efE/9Omgb/TpoG/1aeEf9Omgf/TpoG/06aBv9Pmwj/VZ4P/4W5U//u9ef//////////////////////8zvqv9z0hb/c9IW/3PSFv9z0hb/hdg0/5PVU/9RngfW////AP///wD///8A////AP///wBRnwfRktRS/4HWLf9z0hb/c9IW/3PSFv9z0hb/fNUl//z++v//////////////////////e7RF/06aBv9Omgb/TpoG/1CbCf9VnQ//irxa/1SdDv9Omgb/TpoG/1+kHf9zrzn/Vp8S/06aBv9Omgb/TpoG/1KdDP+52J3//////////////////////7PmgP9z0hb/c9IW/3PSFv9z0hb/itk8/4nORv9QnQe7////AP///wD///8A////AP///wBRnge2iM1F/4fYN/9z0hb/c9IW/3PSFv9z0hb/c9IW/9nzwP//////////////////////1ujF/1aeEf9Omgb/VZ4Q/362Sv/l8Nv/7vXo/1SdDv9Omgb/TpoG/2mpLP//////yuG1/2KlIv9XnhH/TpoG/1qhFv/5+/b//////////////////////4jZOf9z0hb/c9IW/3PSFv9z0hb/kNtG/37GOf9QnQWZ////AP///wD///8A////AP///wBPnAdxcbkr95TdTf9z0hb/c9IW/3PSFv9z0hb/c9IW/6zkdf///////////////////////////4a6Vf9rqy//1efE////////////7vXo/1SdDv9Omgb/TpoG/2mpLP////////////z9+/+31pj/XKIZ/73Zof//////////////////////6fja/3PSFv9z0hb/c9IW/3PSFv9z0hb/nN9b/2exIPJOmgZY////AP///wD///8A////AP///wBLnggiVKAM9p/fX/910xn/c9IW/3PSFv9z0hb/c9IW/3jUH//x+uf/////////////////////////////////////////////////7vXo/1SdDv9Omgb/TpoG/2mpLP//////////////////////////////////////////////////////p+Nt/3PSFv9z0hb/c9IW/3PSFv951CD/nt9e/1GcCPdVmQAP////AP///wD///8A////AP///wD///8AUZwH4I7TS/+B1i3/c9IW/3PSFv9z0hb/c9IW/3PSFv+q5HH/////////////////////////////////////////////////7vXo/1OdDf9Omgb/TpoG/2mpLP/////////////////////////////////////////////////m99X/dNIY/3PSFv9z0hb/c9IW/3PSFv+H2Tj/hs5A/1GeBsr///8A////AP///wD///8A////AP///wD///8ATZsGh3K8K/qR3Ej/c9IW/3PSFv9z0hb/c9IW/3PSFv910xn/3PTF////////////////////////////////////////////+/35/4e6Vf90rzv/dK87/63Qi/////////////////////////////////////////////z++v+S3Er/c9IW/3PSFv9z0hb/c9IW/3PSFv+X3lL/arUh9k2aB23///8A////AP///wD///8A////AP///wD///8ATZsIIVGdCfeU2VL/fdUm/3PSFv9z0hb/c9IW/3PSFv9z0hb/ftYo/+354f///////////////////////////////////////////////////////////////////////////////////////////////////////////6njcP9z0hb/c9IW/3PSFv9z0hb/c9IW/4LXMP+Q1kr/UJwH81WcABL///8A////AP///wD///8A////AP///wD///8A////AFCcBZVttyb4ktxJ/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/4rZO//t+eL////////////////////////////////////////////////////////////////////////////////////////////+//7/tuiF/3PSFv9z0hb/c9IW/3PSFv9z0hb/dNIY/5feUv9lsBr2T5sIe////wD///8A////AP///wD///8A////AP///wD///8A////AFGUABNQnQj0jdVI/4HWLf9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9+1ij/3PTF//////////////////////////////////////////////////////////////////////////////////n99f+f4GD/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/htg2/4jSP/9QnAbtVY4ACf///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAFOmgZ5XaoW9ZTcTv961CL/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/ddMa/6zkdf/y++n////////////////////////////////////////////////////////////+//7/zu+t/4XYM/9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9+1ij/lNtO/1mlEPROmQVfAAAAAf///wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAAAAEAVQADT5wHvGm3IPeS3En/dtMb/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv951CD/ruV5/9rzwv/8/vr/////////////////////////////////7fnh/8Lrmv+N2kL/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3nUIP+U3U3/Yq8Y9k+cCKUAAAACAAAAAgAAAAEAAAAB////AP///wD///8A////AP///wAAAAABAAAAAQAAAAIAAAAEOXEAElCdB992wyv8jdpC/3bTG/9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv971ST/kdxI/5/gYP+s5HX/puJq/5feUv+H2Df/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/eNQf/5HcSP9vviX6T5wH0SdOAA0AAAAFAAAAAwAAAAIAAAABAAAAAf///wD///8A////AAAAAAEAAAABAAAAAgAAAAQAAAAHAAAACjl3Bi1PnAbwd8Uq/Y7bRP951CD/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv981Sb/kdxI/3G/JftPnAfrMFoHJQAAAA0AAAAJAAAABgAAAAQAAAACAAAAAQAAAAH///8A////AAAAAAEAAAACAAAABAAAAAYAAAAKAAAADgAAABM1ZQQ6T5oH5mm3HfmO20T/ftYo/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/4HWLf+O2kT/ZLIZ906ZB94rUgU1AAAAFwAAABMAAAAOAAAACgAAAAYAAAADAAAAAgAAAAH///8AAAAAAQAAAAEAAAADAAAABQAAAAkAAAANAAAAEgAAABcAAAAdGjMAMk2WBs5dqxP2h9U8/4rZO/961CH/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv981SX/jNo//4bUOf9YpRD2SpIHxA8kADIAAAAiAAAAHAAAABcAAAARAAAADAAAAAgAAAAFAAAAAgAAAAEAAAABAAAAAQAAAAEAAAADAAAABgAAAAoAAAAPAAAAFAAAABkAAAAgAAAAJwULADBEhQWlT5sI+Gu6H/yL1z7/htg1/3vVJP900hf/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv900hj/fNUm/4jZOf+J1zz/aLcb+06bB/c/fAaeAAUANgAAACwAAAAlAAAAHwAAABkAAAATAAAADgAAAAkAAAAFAAAAAwAAAAEAAAABAAAAAQAAAAEAAAADAAAABQAAAAkAAAAOAAAAEwAAABgAAAAeAAAAJQAAAC0AAAA4GzQDXkaJBslQnAj6br8i/oPTNv+M2j//hdgz/33VJv961CH/dtMb/3TSF/9z0hb/dNIY/3fTHP961CL/ftYo/4bYNf+M2kD/gtI0/2u8H/5Rmgj6QoEGxhIkA2MAAABDAAAANgAAACsAAAAkAAAAHQAAABgAAAASAAAADQAAAAgAAAAFAAAAAgAAAAEAAAAB////AAAAAAEAAAACAAAABAAAAAcAAAALAAAAEAAAABUAAAAaAAAAIAAAACgAAAAyAAAAQQAAAFAePQJ+Q4QG0U6YB/pVoQz4bL0f/n3MLv+E1DX/iNk6/4vaPv+L2j3/i9o9/4jYOv+D0zT/e8ws/2i5HP5Tnwv5TpgH+UF+BtAZMwKDAAAAWwAAAEwAAAA9AAAAMAAAACUAAAAfAAAAGQAAABQAAAAOAAAACgAAAAYAAAADAAAAAgAAAAH///8A////AAAAAAEAAAACAAAAAwAAAAUAAAAHAAAACwAAAA8AAAATAAAAGAAAAB4AAAAmAAAAMQAAAD0AAABKAAAAVgMFAGYiRQOUO3cFykuSBu9Olwf6TpoG/lCaB/pSngr5TpkG+02aBv5NmAb5SpAG7zpyBMoePAKYAgIAbQAAAGAAAABUAAAARwAAADkAAAAuAAAAIwAAABwAAAAXAAAAEgAAAA4AAAAKAAAABwAAAAQAAAACAAAAAQAAAAH///8A////AP///wAAAAABAAAAAgAAAAMAAAAEAAAABgAAAAkAAAAMAAAADwAAABQAAAAYAAAAHgAAACcAAAAvAAAAOQAAAEIAAABLAAAAVQAAAFwAAABhBQoAahMnAnwcOAKJEiUCfQUHAG0AAABmAAAAYQAAAFkAAABSAAAASAAAAD8AAAA1AAAALAAAACQAAAAcAAAAGAAAABIAAAAOAAAACwAAAAgAAAAGAAAABAAAAAIAAAABAAAAAf///wD///8A////AP///wAAAAABAAAAAQAAAAEAAAACAAAAAwAAAAUAAAAGAAAACAAAAAsAAAAOAAAAEAAAABQAAAAaAAAAHQAAACMAAAApAAAALQAAADIAAAA1AAAAOQAAADoAAAA8AAAAOwAAADoAAAA5AAAANAAAADEAAAAsAAAAJwAAACEAAAAbAAAAFwAAABMAAAAQAAAADAAAAAoAAAAIAAAABgAAAAQAAAADAAAAAgAAAAEAAAAB////AP///wD///8A////AP///wD///8A////AAAAAAEAAAABAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGAAAABYAAAAUAAAAEQAAAA8AAAANAAAACwAAAAgAAAAHAAAABgAAAAUAAAADAAAAAwAAAAIAAAABAAAAAf///wD///8A////AP///wD///8A";
+
+        private const string tag_icon_emblem = "R2RrUAAAGxgBAQABAAAAkAAAADAAAAAwgYFpgYFpdnZkZGVbVlZUTExRZl5iem1xlH+CinuAe3N6Z2lyYmZvb21zfnZ5jn5+jX59jH18i3x7hnh4fW1wdGJobVliYU9WVkZJTT4/QTQ1NCstKiMmIRwgKCEjLSQlMykoQzUyUz87ZkxFfWBXlXdss5SH0bGi17us38a55tLG28m+tqadkoJ8dWZhdWZhgYFpgYFpdnZkZGVbVlZUTExRZl5iem1xlH+CinuAe3N6Z2lyYmZvb21zfnZ5jn5+jX59jH18i3x7hnh4fW1wdGJobVliYU9WVkZJTT4/QTQ1NCstKiMmIRwgKCEjLSQlMykoQzUyUz87ZkxFfWBXlXdss5SH0bGi17us38a55tLG28m+tqadkoJ8dWZhdWZhhIFthIFteHVnZGNcU1NTSEhPY11ieG1xk4GEi32CfnZ7bmxzaWlvcm1yfXJ1iHh5hXV2gHJzfG9weGtscmNmbFthaFVcXUxRU0RHSj0+PzQ1NCstKiMmIh0gJyAiKiMjLyYlQDIvUD05Y0tFel5Wj3NpqYyAw6aYyq+i0ruu2se60L6zrp2UjHx1cWFccWFcioB1ioB1e3RsY19eUE9SQkNLXlphdG1ykISIjYKFhXt+enJ0dW1veG1ve21wf21wd2dqbWBjY1lcX1VZX1NWX1BUYE5TV0dLTkFDRzw8PTQ0MystKyQnIx4gJR8gJiAgKCEfOi4qSzs2YEpEdVxUhWtjmX91rZOItJyRvaicxrOnvqyhoI6GgXBqaVlUaVlUjoB6joB6fnJwY11fTUtSPD9JWlhgcW1zj4aKj4WHin6Ag3Z2fnBvfGxteWhrd2Vpa1xhXVJXT0hNS0RJUEZKVUdKWUhLUUNFSj4/RDo7OzQ0MywtLCUnJB8hJB4fIx0dIx0aNSonRzgzXUpDcFpSfGZei3RsmoN6oo2DrJiOtqSYsJ6TlIN6eWdhY1JOY1JOmIWFmIWFhnh6aWFmUU9XP0JMXFxkc3F3kIuPk4mLj4KCi3l2hHBtfWppdGJkbFpgXU9VTEJJOjY8NzI5QDc8SDw/T0BCST0+Qzo6Pzc4ODIyMSssKyUmJR8gIx0dIRsaHxkXMigkRTgzXUxFcFtTd2NbgWxkinZukn51m4h+pZOHn42Ch3Vsb11XW0pGW0pGsqSfsqSfo5iUi4SCd3R0aGdpfXl6jYeIoZiamo6Pj4GCgXBwdGNjbV1fY1VZWk1TT0VLQjtBNTE3Mi40ODE2PjQ4Qzc6PjM2OTAyNS0vMCkqKiQlJSAhIBwdIhwcJB0cJx0bPTArU0I8bllQgWpfh3BljndslX9yl4J1moZ3nYl6lYJ0fWthZlRPU0NAU0NAxr20xr20urKqpqCZlpKLiYWAlpCMoZiWr6KioJKTj4CCeWlraFlcYFNWVktQTERJRD1DOjY7MC40LisxMi0yNS4zOC80NSwwMSgrLiUoKSEkJB4gIBwdHRoaIhwcJx4dLSAeRjYxXkpDfGRaj3Zpk3ttmIBxnYZ2m4V0mYNyloJwjHlpdWNZXk5ITD07TD074NvO4NvO19PEyMO1vLeosqudt6yju66nwK+tqJeYj3+Cb2FmWExSUEZMRT9EOzc9NjM5MS80KyovKSctKictKyYtLCYtKSIoJx4jJRsfIRgcHRcZGRcYGBcXIhsbKh8eNCQiUT03a1RMjHJloYV1o4h3pYx4qI96oIl0l4FsjnlkgW1ba1lOVUVARDY1RDY16+fZ6+fZ5N7P18+/zcKywbSjuaqfsqKcqpmYkYKEem1wXVJYSEBHQjxCOzc8NDI2MS80LiwwKigtKSYsJyQqJiMpJSIoIx4kIBsgHhgcHRcaGxcZGhcYGhgYJR0cLSIfNyckUj43a1RKi3BioINypYh2rI96s5Z/qIx2mX9ri3Nff2dXb1dNX0ZDUjo8Ujo88e3f8e3f6uPV39PD1ca1yLWktaKXpZONkYCBeWtuZVpfTEVLOzc9ODU6NDI2MTAyLy0xLSovKyctKSUrJiMpIyEnIR8lHxwiHBkeGhcbGRcaGhgaGxkZHRsaJyAeLyQhOSkkUj42aVJHhWtdm35tpIZzsJB7vJqDro54nH5ri25df2NVdVZPaklIYj9DYj9D+fPn+fPn8+rc6dnI4Mu50belr5iNlH97cmBjW09US0NJNzQ7LCwyLCwwLCwvLCwtLCotLCgsKyYsKSQrJSEnIB4kHBwhGRofFxgcFBYaFhcaGRkaHRsbIR0cKyIfMiYiOyslUT00ZU5Df2RWlXdmo4NwtZF8xqCItZB7n3xqiWlaf15TfFVQeUxOdkVNdkVN/PXq/PXq9Ond59XG3cW0yq6cooqAgm1pWUlNRjtBOjQ6KysxJCctJyktKywtLy4tLi0uLisuLSkuKictJCMpHiAlGh0iFxsgFBoeEhkdFBkcGRsdHh0dJCAeLiUhNSkkPi4nUj41ZE5CemFTj3Jinn5ssY15w52GsYt4mnZmhGFVfVdPglRSiFFVjE9YjE9Y+O/n+O/n7eDX2ce7ybOkspmJjnlwcV9cTUBDPjU7NTI3Ky0yJywwLC8xMjMzODc0NTU0MjI0LzA0LC0yJikuICYrGyMoGCEmFSAkEx4iFR4hGh8gHyAfJSEfMCcjOCwmQzIqVUI4ZVBFeWJVinFilXppooVysJB7oH9ujWtfeVdPd1BMhlRUlFhcoFtioFti9Ofj9Ofj49XPx7atsJ2Rk35ydWRdXU5MPjQ3NC8zMC8zKi8zKzE0MjY2Ozw5Q0E9Pj88ODs7Mjg6LTU4JzE1IS0yHCowGSgtFicrFCUqFiQnGyMkICMiJiQgMislPDApSDctWEY7ZlNId2RYhHBjiXVmkXppmH9tjHBifF1VbEpHcUhIilRWpGBkuWpwuWpw8ODg8ODg2srItaSfmIZ/dWRbXE9KSD48LygrKigsKiwvKjEzLzc4OD08Q0VAT0xFSElEPkVCNUFBLz0/KTk8IzU5HjE3Gy81GC4zFS0xFystHSgoISYkKCYhNS4nQDQrTTwxW0o/Z1dLdWZbfW9jfm9if29hgG9fd2FWa1BLYD5Aaj9Dj1RYtGlt0nl90nl989rd89rd3MbHtqOgl4eCc2hgW1RRR0RFLjA2KzE3LTY8LzxBNUNGPkhISU5LVFVPTVFNRE1LO0lJNkZIMUJFLT9DKjxBJTk+Hzc7GzU5HDE0IS0uJCkpKyglODAqQjYuTz4zXEo/Z1RJc2FXfGpffmtggG1hgm9iemRacVZRZ0lHbUpJiFhYo2dmuHNyuHNy9tPa9tPa38HFtqKilomGcW1nWVtaRkxQLjpDLT1GMUNLNkpSPVFXRVVYUFpZWmBaU1xZS1dWQlNUPlBSPE5ROktPOElOMUVKKUFGIz5DIjk9JjM1KS4vLioqOzIuRTgxUkA1Xkk/Z1FHcltSemNafWZdgWphhW5lf2dfd19YcFdRcldRgF5XjmZemWxjmWxj+szX+szX4bzEt6GklYuKbnJuV2JjRFRbLURQLkhUNU9bPFljRWBoTWNnV2dnYWtmWmdkUmJhSl1fR1pdR1lcR1hbR1daPVJVM0xRKkhNKEFGKzk9LTI1Mi0vPjQySDo0VUI3X0k/Z09FcFZNeFxVfWFagmdhiG1pg2tlfmhgeGVbdmRYd2RXeGRWeWRVeWRV9sDN9sDN3bO8s5ugkYmKa3NyV2dqR11kM1BcNFNgOlllQWFsSGZvTWdtVGhqW2lnV2ZmUmNjTWBhTV9hT19hUmBhVGFiR1pdO1RYMU9ULUdMLj1BLzQ5My4xQDY0Szw3WEQ6YUtBaVFHclhPeF5Xe2JcfmdjgWxqgGxnfm1lfW1iemtec2ZYbGFRZl1NZl1N6Km36Km30J+qqY6ViYCFZnJzWW1xT2lvQmRsQWRuQ2ZvRWhyR2dwR2NrR15kR1ldSVpdTFtdTl1dUl9fWWRiX2hlZWxoVWVkRV1gOFdcMkxTMUBFMTc7My8xQjc2Tj45XEc9Z1FHbllPd2Nae2lhd2ljcmhmbWhpcmtpeXBpgHRqfXFmcGZaY1tPWFJGWFJG2pGh2pGhxIuYnoGLgHiAYXF1W3N4V3V6UXh9TnV8THJ6Sm53RmhyQF9pOlReM0pUO05VRVRXT1pZV19cYmhjbXFqdnhvY29rUGVnQF5kN1JZNERKMjk9MzAyQzk3UUE8YUpBbFZNdGFXfW5kfXRsc29rZmppWWVoZWtrdHNug3pygXdtbmZdWlRMSkdASkdAz36Pz36PunuKlnaCenJ8XXB2XXh+XX+DXYeLWIOHVHyCTnR8RWlzO1xoL01aIz1MMEVPQE5SUFdWXGBbamxkeHhtg4F0bXdxWGxtR2RqO1dfN0hNMzs/MzEyRTs5U0I+ZUxEcVtReGdegXdtf3x0cHVwXGtsSWJnWmtscHVyhYB5hHtza2VfU1BKPz46Pz46u3B9u3B9rHF8knR8fXd8aHp9ZH6AYYGDXYWHVnyAT3N4RmhuPVtkNFBZKUJMHjRALT5FP0tMUlhUXGBZZGhha3BocnduYXBsUGlrQmNpO1phOk9TOkVJPD4/TENBWEhDZ05FcV1TeGphgXtyf4J6cXp2YHFyTmhtWm5wanV0eXx4eHhyZGViUVJRQkREQkREqGFqqGFqnmhvjnN3gXx9coSDa4ODZYODXYKDU3Z5SmpuP1xhNE5VLERLIjg/GCwzKjg8P0hHVFhRXWBYXmVeX2lkYGxoVGloR2VoPWNoOl1jPlZaQVBTRkpLU0xJXU5IaVBHcl9VeG5kgIB2f4d/coB8Y3d3U29zW3F0ZHV1bXl3bHRyXWVlT1VYRElORElOmVZcmVZck2Bki3JyhIB+eo2JcIiGaISDXX+AUXFzRmNmOVJXLUNJJjpAHS80FCUpJzM0P0ZCVllQXmFXWmJbVWNgUmRjSWNlQWNmOmJoOl9lQVtfRlhaTlRVWFNQYFNMalJIcmFXeHBmgIN6f4uEc4WAZXx8V3R4W3R3X3V3ZHZ2YnFyWGRnTlhdRk5VRk5VmF5dmF5dk2dlinVyg4F8eouGboWDZYCBWXp+TGxwQl5jNk5SKz9EJDc8Gy0xEiMmJDEyOkRAUVZPV15WUl5bTV9gSV9kQ2BlPWFnOWJoO2FnQl9kSF5iUFxfWlpZYllUbFdPcmVcdnNre4R9eoyHc4eEaYCAYHp9YHl8YXh7YXh7X3N3WmluVV5lUlZdUlZdo3Vso3Vsm3hvjHx1gIB6coJ+Zn19XXl9UXR9R2dwQFxkN05ULUJHJTo/HC81EiUrITI1M0FBRlFOTFhWSVtcR11jRV9oQWBpPWFqOmJqPGJqQmFpRmFpTWBnWGBiYV9ebF9ZcGpkcXVwc4J/c4mIcYeGboSEbIGCaoCCZ36DZH2DY3mAY3B2Y2hsY2FlY2FlrYd4rYd4oYV4joJ4fn93bHt3YHZ5V3N6S257Q2RwPltkN09WL0RJJzxBHDE4EicuHjI3LkBCPU1NQ1RVQlhdQltlQV5sP19sPWBsO2FsPWJsQWNtRGNuSmNuV2RpYGVmbWVhbm5rbXZ1bIGBbYeIb4eHcoaGdoaFcYWHbIOIZoGKZX6HanZ9bm9ycWlqcWlqr5R/r5R/oo58i4R3eXx0ZXNxWnF1Um55R2x9QmRzP11oPFNaNkpOLEFGIDU8FCoyHTM6KT9ENUpOOlBVPVZfP1toQF9wP2BvP2JvPmNvP2RwQmVyRGZ0SGd1VWlyX2tva21sa3JyZ3h6ZH+DZIOIa4WIc4eIe4iHdoiKb4eOaYaSaYSPcn6Eend5gHJxgHJxjnhljnhlhndneXVrb3RuY3NyXXZ6WHeBUnqJUnR/U250VWdmT1xZQFBQLkBDGzE3JDk/LkNIOU1RP1NZQ1piR2JsS2dzSmh0SGp1R2t1R2x2R2x4SGx5Sm15Um94WHB3YHF2X3R6XXd9WnqBWnyDXnyCYnyAZnx/Z4CFaYWNa4qVb4mUeISJgX5+iHp1iHp1c2FQc2FQcGRWa2pgZ25pYnNzX3p+XX+HWoWSXoGJY3x+aXZwY2tiUFxXOUlJIjY8KT1DM0ZMPE9UQlZcSF5lTmduU252Um94UHB5T3F7TXJ8THF8S3F8S3J9T3N9U3R+V3V/V3Z/VXaAU3eAUnZ/U3V9VHN6VXF4XHmBZIOMbYyXdI6YfYmMhoSBjX94jX94UkU2UkU2VE1BWVtUXGZiYHN0Yn+DY4iPZZOebpGWd46LgYl9fH1uZGthR1RRKT1BMENIOEpQQFJYR1lfT2NoV25yXnZ5XHd8Wnh/WHmBVXmCUniBT3iBTHeBTHiETHmGTHqJS3iGS3WDSXJ+SG96Rmx3Q2hzQGVvTnF7XoCLb5CbepScg4+RjYqFlId8lId8PTIlPTIlRT0yUVFJW2FcZXNxZX6BZoiOZpOebpOYdo+Pf4uDeoB1Y21mR1ZVKj9DMENINklPPVBVRFZcTGFmVWxwXXV4WnZ7WHd+VniBVHiCUniCUHeBTXeBTHiES3iGSXmJS3iGTnaCUXR+T293R2dwPV1mNFNcQ2BpVnF6aYKKdIiOfYaHhoSAjIJ7jIJ7LyQZLyQZOjIoTUpCXF1Wa3JuaH1+Z4aLZJGbapGXcY6QeYqGc395Xm1qQ1ZXKT9ELkNINEhNOk1SQFNYSV5iUmltWXJ1V3N5VXR9U3WAUXaBUHaBT3aBTnaBTHaDSneFSHeHTXeEU3eBWnd+WHF1S2RpO1NaLENLO1FYT2JoY3R5bnt+dnt8fXx7g315g315HhQKHhQKLSQbSEE4XVhPcXFqbHx6aISHY4+YZo6Wa4yRcImKan5+V2xuQFZZKEBELENHMEZKNUpOO1BTRFpeTWVpVW1yUm92UHF6T3J9TnN/T3SAT3SAT3WATHWCSnWCR3WEUHeCWXmAZXt9Y3NzUGBiOUhMITA2Mj5DRlBTW2JjZmprbG5vcnJzd3V3d3V3HBEIHBEILCIYST81X1ZMdHBmbXl1Z4CCYIqRY4uTZ4qRbImPZoCFVW90P1lfKURKK0VKLkZLMUhLNkxQP1ZbSGFmT2luTWtzS213Sm56SnB9THJ+TXN/TnSASnOASHKARHGAUHV/XXl+bX18bHVyWGBePkVGJCotMzc5RkhIWVhXY2JhaGlqbnBzc3V6c3V6LB8WLB8WOS0jUEU6YVhNcm1ianVwZHt7XYOJYYeOZomQbIyTaIWMV3V8Q2FoLkxULktSLklOLkdLMUpOOlRZQ15jSWVrSGdvR2lzRmt2R216SXB8SnF+S3OASHF/RXB+Qm59T3N8Xnd7b317cXdyYGVhSk1LNTY1QEFATk5NXVxaZWVkbW5vdHZ7en2Een2EQTAoQTAoSjsxWUxBZFpPb2leZ29qYXRzWXt/XoKIZYiPbY+XaoyVW32GR2pzM1dhMVJbLkxTKkZMLEdMNFBWPFlfQmFnQmNrQmVvQWdyQ2l2RW16RnB9R3KARG99Qm17P2p4Tm94XnV4cn15eHpya2pkW1dSSkRAUUxIWVZTYmBeaWlocnR2e3+FgoiQgoiQVkI5VkI5Wkk/YlRJZ1xQa2ZaZGpjXW5rVnJ0XH2CZIeObpOcbZOeXoWQS3N/OWFtNFlkLU9YJ0VMJ0RLLk1TNVVcO1xjPF5mPGBqPWJtPmZyQWt4Qm58Q3GAQW18Pmp4PGZ0TWx0X3R2dX13fnxydXBna2JYYFNKYlhRZV5ZZ2VibGxsd3p+goePipKdipKdbltQbltQbVxSal9VaGFXZWRaXmhjWWtqU29zWHl/X4KKaI6YZ4+bW4SRTXeEP2l3OF9rMFJcKEZNJkNKK0pRMVBXNVVcN1hgOVtlOl5oPmNuQ2t2R3B9SnWCR3F+RG17QGl3TW11W3J1bXh0d3lxdXNqdGxicmZacmlhcW1pcXFxdHd6foOJiI+Yj5mjj5mjjXltjXlthHRqdW1kamZfXWFbWGRjVGdpT2pxU3R9WX2GYIiTYIuXWISRT3yKRXSCPWd0M1diKUdPJkJKKEZNK0lRLUxUMVFZNVVeOFliPmFqRmt1TXJ+UnqFTnWBSnJ+Rm56Tm53V3B0Y3JwbnRudnduf3puiX1uhX50gX98fICEfoWLh4+Xj5qilqKrlqKrq5iKq5iKm42BgHpza2xnVV5cUWFjT2NoS2ZvTm96U3eDWIGOWYaUVYSSUYGQTH6OQm59NltnKkhRJUFJJUJKJUNLJURLK0lRME9XNVRcPl5mSWt0UnV+W36IVXqEUXaBTHJ9T3B4VG5zWWxtZXBsdnpyi4d6oJWCmZOIkZKPiJCXiJOdkJull6Stnaq0naq0taOVtaOVo5aLhoF6bnBsVWBfUGFkTGJoR2NtSWt2TXN/UnyJVIKQU4KQUYKRUIKSR3OBO2BsME1XKkVOKEVNJkRMJENLKklRME9YNVRdP19nTGx0VnZ/X4CJWn2GVnqDUXaAUnJ6VG91VmtuYnBud313kY6CqqCNoJqPkpSShY2Vgo6Zi5ahk5+omaaumaausKCUsKCUoZaLiIR8dHZxXWhlU2RmSmJnQF9oQmVwRm14S3aDTn2KUH6MUYGOU4OQTXeDRWlyPVpiOFNaM1BXLU1VKUtTLlBZNFZgOFtlQmRtTm94WHeAYX+IXn6GW36GWHyEWHh/WXV6WnB0ZXR0eYF9lJKIrqOUnJaNhoaGcHZ+a3R/dX6IgImRiJGYiJGYrJ2TrJ2Tn5WMi4d/enx1ZnBrVmhoSWJmOVtjOmBqPmdyRHB8SXeETXuHUX+LVoSPU3uFT3F5S2dtRmBmPVtiNVZeLlJbM1hhOF5oPGJtRWl0UXJ7WniBY3+GYoCHYYGIX4OIXn6EXnp/XXV5Z3h7fIaEl5aPsaebmZKMenl5W19nVFpkYGZvbXN6d32Cd32CqJuSqJuSnpSMjYqCf4F5bXZwWGtqSGJlM1dfNFxmOWNuPmt3RXN/SniDUX6IWISNV3+GVnh+VXF1UWtwRmRrO15lMlhhNl5oO2NuPmhzR255U3R+XHmBZX+FZYKIZYSJZYeMY4OIYn+EX3l+aXyAfomJmZmUtKqglo+LcG5wSkxVQUVPT1NbXmFnaWxxaWxxqJuSqJuSnpSMjYqCf4F5bXZwWGtqSGJlM1dfNFxmOWNuPmt3RXN/SniDUX6IWISNV3+GVnh+VXF1UWtwRmRrO15lMlhhNl5oO2NuPmhzR255U3R+XHmBZX+FZYKIZYSJZYeMY4OIYn+EX3l+aXyAfomJmZmUtKqglo+LcG5wSkxVQUVPT1NbXmFnaWxxaWxx";
+    }
+}
+#endif
diff --git a/src/Clients/MainApp/FSpot.Database/Updater.cs b/src/Clients/MainApp/FSpot.Database/Updater.cs
new file mode 100644
index 0000000..faa5faa
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Database/Updater.cs
@@ -0,0 +1,975 @@
+using Mono.Unix;
+using Gtk;
+using System;
+using System.Data;
+using System.Collections;
+
+using FSpot.Utils;
+using FSpot.UI.Dialog;
+
+using Hyena;
+using Hyena.Data.Sqlite;
+
+
+namespace FSpot.Database {
+	public static class Updater {
+		private static ProgressDialog dialog;
+		private static Hashtable updates = new Hashtable ();
+		private static Version db_version;
+		private static FSpotDatabaseConnection db;
+
+		public static bool silent = false;
+
+
+		public static Version LatestVersion {
+			get {
+				if (updates == null || updates.Count == 0)
+					return new Version (0, 0);
+				ArrayList keys = new ArrayList (updates.Keys);
+				keys.Sort ();
+				return keys[keys.Count - 1] as Version;
+			}
+		}
+
+		static Updater () {
+			// Update from version 0 to 1: Remove empty Other tags
+			AddUpdate (new Version ("1"), delegate () {
+				string other_id = SelectSingleString ("SELECT id FROM tags WHERE name = 'Other'");
+
+				if (other_id == null)
+					return;
+
+				// Don't do anything if there are subtags
+				string tag_count = SelectSingleString (
+					String.Format ("SELECT COUNT(*) FROM tags WHERE category_id = {0}", other_id));
+
+				if (tag_count == null || System.Int32.Parse (tag_count) != 0)
+					return;
+
+				// Don't do anything if there are photos tagged with this
+				string photo_count = SelectSingleString (
+					String.Format ("SELECT COUNT(*) FROM photo_tags WHERE tag_id = {0}", other_id));
+
+				if (photo_count == null || System.Int32.Parse (photo_count) != 0)
+					return;
+
+				// Finally, we know that the Other tag exists and has no children, so remove it
+				Execute ("DELETE FROM tags WHERE name = 'Other'");
+			});
+
+			// Update from version 1 to 2: Restore Other tags that were removed leaving dangling child tags
+			AddUpdate (new Version ("2"), delegate () {
+				string tag_count = SelectSingleString ("SELECT COUNT(*) FROM tags WHERE category_id != 0 AND category_id NOT IN (SELECT id FROM tags)");
+
+				// If there are no dangling tags, then don't do anything
+				if (tag_count == null || System.Int32.Parse (tag_count) == 0)
+					return;
+
+				int id = ExecuteScalar ("INSERT INTO tags (name, category_id, is_category, icon) VALUES ('Other', 0, 1, 'stock_icon:f-spot-other.png')");
+
+				Execute (String.Format (
+					"UPDATE tags SET category_id = {0} WHERE id IN "		+
+					"(SELECT id FROM tags WHERE category_id != 0 AND category_id "	+
+					"NOT IN (SELECT id FROM tags))",
+					id));
+
+				Log.Debug ("Other tag restored.  Sorry about that!");
+			});
+
+			// Update from version 2 to 3: ensure that Hidden is the only tag left which is a real tag (not category)
+			AddUpdate (new Version ("3"), delegate () {
+				Execute ("UPDATE tags SET is_category = 1 WHERE name != 'Hidden'");
+			});
+
+			//Version 3.1, clean old (and unused) items in Export
+			AddUpdate (new Version (3, 1), delegate () {
+				if (TableExists ("exports"))
+					ExecuteScalar ("DELETE FROM exports WHERE export_type='fspot:Folder'");
+			});
+
+			//Version 4.0, bump the version number to a integer, for backward compatibility
+			AddUpdate (new Version (4, 0), delegate () {});
+
+
+			//Version 5.0, add a roll_id field to photos, rename table 'imports' to 'rolls'
+			//and fix bgo 324425.
+			AddUpdate (new Version (5, 0), delegate () {
+				Log.Debug ("Will add a roll_id field to photos!");
+				string tmp_photos = MoveTableToTemp ("photos");
+				Execute (
+					"CREATE TABLE photos (                                     " +
+					"	id                 INTEGER PRIMARY KEY NOT NULL,   " +
+					"       time               INTEGER NOT NULL,	   	   " +
+					"       directory_path     STRING NOT NULL,		   " +
+					"       name               STRING NOT NULL,		   " +
+					"       description        TEXT NOT NULL,	           " +
+					"       roll_id            INTEGER NOT NULL,		   " +
+					"       default_version_id INTEGER NOT NULL		   " +
+					")");
+				ExecuteScalar (String.Format("INSERT INTO photos SELECT id, time, directory_path, name, description, 0, default_version_id FROM {0}", tmp_photos));
+
+				Log.Debug ("Will rename imports to rolls!");
+				string tmp_rolls = MoveTableToTemp ("imports");
+				Execute (
+					"CREATE TABLE rolls (                                     " +
+					"	id                 INTEGER PRIMARY KEY NOT NULL,   " +
+					"       time               INTEGER NOT NULL	   	   " +
+					")");
+				ExecuteScalar (String.Format("INSERT INTO rolls SELECT id, time FROM {0}", tmp_rolls));
+
+				Log.Debug ("Cleaning weird descriptions, fixes bug #324425.");
+				Execute ("UPDATE photos SET description = \"\" WHERE description LIKE \"Invalid size of entry%\"");
+			});
+
+
+			//Version 6.0, change tag icon f-spot-tag-other to emblem-generic
+			AddUpdate (new Version (6,0), delegate () {
+				ExecuteScalar ("UPDATE tags SET icon = \"stock_icon:emblem-generic\" " +
+						" WHERE icon LIKE \"stock_icon:f-spot-other.png\"");
+			});
+
+			//Update to version 7.0, keep photo uri instead of path
+			AddUpdate (new Version (7,0), delegate () {
+				string tmp_photos = MoveTableToTemp ("photos");
+				Execute (
+					"CREATE TABLE photos (" +
+					"	id                 INTEGER PRIMARY KEY NOT NULL," +
+					"       time               INTEGER NOT NULL," +
+					"       uri                STRING NOT NULL," +
+					"       description        TEXT NOT NULL," +
+					"       roll_id            INTEGER NOT NULL," +
+					"       default_version_id INTEGER NOT NULL" +
+					")");
+				Execute (String.Format (
+					"INSERT INTO photos (id, time, uri, description, roll_id, default_version_id)	" +
+					"SELECT id, time, 'file://' || directory_path || '/' || name, 		" +
+					"description, roll_id, default_version_id FROM {0}", tmp_photos));
+			}, true);
+
+			// Update to version 8.0, store full version uri
+			AddUpdate (new Version (8,0),delegate () {
+				string tmp_versions = MoveTableToTemp ("photo_versions");
+				Execute (
+					"CREATE TABLE photo_versions (          " +
+					"       photo_id        INTEGER,        " +
+					"       version_id      INTEGER,        " +
+					"       name            STRING,         " +
+					"       uri             STRING NOT NULL " +
+					")");
+
+				IDataReader reader = ExecuteReader (String.Format (
+						"SELECT photo_id, version_id, name, uri " +
+						"FROM {0}, photos " +
+						"WHERE photo_id = id ", tmp_versions));
+
+				while (reader.Read ()) {
+					System.Uri photo_uri = new System.Uri (reader [3] as string);
+					string name_without_extension = System.IO.Path.GetFileNameWithoutExtension (photo_uri.AbsolutePath);
+					string extension = System.IO.Path.GetExtension (photo_uri.AbsolutePath);
+
+					string uri = photo_uri.Scheme + "://" +
+						photo_uri.Host +
+						System.IO.Path.GetDirectoryName (photo_uri.AbsolutePath) + "/" +
+						name_without_extension + " (" + (reader [2]).ToString () + ")" + extension;
+
+					Execute (new HyenaSqliteCommand (
+						"INSERT INTO photo_versions (photo_id, version_id, name, uri) " +
+						"VALUES (?, ?, ?, ?)",
+						Convert.ToUInt32 (reader [0]),
+						Convert.ToUInt32 (reader [1]),
+						(reader [2]).ToString (),
+						uri));
+				}
+
+			}, true);
+
+			// Update to version 9.0
+			AddUpdate (new Version (9,0),delegate () {
+				string tmp_versions = MoveTableToTemp ("photo_versions");
+				Execute (
+					"CREATE TABLE photo_versions (          " +
+					"       photo_id        INTEGER,        " +
+					"       version_id      INTEGER,        " +
+					"       name            STRING,         " +
+					"       uri             STRING NOT NULL," +
+					"	protected	BOOLEAN		" +
+					")");
+				Execute (String.Format (
+					"INSERT INTO photo_versions (photo_id, version_id, name, uri, protected) " +
+					"SELECT photo_id, version_id, name, uri, 0 " +
+					"FROM {0} ", tmp_versions));
+			});
+
+			// Update to version 10.0, make id autoincrement
+			AddUpdate (new Version (10,0),delegate () {
+				string tmp_photos = MoveTableToTemp ("photos");
+				Execute (
+					"CREATE TABLE photos (                                     " +
+					"	id                 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
+					"	time               INTEGER NOT NULL,	   	   " +
+					"	uri		   STRING NOT NULL,		   " +
+					"	description        TEXT NOT NULL,	           " +
+					"	roll_id            INTEGER NOT NULL,		   " +
+					"	default_version_id INTEGER NOT NULL		   " +
+					")");
+
+				Execute (String.Format (
+					"INSERT INTO photos (id, time, uri, description, roll_id, default_version_id) " +
+					"SELECT id, time, uri, description, roll_id, default_version_id  " +
+					"FROM  {0} ", tmp_photos));
+			}, false);
+
+			// Update to version 11.0, rating
+			AddUpdate (new Version (11,0),delegate () {
+				string tmp_photos = MoveTableToTemp ("photos");
+				Execute (
+					"CREATE TABLE photos (                                     " +
+					"	id                 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
+					"	time               INTEGER NOT NULL,	   	   " +
+					"	uri		   STRING NOT NULL,		   " +
+					"	description        TEXT NOT NULL,	           " +
+					"	roll_id            INTEGER NOT NULL,		   " +
+					"	default_version_id INTEGER NOT NULL,		   " +
+					"       rating             INTEGER NULL			   " +
+					")");
+
+				Execute (String.Format (
+					"INSERT INTO photos (id, time, uri, description, roll_id, default_version_id, rating) " +
+					"SELECT id, time, uri, description, roll_id, default_version_id, null  " +
+					"FROM  {0} ", tmp_photos));
+			});
+
+			//Update to version 12.0, remove dead associations, bgo #507950, #488545
+			AddUpdate (new Version (12, 0), delegate () {
+				Execute ("DELETE FROM photo_tags WHERE tag_id NOT IN (SELECT id FROM tags)");
+			});
+
+			// Update to version 13.0
+			AddUpdate (new Version (13,0), delegate () {
+				Execute ("UPDATE photos SET rating = 0 WHERE rating IS NULL");
+			});
+
+			// Update to version 14.0
+			AddUpdate (new Version (14,0), delegate () {
+				Execute ("UPDATE photos SET rating = 0 WHERE rating IS NULL");
+			});
+
+			// Update to version 15.0
+			AddUpdate (new Version (15,0), delegate () {
+				string tmp_photo_tags = MoveTableToTemp ("photo_tags");
+				Execute (
+					"CREATE TABLE photo_tags (        " +
+					"	photo_id      INTEGER,    " +
+					"       tag_id        INTEGER,    " +
+					"       UNIQUE (photo_id, tag_id) " +
+					")");
+				Execute (String.Format (
+					"INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " +
+					"SELECT photo_id, tag_id FROM {0}", tmp_photo_tags));
+				string tmp_photo_versions = MoveTableToTemp ("photo_versions");
+				Execute (
+					"CREATE TABLE photo_versions (		"+
+					"	photo_id	INTEGER,	" +
+					"	version_id	INTEGER,	" +
+					"	name		STRING,		" +
+					"	uri		STRING NOT NULL," +
+					"	protected	BOOLEAN, 	" +
+					"	UNIQUE (photo_id, version_id)	" +
+					")");
+				Execute (String.Format (
+					"INSERT OR IGNORE INTO photo_versions 		" +
+					"(photo_id, version_id, name, uri, protected)	" +
+					"SELECT photo_id, version_id, name, uri, protected FROM {0}", tmp_photo_versions));
+			});
+
+			// Update to version 16.0
+			 AddUpdate (new Version (16,0), delegate () {
+				 string temp_table = MoveTableToTemp ("photos");
+
+				 Execute ("CREATE TABLE photos ( " +
+					  "	id                 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,   " +
+					  "	time               INTEGER NOT NULL,	   	   " +
+					  "	uri		   STRING NOT NULL,		   " +
+					  "	description        TEXT NOT NULL,	           " +
+					  "	roll_id            INTEGER NOT NULL,		   " +
+					  "	default_version_id INTEGER NOT NULL,		   " +
+					  "	rating		   INTEGER NULL,		   " +
+					  "	md5_sum		   TEXT NULL  			   " +
+					  ")"
+				 );
+
+				 Execute (string.Format ("INSERT INTO photos (id, time, uri, description, roll_id, " +
+							 "default_version_id, rating, md5_sum) " +
+							 "SELECT id, time, uri, description, roll_id, " +
+							 "       default_version_id, rating, '' " +
+							 "FROM   {0} ",
+							 temp_table
+							)
+				 );
+
+
+				 string temp_versions_table = MoveTableToTemp ("photo_versions");
+
+				 Execute ("CREATE TABLE photo_versions (    	" +
+					  "      photo_id        INTEGER,  	" +
+					  "      version_id      INTEGER,  	" +
+					  "      name            STRING,    	" +
+					  "	uri		STRING NOT NULL," +
+					  "	md5_sum		STRING NOT NULL," +
+					  "	protected	BOOLEAN		" +
+					  ")");
+
+				 Execute (String.Format ("INSERT INTO photo_versions (photo_id, version_id, name, uri, md5_sum, protected) " +
+							 "SELECT photo_id, version_id, name, uri, '', protected " +
+							 "FROM   {0} ",
+							 temp_versions_table
+							)
+				 );
+
+				 JobStore.CreateTable (db);
+
+				 // This is kind of hacky but should be a lot faster on
+				 // large photo databases
+				 Execute (string.Format ("INSERT INTO jobs (job_type, job_options, run_at, job_priority) " +
+							 "SELECT '{0}', id, {1}, {2} " +
+							 "FROM   photos ",
+							 typeof(Jobs.CalculateHashJob).ToString (),
+							 DateTimeUtil.FromDateTime (DateTime.Now),
+							 0
+							)
+				 );
+			 }, true);
+
+			// Update to version 16.1
+			 AddUpdate (new Version (16,1), delegate () {
+				 Execute ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
+			 }, false);
+
+			// Update to version 16.2
+			 AddUpdate (new Version (16,2), delegate () {
+				 Execute ("CREATE INDEX idx_photos_roll_id ON photos(roll_id)");
+			 }, false);
+
+			// Update to version 16.3
+			AddUpdate (new Version (16,3), delegate () {
+				Execute (String.Format ("DELETE FROM jobs WHERE job_type = '{0}'", typeof(Jobs.CalculateHashJob).ToString ()));
+			}, false);
+
+			// Update to version 16.4
+			AddUpdate (new Version (16,4), delegate () { //fix the tables schema EOL
+				string temp_table = MoveTableToTemp ("exports");
+				Execute (
+					"CREATE TABLE exports (\n" +
+					"	id			INTEGER PRIMARY KEY NOT NULL, \n" +
+					"	image_id		INTEGER NOT NULL, \n" +
+					"	image_version_id	INTEGER NOT NULL, \n" +
+					"	export_type		TEXT NOT NULL, \n" +
+					"	export_token		TEXT NOT NULL\n" +
+					")");
+				Execute (String.Format (
+					"INSERT INTO exports (id, image_id, image_version_id, export_type, export_token) " +
+					"SELECT id, image_id, image_version_id, export_type, export_token " +
+					"FROM {0}", temp_table));
+
+				temp_table = MoveTableToTemp ("jobs");
+				Execute (
+					"CREATE TABLE jobs (\n" +
+					"	id		INTEGER PRIMARY KEY NOT NULL, \n" +
+					"	job_type	TEXT NOT NULL, \n" +
+					"	job_options	TEXT NOT NULL, \n" +
+					"	run_at		INTEGER, \n" +
+					"	job_priority	INTEGER NOT NULL\n" +
+					")");
+				Execute (String.Format (
+					"INSERT INTO jobs (id, job_type, job_options, run_at, job_priority) " +
+					"SELECT id, job_type, job_options, run_at, job_priority " +
+					"FROM {0}", temp_table));
+
+				temp_table = MoveTableToTemp ("meta");
+				Execute (
+					"CREATE TABLE meta (\n" +
+					"	id	INTEGER PRIMARY KEY NOT NULL, \n" +
+					"	name	TEXT UNIQUE NOT NULL, \n" +
+					"	data	TEXT\n" +
+					")");
+				Execute (String.Format (
+					"INSERT INTO meta (id, name, data) " +
+					"SELECT id, name, data " +
+					"FROM {0}", temp_table));
+
+				temp_table = MoveTableToTemp ("photos");
+				Execute (
+					"CREATE TABLE photos (\n" +
+					"	id			INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, \n" +
+					"	time			INTEGER NOT NULL, \n" +
+					"	uri			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" +
+					"	md5_sum			TEXT NULL\n" +
+					")");
+				Execute (String.Format (
+					"INSERT INTO photos (id, time, uri, description, roll_id, default_version_id, rating, md5_sum) " +
+					"SELECT id, time, uri, description, roll_id, default_version_id, rating, md5_sum " +
+					"FROM {0}", temp_table));
+
+				temp_table = MoveTableToTemp ("photo_tags");
+				Execute(
+					"CREATE TABLE photo_tags (\n" +
+					"	photo_id	INTEGER, \n" +
+					"       tag_id		INTEGER, \n" +
+					"       UNIQUE (photo_id, tag_id)\n" +
+					")");
+				Execute (String.Format (
+					"INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " +
+					"SELECT photo_id, tag_id " +
+					"FROM {0}", temp_table));
+
+				temp_table = MoveTableToTemp ("photo_versions");
+				Execute (
+					"CREATE TABLE photo_versions (\n"+
+					"	photo_id	INTEGER, \n" +
+					"	version_id	INTEGER, \n" +
+					"	name		STRING, \n" +
+					"	uri		STRING NOT NULL, \n" +
+					"	md5_sum		STRING NOT NULL, \n" +
+					"	protected	BOOLEAN, \n" +
+					"	UNIQUE (photo_id, version_id)\n" +
+					")");
+				Execute (String.Format (
+					"INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, uri, md5_sum, protected) " +
+					"SELECT photo_id, version_id, name, uri, md5_sum, protected " +
+					"FROM {0}", temp_table));
+
+				Execute ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
+				Execute ("CREATE INDEX idx_photos_roll_id ON photos(roll_id)");
+
+				temp_table = MoveTableToTemp ("rolls");
+				Execute (
+					"CREATE TABLE rolls (\n" +
+					"	id	INTEGER PRIMARY KEY NOT NULL, \n" +
+					"       time	INTEGER NOT NULL\n" +
+					")");
+				Execute (String.Format (
+					"INSERT INTO rolls (id, time) " +
+					"SELECT id, time " +
+					"FROM {0}", temp_table));
+
+				temp_table = MoveTableToTemp ("tags");
+				Execute (
+					"CREATE TABLE tags (\n" +
+					"	id		INTEGER PRIMARY KEY NOT NULL, \n" +
+					"	name		TEXT UNIQUE, \n" +
+					"	category_id	INTEGER, \n" +
+					"	is_category	BOOLEAN, \n" +
+					"	sort_priority	INTEGER, \n" +
+					"	icon		TEXT\n" +
+					")");
+				Execute (String.Format (
+					"INSERT INTO tags (id, name, category_id, is_category, sort_priority, icon) " +
+					"SELECT id, name, category_id, is_category, sort_priority, icon " +
+					"FROM {0}", temp_table));
+			});
+
+			// Update to version 16.5
+			AddUpdate (new Version (16,5), delegate () { //fix md5 null in photos and photo_versions table
+				string temp_table = MoveTableToTemp ("photo_versions");
+				Execute (
+					"CREATE TABLE photo_versions (\n"+
+					"	photo_id	INTEGER, \n" +
+					"	version_id	INTEGER, \n" +
+					"	name		STRING, \n" +
+					"	uri		STRING NOT NULL, \n" +
+					"	md5_sum		TEXT NULL, \n" +
+					"	protected	BOOLEAN, \n" +
+					"	UNIQUE (photo_id, version_id)\n" +
+					")");
+				Execute (String.Format (
+					"INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, uri, md5_sum, protected) " +
+					"SELECT photo_id, version_id, name, uri, md5_sum, protected " +
+					"FROM {0}", temp_table));
+
+				Execute ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
+
+				Execute ("UPDATE photos SET md5_sum = NULL WHERE md5_sum = ''");
+				Execute ("UPDATE photo_versions SET md5_sum = NULL WHERE md5_sum = ''");
+			});
+
+			// Update to version 17.0, split uri and filename
+			AddUpdate (new Version (17,0),delegate () {
+				string tmp_photos = MoveTableToTemp ("photos");
+				string tmp_versions = MoveTableToTemp ("photo_versions");
+
+				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" +
+					"	md5_sum			TEXT NULL\n" +
+					")");
+
+				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" +
+					"	md5_sum		TEXT NULL, \n" +
+					"	protected	BOOLEAN, \n" +
+					"	UNIQUE (photo_id, version_id)\n" +
+					")");
+
+				IDataReader reader = ExecuteReader (String.Format (
+					"SELECT id, time, uri, description, roll_id, default_version_id, rating, md5_sum " +
+					"FROM {0} ", tmp_photos));
+
+				while (reader.Read ()) {
+					System.Uri photo_uri = new System.Uri (reader ["uri"] as string);
+
+					string filename = photo_uri.GetFilename ();
+					Uri base_uri = photo_uri.GetDirectoryUri ();
+
+					string md5 = reader["md5_sum"] != null ? reader ["md5_sum"].ToString () : null;
+
+					Execute (new HyenaSqliteCommand (
+						"INSERT INTO photos (id, time, base_uri, filename, description, roll_id, default_version_id, rating, md5_sum) "	+
+						"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
+						Convert.ToUInt32 (reader ["id"]),
+						reader ["time"],
+						base_uri.ToString (),
+						filename,
+						reader["description"].ToString (),
+						Convert.ToUInt32 (reader ["roll_id"]),
+						Convert.ToUInt32 (reader ["default_version_id"]),
+						Convert.ToUInt32 (reader ["rating"]),
+						String.IsNullOrEmpty (md5) ? null : md5));
+				}
+
+				reader.Close ();
+
+				reader = ExecuteReader (String.Format (
+						"SELECT photo_id, version_id, name, uri, md5_sum, protected " +
+						"FROM {0} ", tmp_versions));
+
+				while (reader.Read ()) {
+					System.Uri photo_uri = new System.Uri (reader ["uri"] as string);
+
+					string filename = photo_uri.GetFilename ();
+					Uri base_uri = photo_uri.GetDirectoryUri ();
+
+					string md5 = reader["md5_sum"] != null ? reader ["md5_sum"].ToString () : null;
+
+					Execute (new HyenaSqliteCommand (
+						"INSERT INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, md5_sum) " +
+						"VALUES (?, ?, ?, ?, ?, ?, ?)",
+						Convert.ToUInt32 (reader ["photo_id"]),
+						Convert.ToUInt32 (reader ["version_id"]),
+						reader["name"].ToString (),
+						base_uri.ToString (),
+						filename,
+						Convert.ToBoolean (reader["protected"]),
+						String.IsNullOrEmpty (md5) ? null : md5));
+				}
+
+				Execute ("CREATE INDEX idx_photos_roll_id ON photos(roll_id)");
+				Execute ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
+
+
+			}, true);
+
+			// Update to version 17.1, Rename 'Import Tags' to 'Imported Tags'
+			AddUpdate (new Version (17,1),delegate () {
+				Execute ("UPDATE tags SET name = 'Imported Tags' WHERE name = 'Import Tags'");
+			});
+
+			// Update to version 17.2, Make sure every photo has an Original version in photo_versions
+			AddUpdate (new Version(17,2),delegate () {
+				// Find photos that have no original version;
+				var have_original_query = "SELECT id FROM photos LEFT JOIN photo_versions AS pv ON pv.photo_id = id WHERE pv.version_id = 1";
+				var no_original_query = String.Format ("SELECT id, base_uri, filename FROM photos WHERE id NOT IN ({0})", have_original_query);
+
+				var reader = ExecuteReader (no_original_query);
+
+				while (reader.Read ()) {
+					Execute (new HyenaSqliteCommand (
+						"INSERT INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, md5_sum) " +
+						"VALUES (?, ?, ?, ?, ?, ?, ?)",
+						Convert.ToUInt32 (reader ["id"]),
+						1,
+						"Original",
+						reader["base_uri"].ToString (),
+						reader["filename"].ToString (),
+						1,
+						""));
+				}
+			}, true);
+
+			// Update to version 18.0, Import MD5 hashes
+			AddUpdate (new Version(18,0),delegate () {
+				string tmp_photos = MoveTableToTemp ("photos");
+				string tmp_versions = MoveTableToTemp ("photo_versions");
+
+				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" +
+					")");
+
+				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" +
+					")");
+
+				var reader = ExecuteReader (String.Format (
+					"SELECT id, time, base_uri, filename, description, roll_id, default_version_id, rating " +
+					"FROM {0} ", tmp_photos));
+
+				while (reader.Read ()) {
+					Execute (new HyenaSqliteCommand (
+						"INSERT INTO photos (id, time, base_uri, filename, description, roll_id, default_version_id, rating) "	+
+						"VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
+						Convert.ToUInt32 (reader ["id"]),
+						reader ["time"],
+						reader ["base_uri"].ToString (),
+						reader ["filename"].ToString (),
+						reader["description"].ToString (),
+						Convert.ToUInt32 (reader ["roll_id"]),
+						Convert.ToUInt32 (reader ["default_version_id"]),
+						Convert.ToUInt32 (reader ["rating"])));
+				}
+
+				reader.Close ();
+
+				reader = ExecuteReader (String.Format (
+						"SELECT photo_id, version_id, name, base_uri, filename, protected " +
+						"FROM {0} ", tmp_versions));
+
+				while (reader.Read ()) {
+					Execute (new HyenaSqliteCommand (
+						"INSERT INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, import_md5) " +
+						"VALUES (?, ?, ?, ?, ?, ?, ?)",
+						Convert.ToUInt32 (reader ["photo_id"]),
+						Convert.ToUInt32 (reader ["version_id"]),
+						reader["name"].ToString (),
+						reader["base_uri"].ToString (),
+						reader["filename"].ToString (),
+						Convert.ToBoolean (reader["protected"]),
+						""));
+				}
+
+				Execute ("CREATE INDEX idx_photo_versions_import_md5 ON photo_versions(import_md5)");
+
+			}, true);
+		}
+
+		private const string meta_db_version_string = "F-Spot Database Version";
+
+		private static Version GetDatabaseVersion ()
+		{
+			if (!TableExists ("meta"))
+				throw new Exception ("No meta table found!");
+
+			var query = String.Format ("SELECT data FROM meta WHERE name = '{0}'", meta_db_version_string);
+			var version_id = SelectSingleString (query);
+			return new Version (version_id);
+		}
+
+		public static void Run (FSpotDatabaseConnection database)
+		{
+			db = database;
+			db_version = GetDatabaseVersion ();
+
+			if (updates.Count == 0)
+				return;
+
+			if (db_version == LatestVersion)
+				return;
+			else if (db_version > LatestVersion) {
+				if (!silent)
+					Log.Information ("The existing database version is more recent than this version of F-Spot expects.");
+				return;
+			}
+
+			uint timer = 0;
+			if (!silent)
+				timer = Log.InformationTimerStart ("Updating F-Spot Database");
+
+			// Only create and show the dialog if one or more of the updates to be done is
+			// marked as being slow
+			bool slow = false;
+			foreach (Version version in updates.Keys) {
+				if (version > db_version && (updates[version] as Update).IsSlow)
+					slow = true;
+					break;
+			}
+
+			if (slow && !silent) {
+				dialog = new ProgressDialog (Catalog.GetString ("Updating F-Spot Database"), ProgressDialog.CancelButtonType.None, 0, null);
+				dialog.Message.Text = Catalog.GetString ("Please wait while your F-Spot gallery's database is updated. This may take some time.");
+				dialog.Bar.Fraction = 0.0;
+				dialog.Modal = false;
+				dialog.SkipTaskbarHint = true;
+				dialog.WindowPosition = WindowPosition.Center;
+				dialog.ShowAll ();
+				dialog.Present ();
+				dialog.QueueDraw ();
+			}
+
+			db.BeginTransaction ();
+			try {
+				ArrayList keys = new ArrayList (updates.Keys);
+				keys.Sort ();
+				foreach (Version version in keys) {
+					if (version <= db_version)
+						continue;
+
+					Pulse ();
+					(updates[version] as Update).Execute (db, db_version);
+				}
+
+				db.CommitTransaction ();
+			} catch (Exception e) {
+				if (!silent) {
+					Log.DebugException (e);
+					Log.Warning ("Rolling back database changes because of Exception");
+				}
+				// There was an error, roll back the database
+				db.RollbackTransaction ();
+
+				// Pass the exception on, this is fatal
+				throw e;
+			}
+
+			if (dialog != null)
+				dialog.Destroy ();
+
+			if (db_version == LatestVersion && !silent)
+				Log.InformationTimerPrint (timer, "Database updates completed successfully (in {0}).");
+		}
+
+		private static void AddUpdate (Version version, UpdateCode code)
+		{
+			AddUpdate (version, code, false);
+		}
+
+		private static void AddUpdate (Version version, UpdateCode code, bool is_slow)
+		{
+			updates[version] = new Update (version, code, is_slow);
+		}
+
+		public static void Pulse ()
+		{
+			if (dialog != null) {
+				dialog.Bar.Pulse ();
+				dialog.ShowAll ();
+			}
+		}
+
+		private static int Execute (string statement)
+		{
+			return db.Execute (statement);
+		}
+
+		private static int Execute (HyenaSqliteCommand command)
+		{
+			return db.Execute (command);
+		}
+
+		private static int ExecuteScalar (string statement)
+		{
+			return db.Execute(statement);
+		}
+
+		private static IDataReader ExecuteReader (string statement)
+		{
+			return db.Query (statement);
+		}
+
+		private static bool TableExists (string table)
+		{
+			return db.TableExists (table);
+		}
+
+		private static string SelectSingleString (string statement)
+		{
+			string result = null;
+
+			try {
+				result = db.Query<string> (statement);
+			} catch (Exception) {}
+
+			return result;
+		}
+
+		private static string MoveTableToTemp (string table_name)
+		{
+			string temp_name = table_name + "_temp";
+
+			// Get the table definition for the table we are copying
+			string sql = SelectSingleString (String.Format ("SELECT sql FROM sqlite_master WHERE tbl_name = '{0}' AND type = 'table' ORDER BY type DESC", table_name));
+
+			// Drop temp table if already exists
+			Execute ("DROP TABLE IF EXISTS " + temp_name);
+
+			// Change the SQL to create the temp table
+			Execute (sql.Replace ("CREATE TABLE " + table_name, "CREATE TEMPORARY TABLE " + temp_name));
+
+			// Copy the data
+			ExecuteScalar (String.Format ("INSERT INTO {0} SELECT * FROM {1}", temp_name, table_name));
+
+			// Delete the original table
+			Execute ("DROP TABLE " + table_name);
+
+			return temp_name;
+		}
+
+		private delegate void UpdateCode ();
+
+		private class Update {
+			public Version Version;
+			private UpdateCode code;
+			public bool IsSlow = false;
+
+			public Update (Version to_version, UpdateCode code, bool slow)
+			{
+				this.Version = to_version;
+				this.code = code;
+				IsSlow = slow;
+			}
+
+			public Update (Version to_version, UpdateCode code)
+			{
+				this.Version = to_version;
+				this.code = code;
+			}
+
+			public void Execute (HyenaSqliteConnection db, Version db_version)
+			{
+				code ();
+
+				if (!silent)
+					Log.DebugFormat ("Updated database from version {0} to {1}",
+							db_version.ToString (),
+							Version.ToString ());
+
+				db_version = Version;
+				db.Execute(new HyenaSqliteCommand("UPDATE meta SET data = ? WHERE name = ?", db_version.ToString (), meta_db_version_string));
+			}
+		}
+
+		public class Version : IComparable {
+			int maj = 0;
+			int min = 0;
+
+			public Version (int maj, int min)
+			{
+				this.maj = maj;
+				this.min = min;
+			}
+
+			public Version (string version)
+			{
+				string [] parts = version.Split (new char [] {'.'}, 2);
+				try {
+					this.maj = Convert.ToInt32 (parts [0]);
+				}
+				catch (Exception) {
+					this.maj = 0;
+				}
+				try {
+					this.min = Convert.ToInt32 (parts [1]);
+				}
+				catch (Exception) {
+					this.min = 0;
+				}
+			}
+
+			//IComparable
+			public int CompareTo (object obj) {
+				if (this.GetType () == obj.GetType ())
+					return Compare (this, (Version)obj);
+				else
+					throw new Exception ("Object must be of type Version");
+			}
+
+			public int CompareTo (Version version)
+			{
+				return Compare (this, version);
+			}
+
+			public static int Compare (Version v1, Version v2)
+			{
+				if (v1.maj == v2.maj)
+					return v1.min.CompareTo (v2.min);
+				return v1.maj.CompareTo (v2.maj);
+			}
+
+			public override string ToString ()
+			{
+				if (min == 0)
+					return maj.ToString ();
+				return maj + "." + min;
+			}
+
+			public override bool Equals (object obj)
+			{
+				return obj is Version && this == (Version)obj;
+			}
+
+			public override int GetHashCode ()
+			{
+				return maj ^ min;
+			}
+
+			public static bool operator == (Version v1, Version v2)
+			{
+				return v1.maj == v2.maj && v1.min == v2.min;
+			}
+
+			public static bool operator != (Version v1, Version v2)
+			{
+				return !(v1 == v2);
+			}
+
+			public static bool operator < (Version v1, Version v2)
+			{
+				return Compare (v1,v2) < 0;
+			}
+
+			public static bool operator > (Version v1, Version v2)
+			{
+				return Compare (v1,v2) > 0;
+			}
+
+			public static bool operator <= (Version v1, Version v2)
+			{
+				return !(v1 > v2);
+			}
+
+			public static bool operator >= (Version v1, Version v2)
+			{
+				return !(v1 < v2);
+			}
+		}
+	}
+}
diff --git a/src/Editors/AutoStretchEditor.cs b/src/Clients/MainApp/FSpot.Editors/AutoStretchEditor.cs
similarity index 100%
rename from src/Editors/AutoStretchEditor.cs
rename to src/Clients/MainApp/FSpot.Editors/AutoStretchEditor.cs
diff --git a/src/Editors/ColorEditor.cs b/src/Clients/MainApp/FSpot.Editors/ColorEditor.cs
similarity index 100%
rename from src/Editors/ColorEditor.cs
rename to src/Clients/MainApp/FSpot.Editors/ColorEditor.cs
diff --git a/src/Clients/MainApp/FSpot.Editors/CropEditor.cs b/src/Clients/MainApp/FSpot.Editors/CropEditor.cs
new file mode 100644
index 0000000..c124ca0
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Editors/CropEditor.cs
@@ -0,0 +1,186 @@
+/*
+ * CropEditor.cs
+ *
+ * Author(s)
+ * 	Ruben Vermeersch <ruben at savanne.be>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using FSpot;
+using FSpot.UI.Dialog;
+using FSpot.Utils;
+using Hyena;
+using Gdk;
+using Gtk;
+using Mono.Unix;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Xml.Serialization;
+
+namespace FSpot.Editors {
+	class CropEditor : Editor {
+		private TreeStore constraints_store;
+		private ComboBox constraints_combo;
+
+		public enum ConstraintType {
+			Normal,
+			AddCustom,
+			SameAsPhoto
+		}
+
+		private List<SelectionRatioDialog.SelectionConstraint> custom_constraints;
+
+		private static SelectionRatioDialog.SelectionConstraint [] default_constraints = {
+			new SelectionRatioDialog.SelectionConstraint (Catalog.GetString ("4 x 3 (Book)"), 4.0 / 3.0),
+			new SelectionRatioDialog.SelectionConstraint (Catalog.GetString ("4 x 6 (Postcard)"), 6.0 / 4.0),
+			new SelectionRatioDialog.SelectionConstraint (Catalog.GetString ("5 x 7 (L, 2L)"), 7.0 / 5.0),
+			new SelectionRatioDialog.SelectionConstraint (Catalog.GetString ("8 x 10"), 10.0 / 8.0),
+			new SelectionRatioDialog.SelectionConstraint (Catalog.GetString ("Square"), 1.0)
+		};
+
+		public CropEditor () : base (Catalog.GetString ("Crop"), "crop") {
+			NeedsSelection = true;
+
+			Preferences.SettingChanged += OnPreferencesChanged;
+
+			Initialized += delegate { State.PhotoImageView.PhotoChanged += delegate { UpdateSelectionCombo (); }; };
+		}
+
+		private void OnPreferencesChanged (object sender, NotifyEventArgs args)
+		{
+			LoadPreference (args.Key);
+		}
+
+		private void LoadPreference (String key)
+		{
+			switch (key) {
+			case Preferences.CUSTOM_CROP_RATIOS:
+				custom_constraints = new List<SelectionRatioDialog.SelectionConstraint> ();
+				if (Preferences.Get<string[]> (key) != null) {
+					XmlSerializer serializer = new XmlSerializer (typeof(SelectionRatioDialog.SelectionConstraint));
+					foreach (string xml in Preferences.Get<string[]> (key))
+						custom_constraints.Add ((SelectionRatioDialog.SelectionConstraint)serializer.Deserialize (new StringReader (xml)));
+				}
+				PopulateConstraints ();
+				break;
+			}
+		}
+
+		public override Widget ConfigurationWidget () {
+			VBox vbox = new VBox ();
+
+			Label info = new Label (Catalog.GetString ("Select the area that needs cropping."));
+
+			constraints_combo = new ComboBox ();
+			CellRendererText constraint_name_cell = new CellRendererText ();
+			CellRendererPixbuf constraint_pix_cell = new CellRendererPixbuf ();
+			constraints_combo.PackStart (constraint_name_cell, true);
+			constraints_combo.PackStart (constraint_pix_cell, false);
+			constraints_combo.SetCellDataFunc (constraint_name_cell, new CellLayoutDataFunc (ConstraintNameCellFunc));
+			constraints_combo.SetCellDataFunc (constraint_pix_cell, new CellLayoutDataFunc (ConstraintPixCellFunc));
+			constraints_combo.Changed += HandleConstraintsComboChanged;
+
+			// FIXME: need tooltip Catalog.GetString ("Constrain the aspect ratio of the selection")
+
+			LoadPreference (Preferences.CUSTOM_CROP_RATIOS);
+
+			vbox.Add (info);
+			vbox.Add (constraints_combo);
+
+			return vbox;
+		}
+
+		private void PopulateConstraints()
+		{
+			constraints_store = new TreeStore (typeof (string), typeof (string), typeof (double), typeof (ConstraintType));
+			constraints_combo.Model = constraints_store;
+			constraints_store.AppendValues (null, Catalog.GetString ("No Constraint"), 0.0, ConstraintType.Normal);
+			constraints_store.AppendValues (null, Catalog.GetString ("Same as photo"), 0.0, ConstraintType.SameAsPhoto);
+			foreach (SelectionRatioDialog.SelectionConstraint constraint in custom_constraints)
+				constraints_store.AppendValues (null, constraint.Label, constraint.XyRatio, ConstraintType.Normal);
+			foreach (SelectionRatioDialog.SelectionConstraint constraint in default_constraints)
+				constraints_store.AppendValues (null, constraint.Label, constraint.XyRatio, ConstraintType.Normal);
+			constraints_store.AppendValues (Stock.Edit, Catalog.GetString ("Custom Ratios..."), 0.0, ConstraintType.AddCustom);
+			constraints_combo.Active = 0;
+		}
+
+		public void UpdateSelectionCombo ()
+		{
+			if (!StateInitialized || constraints_combo == null)
+				// Don't bomb out on instant-apply.
+				return;
+
+			//constraints_combo.Active = 0;
+			TreeIter iter;
+			if (constraints_combo.GetActiveIter (out iter)) {
+				if (((ConstraintType)constraints_store.GetValue (iter, 3)) == ConstraintType.SameAsPhoto)
+					constraints_combo.Active = 0;
+			}
+		}
+
+		private void HandleConstraintsComboChanged (object o, EventArgs e)
+		{
+			if (State.PhotoImageView == null) {
+				Log.Debug ("PhotoImageView is null");
+				return;
+			}
+
+			TreeIter iter;
+			if (constraints_combo.GetActiveIter (out iter)) {
+				double ratio = ((double)constraints_store.GetValue (iter, 2));
+				ConstraintType type = ((ConstraintType)constraints_store.GetValue (iter, 3));
+				switch (type) {
+				case ConstraintType.Normal:
+					State.PhotoImageView.SelectionXyRatio = ratio;
+					break;
+				case ConstraintType.AddCustom:
+					SelectionRatioDialog dialog = new SelectionRatioDialog ();
+					dialog.Dialog.Run ();
+					break;
+				case ConstraintType.SameAsPhoto:
+					try {
+						Pixbuf pb = State.PhotoImageView.CompletePixbuf ();
+						State.PhotoImageView.SelectionXyRatio = (double)pb.Width / (double)pb.Height;
+					} catch (System.Exception ex) {
+						Log.WarningFormat ("Exception in selection ratio's: {0}", ex);
+						State.PhotoImageView.SelectionXyRatio = 0;
+					}
+					break;
+				default:
+					State.PhotoImageView.SelectionXyRatio = 0;
+					break;
+				}
+			}
+		}
+
+		void ConstraintNameCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
+		{
+			string name = (string)tree_model.GetValue (iter, 1);
+			(cell as CellRendererText).Text = name;
+		}
+
+		void ConstraintPixCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
+		{
+			string stockname = (string)tree_model.GetValue (iter, 0);
+			if (stockname != null)
+				(cell as CellRendererPixbuf).Pixbuf = GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, stockname, 16, (Gtk.IconLookupFlags)0);
+			else
+				(cell as CellRendererPixbuf).Pixbuf = null;
+		}
+
+		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
+			Rectangle selection = FSpot.Utils.PixbufUtils.TransformOrientation ((int)State.PhotoImageView.PixbufOrientation <= 4 ? input.Width : input.Height,
+											    (int)State.PhotoImageView.PixbufOrientation <= 4 ? input.Height : input.Width,
+											    State.Selection, State.PhotoImageView.PixbufOrientation);
+			Pixbuf edited = new Pixbuf (input.Colorspace,
+						 input.HasAlpha, input.BitsPerSample,
+						 selection.Width, selection.Height);
+
+			input.CopyArea (selection.X, selection.Y,
+					selection.Width, selection.Height, edited, 0, 0);
+			return edited;
+		}
+	}
+}
diff --git a/src/Editors/DesaturateEditor.cs b/src/Clients/MainApp/FSpot.Editors/DesaturateEditor.cs
similarity index 100%
rename from src/Editors/DesaturateEditor.cs
rename to src/Clients/MainApp/FSpot.Editors/DesaturateEditor.cs
diff --git a/src/Clients/MainApp/FSpot.Editors/Editor.cs b/src/Clients/MainApp/FSpot.Editors/Editor.cs
new file mode 100644
index 0000000..089641c
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Editors/Editor.cs
@@ -0,0 +1,280 @@
+/*
+ * Editor.cs
+ *
+ * Author(s)
+ * 	Ruben Vermeersch <ruben at savanne.be>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using Hyena;
+
+using FSpot.Core;
+using FSpot.Widgets;
+using FSpot.Imaging;
+
+using Gdk;
+using Gtk;
+
+using Mono.Addins;
+using Mono.Unix;
+
+using System;
+
+namespace FSpot.Editors {
+	[ExtensionNode ("Editor")]
+	public class EditorNode : ExtensionNode {
+		[NodeAttribute (Required=true)]
+		protected string editor_type;
+
+		public Editor GetEditor () {
+			return (Editor) Addin.CreateInstance (editor_type);
+		}
+	}
+
+	public class EditorState {
+		// The area selected by the user.
+		public Rectangle Selection;
+
+		// The images selected by the user.
+		public IBrowsableItem [] Items;
+
+		// The view, into which images are shown (null if we are in the browse view).
+		public PhotoImageView PhotoImageView;
+
+		// Has a portion of the image been selected?
+		public bool HasSelection {
+			get { return Selection != Rectangle.Zero; }
+		}
+
+		// Is the user in browse mode?
+		public bool InBrowseMode {
+			get { return PhotoImageView == null; }
+		}
+	}
+
+	// This is the base class from which all editors inherit.
+	public abstract class Editor {
+		public delegate void ProcessingStartedHandler (string name, int count);
+		public delegate void ProcessingStepHandler (int done);
+		public delegate void ProcessingFinishedHandler ();
+
+		public event ProcessingStartedHandler ProcessingStarted;
+		public event ProcessingStepHandler ProcessingStep;
+		public event ProcessingFinishedHandler ProcessingFinished;
+
+		// Contains the current selection, the items being edited, ...
+		private EditorState state;
+		public EditorState State {
+			get {
+				if (!StateInitialized)
+					throw new ApplicationException ("Editor has not been initialized yet!");
+
+				return state;
+			}
+			private set { state = value; }
+		}
+
+		public bool StateInitialized {
+			get { return state != null; }
+		}
+
+
+		// Whether the user needs to select a part of the image before it can be applied.
+		public bool NeedsSelection = false;
+
+		// A tool can be applied if it doesn't need a selection, or if it has one.
+		public bool CanBeApplied {
+			get {
+				Log.DebugFormat ("{0} can be applied? {1}", this, !NeedsSelection || (NeedsSelection && State.HasSelection));
+				return !NeedsSelection || (NeedsSelection && State.HasSelection);
+			}
+		}
+
+		private bool can_handle_multiple = false;
+		public bool CanHandleMultiple {
+			get { return can_handle_multiple; }
+			protected set { can_handle_multiple = value; }
+		}
+
+
+		protected void LoadPhoto (Photo photo, out Pixbuf photo_pixbuf, out Cms.Profile photo_profile) {
+			// FIXME: We might get this value from the PhotoImageView.
+			using (var img = ImageFile.Create (photo.DefaultVersion.Uri)) {
+				photo_pixbuf = img.Load ();
+				photo_profile = img.GetProfile ();
+			}
+		}
+
+		// The human readable name for this action.
+		public readonly string Label;
+
+		// The label on the apply button (usually shorter than the label).
+		private string apply_label = "";
+		public string ApplyLabel {
+			get { return apply_label == "" ? Label : apply_label; }
+			protected set { apply_label = value; }
+		}
+
+
+		// The icon name for this action (will be loaded from the theme).
+		public readonly string IconName;
+
+		public Editor (string label, string icon_name) {
+			Label = label;
+			IconName = icon_name;
+		}
+
+		// Apply the editor's action to a photo.
+		public void Apply () {
+			try {
+				if (ProcessingStarted != null) {
+					ProcessingStarted (Label, State.Items.Length);
+				}
+				TryApply ();
+			} finally {
+				if (ProcessingFinished != null) {
+					ProcessingFinished ();
+				}
+			}
+		}
+
+		private void TryApply () {
+			if (NeedsSelection && !State.HasSelection) {
+				throw new Exception ("Cannot apply without selection!");
+			}
+
+			int done = 0;
+			foreach (Photo photo in State.Items) {
+				Pixbuf input;
+				Cms.Profile input_profile;
+				LoadPhoto (photo, out input, out input_profile);
+
+				Pixbuf edited = Process (input, input_profile);
+				input.Dispose ();
+
+				bool create_version = photo.DefaultVersion.IsProtected;
+				photo.SaveVersion (edited, create_version);
+				photo.Changes.DataChanged = true;
+				App.Instance.Database.Photos.Commit (photo);
+
+				done++;
+				if (ProcessingStep != null) {
+					ProcessingStep (done);
+				}
+			}
+
+			Reset ();
+		}
+
+		protected abstract Pixbuf Process (Pixbuf input, Cms.Profile input_profile);
+
+		protected virtual Pixbuf ProcessFast (Pixbuf input, Cms.Profile input_profile) {
+			return Process (input, input_profile);
+		}
+
+		private bool has_settings;
+		public bool HasSettings {
+			get { return has_settings; }
+			protected set { has_settings = value; }
+		}
+
+		private Pixbuf original;
+		private Pixbuf preview;
+		protected void UpdatePreview () {
+			if (State.InBrowseMode) {
+				throw new Exception ("Previews cannot be made in browse mode!");
+			}
+
+			if (State.Items.Length > 1) {
+				throw new Exception ("We should have one item selected when this happened, otherwise something is terribly wrong.");
+			}
+
+			if (original == null) {
+				original = State.PhotoImageView.Pixbuf;
+			}
+
+			Pixbuf old_preview = null;
+			if (preview == null) {
+				int width, height;
+				CalcPreviewSize (original, out width, out height);
+				preview = original.ScaleSimple (width, height, InterpType.Nearest);
+			} else {
+				// We're updating a previous preview
+				old_preview = State.PhotoImageView.Pixbuf;
+			}
+
+			Pixbuf previewed = ProcessFast (preview, null);
+			State.PhotoImageView.Pixbuf = previewed;
+			State.PhotoImageView.ZoomFit (false);
+			App.Instance.Organizer.InfoBox.UpdateHistogram (previewed);
+
+			if (old_preview != null) {
+				old_preview.Dispose ();
+			}
+		}
+
+		private void CalcPreviewSize (Pixbuf input, out int width, out int height) {
+			int awidth = State.PhotoImageView.Allocation.Width;
+			int aheight = State.PhotoImageView.Allocation.Height;
+			int iwidth = input.Width;
+			int iheight = input.Height;
+
+			if (iwidth <= awidth && iheight <= aheight) {
+				// Do not upscale
+				width = iwidth;
+				height = iheight;
+			} else {
+				double wratio = (double) iwidth / awidth;
+				double hratio = (double) iheight / aheight;
+
+				double ratio = Math.Max (wratio, hratio);
+				width = (int) (iwidth / ratio);
+				height = (int) (iheight / ratio);
+			}
+			//Log.Debug ("Preview size: Allocation: {0}x{1}, Input: {2}x{3}, Result: {4}x{5}", awidth, aheight, iwidth, iheight, width, height);
+		}
+
+		public void Restore () {
+			if (original != null && State.PhotoImageView != null) {
+				State.PhotoImageView.Pixbuf = original;
+				State.PhotoImageView.ZoomFit (false);
+
+				App.Instance.Organizer.InfoBox.UpdateHistogram (null);
+			}
+
+			Reset ();
+		}
+
+		private void Reset () {
+			if (preview != null) {
+				preview.Dispose ();
+			}
+
+			preview = null;
+			original = null;
+			State = null;
+		}
+
+		// Can be overriden to provide a specific configuration widget.
+		// Returning null means no configuration widget.
+		public virtual Widget ConfigurationWidget () {
+			return null;
+		}
+
+
+		public virtual EditorState CreateState () {
+			return new EditorState ();
+		}
+
+		public delegate void InitializedHandler ();
+		public event InitializedHandler Initialized;
+
+		public void Initialize (EditorState state) {
+			State = state;
+
+			if (Initialized != null)
+				Initialized ();
+		}
+	}
+}
diff --git a/src/Editors/RedEyeEditor.cs b/src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs
similarity index 100%
rename from src/Editors/RedEyeEditor.cs
rename to src/Clients/MainApp/FSpot.Editors/RedEyeEditor.cs
diff --git a/src/Editors/SepiaEditor.cs b/src/Clients/MainApp/FSpot.Editors/SepiaEditor.cs
similarity index 100%
rename from src/Editors/SepiaEditor.cs
rename to src/Clients/MainApp/FSpot.Editors/SepiaEditor.cs
diff --git a/src/Clients/MainApp/FSpot.Editors/SoftFocusEditor.cs b/src/Clients/MainApp/FSpot.Editors/SoftFocusEditor.cs
new file mode 100644
index 0000000..592d06f
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Editors/SoftFocusEditor.cs
@@ -0,0 +1,85 @@
+/*
+ * SoftFocusEditor.cs
+ *
+ * Author(s)
+ * 	Ruben Vermeersch <ruben at savanne.be>
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * Copyright (c) 2009 Stephane Delcroix
+ *
+ * This is open source software. See COPYING for details.
+ */
+
+using System;
+using Mono.Unix;
+using Cairo;
+using Gdk;
+using Gtk;
+
+using FSpot.Widgets;
+
+
+
+
+namespace FSpot.Editors
+{
+	// TODO: This had a keybinding e. Maybe we should add it back, but did people even knew it?
+	class SoftFocusEditor : Editor
+	{
+		double radius;
+		Scale scale;
+
+		public SoftFocusEditor () : base (Catalog.GetString ("Soft Focus"), "filter-soft-focus")
+		{
+			// FIXME: need tooltip Catalog.GetString ("Create a soft focus visual effect")
+			HasSettings = true;
+		}
+
+		public override Widget ConfigurationWidget ()
+		{
+			scale = new HScale (0, 1, .01);
+			scale.Value = 0.5;
+			scale.ValueChanged += HandleValueChanged;
+			return scale;
+		}
+
+
+		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
+			return ProcessImpl (input, input_profile, false);
+		}
+
+		protected override Pixbuf ProcessFast (Pixbuf input, Cms.Profile input_profile)
+		{
+			return ProcessImpl (input, input_profile, true);
+		}
+
+
+		private Pixbuf ProcessImpl (Pixbuf input, Cms.Profile input_profile, bool fast) {
+			Pixbuf result;
+			using (ImageInfo info = new ImageInfo (input)) {
+				using (Widgets.SoftFocus soft = new Widgets.SoftFocus (info)) {
+					soft.Radius = radius;
+
+					using (MemorySurface surface = new MemorySurface (Format.Argb32,
+										   input.Width,
+										   input.Height)) {
+
+						using (Context ctx = new Context (surface)) {
+							soft.Apply (ctx, info.Bounds);
+						}
+
+						result = MemorySurface.CreatePixbuf (surface);
+						surface.Flush ();
+					}
+				}
+			}
+			return result;
+		}
+
+		private void HandleValueChanged (object sender, System.EventArgs args)
+		{
+			radius = scale.Value;
+			UpdatePreview ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Editors/TiltEditor.cs b/src/Clients/MainApp/FSpot.Editors/TiltEditor.cs
new file mode 100644
index 0000000..a238e9c
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Editors/TiltEditor.cs
@@ -0,0 +1,82 @@
+/*
+ * FSpot.Editors.TiltEditor.cs
+ *
+ * Author(s)
+ * 	Ruben Vermeersch <ruben at savanne.be>
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * Copyright (c) 2009 Stephane Delcroix
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Mono.Unix;
+
+using Gdk;
+using Gtk;
+using Cairo;
+
+using FSpot.Widgets;
+
+namespace FSpot.Editors
+{
+	// TODO: there were keybindings (left/right) to adjust tilt, maybe they should be added back.
+	class TiltEditor : Editor
+	{
+		double angle;
+		Scale scale;
+
+		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 ()
+		{
+			scale = new HScale (-45, 45, 1);
+			scale.Value = 0.0;
+			scale.ValueChanged += HandleValueChanged;
+			return scale;
+		}
+
+
+		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
+			return ProcessImpl (input, input_profile, false);
+		}
+
+		protected override Pixbuf ProcessFast (Pixbuf input, Cms.Profile input_profile)
+		{
+			return ProcessImpl (input, input_profile, true);
+		}
+
+
+		private Pixbuf ProcessImpl (Pixbuf input, Cms.Profile input_profile, bool fast) {
+			Pixbuf result;
+			using (ImageInfo info = new ImageInfo (input)) {
+				using (MemorySurface surface = new MemorySurface (Format.Argb32,
+									   input.Width,
+									   input.Height)) {
+					using (Context ctx = new Context (surface)) {
+						ctx.Matrix = info.Fill (info.Bounds, angle);
+						using (SurfacePattern p = new SurfacePattern (info.Surface)) {
+							if (fast)
+								p.Filter =  Filter.Fast;
+							ctx.Source = p;
+							ctx.Paint ();
+						}
+						result = MemorySurface.CreatePixbuf (surface);
+						surface.Flush ();
+					}
+				}
+			}
+			return result;
+		}
+
+		private void HandleValueChanged (object sender, System.EventArgs args)
+		{
+			angle = scale.Value * Math.PI / -180;
+			UpdatePreview ();
+		}
+	}
+}
diff --git a/src/Extensions/CommandMenuItemNode.cs b/src/Clients/MainApp/FSpot.Extensions/CommandMenuItemNode.cs
similarity index 100%
rename from src/Extensions/CommandMenuItemNode.cs
rename to src/Clients/MainApp/FSpot.Extensions/CommandMenuItemNode.cs
diff --git a/src/Clients/MainApp/FSpot.Extensions/ComplexMenuItemNode.cs b/src/Clients/MainApp/FSpot.Extensions/ComplexMenuItemNode.cs
new file mode 100644
index 0000000..86bfa5b
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Extensions/ComplexMenuItemNode.cs
@@ -0,0 +1,45 @@
+/*
+ * FSpot.Extensions.ComplexMenuItemNode
+ *
+ * Author(s)
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using Mono.Addins;
+using FSpot.Widgets;
+using System;
+
+namespace FSpot.Extensions
+{
+	[ExtensionNode ("ComplexMenuItem")]
+	public class ComplexMenuItemNode : MenuNode
+	{
+		[NodeAttribute]
+		protected string widget_type;
+
+		[NodeAttribute]
+		protected string command_type;
+
+		ICommand cmd;
+
+		public override Gtk.MenuItem GetMenuItem (object parent)
+		{
+			ComplexMenuItem item = System.Activator.CreateInstance (Type.GetType (widget_type), parent) as ComplexMenuItem;
+			cmd = (ICommand) Addin.CreateInstance (command_type);
+
+			if (item != null)
+				item.Changed += OnChanged;
+			return item;
+		}
+
+		private void OnChanged (object o, EventArgs e)
+		{
+			if (cmd != null)
+				cmd.Run (o, e);
+		}
+	}
+
+}
diff --git a/src/Extensions/ExportMenuItemNode.cs b/src/Clients/MainApp/FSpot.Extensions/ExportMenuItemNode.cs
similarity index 100%
rename from src/Extensions/ExportMenuItemNode.cs
rename to src/Clients/MainApp/FSpot.Extensions/ExportMenuItemNode.cs
diff --git a/src/Extensions/ICommand.cs b/src/Clients/MainApp/FSpot.Extensions/ICommand.cs
similarity index 100%
rename from src/Extensions/ICommand.cs
rename to src/Clients/MainApp/FSpot.Extensions/ICommand.cs
diff --git a/src/Clients/MainApp/FSpot.Extensions/IExporter.cs b/src/Clients/MainApp/FSpot.Extensions/IExporter.cs
new file mode 100644
index 0000000..d59bcfe
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Extensions/IExporter.cs
@@ -0,0 +1,22 @@
+/*
+ * IExporter.cs
+ *
+ * Author(s)
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using Mono.Addins;
+using System;
+
+using FSpot.Core;
+
+namespace FSpot.Extensions
+{
+	public interface IExporter
+	{
+		void Run (IBrowsableCollection selection);
+	}
+}
diff --git a/src/Extensions/IMenuGenerator.cs b/src/Clients/MainApp/FSpot.Extensions/IMenuGenerator.cs
similarity index 100%
rename from src/Extensions/IMenuGenerator.cs
rename to src/Clients/MainApp/FSpot.Extensions/IMenuGenerator.cs
diff --git a/src/Extensions/IService.cs b/src/Clients/MainApp/FSpot.Extensions/IService.cs
similarity index 100%
rename from src/Extensions/IService.cs
rename to src/Clients/MainApp/FSpot.Extensions/IService.cs
diff --git a/src/Clients/MainApp/FSpot.Extensions/MenuNode.cs b/src/Clients/MainApp/FSpot.Extensions/MenuNode.cs
new file mode 100644
index 0000000..62d98a6
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Extensions/MenuNode.cs
@@ -0,0 +1,118 @@
+/*
+ * MenuNode.cs
+ *
+ * Author(s):
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ *
+ */
+
+using System;
+using Mono.Addins;
+using Mono.Unix;
+
+namespace FSpot.Extensions
+{
+	[ExtensionNode ("Menu")]
+	[ExtensionNodeChild (typeof (MenuItemNode))]
+	[ExtensionNodeChild (typeof (ExportMenuItemNode))]
+	[ExtensionNodeChild (typeof (CommandMenuItemNode))]
+	[ExtensionNodeChild (typeof (MenuSeparatorNode))]
+	[ExtensionNodeChild (typeof (SubmenuNode))]
+	[ExtensionNodeChild (typeof (MenuGeneratorNode))]
+	[ExtensionNodeChild (typeof (ComplexMenuItemNode))]
+	public class SubmenuNode : MenuNode
+	{
+		public override Gtk.MenuItem GetMenuItem (object parent)
+		{
+			Gtk.MenuItem item = base.GetMenuItem (parent);
+
+			Gtk.Menu submenu = GetSubmenu (parent);
+
+			if (item.Submenu != null)
+				item.Submenu.Dispose ();
+
+			item.Submenu = submenu;
+			return item;
+		}
+
+		public Gtk.Menu GetSubmenu ()
+		{
+			return GetSubmenu (null);
+		}
+
+		public Gtk.Menu GetSubmenu (object parent)
+		{
+			Gtk.Menu submenu = new Gtk.Menu ();
+
+			foreach (MenuNode node in ChildNodes)
+				submenu.Insert (node.GetMenuItem (parent), -1);
+
+			return submenu;
+		}
+	}
+
+	[ExtensionNode ("MenuGenerator")]
+	public class MenuGeneratorNode : MenuNode
+	{
+		[NodeAttribute ("generator_type", true)]
+		protected string command_type;
+
+		private IMenuGenerator menu_generator;
+
+		public override Gtk.MenuItem GetMenuItem (object parent)
+		{
+			Gtk.MenuItem item = base.GetMenuItem (parent);
+			menu_generator = (IMenuGenerator) Addin.CreateInstance (command_type);
+			item.Submenu = menu_generator.GetMenu ();
+			item.Activated += menu_generator.OnActivated;
+			return item;
+		}
+	}
+
+	[ExtensionNode ("MenuItem")]
+	public class MenuItemNode : MenuNode
+	{
+		public override Gtk.MenuItem GetMenuItem (object parent)
+		{
+			Gtk.MenuItem item = base.GetMenuItem (parent);
+			item.Activated += OnActivated;
+			return item;
+		}
+
+		protected virtual void OnActivated (object o, EventArgs e)
+		{
+		}
+	}
+
+	[ExtensionNode ("MenuSeparator")]
+	public class MenuSeparatorNode : MenuNode
+	{
+		public override Gtk.MenuItem GetMenuItem (object parent)
+		{
+			return new Gtk.SeparatorMenuItem ();
+		}
+	}
+
+	public abstract class MenuNode : ExtensionNode
+	{
+		[NodeAttribute (Localizable=true)]
+		protected string _label;
+
+		[NodeAttribute]
+		protected string icon;
+
+		public virtual Gtk.MenuItem GetMenuItem (object parent)
+		{
+			Gtk.MenuItem item;
+			if (icon == null)
+				item = new Gtk.MenuItem (_label != null ? Catalog.GetString (_label) : Id);
+			else {
+				item = new Gtk.ImageMenuItem (_label != null ? Catalog.GetString (_label) : Id);
+				(item as Gtk.ImageMenuItem).Image = Gtk.Image.NewFromIconName (icon, Gtk.IconSize.Menu);
+			}
+			return item;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Extensions/PhotoSelectionCondition.cs b/src/Clients/MainApp/FSpot.Extensions/PhotoSelectionCondition.cs
new file mode 100644
index 0000000..d937e46
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Extensions/PhotoSelectionCondition.cs
@@ -0,0 +1,45 @@
+/*
+ * FSpot.Extensions.PhotoSelectionCondition.cs
+ *
+ * Author(s)
+ * 	Ruben Vermeersch  <ruben at savanne.be>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using Mono.Addins;
+
+namespace FSpot.Extensions
+{
+	// Defines a selection condition, which determines the number of photos
+	// selected.
+	//
+	// There are two valid values for the "selection" attribute, which
+	// should be added to the Condition tag.
+	//   - single: One photo is selected
+	//   - multiple: Multiple photos are selected
+	public class PhotoSelectionCondition : ConditionType
+	{
+		public PhotoSelectionCondition()
+		{
+			App.Instance.Organizer.Selection.Changed += delegate { NotifyChanged ();};
+		}
+
+		public override bool Evaluate (NodeElement conditionNode)
+		{
+			int count = App.Instance.Organizer.Selection.Count;
+			string val = conditionNode.GetAttribute ("selection");
+			if (val.Length > 0) {
+				foreach (string selection in val.Split(',')) {
+					if (selection == "multiple" && count > 1) {
+						return true;
+					} else if (selection == "single" && count == 1) {
+						return true;
+					}
+				}
+			}
+			return false;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Extensions/PopupCommands.cs b/src/Clients/MainApp/FSpot.Extensions/PopupCommands.cs
new file mode 100644
index 0000000..e4f1640
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Extensions/PopupCommands.cs
@@ -0,0 +1,97 @@
+/*
+ * FSpot.Extensions.PopupCommands
+ *
+ * Author(s)
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using System;
+using GLib;
+using FSpot.Widgets;
+
+namespace FSpot.Extensions
+{
+	public class Copy : ICommand
+	{
+		public void Run (object o, EventArgs e)
+		{
+			App.Instance.Organizer.HandleCopy (o, e);
+		}
+	}
+
+	public class Rotate270 : ICommand
+	{
+		public void Run (object o, EventArgs e)
+		{
+			App.Instance.Organizer.HandleRotate270Command (o, e);
+		}
+	}
+
+	public class Rotate90 : ICommand
+	{
+		public void Run (object o, EventArgs e)
+		{
+			App.Instance.Organizer.HandleRotate90Command (o, e);
+		}
+	}
+
+	public class Remove : ICommand
+	{
+		public void Run (object o, EventArgs e)
+		{
+			App.Instance.Organizer.HandleRemoveCommand (o, e);
+		}
+	}
+
+	public class Delete : ICommand
+	{
+		public void Run (object o, EventArgs e)
+		{
+			App.Instance.Organizer.HandleDeleteCommand (o, e);
+		}
+	}
+
+	public class OpenWith : IMenuGenerator
+	{
+		private Widgets.OpenWithMenu owm;
+
+		public Gtk.Menu GetMenu ()
+		{
+			owm = new Widgets.OpenWithMenu (App.Instance.Organizer.SelectedMimeTypes, "f-spot");
+			owm.ApplicationActivated += App.Instance.Organizer.HandleOpenWith;
+			return (Gtk.Menu) owm;
+		}
+
+		public void OnActivated (object o, EventArgs e)
+		{
+			if (owm != null)
+				owm.Populate (o, e);
+		}
+	}
+
+	public class RemoveTag : IMenuGenerator
+	{
+		public Gtk.Menu GetMenu ()
+		{
+			PhotoTagMenu tag_menu = new PhotoTagMenu ();
+			tag_menu.TagSelected += App.Instance.Organizer.HandleRemoveTagMenuSelected;
+			return (Gtk.Menu) tag_menu;
+		}
+
+		public void OnActivated (object o, EventArgs e)
+		{
+			App.Instance.Organizer.HandleTagMenuActivate (o, e);
+		}
+	}
+
+	public class Rate : ICommand
+	{
+		public void Run (object o, EventArgs e)
+		{
+			App.Instance.Organizer.HandleRatingMenuSelected ((o as Widgets.Rating).Value);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Extensions/ServiceNode.cs b/src/Clients/MainApp/FSpot.Extensions/ServiceNode.cs
new file mode 100644
index 0000000..6bc3abe
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Extensions/ServiceNode.cs
@@ -0,0 +1,42 @@
+/*
+ * FSpot.Extensions.ServiceNode.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using System;
+using Mono.Addins;
+
+namespace FSpot.Extensions
+{
+	public class ServiceNode : ExtensionNode
+	{
+		[NodeAttribute ("class", true)]
+		protected string class_name;
+
+		IService service = null;
+
+		public void Initialize ()
+		{
+			service = Addin.CreateInstance (class_name) as IService;
+		}
+
+		public bool Start ()
+		{
+			if (service == null)
+				throw new Exception ("Service not initialized. Call Initialize () prior to Start() or Stop()");
+			return service.Start ();
+		}
+
+		public bool Stop ()
+		{
+			if (service == null)
+				throw new Exception ("Service not initialized. Call Initialize () prior to Start() or Stop()");
+			return service.Stop ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Extensions/SidebarPage.cs b/src/Clients/MainApp/FSpot.Extensions/SidebarPage.cs
new file mode 100644
index 0000000..cae8823
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Extensions/SidebarPage.cs
@@ -0,0 +1,78 @@
+/*
+ * Widgets.SidebarPage.cs
+ *
+ * Author(s)
+ * 	Mike Gemuende <mike at gemuende.de>
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *	Ruben Vermeersch <ruben at savanne.be>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+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.
+		private readonly Widget widget;
+		public Widget SidebarWidget {
+			get { return widget; }
+		}
+
+		// Whether this page can be selected
+		private bool can_select;
+		public bool CanSelect {
+			protected set {
+				can_select = value;
+				if (CanSelectChanged != null)
+					CanSelectChanged (this, null);
+			}
+			get { return can_select; }
+		}
+
+		public event EventHandler CanSelectChanged;
+
+		// The label of the sidebar page.
+		private readonly string label;
+		public string Label {
+			get { return label; }
+		}
+
+		// The icon name, used for the selector
+		private readonly string icon_name;
+		public string IconName {
+			get { return icon_name; }
+		}
+
+		// The sidebar onto which this page is attached
+		private Gtk.Widget sidebar;
+		public Gtk.Widget Sidebar {
+			get { return sidebar; }
+			set {
+				sidebar = value;
+				AddedToSidebar ();
+			}
+		}
+
+		// Can be overriden to get notified as soon as we're added to a sidebar.
+		protected virtual void AddedToSidebar () { }
+
+//		// Whether this page is currently visible
+//		public bool IsActive {
+//			get { return Sidebar.IsActive (this); }
+//		}
+
+		public SidebarPage (Widget widget, string label, string icon_name) {
+			this.widget = widget;
+			this.label = label;
+			this.icon_name = icon_name;
+		}
+	}
+}
diff --git a/src/Extensions/SidebarPageNode.cs b/src/Clients/MainApp/FSpot.Extensions/SidebarPageNode.cs
similarity index 100%
rename from src/Extensions/SidebarPageNode.cs
rename to src/Clients/MainApp/FSpot.Extensions/SidebarPageNode.cs
diff --git a/src/Clients/MainApp/FSpot.Extensions/TransitionNode.cs b/src/Clients/MainApp/FSpot.Extensions/TransitionNode.cs
new file mode 100644
index 0000000..69a0c40
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Extensions/TransitionNode.cs
@@ -0,0 +1,34 @@
+/*
+ * FSpot.Extensions.TransitionNode.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * Copyright (c) 2009 Novell, Inc.
+ *
+ * This is open source software. See COPYING for details.
+ *
+ */
+
+using System;
+using Mono.Addins;
+using Gdk;
+using FSpot.Transitions;
+
+namespace FSpot.Extensions
+{
+	public class TransitionNode : ExtensionNode
+	{
+		[NodeAttribute ("transition_type", true)]
+		protected string class_name;
+
+		SlideShowTransition transition = null;
+		public SlideShowTransition Transition {
+			get {
+				if (transition == null)
+					transition = Addin.CreateInstance (class_name) as SlideShowTransition;
+				return transition;
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Extensions/ViewModeCondition.cs b/src/Clients/MainApp/FSpot.Extensions/ViewModeCondition.cs
new file mode 100644
index 0000000..a17fdea
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Extensions/ViewModeCondition.cs
@@ -0,0 +1,67 @@
+/*
+ * FSpot.Extensions.ViewModeCondition.cs
+ *
+ * Author(s)
+ * 	Ruben Vermeersch  <ruben at savanne.be>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using Mono.Addins;
+
+namespace FSpot.Extensions
+{
+	public enum ViewMode {
+		Unknown,
+		Single,
+		Library
+	}
+
+	// Defines a view mode condition, which determines which view mode is used.
+	//
+	// There are two valid values for the "mode" attribute, which
+	// should be added to the Condition tag.
+	//   - single: Single view mode.
+	//   - library: Full F-Spot mode.
+	//
+	// 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.
+	public class ViewModeCondition : ConditionType
+	{
+		private delegate void ViewModeChangedHandler ();
+		private static event ViewModeChangedHandler ViewModeChanged;
+
+		private static ViewMode mode = ViewMode.Unknown;
+		public static ViewMode Mode {
+			get { return mode; }
+			set {
+				mode = value;
+
+				if (ViewModeChanged != null)
+					ViewModeChanged ();
+			}
+		}
+
+		public ViewModeCondition ()
+		{
+			ViewModeChanged += delegate { NotifyChanged (); };
+		}
+
+		public override bool Evaluate (NodeElement conditionNode)
+		{
+			string val = conditionNode.GetAttribute ("mode");
+			if (val.Length > 0) {
+				foreach (string mode in val.Split(',')) {
+					if (mode == "single" && Mode == ViewMode.Single) {
+						return true;
+					} else if (mode == "library" && Mode == ViewMode.Library) {
+						return true;
+					}
+				}
+			}
+			return false;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Filters/ChmodFilter.cs b/src/Clients/MainApp/FSpot.Filters/ChmodFilter.cs
new file mode 100644
index 0000000..2997a03
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Filters/ChmodFilter.cs
@@ -0,0 +1,43 @@
+/*
+ * Filters/ChmodFilter
+ *
+ * Author(s)
+ *   Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+using Mono.Unix.Native;
+
+namespace FSpot.Filters {
+	public class ChmodFilter : IFilter
+	{
+
+		FilePermissions mode;
+
+		public ChmodFilter () : this (FilePermissions.S_IRUSR |
+					      FilePermissions.S_IWUSR |
+					      FilePermissions.S_IRGRP |
+					      FilePermissions.S_IROTH)
+		{
+		}
+
+		public ChmodFilter (FilePermissions mode)
+		{
+			this.mode = mode;
+		}
+
+		public bool Convert (FilterRequest req)
+		{
+			if (req.Current == req.Source) {
+				var uri = req.TempUri ();
+				System.IO.File.Copy (req.Current.LocalPath, uri.LocalPath, true);
+				req.Current = uri;
+			}
+
+			Syscall.chmod (req.Current.LocalPath, mode);
+
+			return true;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Filters/FilterRequest.cs b/src/Clients/MainApp/FSpot.Filters/FilterRequest.cs
new file mode 100644
index 0000000..c996037
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Filters/FilterRequest.cs
@@ -0,0 +1,96 @@
+/*
+ * Filters/FilterRequest.cs
+ *
+ * Author(s)
+ *   Stephane Delcroix <stephane at delcroix.org>
+ *   Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details
+ *
+ */
+
+using System;
+using System.Collections;
+
+using Hyena;
+using FSpot.Utils;
+
+namespace FSpot.Filters {
+
+	public class FilterRequest : IDisposable
+	{
+		SafeUri source;
+		SafeUri current;
+
+		ArrayList temp_uris;
+
+		public FilterRequest (SafeUri source)
+		{
+			this.source = source;
+			this.current = source;
+			temp_uris = new ArrayList ();
+		}
+
+		~FilterRequest ()
+		{
+			Close ();
+		}
+
+		public SafeUri Source {
+			get { return source; }
+		}
+
+		public SafeUri Current {
+			get { return current; }
+			set {
+				if (!value.Equals (source) && !temp_uris.Contains (value))
+					temp_uris.Add (value);
+				current = value;
+			}
+		}
+
+		public virtual void Close ()
+		{
+			foreach (SafeUri uri in temp_uris) {
+				try {
+					System.IO.File.Delete (uri.LocalPath);
+				} catch (System.IO.IOException e) {
+					Log.Exception (e);
+				}
+			}
+			temp_uris.Clear ();
+		}
+
+		public void Dispose ()
+		{
+			Close ();
+			System.GC.SuppressFinalize (this);
+		}
+
+		public SafeUri TempUri ()
+		{
+			return TempUri (null);
+		}
+
+		public SafeUri TempUri (string extension)
+		{
+			string imgtemp;
+			if (extension != null) {
+				string temp = System.IO.Path.GetTempFileName ();
+				imgtemp = temp + "." + extension;
+				System.IO.File.Move (temp, imgtemp);
+			} else
+				imgtemp = System.IO.Path.GetTempFileName ();
+
+			SafeUri uri = new SafeUri (imgtemp);
+			if (!temp_uris.Contains (uri))
+				temp_uris.Add (uri);
+			return uri;
+		}
+
+		public void Preserve (SafeUri uri)
+		{
+			temp_uris.Remove (uri);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Filters/FilterSet.cs b/src/Clients/MainApp/FSpot.Filters/FilterSet.cs
new file mode 100644
index 0000000..33af8df
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Filters/FilterSet.cs
@@ -0,0 +1,35 @@
+/*
+ * Filters/FilterSet.cs
+ *
+ * Authors:
+ *   Larry Ewing <lewing at novell.com>
+ *   Stephane Delcroix <stephane at delcroix.org>
+ *
+ * I don't like per file copyright notices.
+ */
+
+using System.Collections;
+
+namespace FSpot.Filters {
+	public class FilterSet : IFilter {
+		public ArrayList list;
+
+		public FilterSet () {
+			list = new ArrayList ();
+		}
+
+		public void Add (IFilter filter)
+		{
+			list.Add (filter);
+		}
+
+		public bool Convert (FilterRequest req)
+		{
+			bool changed = false;
+			foreach (IFilter filter in list) {
+				changed |= filter.Convert (req);
+			}
+			return changed;
+		}
+	}
+}
diff --git a/src/Filters/IFilter.cs b/src/Clients/MainApp/FSpot.Filters/IFilter.cs
similarity index 100%
rename from src/Filters/IFilter.cs
rename to src/Clients/MainApp/FSpot.Filters/IFilter.cs
diff --git a/src/Filters/JpegFilter.cs b/src/Clients/MainApp/FSpot.Filters/JpegFilter.cs
similarity index 100%
rename from src/Filters/JpegFilter.cs
rename to src/Clients/MainApp/FSpot.Filters/JpegFilter.cs
diff --git a/src/Filters/ResizeFilter.cs b/src/Clients/MainApp/FSpot.Filters/ResizeFilter.cs
similarity index 100%
rename from src/Filters/ResizeFilter.cs
rename to src/Clients/MainApp/FSpot.Filters/ResizeFilter.cs
diff --git a/src/Filters/SharpFilter.cs b/src/Clients/MainApp/FSpot.Filters/SharpFilter.cs
similarity index 100%
rename from src/Filters/SharpFilter.cs
rename to src/Clients/MainApp/FSpot.Filters/SharpFilter.cs
diff --git a/src/Clients/MainApp/FSpot.Filters/UniqueNameFilter.cs b/src/Clients/MainApp/FSpot.Filters/UniqueNameFilter.cs
new file mode 100644
index 0000000..bf0f50e
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Filters/UniqueNameFilter.cs
@@ -0,0 +1,45 @@
+/*
+ * Filters/UniqueNameFilter.cs
+ *
+ * Author(s)
+ *   Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ *
+ */
+
+using System;
+using FSpot.Utils;
+using Hyena;
+
+namespace FSpot.Filters {
+	public class UniqueNameFilter : IFilter
+	{
+		SafeUri destination;
+
+		public UniqueNameFilter (SafeUri destination)
+		{
+			this.destination = destination;
+		}
+
+		public bool Convert (FilterRequest request)
+		{
+			//FIXME: make it works for uri (and use it in CDExport)
+			int i = 1;
+			string path = destination.LocalPath;
+			string filename = System.IO.Path.GetFileName (request.Source.LocalPath);
+			string dest = System.IO.Path.Combine (path, filename);
+			while (System.IO.File.Exists (dest)) {
+				string numbered_name = String.Format ("{0}-{1}{2}",
+						System.IO.Path.GetFileNameWithoutExtension (filename),
+						i++,
+						System.IO.Path.GetExtension (filename));
+				dest = System.IO.Path.Combine (path, numbered_name);
+			}
+
+			System.IO.File.Copy (request.Current.LocalPath, dest);
+			request.Current = new SafeUri (dest);
+			return true;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Filters/WhiteListFilter.cs b/src/Clients/MainApp/FSpot.Filters/WhiteListFilter.cs
new file mode 100644
index 0000000..91e239e
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Filters/WhiteListFilter.cs
@@ -0,0 +1,34 @@
+/*
+ * Filters/WhiteListFilter
+ *
+ * Author(s)
+ *   Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+namespace FSpot.Filters {
+	public class WhiteListFilter : IFilter
+	{
+		System.Collections.ArrayList valid_extensions;
+
+		public WhiteListFilter (string [] valid_extensions)
+		{
+			this.valid_extensions = new System.Collections.ArrayList ();
+			foreach (string extension in valid_extensions)
+				this.valid_extensions.Add (extension.ToLower ());
+		}
+
+		public bool Convert (FilterRequest req)
+		{
+			if ( valid_extensions.Contains (System.IO.Path.GetExtension(req.Current.LocalPath).ToLower ()) )
+				return false;
+
+			if ( !valid_extensions.Contains (".jpg") && !valid_extensions.Contains (".jpeg"))
+				throw new System.NotImplementedException ("can only save jpeg :(");
+
+			return (new JpegFilter ()).Convert (req);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Imaging/Ciff.cs b/src/Clients/MainApp/FSpot.Imaging/Ciff.cs
new file mode 100644
index 0000000..7545e74
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Imaging/Ciff.cs
@@ -0,0 +1,173 @@
+using System;
+using FSpot.Utils;
+using Hyena;
+using TagLib.Image;
+
+namespace FSpot.Imaging.Ciff {
+	internal enum Tag {
+		JpgFromRaw = 0x2007,
+	}
+
+	public enum EntryType : ushort {
+		Byte = 0x0000,
+		Ascii = 0x0800,
+		Short = 0x1000,
+		Int = 0x1800,
+		Struct = 0x2000,
+		Directory1 = 0x2800,
+		Directory2 = 0x2800,
+	}
+
+	public enum Mask {
+		Type = 0x3800,
+	}
+
+	/* See http://www.sno.phy.queensu.ca/~phil/exiftool/canon_raw.html */
+	internal struct Entry {
+		internal Tag Tag;
+		internal uint Size;
+		internal uint Offset;
+
+		public Entry (byte [] data, int pos, bool little)
+		{
+			Tag = (Tag) BitConverter.ToUInt16 (data, pos, little);
+			Size = BitConverter.ToUInt32 (data, pos + 2, little);
+			Offset = BitConverter.ToUInt32 (data, pos + 6, little);
+		}
+	}
+
+	class ImageDirectory {
+		System.Collections.ArrayList entry_list;
+		uint Count;
+		bool little;
+		uint start;
+		long DirPosition;
+		System.IO.Stream stream;
+
+		public ImageDirectory (System.IO.Stream stream, uint start, long end, bool little)
+		{
+			this.start = start;
+			this.little = little;
+			this.stream = stream;
+
+			entry_list = new System.Collections.ArrayList ();
+
+			stream.Position = end - 4;
+			byte [] buf = new byte [10];
+			stream.Read (buf, 0, 4);
+			uint directory_pos  = BitConverter.ToUInt32 (buf, 0, little);
+			DirPosition = start + directory_pos;
+
+			stream.Position = DirPosition;
+			stream.Read (buf, 0, 2);
+
+			Count = BitConverter.ToUInt16 (buf, 0, little);
+
+			for (int i = 0; i < Count; i++)
+			{
+				stream.Read (buf, 0, 10);
+				Log.DebugFormat ("reading {0} {1}", i, stream.Position);
+				Entry entry = new Entry (buf, 0, little);
+				entry_list.Add (entry);
+			}
+		}
+
+		public ImageDirectory ReadDirectory (Tag tag)
+		{
+			foreach (Entry e in entry_list) {
+				if (e.Tag == tag) {
+					uint subdir_start = this.start + e.Offset;
+					ImageDirectory subdir = new ImageDirectory (stream, subdir_start, subdir_start + e.Size, little);
+					return subdir;
+				}
+			}
+			return null;
+		}
+
+		public byte [] ReadEntry (int pos)
+		{
+			Entry e = (Entry) entry_list [pos];
+
+			stream.Position = this.start + e.Offset;
+
+			byte [] data = new byte [e.Size];
+			stream.Read (data, 0, data.Length);
+
+			return data;
+		}
+
+		public byte [] ReadEntry (Tag tag)
+		{
+			int pos = 0;
+			foreach (Entry e in entry_list) {
+				if (e.Tag == tag)
+					return ReadEntry (pos);
+				pos++;
+			}
+			return null;
+		}
+	}
+
+	public class CiffFile : BaseImageFile {
+		ImageDirectory root;
+		bool little;
+		System.IO.Stream stream;
+
+		ImageDirectory Root {
+			get {
+				if (root == null) {
+					stream = PixbufStream ();
+					root = Load (stream);
+				}
+
+			        return root;
+			}
+		}
+
+		public CiffFile (SafeUri uri) : base (uri)
+		{
+		}
+
+		private ImageDirectory Load (System.IO.Stream stream)
+		{
+			byte [] header = new byte [26];  // the spec reserves the first 26 bytes as the header block
+			stream.Read (header, 0, header.Length);
+
+			uint start;
+
+			little = (header [0] == 'I' && header [1] == 'I');
+
+			start = BitConverter.ToUInt32 (header, 2, little);
+
+			// HEAP is the type CCDR is the subtype
+			if (System.Text.Encoding.ASCII.GetString (header, 6, 8) != "HEAPCCDR")
+				throw new ImageFormatException ("Invalid Ciff Header Block");
+
+			long end = stream.Length;
+			return new ImageDirectory (stream, start, end, little);
+		}
+
+		public override System.IO.Stream PixbufStream ()
+		{
+			byte [] data = GetEmbeddedJpeg ();
+
+			if (data != null)
+				return new System.IO.MemoryStream (data);
+			else
+				return DCRawFile.RawPixbufStream (Uri);
+		}
+
+		private byte [] GetEmbeddedJpeg ()
+		{
+			return Root.ReadEntry (Tag.JpgFromRaw);
+		}
+
+		protected override void Close ()
+		{
+			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
new file mode 100644
index 0000000..26ea603
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Imaging/DCRawFile.cs
@@ -0,0 +1,29 @@
+using System.Diagnostics;
+using System.IO;
+using System;
+using Hyena;
+
+namespace FSpot.Imaging {
+	public class DCRawFile : BaseImageFile {
+		const string dcraw_command = "dcraw";
+
+		public DCRawFile (SafeUri uri) : base (uri)
+		{
+		}
+
+		public override System.IO.Stream PixbufStream ()
+		{
+			return RawPixbufStream (Uri);
+		}
+
+		internal static System.IO.Stream RawPixbufStream (SafeUri location)
+		{
+			string path = location.LocalPath;
+			string [] args = new string [] { dcraw_command, "-h", "-w", "-c", "-t", "0", path };
+
+			InternalProcess proc = new InternalProcess (System.IO.Path.GetDirectoryName (path), args);
+			proc.StandardInput.Close ();
+			return proc.StandardOutput;
+		}
+	}
+}
diff --git a/src/Imaging/IOChannel.cs b/src/Clients/MainApp/FSpot.Imaging/IOChannel.cs
similarity index 100%
rename from src/Imaging/IOChannel.cs
rename to src/Clients/MainApp/FSpot.Imaging/IOChannel.cs
diff --git a/src/Clients/MainApp/FSpot.Imaging/ImageFile.cs b/src/Clients/MainApp/FSpot.Imaging/ImageFile.cs
new file mode 100644
index 0000000..0db38d2
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Imaging/ImageFile.cs
@@ -0,0 +1,261 @@
+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;
+
+namespace FSpot.Imaging {
+	public class ImageFormatException : ApplicationException {
+		public ImageFormatException (string msg) : base (msg)
+		{
+		}
+	}
+
+	public static class ImageFile {
+
+#region Factory functionality
+
+		static Dictionary<string, Type> name_table;
+		internal static Dictionary<string, Type> NameTable { get { return name_table; } }
+
+        static ImageFile ()
+        {
+            var base_type = typeof (BaseImageFile);
+            var raw_type = typeof (DCRawFile);
+            var nef_type = typeof (FSpot.Imaging.NefFile);
+
+            name_table = new Dictionary<string, Type> ();
+
+            // Plain image files
+            name_table ["image/gif"] = name_table [".gif"] = base_type;
+            name_table ["image/x-pcx"] = name_table [".pcx"] = base_type;
+            name_table ["image/x-portable-anymap"] = name_table [".pnm"] = base_type;
+            name_table ["image/x-portable-bitmap"] = name_table [".pbm"] = base_type;
+            name_table ["image/x-portable-graymap"] = name_table [".pgm"] = base_type;
+            name_table ["image/x-portable-pixmap"] = name_table [".ppm"] = base_type;
+            name_table ["image/x-bmp"] = name_table ["image/x-MS-bmp"] = name_table [".bmp"] = base_type;
+            name_table ["image/jpeg"] = name_table [".jfi"] = name_table [".jfif"] = name_table [".jif"] = name_table [".jpe"] = name_table [".jpeg"] = name_table [".jpg"] = base_type;
+            name_table ["image/png"] = name_table [".png"] = base_type;
+            name_table ["image/tiff"] = name_table [".tif"] = name_table [".tiff"] = base_type;
+            name_table ["image/svg+xml"] = name_table [".svg"] = name_table [".svgz"] = base_type;
+
+            // RAW files
+            name_table ["image/arw"] = name_table ["image/x-sony-arw"] = name_table [".arw"] = nef_type;
+            name_table ["image/cr2"] = name_table ["image/x-canon-cr2"] = name_table [".cr2"] = typeof (FSpot.Imaging.Cr2File);
+            name_table ["image/dng"] = name_table ["image/x-adobe-dng"] = name_table [".dng"] = typeof (FSpot.Imaging.DngFile);
+            name_table ["image/nef"] = name_table ["image/x-nikon-nef"] = name_table [".nef"] = nef_type;
+            name_table ["image/rw2"] = name_table ["image/x-raw"] = name_table [".rw2"] = raw_type;
+            name_table ["image/pef"] = name_table ["image/x-pentax-pef"] = name_table [".pef"] = nef_type;
+            name_table ["image/raw"] = name_table ["image/x-panasonic-raw"] = name_table [".raw"] = nef_type;
+
+            // Other types (FIXME: Currently unsupported by Taglib#, this list should shrink).
+
+            name_table [".kdc"] = typeof (FSpot.Imaging.NefFile);
+            name_table [".rw2"] = typeof (FSpot.Imaging.DCRawFile);
+            name_table [".orf"] =  typeof (FSpot.Imaging.NefFile);
+            name_table [".srf"] = typeof (FSpot.Imaging.NefFile);
+            name_table [".crw"] = typeof (FSpot.Imaging.Ciff.CiffFile);
+            name_table [".mrw"] = typeof (FSpot.Imaging.DCRawFile);
+            name_table [".raf"] = typeof (FSpot.Imaging.RafFile);
+            name_table [".x3f"] = typeof (FSpot.Imaging.DCRawFile);
+            name_table ["image/x-ciff"]  = name_table [".crw"];
+            name_table ["image/x-mrw"]   = name_table [".mrw"];
+            name_table ["image/x-x3f"]   = name_table [".x3f"];
+            name_table ["image/x-orf"]   = name_table [".orf"];
+            name_table ["image/x-raf"]   = name_table [".raf"];
+
+            // as xcf pixbufloader is not part of gdk-pixbuf, check if it's there,
+            // and enable it if needed.
+            foreach (Gdk.PixbufFormat format in Gdk.Pixbuf.Formats) {
+                if (format.Name == "xcf") {
+                    if (format.IsDisabled)
+                        format.SetDisabled (false);
+                    name_table [".xcf"] = base_type;
+                }
+            }
+        }
+
+        public static bool HasLoader (SafeUri uri)
+        {
+            return GetLoaderType (uri) != null;
+        }
+
+        static Type GetLoaderType (SafeUri uri)
+        {
+            // check if GIO can find the file, which is not the case
+            // with filenames with invalid encoding
+            var file = GLib.FileFactory.NewForUri (uri);
+            if (!file.Exists) {
+                return null;
+            }
+
+            var extension = uri.GetExtension ().ToLower ();
+            if (extension == ".thm") {
+                // Ignore video thumbnails.
+                return null;
+            }
+
+            // Detect mime-type
+            var info = file.QueryInfo ("standard::content-type,standard::size", FileQueryInfoFlags.None, null);
+            var mime = info.ContentType;
+            var size = info.Size;
+
+            if (size == 0) {
+                // Empty file
+                return null;
+            }
+
+            Type t = null;
+
+            if (name_table.TryGetValue (mime, out t)) {
+                return t;
+            } else if (name_table.TryGetValue (extension, out t)) {
+                return t;
+            }
+            return null;
+        }
+
+        public static IImageFile Create (SafeUri uri)
+        {
+            var t = GetLoaderType (uri);
+            if (t == null)
+                throw new Exception (String.Format ("Unsupported image: {0}", uri));
+
+            try {
+                return (IImageFile) System.Activator.CreateInstance (t, new object[] { uri });
+            } catch (Exception e) {
+                Hyena.Log.DebugException (e);
+                throw e;
+            }
+        }
+
+		public static bool IsRaw (SafeUri uri)
+		{
+			string [] raw_extensions = {
+				".arw",
+				".crw",
+				".cr2",
+				".dng",
+				".mrw",
+				".nef",
+				".orf",
+				".pef",
+				".raw",
+				".raf",
+				".rw2",
+			};
+			var extension = uri.GetExtension ().ToLower ();
+			foreach (string ext in raw_extensions)
+				if (ext == extension)
+					return true;
+			return false;
+		}
+
+		public static bool IsJpeg (SafeUri uri)
+		{
+			string [] jpg_extensions = {".jpg", ".jpeg"};
+			var extension = uri.GetExtension ().ToLower ();
+			foreach (string ext in jpg_extensions)
+				if (ext == extension)
+					return true;
+			return false;
+		}
+
+#endregion
+	}
+
+    public interface IImageFile : IDisposable {
+        SafeUri Uri { get; }
+        Gdk.Pixbuf Load ();
+        Cms.Profile GetProfile ();
+        Gdk.Pixbuf Load (int max_width, int max_height);
+        Stream PixbufStream ();
+        ImageOrientation Orientation { get; }
+    }
+
+    public class BaseImageFile : IImageFile {
+        public SafeUri Uri { get; private set; }
+        public ImageOrientation Orientation { get; private set; }
+
+        public BaseImageFile (SafeUri uri)
+        {
+            Uri = uri;
+            Orientation = ImageOrientation.TopLeft;
+
+            using (var metadata_file = Metadata.Parse (uri)) {
+                ExtractMetadata (metadata_file);
+            }
+        }
+
+        protected virtual void ExtractMetadata (TagLib.Image.File metadata) {
+            if (metadata != null) {
+                Orientation = metadata.ImageTag.Orientation;
+            }
+        }
+
+		~BaseImageFile ()
+		{
+			Dispose ();
+		}
+
+		public virtual Stream PixbufStream ()
+		{
+			Hyena.Log.DebugFormat ("open uri = {0}", Uri.ToString ());
+			return new GLib.GioStream (GLib.FileFactory.NewForUri (Uri).Read (null));
+		}
+
+		protected Gdk.Pixbuf TransformAndDispose (Gdk.Pixbuf orig)
+		{
+			if (orig == null)
+				return null;
+
+			Gdk.Pixbuf rotated = FSpot.Utils.PixbufUtils.TransformOrientation (orig, this.Orientation);
+
+			orig.Dispose ();
+
+			return rotated;
+		}
+
+		public Gdk.Pixbuf Load ()
+		{
+			using (Stream stream = PixbufStream ()) {
+				Gdk.Pixbuf orig = new Gdk.Pixbuf (stream);
+				return TransformAndDispose (orig);
+			}
+		}
+
+		public Gdk.Pixbuf Load (int max_width, int max_height)
+		{
+			Gdk.Pixbuf full = this.Load ();
+			Gdk.Pixbuf scaled  = PixbufUtils.ScaleToMaxSize (full, max_width, max_height);
+			full.Dispose ();
+			return scaled;
+		}
+
+		// FIXME this need to have an intent just like the loading stuff.
+		public virtual Cms.Profile GetProfile ()
+		{
+			return null;
+		}
+
+		public void Dispose ()
+		{
+			Close ();
+			System.GC.SuppressFinalize (this);
+		}
+
+		protected virtual void Close ()
+		{
+		}
+    }
+}
diff --git a/src/Imaging/InternalProcess.cs b/src/Clients/MainApp/FSpot.Imaging/InternalProcess.cs
similarity index 100%
rename from src/Imaging/InternalProcess.cs
rename to src/Clients/MainApp/FSpot.Imaging/InternalProcess.cs
diff --git a/src/Clients/MainApp/FSpot.Imaging/RafFile.cs b/src/Clients/MainApp/FSpot.Imaging/RafFile.cs
new file mode 100644
index 0000000..4030f0e
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Imaging/RafFile.cs
@@ -0,0 +1,57 @@
+using FSpot.Utils;
+using Hyena;
+using TagLib.Image;
+
+namespace FSpot.Imaging {
+	// This is reverse engineered from looking at the sample files I have
+	// from what I can tell the file is always BigEndian, although the embedded jpeg may not be
+	// and there is a start long offset at 0x54 (or possibly 0x56 if it is a short) that points to
+	// the start of the embedded jpeg and followed by a long length that gives the length of the jpeg
+	// data.
+	//
+	// Following that there seem to be more offsets and lengths (probably for the raw data) that I haven't
+	// completely figured out yet.  More to follow.
+
+	// ALL the sample files I have begin with "FUJIFILMCCD-RAW "
+
+	public class RafFile : BaseImageFile {
+
+		public RafFile (SafeUri uri) : base (uri)
+		{
+		}
+
+		public override System.IO.Stream PixbufStream ()
+		{
+			byte [] data = GetEmbeddedJpeg ();
+
+			if (data != null)
+				return new System.IO.MemoryStream (data);
+			else
+				return DCRawFile.RawPixbufStream (Uri);
+		}
+
+		private byte [] GetEmbeddedJpeg ()
+		{
+			using (System.IO.Stream stream = base.PixbufStream ()) {
+				stream.Position = 0x54;
+				byte [] data = new byte [24];
+				stream.Read (data, 0, data.Length);
+				uint jpeg_offset = BitConverter.ToUInt32 (data, 0, false);
+				uint jpeg_length = BitConverter.ToUInt32 (data, 4, false);
+
+				// FIXME implement wb parsing
+				//uint wb_offset = BitConverter.ToUInt32 (data, 8, false);
+				//uint wb_length = BitConverter.ToUInt32 (data, 12, false);
+
+				// FIXME implement decoding
+				//uint raw_offset = BitConverter.ToUInt32 (data, 16, false);
+				//uint raw_length = BitConverter.ToUInt32 (data, 20, false);
+
+				byte [] image = new byte [jpeg_length];
+				stream.Position = jpeg_offset;
+				stream.Read (image, 0, image.Length);
+				return image;
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Imaging/Tests/ImageFileTests.cs b/src/Clients/MainApp/FSpot.Imaging/Tests/ImageFileTests.cs
new file mode 100644
index 0000000..4ef7e81
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Imaging/Tests/ImageFileTests.cs
@@ -0,0 +1,62 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+using System;
+using Hyena;
+
+namespace FSpot.Imaging.Tests
+{
+    [TestFixture]
+    public class ImageFileTests
+    {
+        [SetUp]
+        public void Initialize () {
+            GLib.GType.Init ();
+        }
+
+        [Test]
+        public void CheckLoadableTypes ()
+        {
+            bool missing = false;
+
+            // Test that we have loaders defined for all Taglib# parseable types.
+            foreach (var key in TagLib.FileTypes.AvailableTypes.Keys) {
+                Type type = TagLib.FileTypes.AvailableTypes [key];
+                if (!type.IsSubclassOf (typeof (TagLib.Image.File))) {
+                    continue;
+                }
+
+                var test_key = key;
+                if (key.StartsWith ("taglib/")) {
+                    test_key = "." + key.Substring (7);
+                }
+
+                if (!ImageFile.NameTable.ContainsKey (test_key)) {
+                    Log.InformationFormat ("Missing key for {0}", test_key);
+                    missing = true;
+                }
+            }
+
+            Assert.IsFalse (missing, "No missing loaders for Taglib# parseable files.");
+        }
+
+        [Test]
+        public void CheckTaglibSupport ()
+        {
+            bool missing = false;
+
+            foreach (var key in ImageFile.NameTable.Keys) {
+                string type = key;
+                if (type.StartsWith ("."))
+                    type = String.Format ("taglib/{0}", type.Substring (1));
+
+                if (!TagLib.FileTypes.AvailableTypes.ContainsKey (type)) {
+                    Log.InformationFormat ("Missing type support in Taglib# for {0}", type);
+                    missing = true;
+                }
+            }
+
+            Assert.IsFalse (missing, "No missing type support in Taglib#.");
+        }
+    }
+}
+#endif
diff --git a/src/Clients/MainApp/FSpot.Imaging/Tiff.cs b/src/Clients/MainApp/FSpot.Imaging/Tiff.cs
new file mode 100644
index 0000000..cf34525
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Imaging/Tiff.cs
@@ -0,0 +1,210 @@
+using FSpot;
+using FSpot.Utils;
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Hyena;
+using TagLib;
+using TagLib.Image;
+using TagLib.IFD;
+using TagLib.IFD.Entries;
+using TagLib.IFD.Tags;
+
+namespace FSpot.Imaging {
+	/*
+		public Cms.Profile GetProfile ()
+		{
+			Cms.ColorCIExyY whitepoint = new Cms.ColorCIExyY (0, 0, 0);
+			Cms.ColorCIExyYTriple primaries = new Cms.ColorCIExyYTriple (whitepoint, whitepoint, whitepoint);
+			Cms.GammaTable [] transfer = null;
+			int bits_per_sample = 8;
+			double gamma = 2.2;
+
+			foreach (DirectoryEntry e in entries) {
+				switch (e.Id) {
+				case TagId.InterColorProfile:
+					try {
+						return new Cms.Profile (e.RawData);
+					} catch (System.Exception ex) {
+						Log.Exception (ex);
+					}
+					break;
+				case TagId.ColorSpace:
+					switch ((ColorSpace)e.ValueAsLong [0]) {
+					case ColorSpace.StandardRGB:
+						return Cms.Profile.CreateStandardRgb ();
+					case ColorSpace.AdobeRGB:
+						return Cms.Profile.CreateAlternateRgb ();
+					case ColorSpace.Uncalibrated:
+						Log.Debug ("Uncalibrated colorspace");
+						break;
+					}
+					break;
+				case TagId.WhitePoint:
+					Rational [] white = e.RationalValue;
+					whitepoint.x = white [0].Value;
+					whitepoint.y = white [1].Value;
+					whitepoint.Y = 1.0;
+					break;
+				case TagId.PrimaryChromaticities:
+					Rational [] colors = e.RationalValue;
+					primaries.Red.x = colors [0].Value;
+					primaries.Red.y = colors [1].Value;
+					primaries.Red.Y = 1.0;
+
+					primaries.Green.x = colors [2].Value;
+					primaries.Green.y = colors [3].Value;
+					primaries.Green.Y = 1.0;
+
+					primaries.Blue.x = colors [4].Value;
+					primaries.Blue.y = colors [5].Value;
+					primaries.Blue.Y = 1.0;
+					break;
+				case TagId.TransferFunction:
+					ushort [] trns = e.ShortValue;
+					ushort gamma_count = (ushort) (1 << bits_per_sample);
+					Cms.GammaTable [] tables = new Cms.GammaTable [3];
+					Log.DebugFormat ("Parsing transfer function: count = {0}", trns.Length);
+
+					// FIXME we should use the TransferRange here
+					// FIXME we should use bits per sample here
+					for (int c = 0; c < 3; c++) {
+						tables [c] = new Cms.GammaTable (trns, c * gamma_count, gamma_count);
+					}
+
+					transfer = tables;
+					break;
+				case TagId.ExifIfdPointer:
+					SubdirectoryEntry exif = (SubdirectoryEntry) e;
+					DirectoryEntry ee = exif.Directory [0].Lookup ((int)TagId.Gamma);
+
+					if (ee == null)
+						break;
+
+					Rational rgamma = ee.RationalValue [0];
+					gamma = rgamma.Value;
+					break;
+				}
+			}
+
+			if (transfer == null) {
+				Cms.GammaTable basic = new Cms.GammaTable (1 << bits_per_sample, gamma);
+				transfer = new Cms.GammaTable [] { basic, basic, basic };
+			}
+
+			// if we didn't get a white point or primaries, give up
+			if (whitepoint.Y != 1.0 || primaries.Red.Y != 1.0)
+				return null;
+
+			return new Cms.Profile (whitepoint, primaries, transfer);
+		}
+	}*/
+
+	public class DngFile : BaseImageFile {
+		uint offset;
+
+		public DngFile (SafeUri uri) : base (uri)
+		{
+		}
+
+		protected override void ExtractMetadata (TagLib.Image.File metadata)
+		{
+            base.ExtractMetadata (metadata);
+
+            if (metadata == null)
+                return;
+
+			try {
+				var tag = metadata.GetTag (TagTypes.TiffIFD) as IFDTag;
+				var structure = tag.Structure;
+				var sub_entries = (structure.GetEntry (0, (ushort) IFDEntryTag.SubIFDs) as SubIFDArrayEntry).Entries;
+				var subimage_structure = sub_entries [sub_entries.Length - 1];
+				var entry = subimage_structure.GetEntry (0, (ushort) IFDEntryTag.StripOffsets);
+				offset = (entry as StripOffsetsIFDEntry).Values [0];
+			} catch (Exception e) {
+				Log.DebugException (e);
+			}
+		}
+
+		public override System.IO.Stream PixbufStream ()
+		{
+			try {
+				System.IO.Stream file = base.PixbufStream ();
+				file.Position = offset;
+				return file;
+			} catch {
+				return DCRawFile.RawPixbufStream (Uri);
+			}
+		}
+	}
+
+	public class NefFile : BaseImageFile {
+		byte [] jpeg_data;
+
+		public NefFile (SafeUri uri) : base (uri)
+		{
+		}
+
+		protected override void ExtractMetadata (TagLib.Image.File metadata)
+		{
+            base.ExtractMetadata (metadata);
+
+            if (metadata == null)
+                return;
+
+			try {
+				var tag = metadata.GetTag (TagTypes.TiffIFD) as IFDTag;
+				var structure = tag.Structure;
+				var SubImage1_structure = (structure.GetEntry (0, (ushort) IFDEntryTag.SubIFDs) as SubIFDArrayEntry).Entries [0];
+				var entry = SubImage1_structure.GetEntry (0, (ushort) IFDEntryTag.JPEGInterchangeFormat);
+				jpeg_data = (entry as ThumbnailDataIFDEntry).Data.Data;
+			} catch (Exception e) {
+				Log.DebugException (e);
+				jpeg_data = null;
+			}
+		}
+
+		public override System.IO.Stream PixbufStream ()
+		{
+			if (jpeg_data != null) {
+				return new MemoryStream (jpeg_data);
+			} else {
+				return DCRawFile.RawPixbufStream (Uri);
+			}
+		}
+	}
+
+
+	public class Cr2File : BaseImageFile {
+		uint offset;
+
+		public Cr2File (SafeUri uri) : base (uri)
+		{
+		}
+
+		protected override void ExtractMetadata (TagLib.Image.File metadata)
+		{
+            base.ExtractMetadata (metadata);
+
+            if (metadata == null)
+                return;
+
+			try {
+				var tag = metadata.GetTag (TagTypes.TiffIFD) as IFDTag;
+				var structure = tag.Structure;
+				var entry = structure.GetEntry (0, (ushort) IFDEntryTag.StripOffsets);
+				offset = (entry as StripOffsetsIFDEntry).Values [0];
+			} catch (Exception e) {
+				Log.DebugException (e);
+			}
+		}
+
+		public override System.IO.Stream PixbufStream ()
+		{
+			System.IO.Stream file = base.PixbufStream ();
+			file.Position = offset;
+			return file;
+		}
+	}
+
+}
diff --git a/src/Clients/MainApp/FSpot.Import/FileImportSource.cs b/src/Clients/MainApp/FSpot.Import/FileImportSource.cs
new file mode 100644
index 0000000..d16f97f
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Import/FileImportSource.cs
@@ -0,0 +1,154 @@
+using Hyena;
+using System;
+using System.Threading;
+using System.Collections.Generic;
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Imaging;
+using Gtk;
+using Mono.Unix.Native;
+
+namespace FSpot.Import
+{
+    internal class FileImportSource : ImportSource {
+        public string Name { get; set; }
+        public string IconName { get; set; }
+        public SafeUri Root { get; set; }
+
+        public Thread PhotoScanner;
+        bool run_photoscanner = false;
+
+        public FileImportSource (SafeUri root, string name, string icon_name)
+        {
+            Root = root;
+            Name = name;
+
+            if (root != null) {
+                if (IsIPodPhoto) {
+                    IconName = "multimedia-player";
+                } else if (IsCamera) {
+                    IconName = "media-flash";
+                } else {
+                    IconName = icon_name;
+                }
+            }
+        }
+
+        public void StartPhotoScan (ImportController controller, PhotoList photo_list)
+        {
+            if (PhotoScanner != null) {
+                run_photoscanner = false;
+                PhotoScanner.Join ();
+            }
+
+            run_photoscanner = true;
+            PhotoScanner = ThreadAssist.Spawn (() => ScanPhotos (controller, photo_list));
+        }
+
+        protected virtual void ScanPhotos (ImportController controller, PhotoList photo_list)
+        {
+            ScanPhotoDirectory (controller, Root, photo_list);
+            ThreadAssist.ProxyToMain (() => controller.PhotoScanFinished ());
+        }
+
+        protected void ScanPhotoDirectory (ImportController controller, SafeUri uri, PhotoList photo_list)
+        {
+            var enumerator = new RecursiveFileEnumerator (uri) {
+                Recurse = controller.RecurseSubdirectories,
+                CatchErrors = true,
+                IgnoreSymlinks = true
+            };
+            var infos = new List<FileImportInfo> ();
+            foreach (var file in enumerator) {
+                if (ImageFile.HasLoader (new SafeUri (file.Uri, true))) {
+                    infos.Add (new FileImportInfo (new SafeUri(file.Uri, true)));
+                }
+
+                if (infos.Count % 10 == 0 || infos.Count < 10) {
+                    var to_add = infos; // prevents race condition
+                    ThreadAssist.ProxyToMain (() => photo_list.Add (to_add.ToArray ()));
+                    infos = new List<FileImportInfo> ();
+                }
+
+                if (!run_photoscanner)
+                    return;
+            }
+
+            if (infos.Count > 0) {
+                var to_add = infos; // prevents race condition
+                ThreadAssist.ProxyToMain (() => photo_list.Add (to_add.ToArray ()));
+            }
+        }
+
+        public void Deactivate ()
+        {
+            if (PhotoScanner != null) {
+                run_photoscanner = false;
+                PhotoScanner.Join ();
+
+                // Make sure all photos are added. This is needed to prevent
+                // a race condition where a source is deactivated, yet photos
+                // are still added to the collection because they are
+                // queued on the mainloop.
+                while (Application.EventsPending ())
+                    Application.RunIteration (false);
+
+                PhotoScanner = null;
+            }
+        }
+
+        private bool IsCamera {
+            get {
+                try {
+                    var file = GLib.FileFactory.NewForUri (Root.Append ("DCIM"));
+                    return file.Exists;
+                } catch {
+                    return false;
+                }
+            }
+        }
+
+        private bool IsIPodPhoto {
+            get {
+                try {
+                    var file = GLib.FileFactory.NewForUri (Root.Append ("Photos"));
+                    var file2 = GLib.FileFactory.NewForUri (Root.Append ("iPod_Control"));
+                    return file.Exists && file2.Exists;
+                } catch {
+                    return false;
+                }
+            }
+        }
+    }
+
+    // Multi root version for drag and drop import.
+    internal class MultiFileImportSource : FileImportSource {
+        private IEnumerable<SafeUri> uris;
+
+        public MultiFileImportSource (IEnumerable<SafeUri> uris)
+            : base (null, String.Empty, String.Empty)
+        {
+            this.uris = uris;
+        }
+
+        protected override void ScanPhotos (ImportController controller, PhotoList photo_list)
+        {
+            foreach (var uri in uris) {
+                Log.Debug ("Scanning "+uri);
+                ScanPhotoDirectory (controller, uri, photo_list);
+            }
+            ThreadAssist.ProxyToMain (() => controller.PhotoScanFinished ());
+        }
+    }
+
+    internal class FileImportInfo : FileBrowsableItem {
+        public FileImportInfo (SafeUri original) : base (original)
+        {
+        }
+
+
+        public SafeUri DestinationUri { get; set; }
+
+        internal uint PhotoId { get; set; }
+    }
+}
diff --git a/src/Clients/MainApp/FSpot.Import/ImportController.cs b/src/Clients/MainApp/FSpot.Import/ImportController.cs
new file mode 100644
index 0000000..5d4fe2f
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Import/ImportController.cs
@@ -0,0 +1,488 @@
+using Hyena;
+using FSpot.Core;
+using FSpot.Utils;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using Mono.Unix;
+
+namespace FSpot.Import
+{
+    public enum ImportEvent {
+        SourceChanged,
+        PhotoScanStarted,
+        PhotoScanFinished,
+        ImportStarted,
+        ImportFinished,
+        ImportError
+    }
+
+    public class ImportController
+    {
+        public BrowsableCollectionProxy Photos { get; private set; }
+
+        public ImportController (bool persist_preferences)
+        {
+            // This flag determines whether or not the chosen options will be
+            // saved. You don't want to overwrite user preferences when running
+            // headless.
+            this.persist_preferences = persist_preferences;
+
+            Photos = new BrowsableCollectionProxy ();
+            FailedImports = new List<SafeUri> ();
+            LoadPreferences ();
+        }
+
+        ~ImportController ()
+        {
+            DeactivateSource (ActiveSource);
+        }
+
+#region Import Preferences
+
+        private bool persist_preferences = false;
+        private bool copy_files = true;
+        private bool remove_originals = false;
+        private bool recurse_subdirectories = true;
+        private bool duplicate_detect = true;
+
+        public bool CopyFiles {
+            get { return copy_files; }
+            set { copy_files = value; SavePreferences (); }
+        }
+
+        public bool RemoveOriginals {
+            get { return remove_originals; }
+            set { remove_originals = value; SavePreferences (); }
+        }
+
+        public bool RecurseSubdirectories {
+            get { return recurse_subdirectories; }
+            set {
+                if (recurse_subdirectories == value)
+                    return;
+                recurse_subdirectories = value;
+                SavePreferences ();
+                RescanPhotos ();
+            }
+        }
+
+        public bool DuplicateDetect {
+            get { return duplicate_detect; }
+            set { duplicate_detect = value; SavePreferences (); }
+        }
+
+        void LoadPreferences ()
+        {
+            if (!persist_preferences)
+                return;
+
+            copy_files = Preferences.Get<bool> (Preferences.IMPORT_COPY_FILES);
+            recurse_subdirectories = Preferences.Get<bool> (Preferences.IMPORT_INCLUDE_SUBFOLDERS);
+            duplicate_detect = Preferences.Get<bool> (Preferences.IMPORT_CHECK_DUPLICATES);
+            remove_originals = Preferences.Get<bool> (Preferences.IMPORT_REMOVE_ORIGINALS);
+        }
+
+        void SavePreferences ()
+        {
+            if (!persist_preferences)
+                return;
+
+            Preferences.Set(Preferences.IMPORT_COPY_FILES, copy_files);
+            Preferences.Set(Preferences.IMPORT_INCLUDE_SUBFOLDERS, recurse_subdirectories);
+            Preferences.Set(Preferences.IMPORT_CHECK_DUPLICATES, duplicate_detect);
+            Preferences.Set(Preferences.IMPORT_REMOVE_ORIGINALS, remove_originals);
+        }
+
+#endregion
+
+#region Source Scanning
+
+        private List<ImportSource> sources;
+        public List<ImportSource> Sources {
+            get {
+                if (sources == null)
+                    sources = ScanSources ();
+                return sources;
+            }
+        }
+
+        List<ImportSource> ScanSources ()
+        {
+            var monitor = GLib.VolumeMonitor.Default;
+            var sources = new List<ImportSource> ();
+            foreach (var mount in monitor.Mounts) {
+                var root = new SafeUri (mount.Root.Uri, true);
+
+                var themed_icon = (mount.Icon as GLib.ThemedIcon);
+                if (themed_icon != null && themed_icon.Names.Length > 0) {
+                    sources.Add (new FileImportSource (root, mount.Name, themed_icon.Names [0]));
+                } else {
+                    sources.Add (new FileImportSource (root, mount.Name, null));
+                }
+            }
+            return sources;
+        }
+
+#endregion
+
+#region Status Reporting
+
+        public delegate void ImportProgressHandler (int current, int total);
+        public event ImportProgressHandler ProgressUpdated;
+
+        public delegate void ImportEventHandler (ImportEvent evnt);
+        public event ImportEventHandler StatusEvent;
+
+        void FireEvent (ImportEvent evnt)
+        {
+            ThreadAssist.ProxyToMain (() => {
+                var h = StatusEvent;
+                if (h != null)
+                    h (evnt);
+            });
+        }
+
+        void ReportProgress (int current, int total)
+        {
+            var h = ProgressUpdated;
+            if (h != null)
+                h (current, total);
+        }
+
+        public int PhotosImported { get; private set; }
+        public Roll CreatedRoll { get; private set; }
+        public List<SafeUri> FailedImports { get; private set; }
+
+#endregion
+
+#region Source Switching
+
+        private ImportSource active_source;
+        public ImportSource ActiveSource {
+            set {
+                if (value == active_source)
+                    return;
+                var old_source = active_source;
+                active_source = value;
+                FireEvent (ImportEvent.SourceChanged);
+                RescanPhotos ();
+                DeactivateSource (old_source);
+            }
+            get {
+                return active_source;
+            }
+        }
+
+        void DeactivateSource (ImportSource source)
+        {
+            if (source == null)
+                return;
+            source.Deactivate ();
+        }
+
+        void RescanPhotos ()
+        {
+            if (ActiveSource == null)
+                return;
+
+            photo_scan_running = true;
+            PhotoList pl = new PhotoList ();
+            Photos.Collection = pl;
+            ActiveSource.StartPhotoScan (this, pl);
+            FireEvent (ImportEvent.PhotoScanStarted);
+        }
+
+#endregion
+
+#region Source Progress Signalling
+
+        // These are callbacks that should be called by the sources.
+
+        public void PhotoScanFinished ()
+        {
+            photo_scan_running = false;
+            FireEvent (ImportEvent.PhotoScanFinished);
+        }
+
+#endregion
+
+#region Importing
+
+        Thread ImportThread;
+
+        public void StartImport ()
+        {
+            if (ImportThread != null)
+                throw new Exception ("Import already running!");
+
+            ImportThread = ThreadAssist.Spawn (() => DoImport ());
+        }
+
+        public void CancelImport ()
+        {
+            import_cancelled = true;
+            if (ImportThread != null)
+                ImportThread.Join ();
+            Cleanup ();
+        }
+
+        Stack<SafeUri> created_directories;
+        List<uint> imported_photos;
+        List<SafeUri> copied_files;
+        List<SafeUri> original_files;
+        PhotoStore store = App.Instance.Database.Photos;
+        RollStore rolls = App.Instance.Database.Rolls;
+        volatile bool photo_scan_running;
+        MetadataImporter metadata_importer;
+        volatile bool import_cancelled = false;
+
+        void DoImport ()
+        {
+            while (photo_scan_running) {
+                Thread.Sleep (1000); // FIXME: we can do this with a better primitive!
+            }
+
+            FireEvent (ImportEvent.ImportStarted);
+            App.Instance.Database.Sync = false;
+            created_directories = new Stack<SafeUri> ();
+            imported_photos = new List<uint> ();
+            copied_files = new List<SafeUri> ();
+            original_files = new List<SafeUri> ();
+            metadata_importer = new MetadataImporter ();
+            CreatedRoll = rolls.Create ();
+
+            EnsureDirectory (Global.PhotoUri);
+
+            try {
+                int i = 0;
+                int total = Photos.Count;
+                foreach (var info in Photos.Items) {
+                    if (import_cancelled) {
+                        RollbackImport ();
+                        return;
+                    }
+
+                    ThreadAssist.ProxyToMain (() => ReportProgress (i++, total));
+                    try {
+                        ImportPhoto (info, CreatedRoll);
+                    } catch (Exception e) {
+                        Log.DebugFormat ("Failed to import {0}", info.DefaultVersion.Uri);
+                        Log.DebugException (e);
+                        FailedImports.Add (info.DefaultVersion.Uri);
+                    }
+                }
+
+                PhotosImported = imported_photos.Count;
+                FinishImport ();
+            } catch (Exception e) {
+                RollbackImport ();
+                throw e;
+            } finally {
+                Cleanup ();
+            }
+        }
+
+        void Cleanup ()
+        {
+            if (imported_photos != null && imported_photos.Count == 0)
+                rolls.Remove (CreatedRoll);
+            imported_photos = null;
+            created_directories = null;
+            Photo.ResetMD5Cache ();
+            DeactivateSource (ActiveSource);
+            System.GC.Collect ();
+            App.Instance.Database.Sync = true;
+        }
+
+        void FinishImport ()
+        {
+            if (RemoveOriginals) {
+                foreach (var uri in original_files) {
+                    try {
+                        var file = GLib.FileFactory.NewForUri (uri);
+                        file.Delete (null);
+                    } catch (Exception) {
+                        Log.WarningFormat ("Failed to remove original file: {0}", uri);
+                    }
+                }
+            }
+
+            ImportThread = null;
+            FireEvent (ImportEvent.ImportFinished);
+        }
+
+        void RollbackImport ()
+        {
+            // Remove photos
+            foreach (var id in imported_photos) {
+                store.Remove (store.Get (id));
+            }
+
+            foreach (var uri in copied_files) {
+                var file = GLib.FileFactory.NewForUri (uri);
+                file.Delete (null);
+            }
+
+            // Clean up directories
+            while (created_directories.Count > 0) {
+                var uri = created_directories.Pop ();
+                var dir = GLib.FileFactory.NewForUri (uri);
+                var enumerator = dir.EnumerateChildren ("standard::name", GLib.FileQueryInfoFlags.None, null);
+                if (!enumerator.HasPending) {
+                    dir.Delete (null);
+                }
+            }
+
+            // Clean created tags
+            metadata_importer.Cancel();
+
+            // Remove created roll
+            rolls.Remove (CreatedRoll);
+        }
+
+        void ImportPhoto (IBrowsableItem item, Roll roll)
+        {
+            var destination = FindImportDestination (item);
+
+            // Do duplicate detection
+            if (DuplicateDetect && store.HasDuplicate (item)) {
+                return;
+            }
+
+            // Copy into photo folder.
+            CopyIfNeeded (item, destination);
+
+            // Import photo
+            var photo = store.CreateFrom (item, roll.Id);
+
+            bool needs_commit = false;
+
+            // Add tags
+            if (attach_tags.Count > 0) {
+                photo.AddTag (attach_tags);
+                needs_commit = true;
+            }
+
+            // Import XMP metadata
+            needs_commit |= metadata_importer.Import (photo, item);
+
+            if (needs_commit) {
+                store.Commit (photo);
+            }
+
+            // Prepare thumbnail (Import is I/O bound anyway)
+            ThumbnailLoader.Default.Request (destination, ThumbnailSize.Large, 10);
+
+            imported_photos.Add (photo.Id);
+        }
+
+        void CopyIfNeeded (IBrowsableItem item, SafeUri destination)
+        {
+            if (item.DefaultVersion.Uri.Equals (destination))
+                return;
+
+            // Copy image
+            var file = GLib.FileFactory.NewForUri (item.DefaultVersion.Uri);
+            var new_file = GLib.FileFactory.NewForUri (destination);
+            file.Copy (new_file, GLib.FileCopyFlags.AllMetadata, null, null);
+            copied_files.Add (destination);
+            original_files.Add (item.DefaultVersion.Uri);
+            item.DefaultVersion.Uri = destination;
+
+            // Copy XMP sidecar
+            var xmp_original = item.DefaultVersion.Uri.ReplaceExtension(".xmp");
+            var xmp_file = GLib.FileFactory.NewForUri (xmp_original);
+            if (xmp_file.Exists) {
+                var xmp_destination = destination.ReplaceExtension (".xmp");
+                var new_xmp_file = GLib.FileFactory.NewForUri (xmp_destination);
+                xmp_file.Copy (new_xmp_file, GLib.FileCopyFlags.AllMetadata | GLib.FileCopyFlags.Overwrite, null, null);
+                copied_files.Add (xmp_destination);
+                original_files.Add (xmp_original);
+            }
+        }
+
+        SafeUri FindImportDestination (IBrowsableItem item)
+        {
+            var uri = item.DefaultVersion.Uri;
+
+            if (!CopyFiles)
+                return uri; // Keep it at the same place
+
+            // Find a new unique location inside the photo folder
+            string name = uri.GetFilename ();
+            DateTime time = item.Time;
+
+            var dest_uri = 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);
+                }
+            }
+        }
+
+#endregion
+
+#region Tagging
+
+        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)
+        {
+            App.Instance.Database.BeginTransaction ();
+            var import_category = GetImportedTagsCategory ();
+            foreach (var tagname in tags) {
+                var tag = tag_store.GetTagByName (tagname);
+                if (tag == null) {
+                    tag = tag_store.CreateCategory (import_category, tagname, false) as Tag;
+                    tag_store.Commit (tag);
+                }
+                attach_tags.Add (tag);
+            }
+            App.Instance.Database.CommitTransaction ();
+        }
+
+        Category GetImportedTagsCategory ()
+        {
+            var default_category = tag_store.GetTagByName (Catalog.GetString ("Imported Tags")) as Category;
+            if (default_category == null) {
+                default_category = tag_store.CreateCategory (null, Catalog.GetString ("Imported Tags"), false);
+                default_category.ThemeIconName = "gtk-new";
+            }
+            return default_category;
+        }
+
+#endregion
+
+    }
+}
diff --git a/src/Clients/MainApp/FSpot.Import/ImportSource.cs b/src/Clients/MainApp/FSpot.Import/ImportSource.cs
new file mode 100644
index 0000000..8b8d2cc
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Import/ImportSource.cs
@@ -0,0 +1,13 @@
+using Hyena;
+using System;
+
+namespace FSpot.Import
+{
+    public interface ImportSource {
+        string Name { get; }
+        string IconName { get; }
+
+        void StartPhotoScan (ImportController controller, PhotoList photo_list);
+        void Deactivate ();
+    }
+}
diff --git a/src/Clients/MainApp/FSpot.Import/MetadataImporter.cs b/src/Clients/MainApp/FSpot.Import/MetadataImporter.cs
new file mode 100644
index 0000000..027564e
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Import/MetadataImporter.cs
@@ -0,0 +1,123 @@
+using System;
+using Mono.Unix;
+using System.Collections.Generic;
+using FSpot.Core;
+using FSpot.Utils;
+
+namespace FSpot.Import {
+    internal class MetadataImporter {
+        private TagStore tag_store;
+        private Stack<Tag> tags_created;
+
+        static private string LastImportIcon = "gtk-new";
+
+        private class TagInfo {
+            // This class contains the Root tag name, and its Icon name (if any)
+            string tag_name;
+            string icon_name;
+
+            public string TagName {
+                get { return tag_name; }
+            }
+
+            public string IconName {
+                get { return icon_name; }
+            }
+
+            public bool HasIcon {
+                get { return icon_name != null; }
+            }
+
+            public TagInfo (string t_name, string i_name)
+            {
+                tag_name = t_name;
+                icon_name = i_name;
+            }
+
+            public TagInfo (string t_name)
+            {
+                tag_name = t_name;
+                icon_name = null;
+            }
+        } // TagInfo
+
+        TagInfo li_root_tag; // This is the Last Import root tag
+
+        public MetadataImporter ()
+        {
+            this.tag_store = App.Instance.Database.Tags;
+            tags_created = new Stack<Tag> ();
+
+            li_root_tag = new TagInfo (Catalog.GetString ("Imported Tags"), LastImportIcon);
+        }
+
+        private Tag EnsureTag (TagInfo info, Category parent)
+        {
+            Tag tag = tag_store.GetTagByName (info.TagName);
+
+            if (tag != null)
+                return tag;
+
+            tag = tag_store.CreateCategory (parent,
+                    info.TagName,
+                    false);
+
+            if (info.HasIcon) {
+                tag.ThemeIconName = info.IconName;
+                tag_store.Commit(tag);
+            }
+
+            tags_created.Push (tag);
+            return tag;
+        }
+
+        private void AddTagToPhoto (Photo photo, string new_tag_name)
+        {
+            if (new_tag_name == null || new_tag_name.Length == 0)
+                return;
+
+            Tag parent = EnsureTag (li_root_tag, tag_store.RootCategory);
+            Tag tag = EnsureTag (new TagInfo (new_tag_name), parent as Category);
+
+            // Now we have the tag for this place, add the photo to it
+            photo.AddTag (tag);
+        }
+
+        public bool Import (Photo photo, IBrowsableItem importing_from)
+        {
+            using (var metadata = Metadata.Parse (importing_from.DefaultVersion.Uri)) {
+                // Copy Rating
+                var rating = metadata.ImageTag.Rating;
+                if (rating.HasValue) {
+                    var rating_val = Math.Min (metadata.ImageTag.Rating.Value, 5);
+                    photo.Rating = Math.Max (0, rating_val);
+                }
+
+                // Copy Keywords
+                foreach (var keyword in metadata.ImageTag.Keywords) {
+                    AddTagToPhoto (photo, keyword);
+                }
+
+                // XXX: We might want to copy more data.
+            }
+            return true;
+        }
+
+        public void Cancel()
+        {
+            // User have cancelled the import.
+            // Remove all created tags
+            while (tags_created.Count > 0)
+                tag_store.Remove (tags_created.Pop());
+
+            // Clear the tags_created array
+            tags_created.Clear();
+        }
+
+        public void Finish()
+        {
+            // Clear the tags_created array, since we do not need it anymore.
+            tags_created.Clear();
+        }
+    }
+} // namespace
diff --git a/src/Clients/MainApp/FSpot.Jobs/CalculateHashJob.cs b/src/Clients/MainApp/FSpot.Jobs/CalculateHashJob.cs
new file mode 100644
index 0000000..442a907
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Jobs/CalculateHashJob.cs
@@ -0,0 +1,50 @@
+/*
+ * Jobs/CalculateHashJob.cs
+ *
+ * Author(s)
+ *   Thomas Van Machelen <thomas.vanmachelen at gmail.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Banshee.Kernel;
+using Hyena;
+
+namespace FSpot.Jobs {
+	public class CalculateHashJob : Job
+	{
+		public CalculateHashJob (uint id, string job_options, int run_at, JobPriority job_priority, bool persistent)
+			: this (id, job_options, DateTimeUtil.ToDateTime (run_at), job_priority, persistent)
+		{
+		}
+
+		public CalculateHashJob (uint id, string job_options, DateTime run_at, JobPriority job_priority, bool persistent)
+			: base (id, job_options, job_priority, run_at, persistent)
+		{
+		}
+
+		public static CalculateHashJob Create (JobStore job_store, uint photo_id)
+		{
+			return (CalculateHashJob) job_store.CreatePersistent (typeof(FSpot.Jobs.CalculateHashJob), photo_id.ToString ());
+		}
+
+		protected override bool Execute ()
+		{
+			//this will add some more reactivity to the system
+			System.Threading.Thread.Sleep (200);
+
+			uint photo_id = Convert.ToUInt32 (JobOptions);
+			Log.DebugFormat ("Calculating Hash {0}...", photo_id);
+
+			try {
+				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) {
+				Log.DebugFormat ("Error Calculating Hash for photo {0}: {1}", JobOptions, e.Message);
+			}
+			return false;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Jobs/SyncMetadataJob.cs b/src/Clients/MainApp/FSpot.Jobs/SyncMetadataJob.cs
new file mode 100644
index 0000000..6b1c9c1
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Jobs/SyncMetadataJob.cs
@@ -0,0 +1,87 @@
+/*
+ * Jobs/SyncMetadataJob.cs
+ *
+ * Author(s)
+ *   Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Banshee.Kernel;
+using Hyena;
+using FSpot.Core;
+using FSpot.Utils;
+using Mono.Unix;
+
+namespace FSpot.Jobs {
+    public class SyncMetadataJob : Job
+    {
+        public SyncMetadataJob (uint id, string job_options, int run_at, JobPriority job_priority, bool persistent) : this (id, job_options, DateTimeUtil.ToDateTime (run_at), job_priority, persistent)
+        {
+        }
+
+        public SyncMetadataJob (uint id, string job_options, DateTime run_at, JobPriority job_priority, bool persistent) : base (id, job_options, job_priority, run_at, persistent)
+        {
+        }
+
+        //Use THIS static method to create a job...
+        public static SyncMetadataJob Create (JobStore job_store, Photo photo)
+        {
+            return (SyncMetadataJob) job_store.CreatePersistent (typeof (FSpot.Jobs.SyncMetadataJob), photo.Id.ToString ());
+        }
+
+        protected override bool Execute ()
+        {
+            //this will add some more reactivity to the system
+            System.Threading.Thread.Sleep (500);
+
+            try {
+                Photo photo = FSpot.App.Instance.Database.Photos.Get (Convert.ToUInt32 (JobOptions)) as Photo;
+                if (photo == null)
+                    return false;
+
+                Log.DebugFormat ("Syncing metadata to file ({0})...", photo.DefaultVersion.Uri);
+
+                WriteMetadataToImage (photo);
+                return true;
+            } catch (System.Exception e) {
+                Log.ErrorFormat ("Error syncing metadata to file\n{0}", e);
+            }
+            return false;
+        }
+
+        void WriteMetadataToImage (Photo photo)
+        {
+            Tag [] tags = photo.Tags;
+            string [] names = new string [tags.Length];
+
+            for (int i = 0; i < tags.Length; i++)
+                names [i] = tags [i].Name;
+
+            using (var metadata = Metadata.Parse (photo.DefaultVersion.Uri)) {
+                metadata.EnsureAvailableTags ();
+
+                var tag = metadata.ImageTag;
+                tag.DateTime = photo.Time;
+                tag.Comment = photo.Description ?? String.Empty;
+                tag.Keywords = names;
+                tag.Rating = photo.Rating;
+                tag.Software = Defines.PACKAGE + " version " + Defines.VERSION;
+
+                var always_sidecar = Preferences.Get<bool> (Preferences.METADATA_ALWAYS_USE_SIDECAR);
+                if (always_sidecar || !metadata.Writeable || metadata.PossiblyCorrupt) {
+                    if (!always_sidecar && metadata.PossiblyCorrupt) {
+                        Log.WarningFormat (Catalog.GetString ("Metadata of file {0} may be corrupt, refusing to write to it, falling back to XMP sidecar."), photo.DefaultVersion.Uri);
+                    }
+
+                    var sidecar_res = new GIOTagLibFileAbstraction () { Uri = photo.DefaultVersion.Uri.ReplaceExtension (".xmp") };
+
+                    metadata.SaveXmpSidecar (sidecar_res);
+                } else {
+                    metadata.Save ();
+                }
+            }
+        }
+    }
+}
diff --git a/src/Clients/MainApp/FSpot.Loaders/AreaPreparedEventArgs.cs b/src/Clients/MainApp/FSpot.Loaders/AreaPreparedEventArgs.cs
new file mode 100644
index 0000000..f8f6307
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Loaders/AreaPreparedEventArgs.cs
@@ -0,0 +1,29 @@
+//
+// Fspot.Loaders.AreaPreparedEventArgs.cs
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// Author(s)
+//	Stephane Delcroix  <sdelcroix at novell.com>
+//
+// This is free software. See COPYING for details
+//
+
+using System;
+using Gdk;
+
+namespace FSpot.Loaders {
+	public class AreaPreparedEventArgs : EventArgs
+	{
+		bool reduced_resolution;
+
+		public bool ReducedResolution {
+			get { return reduced_resolution; }
+		}
+
+		public AreaPreparedEventArgs (bool reduced_resolution) : base ()
+		{
+			this.reduced_resolution = reduced_resolution;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Loaders/AreaUpdatedEventArgs.cs b/src/Clients/MainApp/FSpot.Loaders/AreaUpdatedEventArgs.cs
new file mode 100644
index 0000000..de4a138
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Loaders/AreaUpdatedEventArgs.cs
@@ -0,0 +1,28 @@
+//
+// Fspot.Loaders.AreaUpdatedEventArgs.cs
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// Author(s)
+//	Stephane Delcroix  <sdelcroix at novell.com>
+//
+// This is free software. See COPYING for details
+//
+
+using System;
+using Gdk;
+
+namespace FSpot.Loaders {
+	public class AreaUpdatedEventArgs : EventArgs
+	{
+		Gdk.Rectangle area;
+		public Gdk.Rectangle Area {
+			get { return area; }
+		}
+
+		public AreaUpdatedEventArgs (Gdk.Rectangle area) : base ()
+		{
+			this.area = area;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs b/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs
new file mode 100644
index 0000000..1249e3a
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Loaders/GdkImageLoader.cs
@@ -0,0 +1,216 @@
+//
+// Fspot.ImageLoader.cs
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// Author(s)
+//	Stephane Delcroix  <sdelcroix at novell.com>
+//
+// This is free software. See COPYING for details
+//
+
+using System;
+using System.Threading;
+using Gdk;
+using FSpot.Utils;
+using FSpot.Platform;
+using FSpot.Imaging;
+using Hyena;
+using TagLib.Image;
+
+namespace FSpot.Loaders {
+	public class GdkImageLoader : Gdk.PixbufLoader, IImageLoader
+	{
+#region public api
+		public GdkImageLoader () : base ()
+		{
+		}
+
+        ~GdkImageLoader ()
+        {
+            if (!is_disposed)
+                Dispose ();
+        }
+
+		public void Load (SafeUri uri)
+		{
+			if (is_disposed)
+				return;
+
+			//First, send a thumbnail if we have one
+			if ((thumb = XdgThumbnailSpec.LoadThumbnail (uri, ThumbnailSize.Large, null)) != null) {
+				pixbuf_orientation = ImageOrientation.TopLeft;
+				EventHandler<AreaPreparedEventArgs> prep = AreaPrepared;
+				if (prep != null)
+					prep (this, new AreaPreparedEventArgs (true));
+				EventHandler<AreaUpdatedEventArgs> upd = AreaUpdated;
+				if (upd != null)
+					upd (this, new AreaUpdatedEventArgs (new Rectangle (0, 0, thumb.Width, thumb.Height)));
+			}
+
+			using (var image_file = ImageFile.Create (uri)) {
+				image_stream = image_file.PixbufStream ();
+				pixbuf_orientation = image_file.Orientation;
+			}
+
+			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) {
+				ThreadPool.QueueUserWorkItem (delegate {HandleReadDone (r);});
+			}, null);
+		}
+
+		new public event EventHandler<AreaPreparedEventArgs> AreaPrepared;
+		new public event EventHandler<AreaUpdatedEventArgs> AreaUpdated;
+		public event EventHandler Completed;
+
+
+		Pixbuf thumb;
+		new public Pixbuf Pixbuf {
+			get {
+				if (thumb != null)
+					return thumb;
+				return base.Pixbuf;
+			}
+		}
+
+		bool loading = false;
+		public bool Loading {
+			get { return loading; }
+		}
+
+		bool notify_prepared = false;
+		bool prepared = false;
+		public bool Prepared {
+			get { return prepared; }
+		}
+
+		ImageOrientation pixbuf_orientation = ImageOrientation.TopLeft;
+		public ImageOrientation PixbufOrientation {
+			get { return pixbuf_orientation; }
+		}
+
+		bool is_disposed = false;
+		public override void Dispose ()
+		{
+			is_disposed = true;
+			if (image_stream != null)
+				try {
+					image_stream.Close ();
+				} catch (GLib.GException)
+				{
+				}
+			Close ();
+			if (thumb != null) {
+				thumb.Dispose ();
+				thumb = null;
+			}
+			base.Dispose ();
+		}
+
+		public new bool Close ()
+		{
+			lock (sync_handle) {
+				return base.Close (true);
+			}
+		}
+#endregion
+
+#region event handlers
+		protected override void OnAreaPrepared ()
+		{
+			if (is_disposed)
+				return;
+
+			prepared = notify_prepared = true;
+			damage = Rectangle.Zero;
+			base.OnAreaPrepared ();
+		}
+
+		protected override void OnAreaUpdated (int x, int y, int width, int height)
+		{
+			if (is_disposed)
+				return;
+
+			Rectangle area = new Rectangle (x, y, width, height);
+			damage = damage == Rectangle.Zero ? area : damage.Union (area);
+			base.OnAreaUpdated (x, y, width, height);
+		}
+
+		protected virtual void OnCompleted ()
+		{
+			if (is_disposed)
+				return;
+
+			EventHandler eh = Completed;
+			if (eh != null)
+				eh (this, EventArgs.Empty);
+			Close ();
+		}
+#endregion
+
+#region private stuffs
+		System.IO.Stream image_stream;
+		const int count = 1 << 16;
+		byte [] buffer = new byte [count];
+		bool notify_completed = false;
+		Rectangle damage;
+		object sync_handle = new object ();
+
+		void HandleReadDone (IAsyncResult ar)
+		{
+			if (is_disposed)
+				return;
+
+			int byte_read = image_stream.EndRead (ar);
+			lock (sync_handle) {
+				if (byte_read == 0) {
+					image_stream.Close ();
+					Close ();
+					loading = false;
+					notify_completed = true;
+				} else {
+					try {
+						if (!is_disposed && Write (buffer, (ulong)byte_read))
+							image_stream.BeginRead (buffer, 0, count, HandleReadDone, null);
+					} catch (System.ObjectDisposedException) {
+					} catch (GLib.GException) {
+					}
+				}
+			}
+
+			GLib.Idle.Add (delegate {
+				//Send the AreaPrepared event
+				if (notify_prepared) {
+					notify_prepared = false;
+					if (thumb != null) {
+						thumb.Dispose ();
+						thumb = null;
+					}
+
+					EventHandler<AreaPreparedEventArgs> eh = AreaPrepared;
+					if (eh != null)
+						eh (this, new AreaPreparedEventArgs (false));
+				}
+
+				//Send the AreaUpdated events
+				if (damage != Rectangle.Zero) {
+					EventHandler<AreaUpdatedEventArgs> eh = AreaUpdated;
+					if (eh != null)
+						eh (this, new AreaUpdatedEventArgs (damage));
+					damage = Rectangle.Zero;
+				}
+
+				//Send the Completed event
+				if (notify_completed) {
+					notify_completed = false;
+					OnCompleted ();
+				}
+
+				return false;
+			});
+		}
+#endregion
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Loaders/IImageLoader.cs b/src/Clients/MainApp/FSpot.Loaders/IImageLoader.cs
new file mode 100644
index 0000000..d703d5c
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Loaders/IImageLoader.cs
@@ -0,0 +1,31 @@
+//
+// Fspot.Loaders.IImageLoader.cs
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// Author(s)
+//	Ruben Vermeersch  <ruben at savanne.be>
+//
+// This is free software. See COPYING for details
+//
+
+using FSpot.Utils;
+using System;
+using Gdk;
+using Hyena;
+using TagLib.Image;
+
+namespace FSpot.Loaders {
+	public interface IImageLoader : IDisposable {
+		bool Loading { get; }
+
+		event EventHandler<AreaPreparedEventArgs> AreaPrepared;
+		event EventHandler<AreaUpdatedEventArgs> AreaUpdated;
+		event EventHandler Completed;
+
+		void Load (SafeUri uri);
+
+		Pixbuf Pixbuf { get; }
+		ImageOrientation PixbufOrientation { get; }
+	}
+}
diff --git a/src/Loaders/ImageLoader.cs b/src/Clients/MainApp/FSpot.Loaders/ImageLoader.cs
similarity index 100%
rename from src/Loaders/ImageLoader.cs
rename to src/Clients/MainApp/FSpot.Loaders/ImageLoader.cs
diff --git a/src/Clients/MainApp/FSpot.Query/HiddenTag.cs b/src/Clients/MainApp/FSpot.Query/HiddenTag.cs
new file mode 100644
index 0000000..f603734
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Query/HiddenTag.cs
@@ -0,0 +1,63 @@
+/*
+ * HiddenTag.cs
+ *
+ * Author(s):
+ *	Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+
+using System;
+
+using FSpot;
+using FSpot.Core;
+
+
+namespace FSpot.Query
+{
+
+	public class HiddenTag : IQueryCondition
+	{
+		private static HiddenTag show_hidden_tag;
+		private static HiddenTag hide_hidden_tag;
+
+		public static HiddenTag ShowHiddenTag {
+			get {
+				if (show_hidden_tag == null)
+					show_hidden_tag = new HiddenTag (true);
+
+				return show_hidden_tag;
+			}
+		}
+
+		public static HiddenTag HideHiddenTag {
+			get {
+				if (hide_hidden_tag == null)
+					hide_hidden_tag = new HiddenTag (false);
+
+				return hide_hidden_tag;
+			}
+		}
+
+
+		bool show_hidden;
+
+		private HiddenTag (bool show_hidden)
+		{
+			this.show_hidden = show_hidden;
+		}
+
+		public string SqlClause ()
+		{
+			Tag hidden = App.Instance.Database.Tags.Hidden;
+
+			if ( ! show_hidden && hidden != null)
+				return String.Format (" photos.id NOT IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0}) ",
+				                      hidden.Id);
+			else
+				return null;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs
new file mode 100644
index 0000000..db41c8f
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/AboutDialog.cs
@@ -0,0 +1,147 @@
+/*
+ * FSpot.UI.Dialog.AboutDialog.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * Copyright (c) 2008-2009 Novell, Inc.
+ *
+ * This is open source software. See COPYING for details.
+ */
+
+using System;
+using System.IO;
+using Mono.Unix;
+using Hyena;
+
+namespace FSpot.UI.Dialog
+{
+    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",
+                    "",
+                    "Active Contributors to this release",
+                    "\tChristian Krause",
+                    "\tEric Faehnrich",
+                    "\tŁukasz Jernaś",
+                    "\tMike Gem\x00fcnde",
+                    "\tMike Wallick",
+                    "\tPaul Wellner Bou",
+                    "\tTim Retout",
+                    "",
+                    "Contributors",
+                    "\tAaron Bockover",
+                    "\tAdemir Mendoza",
+                    "\tAlessandro Gervaso",
+                    "\tAlex Graveley",
+                    "\tAlex Launi",
+                    "\tAlvaro del Castillo",
+                    "\tAnton Keks",
+                    "\tBengt Thuree",
+                    "\tBen Monnahan",
+                    "\tBertrand Lorentz",
+                    "\tChad Files",
+                    "\tChristopher Halse Rogers",
+                    "\tDaniel Köb",
+                    "\tEttore Perazzoli",
+                    "\tEvan Briones",
+                    "\tEwen Cheslack-Postava",
+                    "\tGabriel Burt",
+                    "\tGrahm Orr",
+                    "\tIain Churcher",
+                    "\tIain Lane",
+                    "\tJeffrey Finkelstein",
+                    "\tJeffrey Stedfast",
+                    "\tJoerg Buesse",
+                    "\tJoe Shaw",
+                    "\tJon Trowbridge",
+                    "\tJoshua Tauberer",
+                    "\tKarl Mikaelsson",
+                    "\tLaurence Hygate",
+                    "\tLee Willis",
+                    "\tLorenzo Milesi",
+                    "\tMartin Willemoes Hansen",
+                    "\tMatt Jones",
+                    "\tMatt Perry",
+                    "\tMichal Nánási",
+                    "\tMiguel de Icaza",
+                    "\tNat Friedman",
+                    "\tNick Van Eeckhout",
+                    "\tPascal de Bruijn",
+                    "\tPatanjali Somayaji",
+                    "\tPaul Lange",
+                    "\tPeter Goetz",
+                    "\tPeter Johanson",
+                    "\tTambet Ingo",
+                    "\tThomas Van Machelen",
+                    "\tTodd Berman",
+                    "\tTomas Kovacik",
+                    "\tTrevor Buchanan",
+                    "\tVasily Kirilichev",
+                    "\tVincent Moreau",
+                    "\tVincent Pomey",
+                    "\tVladimir Vukicevic",
+                    "\tWojciech Dzierżanowski",
+                    "\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 ();
+        }
+    }
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs
new file mode 100644
index 0000000..b9a363c
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/AdjustTimeDialog.cs
@@ -0,0 +1,274 @@
+/*
+ * FSpot.UI.Dialogs.AdjstTimeDialog.cs
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Gtk;
+using System.Collections;
+using Mono.Unix;
+using FSpot.Core;
+using FSpot.Database;
+using FSpot.Widgets;
+using Hyena;
+
+namespace FSpot.UI.Dialog {
+	public class AdjustTimeDialog : BuilderDialog
+	{
+		[GtkBeans.Builder.Object] ScrolledWindow view_scrolled;
+		[GtkBeans.Builder.Object] ScrolledWindow tray_scrolled;
+		[GtkBeans.Builder.Object] Button ok_button;
+		[GtkBeans.Builder.Object] Button cancel_button;
+		[GtkBeans.Builder.Object] SpinButton photo_spin;
+		[GtkBeans.Builder.Object] Label name_label;
+		[GtkBeans.Builder.Object] Label old_label;
+		[GtkBeans.Builder.Object] Label count_label;
+		[GtkBeans.Builder.Object] Gnome.DateEdit date_edit;
+		[GtkBeans.Builder.Object] Frame tray_frame;
+		[GtkBeans.Builder.Object] Gtk.Entry offset_entry;
+		[GtkBeans.Builder.Object] Gtk.CheckButton difference_check;
+		[GtkBeans.Builder.Object] Gtk.Frame action_frame;
+		[GtkBeans.Builder.Object] Gtk.Entry spacing_entry;
+		[GtkBeans.Builder.Object] Gtk.Label starting_label;
+
+		IBrowsableCollection collection;
+		BrowsablePointer item;
+		FSpot.Widgets.IconView tray;
+		PhotoImageView view;
+		Db db;
+		TimeSpan gnome_dateedit_sucks;
+
+		public AdjustTimeDialog (Db db, IBrowsableCollection collection) : base ("AdjustTimeDialog.ui", "time_dialog")
+		{
+			this.db = db;
+			this.collection = collection;
+
+			tray = new TrayView (collection);
+			tray_scrolled.Add (tray);
+			tray.Selection.Changed += HandleSelectionChanged;
+
+			view = new PhotoImageView (collection);
+			view_scrolled.Add (view);
+			item = view.Item;
+			item.Changed += HandleItemChanged;
+			item.MoveFirst ();
+
+			//forward_button.Clicked += HandleForwardClicked;
+			//back_button.Clicked += HandleBackClicked;
+			ok_button.Clicked += HandleOkClicked;
+			cancel_button.Clicked += HandleCancelClicked;
+
+			photo_spin.ValueChanged += HandleSpinChanged;
+			photo_spin.SetIncrements (1.0, 1.0);
+			photo_spin.Adjustment.StepIncrement = 1.0;
+			photo_spin.Wrap = true;
+
+			date_edit.TimeChanged += HandleTimeChanged;
+			date_edit.DateChanged += HandleTimeChanged;
+			Gtk.Entry entry = (Gtk.Entry) date_edit.Children [0];
+			entry.Changed += HandleTimeChanged;
+			entry = (Gtk.Entry) date_edit.Children [2];
+			entry.Changed += HandleTimeChanged;
+			offset_entry.Changed += HandleOffsetChanged;
+			ShowAll ();
+			HandleCollectionChanged (collection);
+
+			spacing_entry.Changed += HandleSpacingChanged;
+			spacing_entry.Sensitive = ! difference_check.Active;
+
+			difference_check.Toggled += HandleActionToggled;
+		}
+
+		DateTime EditTime {
+			get { return date_edit.Time - gnome_dateedit_sucks; }
+		}
+
+		TimeSpan Offset
+		{
+			get {
+				Log.DebugFormat ("{0} - {1} = {2}", date_edit.Time, item.Current.Time, date_edit.Time - item.Current.Time);
+				return EditTime - item.Current.Time;
+			}
+			set {
+				date_edit.Time = item.Current.Time - gnome_dateedit_sucks + value;
+			}
+		}
+
+		void HandleTimeChanged (object sender, EventArgs args)
+		{
+			TimeSpan span = Offset;
+			Log.DebugFormat ("time changed {0}", span);
+			if (! offset_entry.HasFocus)
+				offset_entry.Text = span.ToString ();
+
+			starting_label.Text = "min.";
+			difference_check.Label = String.Format (Catalog.GetString ("Shift all photos by {0}"),
+							      Offset);
+		}
+
+		void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs args)
+		{
+			//back_button.Sensitive = (Item.Index > 0 && collection.Count > 0);
+			//forward_button.Sensitive = (Item.Index < collection.Count - 1);
+
+			if (item.IsValid) {
+				IBrowsableItem curr_item = item.Current;
+
+				name_label.Text = System.Uri.UnescapeDataString(curr_item.Name);
+				old_label.Text = (curr_item.Time).ToString ();
+
+				int i = collection.Count > 0 ? item.Index + 1: 0;
+				// Note for translators: This indicates the current photo is photo {0} of {1} out of photos
+				count_label.Text = System.String.Format (Catalog.GetString ("{0} of {1}"), i, collection.Count);
+
+				DateTime actual = curr_item.Time;
+				date_edit.Time = actual;
+				gnome_dateedit_sucks = date_edit.Time - actual;
+			}
+			HandleTimeChanged (this, System.EventArgs.Empty);
+
+			if (!tray.Selection.Contains (item.Index)) {
+				tray.Selection.Clear ();
+				tray.Selection.Add (item.Index);
+			}
+
+			photo_spin.Value = item.Index + 1;
+		}
+
+		private void ShiftByDifference ()
+		{
+			TimeSpan span = Offset;
+			Photo [] photos = new Photo [collection.Count];
+
+			for (int i = 0; i < collection.Count; i++) {
+				Photo p = (Photo) collection [i];
+				DateTime time = p.Time;
+				p.Time = time + span;
+				photos [i] = p;
+				Log.DebugFormat ("XXXXX old: {0} new: {1} span: {2}", time, p.Time, span);
+			}
+
+			db.Photos.Commit (photos);
+		}
+
+		private void SpaceByInterval ()
+		{
+			DateTime date = EditTime;
+		        long ticks = (long) (double.Parse (spacing_entry.Text) * TimeSpan.TicksPerMinute);
+			TimeSpan span = new TimeSpan (ticks);
+			Photo [] photos = new Photo [collection.Count];
+
+			for (int i = 0; i < collection.Count; i++) {
+				photos [i] = (Photo) collection [i];
+			}
+
+			TimeSpan accum = new TimeSpan (0);
+			for (int j = item.Index; j > 0; j--) {
+				date -= span;
+			}
+
+			for (int i = 0; i < photos.Length; i++) {
+				photos [i].Time = date + accum;
+				accum += span;
+			}
+
+			db.Photos.Commit (photos);
+		}
+
+		void HandleSpinChanged (object sender, EventArgs args)
+		{
+			item.Index = photo_spin.ValueAsInt - 1;
+		}
+
+		void HandleOkClicked (object sender, EventArgs args)
+		{
+			if (! item.IsValid)
+				throw new ApplicationException ("invalid item selected");
+
+			Sensitive = false;
+
+			if (difference_check.Active)
+				ShiftByDifference ();
+			else
+				SpaceByInterval ();
+
+
+			Destroy ();
+		}
+
+		void HandleOffsetChanged (object sender, EventArgs args)
+		{
+			Log.DebugFormat ("offset = {0}", Offset);
+			TimeSpan current = Offset;
+			try {
+				TimeSpan span = TimeSpan.Parse (offset_entry.Text);
+				if (span != current)
+					Offset = span;
+			} catch (System.Exception) {
+				Log.WarningFormat ("unparsable span {0}", offset_entry.Text);
+			}
+		}
+
+		void HandleSpacingChanged (object sender, EventArgs args)
+		{
+			if (! spacing_entry.Sensitive)
+				return;
+
+			try {
+				double.Parse (spacing_entry.Text);
+				ok_button.Sensitive = true;
+			} catch {
+				ok_button.Sensitive = false;
+			}
+		}
+
+		void HandleActionToggled (object sender, EventArgs args)
+		{
+			spacing_entry.Sensitive = ! difference_check.Active;
+			HandleSpacingChanged (sender, args);
+		}
+
+		void HandleCancelClicked (object sender, EventArgs args)
+		{
+			Destroy ();
+		}
+
+		void HandleForwardClicked (object sender, EventArgs args)
+		{
+			view.Item.MoveNext ();
+		}
+
+		void HandleBackClicked (object sender, EventArgs args)
+		{
+			view.Item.MovePrevious ();
+		}
+
+		void HandleSelectionChanged (IBrowsableCollection sender)
+		{
+			if (sender.Count > 0) {
+				view.Item.Index = ((FSpot.Widgets.IconView.SelectionCollection)sender).Ids[0];
+
+			}
+		}
+
+		void HandleCollectionChanged (IBrowsableCollection collection)
+		{
+			bool multiple = collection.Count > 1;
+			tray_frame.Visible = multiple;
+			//forward_button.Visible = multiple;
+			//back_button.Visible = multiple;
+			count_label.Visible = multiple;
+			photo_spin.Visible = multiple;
+			action_frame.Visible = multiple;
+			photo_spin.SetRange (1.0, (double) collection.Count);
+		}
+	}
+}
diff --git a/src/UI.Dialog/BuilderDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/BuilderDialog.cs
similarity index 100%
rename from src/UI.Dialog/BuilderDialog.cs
rename to src/Clients/MainApp/FSpot.UI.Dialog/BuilderDialog.cs
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs
new file mode 100644
index 0000000..e511406
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/DateRangeDialog.cs
@@ -0,0 +1,246 @@
+/*
+ * FSpot.UI.Dialog.DateRangeDialog.cs
+ *
+ * Author(s):
+ * 	Larry Ewing <lewing at novell.com>
+ * 	Bengt Thuree
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using Gtk;
+using System;
+using Mono.Unix;
+using FSpot.Query;
+using FSpot.Widgets;
+
+namespace FSpot.UI.Dialog
+{
+	public class DateRangeDialog : BuilderDialog {
+		[GtkBeans.Builder.Object] Frame startframe;
+		[GtkBeans.Builder.Object] Frame endframe;
+		[GtkBeans.Builder.Object] ComboBox period_combobox;
+
+		DateEdit start_dateedit;
+		DateEdit end_dateedit;
+
+		TreeStore rangestore;
+
+		static string [] ranges = {
+			"today",
+			"yesterday",
+			"last7days",
+			"last30days",
+			"last90days",
+			"last360days",
+			"currentweek",
+			"previousweek",
+			"thismonth",
+			"previousmonth",
+			"thisyear",
+			"previousyear",
+			"alldates",
+			"customizedrange"
+		};
+
+		public DateRangeDialog (DateRange query_range, Gtk.Window parent_window) : base ("DateRangeDialog.ui", "date_range_dialog")
+		{
+			TransientFor = parent_window;
+			DefaultResponse = ResponseType.Ok;
+
+			(startframe.Child as Bin).Child = start_dateedit = new DateEdit ();
+			start_dateedit.Show ();
+			(endframe.Child as Bin).Child = end_dateedit = new DateEdit ();
+			end_dateedit.Show ();
+
+			var cell_renderer = new CellRendererText ();
+
+			// Build the combo box with years and month names
+			period_combobox.Model = rangestore = new TreeStore (typeof (string));
+			period_combobox.PackStart (cell_renderer, true);
+
+			period_combobox.SetCellDataFunc (cell_renderer, new CellLayoutDataFunc (RangeCellFunc));
+
+			foreach (string range in ranges)
+				rangestore.AppendValues (GetString(range));
+
+			period_combobox.Changed += HandlePeriodComboboxChanged;
+			period_combobox.Active = System.Array.IndexOf(ranges, "last7days"); // Default to Last 7 days
+
+			if (query_range != null) {
+				start_dateedit.DateTimeOffset = query_range.Start;
+				end_dateedit.DateTimeOffset = query_range.End;
+			}
+
+		}
+
+		void RangeCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
+		{
+			string name = (string)tree_model.GetValue (iter, 0);
+			(cell as CellRendererText).Text = name;
+		}
+
+		private string GetString(string rangename)
+		{
+			System.DateTime today = System.DateTime.Today;
+			switch (rangename) {
+			case "today":
+				return Catalog.GetString("Today");
+			case "yesterday":
+				return Catalog.GetString("Yesterday");
+			case "last7days":
+				return Catalog.GetString("Last 7 days");
+			case "last30days":
+				return Catalog.GetString("Last 30 days");
+			case "last90days":
+				return Catalog.GetString("Last 90 days");
+			case "last360days":
+				return Catalog.GetString("Last 360 days");
+			case "currentweek":
+				return Catalog.GetString("Current Week (Mon-Sun)");
+			case "previousweek":
+				return Catalog.GetString("Previous Week (Mon-Sun)");
+			case "thismonth":
+				if (today.Year == (today.AddMonths(-1)).Year) // Same year for current and previous month. Present only MONTH
+					return today.ToString("MMMM");
+				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");
+				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":
+				return today.AddYears(-1).ToString("yyyy");
+			case "alldates":
+				return Catalog.GetString("All Images");
+			case "customizedrange":
+				return Catalog.GetString("Customized Range");
+			default:
+				return rangename;
+			}
+		}
+
+		public DateRange Range {
+			get { return QueryRange (period_combobox.Active); }
+		}
+
+		private DateRange QueryRange (int index)
+		{
+			return QueryRange ( ranges [index]);
+		}
+
+		private DateRange QueryRange (string rangename)
+		{
+			System.DateTime today = System.DateTime.Today;
+			System.DateTime startdate = today;
+			System.DateTime enddate = today;
+			bool clear = false;
+
+			switch (rangename) {
+			case "today":
+				startdate = today;
+				enddate = today;
+				break;
+			case "yesterday":
+				startdate = today.AddDays (-1);
+				enddate = today.AddDays (-1);
+				break;
+			case "last7days":
+				startdate = today.AddDays (-6);
+				enddate = today;
+				break;
+			case "last30days":
+				startdate = today.AddDays (-29);
+				enddate = today;
+				break;
+			case "last90days":
+				startdate = today.AddDays (-89);
+				enddate = today;
+				break;
+			case "last360days":
+				startdate = today.AddDays (-359);
+				enddate = today;
+				break;
+			case "currentweek":
+				startdate = today.AddDays (System.DayOfWeek.Sunday - today.DayOfWeek); // Gets to Sunday
+				startdate = startdate.AddDays (1); // Advance to Monday according to ISO 8601
+				enddate = today;
+				break;
+			case "previousweek":
+				startdate = today.AddDays (System.DayOfWeek.Sunday - today.DayOfWeek); // Gets to Sunday
+				startdate = startdate.AddDays (1); // Advance to Monday according to ISO 8601
+				startdate = startdate.AddDays(-7); // Back 7 days
+				enddate = startdate.AddDays (6);
+				break;
+			case "thismonth":
+				startdate = new System.DateTime(today.Year, today.Month, 1); // the first of the month
+				enddate = today; // we don't have pictures in the future
+				break;
+			case "previousmonth":
+				startdate = new System.DateTime((today.AddMonths(-1)).Year, (today.AddMonths(-1)).Month, 1);
+				enddate = new System.DateTime((today.AddMonths(-1)).Year, (today.AddMonths(-1)).Month, System.DateTime.DaysInMonth((today.AddMonths(-1)).Year,(today.AddMonths(-1)).Month));
+				break;
+			case "thisyear":
+				startdate = new System.DateTime(today.Year, 1, 1); // Jan 1st of this year
+				enddate = today;
+				break;
+			case "previousyear":
+				startdate = new System.DateTime((today.AddYears(-1)).Year, 1, 1); // Jan 1st of prev year
+				enddate = new System.DateTime((today.AddYears(-1)).Year, 12, 31); // Dec, 31 of prev year
+				break;
+			case "alldates":
+				clear = true;
+				break;
+			case "customizedrange":
+				startdate = start_dateedit.DateTimeOffset.Date;
+				enddate = end_dateedit.DateTimeOffset.Date;
+				break;
+			default:
+				clear = true;
+				break;
+			}
+			if (!clear)
+				return new DateRange (startdate, enddate.Add (new System.TimeSpan(23,59,59)));
+			else
+				return null;
+		}
+
+		void HandleDateEditChanged (object o, EventArgs args)
+		{
+			period_combobox.Changed -= HandlePeriodComboboxChanged;
+			period_combobox.Active = System.Array.IndexOf (ranges, "customizedrange");
+			period_combobox.Changed += HandlePeriodComboboxChanged;
+		}
+
+		void HandlePeriodComboboxChanged (object o, EventArgs args)
+		{
+			start_dateedit.DateChanged -= HandleDateEditChanged;
+			((Gtk.Entry) start_dateedit.Children [0] as Gtk.Entry).Changed -= HandleDateEditChanged;
+			end_dateedit.DateChanged -= HandleDateEditChanged;
+			((Gtk.Entry) end_dateedit.Children [0] as Gtk.Entry).Changed -= HandleDateEditChanged;
+
+			ComboBox combo = o as ComboBox;
+			if (o == null)
+				return;
+
+			start_dateedit.Sensitive = (combo.Active != System.Array.IndexOf (ranges, "alldates"));
+			end_dateedit.Sensitive = (combo.Active != System.Array.IndexOf (ranges, "alldates"));
+
+			DateRange range = QueryRange (period_combobox.Active);
+			if (range != null) {
+				start_dateedit.DateTimeOffset = range.Start;
+				end_dateedit.DateTimeOffset = range.End;
+			}
+
+			start_dateedit.DateChanged += HandleDateEditChanged;
+			((Gtk.Entry) start_dateedit.Children [0] as Gtk.Entry).Changed += HandleDateEditChanged;
+			end_dateedit.DateChanged += 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
new file mode 100644
index 0000000..cae04fc
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/EditExceptionDialog.cs
@@ -0,0 +1,66 @@
+/*
+ * FSpot.UI.Dialog.EditExceptionDialog.cs
+ *
+ * Author(s)
+ *	Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Mono.Unix;
+using Gtk;
+using Hyena;
+using Hyena.Widgets;
+using FSpot.Core;
+
+namespace FSpot.UI.Dialog
+{
+	public class EditException : Exception
+	{
+		IBrowsableItem item;
+
+		public IBrowsableItem Item {
+			get { return item; }
+		}
+
+		public EditException (IBrowsableItem item, Exception e) : base (
+                        String.Format (Catalog.GetString ("Received exception \"{0}\". Unable to save photo {1}"),
+				       e.Message, item.Name), e)
+		{
+			this.item = item;
+		}
+	}
+
+	public class EditExceptionDialog : HigMessageDialog
+	{
+		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))
+		{
+			foreach (Exception e in errors)
+				Log.Exception (e);
+		}
+
+		public EditExceptionDialog (Gtk.Window parent, Exception e, IBrowsableItem item) : this (parent, new EditException (item, e))
+		{
+		}
+
+		public EditExceptionDialog (Gtk.Window parent, Exception e) : this (parent, new Exception [] { e })
+		{
+		}
+
+		private static string GenerateMessage (Exception [] errors)
+		{
+			string desc = String.Empty;
+			for (int i = 0; i < errors.Length && i < MaxErrors; i++) {
+				Exception e = errors [i];
+				desc += e.Message + Environment.NewLine;
+			}
+			return desc;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/EditTagDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/EditTagDialog.cs
new file mode 100644
index 0000000..3068623
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/EditTagDialog.cs
@@ -0,0 +1,161 @@
+/*
+ * FSpot.UI.Dialog.EditTagDialog.cs
+ *
+ * Author(s):
+ * 	Larry Ewing <lewing at novell.com>
+ * 	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * Copyright (c) 2003-2009 Novell, Inc,
+ * Copyright (c) 2007 Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using System.Collections;
+using Mono.Unix;
+using Gtk;
+using FSpot.Core;
+using FSpot.Database;
+
+namespace FSpot.UI.Dialog
+{
+	public class EditTagDialog : BuilderDialog {
+		Db db;
+		Tag tag;
+
+		[GtkBeans.Builder.Object] Button ok_button;
+		[GtkBeans.Builder.Object] Entry tag_name_entry;
+		[GtkBeans.Builder.Object] Label already_in_use_label;
+		[GtkBeans.Builder.Object] Gtk.Image icon_image;
+		[GtkBeans.Builder.Object] OptionMenu category_option_menu;
+
+
+		public EditTagDialog (Db db, Tag t, Gtk.Window parent_window) : base ("EditTagDialog.ui", "edit_tag_dialog")
+		{
+			this.db = db;
+			tag = t;
+			TransientFor = parent_window;
+
+			orig_name = last_valid_name = t.Name;
+			tag_name_entry.Text = t.Name;
+
+			icon_image.Pixbuf = t.Icon;
+			Cms.Profile screen_profile;
+			if (icon_image.Pixbuf != null && FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
+				icon_image.Pixbuf = icon_image.Pixbuf.Copy();
+				FSpot.ColorManagement.ApplyProfile (icon_image.Pixbuf, screen_profile);
+			}
+			PopulateCategoryOptionMenu  (t);
+
+			tag_name_entry.GrabFocus ();
+
+			category_option_menu.Changed += HandleTagNameEntryChanged;
+		}
+
+		string orig_name;
+		string last_valid_name;
+		public string TagName {
+			get { return last_valid_name; }
+		}
+
+		public Category TagCategory {
+			get { return categories [category_option_menu.History] as Category;}
+		}
+
+		ArrayList categories;
+
+		void HandleTagNameEntryChanged (object sender, EventArgs args)
+		{
+			string name = tag_name_entry.Text;
+
+			if (name == String.Empty) {
+				ok_button.Sensitive = false;
+				already_in_use_label.Markup = String.Empty;
+			} else if (TagNameExistsInCategory (name, db.Tags.RootCategory)
+				   && String.Compare(name, orig_name, true) != 0) {
+				ok_button.Sensitive = false;
+				already_in_use_label.Markup = "<small>" + Catalog.GetString ("This name is already in use") + "</small>";
+			} else {
+				ok_button.Sensitive = true;
+				already_in_use_label.Markup = String.Empty;
+				last_valid_name = tag_name_entry.Text;
+			}
+		}
+
+		bool TagNameExistsInCategory (string name, Category category)
+		{
+			foreach (Tag tag in category.Children) {
+				if (String.Compare(tag.Name, name, true) == 0)
+					return true;
+
+				if (tag is Category && TagNameExistsInCategory (name, tag as Category))
+					return true;
+			}
+
+			return false;
+		}
+
+		void PopulateCategories (ArrayList categories, Category parent)
+		{
+			foreach (Tag tag in parent.Children) {
+				if (tag is Category && tag != this.tag && !this.tag.IsAncestorOf (tag)) {
+					categories.Add (tag);
+					PopulateCategories (categories, tag as Category);
+				}
+			}
+		}
+
+		void HandleIconButtonClicked (object sender, EventArgs args)
+		{
+			EditTagIconDialog dialog = new EditTagIconDialog (db, tag, this);
+
+			ResponseType response = (ResponseType) dialog.Run ();
+			if (response == ResponseType.Ok) {
+				if (dialog.ThemeIconName != null) {
+					tag.ThemeIconName = dialog.ThemeIconName;
+				} else {
+					tag.ThemeIconName = null;
+					tag.Icon = dialog.PreviewPixbuf;
+				}
+			} else if (response == (ResponseType)1)
+				tag.Icon = null;
+
+			Cms.Profile screen_profile;
+			if (tag.Icon != null && FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
+				icon_image.Pixbuf = tag.Icon.Copy();
+				FSpot.ColorManagement.ApplyProfile(icon_image.Pixbuf, screen_profile);
+			} else
+				icon_image.Pixbuf = tag.Icon;
+
+			dialog.Destroy ();
+		}
+
+		void PopulateCategoryOptionMenu (Tag t)
+		{
+			int history = 0;
+			int i = 0;
+			categories = new ArrayList ();
+			Category root = db.Tags.RootCategory;
+			categories.Add (root);
+			PopulateCategories (categories, root);
+
+			Menu menu = new Menu ();
+
+			foreach (Category category in categories) {
+				if (t.Category == category)
+					history = i;
+
+				i++;
+
+				menu.Append (TagMenu.TagMenuItem.IndentedItem (category));
+			}
+
+			category_option_menu.Sensitive = true;
+
+			menu.ShowAll ();
+			category_option_menu.Menu = menu;
+			category_option_menu.SetHistory ((uint)history);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs
new file mode 100644
index 0000000..402fdc4
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/EditTagIconDialog.cs
@@ -0,0 +1,233 @@
+/*
+ * FSpot.UI.Dialog.EditTagIconDialog.cs
+ *
+ * Author(s):
+ * 	Larry Ewing <lewing at novell.com>
+ * 	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * Copyright (c) 2003-2009 Novell, Inc,
+ * Copyright (c) 2007 Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using Mono.Unix;
+using Gtk;
+using FSpot.Core;
+using FSpot.Database;
+using FSpot.Widgets;
+using FSpot.Utils;
+using FSpot.Imaging;
+using Hyena;
+using Hyena.Widgets;
+
+namespace FSpot.UI.Dialog
+{
+	public class EditTagIconDialog : BuilderDialog {
+		FSpot.PhotoQuery query;
+		PhotoImageView image_view;
+		Gtk.IconView icon_view;
+		ListStore icon_store;
+		string icon_name = null;
+		Gtk.FileChooserButton external_photo_chooser;
+
+		[GtkBeans.Builder.Object] Gtk.Image preview_image;
+		[GtkBeans.Builder.Object] Gtk.ScrolledWindow photo_scrolled_window;
+		[GtkBeans.Builder.Object] Gtk.ScrolledWindow icon_scrolled_window;
+		[GtkBeans.Builder.Object] Label photo_label;
+		[GtkBeans.Builder.Object] Label from_photo_label;
+		[GtkBeans.Builder.Object] SpinButton photo_spin_button;
+		[GtkBeans.Builder.Object] HBox external_photo_chooser_hbox;
+
+		public EditTagIconDialog (Db db, Tag t, Gtk.Window parent_window) : base ("EditTagIconDialog.ui", "edit_tag_icon_dialog")
+		{
+			TransientFor = parent_window;
+			Title = String.Format (Catalog.GetString ("Edit Icon for Tag {0}"), t.Name);
+
+			preview_pixbuf = t.Icon;
+			Cms.Profile screen_profile;
+			if (preview_pixbuf != null && FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
+				preview_image.Pixbuf = preview_pixbuf.Copy ();
+				ColorManagement.ApplyProfile (preview_image.Pixbuf, screen_profile);
+			} else
+				preview_image.Pixbuf = preview_pixbuf;
+
+			query = new FSpot.PhotoQuery (db.Photos);
+
+			if (db.Tags.Hidden != null)
+				query.Terms = FSpot.OrTerm.FromTags (new Tag [] {t});
+			else
+				query.Terms = new FSpot.Literal (t);
+
+			image_view = new PhotoImageView (query) {CropHelpers = false};
+			image_view.SelectionXyRatio = 1.0;
+			image_view.SelectionChanged += HandleSelectionChanged;
+			image_view.PhotoChanged += HandlePhotoChanged;
+
+			external_photo_chooser = new Gtk.FileChooserButton (Catalog.GetString ("Select Photo from file"),
+					Gtk.FileChooserAction.Open);
+
+			external_photo_chooser.Filter = new FileFilter();
+			external_photo_chooser.Filter.AddPixbufFormats();
+                        external_photo_chooser.LocalOnly = false;
+			external_photo_chooser_hbox.PackStart (external_photo_chooser);
+			external_photo_chooser.Show ();
+			external_photo_chooser.SelectionChanged += HandleExternalFileSelectionChanged;
+
+			photo_scrolled_window.Add (image_view);
+
+			if (query.Count > 0) {
+				photo_spin_button.Wrap = true;
+				photo_spin_button.Adjustment.Lower = 1.0;
+				photo_spin_button.Adjustment.Upper = (double) query.Count;
+				photo_spin_button.Adjustment.StepIncrement = 1.0;
+				photo_spin_button.ValueChanged += HandleSpinButtonChanged;
+
+				image_view.Item.Index = 0;
+			} else {
+				from_photo_label.Markup = String.Format (Catalog.GetString (
+					"\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."), t.Name);
+				photo_scrolled_window.Visible = false;
+				photo_label.Visible = false;
+				photo_spin_button.Visible = false;
+			}
+
+			icon_store = new ListStore (typeof (string), typeof (Gdk.Pixbuf));
+
+			icon_view = new Gtk.IconView (icon_store);
+			icon_view.PixbufColumn = 1;
+			icon_view.SelectionMode = SelectionMode.Single;
+			icon_view.SelectionChanged += HandleIconSelectionChanged;
+
+			icon_scrolled_window.Add (icon_view);
+
+			icon_view.Show();
+
+			image_view.Show ();
+
+			Delay fill_delay = new Delay (FillIconView);
+			fill_delay.Start ();
+		}
+
+		public BrowsablePointer Item {
+			get { return image_view.Item; }
+		}
+
+		Gdk.Pixbuf preview_pixbuf;
+		public Gdk.Pixbuf PreviewPixbuf {
+			get { return preview_pixbuf; }
+			set {
+				icon_name = null;
+				preview_pixbuf = value;
+				Cms.Profile screen_profile;
+				if (value!= null && FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
+					preview_image.Pixbuf = value.Copy ();
+					ColorManagement.ApplyProfile (preview_image.Pixbuf, screen_profile);
+				} else
+					preview_image.Pixbuf = value;
+
+			}
+
+		}
+
+		public string ThemeIconName {
+			get { return icon_name; }
+			set {
+				icon_name = value;
+				PreviewPixbuf = GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, value, 48, (IconLookupFlags) 0);
+			}
+
+		}
+
+		void HandleSpinButtonChanged (object sender, EventArgs args)
+		{
+			int value = photo_spin_button.ValueAsInt - 1;
+
+			image_view.Item.Index = value;
+		}
+
+		void HandleExternalFileSelectionChanged (object sender, EventArgs args)
+		{	//Note: The filter on the FileChooserButton's dialog means that we will have a Pixbuf compatible uri here
+			CreateTagIconFromExternalPhoto ();
+		}
+
+		void CreateTagIconFromExternalPhoto ()
+		{
+			try {
+				using (var img = ImageFile.Create (new SafeUri(external_photo_chooser.Uri, true))) {
+					using (Gdk.Pixbuf external_image = img.Load ()) {
+						PreviewPixbuf = PixbufUtils.TagIconFromPixbuf (external_image);
+					}
+				}
+			} catch (Exception) {
+				string caption = Catalog.GetString ("Unable to load image");
+				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);
+				md.Run();
+				md.Destroy();
+			}
+		}
+
+		void HandleSelectionChanged (object sender, EventArgs e)
+		{
+			int x = image_view.Selection.X;
+			int y = image_view.Selection.Y;
+			int width = image_view.Selection.Width;
+			int height = image_view.Selection.Height;
+
+			if (image_view.Pixbuf != null) {
+				if (image_view.Selection != Gdk.Rectangle.Zero) {
+					using (var tmp = new Gdk.Pixbuf (image_view.Pixbuf, x, y, width, height)) {
+						Gdk.Pixbuf transformed = FSpot.Utils.PixbufUtils.TransformOrientation (tmp, image_view.PixbufOrientation);
+						PreviewPixbuf = PixbufUtils.TagIconFromPixbuf (transformed);
+						transformed.Dispose ();
+					}
+				} else {
+					Gdk.Pixbuf transformed = FSpot.Utils.PixbufUtils.TransformOrientation (image_view.Pixbuf, image_view.PixbufOrientation);
+					PreviewPixbuf = PixbufUtils.TagIconFromPixbuf (transformed);
+					transformed.Dispose ();
+				}
+			}
+		}
+
+		public void HandlePhotoChanged (object sender, EventArgs e)
+		{
+			int item = image_view.Item.Index;
+			photo_label.Text = String.Format (Catalog.GetString ("Photo {0} of {1}"),
+							  item + 1, query.Count);
+
+			photo_spin_button.Value = item + 1;
+			HandleSelectionChanged (null, null);
+		}
+
+		public void HandleIconSelectionChanged (object o, EventArgs args)
+		{
+			if (icon_view.SelectedItems.Length == 0)
+				return;
+
+			TreeIter iter;
+			icon_store.GetIter (out iter, icon_view.SelectedItems [0]);
+			ThemeIconName = (string) icon_store.GetValue (iter, 0);
+		}
+
+		public bool FillIconView ()
+		{
+			icon_store.Clear ();
+			string [] icon_list = FSpot.Core.Global.IconTheme.ListIcons ("Emblems");
+			foreach (string item_name in icon_list)
+				icon_store.AppendValues (item_name, GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, item_name, 32, (IconLookupFlags) 0));
+			return false;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/GladeDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/GladeDialog.cs
new file mode 100644
index 0000000..a185445
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/GladeDialog.cs
@@ -0,0 +1,61 @@
+/*
+ * FSpot.UI.Dialog.GladeDialog
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using System;
+
+namespace FSpot.UI.Dialog
+{
+	public class GladeDialog
+	{
+		protected string dialog_name;
+		protected Glade.XML xml;
+		private Gtk.Dialog dialog;
+
+		protected GladeDialog ()
+		{
+		}
+
+		public GladeDialog (string widget_name) : this (widget_name, "f-spot.glade")
+		{
+		}
+
+		public GladeDialog (string widget_name, string resource_name)
+		{
+			if (widget_name == null)
+				throw new ArgumentNullException ("widget_name");
+			if (resource_name == null)
+				throw new ArgumentNullException ("resource_name");
+
+			CreateDialog (widget_name, resource_name);
+		}
+
+		protected void CreateDialog (string widget_name)
+		{
+			CreateDialog (widget_name, "f-spot.glade");
+		}
+
+		protected void CreateDialog (string widget_name, string resource_name)
+		{
+			this.dialog_name = widget_name;
+			xml = new Glade.XML (null, resource_name, widget_name, "f-spot");
+			xml.Autoconnect (this);
+		}
+
+		public Gtk.Dialog Dialog {
+			get {
+				if (dialog == null)
+					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+				return dialog;
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs
new file mode 100644
index 0000000..c80b0d8
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/ImportDialog.cs
@@ -0,0 +1,359 @@
+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
+{
+    public class ImportDialog : BuilderDialog
+    {
+        static readonly string select_folder_label = Catalog.GetString ("Choose Folder...");
+        private ImportController Controller { get; set; }
+        private TreeStore Sources { get; set; }
+
+        private static Dictionary<string, ImportSource> history_sources = new Dictionary<string, ImportSource> ();
+
+        [GtkBeans.Builder.Object] Button cancel_button;
+        [GtkBeans.Builder.Object] Button import_button;
+        [GtkBeans.Builder.Object] CheckButton copy_check;
+        [GtkBeans.Builder.Object] CheckButton duplicate_check;
+        [GtkBeans.Builder.Object] CheckButton recurse_check;
+        [GtkBeans.Builder.Object] CheckButton remove_check;
+        [GtkBeans.Builder.Object] Button remove_warning_button;
+        [GtkBeans.Builder.Object] ComboBox sources_combo;
+        [GtkBeans.Builder.Object] HBox tagentry_box;
+        [GtkBeans.Builder.Object] HPaned import_hpaned;
+        [GtkBeans.Builder.Object] ProgressBar progress_bar;
+        [GtkBeans.Builder.Object] ScrolledWindow icon_scrolled;
+        [GtkBeans.Builder.Object] ScrolledWindow photo_scrolled;
+        [GtkBeans.Builder.Object] Label attachtags_label;
+
+        private PhotoImageView photo_view;
+        private TagEntry tag_entry;
+
+        public ImportDialog (ImportController controller, Window parent) : base ("import.ui", "import_dialog")
+        {
+            Controller = controller;
+            BuildUI (parent);
+            ResetPreview ();
+            LoadPreferences ();
+            ScanSources ();
+            ConnectEvents ();
+        }
+
+        void BuildUI (Window parent)
+        {
+            TransientFor = parent;
+            WindowPosition = WindowPosition.CenterOnParent;
+
+            photo_view = new PhotoImageView (Controller.Photos);
+            photo_scrolled.Add (photo_view);
+            photo_scrolled.SetSizeRequest (200, 200);
+            photo_view.Show ();
+
+            GtkUtil.ModifyColors (photo_scrolled);
+            GtkUtil.ModifyColors (photo_view);
+
+            var tray = new ScalingIconView (Controller.Photos);
+            tray.Selection.Changed += (c) => {
+                if (tray.Selection.Count > 0)
+                    photo_view.Item.Index = tray.Selection.Ids[0];
+            };
+            icon_scrolled.Add (tray);
+            tray.DisplayTags = false;
+            tray.Show ();
+
+            progress_bar.Hide ();
+
+            import_button.Sensitive = false;
+
+            tag_entry = new TagEntry (App.Instance.Database.Tags, false);
+            tag_entry.UpdateFromTagNames (new string []{});
+            tagentry_box.Add (tag_entry);
+            tag_entry.Show ();
+            attachtags_label.MnemonicWidget = tag_entry;
+        }
+
+        void ResetPreview ()
+        {
+            photo_view.Pixbuf = GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, "f-spot", 128, (Gtk.IconLookupFlags)0);
+            photo_view.ZoomFit (false);
+        }
+
+        void LoadPreferences ()
+        {
+            if (Preferences.Get<int> (Preferences.IMPORT_WINDOW_WIDTH) > 0) {
+                Resize (Preferences.Get<int> (Preferences.IMPORT_WINDOW_WIDTH), Preferences.Get<int> (Preferences.IMPORT_WINDOW_HEIGHT));
+            }
+
+            if (FSpot.Preferences.Get<int> (Preferences.IMPORT_WINDOW_PANE_POSITION) > 0) {
+                import_hpaned.Position = Preferences.Get<int> (Preferences.IMPORT_WINDOW_PANE_POSITION);
+            }
+
+            copy_check.Active = Controller.CopyFiles;
+            recurse_check.Active = Controller.RecurseSubdirectories;
+            duplicate_check.Active = Controller.DuplicateDetect;
+            remove_check.Active = Controller.RemoveOriginals;
+            remove_check.Sensitive = copy_check.Active;
+            remove_warning_button.Sensitive = copy_check.Active && remove_check.Active;
+        }
+
+        void ScanSources ()
+        {
+            // Populates the source combo box
+            Sources = new TreeStore (typeof(ImportSource), typeof(string), typeof(string), typeof(bool));
+            sources_combo.Model = Sources;
+            sources_combo.RowSeparatorFunc = (m, i) => (m.GetValue (i, 1) as string) == String.Empty;
+            var render = new CellRendererPixbuf ();
+            sources_combo.PackStart (render, false);
+            sources_combo.SetAttributes (render, "icon-name", 2, "sensitive", 3);
+            var render2 = new CellRendererText ();
+            sources_combo.PackStart (render2, true);
+            sources_combo.SetAttributes (render2, "text", 1, "sensitive", 3);
+
+            GLib.Idle.Add (() => {
+                PopulateSourceCombo (null);
+                QueueDraw ();
+                return false;
+            });
+        }
+
+        void PopulateSourceCombo (ImportSource source_to_activate)
+        {
+            int activate_index = 0;
+            sources_combo.Changed -= OnSourceComboChanged;
+            Sources.Clear ();
+            Sources.AppendValues (null, Catalog.GetString ("Choose Import source..."), String.Empty, true);
+            Sources.AppendValues (null, select_folder_label, "folder", true);
+            Sources.AppendValues (null, String.Empty, String.Empty);
+            bool mount_added = false;
+            foreach (var source in Controller.Sources) {
+                if (source == source_to_activate) {
+                    activate_index = Sources.IterNChildren ();
+                }
+                Sources.AppendValues (source, source.Name, source.IconName, true);
+                mount_added = true;
+            }
+            if (!mount_added) {
+                Sources.AppendValues (null, Catalog.GetString ("(No Cameras Detected)"), String.Empty, false);
+            }
+
+            if (history_sources.Count > 0) {
+                Sources.AppendValues (null, String.Empty, String.Empty);
+                foreach (var source in history_sources.Values) {
+                    if (source == source_to_activate) {
+                        activate_index = Sources.IterNChildren ();
+                    }
+                    Sources.AppendValues (source, source.Name, source.IconName, true);
+                }
+            }
+            sources_combo.Changed += OnSourceComboChanged;
+            sources_combo.Active = activate_index;
+        }
+
+        void ConnectEvents ()
+        {
+            Controller.StatusEvent += OnControllerStatusEvent;
+            Controller.ProgressUpdated += OnControllerProgressUpdated;
+            copy_check.Toggled += (o, args) => {
+                Controller.CopyFiles = copy_check.Active;
+                remove_check.Sensitive = copy_check.Active;
+                remove_warning_button.Sensitive = copy_check.Active && remove_check.Active;
+            };
+            recurse_check.Toggled += (o, args) => { Controller.RecurseSubdirectories = recurse_check.Active; };
+            duplicate_check.Toggled += (o, args) => { Controller.DuplicateDetect = duplicate_check.Active; };
+            remove_check.Toggled += (o, args) => {
+                Controller.RemoveOriginals = remove_check.Active;
+                remove_warning_button.Sensitive = copy_check.Active && remove_check.Active;
+            };
+            import_button.Clicked += (o, args) => StartImport ();
+            cancel_button.Clicked += (o, args) => CancelImport ();
+            remove_warning_button.Clicked += (o, args) => {
+                var dialog = new MessageDialog (this, DialogFlags.Modal, MessageType.Warning, ButtonsType.Ok, true,
+                        Catalog.GetString ("Checking this box will remove the imported photos from the camera after the import finished successfully.\n\nIt is generally recommended to backup your photos before removing them from the camera. <b>Use this option at your own risk!</b>"));
+                dialog.Title = Catalog.GetString ("Warning");
+                dialog.Response += (s, arg) => {
+                    dialog.Destroy ();
+                };
+                dialog.Run ();
+            };
+            Response += (o, args) => {
+                if (args.ResponseId == ResponseType.DeleteEvent) {
+                    CancelImport ();
+                }
+            };
+        }
+
+        void ShowFolderSelector ()
+        {
+            var file_chooser = new FileChooserDialog (
+                Catalog.GetString ("Import"), this,
+                FileChooserAction.SelectFolder,
+                Stock.Cancel, ResponseType.Cancel,
+                Stock.Open, ResponseType.Ok);
+
+            file_chooser.SelectMultiple = false;
+            file_chooser.LocalOnly = false;
+
+            int response = file_chooser.Run ();
+            if ((ResponseType) response == ResponseType.Ok) {
+                var uri = new SafeUri (file_chooser.Uri, true);
+                SwitchToFolderSource (uri);
+            }
+
+            file_chooser.Destroy ();
+        }
+
+        public void SwitchToFolderSource (SafeUri uri)
+        {
+            ImportSource source = null;
+            if (!history_sources.TryGetValue (uri, out source)) {
+                var name = uri.GetFilename ();
+                source = new FileImportSource (uri, name, "folder");
+                history_sources[uri] = source;
+            }
+
+            PopulateSourceCombo (source);
+            Controller.ActiveSource = source;
+        }
+
+        int current_index = -1;
+        void OnSourceComboChanged (object sender, EventArgs args)
+        {
+            // Prevent double firing.
+            if (sources_combo.Active == current_index) {
+                Log.Debug ("Skipping double fire!");
+                return;
+            } else {
+                current_index = sources_combo.Active;
+            }
+
+            TreeIter iter;
+            sources_combo.GetActiveIter (out iter);
+            var source = Sources.GetValue (iter, 0) as ImportSource;
+            if (source == null) {
+                var label = (string) Sources.GetValue (iter, 1);
+                if (label == select_folder_label) {
+                    ShowFolderSelector ();
+                    return;
+                } else {
+                    sources_combo.Active = 0;
+                    return;
+                }
+            }
+            Controller.ActiveSource = source;
+        }
+
+        void OnControllerStatusEvent (ImportEvent evnt)
+        {
+            Log.DebugFormat ("Received controller event: {0}", evnt);
+
+            switch (evnt) {
+                case ImportEvent.SourceChanged:
+                    HideScanSpinner ();
+                    ResetPreview ();
+                    import_button.Sensitive = true;
+                    break;
+
+                case ImportEvent.PhotoScanStarted:
+                    ShowScanSpinner ();
+                    break;
+
+                case ImportEvent.PhotoScanFinished:
+                    HideScanSpinner ();
+                    break;
+
+                case ImportEvent.ImportStarted:
+                    ShowImportProgress ();
+                    break;
+
+                case ImportEvent.ImportFinished:
+                    ShowFailuresIfNeeded (Controller.FailedImports);
+                    Controller = null;
+                    Destroy ();
+                    break;
+
+                case ImportEvent.ImportError:
+                    // TODO
+                    break;
+            }
+        }
+
+        void ShowFailuresIfNeeded (List<SafeUri> files)
+        {
+            if (Controller.FailedImports.Count == 0)
+                return;
+
+            new ImportFailureDialog (files).Show ();
+        }
+
+        void OnControllerProgressUpdated (int current, int total)
+        {
+            var importing_label = Catalog.GetString ("Importing Photos: {0} of {1}...");
+            progress_bar.Text = String.Format (importing_label, current, total);
+            progress_bar.Fraction = (double) current / Math.Max (total, 1);
+        }
+
+        void StartImport ()
+        {
+            Controller.AttachTags (tag_entry.GetTypedTagNames ());
+            Controller.StartImport ();
+            import_button.Sensitive = false;
+            OptionsSensitive = false;
+        }
+
+        void CancelImport ()
+        {
+            Controller.CancelImport ();
+            Controller = null;
+            Destroy ();
+        }
+
+        bool pulse_timeout_running = false;
+
+        void ShowImportProgress ()
+        {
+            progress_bar.Text = Catalog.GetString ("Importing photos...");
+            progress_bar.Show ();
+        }
+
+        void ShowScanSpinner ()
+        {
+            // TODO: Using a GtkSpinner would be nicer here.
+            progress_bar.Text = Catalog.GetString ("Searching for photos... (You can already click Import to continue)");
+            progress_bar.Show ();
+            pulse_timeout_running = true;
+            GLib.Timeout.Add (40, () => {
+                if (!pulse_timeout_running) {
+                    return false;
+                }
+
+                progress_bar.Pulse ();
+                return pulse_timeout_running;
+            });
+        }
+
+        void HideScanSpinner ()
+        {
+            pulse_timeout_running = false;
+            progress_bar.Hide ();
+        }
+
+        public bool OptionsSensitive
+        {
+            set {
+                sources_combo.Sensitive = value;
+                copy_check.Sensitive = value;
+                recurse_check.Sensitive = value;
+                duplicate_check.Sensitive = value;
+                tagentry_box.Sensitive = value;
+            }
+        }
+    }
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs
new file mode 100644
index 0000000..fbe21a6
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/ImportFailureDialog.cs
@@ -0,0 +1,144 @@
+using System;
+using System.Collections.Generic;
+using Gtk;
+using Mono.Unix;
+using Hyena;
+
+namespace FSpot.UI.Dialog
+{
+	public class ImportFailureDialog : Gtk.Dialog
+	{
+		// FIXME: Replace with ErrorListDialog from Banshee when possible
+
+        private VBox inner_vbox;
+
+        private Label header_label;
+        private Hyena.Widgets.WrapLabel message_label;
+        private TreeView list_view;
+        private Expander details_expander;
+
+        private AccelGroup accel_group;
+        protected AccelGroup AccelGroup {
+            get { return accel_group; }
+        }
+
+
+
+		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;
+
+			Title = Catalog.GetString ("Import failures");
+			Header = Catalog.GetString ("Some files failed to import");
+			Message = Catalog.GetString ("Some files could not be imported, they might be corrupt "
+					+ "or there might be something wrong with the storage on which they reside.");
+
+			foreach (SafeUri uri in files) {
+				(ListView.Model as ListStore).AppendValues (uri.GetFilename (), uri.GetBaseUri ().ToString ());
+			}
+		}
+
+		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 ();
+
+            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);
+
+			DefaultResponse = ResponseType.Close;
+			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 Message {
+            set { message_label.Text = value; }
+        }
+
+        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
new file mode 100644
index 0000000..e775cc1
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/LastRollDialog.cs
@@ -0,0 +1,131 @@
+/*
+ * LastRollDialog.cs:
+ *
+ * Author(s):
+ * 	Bengt Thuree (bengt at thuree.com)
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+
+using System;
+using Gtk;
+using FSpot.Core;
+using FSpot.Query;
+using FSpot.UI.Dialog;
+
+namespace FSpot.UI.Dialog {
+	public class LastRolls : BuilderDialog {
+		FSpot.PhotoQuery query;
+		RollStore rollstore;
+
+		Roll [] rolls;
+
+		[GtkBeans.Builder.Object] private ComboBox combo_filter; // at, after, or between
+		[GtkBeans.Builder.Object] private ComboBox combo_roll_1;
+		[GtkBeans.Builder.Object] private ComboBox combo_roll_2;
+		[GtkBeans.Builder.Object] private Label    and_label; // and label between two comboboxes.
+		[GtkBeans.Builder.Object] private Label    photos_in_selected_rolls;
+
+		public LastRolls (FSpot.PhotoQuery query, RollStore rollstore, Window parent) : base ("LastImportRollFilterDialog.ui", "last_import_rolls_filter")
+		{
+			this.query = query;
+			this.rollstore = rollstore;
+			rolls = rollstore.GetRolls (FSpot.Preferences.Get<int> (FSpot.Preferences.IMPORT_GUI_ROLL_HISTORY));
+
+            TransientFor = parent;
+
+			PopulateCombos ();
+
+			combo_filter.Active = 0;
+			combo_roll_1.Active = 0;
+			combo_roll_2.Active = 0;
+
+			DefaultResponse = ResponseType.Ok;
+			Response += HandleResponse;
+			Show ();
+		}
+
+		[GLib.ConnectBefore]
+		protected void HandleResponse (object o, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId == ResponseType.Ok) {
+				Roll [] selected_rolls = SelectedRolls ();
+
+				if (selected_rolls != null && selected_rolls.Length > 0 )
+					query.RollSet = new RollSet (selected_rolls);
+			}
+			Destroy ();
+		}
+
+		void HandleComboFilterChanged (object o, EventArgs args)
+		{
+			combo_roll_2.Visible = (combo_filter.Active == 2);
+			and_label.Visible = combo_roll_2.Visible;
+
+			UpdateNumberOfPhotos ();
+		}
+
+		void HandleComboRollChanged (object o, EventArgs args)
+		{
+			UpdateNumberOfPhotos ();
+		}
+
+		private void UpdateNumberOfPhotos()
+		{
+			Roll [] selected_rolls = SelectedRolls ();
+			uint sum = 0;
+			if (selected_rolls != null)
+				foreach (Roll roll in selected_rolls)
+					sum = sum + rollstore.PhotosInRoll (roll);
+			photos_in_selected_rolls.Text = sum.ToString();
+		}
+
+		private void PopulateCombos ()
+		{
+			for (uint k = 0; k < rolls.Length; k++)
+			{
+				uint numphotos = rollstore.PhotosInRoll (rolls [k]);
+				// Roll time is in UTC always
+				DateTime date = rolls [k].Time.ToLocalTime ();
+
+				string header = String.Format ("{0} ({1})",
+					date.ToString("%dd %MMM, %HH:%mm"),
+					numphotos);
+
+				combo_roll_1.AppendText (header);
+				combo_roll_2.AppendText (header);
+			}
+		}
+
+		private Roll [] SelectedRolls ()
+		{
+			if ((combo_roll_1.Active < 0) || ((combo_filter.Active == 2) && (combo_roll_2.Active < 0)))
+				return null;
+
+			System.Collections.ArrayList result = new System.Collections.ArrayList ();
+
+			switch (combo_filter.Active) {
+			case 0 : // at - Return the roll the user selected
+				result.Add (rolls [combo_roll_1.Active]);
+				break;
+			case 1 : // after - Return all rolls from latest to the one the user selected
+				for (uint k = 0; k <= combo_roll_1.Active; k++)
+					result.Add (rolls [k]);
+				break;
+			case 2 : // between - Return all rolls between the two import rolls the user selected
+				uint k1 = (uint) combo_roll_1.Active;
+				uint k2 = (uint) combo_roll_2.Active;
+				if (k1 > k2) {
+					k1 = (uint) combo_roll_2.Active;
+					k2 = (uint) combo_roll_1.Active;
+				}
+				for (uint k = k1; k <= k2; k++)
+					result.Add (rolls[k]);
+				break;
+			}
+			return (Roll []) result.ToArray (typeof(Roll));
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs
new file mode 100644
index 0000000..f789947
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/PreferenceDialog.cs
@@ -0,0 +1,310 @@
+/*
+ * FSpot.UI.Dialog.PreferenceDialog.cs
+ *
+ * Authors(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * Copyright (c) 2005-2009 Novell, Inc.
+ * Copyright (c) 2007,2010 Stephane Delcroix
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+using Gtk;
+using Mono.Unix;
+using Hyena;
+
+using FSpot.Widgets;
+
+namespace FSpot.UI.Dialog {
+	public class PreferenceDialog : BuilderDialog
+	{
+		[GtkBeans.Builder.Object] FileChooserButton photosdir_chooser;
+
+		[GtkBeans.Builder.Object] RadioButton writemetadata_radio;
+		[GtkBeans.Builder.Object] RadioButton dontwrite_radio;
+		[GtkBeans.Builder.Object] CheckButton always_sidecar_check;
+
+		[GtkBeans.Builder.Object] ComboBox theme_combo;
+		[GtkBeans.Builder.Object] ComboBox screenprofile_combo;
+		[GtkBeans.Builder.Object] ComboBox printprofile_combo;
+
+#region public API (ctor)
+		public PreferenceDialog (Window parent) : base ("PreferenceDialog.ui", "preference_dialog")
+		{
+			TransientFor = parent;
+
+			//Photos Folder
+			if (FSpot.Core.Global.PhotoUri == new SafeUri (Preferences.Get<string> (Preferences.STORAGE_PATH))) {
+				photosdir_chooser.SetCurrentFolderUri (FSpot.Core.Global.PhotoUri);
+				photosdir_chooser.CurrentFolderChanged += HandlePhotosdirChanged;
+			} else {
+				photosdir_chooser.SetCurrentFolderUri (FSpot.Core.Global.PhotoUri);
+				photosdir_chooser.Sensitive = false;
+			}
+
+			//Write Metadata
+			LoadPreference (Preferences.METADATA_EMBED_IN_IMAGE);
+			LoadPreference (Preferences.METADATA_ALWAYS_USE_SIDECAR);
+
+			//Screen profile
+			ListStore sprofiles = new ListStore (typeof (string), typeof (int));
+			sprofiles.AppendValues (Catalog.GetString ("None"), 0);
+			if (FSpot.ColorManagement.XProfile != null)
+				sprofiles.AppendValues (Catalog.GetString ("System profile"), -1);
+			sprofiles.AppendValues (null, 0);
+
+			//Pick the display profiles from the full list, avoid _x_profile_
+			var dprofs = from profile in FSpot.ColorManagement.Profiles
+				where (profile.Value.DeviceClass == Cms.IccProfileClass.Display && profile.Key != "_x_profile_")
+				select profile;
+			foreach (var p in dprofs)
+				sprofiles.AppendValues (p.Key, 1);
+
+			CellRendererText profilecellrenderer = new CellRendererText ();
+			profilecellrenderer.Ellipsize = Pango.EllipsizeMode.End;
+
+			screenprofile_combo.Model = sprofiles;
+			screenprofile_combo.PackStart (profilecellrenderer, true);
+			screenprofile_combo.RowSeparatorFunc = ProfileSeparatorFunc;
+			screenprofile_combo.SetCellDataFunc (profilecellrenderer, ProfileCellFunc);
+			LoadPreference (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE);
+
+			//Print profile
+			ListStore pprofiles = new ListStore (typeof (string), typeof (int));
+			pprofiles.AppendValues (Catalog.GetString ("None"), 0);
+			pprofiles.AppendValues (null, 0);
+
+			var pprofs = from profile in FSpot.ColorManagement.Profiles
+				where (profile.Value.DeviceClass == Cms.IccProfileClass.Output && profile.Key != "_x_profile_")
+				select profile;
+			foreach (var p in pprofs)
+				pprofiles.AppendValues (p.Key, 1);
+
+			printprofile_combo.Model = pprofiles;
+			printprofile_combo.PackStart (profilecellrenderer, true);
+			printprofile_combo.RowSeparatorFunc = ProfileSeparatorFunc;
+			printprofile_combo.SetCellDataFunc (profilecellrenderer, ProfileCellFunc);
+			LoadPreference (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE);
+
+			//Theme chooser
+			ListStore themes = new ListStore (typeof (string), typeof (string));
+			themes.AppendValues (Catalog.GetString ("Standard theme"), null);
+			themes.AppendValues (null, null); //Separator
+			string gtkrc = System.IO.Path.Combine ("gtk-2.0", "gtkrc");
+			string [] search = {System.IO.Path.Combine (FSpot.Core.Global.HomeDirectory, ".themes"), "/usr/share/themes"};
+			foreach (string path in search)
+				if (System.IO.Directory.Exists (path))
+					foreach (string dir in System.IO.Directory.GetDirectories (path))
+						if (File.Exists (System.IO.Path.Combine (dir, gtkrc)))
+							themes.AppendValues (System.IO.Path.GetFileName (dir), System.IO.Path.Combine (dir, gtkrc));
+			CellRenderer themecellrenderer = new CellRendererText ();
+			theme_combo.Model = themes;
+			theme_combo.PackStart (themecellrenderer, true);
+			theme_combo.RowSeparatorFunc = ThemeSeparatorFunc;
+			theme_combo.SetCellDataFunc (themecellrenderer, ThemeCellFunc);
+			LoadPreference (Preferences.GTK_RC);
+
+			ConnectEvents ();
+		}
+#endregion
+
+#region preferences
+		void OnPreferencesChanged (object sender, NotifyEventArgs args)
+		{
+			LoadPreference (args.Key);
+		}
+
+		void LoadPreference (string key)
+		{
+			string pref;
+			int i;
+			switch (key) {
+			case Preferences.STORAGE_PATH:
+				photosdir_chooser.SetCurrentFolder (Preferences.Get<string> (key));
+				break;
+			case Preferences.METADATA_EMBED_IN_IMAGE:
+				bool embed_active = Preferences.Get<bool> (key);
+				if (writemetadata_radio.Active != embed_active) {
+					if (embed_active) {
+						writemetadata_radio.Active = true;
+					} else {
+						dontwrite_radio.Active = true;
+					}
+				}
+				always_sidecar_check.Sensitive = embed_active;
+				break;
+			case Preferences.METADATA_ALWAYS_USE_SIDECAR:
+				bool always_use_sidecar = Preferences.Get<bool> (key);
+				always_sidecar_check.Active = always_use_sidecar;
+				break;
+			case Preferences.GTK_RC:
+				pref = Preferences.Get<string> (key);
+				if (String.IsNullOrEmpty (pref)) {
+					theme_combo.Active = 0;
+					break;
+				}
+				i = 0;
+				foreach (object [] row in theme_combo.Model as ListStore) {
+					if (pref == (string)row [1]) {
+						theme_combo.Active = i;
+						break;
+					}
+					i++;
+				}
+				break;
+			case Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE:
+				pref = Preferences.Get<string> (key);
+				if (String.IsNullOrEmpty (pref)) {
+					screenprofile_combo.Active = 0;
+					break;
+				}
+				if (pref == "_x_profile_" && FSpot.ColorManagement.XProfile != null) {
+					screenprofile_combo.Active = 1;
+					break;
+				}
+				i = 0;
+				foreach (object [] row in screenprofile_combo.Model as ListStore) {
+					if (pref == (string)row [0]) {
+						screenprofile_combo.Active = i;
+						break;
+					}
+					i++;
+				}
+				break;
+			case Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE:
+				pref = Preferences.Get<string> (key);
+				if (String.IsNullOrEmpty (pref)) {
+					printprofile_combo.Active = 0;
+					break;
+				}
+				i = 0;
+				foreach (object [] row in printprofile_combo.Model as ListStore) {
+					if (pref == (string)row [0]) {
+						printprofile_combo.Active = i;
+						break;
+					}
+					i++;
+				}
+				break;
+			}
+		}
+#endregion
+
+#region event handlers
+		void ConnectEvents ()
+		{
+			Preferences.SettingChanged += OnPreferencesChanged;
+			screenprofile_combo.Changed += HandleScreenProfileComboChanged;
+			printprofile_combo.Changed += HandlePrintProfileComboChanged;
+			theme_combo.Changed += HandleThemeComboChanged;
+			writemetadata_radio.Toggled += HandleWritemetadataGroupChanged;
+			always_sidecar_check.Toggled += HandleAlwaysSidecareCheckToggled;
+		}
+
+		void HandlePhotosdirChanged (object sender, System.EventArgs args)
+		{
+			photosdir_chooser.CurrentFolderChanged -= HandlePhotosdirChanged;
+			Preferences.Set (Preferences.STORAGE_PATH, photosdir_chooser.Filename);
+			photosdir_chooser.CurrentFolderChanged += HandlePhotosdirChanged;
+			FSpot.Core.Global.PhotoUri = new SafeUri (photosdir_chooser.Uri, true);
+		}
+
+		void HandleWritemetadataGroupChanged (object sender, System.EventArgs args)
+		{
+			Preferences.Set (Preferences.METADATA_EMBED_IN_IMAGE, writemetadata_radio.Active);
+		}
+
+		void HandleAlwaysSidecareCheckToggled (object sender, EventArgs args)
+		{
+			Preferences.Set (Preferences.METADATA_ALWAYS_USE_SIDECAR, always_sidecar_check.Active);
+		}
+
+		void HandleThemeComboChanged (object sender, EventArgs e)
+		{
+			ComboBox combo = sender as ComboBox;
+			if (combo == null)
+				return;
+			TreeIter iter;
+			if (combo.GetActiveIter (out iter)) {
+				string gtkrc = (string)combo.Model.GetValue (iter, 1);
+				if (!String.IsNullOrEmpty (gtkrc))
+					Preferences.Set (Preferences.GTK_RC, gtkrc);
+				else
+					Preferences.Set (Preferences.GTK_RC, String.Empty);
+			}
+			Gtk.Rc.DefaultFiles = FSpot.Core.Global.DefaultRcFiles;
+			Gtk.Rc.AddDefaultFile (Preferences.Get<string> (Preferences.GTK_RC));
+			Gtk.Rc.ReparseAllForSettings (Gtk.Settings.Default, true);
+		}
+
+		void HandleScreenProfileComboChanged (object sender, EventArgs e)
+		{
+			ComboBox combo = sender as ComboBox;
+			if (combo == null)
+				return;
+			TreeIter iter;
+			if (combo.GetActiveIter (out iter)) {
+				switch ((int)combo.Model.GetValue (iter, 1)) {
+				case 0:
+					Preferences.Set (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE, String.Empty);
+					break;
+				case -1:
+					Preferences.Set (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE, "_x_profile_");
+					break;
+				case 1:
+					Preferences.Set (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE, (string)combo.Model.GetValue (iter, 0));
+					break;
+				}
+			}
+		}
+
+		void HandlePrintProfileComboChanged (object sender, EventArgs e)
+		{
+			ComboBox combo = sender as ComboBox;
+			if (combo == null)
+				return;
+			TreeIter iter;
+			if (combo.GetActiveIter (out iter)) {
+				switch ((int)combo.Model.GetValue (iter, 1)) {
+				case 0:
+					Preferences.Set (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE, String.Empty);
+					break;
+				case 1:
+					Preferences.Set (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE, (string)combo.Model.GetValue (iter, 0));
+					break;
+				}
+			}
+		}
+#endregion
+
+#region Gtk widgetry
+		void ThemeCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
+		{
+			string name = (string)tree_model.GetValue (iter, 0);
+			(cell as CellRendererText).Text = name;
+		}
+
+		bool ThemeSeparatorFunc (TreeModel tree_model, TreeIter iter)
+		{
+			return tree_model.GetValue (iter, 0) == null;
+		}
+
+		void ProfileCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
+		{
+			string name = (string)tree_model.GetValue (iter, 0);
+			(cell as CellRendererText).Text = name;
+		}
+
+		bool ProfileSeparatorFunc (TreeModel tree_model, TreeIter iter)
+		{
+			return tree_model.GetValue (iter, 0) == null;
+		}
+#endregion
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/ProgressDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/ProgressDialog.cs
new file mode 100644
index 0000000..7d8c5c5
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/ProgressDialog.cs
@@ -0,0 +1,101 @@
+/*
+ * FSpot.UI.Dialog.ProgressDialog.cs
+ *
+ * Author(s):
+ * 	Ettore Perazzoli
+ *	Larry Ewing  <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using GLib;
+using Gtk;
+using System;
+
+using Mono.Unix;
+
+namespace FSpot.UI.Dialog {
+	public class ProgressDialog : Gtk.Dialog {
+
+		private bool cancelled;
+
+		private void HandleResponse (object me, ResponseArgs args)
+		{
+			cancelled = true;
+		}
+
+		public enum CancelButtonType {
+			Cancel,
+			Stop,
+			None
+		};
+
+		private int total_count;
+
+		private ProgressBar progress_bar;
+		public ProgressBar Bar {
+			get { return progress_bar; }
+		}
+
+		private Label message_label;
+		public Label Message {
+			get { return message_label; }
+		}
+
+		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)
+		{
+			Title = title;
+			this.total_count = total_count;
+
+			if (parent_window != null)
+				this.TransientFor = parent_window;
+
+			HasSeparator = false;
+			BorderWidth = 6;
+			SetDefaultSize (300, -1);
+
+			message_label = new Label (String.Empty);
+			VBox.PackStart (message_label, true, true, 12);
+
+			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);
+				break;
+			case CancelButtonType.Stop:
+				button = (Gtk.Button)AddButton (Gtk.Stock.Stop, (int) ResponseType.Cancel);
+				break;
+			}
+
+			Response += new ResponseHandler (HandleResponse);
+		}
+
+		private int current_count;
+
+		// Return true if the operation was cancelled by the user.
+		public bool Update (string message)
+		{
+			current_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 ();
+
+			while (Application.EventsPending ())
+				Application.RunIteration ();
+
+			return cancelled;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/RatingFilterDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/RatingFilterDialog.cs
new file mode 100644
index 0000000..1092063
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/RatingFilterDialog.cs
@@ -0,0 +1,53 @@
+/*
+ * FSpot.UI.Dialog.RatingFilterDialog.cs
+ *
+ * Author(s):
+ * 	Bengt Thuree <bengt at thuree.com>
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using Gtk;
+using FSpot;
+using FSpot.Query;
+using FSpot.Widgets;
+using FSpot.UI.Dialog;
+
+namespace FSpot.UI.Dialog
+{
+	public class RatingFilterDialog : BuilderDialog {
+		[GtkBeans.Builder.Object] Button ok_button;
+		[GtkBeans.Builder.Object] HBox minrating_hbox;
+		[GtkBeans.Builder.Object] HBox maxrating_hbox;
+
+		private int minrating_value = 4;
+		private int maxrating_value = 5;
+		private Rating minrating;
+		private Rating maxrating;
+
+		public RatingFilterDialog (FSpot.PhotoQuery query, Gtk.Window parent_window) : base ("RatingFilterDialog.ui", "rating_filter_dialog")
+		{
+			TransientFor = parent_window;
+			DefaultResponse = ResponseType.Ok;
+			ok_button.GrabFocus ();
+
+			if (query.RatingRange != null) {
+				minrating_value = (int) query.RatingRange.MinRating;
+				maxrating_value = (int) query.RatingRange.MaxRating;
+			}
+			minrating = new Rating (minrating_value);
+			maxrating = new Rating (maxrating_value);
+			minrating_hbox.PackStart (minrating, false, false, 0);
+			maxrating_hbox.PackStart (maxrating, false, false, 0);
+
+			ResponseType response = (ResponseType) Run ();
+
+			if (response == ResponseType.Ok) {
+				query.RatingRange = new RatingRange ((uint) minrating.Value, (uint) maxrating.Value);
+			}
+
+			Destroy ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs
new file mode 100644
index 0000000..40c722a
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/RepairDbDialog.cs
@@ -0,0 +1,31 @@
+/*
+ * FSpot.UI.Dialog.RepairDbDialog
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Gtk;
+using Mono.Unix;
+using Hyena;
+using Hyena.Widgets;
+
+namespace FSpot.UI.Dialog
+{
+	public class RepairDbDialog : HigMessageDialog
+	{
+		public RepairDbDialog (System.Exception e, string backup_path, Window parent) :
+				base (parent, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok,
+				Catalog.GetString ("Error loading database."),
+				String.Format (Catalog.GetString ("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."), backup_path))
+		{
+			Log.Exception (e);
+			Run ();
+			Destroy ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/RepairDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/RepairDialog.cs
new file mode 100644
index 0000000..1911497
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/RepairDialog.cs
@@ -0,0 +1,52 @@
+/*
+ * FSpot.UI.Dialog.RepairDialog
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using Gtk;
+using System;
+using System.IO;
+using FSpot.Widgets;
+
+using FSpot.Core;
+
+namespace FSpot. UI.Dialog
+{
+	public class RepairDialog : BuilderDialog
+	{
+		[GtkBeans.Builder.Object] ScrolledWindow view_scrolled;
+
+		IBrowsableCollection source;
+		PhotoList missing;
+
+		public RepairDialog (IBrowsableCollection collection) : base ("RepairDialog.ui", "repair_dialog")
+		{
+			source = collection;
+			missing = new PhotoList ();
+
+			FindMissing ();
+			TrayView view = new TrayView (missing);
+			view_scrolled.Add (view);
+
+			this.ShowAll ();
+		}
+
+		public void FindMissing ()
+		{
+			int i;
+			missing.Clear ();
+
+			for (i = 0; i < source.Count; i++) {
+				IBrowsableItem item = source [i];
+				string path = item.DefaultVersion.Uri.LocalPath;
+				if (! File.Exists (path) || (new FileInfo (path).Length == 0))
+					missing.Add (item);
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs
new file mode 100644
index 0000000..254e68d
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/SelectionRatioDialog.cs
@@ -0,0 +1,205 @@
+/*
+ * FSpot.UI.Dialog.SelectionRatioDialog.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING fro details.
+ */
+
+using System;
+using System.IO;
+using System.Xml.Serialization;
+using System.Collections.Generic;
+
+using Gtk;
+
+using Mono.Unix;
+using Hyena;
+
+namespace FSpot.UI.Dialog {
+	public class SelectionRatioDialog : GladeDialog
+	{
+		[Serializable]
+		public struct SelectionConstraint {
+			private string label;
+			public string Label {
+				get { return label; }
+				set { label = value; }
+			}
+			private double ratio;
+			public double XyRatio {
+				get { return ratio; }
+				set { ratio = value; }
+			}
+
+			public SelectionConstraint (string label, double ratio)
+			{
+				this.label = label;
+				this.ratio = ratio;
+			}
+		}
+
+		[Glade.Widget] Button close_button;
+		[Glade.Widget] Button add_button;
+		[Glade.Widget] Button delete_button;
+		[Glade.Widget] Button up_button;
+		[Glade.Widget] Button down_button;
+		[Glade.Widget] TreeView content_treeview;
+		private ListStore constraints_store;
+
+		public SelectionRatioDialog () : base ("customratio_dialog")
+		{
+			close_button.Clicked += delegate (object o, EventArgs e) {SavePrefs (); this.Dialog.Destroy (); };
+			add_button.Clicked += delegate (object o, EventArgs e) {constraints_store.AppendValues ("New Selection", 1.0);};
+			delete_button.Clicked += DeleteSelectedRows;
+			up_button.Clicked += MoveUp;
+			down_button.Clicked += MoveDown;
+			CellRendererText text_renderer = new CellRendererText ();
+			text_renderer.Editable = true;
+			text_renderer.Edited += HandleLabelEdited;
+			content_treeview.AppendColumn (Catalog.GetString ("Label"), text_renderer, "text", 0);
+			text_renderer = new CellRendererText ();
+			text_renderer.Editable = true;
+			text_renderer.Edited += HandleRatioEdited;
+			content_treeview.AppendColumn (Catalog.GetString ("Ratio"), text_renderer, "text", 1);
+
+			LoadPreference (Preferences.CUSTOM_CROP_RATIOS);
+			Preferences.SettingChanged += OnPreferencesChanged;
+		}
+
+		private void Populate ()
+		{
+			constraints_store = new ListStore (typeof (string), typeof (double));
+			content_treeview.Model = constraints_store;
+			XmlSerializer serializer = new XmlSerializer (typeof(SelectionConstraint));
+			string [] vals = Preferences.Get<string []> (Preferences.CUSTOM_CROP_RATIOS);
+			if (vals != null)
+				foreach (string xml in vals) {
+					SelectionConstraint constraint = (SelectionConstraint)serializer.Deserialize (new StringReader (xml));
+					constraints_store.AppendValues (constraint.Label, constraint.XyRatio);
+				}
+		}
+
+		private void OnPreferencesChanged (object sender, NotifyEventArgs args)
+		{
+			LoadPreference (args.Key);
+		}
+
+		private void LoadPreference (String key)
+		{
+			switch (key) {
+			case Preferences.CUSTOM_CROP_RATIOS:
+				Populate ();
+				break;
+			}
+		}
+
+		private void SavePrefs ()
+		{
+			List<string> prefs = new List<string> ();
+			XmlSerializer serializer = new XmlSerializer (typeof (SelectionConstraint));
+			foreach (object[] row in constraints_store) {
+				StringWriter sw = new StringWriter ();
+				serializer.Serialize (sw, new SelectionConstraint ((string)row[0], (double)row[1]));
+				sw.Close ();
+				prefs.Add (sw.ToString ());
+			}
+
+#if !GCONF_SHARP_2_18
+			if (prefs.Count != 0)
+#endif
+				Preferences.Set (Preferences.CUSTOM_CROP_RATIOS, prefs.ToArray());
+#if !GCONF_SHARP_2_18
+			else
+				Preferences.Set (Preferences.CUSTOM_CROP_RATIOS, -1);
+#endif
+		}
+
+		public void HandleLabelEdited (object sender, EditedArgs args)
+		{
+			args.RetVal = false;
+			TreeIter iter;
+			if (!constraints_store.GetIterFromString (out iter, args.Path))
+				return;
+
+			using (GLib.Value val = new GLib.Value (args.NewText))
+				constraints_store.SetValue (iter, 0, val);
+
+			args.RetVal = true;
+		}
+
+		public void HandleRatioEdited (object sender, EditedArgs args)
+		{
+			args.RetVal = false;
+			TreeIter iter;
+			if (!constraints_store.GetIterFromString (out iter, args.Path))
+				return;
+
+			double ratio;
+			try {
+				ratio = ParseRatio (args.NewText);
+			} catch (FormatException fe) {
+				Log.Exception (fe);
+				return;
+			}
+			if (ratio < 1.0)
+				ratio = 1.0 / ratio;
+
+			using (GLib.Value val = new GLib.Value (ratio))
+				constraints_store.SetValue (iter, 1, val);
+
+			args.RetVal = true;
+		}
+
+		private double ParseRatio (string text)
+		{
+			try {
+				return Convert.ToDouble (text);
+			} catch (FormatException) {
+				char [] separators = {'/', ':'};
+				foreach (char c in separators) {
+					if (text.IndexOf (c) != -1) {
+						double ratio = Convert.ToDouble (text.Substring (0, text.IndexOf (c)));
+						ratio /= Convert.ToDouble (text.Substring (text.IndexOf (c) + 1));
+						return ratio;
+					}
+				}
+				throw new FormatException (String.Format ("unable to parse {0}", text));
+			}
+		}
+
+		private void DeleteSelectedRows (object o, EventArgs e)
+		{
+			TreeIter iter;
+			TreeModel model;
+			if (content_treeview.Selection.GetSelected (out model, out iter))
+				(model as ListStore).Remove (ref iter);
+		}
+
+		private void MoveUp (object o, EventArgs e)
+		{
+			TreeIter selected;
+			TreeModel model;
+			if (content_treeview.Selection.GetSelected (out model, out selected)) {
+				//no IterPrev :(
+				TreeIter prev;
+				TreePath path = model.GetPath (selected);
+				if (path.Prev ())
+					if (model.GetIter (out prev, path))
+						(model as ListStore).Swap (prev, selected);
+			}
+		}
+
+		private void MoveDown (object o, EventArgs e)
+		{
+			TreeIter current;
+			TreeModel model;
+			if (content_treeview.Selection.GetSelected (out model, out current)) {
+				TreeIter next = current;
+				if ((model as ListStore).IterNext (ref next))
+					(model as ListStore).Swap (current, next);
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/TagSelectionDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/TagSelectionDialog.cs
new file mode 100644
index 0000000..6fbe318
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/TagSelectionDialog.cs
@@ -0,0 +1,36 @@
+using System;
+using Gdk;
+using Gtk;
+using Glade;
+
+using FSpot.Core;
+
+namespace FSpot.UI.Dialog {
+	public class TagSelectionDialog : BuilderDialog
+	{
+		[GtkBeans.Builder.Object] Gtk.ScrolledWindow tag_selection_scrolled;
+
+		TagSelectionWidget tag_selection_widget;
+
+		public TagSelectionDialog (TagStore tags) : base ("tag_selection_dialog.ui", "tag_selection_dialog")
+		{
+			tag_selection_widget = new TagSelectionWidget (tags);
+			tag_selection_scrolled.Add (tag_selection_widget);
+			tag_selection_widget.Show ();
+		}
+
+		public Tag[] Run ()
+		{
+			int response = base.Run ();
+			if ((ResponseType) response == ResponseType.Ok)
+				return tag_selection_widget.TagHighlight;
+
+			return null;
+		}
+
+		public void Hide ()
+		{
+			base.Hide ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs b/src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs
new file mode 100644
index 0000000..50eb318
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.UI.Dialog/ThreadProgressDialog.cs
@@ -0,0 +1,208 @@
+/*
+ * FSpot.UI.Dialog.ThreadProgressDialog.cs
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * Copyright (c) 2004-2009 Novell, Inc.
+ *
+ * This is open source software. See COPYING for details.
+ */
+
+using System;
+using System.Threading;
+using System.Collections.Generic;
+
+using Gtk;
+
+using FSpot.Core;
+
+namespace FSpot.UI.Dialog {
+	public class ThreadProgressDialog : Gtk.Dialog {
+		Delay delay;
+
+		Gtk.ProgressBar progress_bar;
+		Gtk.Label message_label;
+		Gtk.Button button;
+
+		Gtk.Button retry_button;
+		Gtk.Button skip_button;
+		Gtk.ResponseType error_response;
+		AutoResetEvent error_response_event;
+
+		object syncHandle = new object ();
+
+		Thread thread;
+
+		public ThreadProgressDialog (Thread thread, int total) {
+			/*
+			if (parent_window)
+				this.TransientFor = parent_window;
+
+			*/
+			this.Title = thread.Name;
+			this.thread = thread;
+
+			HasSeparator = false;
+			BorderWidth = 6;
+			SetDefaultSize (300, -1);
+
+			message_label = new Gtk.Label (String.Empty);
+			VBox.PackStart (message_label, true, true, 12);
+
+			progress_bar = new Gtk.ProgressBar ();
+			VBox.PackStart (progress_bar, true, true, 6);
+
+			retry_button = new Gtk.Button (Mono.Unix.Catalog.GetString ("Retry"));
+			retry_button.Clicked += new EventHandler (HandleRetryClicked);
+			skip_button = new Gtk.Button (Mono.Unix.Catalog.GetString ("Skip"));
+			skip_button.Clicked += new EventHandler (HandleSkipClicked);
+
+			ActionArea.Add (retry_button);
+			ActionArea.Add (skip_button);
+
+			button_label = Gtk.Stock.Cancel;
+			button = (Gtk.Button) AddButton (button_label, (int)Gtk.ResponseType.Cancel);
+
+			delay = new Delay (new GLib.IdleHandler (HandleUpdate));
+
+			Response += HandleResponse;
+			Destroyed += HandleDestroy;
+		}
+
+		string progress_text;
+		public string ProgressText {
+			get { return progress_text; }
+			set {
+				lock (syncHandle) {
+					progress_text = value;
+					delay.Start ();
+				}
+			}
+		}
+
+		string button_label;
+		public string ButtonLabel {
+			get { return button_label; }
+			set {
+				lock (syncHandle) {
+					button_label = value;
+					delay.Start ();
+				}
+			}
+		}
+
+		string message;
+		public string Message {
+			get { return message; }
+			set {
+				lock (syncHandle) {
+					message = value;
+					delay.Start ();
+				}
+			}
+		}
+
+		double fraction;
+		public double Fraction {
+			get { return Fraction; }
+			set {
+				lock (syncHandle) {
+					fraction = value;
+					delay.Start ();
+				}
+			}
+		}
+
+		List<Widget> widgets;
+		public void VBoxPackEnd (Widget w)
+		{
+			if (widgets == null)
+				widgets = new List<Widget> ();
+			lock (syncHandle) {
+				widgets.Add (w);
+				delay.Start ();
+			}
+		}
+
+		internal void SetProperties (string progress_text, string button_label, string message, double fraction)
+		{
+			lock (syncHandle) {
+				this.progress_text = progress_text;
+				this.button_label = button_label;
+				this.message = message;
+				this.fraction = fraction;
+				delay.Start ();
+			}
+		}
+
+		bool retry_skip;
+		bool RetrySkipVisible {
+			set {
+				retry_skip = value;
+				delay.Start ();
+			}
+		}
+
+		public bool PerformRetrySkip ()
+		{
+			error_response = Gtk.ResponseType.None;
+			RetrySkipVisible = true;
+
+			error_response_event = new AutoResetEvent (false);
+			error_response_event.WaitOne ();
+
+			RetrySkipVisible = false;
+
+			return (error_response == Gtk.ResponseType.Yes);
+		}
+
+		void HandleResponse (object obj, Gtk.ResponseArgs args) {
+			this.Destroy ();
+		}
+
+		bool HandleUpdate ()
+		{
+			message_label.Text = message;
+			progress_bar.Text = progress_text;
+			progress_bar.Fraction = System.Math.Min (1.0, System.Math.Max (0.0, fraction));
+			button.Label = button_label;
+			retry_button.Visible = skip_button.Visible = retry_skip;
+
+			if (widgets != null && widgets.Count > 0) {
+				foreach (var w in widgets)
+					VBox.PackEnd (w);
+				widgets.Clear ();
+			}
+
+			return false;
+		}
+
+		void HandleDestroy (object sender, EventArgs args)
+		{
+			delay.Stop ();
+			if (thread.IsAlive) {
+				thread.Abort ();
+			}
+		}
+
+		void HandleRetryClicked (object obj, EventArgs args)
+		{
+			error_response = Gtk.ResponseType.Yes;
+			error_response_event.Set ();
+		}
+
+		void HandleSkipClicked (object obj, EventArgs args)
+		{
+			error_response = Gtk.ResponseType.No;
+			error_response_event.Set ();
+		}
+
+		public void Start () {
+			ShowAll ();
+			RetrySkipVisible = false;
+			thread.Start ();
+		}
+	}
+}
diff --git a/src/UI.Dialog/ui/AdjustTimeDialog.ui b/src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui
similarity index 100%
rename from src/UI.Dialog/ui/AdjustTimeDialog.ui
rename to src/Clients/MainApp/FSpot.UI.Dialog/ui/AdjustTimeDialog.ui
diff --git a/src/UI.Dialog/ui/CreateTagDialog.ui b/src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui
similarity index 100%
rename from src/UI.Dialog/ui/CreateTagDialog.ui
rename to src/Clients/MainApp/FSpot.UI.Dialog/ui/CreateTagDialog.ui
diff --git a/src/UI.Dialog/ui/DateRangeDialog.ui b/src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui
similarity index 100%
rename from src/UI.Dialog/ui/DateRangeDialog.ui
rename to src/Clients/MainApp/FSpot.UI.Dialog/ui/DateRangeDialog.ui
diff --git a/src/UI.Dialog/ui/EditTagDialog.ui b/src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui
similarity index 100%
rename from src/UI.Dialog/ui/EditTagDialog.ui
rename to src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagDialog.ui
diff --git a/src/UI.Dialog/ui/EditTagIconDialog.ui b/src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui
similarity index 100%
rename from src/UI.Dialog/ui/EditTagIconDialog.ui
rename to src/Clients/MainApp/FSpot.UI.Dialog/ui/EditTagIconDialog.ui
diff --git a/src/UI.Dialog/ui/LastImportRollFilterDialog.ui b/src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui
similarity index 100%
rename from src/UI.Dialog/ui/LastImportRollFilterDialog.ui
rename to src/Clients/MainApp/FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui
diff --git a/src/UI.Dialog/ui/PreferenceDialog.ui b/src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui
similarity index 100%
rename from src/UI.Dialog/ui/PreferenceDialog.ui
rename to src/Clients/MainApp/FSpot.UI.Dialog/ui/PreferenceDialog.ui
diff --git a/src/UI.Dialog/ui/RatingFilterDialog.ui b/src/Clients/MainApp/FSpot.UI.Dialog/ui/RatingFilterDialog.ui
similarity index 100%
rename from src/UI.Dialog/ui/RatingFilterDialog.ui
rename to src/Clients/MainApp/FSpot.UI.Dialog/ui/RatingFilterDialog.ui
diff --git a/src/UI.Dialog/ui/RepairDialog.ui b/src/Clients/MainApp/FSpot.UI.Dialog/ui/RepairDialog.ui
similarity index 100%
rename from src/UI.Dialog/ui/RepairDialog.ui
rename to src/Clients/MainApp/FSpot.UI.Dialog/ui/RepairDialog.ui
diff --git a/src/Clients/MainApp/FSpot.Widgets/CellRendererTextProgress.cs b/src/Clients/MainApp/FSpot.Widgets/CellRendererTextProgress.cs
new file mode 100644
index 0000000..b2b1f86
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/CellRendererTextProgress.cs
@@ -0,0 +1,191 @@
+/*
+ * FSpot.Widgets.CellRendererTextProgress.cs
+ *
+ * Author(s)
+ * 	Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+
+using System;
+using System.Collections.Generic;
+
+using Gtk;
+using GLib;
+
+using FSpot;
+using FSpot.Utils;
+
+using Mono.Unix;
+
+namespace FSpot.Widgets
+{
+	/*
+	 * Because subclassing of CellRendererText does not to work, we
+	 * use a new cellrenderer, which renderes a simple text and a
+	 * progress bar below the text similar to the one used in baobab (gnome-utils)
+	 */
+	public class CellRendererTextProgress : CellRenderer
+	{
+		readonly int progress_width;
+		readonly int progress_height;
+
+		static Gdk.Color green = new Gdk.Color (0xcc, 0x00, 0x00);
+		static Gdk.Color yellow = new Gdk.Color (0xed, 0xd4, 0x00);
+		static Gdk.Color red = new Gdk.Color (0x73, 0xd2, 0x16);
+
+		public CellRendererTextProgress () : this (70, 8)
+		{
+		}
+
+		public CellRendererTextProgress (int progress_width, int progress_height)
+		{
+			this.progress_width = progress_width;
+			this.progress_height = progress_height;
+
+			Xalign = 0.0f;
+			Yalign = 0.5f;
+
+			Xpad = Ypad = 2;
+		}
+
+		protected CellRendererTextProgress (IntPtr ptr) : base (ptr)
+		{
+		}
+
+		int progress_value;
+
+		[GLib.PropertyAttribute ("value")]
+		public int Value {
+			get { return progress_value; }
+			set {
+				/* normalize value */
+				progress_value = Math.Max (Math.Min (value, 100), 0);
+			}
+		}
+
+		Pango.Layout text_layout;
+		string text;
+
+		[GLib.PropertyAttribute ("text")]
+		public string Text {
+			get { return text; }
+			set {
+				if (text == value)
+					return;
+
+				text = value;
+				text_layout = null;
+			}
+		}
+
+		bool use_markup;
+		public bool UseMarkup {
+			get { return use_markup; }
+			set {
+				if (use_markup == value)
+					return;
+
+				use_markup = value;
+				text_layout = null;
+			}
+		}
+
+		void UpdateLayout (Widget widget)
+		{
+			text_layout = new Pango.Layout (widget.PangoContext);
+
+			if (UseMarkup)
+				text_layout.SetMarkup (text);
+			else
+				text_layout.SetText (text);
+		}
+
+		Gdk.Color GetValueColor ()
+		{
+			if (progress_value <= 33)
+				return green;
+
+			if (progress_value <= 66)
+				return yellow;
+
+			return red;
+		}
+
+		public override void GetSize (Gtk.Widget widget, ref Gdk.Rectangle cell_area, out int x_offset, out int y_offset, out int width, out int height)
+		{
+			if (text_layout == null)
+				UpdateLayout (widget);
+
+			int text_width, text_height;
+
+			text_layout.GetPixelSize (out text_width, out text_height);
+
+			width = (int) (2 * Xpad + Math.Max (progress_width, text_width));
+			height = (int) (3 * Ypad + progress_height + text_height);
+
+			x_offset = Math.Max ((int) (Xalign * (cell_area.Width - width)), 0);
+			y_offset = Math.Max ((int) (Yalign * (cell_area.Height - height)), 0);
+		}
+
+		protected override void Render (Gdk.Drawable window, Gtk.Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, Gtk.CellRendererState flags)
+		{
+			base.Render (window, widget, background_area, cell_area, expose_area, flags);
+
+			if (text_layout == null)
+				UpdateLayout (widget);
+
+			int x, y, width, height, text_width, text_height;
+
+			/* first render the text */
+			text_layout.GetPixelSize (out text_width, out text_height);
+
+			x  = (int) (cell_area.X + Xpad + Math.Max ((int) (Xalign * (cell_area.Width - 2 * Xpad - text_width)), 0));
+			y  = (int) (cell_area.Y + Ypad);
+
+			Style.PaintLayout (widget.Style,
+			                   window,
+			                   StateType.Normal,
+			                   true,
+			                   cell_area,
+			                   widget,
+			                   "cellrenderertextprogress",
+			                   x, y,
+			                   text_layout);
+
+			y += (int) (text_height + Ypad);
+			x  = (int) (cell_area.X + Xpad + Math.Max ((int) (Xalign * (cell_area.Width - 2 * Xpad - progress_width)), 0));
+
+
+			/* second render the progress bar */
+			using (Cairo.Context cairo_context = Gdk.CairoHelper.Create (window)) {
+
+				width = progress_width;
+				height = progress_height;
+
+				cairo_context.Rectangle (x, y, width, height);
+				Gdk.CairoHelper.SetSourceColor (cairo_context, widget.Style.Dark (StateType.Normal));
+				cairo_context.Fill ();
+
+				x += widget.Style.XThickness;
+				y += widget.Style.XThickness;
+				width -= 2* widget.Style.XThickness;
+				height -= 2 * widget.Style.Ythickness;
+
+				cairo_context.Rectangle (x, y, width, height);
+				Gdk.CairoHelper.SetSourceColor (cairo_context, widget.Style.Light (StateType.Normal));
+				cairo_context.Fill ();
+
+				/* scale the value and ensure, that at least one pixel is drawn, if the value is greater than zero */
+				int scaled_width =
+					(int) Math.Max (((progress_value * width) / 100.0),
+					                (progress_value == 0)? 0 : 1);
+
+				cairo_context.Rectangle (x, y, scaled_width, height);
+				Gdk.CairoHelper.SetSourceColor (cairo_context, GetValueColor ());
+				cairo_context.Fill ();
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/CompositeUtils.cs b/src/Clients/MainApp/FSpot.Widgets/CompositeUtils.cs
new file mode 100644
index 0000000..a3c8b9e
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/CompositeUtils.cs
@@ -0,0 +1,178 @@
+using System;
+using System.Runtime.InteropServices;
+using Gdk;
+using Gtk;
+using FSpot.Utils;
+using Hyena;
+
+namespace FSpot.Widgets {
+	public class CompositeUtils {
+		[DllImport("libgdk-2.0-0.dll")]
+	        static extern bool gdk_screen_is_composited (IntPtr screen);
+
+		[DllImport("libgdk-2.0-0.dll")]
+		static extern bool gdk_x11_screen_supports_net_wm_hint (IntPtr screen,
+									IntPtr property);
+
+		[DllImport("libgdk-2.0-0.dll")]
+		static extern IntPtr gdk_screen_get_rgba_colormap (IntPtr screen);
+
+		[DllImport("libgdk-2.0-0.dll")]
+		static extern IntPtr gdk_screen_get_rgba_visual (IntPtr screen);
+
+		[DllImport ("libgtk-win32-2.0-0.dll")]
+		static extern void gtk_widget_input_shape_combine_mask (IntPtr raw, IntPtr shape_mask, int offset_x, int offset_y);
+
+		[DllImport("libgdk-2.0-0.dll")]
+		static extern void gdk_property_change(IntPtr window, IntPtr property, IntPtr type, int format, int mode, uint [] data, int nelements);
+
+		[DllImport("libgdk-2.0-0.dll")]
+		static extern void gdk_property_change(IntPtr window, IntPtr property, IntPtr type, int format, int mode, byte [] data, int nelements);
+
+		public static Colormap GetRgbaColormap (Screen screen)
+		{
+			try {
+				IntPtr raw_ret = gdk_screen_get_rgba_colormap (screen.Handle);
+				Gdk.Colormap ret = GLib.Object.GetObject(raw_ret) as Gdk.Colormap;
+				return ret;
+			} catch {
+				Gdk.Visual visual = Gdk.Visual.GetBestWithDepth (32);
+				if (visual != null) {
+					Gdk.Colormap cmap = new Gdk.Colormap (visual, false);
+					Log.Debug ("fallback");
+					return cmap;
+				}
+			}
+			return null;
+		}
+
+		public static void  ChangeProperty (Gdk.Window win, Atom property, Atom type, PropMode mode, uint [] data)
+		{
+			gdk_property_change (win.Handle, property.Handle, type.Handle, 32, (int)mode,  data, data.Length * 4);
+		}
+
+		public static void  ChangeProperty (Gdk.Window win, Atom property, Atom type, PropMode mode, byte [] data)
+		{
+			gdk_property_change (win.Handle, property.Handle, type.Handle, 8, (int)mode,  data, data.Length);
+		}
+
+		public static bool SupportsHint (Screen screen, string name)
+		{
+			try {
+				Atom atom = Atom.Intern (name, false);
+				return gdk_x11_screen_supports_net_wm_hint (screen.Handle, atom.Handle);
+			} catch {
+
+				return false;
+			}
+		}
+
+		public static bool SetRgbaColormap (Widget w)
+		{
+			Gdk.Colormap cmap = GetRgbaColormap (w.Screen);
+
+			if (cmap != null) {
+				w.Colormap = cmap;
+				return true;
+			}
+
+			return false;
+		}
+
+
+		public static Visual GetRgbaVisual (Screen screen)
+		{
+			try {
+				IntPtr raw_ret = gdk_screen_get_rgba_visual (screen.Handle);
+				Gdk.Visual ret = GLib.Object.GetObject(raw_ret) as Gdk.Visual;
+				return ret;
+			} catch {
+				Gdk.Visual visual = Gdk.Visual.GetBestWithDepth (32);
+				if (visual != null) {
+					return visual;
+				}
+			}
+			return null;
+		}
+
+		public static bool IsComposited (Screen screen) {
+			bool composited;
+			try {
+				composited = gdk_screen_is_composited (screen.Handle);
+			} catch (EntryPointNotFoundException) {
+				Log.Debug ("query composite manager locally");
+				Atom atom = Atom.Intern (String.Format ("_NET_WM_CM_S{0}", screen.Number), false);
+				composited = Gdk.Selection.OwnerGetForDisplay (screen.Display, atom) != null;
+			}
+
+			// FIXME check for WINDOW_OPACITY so that we support compositing on older composite manager
+			// versions before they started supporting the real check given above
+			if (!composited)
+				composited = CompositeUtils.SupportsHint (screen, "_NET_WM_WINDOW_OPACITY");
+
+			return composited;
+		}
+
+		public static void InputShapeCombineMask (Widget w, Pixmap shape_mask, int offset_x, int offset_y)
+		{
+			gtk_widget_input_shape_combine_mask (w.Handle, shape_mask == null ? IntPtr.Zero : shape_mask.Handle, offset_x, offset_y);
+		}
+
+		[DllImport("libXcomposite.dll")]
+		static extern void XCompositeRedirectWindow (IntPtr display, uint window, CompositeRedirect update);
+
+		public enum CompositeRedirect {
+			Automatic = 0,
+			Manual = 1
+		};
+
+		public static void RedirectDrawable (Drawable d)
+		{
+			uint xid = GdkUtils.GetXid (d);
+			Log.DebugFormat ("xid = {0} d.handle = {1}, d.Display.Handle = {2}", xid, d.Handle, d.Display.Handle);
+			XCompositeRedirectWindow (GdkUtils.GetXDisplay (d.Display), GdkUtils.GetXid (d), CompositeRedirect.Manual);
+		}
+
+		public static void SetWinOpacity (Gtk.Window win, double opacity)
+		{
+			CompositeUtils.ChangeProperty (win.GdkWindow,
+						       Atom.Intern ("_NET_WM_WINDOW_OPACITY", false),
+						       Atom.Intern ("CARDINAL", false),
+						       PropMode.Replace,
+						       new uint [] { (uint) (0xffffffff * opacity) });
+		}
+
+		public static Cms.Profile GetScreenProfile (Screen screen)
+		{
+			Atom atype;
+			int  aformat;
+			int  alength;
+			byte [] data;
+
+			if (Gdk.Property.Get (screen.RootWindow,
+					      Atom.Intern ("_ICC_PROFILE", false),
+					      Atom.Intern ("CARDINAL", false),
+					      0,
+					      Int32.MaxValue,
+					      0, // FIXME in gtk# should be a bool
+					      out atype,
+					      out aformat,
+					      out alength,
+					      out data)) {
+				return new Cms.Profile (data);
+			}
+
+			return null;
+		}
+
+		public static void SetScreenProfile (Screen screen, Cms.Profile profile)
+		{
+			byte [] data = profile.Save ();
+			ChangeProperty (screen.RootWindow,
+					Atom.Intern ("_ICC_PROFILE", false),
+					Atom.Intern ("CARDINAL", false),
+					PropMode.Replace,
+					data);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/EditorPage.cs b/src/Clients/MainApp/FSpot.Widgets/EditorPage.cs
new file mode 100644
index 0000000..0c0dabe
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/EditorPage.cs
@@ -0,0 +1,280 @@
+/*
+ * Widgets.EditorPage.cs
+ *
+ * Author(s)
+ * 	Ruben Vermeersch <ruben at savanne.be>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using FSpot;
+using FSpot.Extensions;
+using FSpot.Editors;
+using FSpot.UI.Dialog;
+using FSpot.Utils;
+using FSpot.Core;
+
+using Gtk;
+
+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;
+		private readonly EditorPageWidget EditorPageWidget;
+
+		public EditorPage () : base (new EditorPageWidget (),
+									   Catalog.GetString ("Edit"),
+									   "mode-image-edit") {
+			// TODO: Somebody might need to change the icon to something more suitable.
+			// FIXME: The icon isn't shown in the menu, are we missing a size?
+			EditorPageWidget = SidebarWidget as EditorPageWidget;
+			EditorPageWidget.Page = this;
+		}
+
+		protected override void AddedToSidebar () {
+			(Sidebar as Sidebar).SelectionChanged += delegate (IBrowsableCollection collection) { EditorPageWidget.ShowTools (); };
+			(Sidebar as Sidebar).ContextChanged += HandleContextChanged;
+		}
+
+		private void HandleContextChanged (object sender, EventArgs args)
+		{
+			InPhotoView = ((Sidebar as Sidebar).Context == ViewContext.Edit);
+			EditorPageWidget.ChangeButtonVisibility ();
+		}
+	}
+
+	public class EditorPageWidget : Gtk.ScrolledWindow {
+		private VBox widgets;
+		private VButtonBox buttons;
+		private Widget active_editor;
+
+		private List<Editor> editors;
+		private Editor current_editor;
+
+		// Used to make buttons insensitive when selecting multiple images.
+		private Dictionary<Editor, Button> editor_buttons;
+
+		private EditorPage page;
+		internal EditorPage Page {
+			get { return page; }
+			set { page = value; ChangeButtonVisibility (); }
+		}
+
+		public EditorPageWidget () {
+			editors = new List<Editor> ();
+			editor_buttons = new Dictionary<Editor, Button> ();
+			ShowTools ();
+			AddinManager.AddExtensionNodeHandler ("/FSpot/Editors", OnExtensionChanged);
+
+		}
+
+		private void OnExtensionChanged (object s, ExtensionNodeEventArgs args) {
+			// FIXME: We do not do run-time removal of editors yet!
+			if (args.Change == ExtensionChange.Add) {
+				Editor editor = (args.ExtensionNode as EditorNode).GetEditor ();
+				editor.ProcessingStarted += OnProcessingStarted;
+				editor.ProcessingStep += OnProcessingStep;
+				editor.ProcessingFinished += OnProcessingFinished;
+				editors.Add (editor);
+				PackButton (editor);
+			}
+		}
+
+		private ProgressDialog progress;
+
+		private void OnProcessingStarted (string name, int count) {
+			progress = new ProgressDialog (name, ProgressDialog.CancelButtonType.None, count, App.Instance.Organizer.Window);
+		}
+
+		private void OnProcessingStep (int done) {
+			if (progress != null)
+				progress.Update (String.Empty);
+		}
+
+		private void OnProcessingFinished () {
+			if (progress != null) {
+				progress.Destroy ();
+				progress = null;
+			}
+		}
+
+		internal void ChangeButtonVisibility () {
+			foreach (Editor editor in editors) {
+				Button button;
+				if (editor_buttons.TryGetValue (editor, out button))
+					button.Visible = Page.InPhotoView || editor.CanHandleMultiple;
+			}
+		}
+
+		void PackButton (Editor editor)
+		{
+			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 += delegate (object o, EventArgs e) { ChooseEditor (editor); };
+			button.Show ();
+			buttons.Add (button);
+			editor_buttons.Add (editor, button);
+		}
+
+		public void ShowTools () {
+			// Remove any open editor, if present.
+			if (current_editor != null) {
+				active_editor.Hide ();
+				widgets.Remove (active_editor);
+				active_editor = null;
+				current_editor.Restore ();
+				current_editor = null;
+			}
+
+			// No need to build the widget twice.
+			if (buttons != null) {
+				buttons.Show ();
+				return;
+			}
+
+			if (widgets == null) {
+				widgets = new VBox (false, 0);
+				widgets.NoShowAll = true;
+				widgets.Show ();
+				Viewport widgets_port = new Viewport ();
+				widgets_port.Add (widgets);
+				Add (widgets_port);
+				widgets_port.ShowAll ();
+			}
+
+			// Build the widget (first time we call this method).
+			buttons = new VButtonBox ();
+			buttons.BorderWidth = 5;
+			buttons.Spacing = 5;
+			buttons.LayoutStyle = ButtonBoxStyle.Start;
+
+			foreach (Editor editor in editors)
+				PackButton (editor);
+
+			buttons.Show ();
+			widgets.Add (buttons);
+		}
+
+		private void ChooseEditor (Editor editor) {
+			SetupEditor (editor);
+
+			if (!editor.CanBeApplied || editor.HasSettings)
+				ShowEditor (editor);
+			else
+				Apply (editor); // Instant apply
+		}
+
+		private bool SetupEditor (Editor editor) {
+			EditorState state = editor.CreateState ();
+
+			PhotoImageView photo_view = App.Instance.Organizer.PhotoView.View;
+
+			if (Page.InPhotoView && photo_view != null) {
+				state.Selection = photo_view.Selection;
+				state.PhotoImageView = photo_view;
+			} else {
+				state.Selection = Gdk.Rectangle.Zero;
+				state.PhotoImageView = null;
+			}
+			if ((Page.Sidebar as Sidebar).Selection == null)
+				return false;
+			state.Items = (Page.Sidebar as Sidebar).Selection.Items;
+
+			editor.Initialize (state);
+			return true;
+		}
+
+		private void Apply (Editor editor) {
+			if (!SetupEditor (editor))
+				return;
+
+			if (!editor.CanBeApplied) {
+				string msg = Catalog.GetString ("No selection available");
+				string desc = Catalog.GetString ("This tool requires an active selection. Please select a region of the photo and try the operation again");
+
+				HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window,
+										DialogFlags.DestroyWithParent,
+										Gtk.MessageType.Error, ButtonsType.Ok,
+										msg,
+										desc);
+
+				md.Run ();
+				md.Destroy ();
+				return;
+			}
+
+			// TODO: Might need to do some nicer things for multiple selections (progress?)
+			try {
+				editor.Apply ();
+			} catch (Exception e) {
+				Log.DebugException (e);
+				string msg = Catalog.GetPluralString ("Error saving adjusted photo", "Error saving adjusted photos",
+									editor.State.Items.Length);
+				string desc = String.Format (Catalog.GetString ("Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."),
+							     e.Message);
+
+				HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window,
+									    DialogFlags.DestroyWithParent,
+									    Gtk.MessageType.Error, ButtonsType.Ok,
+									    msg,
+									    desc);
+				md.Run ();
+				md.Destroy ();
+			}
+			ShowTools ();
+		}
+
+		private void ShowEditor (Editor editor) {
+			SetupEditor (editor);
+			current_editor = editor;
+
+			buttons.Hide ();
+
+			// Top label
+			VBox vbox = new VBox (false, 4);
+			Label label = new Label ();
+			label.Markup = String.Format("<big><b>{0}</b></big>", editor.Label);
+			vbox.PackStart (label, false, false, 5);
+
+			// Optional config widget
+			Widget config = editor.ConfigurationWidget ();
+			if (config != null) {
+				vbox.PackStart (config, false, false, 0);
+			}
+
+			// Apply / Cancel buttons
+			HButtonBox tool_buttons = new HButtonBox ();
+			tool_buttons.LayoutStyle = ButtonBoxStyle.End;
+			tool_buttons.Spacing = 5;
+			tool_buttons.BorderWidth = 5;
+			tool_buttons.Homogeneous = false;
+
+			Button cancel = new Button (Stock.Cancel);
+			cancel.Clicked += HandleCancel;
+			tool_buttons.Add (cancel);
+
+			Button apply = new Button (editor.ApplyLabel);
+			apply.Image = new Image (GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, editor.IconName, 22, (Gtk.IconLookupFlags)0));
+			apply.Clicked += delegate { Apply (editor); };
+			tool_buttons.Add (apply);
+
+			// Pack it all together
+			vbox.PackEnd (tool_buttons, false, false, 0);
+			active_editor = vbox;
+			widgets.Add (active_editor);
+			active_editor.ShowAll ();
+		}
+
+		void HandleCancel (object sender, System.EventArgs args) {
+			ShowTools ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs b/src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs
new file mode 100644
index 0000000..46d44ef
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/Filmstrip.cs
@@ -0,0 +1,604 @@
+/*
+ * Widgets.Filmstrip.cs
+ *
+ * Author(s)
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+//TODO:
+//	* only redraw required parts on ExposeEvents (low)
+//	* Handle orientation changes (low) (require gtk# changes, so I can trigger an OrientationChanged event)
+
+using System;
+using System.Collections;
+
+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, IDisposable
+	{
+
+//		public event OrientationChangedHandler OrientationChanged;
+		public event EventHandler PositionChanged;
+
+		DoubleAnimation animation;
+
+		bool extendable = true;
+		public bool Extendable {
+			get { return extendable; }
+			set { extendable = value; }
+		}
+
+		Orientation orientation = Orientation.Horizontal;
+		public Orientation Orientation {
+			get { return orientation; }
+			set {
+				if (orientation == value)
+					return;
+
+				BackgroundPixbuf = null;
+				orientation = value;
+//				if (OrientationChanged != null) {
+//					OrientationChangedArgs args = new OrientationChangedArgs ();
+//					args.Orientation = value;
+//					OrientationChanged (this, args);
+//				}
+			}
+		}
+
+		int spacing = 6;
+		public int Spacing {
+			get { return spacing; }
+			set {
+				if (value < 0)
+					throw new ArgumentException ("Spacing is negative!");
+				spacing = value;
+			}
+		}
+
+		int thumb_offset = 17;
+		public int ThumbOffset {
+			get { return thumb_offset; }
+			set {
+				if (value < 0)
+					throw new ArgumentException ("ThumbOffset is negative!");
+				thumb_offset = value;
+			}
+		}
+
+		int thumb_size = 67;
+		public int ThumbSize {
+			get { return thumb_size; }
+			set {
+				if (value < 0)
+					throw new ArgumentException ("ThumbSize is negative!");
+				thumb_size = value;
+			}
+		}
+
+		bool squared_thumbs = false;
+		public bool SquaredThumbs {
+			get { return squared_thumbs; }
+			set { squared_thumbs = value; }
+		}
+
+		Pixbuf background_tile;
+		public Pixbuf BackgroundTile {
+			get {
+				if (background_tile == null) {
+					background_tile = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, 1, 77);
+					background_tile.Fill (0x00000000);
+				}
+
+				if (Orientation == Orientation.Horizontal && background_tile.Height < background_tile.Width)
+					background_tile = background_tile.RotateSimple (PixbufRotation.Counterclockwise);
+				else if (Orientation == Orientation.Vertical && background_tile.Width < background_tile.Height)
+					background_tile = background_tile.RotateSimple (PixbufRotation.Clockwise);
+				return background_tile;
+			}
+			set {
+				if (background_tile != value && background_tile != null)
+					background_tile.Dispose ();
+				background_tile = value;
+				BackgroundPixbuf = null;
+			}
+		}
+
+		int x_offset = 2;
+		public int XOffset {
+			get { return x_offset; }
+			set {
+				if (value < 0)
+					throw new ArgumentException ("value is negative!");
+				x_offset = value;
+			}
+		}
+
+		int y_offset = 2;
+		public int YOffset {
+			get { return y_offset; }
+			set {
+				if (value < 0)
+					throw new ArgumentException ("value is negative!");
+				y_offset = value;
+			}
+		}
+
+		float x_align = 0.5f, y_align = 0.5f;
+		public float XAlign {
+			get { return x_align; }
+			set {
+				if (value < 0.0 || value > 1.0)
+					throw new ArgumentException ("value is not between 0.0 and 1.0");
+				x_align = value;
+			}
+		}
+
+		public float YAlign {
+			get { return y_align; }
+			set {
+				if (value < 0.0 || value > 1.0)
+					throw new ArgumentException ("value is not between 0.0 and 1.0");
+				y_align = value;
+			}
+		}
+
+		public int ActiveItem {
+			get { return selection.Index; }
+			set {
+				if (value == selection.Index)
+					return;
+				if (value < 0)
+					value = 0;
+				if (value > selection.Collection.Count - 1)
+					value = selection.Collection.Count - 1;
+
+				selection.Index = value;
+			}
+		}
+
+		double position;
+		public double Position {
+			get {
+				return position;
+			}
+			set {
+				if (value == position)
+					return;
+				if (value < 0)
+					value = 0;
+				if (value > selection.Collection.Count - 1)
+					value = selection.Collection.Count - 1;
+
+				animation.From = position;
+				animation.To = value;
+				animation.Restart ();
+
+				if (PositionChanged != null)
+					PositionChanged (this, EventArgs.Empty);
+			}
+		}
+
+		BrowsablePointer selection;
+		DisposableCache<SafeUri, Pixbuf> thumb_cache;
+
+		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.squared_thumbs = squared_thumbs;
+			thumb_cache = new DisposableCache<SafeUri, Pixbuf> (30);
+			ThumbnailLoader.Default.OnPixbufLoaded += HandlePixbufLoaded;
+
+			animation = new DoubleAnimation (0, 0, TimeSpan.FromSeconds (1.5), SetPositionCore, new CubicEase (EasingMode.EaseOut));
+		}
+
+		int min_length = 400;
+		int min_height = 200;
+		protected override void OnSizeRequested (ref Gtk.Requisition requisition)
+		{
+			base.OnSizeRequested (ref requisition);
+			requisition.Width = (Orientation == Orientation.Horizontal ? min_length : BackgroundTile.Width) + 2 * x_offset;
+			requisition.Height = (Orientation == Orientation.Vertical ? min_height : BackgroundTile.Height) + 2 * y_offset;
+			switch (Orientation) {
+			case Orientation.Horizontal:
+				if (min_length % BackgroundTile.Width != 0)
+					requisition.Width += BackgroundTile.Width - min_length % BackgroundTile.Width;
+				break;
+			case Orientation.Vertical:
+				if (min_height % BackgroundTile.Height != 0)
+					requisition.Height += BackgroundTile.Height - min_height % BackgroundTile.Height;
+				break;
+			}
+		}
+
+		Pixbuf background_pixbuf;
+		protected Pixbuf BackgroundPixbuf {
+			get {
+				if (background_pixbuf == null) {
+					int length = BackgroundTile.Width;
+					int height = BackgroundTile.Height;
+					switch (Orientation) {
+					case Orientation.Horizontal:
+						if (Allocation.Width < min_length || !extendable)
+							length = min_length;
+						else
+							length = Allocation.Width;
+
+						length = length - length % BackgroundTile.Width;
+						break;
+					case Orientation.Vertical:
+						if (Allocation.Height < min_height || !extendable)
+							height = min_height;
+						else
+							height = Allocation.Height;
+
+						height = height - height % BackgroundTile.Height;
+						break;
+					}
+
+					background_pixbuf = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, length, height);
+					switch (Orientation) {
+					case Orientation.Horizontal:
+						for (int i = 0; i < length; i += BackgroundTile.Width) {
+							BackgroundTile.CopyArea (0, 0, BackgroundTile.Width, BackgroundTile.Height,
+									background_pixbuf, i, 0);
+						}
+						break;
+					case Orientation.Vertical:
+						for (int i = 0; i < height; i += BackgroundTile.Height) {
+							BackgroundTile.CopyArea (0, 0, BackgroundTile.Width, BackgroundTile.Height,
+									background_pixbuf, 0, i);
+						}
+						break;
+					}
+				}
+				return background_pixbuf;
+			}
+			set {
+				if (background_pixbuf != value && background_pixbuf != null) {
+					background_pixbuf.Dispose ();
+					background_pixbuf = value;
+				}
+			}
+		}
+
+		Hashtable start_indexes;
+		int filmstrip_start_pos;
+		int filmstrip_end_pos;
+		protected override bool OnExposeEvent (EventExpose evnt)
+		{
+			if (evnt.Window != GdkWindow)
+				return true;
+
+			if (selection.Collection.Count == 0)
+				return true;
+
+			if (Orientation == Orientation.Horizontal && (extendable && Allocation.Width >= BackgroundPixbuf.Width + (2 * x_offset) + BackgroundTile.Width) ||
+				Orientation == Orientation.Vertical && (extendable && Allocation.Height >= BackgroundPixbuf.Height + (2 * y_offset) + BackgroundTile.Height) )
+				BackgroundPixbuf = null;
+
+			if ( Orientation == Orientation.Horizontal && (extendable && Allocation.Width < BackgroundPixbuf.Width + (2 * x_offset) ) ||
+				Orientation == Orientation.Vertical && ( extendable && Allocation.Height < BackgroundPixbuf.Height + (2 * y_offset) ))
+				BackgroundPixbuf = null;
+
+			int xpad = 0, ypad = 0;
+			if (Allocation.Width > BackgroundPixbuf.Width + (2 * x_offset))
+				xpad = (int) (x_align * (Allocation.Width - (BackgroundPixbuf.Width + (2 * x_offset))));
+
+			if (Allocation.Height > BackgroundPixbuf.Height + (2 * y_offset))
+				ypad = (int) (y_align * (Allocation.Height - (BackgroundPixbuf.Height + (2 * y_offset))));
+
+			GdkWindow.DrawPixbuf (Style.BackgroundGC (StateType.Normal), BackgroundPixbuf,
+					0, 0, x_offset + xpad, y_offset + ypad,
+					BackgroundPixbuf.Width, BackgroundPixbuf.Height, Gdk.RgbDither.None, 0, 0);
+
+			//drawing the icons...
+			start_indexes = new Hashtable ();
+
+			Pixbuf icon_pixbuf = null;
+			if (Orientation == Orientation.Horizontal)
+				icon_pixbuf = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, BackgroundPixbuf.Width, thumb_size);
+			else if (Orientation == Orientation.Vertical)
+				icon_pixbuf = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, thumb_size, BackgroundPixbuf.Height);
+			icon_pixbuf.Fill (0x00000000);
+
+			Pixbuf current = GetPixbuf ((int) Math.Round (Position));
+			int ref_x = (int)(icon_pixbuf.Width / 2.0 - current.Width * (Position + 0.5f - Math.Round (Position))); //xpos of the reference icon
+			int ref_y = (int)(icon_pixbuf.Height / 2.0 - current.Height * (Position + 0.5f - Math.Round (Position)));
+
+			int start_x = Orientation == Orientation.Horizontal ? ref_x : 0;
+			int start_y = Orientation == Orientation.Vertical ? ref_y : 0;
+			for (int i = (int) Math.Round (Position); i < selection.Collection.Count; i++) {
+				current = GetPixbuf (i, ActiveItem == i);
+				if (Orientation == Orientation.Horizontal) {
+					current.CopyArea (0, 0, Math.Min (current.Width, icon_pixbuf.Width - start_x) , current.Height, icon_pixbuf, start_x, start_y);
+					start_indexes [start_x] = i;
+					start_x += current.Width + spacing;
+					if (start_x > icon_pixbuf.Width)
+						break;
+				} else if (Orientation == Orientation.Vertical) {
+					current.CopyArea (0, 0, current.Width, Math.Min (current.Height, icon_pixbuf.Height - start_y), icon_pixbuf, start_x, start_y);
+					start_indexes [start_y] = i;
+					start_y += current.Height + spacing;
+					if (start_y > icon_pixbuf.Height)
+						break;
+				}
+			}
+			filmstrip_end_pos = (Orientation == Orientation.Horizontal ? start_x : start_y);
+
+			start_x = Orientation == Orientation.Horizontal ? ref_x : 0;
+			start_y = Orientation == Orientation.Vertical ? ref_y : 0;
+			for (int i = (int) Math.Round (Position) - 1; i >= 0; i--) {
+				current = GetPixbuf (i, ActiveItem == i);
+				if (Orientation == Orientation.Horizontal) {
+					start_x -= (current.Width + spacing);
+					current.CopyArea (Math.Max (0, -start_x), 0, Math.Min (current.Width, current.Width + start_x), current.Height, icon_pixbuf, Math.Max (start_x, 0), 0);
+					start_indexes [Math.Max (0, start_x)] = i;
+					if (start_x < 0)
+						break;
+				} else if (Orientation == Orientation.Vertical) {
+					start_y -= (current.Height + spacing);
+					current.CopyArea (0, Math.Max (0, -start_y), current.Width, Math.Min (current.Height, current.Height + start_y), icon_pixbuf, 0, Math.Max (start_y, 0));
+					start_indexes [Math.Max (0, start_y)] = i;
+					if (start_y < 0)
+						break;
+				}
+			}
+			filmstrip_start_pos = Orientation == Orientation.Horizontal ? start_x : start_y;
+
+			GdkWindow.DrawPixbuf (Style.BackgroundGC (StateType.Normal), icon_pixbuf,
+					0, 0, x_offset + xpad, y_offset + ypad + thumb_offset,
+					icon_pixbuf.Width, icon_pixbuf.Height, Gdk.RgbDither.None, 0, 0);
+
+			icon_pixbuf.Dispose ();
+
+			return true;
+		}
+
+		protected override bool OnScrollEvent (EventScroll args)
+		{
+			float shift = 1f;
+			if ((args.State & Gdk.ModifierType.ShiftMask) > 0)
+				shift = 6f;
+
+			switch (args.Direction) {
+			case ScrollDirection.Up:
+			case ScrollDirection.Right:
+				Position = animation.To - shift;
+				return true;
+			case Gdk.ScrollDirection.Down:
+			case Gdk.ScrollDirection.Left:
+				Position = animation.To + shift;
+				return true;
+			}
+			return false;
+		}
+
+		protected override bool OnKeyPressEvent (Gdk.EventKey ek)
+		{
+			switch (ek.Key) {
+			case Gdk.Key.Page_Down:
+			case Gdk.Key.Down:
+			case Gdk.Key.Right:
+				ActiveItem ++;
+				return true;
+
+			case Gdk.Key.Page_Up:
+			case Gdk.Key.Up:
+			case Gdk.Key.Left:
+				ActiveItem --;
+				return true;
+			}
+			return false;
+		}
+
+		protected virtual void SetPositionCore (double position)
+		{
+			if (this.position == position)
+				return;
+			if (position < 0)
+				position = 0;
+			if (position > selection.Collection.Count - 1)
+				position = selection.Collection.Count - 1;
+
+
+			this.position = position;
+			QueueDraw ();
+		}
+
+		void HandlePointerChanged (object sender, BrowsablePointerChangedEventArgs args)
+		{
+			Position = ActiveItem;
+		}
+
+		void HandleCollectionChanged (IBrowsableCollection coll)
+		{
+			this.position = ActiveItem;
+			QueueDraw ();
+		}
+
+		void HandleCollectionItemsChanged (IBrowsableCollection coll, BrowsableEventArgs args)
+		{
+			if (!args.Changes.DataChanged)
+				return;
+			foreach (int item in args.Items)
+				thumb_cache.TryRemove ((selection.Collection [item]).DefaultVersion.Uri);
+
+			//FIXME call QueueDrawArea
+			QueueDraw ();
+		}
+
+		void HandlePixbufLoaded (ImageLoaderThread pl, ImageLoaderThread.RequestItem item) {
+			if (!thumb_cache.Contains (item.Uri)) {
+				return;
+			}
+
+			//FIXME use QueueDrawArea
+			//FIXME only invalidate if displayed
+			QueueDraw ();
+
+
+		}
+
+		protected override bool OnPopupMenu ()
+		{
+			DrawOrientationMenu (null);
+			return true;
+		}
+
+		private bool DrawOrientationMenu (Gdk.EventButton args)
+		{
+			Gtk.Menu placement_menu = new Gtk.Menu ();
+			GtkUtil.MakeCheckMenuItem (placement_menu,
+							Mono.Unix.Catalog.GetString ("_Horizontal"),
+							App.Instance.Organizer.HandleFilmstripHorizontal,
+							true, Orientation == Orientation.Horizontal, true);
+			GtkUtil.MakeCheckMenuItem (placement_menu,
+							Mono.Unix.Catalog.GetString ("_Vertical"),
+							App.Instance.Organizer.HandleFilmstripVertical,
+							true, Orientation == Orientation.Vertical, true);
+
+			if (args != null)
+				placement_menu.Popup (null, null, null, args.Button, args.Time);
+			else
+				placement_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
+
+			return true;
+		}
+
+		protected override bool OnButtonPressEvent (EventButton evnt)
+		{
+			if (evnt.Button == 3)
+				return DrawOrientationMenu (evnt);
+
+			if (evnt.Button != 1 || (
+				(Orientation == Orientation.Horizontal && (evnt.X > filmstrip_end_pos || evnt.X < filmstrip_start_pos)) ||
+				(Orientation == Orientation.Vertical && (evnt.Y > filmstrip_end_pos || evnt.Y < filmstrip_start_pos))
+				))
+				return false;
+			HasFocus = true;
+			int pos = -1;
+			foreach (int key in start_indexes.Keys)
+				if (key <= (Orientation == Orientation.Horizontal ? evnt.X : evnt.Y) && key > pos)
+					pos = key;
+			ActiveItem = (int)start_indexes [pos];
+			return true;
+		}
+
+		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;
+			try {
+				var pixbuf = thumb_cache.Get (uri);
+				if (pixbuf != null)
+					current = pixbuf.ShallowCopy ();
+			} catch (IndexOutOfRangeException) {
+				current = null;
+			}
+
+			if (current == 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 {
+					if (SquaredThumbs) {
+                        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
+			Cms.Profile screen_profile;
+			if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
+				Pixbuf t = current.Copy ();
+				current = t;
+				FSpot.ColorManagement.ApplyProfile (current, screen_profile);
+			}
+
+			// Add a four pixel white border around the thumbnail
+			Pixbuf whiteBorder = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, current.Width, current.Height);
+			whiteBorder.Fill (0);
+			current.CopyArea (1, 1, current.Width - 8, current.Height - 8, whiteBorder, 4, 4);
+			current = whiteBorder;
+
+			if (!highlighted)
+				return current;
+
+			Pixbuf highlight = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, current.Width, current.Height);
+
+			highlight.Fill (ColorToInt (Style.Light (StateType.Selected)));
+
+			// Add a two pixel highlight around the thumbnail
+			current.CopyArea (2, 2, current.Width - 4, current.Height - 4, highlight, 2, 2);
+
+			return highlight;
+		}
+
+		private static uint ColorToInt(Gdk.Color color) {
+			return (uint)((uint)color.Red / 256 << 24 ) + ((uint)color.Green / 256 << 16) + ((uint)color.Blue / 256 << 8) + 255;
+		}
+
+		~Filmstrip ()
+		{
+			Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
+			Dispose (false);
+		}
+
+		public override void Dispose ()
+		{
+			Dispose (true);
+			base.Dispose ();
+			System.GC.SuppressFinalize (this);
+		}
+
+		bool is_disposed = false;
+		protected virtual void Dispose (bool disposing)
+		{
+			if (is_disposed)
+				return;
+			if (disposing) {
+				this.selection.Changed -= HandlePointerChanged;
+				this.selection.Collection.Changed -= HandleCollectionChanged;
+				this.selection.Collection.ItemsChanged -= HandleCollectionItemsChanged;
+				ThumbnailLoader.Default.OnPixbufLoaded -= HandlePixbufLoaded;
+				if (background_pixbuf != null)
+					background_pixbuf.Dispose ();
+				if (background_tile != null)
+					background_tile.Dispose ();
+				thumb_cache.Dispose ();
+			}
+			//Free unmanaged resources
+
+			is_disposed = true;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/FindBar.cs b/src/Clients/MainApp/FSpot.Widgets/FindBar.cs
new file mode 100644
index 0000000..691a1bb
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/FindBar.cs
@@ -0,0 +1,617 @@
+/*
+ * Widgets/FindBar.cs
+ *
+ * Author(s)
+ *  Gabriel Burt  <gabriel.burt at gmail.com>
+ *  Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+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 Hyena;
+
+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;
+
+		/*
+		 * Properties
+		 */
+		public bool Completing {
+			get {
+				return (entry.Completion as LogicEntryCompletion).Completing;
+			}
+		}
+
+		public Gtk.Entry Entry {
+			get { return entry; }
+		}
+
+		public Term RootTerm  {
+			get { return root_term; }
+		}
+
+		/*
+		 * Constructor
+		 */
+		public FindBar (PhotoQuery query, TreeModel model) : base(new HBox())
+		{
+			this.query = query;
+			box = Child as HBox;
+
+			box.Spacing = 6;
+			box.BorderWidth = 2;
+
+			box.PackStart (new Label (Catalog.GetString ("Find:")), false, false, 0);
+
+			entry = new Entry ();
+			entry.Completion = new LogicEntryCompletion (entry, model);
+
+			entry.TextInserted  += HandleEntryTextInserted;
+			entry.TextDeleted   += HandleEntryTextDeleted;
+			entry.KeyPressEvent += HandleEntryKeyPress;
+
+			box.PackStart (entry, true, true, 0);
+
+			Button clear_button = new Gtk.Button ();
+			clear_button.Add (new Gtk.Image ("gtk-close", Gtk.IconSize.Button));
+			clear_button.Clicked += HandleCloseButtonClicked;
+			clear_button.Relief = Gtk.ReliefStyle.None;
+			box.PackStart (clear_button, false, false, 0);
+		}
+
+		/*
+		 * Event Handlers
+		 */
+
+		private void HandleCloseButtonClicked (object sender, EventArgs args)
+		{
+			Clear ();
+		}
+
+		private void HandleEntryTextInserted (object sender, TextInsertedArgs args)
+		{
+			//Log.DebugFormat ("inserting {0}, ( = {1}  ) = {2}", args.Text, open_parens, close_parens);
+
+			//int start = args.Position - args.Length;
+
+			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 close_parens_needed = open_parens - close_parens;
+			for (int i = 0; i < close_parens_needed; i++) {
+				entry.TextInserted -= HandleEntryTextInserted;
+				entry.InsertText (")", ref pos);
+				close_parens++;
+				entry.TextInserted += HandleEntryTextInserted;
+				pos++;
+			}
+			//Log.DebugFormat ("done w/ insert, {0}, ( = {1}  ) = {2}", args.Text, open_parens, close_parens);
+			last_entry_text = entry.Text;
+
+			QueueUpdate ();
+		}
+
+		private void HandleEntryTextDeleted (object sender, TextDeletedArgs args)
+		{
+			int length = args.EndPos - args.StartPos;
+			//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);
+
+			for (int i = 0; i < txt.Length; i++) {
+				if (txt [i] == '(')
+					open_parens--;
+				else if (txt [i] == ')')
+					close_parens--;
+			}
+
+			last_entry_text = entry.Text;
+
+			QueueUpdate ();
+		}
+
+		private void HandleEntryKeyPress (object sender, KeyPressEventArgs args)
+		{
+			//bool shift = ModifierType.ShiftMask == (args.Event.State & ModifierType.ShiftMask);
+
+			switch (args.Event.Key) {
+			case (Gdk.Key.Escape):
+				Clear ();
+				args.RetVal = true;
+				break;
+
+			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) {
+					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++;
+
+				// Put the cursor right after the open paren
+				entry.Position++;
+
+				args.RetVal = true;
+				break;
+
+			default:
+				args.RetVal = false;
+				break;
+			}
+		}
+
+		/*
+		 * Helper methods.
+		 */
+
+		private void Clear ()
+		{
+			entry.Text = String.Empty;
+			Hide ();
+		}
+
+		// OPS The operators we support, case insensitive
+		//private static string op_str = "(?'Ops' or | and |, | \\s+ )";
+		private static string op_str = "(?'Ops' "+ Catalog.GetString ("or") + " | "+ Catalog.GetString ("and")  + " |, )";
+
+		// Match literals, eg tags or other text to search on
+		private static string literal_str = "[^{0}{1}]+?";
+		//private static string not_literal_str = "not\\s*\\((?'NotTag'[^{0}{1}]+)\\)";
+
+		// Match a group surrounded by parenthesis and one or more terms separated by operators
+		private static string term_str = "(((?'Open'{0})(?'Pre'[^{0}{1}]*?))+((?'Close-Open'{1})(?'Post'[^{0}{1}]*?))+)*?(?(Open)(?!))";
+
+		// Match a group surrounded by parenthesis and one or more terms separated by operators, surrounded by not()
+		//private static string not_term_str = String.Format("not\\s*(?'NotTerm'{0})", term_str);
+
+		// Match a simple term or a group term or a not(group term)
+		//private static string comb_term_str = String.Format ("(?'Term'{0}|{2}|{1})", simple_term_str, term_str, not_term_str);
+		private static string comb_term_str = String.Format ("(?'Term'{0}|{1})|not\\s*\\((?'NotTerm'{0})\\)|not\\s*(?'NotTerm'{1})", literal_str, term_str);
+
+		// Match a single term or a set of terms separated by operators
+		private static string regex_str = String.Format ("^((?'Terms'{0}){1})*(?'Terms'{0})$", comb_term_str, op_str);
+
+		private static Regex term_regex = new Regex (
+							  String.Format (regex_str, "\\(", "\\)"),
+							  RegexOptions.IgnoreCase | RegexOptions.Compiled
+						  );
+
+		// Breaking the query the user typed into something useful involves running
+		// it through the above regular expression recursively until it is broken down
+		// into literals and operators that we can use to generate SQL queries.
+		private bool ConstructQuery (Term parent, int depth, string txt)
+		{
+			return ConstructQuery(parent, depth, txt, false);
+		}
+
+		private bool ConstructQuery (Term parent, int depth, string txt, bool negated)
+		{
+			if (txt == null || txt.Length == 0)
+				return true;
+
+			string indent = String.Format ("{0," + depth*2 + "}", " ");
+
+			//Log.DebugFormat (indent + "Have text: {0}", txt);
+
+			// Match the query the user typed against our regular expression
+			Match match = term_regex.Match (txt);
+
+			if (!match.Success) {
+				//Log.Debug (indent + "Failed to match.");
+				return false;
+			}
+
+			bool op_valid = true;
+			string op = String.Empty;
+
+			// For the moment at least we don't support operator precedence, so we require
+			// that only a single operator is used for any given term unless it is made unambiguous
+			// by using parenthesis.
+			foreach (Capture capture in match.Groups ["Ops"].Captures) {
+				if (op == String.Empty)
+					op = capture.Value;
+				else if (op != capture.Value) {
+					op_valid = false;
+					break;
+				}
+			}
+
+			if (!op_valid) {
+				Log.Information (indent + "Ambiguous operator sequence.  Use parenthesis to explicitly define evaluation order.");
+				return false;
+			}
+
+			if (match.Groups ["Terms"].Captures.Count == 1 && match.Groups["NotTerm"].Captures.Count != 1) {
+				//Log.DebugFormat (indent + "Unbreakable term: {0}", match.Groups ["Terms"].Captures [0]);
+				string literal;
+				bool is_negated = false;
+				Tag tag = null;
+
+
+				if (match.Groups ["NotTag"].Captures.Count == 1) {
+					literal = match.Groups ["NotTag"].Captures [0].Value;
+					is_negated = true;
+				} else {
+					literal = match.Groups ["Terms"].Captures [0].Value;
+				}
+
+				is_negated = is_negated || negated;
+
+				tag = App.Instance.Database.Tags.GetTagByName (literal);
+
+				// New OR term so we can match against both tag and text search
+				parent = new OrTerm(parent, null);
+
+				// If the literal is the name of a tag, include it in the OR
+				//AbstractLiteral term = null;
+				if (tag != null) {
+					new Literal (parent, tag, null);
+				}
+
+				// Always include the literal text in the search (path, comment, etc)
+				new TextLiteral (parent, literal);
+
+				// If the term was negated, negate the OR parent term
+				if (is_negated) {
+					parent = parent.Invert(true);
+				}
+
+				if (RootTerm == null)
+					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;
+				}
+
+				foreach (Capture capture in match.Groups ["Term"].Captures) {
+					string subterm = capture.Value.Trim ();
+
+					if (subterm == null || subterm.Length == 0)
+						continue;
+
+					// Strip leading/trailing parens
+					if (subterm [0] == '(' && subterm [subterm.Length - 1] == ')') {
+						subterm = subterm.Remove (subterm.Length - 1, 1);
+						subterm = subterm.Remove (0, 1);
+					}
+
+					//Log.DebugFormat (indent + "Breaking subterm apart: {0}", subterm);
+
+					if (!ConstructQuery (us, depth + 1, subterm, negated))
+						return false;
+				}
+
+				foreach (Capture capture in match.Groups ["NotTerm"].Captures) {
+					string subterm = capture.Value.Trim ();
+
+					if (subterm == null || subterm.Length == 0)
+						continue;
+
+					// Strip leading/trailing parens
+					if (subterm [0] == '(' && subterm [subterm.Length - 1] == ')') {
+						subterm = subterm.Remove (subterm.Length - 1, 1);
+						subterm = subterm.Remove (0, 1);
+					}
+
+					//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);
+				}
+
+				return true;
+			}
+		}
+
+		private bool updating = false;
+		private uint update_timeout_id = 0;
+		private void QueueUpdate ()
+		{
+			if (updating || update_timeout_id != 0) {
+				lock(this) {
+					// If there is a timer set and we are not yet handling its timeout, then remove the timer
+					// so we delay its trigger for another 500ms.
+					if (!updating && update_timeout_id != 0)
+						GLib.Source.Remove (update_timeout_id);
+
+					// Assuming we're not currently handling a timeout, add a new timer
+					if (!updating)
+						update_timeout_id = GLib.Timeout.Add(500, OnUpdateTimer);
+				}
+			} else {
+				// If we are not updating and there isn't a timer already set, then there is
+				// no risk of race condition with the  timeout handler.
+				update_timeout_id = GLib.Timeout.Add(500, OnUpdateTimer);
+			}
+		}
+
+		private bool OnUpdateTimer ()
+		{
+			lock(this) {
+				updating = true;
+			}
+
+			Update();
+
+			lock(this) {
+				updating = false;
+				update_timeout_id = 0;
+			}
+
+			return false;
+		}
+
+		private void Update ()
+		{
+			// Clear the last root term
+			root_term = null;
+
+			if (ParensValid () && ConstructQuery (null, 0, entry.Text)) {
+				if (RootTerm != null) {
+					//Log.DebugFormat("rootTerm = {0}", RootTerm);
+					if (!(RootTerm is AndTerm)) {
+						// A little hacky, here to make sure the root term is a AndTerm which will
+						// ensure we handle the Hidden tag properly
+						AndTerm root_parent = new AndTerm(null, null);
+						RootTerm.Parent = root_parent;
+						root_term = root_parent;
+					}
+
+					//Log.DebugFormat("rootTerm = {0}", RootTerm);
+					if (!(RootTerm is AndTerm)) {
+						// A little hacky, here to make sure the root term is a AndTerm which will
+						// ensure we handle the Hidden tag properly
+						AndTerm root_parent = new AndTerm(null, null);
+						RootTerm.Parent = root_parent;
+						root_term = root_parent;
+					}
+					//Log.DebugFormat ("condition = {0}", RootTerm.SqlCondition ());
+					query.TagTerm = new ConditionWrapper (RootTerm.SqlCondition ());
+				} else {
+					query.TagTerm = null;
+					//Log.Debug ("root term is null");
+				}
+			}
+		}
+
+		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);
+
+					if (pair_pos == -1)
+						return false;
+				}
+			}
+
+			return true;
+		}
+
+		/*
+		 * Static Utility Methods
+		 */
+		private static int ParenPairPosition (string txt, int pos)
+		{
+			char one = txt [pos];
+			bool open = (one == '(');
+			char two = (open) ? ')' : '(';
+
+			//int level = 0;
+			int num = (open) ? txt.Length - pos - 1: pos;
+
+			int sames = 0;
+			for (int i = 0; i < num; i++) {
+				if (open)
+					pos++;
+				else
+					pos--;
+
+				if (pos < 0 || pos > txt.Length - 1)
+					return -1;
+
+				if (txt [pos] == one)
+					sames++;
+				else if (txt [pos] == two) {
+					if (sames == 0)
+						return pos;
+					else
+						sames--;
+				}
+			}
+
+			return -1;
+		}
+
+		/*private static string ReverseString (string txt)
+		{
+		    char [] txt_a = txt.ToCharArray ();
+		    System.Reverse (txt_a);
+		    return new String (txt_a);
+		}*/
+	}
+
+	public class LogicEntryCompletion : EntryCompletion {
+		private Entry entry;
+
+		private bool completing = false;
+		public bool Completing {
+			get { return completing; }
+		}
+
+		public LogicEntryCompletion (Entry entry, TreeModel tree_model)
+		{
+			this.entry = entry;
+
+			Model = new DependentListStore(tree_model);
+
+			InlineCompletion = false;
+			MinimumKeyLength = 1;
+			TextColumn = 1;
+			PopupSetWidth = false;
+			MatchFunc = LogicEntryCompletionMatchFunc;
+			MatchSelected += HandleMatchSelected;
+
+			// Insert these when appropriate..
+			//InsertActionText (0, "or");
+			//InsertActionText (1, "and");
+			// HandleAction...
+		}
+
+		[GLib.ConnectBefore]
+		private void HandleMatchSelected (object sender, MatchSelectedArgs args)
+		{
+			string name = args.Model.GetValue (args.Iter, TextColumn) as string;
+			//Log.DebugFormat ("match selected..{0}", name);
+
+			int pos = entry.Position;
+			string updated_text = completion_logic.ReplaceKey (entry.Text, name, ref pos);
+
+			completing = true;
+			entry.Text = updated_text;
+			entry.Position = pos;
+			completing = false;
+
+			args.RetVal = true;
+			//Log.Debug ("done w/ match selected");
+		}
+
+		private CompletionLogic completion_logic = new CompletionLogic ();
+		public bool LogicEntryCompletionMatchFunc (EntryCompletion completion, string key, TreeIter iter)
+		{
+			if (Completing)
+				return false;
+
+			key = key == null ? null : key.Normalize(NormalizationForm.FormC);
+			string name = completion.Model.GetValue (iter, completion.TextColumn) as string;
+			int pos = entry.Position - 1;
+			return completion_logic.MatchFunc (name, key, pos);
+		}
+	}
+
+	public class CompletionLogic
+	{
+		string last_key = String.Empty;
+		string transformed_key = String.Empty;
+		int start = 0;
+
+		private static string or_op = " " + Catalog.GetString ("or") + " ";
+		private static string and_op = " " + Catalog.GetString ("and") + " ";
+
+		private static int or_op_len = or_op.Length;
+		private static int and_op_len = and_op.Length;
+
+		public bool MatchFunc (string name, string key, int pos)
+		{
+			// If this is the fist comparison for this key, convert the key (which is the entire search string)
+			// into just the part that is relevant to completing this tag name.
+			if (key != last_key) {
+				last_key = key;
+
+				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;
+				else {
+					start = 0;
+					for (int i = pos; i >= 0; i--) {
+						if (key [i] == ')' || key [i] == '(' ||
+						   (i >= and_op_len - 1 && String.Compare (key.Substring (i - and_op_len + 1, and_op_len), and_op, true) == 0) ||
+						   (i >= or_op_len - 1 && String.Compare (key.Substring (i - or_op_len + 1, or_op_len), or_op, true) == 0)) {
+							//Log.DebugFormat ("have start break char at {0}", i);
+							start = i + 1;
+							break;
+						}
+					}
+
+					int end = key.Length - 1;
+					for (int j = pos; j < key.Length; j++) {
+						if (key [j] == ')' || key [j] == '(' ||
+						   (key.Length >= j + and_op_len && String.Compare (key.Substring (j, and_op_len), and_op, true) == 0) ||
+						   (key.Length >= j + or_op_len && String.Compare (key.Substring (j, or_op_len), or_op, true) == 0)) {
+							end = j - 1;
+							break;
+						}
+					}
+
+					//Log.DebugFormat ("start = {0} end = {1}", start, end);
+
+					int len = end - start + 1;
+					if (len > 0 && start < last_key.Length)
+						transformed_key = last_key.Substring (start, end - start + 1);
+					else
+						transformed_key = String.Empty;
+				}
+				//Log.DebugFormat ("transformed key {0} into {1}", key, transformed_key);
+			}
+
+			if (transformed_key == String.Empty)
+				return false;
+
+			// Ignore null or names that are too short
+			if (name == null || name.Length <= transformed_key.Length)
+				return false;
+
+			//Log.DebugFormat ("entered = {0} compared to {1}", transformed_key, name);
+
+			// Try to match key and name case insensitive
+			if (String.Compare (transformed_key, name.Substring (0, transformed_key.Length), true) == 0) {
+				return true;
+			}
+
+			// Try to match with diacritics removed from name
+			string simplified_name = StringUtil.SearchKey (name.Substring (0, transformed_key.Length));
+			//Log.DebugFormat ("entered = {0} compared to {1}", transformed_key, simplified_name);
+			return (String.Compare (transformed_key, simplified_name, true) == 0);
+		}
+
+		public string ReplaceKey (string query, string name, ref int pos)
+		{
+			// do some sanity checks first
+			if (start > query.Length) {
+				Log.Error ("ReplaceKey: start > query.length");
+				return query;
+			}
+			// move caret after inserted name, even if it was not
+			// at the end of the key
+			pos = start + name.Length;
+			return query.Substring (0, start) + name + query.Substring (start + transformed_key.Length);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/FolderTreeModel.cs b/src/Clients/MainApp/FSpot.Widgets/FolderTreeModel.cs
new file mode 100644
index 0000000..3be8593
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/FolderTreeModel.cs
@@ -0,0 +1,188 @@
+/*
+ * FSpot.Widgets.FolderTreeModel.cs
+ *
+ * Author(s)
+ * 	Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Data;
+using System.Collections.Generic;
+
+using Gtk;
+using GLib;
+
+using FSpot;
+using FSpot.Database;
+using FSpot.Core;
+using Hyena;
+
+using Mono.Unix;
+
+namespace FSpot.Widgets
+{
+	public class FolderTreeModel : TreeStore
+	{
+		protected FolderTreeModel (IntPtr raw) : base (raw) { }
+
+		Db database;
+
+		const string query_string =
+			"SELECT base_uri, COUNT(*) AS count " +
+			"FROM photos " +
+			"GROUP BY base_uri " +
+			"ORDER BY base_uri ASC";
+
+
+		public FolderTreeModel ()
+			: base (typeof (string), typeof (int), typeof (SafeUri))
+		{
+			database = App.Instance.Database;
+			database.Photos.ItemsChanged += HandlePhotoItemsChanged;
+
+			UpdateFolderTree ();
+		}
+
+		void HandlePhotoItemsChanged (object sender, DbItemEventArgs<Photo> e)
+		{
+			UpdateFolderTree ();
+		}
+
+		public string GetFolderNameByIter (TreeIter iter)
+		{
+			if ( ! IterIsValid (iter))
+				return null;
+
+			return (string) GetValue (iter, 0);
+		}
+
+		public int GetPhotoCountByIter (TreeIter iter)
+		{
+			if ( ! IterIsValid (iter))
+				return -1;
+
+			return (int) GetValue (iter, 1);
+		}
+
+		public SafeUri GetUriByIter (TreeIter iter)
+		{
+			if ( ! IterIsValid (iter))
+				return null;
+
+			return (SafeUri) GetValue (iter, 2);
+		}
+
+		public SafeUri GetUriByPath (TreePath row)
+		{
+			TreeIter iter;
+
+			GetIter (out iter, row);
+
+			return GetUriByIter (iter);
+		}
+
+		int count_all;
+		public int Count {
+			get { return count_all; }
+		}
+
+		/*
+		 * UpdateFolderTree queries for directories in database and updates
+		 * a possibly existing folder-tree to the queried structure
+		 */
+		private void UpdateFolderTree ()
+		{
+			Clear ();
+
+			count_all = 0;
+
+			/* points at start of each iteration to the leaf of the last inserted uri */
+			TreeIter iter = TreeIter.Zero;
+
+			/* stores the segments of the last inserted uri */
+			string[] last_segments = new string[] {};
+
+			int last_count = 0;
+
+			IDataReader reader = database.Database.Query (query_string);
+
+			while (reader.Read ()) {
+				var base_uri = new SafeUri (reader["base_uri"].ToString (), true);
+
+				int count = Convert.ToInt32 (reader["count"]);
+
+				// FIXME: this is a workaround hack to stop things from crashing - https://bugzilla.gnome.org/show_bug.cgi?id=622318
+				int index = base_uri.ToString ().IndexOf ("://");
+				var hack = base_uri.ToString ().Substring (index + 3);
+				hack = hack.IndexOf ('/') == 0 ? hack : "/" + hack;
+				string[] segments = hack.TrimEnd ('/').Split ('/');
+
+				/* First segment contains nothing (since we split by /), so we
+				 * can overwrite the first segment for our needs and put the
+				 * scheme here.
+				 */
+				segments[0] = base_uri.Scheme;
+
+				int i = 0;
+
+				/* find first difference of last inserted an current uri */
+				while (i < last_segments.Length && i < segments.Length) {
+					if (segments[i] != last_segments[i])
+						break;
+
+					i++;
+				}
+
+				/* points to the parent node of the current iter */
+				TreeIter parent_iter = iter;
+
+				/* step back to the level, where the difference occur */
+				for (int j = 0; j + i < last_segments.Length; j++) {
+
+					iter = parent_iter;
+
+					if (IterParent (out parent_iter, iter)) {
+						last_count += (int)GetValue (parent_iter, 1);
+						SetValue (parent_iter, 1, last_count);
+					} else
+						count_all += (int)last_count;
+				}
+
+				while (i < segments.Length) {
+					if (IterIsValid (parent_iter)) {
+						iter =
+							AppendValues (parent_iter,
+							              Uri.UnescapeDataString (segments[i]),
+							              (segments.Length - 1 == i)? count : 0,
+							              (GetValue (parent_iter, 2) as SafeUri).Append (String.Format ("{0}/", segments[i]))
+							              );
+					} else {
+						iter =
+							AppendValues (Uri.UnescapeDataString (segments[i]),
+							              (segments.Length - 1 == i)? count : 0,
+							              new SafeUri (String.Format ("{0}:///", base_uri.Scheme), true));
+					}
+
+					parent_iter = iter;
+
+					i++;
+				}
+
+				last_count = count;
+				last_segments = segments;
+
+			}
+
+			if (IterIsValid (iter)) {
+				/* and at least, step back and update photo count */
+				while (IterParent (out iter, iter)) {
+					last_count += (int)GetValue (iter, 1);
+					SetValue (iter, 1, 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
new file mode 100644
index 0000000..5888208
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/FolderTreePage.cs
@@ -0,0 +1,29 @@
+/*
+ * FSpot.Widgets.FolderTreePage.cs
+ *
+ * Author(s)
+ * 	Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Gtk;
+using Mono.Unix;
+using FSpot.Extensions;
+
+namespace FSpot.Widgets
+{
+	public class FolderTreePage : SidebarPage
+	{
+		readonly FolderTreeView folder_tree_widget;
+
+		public FolderTreePage ()
+			: base (new ScrolledWindow (), Catalog.GetString ("Folders"), "gtk-directory")
+		{
+			ScrolledWindow scrolled_window = SidebarWidget as ScrolledWindow;
+			folder_tree_widget = new FolderTreeView ();
+			scrolled_window.Add (folder_tree_widget);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/FolderTreeView.cs b/src/Clients/MainApp/FSpot.Widgets/FolderTreeView.cs
new file mode 100644
index 0000000..a8f3543
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/FolderTreeView.cs
@@ -0,0 +1,167 @@
+/*
+ * FSpot.Widgets.FolderTreeView.cs
+ *
+ * Author(s)
+ * 	Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+
+using System;
+using System.Collections.Generic;
+
+using Gtk;
+using GLib;
+
+using FSpot;
+using FSpot.Utils;
+
+using Hyena;
+using Mono.Unix;
+
+namespace FSpot.Widgets
+{
+	public class FolderTreeView : SaneTreeView
+	{
+		FolderTreeModel folder_tree_model;
+
+		protected FolderTreeView (IntPtr raw) : base (raw) {}
+
+		public FolderTreeView () : this (new FolderTreeModel ())
+		{
+		}
+
+		public FolderTreeView (FolderTreeModel tree_model) : base (tree_model)
+		{
+			folder_tree_model = tree_model;
+
+			HeadersVisible = false;
+
+			TreeViewColumn column = new TreeViewColumn ();
+
+			CellRendererPixbuf pixbuf_renderer = new CellRendererPixbuf ();
+			column.PackStart (pixbuf_renderer, false);
+			column.SetCellDataFunc (pixbuf_renderer, PixbufDataFunc as TreeCellDataFunc);
+
+			CellRendererTextProgress folder_renderer = new CellRendererTextProgress ();
+			column.PackStart (folder_renderer, true);
+			column.SetCellDataFunc (folder_renderer, FolderDataFunc as TreeCellDataFunc);
+
+			AppendColumn (column);
+
+			Gtk.Drag.SourceSet (this, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
+				    folder_tree_source_target_table, Gdk.DragAction.Copy | Gdk.DragAction.Move);
+		}
+
+		public UriList SelectedUris {
+			get {
+				UriList list = new UriList ();
+
+				TreePath[] selected_rows = Selection.GetSelectedRows ();
+
+				foreach (TreePath row in selected_rows)
+					list.Add (new SafeUri (folder_tree_model.GetUriByPath (row)));
+
+				return list;
+			}
+		}
+
+		void PixbufDataFunc (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter)
+		{
+			CellRendererPixbuf renderer = cell as CellRendererPixbuf;
+
+			string stock;
+			var uri = folder_tree_model.GetUriByIter (iter);
+			if (uri == null)
+				return;
+			File file = FileFactory.NewForUri (uri);
+			try {
+				FileInfo info =
+					file.QueryInfo ("standard::icon", FileQueryInfoFlags.None, null);
+
+				ThemedIcon themed_icon = info.Icon as ThemedIcon;
+				if (themed_icon != null && themed_icon.Names.Length > 0)
+					stock = themed_icon.Names[0];
+				else
+					stock = "gtk-directory";
+
+			} catch (Exception) {
+				stock = "gtk-directory";
+			}
+
+			TreeIter tmp;
+			if (tree_model.IterParent (out tmp, iter)) {
+				renderer.IconName = stock;
+				renderer.CellBackground = null;
+			} else {
+				renderer.IconName = stock;
+				renderer.CellBackgroundGdk = Style.Background (StateType.Selected);
+			}
+		}
+
+		void FolderDataFunc (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter)
+		{
+			CellRendererTextProgress renderer = cell as CellRendererTextProgress;
+
+			int progress_value = 0;
+			int count = (tree_model as FolderTreeModel).Count;
+
+			if (count != 0)
+				progress_value = (int) ((100.0 * folder_tree_model.GetPhotoCountByIter (iter)) / count);
+
+			renderer.Value = progress_value;
+
+			string text = folder_tree_model.GetFolderNameByIter (iter);
+
+			TreeIter tmp;
+			if (tree_model.IterParent (out tmp, iter)) {
+				renderer.UseMarkup = false;
+				renderer.Text = text;
+				renderer.CellBackground = null;
+			} else {
+				renderer.UseMarkup = true;
+
+				/* since import do not use GIO at the moment, no other prefix than file:/// is
+				 * possible.
+				 */
+				if (text == Uri.UriSchemeFile)
+					renderer.Text = String.Format ("<b>{0}</b>", Catalog.GetString ("Filesystem"));
+				else
+					renderer.Text = String.Format ("<b>{0}</b>", text);
+
+				renderer.CellBackgroundGdk = Style.Background (StateType.Selected);
+			}
+		}
+
+		private static TargetEntry [] folder_tree_source_target_table =
+			new TargetEntry [] {
+				DragDropTargets.UriQueryEntry,
+				DragDropTargets.UriListEntry,
+				DragDropTargets.PlainTextEntry
+		};
+
+
+		protected override void OnDragDataGet (Gdk.DragContext context, Gtk.SelectionData selection_data, uint info, uint time_)
+		{
+			if (info == DragDropTargets.UriQueryEntry.Info
+			    || info == DragDropTargets.UriListEntry.Info
+			    || info == DragDropTargets.PlainTextEntry.Info) {
+
+				selection_data.SetUriListData (SelectedUris, context.Targets[0]);
+				return;
+			}
+		}
+
+		protected override bool OnDragDrop (Gdk.DragContext context, int x, int y, uint time_)
+		{
+			return true;
+		}
+
+		protected override void OnRowActivated (Gtk.TreePath path, Gtk.TreeViewColumn column)
+		{
+			App.Instance.Organizer.SetFolderQuery (SelectedUris);
+		}
+
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/IconView.cs b/src/Clients/MainApp/FSpot.Widgets/IconView.cs
new file mode 100644
index 0000000..13e4862
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/IconView.cs
@@ -0,0 +1,1843 @@
+/*
+* Widgets/IconView.cs
+*
+* Author(s):
+* 	Etore Perazzoli
+*	Larry Ewing <lewing at novell.com>
+*	Stephane Delcroix <stephane at delcroix.org>
+*
+* This is free software. See COPYING for details.
+*/
+
+using Gtk;
+using Gdk;
+using System;
+using System.Reflection;
+using System.Collections;
+using System.IO;
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Platform;
+
+namespace FSpot.Widgets
+{
+    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 class IconView : Gtk.Layout {
+
+		// Public properties.
+		FSpot.PixbufCache cache;
+
+		/* preserve the scroll postion when possible */
+		private bool scroll;
+		private double scroll_value;
+
+		/* suppress it sometimes */
+		bool suppress_scroll = false;
+
+		// Zooming factor.
+		protected const double ZOOM_FACTOR = 1.2;
+
+		/* Width of the thumbnails. */
+		protected int thumbnail_width = 128;
+		protected const int MAX_THUMBNAIL_WIDTH = 256;
+		protected const int MIN_THUMBNAIL_WIDTH = 64;
+		public int ThumbnailWidth {
+			get {
+				return thumbnail_width;
+			}
+			set {
+				value = Math.Min(value, MAX_THUMBNAIL_WIDTH);
+				value = Math.Max(value, MIN_THUMBNAIL_WIDTH);
+
+				if (thumbnail_width != value) {
+					thumbnail_width = value;
+					QueueResize ();
+
+					if (ZoomChanged != null)
+						ZoomChanged (this, System.EventArgs.Empty);
+				}
+			}
+		}
+
+		public double Zoom {
+			get {
+				return ((double)(ThumbnailWidth - MIN_THUMBNAIL_WIDTH) / (double)(MAX_THUMBNAIL_WIDTH - MIN_THUMBNAIL_WIDTH));
+			}
+			set {
+				ThumbnailWidth = (int) ((value) * (MAX_THUMBNAIL_WIDTH - MIN_THUMBNAIL_WIDTH)) + MIN_THUMBNAIL_WIDTH;
+			}
+		}
+
+		protected double thumbnail_ratio = 4.0 / 3.0;
+		public double ThumbnailRatio {
+			get {
+				return thumbnail_ratio;
+			}
+			set {
+				thumbnail_ratio = value;
+				QueueResize ();
+			}
+		}
+
+		public int ThumbnailHeight {
+			get {
+				return (int) Math.Round ((double) thumbnail_width / ThumbnailRatio);
+			}
+		}
+
+		public FSpot.PixbufCache Cache {
+			get {
+				return cache;
+			}
+		}
+
+		private bool display_tags = true;
+		public bool DisplayTags {
+			get {
+				return display_tags;
+			}
+
+			set {
+				display_tags = value;
+				QueueResize ();
+			}
+		}
+
+		private bool display_dates = true;
+		public bool DisplayDates {
+			get {
+				if (cell_width > 100)
+					return display_dates;
+				else
+					return false;
+			}
+
+			set {
+				display_dates = value;
+				QueueResize ();
+			}
+		}
+
+		private bool display_filenames = false;
+		public bool DisplayFilenames {
+			get { return display_filenames; }
+			set {
+				if (value != display_filenames) {
+					display_filenames = value;
+					QueueResize ();
+				}
+			}
+		}
+
+		private bool display_ratings = true;
+		public bool DisplayRatings {
+			get {
+				if (cell_width > 100)
+					return display_ratings;
+				else
+					return false;
+			}
+
+			set {
+				display_ratings  = value;
+				QueueResize ();
+			}
+		}
+
+		// Size of the frame around the thumbnail.
+		protected int cell_border_width = 10;
+
+		// Size of the frame that may be selected
+        protected int cell_border_padding = 3;
+
+		// Border around the scrolled area.
+		protected const int BORDER_SIZE = 6;
+
+		// Thickness of the outline used to indicate selected items.
+		private const int SELECTION_THICKNESS = 5;
+
+		// Size of the tag icon in the view.
+		protected int tag_icon_size = 16;
+
+		// Horizontal spacing between the tag icons
+		protected int tag_icon_hspacing = 2;
+
+		// Vertical spacing between the thumbnail and additional infos (tags, dates, ...).
+		protected int tag_icon_vspacing = 3;
+
+		// Various other layout values.
+		protected int cells_per_row;
+		protected int cell_width;
+		protected int cell_height;
+		protected int cell_details;
+		protected int displayed_rows; //for pgUp pgDn support
+
+		// 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;
+
+		// Focus Handling
+		private int real_focus_cell;
+		public int FocusCell {
+			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;
+				}
+			}
+			get {
+				return real_focus_cell;
+			}
+		}
+
+		// Public events.
+		public event EventHandler<BrowsableEventArgs> DoubleClicked;
+		public event EventHandler ZoomChanged;
+		public delegate void StartDragHandler (object o, StartDragArgs args);
+		public event StartDragHandler StartDrag;
+
+		// Public API.
+		public IconView (IntPtr raw) : base (raw) {}
+
+		protected IconView () : base (null, null)
+		{
+			cache = new FSpot.PixbufCache ();
+			cache.OnPixbufLoaded += HandlePixbufLoaded;
+
+			ScrollAdjustmentsSet += new ScrollAdjustmentsSetHandler (HandleScrollAdjustmentsSet);
+
+			ButtonPressEvent += new ButtonPressEventHandler (HandleButtonPressEvent);
+			ButtonReleaseEvent += new ButtonReleaseEventHandler (HandleButtonReleaseEvent);
+			KeyPressEvent += new KeyPressEventHandler (HandleKeyPressEvent);
+			ScrollEvent += new ScrollEventHandler(HandleScrollEvent);
+			MotionNotifyEvent += new MotionNotifyEventHandler (HandleSelectMotionNotify);
+
+			Destroyed += HandleDestroyed;
+
+			AddEvents (
+				(int) EventMask.KeyPressMask
+				| (int) EventMask.KeyReleaseMask
+				| (int) EventMask.PointerMotionMask
+				| (int) EventMask.PointerMotionHintMask
+				| (int) EventMask.ButtonPressMask
+				| (int) EventMask.ButtonReleaseMask);
+
+			CanFocus = true;
+
+			//FSpot.Global.ModifyColors (this);
+		}
+
+		public IconView (IBrowsableCollection collection) : this ()
+		{
+			this.collection = collection;
+			this.selection = new SelectionCollection (collection);
+
+			Name = "ImageContainer";
+			collection.Changed += HandleChanged;
+			collection.ItemsChanged += HandleItemsChanged;
+
+			selection.DetailedChanged += HandleSelectionChanged;
+		}
+
+		private void HandleSelectionChanged (IBrowsableCollection collection, int [] ids)
+		{
+			if (ids == null)
+				QueueDraw ();
+			else
+				foreach (int id in ids)
+					InvalidateCell (id);
+		}
+
+		private void HandleChanged (IBrowsableCollection sender)
+		{
+			// FIXME we should probably try to merge the selection forward
+			// but it needs some thought to be efficient.
+			suppress_scroll = true;
+			QueueResize ();
+		}
+
+		private void HandleItemsChanged (IBrowsableCollection sender, BrowsableEventArgs args)
+		{
+			foreach (int item in args.Items) {
+				if (args.Changes.DataChanged)
+					UpdateThumbnail (item);
+				InvalidateCell (item);
+			}
+		}
+
+		//
+		// IPhotoSelection
+		//
+
+		protected IBrowsableCollection collection;
+		public IBrowsableCollection Collection {
+			get {
+				return collection;
+			}
+		}
+
+		protected SelectionCollection selection;
+		public SelectionCollection Selection {
+			get {
+				return selection;
+			}
+		}
+
+		// FIXME right now a selection change triggers a complete view redraw
+		// This should be optimized away by directly notifyiing the view of changed
+		// indexes rather than having the view connect to the collection.Changed event.
+		public class SelectionCollection : IBrowsableCollection {
+			IBrowsableCollection parent;
+			Hashtable selected_cells;
+			BitArray bit_array;
+			int [] selection;
+			IBrowsableItem [] items;
+			IBrowsableItem [] old;
+
+			public SelectionCollection (IBrowsableCollection collection)
+			{
+				this.selected_cells = new Hashtable ();
+				this.parent = collection;
+				this.bit_array = new BitArray (this.parent.Count);
+				this.parent.Changed += HandleParentChanged;
+				this.parent.ItemsChanged += HandleParentItemsChanged;
+			}
+
+			private void HandleParentChanged (IBrowsableCollection collection)
+			{
+				IBrowsableItem [] local = old;
+				selected_cells.Clear ();
+				bit_array = new BitArray (parent.Count);
+				ClearCached ();
+
+				if (old != null) {
+					int i = 0;
+
+					for (i = 0; i < local.Length; i++) {
+						int parent_index = parent.IndexOf (local [i]);
+						if (parent_index >= 0)
+							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 (this.Changed != null)
+					Changed (this);
+
+				if (this.DetailedChanged != null)
+					DetailedChanged (this, null);
+
+			}
+
+			public void MarkChanged (int item, IBrowsableItemChanges changes)
+			{
+				// Forward the change event up to our parent
+				// we'll fire the event when the parent calls us back
+				parent.MarkChanged ((int) selected_cells [item], changes);
+			}
+
+			private void HandleParentItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args)
+			{
+				if (this.ItemsChanged == null)
+					return;
+
+				ArrayList local_ids = new ArrayList ();
+				foreach (int parent_index in args.Items) {
+					// If the item isn't part of the selection ignore it
+					if (!this.Contains (collection [parent_index]))
+						return;
+
+					int local_index = this.IndexOf (parent_index);
+					if (local_index >= 0)
+						local_ids.Add (local_index);
+				}
+
+				if (local_ids.Count == 0)
+					return;
+
+				int [] items = (int [])local_ids.ToArray (typeof (int));
+				ItemsChanged (this, new BrowsableEventArgs (items, args.Changes));
+			}
+
+			public BitArray ToBitArray () {
+				return bit_array;
+			}
+
+			public int [] Ids {
+				get {
+					if (selection != null)
+						return selection;
+
+					selection = new int [selected_cells.Count];
+
+					int i = 0;
+					foreach (int cell in selected_cells.Values)
+						selection [i ++] = cell;
+
+					Array.Sort (selection);
+					return selection;
+				}
+			}
+
+			public IBrowsableItem this [int index] {
+				get {
+					int [] ids = this.Ids;
+					return parent [ids[index]];
+				}
+			}
+
+			public IBrowsableItem [] Items {
+				get {
+					if (items != null)
+						return items;
+
+					int [] ids = this.Ids;
+					items = new IBrowsableItem [ids.Length];
+					for (int i = 0; i < items.Length; i++) {
+						items [i] = parent [ids[i]];
+					}
+					return items;
+				}
+			}
+
+			public void Clear ()
+			{
+				Clear (true);
+			}
+
+			public void Clear (bool update)
+			{
+				int [] ids = Ids;
+				selected_cells.Clear ();
+				bit_array.SetAll (false);
+				SignalChange (ids);
+			}
+
+			public void Add (IBrowsableItem item)
+			{
+				if (this.Contains (item))
+					return;
+
+				int index = parent.IndexOf (item);
+				this.Add (index);
+			}
+
+			public int Count {
+				get {
+					return selected_cells.Count;
+				}
+			}
+
+			public bool Contains (IBrowsableItem item)
+			{
+				return selected_cells.ContainsKey (item);
+			}
+
+			public bool Contains (int num)
+			{
+				if (num < 0 || num > parent.Count)
+					return false;
+
+				return this.Contains (parent [num]);
+			}
+
+			public void Add (int num)
+			{
+				this.Add (num, true);
+			}
+
+			public void Add (int num, bool notify)
+			{
+				if (num == -1)
+					return;
+
+				if (this.Contains (num))
+					return;
+
+				IBrowsableItem item = parent [num];
+				selected_cells [item] = num;
+				bit_array.Set (num, true);
+
+				if (notify)
+					SignalChange (new int [] {num});
+			}
+
+			public void Add (int start, int end)
+			{
+				if (start == -1 || end == -1)
+					return;
+
+				int current = Math.Min (start, end);
+				int final = Math.Max (start, end);
+				int count = final - current + 1;
+				int [] ids = new int [count];
+
+				for (int i = 0; i < count; i++) {
+					this.Add (current, false);
+					ids [i] = current;
+					current++;
+				}
+
+				SignalChange (ids);
+			}
+
+			public void Remove (int cell, bool notify)
+			{
+				IBrowsableItem item = parent [cell];
+				if (item != null)
+					this.Remove (item, notify);
+
+			}
+
+			public void Remove (IBrowsableItem item)
+			{
+				Remove (item, true);
+			}
+
+			public void Remove (int cell)
+			{
+				Remove (cell, true);
+			}
+
+			private void Remove (IBrowsableItem item, bool notify)
+			{
+				if (item == null)
+					return;
+
+				int parent_index = (int) selected_cells [item];
+				selected_cells.Remove (item);
+				bit_array.Set (parent_index, false);
+
+				if (notify)
+					SignalChange (new int [] {parent_index});
+			}
+
+			// Remove a range, except the start entry
+			public void Remove (int start, int end)
+			{
+				if (start == -1 || end == -1)
+					return;
+
+				int current = Math.Min (start + 1, end);
+				int final = Math.Max (start - 1, end);
+				int count = final - current + 1;
+				int [] ids = new int [count];
+
+				for (int i = 0; i < count; i++) {
+					this.Remove (current, false);
+					ids [i] = current;
+					current++;
+				}
+
+				SignalChange (ids);
+			}
+
+			public int IndexOf (int parent_index)
+			{
+				return System.Array.IndexOf (this.Ids, parent_index);
+			}
+
+			public int IndexOf (IBrowsableItem item)
+			{
+				if (!this.Contains (item))
+					return -1;
+
+				int parent_index = (int) selected_cells [item];
+				return System.Array.IndexOf (Ids, parent_index);
+			}
+
+			private void ToggleCell (int cell_num, bool notify)
+			{
+				if (Contains (cell_num))
+					Remove (cell_num, notify);
+				else
+					Add (cell_num, notify);
+			}
+
+			public void ToggleCell (int cell_num)
+			{
+				ToggleCell (cell_num, true);
+			}
+
+			public void SelectionInvert ()
+			{
+				int [] changed_cell = new int[parent.Count];
+				for (int i = 0; i < parent.Count; i++) {
+					ToggleCell (i, false);
+					changed_cell[i] = i;
+				}
+
+				SignalChange (changed_cell);
+			}
+
+			public void SelectRect (int start_row, int end_row, int start_line, int end_line, int cells_per_row)
+			{
+				for (int row = start_row; row < end_row; row++)
+					for (int line = start_line; line < end_line; line++) {
+						int index = line*cells_per_row + row;
+						if (index < parent.Count)
+							Add (index, false);
+					}
+			}
+
+			public void ToggleRect (int start_row, int end_row, int start_line, int end_line, int cells_per_row)
+			{
+				for  (int row = start_row; row < end_row; row++)
+					for (int line = start_line; line < end_line; line++) {
+						int index = line*cells_per_row + row;
+						if (index < parent.Count)
+							ToggleCell (index, false);
+					}
+			}
+
+
+			public event IBrowsableCollectionChangedHandler Changed;
+			public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
+
+			public delegate void DetailedCollectionChanged (IBrowsableCollection collection, int [] ids);
+			public event DetailedCollectionChanged DetailedChanged;
+
+			private void ClearCached ()
+			{
+				selection = null;
+				items = null;
+			}
+
+			public void SignalChange (int [] ids)
+			{
+				ClearCached ();
+				old = this.Items;
+
+
+				if (Changed != null)
+					Changed (this);
+
+				if (DetailedChanged!= null)
+					DetailedChanged (this, ids);
+			}
+		}
+
+		// Updating.
+		public void UpdateThumbnail (int thumbnail_num)
+		{
+			IBrowsableItem photo = collection [thumbnail_num];
+			cache.Remove (photo.DefaultVersion.Uri);
+			InvalidateCell (thumbnail_num);
+		}
+
+		// Cell Geometry
+		public int CellAtPosition (int x, int y)
+		{
+			return CellAtPosition (x, y, true, false);
+		}
+
+		public int CellAtPosition (int x, int y, bool crop_visible, bool include_border)
+		{
+			if (collection == null)
+				return -1;
+
+			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 + cells_per_row * cell_width)
+				return -1;
+			if (y < BORDER_SIZE || y >= BORDER_SIZE + (collection.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 cell_num = column + row * cells_per_row;
+			if (cell_num >= collection.Count)
+				return -1;
+
+			// check if the click is in the gap between unselected cells
+			if (!include_border) {
+				Gdk.Rectangle displayed = CellBounds (cell_num);
+				displayed.Inflate (-cell_border_padding, -cell_border_padding-cell_details);
+				displayed.Offset (-cell_border_padding, -cell_border_padding);
+				if (displayed.Contains (x, y))
+					return cell_num;
+				else if (selection.Contains (cell_num))
+					return cell_num;
+				else
+					return -1;
+			} else
+				return cell_num;
+		}
+
+		public int TopLeftVisibleCell ()
+		{
+			//return CellAtPosition(BORDER_SIZE, (int)Vadjustment.Value + BORDER_SIZE + 8);
+			return CellAtPosition(BORDER_SIZE, (int) (Vadjustment.Value + Allocation.Height * (Vadjustment.Value / Vadjustment.Upper)) + BORDER_SIZE + 8);
+		}
+
+		public void GetCellCenter (int cell_num, out int x, out int y)
+		{
+			if (cell_num == -1) {
+				x = -1;
+				y = -1;
+			}
+
+			x = BORDER_SIZE + (cell_num % cells_per_row) * cell_width + cell_width / 2;
+			y = BORDER_SIZE + (cell_num / cells_per_row) * cell_height + cell_height / 2;
+		}
+
+		public void GetCellSize (int cell_num, out int w, out int h)
+		{
+			// Trivial for now.
+			w = cell_width;
+			h = cell_height;
+		}
+
+
+		// Private utility methods.
+		public void SelectAllCells ()
+		{
+			selection.Add (0, collection.Count - 1);
+		}
+
+		// Layout and drawing.
+
+		// FIXME I can't find a c# wrapper for the C PANGO_PIXELS () macro
+		// So this Function is for that.
+		protected static int PangoPixels (int val)
+		{
+			return val >= 0 ? (val + 1024 / 2) / 1024 :
+				(val - 1024 / 2) / 1024;
+		}
+
+		protected virtual void UpdateLayout ()
+		{
+			UpdateLayout (Allocation);
+		}
+
+		protected virtual void UpdateLayout (Gdk.Rectangle allocation)
+		{
+			int available_width = allocation.Width - 2 * BORDER_SIZE;
+			int available_height = allocation.Height - 2 * BORDER_SIZE;
+			cell_width = ThumbnailWidth + 2 * cell_border_width;
+			cell_height = ThumbnailHeight + 2 * cell_border_width;
+			cells_per_row = Math.Max ((int) (available_width / cell_width), 1);
+			cell_width += (available_width - cells_per_row * cell_width) / cells_per_row;
+			cell_details = 0;
+
+			if (DisplayTags || DisplayDates || DisplayFilenames)
+				cell_details += tag_icon_vspacing;
+
+			if (DisplayTags)
+				cell_details += tag_icon_size;
+
+			if (DisplayDates && this.Style != null) {
+				Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
+						Pango.Language.FromString ("en_US"));
+				cell_details += PangoPixels (metrics.Ascent + metrics.Descent);
+			}
+
+			if (DisplayFilenames && this.Style != null) {
+				Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
+						Pango.Language.FromString ("en_US"));
+				cell_details += PangoPixels (metrics.Ascent + metrics.Descent);
+			}
+			cell_height += cell_details;
+
+			displayed_rows = (int)Math.Max (available_height / cell_height, 1);
+
+			int num_thumbnails;
+			if (collection != null)
+				num_thumbnails = collection.Count;
+			else
+				num_thumbnails = 0;
+
+			int num_rows = num_thumbnails / cells_per_row;
+			if (num_thumbnails % cells_per_row != 0)
+				num_rows ++;
+
+			int height = num_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);
+		}
+
+		void SetSize (int x, int y, int width, int height)
+		{
+			bool xchange = false;
+			bool ychange = false;
+
+			Hadjustment.Upper = System.Math.Max (Allocation.Width, width);
+			Vadjustment.Upper = System.Math.Max (Allocation.Height, height);
+
+			if (scroll) {
+				xchange = (int)(Hadjustment.Value) != x;
+				ychange = (int)(Vadjustment.Value) != y;
+				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 (scroll)
+				scroll = false;
+
+			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);
+			}
+		}
+
+		int ThrobExpansion (int cell, bool selected)
+		{
+			int expansion = 0;
+			if (cell == throb_cell) {
+				double t = throb_state / (double) (throb_state_max - 1);
+				double s;
+				if (selected)
+					s = Math.Cos (-2 * Math.PI * t);
+				else
+					s = 1 - Math.Cos (-2 * Math.PI * t);
+
+				expansion = (int) (SELECTION_THICKNESS * s);
+			} else if (selected) {
+				expansion = SELECTION_THICKNESS;
+			}
+
+			return expansion;
+		}
+
+		// rectangle of dragging selection
+		private Rectangle rect_select;
+
+		System.Collections.Hashtable date_layouts = new Hashtable ();
+		// FIXME Cache the GCs?
+		private void DrawCell (int thumbnail_num, Gdk.Rectangle area)
+		{
+			Gdk.Rectangle bounds = CellBounds (thumbnail_num);
+
+			if (!bounds.Intersect (area, out area))
+				return;
+
+			IBrowsableItem photo = collection [thumbnail_num];
+
+			FSpot.PixbufCache.CacheEntry entry = cache.Lookup (photo.DefaultVersion.Uri);
+			if (entry == null)
+				cache.Request (photo.DefaultVersion.Uri, thumbnail_num, ThumbnailWidth, ThumbnailHeight);
+			else
+				entry.Data = thumbnail_num;
+
+			bool selected = selection.Contains (thumbnail_num);
+			StateType cell_state = selected ? (HasFocus ? StateType.Selected : StateType.Active) : State;
+
+			if (cell_state != State)
+				Style.PaintBox (Style, BinWindow, cell_state,
+					ShadowType.Out, area, this, "IconView",
+					bounds.X, bounds.Y,
+					bounds.Width - 1, bounds.Height - 1);
+
+			Gdk.Rectangle focus = Gdk.Rectangle.Inflate (bounds, -3, -3);
+
+			if (HasFocus && thumbnail_num == FocusCell) {
+				Style.PaintFocus(Style, BinWindow,
+						cell_state, area,
+						this, null,
+						focus.X, focus.Y,
+						focus.Width, focus.Height);
+			}
+
+			Gdk.Rectangle region = Gdk.Rectangle.Zero;
+			Gdk.Rectangle image_bounds = Gdk.Rectangle.Inflate (bounds, -cell_border_width, -cell_border_width);
+			int expansion = ThrobExpansion (thumbnail_num, selected);
+
+			Gdk.Pixbuf thumbnail = null;
+			if (entry != null)
+				thumbnail = entry.ShallowCopyPixbuf ();
+
+			Gdk.Rectangle draw = Gdk.Rectangle.Zero;
+			if (Gdk.Rectangle.Inflate (image_bounds, expansion + 1, expansion + 1).Intersect (area, out image_bounds) && thumbnail != null) {
+
+				PixbufUtils.Fit (thumbnail, ThumbnailWidth, ThumbnailHeight,
+						true, out region.Width, out region.Height);
+
+				region.X = (int) (bounds.X + (bounds.Width - region.Width) / 2);
+				region.Y = (int) bounds.Y + ThumbnailHeight - region.Height + cell_border_width;
+
+				if (Math.Abs (region.Width - thumbnail.Width) > 1
+					&& Math.Abs (region.Height - thumbnail.Height) > 1)
+				cache.Reload (entry, thumbnail_num, thumbnail.Width, thumbnail.Height);
+
+				region = Gdk.Rectangle.Inflate (region, expansion, expansion);
+				Pixbuf temp_thumbnail;
+				region.Width = System.Math.Max (1, region.Width);
+				region.Height = System.Math.Max (1, region.Height);
+
+				if (Math.Abs (region.Width - thumbnail.Width) > 1
+					&& Math.Abs (region.Height - thumbnail.Height) > 1) {
+					if (region.Width < thumbnail.Width && region.Height < thumbnail.Height) {
+						/*
+						temp_thumbnail = PixbufUtils.ScaleDown (thumbnail,
+								region.Width, region.Height);
+						*/
+						temp_thumbnail = thumbnail.ScaleSimple (region.Width, region.Height,
+								InterpType.Bilinear);
+
+
+						lock (entry) {
+							if (entry.Reload && expansion == 0 && !entry.IsDisposed) {
+								entry.SetPixbufExtended (temp_thumbnail.ShallowCopy (), false);
+								entry.Reload = true;
+							}
+						}
+					} else {
+						temp_thumbnail = thumbnail.ScaleSimple (region.Width, region.Height,
+								InterpType.Bilinear);
+					}
+				} else
+					temp_thumbnail = thumbnail;
+
+				// FIXME There seems to be a rounding issue between the
+				// scaled thumbnail sizes, we avoid this for now by using
+				// the actual thumnail sizes here.
+				region.Width = temp_thumbnail.Width;
+				region.Height = temp_thumbnail.Height;
+
+				draw = Gdk.Rectangle.Inflate (region, 1, 1);
+
+				if (!temp_thumbnail.HasAlpha)
+					Style.PaintShadow (Style, BinWindow, cell_state,
+						ShadowType.Out, area, this,
+						"IconView",
+						draw.X, draw.Y,
+						draw.Width, draw.Height);
+
+				if (region.Intersect (area, out draw)) {
+					Cms.Profile screen_profile;
+					if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
+						Pixbuf t = temp_thumbnail.Copy ();
+						temp_thumbnail.Dispose ();
+						temp_thumbnail = t;
+						FSpot.ColorManagement.ApplyProfile (temp_thumbnail, screen_profile);
+					}
+					temp_thumbnail.RenderToDrawable (BinWindow, Style.WhiteGC,
+							draw.X - region.X,
+							draw.Y - region.Y,
+							draw.X, draw.Y,
+							draw.Width, draw.Height,
+							RgbDither.None,
+							draw.X, draw.Y);
+				}
+
+				if (temp_thumbnail != thumbnail) {
+					temp_thumbnail.Dispose ();
+				}
+
+			}
+
+			if (thumbnail != null) {
+				thumbnail.Dispose ();
+			}
+			if (DisplayRatings && photo.Rating > 0 && region.X == draw.X && region.X != 0) {
+				FSpot.Widgets.RatingSmall rating;
+				rating = new FSpot.Widgets.RatingSmall ((int) photo.Rating, false);
+				rating.DisplayPixbuf.RenderToDrawable (BinWindow, Style.WhiteGC,
+						0, 0, region.X, region.Y, -1, -1, RgbDither.None, 0, 0);
+
+			}
+			Gdk.Rectangle layout_bounds = Gdk.Rectangle.Zero;
+			if (DisplayDates) {
+				string date;
+				try {
+					if (cell_width > 200) {
+						date = photo.Time.ToString ();
+					} else {
+						date = photo.Time.ToShortDateString ();
+					}
+				} catch (Exception) {
+					date = String.Empty;
+				}
+
+				Pango.Layout layout = (Pango.Layout)date_layouts [date];
+				if (layout == null) {
+					layout = new Pango.Layout (this.PangoContext);
+					layout.SetText (date);
+					date_layouts [date] = layout;
+				}
+
+				layout.GetPixelSize (out layout_bounds.Width, out layout_bounds.Height);
+
+				layout_bounds.Y = bounds.Y + bounds.Height -
+					cell_border_width - layout_bounds.Height + tag_icon_vspacing;
+				layout_bounds.X = bounds.X + (bounds.Width - layout_bounds.Width) / 2;
+
+				if (DisplayTags)
+					layout_bounds.Y -= tag_icon_size;
+
+				if (DisplayFilenames) {
+					Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
+							Pango.Language.FromString ("en_US"));
+					layout_bounds.Y -= PangoPixels (metrics.Ascent + metrics.Descent);
+				}
+
+				if (layout_bounds.Intersect (area, out region)) {
+					Style.PaintLayout (Style, BinWindow, cell_state,
+							true, area, this, "IconView",
+							layout_bounds.X, layout_bounds.Y,
+							layout);
+				}
+			}
+
+			if (DisplayFilenames) {
+
+				string filename = System.IO.Path.GetFileName (photo.DefaultVersion.Uri.LocalPath);
+				Pango.Layout layout = new Pango.Layout (this.PangoContext);
+				layout.SetText (filename);
+
+				layout.GetPixelSize (out layout_bounds.Width, out layout_bounds.Height);
+
+				layout_bounds.Y = bounds.Y + bounds.Height - cell_border_width - layout_bounds.Height + tag_icon_vspacing;
+				layout_bounds.X = bounds.X + (bounds.Width - layout_bounds.Width) / 2;
+
+				if (DisplayTags)
+					layout_bounds.Y -= tag_icon_size;
+
+				if (layout_bounds.Intersect (area, out region)) {
+					Style.PaintLayout (Style, BinWindow, cell_state,
+							true, area, this, "IconView",
+							layout_bounds.X, layout_bounds.Y,
+							layout);
+				}
+
+			}
+
+			if (DisplayTags) {
+				Tag [] tags = photo.Tags;
+				Gdk.Rectangle tag_bounds;
+
+				tag_bounds.X = bounds.X + (bounds.Width  + tag_icon_hspacing - tags.Length * (tag_icon_size + tag_icon_hspacing)) / 2;
+				tag_bounds.Y = bounds.Y + bounds.Height - cell_border_width - tag_icon_size + tag_icon_vspacing;
+				tag_bounds.Width = tag_icon_size;
+				tag_bounds.Height = tag_icon_size;
+
+				foreach (Tag t in tags) {
+					if (t == null)
+						continue;
+
+					Pixbuf icon = t.Icon;
+
+					Tag tag_iter = t.Category;
+					while (icon == null && tag_iter != App.Instance.Database.Tags.RootCategory && tag_iter != null) {
+						icon = tag_iter.Icon;
+						tag_iter = tag_iter.Category;
+					}
+
+					if (icon == null)
+						continue;
+
+					if (tag_bounds.Intersect (area, out region)) {
+						Pixbuf scaled_icon;
+						if (icon.Width == tag_bounds.Width) {
+							scaled_icon = icon;
+						} else {
+							scaled_icon = icon.ScaleSimple (tag_bounds.Width,
+									tag_bounds.Height,
+									InterpType.Bilinear);
+						}
+
+						Cms.Profile screen_profile;
+						if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile))
+							FSpot.ColorManagement.ApplyProfile (scaled_icon, screen_profile);
+
+						scaled_icon.RenderToDrawable (BinWindow, Style.WhiteGC,
+								region.X - tag_bounds.X,
+								region.Y - tag_bounds.Y,
+								region.X, region.Y,
+								region.Width, region.Height,
+								RgbDither.None, region.X, region.Y);
+						if (scaled_icon != icon) {
+							scaled_icon.Dispose ();
+						}
+					}
+					tag_bounds.X += tag_bounds.Width + tag_icon_hspacing;
+				}
+			}
+
+		}
+
+		private void DrawAllCells (Gdk.Rectangle area)
+		{
+			if (cell_width == 0 || cell_height == 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 start_cell_x, cell_y;
+			GetCellPosition (start_cell_num, out start_cell_x, out cell_y);
+
+			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 num_rows = end_cell_row - start_cell_row + 1;
+			int num_cols = Math.Min (end_cell_column - start_cell_column + 1,
+					cells_per_row - start_cell_column);
+
+			int i, cell_num;
+			//Preload (area, false);
+
+			if (collection == null)
+				return;
+
+			for (i = 0, cell_num = start_cell_num;
+			     i < num_rows && cell_num < collection.Count;
+			     i ++) {
+				int cell_x = start_cell_x;
+
+				//Log.Debug ("Drawing row {0}", start_cell_row + i);
+				for (int j = 0; j < num_cols && cell_num + j < collection.Count; j ++) {
+					DrawCell (cell_num + j, area);
+					cell_x += cell_width;
+				}
+
+				cell_y += cell_height;
+				cell_num += cells_per_row;
+			}
+
+			// draw dragging selection
+			if (isRectSelection) {
+				Gdk.Rectangle inter;
+				if (area.Intersect (rect_select, out inter)) {
+					Cairo.Context cairo_g = CairoHelper.Create (BinWindow);
+					Gdk.Color col = Style.Background(StateType.Selected);
+					cairo_g.Color = new Cairo.Color (col.Red/65535.0, col.Green/65535.0, col.Blue/65535.0, 0.5);
+					cairo_g.Rectangle (inter.X, inter.Y, inter.Width, inter.Height);
+					cairo_g.Fill ();
+
+					((IDisposable) cairo_g.Target).Dispose ();
+					((IDisposable) cairo_g).Dispose ();
+				}
+			}
+
+		}
+
+		private void GetCellPosition (int cell_num, out int x, out int y)
+		{
+			if (cells_per_row == 0) {
+				x = 0;
+				y = 0;
+				return;
+			}
+
+			int row = cell_num / cells_per_row;
+			int col = cell_num % cells_per_row;
+
+			x = col * cell_width + BORDER_SIZE;
+			y = row * cell_height + BORDER_SIZE;
+		}
+
+
+		// Scrolling.  We do this in an idle loop so we can catch up if the user scrolls quickly.
+
+		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;
+
+			IBrowsableItem photo;
+			FSpot.PixbufCache.CacheEntry entry;
+
+			// Preload the cache with images aroud the expose area
+			// FIXME the preload need to be tuned to the Cache size but this is a resonable start
+
+			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 > collection.Count - len) {
+				ecell = collection.Count;
+				scell = System.Math.Max (0, scell - len);
+			} else
+				ecell = scell + len;
+
+			int mid = (ecell - scell) / 2;
+			for (i = 0; i < mid; i++)
+				{
+				int cell = back ? ecell - i - 1 : scell + mid + i;
+
+				photo = collection [cell];
+
+				entry = cache.Lookup (photo.DefaultVersion.Uri);
+				if (entry == null)
+					cache.Request (photo.DefaultVersion.Uri, cell, ThumbnailWidth, ThumbnailHeight);
+
+				cell = back ? scell + i : scell + mid - i - 1;
+				photo = collection [cell];
+
+				entry = cache.Lookup (photo.DefaultVersion.Uri);
+				if (entry == null)
+					cache.Request (photo.DefaultVersion.Uri, cell, ThumbnailWidth, ThumbnailHeight);
+			}
+		}
+
+		//
+		// The throb interface
+		//
+		private uint throb_timer_id;
+		private int throb_cell = -1;
+		private int throb_state;
+		private const int throb_state_max = 40;
+		public void Throb (int cell_num)
+		{
+			throb_state = 0;
+			throb_cell = cell_num;
+			if (throb_timer_id == 0)
+				throb_timer_id = GLib.Timeout.Add ((39000/throb_state_max)/100,
+					new GLib.TimeoutHandler (HandleThrobTimer));
+
+			InvalidateCell (cell_num);
+		}
+
+		private void CancelThrob ()
+		{
+			if (throb_timer_id != 0)
+				GLib.Source.Remove (throb_timer_id);
+		}
+
+		private bool HandleThrobTimer ()
+		{
+			InvalidateCell (throb_cell);
+			if (throb_state++ < throb_state_max) {
+				return true;
+			} else {
+				throb_cell = -1;
+				throb_timer_id = 0;
+				return false;
+			}
+		}
+
+		public void ScrollTo (int cell_num)
+		{
+			ScrollTo (cell_num, true);
+		}
+
+		public void ScrollTo (int cell_num, bool center)
+		{
+			if (!IsRealized)
+				return;
+
+			Adjustment adjustment = Vadjustment;
+			int x;
+			int y;
+
+			GetCellPosition (cell_num, out x, out y);
+
+			if (y + cell_height > adjustment.Upper)
+				UpdateLayout ();
+
+			if (center)
+				adjustment.Value = y + cell_height / 2 - adjustment.PageSize / 2;
+			else
+				adjustment.Value = y;
+
+			adjustment.ChangeValue ();
+
+		}
+
+		public void ZoomIn ()
+		{
+			ThumbnailWidth = (int) (ThumbnailWidth * ZOOM_FACTOR);
+		}
+
+		public void ZoomOut ()
+		{
+			ThumbnailWidth = (int) (ThumbnailWidth / ZOOM_FACTOR);
+		}
+
+		// Event handlers.
+
+		[GLib.ConnectBefore]
+		private void HandleAdjustmentValueChanged (object sender, EventArgs args)
+		{
+			Scroll ();
+		}
+
+		private void HandlePixbufLoaded (FSpot.PixbufCache cache, FSpot.PixbufCache.CacheEntry entry)
+		{
+			Gdk.Pixbuf result = entry.ShallowCopyPixbuf ();
+			int order = (int) entry.Data;
+
+			if (result == null)
+				return;
+
+			// We have to do the scaling here rather than on load because we need to preserve the
+			// Pixbuf option iformation to verify the thumbnail validity later
+			int width, height;
+			PixbufUtils.Fit (result, ThumbnailWidth, ThumbnailHeight, false, out width, out height);
+			if (result.Width > width && result.Height > height) {
+				//  Log.Debug ("scaling");
+				Gdk.Pixbuf temp = PixbufUtils.ScaleDown (result, width, height);
+				result.Dispose ();
+				result = temp;
+			} else if (result.Width < ThumbnailWidth && result.Height < ThumbnailHeight) {
+				// FIXME this is a workaround to handle images whose actual size is smaller than
+				// the thumbnail size, it needs to be fixed at a different level.
+				Gdk.Pixbuf temp = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, ThumbnailWidth, ThumbnailHeight);
+				temp.Fill (0x00000000);
+				result.CopyArea (0, 0,
+						result.Width, result.Height,
+						temp,
+						(temp.Width - result.Width)/ 2,
+						temp.Height - result.Height);
+
+				result.Dispose ();
+				result = temp;
+			}
+
+			cache.Update (entry, result);
+			InvalidateCell (order);
+		}
+
+		public Gdk.Rectangle CellBounds (int cell)
+		{
+			Rectangle bounds;
+			GetCellPosition (cell, out bounds.X, out bounds.Y);
+			bounds.Width = cell_width;
+			bounds.Height = cell_height;
+			return bounds;
+		}
+
+		public void InvalidateCell (int order)
+		{
+			Rectangle cell_area = CellBounds (order);
+			// 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);
+
+			if (BinWindow != null && cell_area.Intersect (visible, out cell_area))
+				BinWindow.InvalidateRect (cell_area, false);
+		}
+
+		private void HandleScrollAdjustmentsSet (object sender, ScrollAdjustmentsSetArgs args)
+		{
+			if (args.Vadjustment != null)
+				args.Vadjustment.ValueChanged += new EventHandler (HandleAdjustmentValueChanged);
+		}
+
+		private void HandleScrollEvent(object sender, ScrollEventArgs args)
+		{
+			// Activated only by Control + ScrollWheelUp/ScrollWheelDown
+			if (ModifierType.ControlMask != (args.Event.State & ModifierType.ControlMask))
+				return;
+
+			if (args.Event.Direction == ScrollDirection.Up) {
+				ZoomIn ();
+				// stop event from propagating.
+				args.RetVal = true;
+			} else if (args.Event.Direction == ScrollDirection.Down ) {
+				ZoomOut ();
+				args.RetVal = true;
+			}
+		}
+
+		private void SetColors ()
+		{
+			if (IsRealized) {
+				BinWindow.Background = Style.DarkColors [(int)State];
+			}
+		}
+
+		protected override void OnRealized ()
+		{
+			base.OnRealized ();
+			SetColors ();
+		}
+
+		protected override void OnStateChanged (StateType previous)
+		{
+			base.OnStateChanged (previous);
+			SetColors ();
+		}
+
+		protected override void OnStyleSet (Style previous)
+		{
+			base.OnStyleSet (previous);
+			SetColors ();
+		}
+
+		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 bool OnExposeEvent (Gdk.EventExpose args)
+		{
+			foreach (Rectangle area in args.Region.GetRectangles ()) {
+				DrawAllCells (area);
+			}
+			return base.OnExposeEvent (args);
+		}
+
+
+		private bool isRectSelection = false;
+		private bool isDragDrop = false;
+
+		// initial click and scroll value
+		private int start_select_x, start_select_y, start_select_vadj, start_select_hadj;
+		// 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;
+		// initial click
+	        private int start_press_x, start_press_y;
+
+		// during pointer motion, select/toggle pictures between initial x/y (param)
+		// and current x/y (get pointer)
+		private void SelectMotion ()
+		{
+			int x2, y2;
+			Gdk.ModifierType mod;
+			Display.GetPointer (out x2, out y2, out mod);
+			GetPointer (out x2, out y2);
+
+			// check new coord
+			int x1 = start_select_x;
+			if (x1 < 0)
+				x1 = 0;
+			int y1 = start_select_y;
+			if (y1 < 0)
+				y1 = 0;
+			if (y1 > Allocation.Height)
+				y1 = (int) Allocation.Height;
+			x1 += start_select_hadj;
+			y1 += start_select_vadj;
+
+			if (x2 < 0)
+				x2 = 0;
+			if (y2 < 0)
+				y2 = 0;
+			if (y2 > Allocation.Height)
+				y2 = (int) Allocation.Height;
+			x2 += (int) Hadjustment.Value;
+			y2 += (int) Vadjustment.Value;
+
+			int start_x = x1 < x2 ? x1 : x2;
+			int end_x =   x1 > x2 ? x1 : x2;
+			int start_y = y1 < y2 ? y1 : y2;
+			int end_y =   y1 > y2 ? y1 : y2;
+
+			// Restore initial selection
+			BitArray initial_selection = selection.ToBitArray();
+			selection.Clear (false);
+			foreach (int i in start_select_selection)
+				selection.Add (i, false);
+
+			// Select or toggle according to modifiers
+			int start_row  = (start_x - BORDER_SIZE) / cell_width;
+			int start_line = (start_y - BORDER_SIZE) / cell_height;
+			int end_row    = (end_x - BORDER_SIZE + cell_width - 1) / cell_width;
+			int end_line   = (end_y - BORDER_SIZE + cell_height - 1) / cell_height;
+			if (start_row > cells_per_row)
+				start_row = cells_per_row;
+			if (end_row > cells_per_row)
+				end_row = cells_per_row;
+
+
+			FocusCell = start_line * cells_per_row + start_row;
+
+			if ((mod & ModifierType.ControlMask) == 0)
+				selection.SelectRect (start_row, end_row, start_line, end_line, cells_per_row);
+			else
+				selection.ToggleRect (start_row, end_row, start_line, end_line, cells_per_row);
+
+			// fire events for cells which have changed selection flag
+			BitArray new_selection = selection.ToBitArray();
+			BitArray selection_changed = initial_selection.Xor (new_selection);
+			System.Collections.Generic.List<int> changed = new System.Collections.Generic.List<int>();
+			for (int i = 0; i < selection_changed.Length; i++)
+				if (selection_changed.Get(i))
+					changed.Add (i);
+			if (selection_changed.Length != 0)
+				selection.SignalChange (changed.ToArray());
+
+			// redraw selection box
+			if (BinWindow != null) {
+				BinWindow.InvalidateRect (rect_select, true); // old selection
+				rect_select = new Rectangle (start_x, start_y, end_x - start_x, end_y - start_y);
+				BinWindow.InvalidateRect (rect_select, true); // new selection
+				BinWindow.ProcessUpdates (true);
+			}
+		}
+
+		// 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;
+			ModifierType new_mod;
+			Display.GetPointer (out new_x, out new_y, out new_mod);
+			GetPointer (out new_x, out new_y);
+
+			// do scroll
+			double newVadj = Vadjustment.Value;
+			if (deltaVscroll < 130)
+				deltaVscroll += 15;
+
+			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;
+			Vadjustment.ChangeValue();
+
+			// do again selection after scroll
+			SelectMotion ();
+
+			// stop firing timeout when no button pressed
+			return (new_mod & (ModifierType.Button1Mask | ModifierType.Button3Mask)) != 0;
+		}
+
+		private void HandleSelectMotionNotify (object sender, MotionNotifyEventArgs args)
+		{
+			if ((args.Event.State & (ModifierType.Button1Mask | ModifierType.Button3Mask)) != 0 ) {
+				if (Gtk.Drag.CheckThreshold (this, start_press_x, start_press_y,
+							     (int) args.Event.X, (int) args.Event.Y))
+					if (isRectSelection) {
+						// scroll if out of window
+						double d_x, d_y;
+						deltaVscroll = 30;
+						if (EventHelper.GetCoords (args.Event, 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;
+						}
+
+						// handle selection
+						SelectMotion ();
+					} else  {
+						int cell_num = CellAtPosition (start_press_x, start_press_y, false, false);
+						if (selection.Contains (cell_num)) {
+							// on a selected cell : do drag&drop
+							isDragDrop = true;
+							if (StartDrag != null) {
+								uint but;
+								if ((args.Event.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;
+							start_select_hadj = (int) Hadjustment.Value;
+							start_select_vadj = (int) Vadjustment.Value;
+							start_select_x = start_press_x - start_select_hadj;
+							start_select_y = start_press_y - start_select_vadj;
+
+							// ctrl : toggle selected, shift : keep selected
+							if ((args.Event.State & (ModifierType.ShiftMask | ModifierType.ControlMask)) == 0)
+								selection.Clear ();
+
+							start_select_selection = selection.Ids; // keep initial selection
+							// no rect draw at beginning
+							rect_select = new Rectangle ();
+
+							args.RetVal = false;
+						}
+					}
+			}
+		}
+
+		private void HandleButtonPressEvent (object obj, ButtonPressEventArgs args)
+		{
+			int cell_num = CellAtPosition ((int) args.Event.X, (int) args.Event.Y, false, false);
+
+			args.RetVal = true;
+
+			start_select_event = args.Event;
+			start_press_x = (int) args.Event.X;
+			start_press_y = (int) args.Event.Y;
+			isRectSelection = false;
+			isDragDrop = false;
+
+			switch (args.Event.Type) {
+			case EventType.TwoButtonPress:
+				if (args.Event.Button != 1 ||
+				    (args.Event.State &  (ModifierType.ControlMask | ModifierType.ShiftMask)) != 0)
+					return;
+				if (DoubleClicked != null)
+					DoubleClicked (this, new BrowsableEventArgs (cell_num, null));
+				return;
+
+			case EventType.ButtonPress:
+				GrabFocus ();
+				// on a cell : context menu if button 3
+				// cell selection is done on button release
+				if (args.Event.Button == 3){
+					ContextMenu (args, cell_num);
+					return;
+				} else args.RetVal = false;
+
+				break;
+
+			default:
+				args.RetVal = false;
+				break;
+			}
+		}
+
+		protected virtual void ContextMenu (ButtonPressEventArgs args, int cell_num)
+		{
+		}
+
+		private void HandleButtonReleaseEvent (object sender, ButtonReleaseEventArgs args)
+		{
+			if (isRectSelection) {
+				// remove scrolling and rectangular selection
+				if (scroll_timeout != 0) {
+					GLib.Source.Remove (scroll_timeout);
+					scroll_timeout = 0;
+				}
+				SelectMotion ();
+
+				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) args.Event.X, (int) args.Event.Y, false, true);
+				if (cell_num != -1) {
+					if ((args.Event.State & ModifierType.ControlMask) != 0) {
+						selection.ToggleCell (cell_num);
+					} else if ((args.Event.State & ModifierType.ShiftMask) != 0) {
+						selection.Add (FocusCell, cell_num);
+					} else {
+						selection.Clear ();
+						selection.Add (cell_num);
+					}
+					FocusCell = cell_num;
+				}
+			}
+			isDragDrop = false;
+		}
+
+		private void HandleKeyPressEvent (object sender, KeyPressEventArgs args)
+		{
+			int focus_old;
+			args.RetVal = true;
+			bool shift = ModifierType.ShiftMask == (args.Event.State & ModifierType.ShiftMask);
+			bool control = ModifierType.ControlMask == (args.Event.State & ModifierType.ControlMask);
+
+			focus_old = FocusCell;
+			switch (args.Event.Key) {
+			case Gdk.Key.Down:
+			case Gdk.Key.J:
+			case Gdk.Key.j:
+				FocusCell += cells_per_row;
+				break;
+			case Gdk.Key.Left:
+			case Gdk.Key.H:
+			case Gdk.Key.h:
+				if (control && shift)
+					FocusCell -= FocusCell % cells_per_row;
+				else
+					FocusCell--;
+				break;
+			case Gdk.Key.Right:
+			case Gdk.Key.L:
+			case Gdk.Key.l:
+				if (control && shift)
+					FocusCell += cells_per_row - (FocusCell % cells_per_row) - 1;
+				else
+					FocusCell++;
+				break;
+			case Gdk.Key.Up:
+			case Gdk.Key.K:
+			case Gdk.Key.k:
+				FocusCell -= cells_per_row;
+				break;
+			case Gdk.Key.Page_Up:
+				FocusCell -= cells_per_row * displayed_rows;
+				break;
+			case Gdk.Key.Page_Down:
+				FocusCell += cells_per_row * displayed_rows;
+				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:
+				args.RetVal = false;
+				return;
+			}
+
+			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);
+		}
+
+		private void HandleDestroyed (object sender, System.EventArgs args)
+		{
+			cache.OnPixbufLoaded -= HandlePixbufLoaded;
+			CancelThrob ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/ImageInfo.cs b/src/Clients/MainApp/FSpot.Widgets/ImageInfo.cs
new file mode 100644
index 0000000..5148294
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/ImageInfo.cs
@@ -0,0 +1,159 @@
+/*
+ * ImageInfo.cs
+ *
+ * Author
+ *   LarryEwing <lewing at novell.com
+ *
+ * See COPYING for license information
+ */
+using System;
+using Cairo;
+using Gdk;
+using Gtk;
+using FSpot.Utils;
+using FSpot.Imaging;
+using Hyena;
+
+namespace FSpot.Widgets {
+	public class ImageInfo : IDisposable {
+		public Surface Surface;
+		public Gdk.Rectangle Bounds;
+
+		public ImageInfo (SafeUri uri)
+		{
+				using (var img = ImageFile.Create (uri)) {
+					Pixbuf pixbuf = img.Load ();
+					SetPixbuf (pixbuf);
+					pixbuf.Dispose ();
+				}
+		}
+
+		public ImageInfo (Pixbuf pixbuf)
+		{
+			SetPixbuf (pixbuf);
+		}
+
+		public ImageInfo (ImageInfo info, Widget w) : this (info, w, w.Allocation)
+		{
+		}
+
+		public ImageInfo (ImageInfo info, Widget w, Gdk.Rectangle bounds)
+		{
+			Cairo.Surface similar = CairoUtils.CreateSurface (w.GdkWindow);
+			Bounds = bounds;
+			Surface = similar.CreateSimilar (Content.ColorAlpha, Bounds.Width, Bounds.Height);
+			Context ctx = new Context (Surface);
+
+			ctx.Matrix = info.Fill (Bounds);
+			Pattern p = new SurfacePattern (info.Surface);
+			ctx.Source = p;
+			ctx.Paint ();
+			((IDisposable)ctx).Dispose ();
+			p.Destroy ();
+		}
+
+		public ImageInfo (ImageInfo info, Gdk.Rectangle allocation)
+		{
+			Surface = info.Surface.CreateSimilar (Content.Color,
+							      allocation.Width,
+							      allocation.Height);
+
+			Context ctx = new Context (Surface);
+			Bounds = allocation;
+
+			ctx.Matrix = info.Fill (allocation);
+			Pattern p = new SurfacePattern (info.Surface);
+			ctx.Source = p;
+			ctx.Paint ();
+			((IDisposable)ctx).Dispose ();
+			p.Destroy ();
+		}
+
+		private void SetPixbuf (Pixbuf pixbuf)
+		{
+			Surface = MemorySurface.CreateSurface (pixbuf);
+			Bounds.Width = pixbuf.Width;
+			Bounds.Height = pixbuf.Height;
+		}
+
+		public Matrix Fill (Gdk.Rectangle viewport)
+		{
+			Matrix m = new Matrix ();
+			m.InitIdentity ();
+
+			double scale = Math.Max (viewport.Width / (double) Bounds.Width,
+						 viewport.Height / (double) Bounds.Height);
+
+			double x_offset = Math.Round (((viewport.Width  - Bounds.Width * scale) / 2.0));
+			double y_offset = Math.Round (((viewport.Height  - Bounds.Height * scale) / 2.0));
+
+			m.Translate (x_offset, y_offset);
+			m.Scale (scale, scale);
+			return m;
+		}
+
+		//
+		// this functions calculates the transformation needed to center and completely fill the
+		// viewport with the Surface at the given tilt
+		//
+		public Matrix Fill (Gdk.Rectangle viewport, double tilt)
+		{
+			if (tilt == 0.0)
+				return Fill (viewport);
+
+			Matrix m = new Matrix ();
+			m.InitIdentity ();
+
+			double len;
+			double orig_len;
+			if (Bounds.Width > Bounds.Height) {
+				len = viewport.Height;
+				orig_len = Bounds.Height;
+			} else {
+				len = viewport.Width;
+				orig_len = Bounds.Width;
+			}
+
+			double a = Math.Sqrt (viewport.Width * viewport.Width + viewport.Height * viewport.Height);
+			double alpha = Math.Acos (len / a);
+			double theta = alpha - Math.Abs (tilt);
+
+			double slen = a * Math.Cos (theta);
+
+			double scale = slen / orig_len;
+
+			double x_offset = (viewport.Width  - Bounds.Width * scale) / 2.0;
+			double y_offset = (viewport.Height  - Bounds.Height * scale) / 2.0;
+
+			m.Translate (x_offset, y_offset);
+			m.Scale (scale, scale);
+			m.Invert ();
+			m.Translate (viewport.Width * 0.5, viewport.Height * 0.5);
+			m.Rotate (tilt);
+			m.Translate (viewport.Width * -0.5, viewport.Height * -0.5);
+			m.Invert ();
+			return m;
+		}
+
+		public Matrix Fit (Gdk.Rectangle viewport)
+		{
+			Matrix m = new Matrix ();
+			m.InitIdentity ();
+
+			double scale = Math.Min (viewport.Width / (double) Bounds.Width,
+						 viewport.Height / (double) Bounds.Height);
+
+			double x_offset = (viewport.Width  - Bounds.Width * scale) / 2.0;
+			double y_offset = (viewport.Height  - Bounds.Height * scale) / 2.0;
+
+			m.Translate (x_offset, y_offset);
+			m.Scale (scale, scale);
+			return m;
+		}
+
+		public void Dispose ()
+		{
+			((IDisposable)Surface).Dispose ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/InfoBox.cs b/src/Clients/MainApp/FSpot.Widgets/InfoBox.cs
new file mode 100644
index 0000000..28e4114
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/InfoBox.cs
@@ -0,0 +1,944 @@
+/*
+ * FSpot.Widgets.InfoBox
+ *
+ * Author(s)
+ * 	Ettore Perazzoli
+ * 	Larry Ewing  <lewing at novell.com>
+ * 	Gabriel Burt
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *	Ruben Vermeersch <ruben at savanne.be>
+ *	Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+
+using Gtk;
+using System;
+using System.IO;
+using FSpot.Core;
+using FSpot.Imaging;
+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 {
+		Delay update_delay;
+
+		private IBrowsableItem [] photos = new IBrowsableItem [0];
+		public IBrowsableItem [] Photos {
+			set {
+				photos = value;
+				update_delay.Start ();
+			}
+			private get {
+				return photos;
+			}
+		}
+
+		public IBrowsableItem Photo {
+			set {
+				if (value != null) {
+					Photos = new IBrowsableItem [] { 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, IBrowsableItemVersion version);
+		public event VersionChangedHandler VersionChanged;
+
+		private Expander info_expander;
+		private Expander histogram_expander;
+
+		private Gtk.Image histogram_image;
+		private Histogram histogram;
+
+		private Delay 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 Label name_label;
+		private Label name_value_label;
+
+		private Label version_label;
+		private ListStore version_list;
+		private ComboBox version_combo;
+
+		private Label date_label;
+		private Label date_value_label;
+
+		private Label size_label;
+		private Label size_value_label;
+
+		private Label exposure_label;
+		private Label exposure_value_label;
+
+		private Label focal_length_label;
+		private Label focal_length_value_label;
+
+		private Label camera_label;
+		private Label camera_value_label;
+
+		private Label file_size_label;
+		private Label file_size_value_label;
+
+		private Label rating_label;
+		private RatingSmall rating_view;
+
+		private TagView tag_view;
+		private string default_exposure_string;
+
+		private bool show_name;
+		private bool show_date;
+		private bool show_size;
+		private bool show_exposure;
+		private bool show_focal_length;
+		private bool show_camera;
+		private bool show_file_size;
+
+		private void HandleRatingChanged (object o, EventArgs e)
+		{
+			App.Instance.Organizer.HandleRatingMenuSelected ((o as Widgets.Rating).Value);
+		}
+
+		private Label CreateRightAlignedLabel (string text)
+		{
+			Label label = new Label ();
+			label.UseMarkup = true;
+			label.Markup = text;
+			label.Xalign = 1;
+
+			return label;
+		}
+
+		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 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 += delegate (object sender, EventArgs e) {
+				ContextSwitchStrategy.SetInfoBoxVisible (Context, info_expander.Expanded);
+			};
+
+			Table info_table = new Table (10, 2, false);
+			info_table.BorderWidth = 0;
+
+			string name_pre = "<b>";
+			string name_post = "</b>";
+
+			name_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Name") + name_post);
+			info_table.Attach (name_label, 0, 1, 0, 1, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			version_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Version") + name_post);
+			info_table.Attach (version_label, 0, 1, 1, 2, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			date_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Date") + name_post + Environment.NewLine);
+			info_table.Attach (date_label, 0, 1, 2, 3, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			size_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Size") + name_post);
+			info_table.Attach (size_label, 0, 1, 3, 4, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			default_exposure_string = name_pre + Catalog.GetString ("Exposure") + name_post;
+			exposure_label = CreateRightAlignedLabel (default_exposure_string);
+			info_table.Attach (exposure_label, 0, 1, 4, 5, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			focal_length_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Focal Length") + name_post);
+			info_table.Attach (focal_length_label, 0, 1, 5, 6, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			camera_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Camera") + name_post);
+			info_table.Attach (camera_label, 0, 1, 6, 7, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			file_size_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("File Size") + name_post);
+			info_table.Attach (file_size_label, 0, 1, 7, 8, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			rating_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Rating") + name_post);
+			info_table.Attach (rating_label, 0, 1, 8, 9, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+			rating_label.Visible = false;
+
+			name_value_label = new Label ();
+			name_value_label.Ellipsize = Pango.EllipsizeMode.Middle;
+			name_value_label.Justify = Gtk.Justification.Left;
+			name_value_label.Selectable = true;
+			name_value_label.Xalign = 0;
+			name_value_label.PopulatePopup += HandlePopulatePopup;
+
+			info_table.Attach (name_value_label, 1, 2, 0, 1, AttachOptions.Fill | AttachOptions.Expand, AttachOptions.Fill, 3, 0);
+
+			date_value_label = AttachLabel (info_table, 2, name_value_label);
+			size_value_label = AttachLabel (info_table, 3, name_value_label);
+			exposure_value_label = AttachLabel (info_table, 4, name_value_label);
+
+			version_list = new ListStore (typeof (IBrowsableItemVersion), 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;
+			info_table.Attach (version_combo, 1, 2, 1, 2, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			date_value_label.Text = Environment.NewLine;
+			exposure_value_label.Text = Environment.NewLine;
+			focal_length_value_label = AttachLabel (info_table, 5, name_value_label);
+			camera_value_label = AttachLabel (info_table, 6, name_value_label);
+			file_size_value_label = AttachLabel (info_table, 7, name_value_label);
+
+			Gtk.Alignment rating_align = new Gtk.Alignment( 0, 0, 0, 0);
+			info_table.Attach (rating_align, 1, 2, 8, 9, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			rating_view = new RatingSmall ();
+			rating_view.Visible = false;
+			rating_view.Changed += HandleRatingChanged;
+			rating_align.Add (rating_view);
+
+			tag_view = new TagView ();
+			info_table.Attach (tag_view, 0, 2, 9, 10, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
+
+			info_table.ShowAll ();
+
+			EventBox eb = new EventBox ();
+			eb.Add (info_table);
+			info_expander.Add (eb);
+			eb.ButtonPressEvent += HandleButtonPressEvent;
+
+			Add (info_expander);
+			rating_label.Visible = show_rating;
+			rating_view.Visible = show_rating;
+		}
+
+        // FIXME: We should pull this info directly out of IBrowsableItem
+		private class ImageInfo {
+			int width;
+			int height;
+			double? fnumber;
+			double? exposure_time;
+			uint? iso_speed;
+			double? focal_length;
+			string camera_model;
+
+			public ImageInfo (IImageFile img)
+			{
+				if (img == null)
+					return;
+
+				using (var metadata = Metadata.Parse (img.Uri)) {
+					width = metadata.Properties.PhotoWidth;
+					height = metadata.Properties.PhotoHeight;
+					fnumber = metadata.ImageTag.FNumber;
+					exposure_time = metadata.ImageTag.ExposureTime;
+					iso_speed = metadata.ImageTag.ISOSpeedRatings;
+					focal_length = metadata.ImageTag.FocalLength;
+					camera_model = metadata.ImageTag.Model;
+				}
+			}
+
+			public string ExposureInfo {
+				get {
+					string info = String.Empty;
+
+					if (fnumber.HasValue && fnumber.Value != 0.0) {
+						try {
+							info += String.Format ("f/{0:.0} ", fnumber.Value);
+						} catch (FormatException) {
+							return Catalog.GetString("(wrong format)");
+						}
+					}
+
+					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);
+					}
+
+					if (info == String.Empty)
+						return Catalog.GetString ("(None)");
+
+					return info;
+				}
+			}
+
+			public string FocalLength {
+				get {
+					if (focal_length == null)
+						return Catalog.GetString ("(Unknown)");
+
+					return String.Format ("{0} mm", focal_length.Value);
+				}
+			}
+
+			public string CameraModel {
+				get {
+					if (camera_model != String.Empty)
+						return camera_model;
+					else
+						return Catalog.GetString ("(Unknown)");
+				}
+			}
+
+
+			public string Dimensions {
+				get {
+					if (width != 0 && height != 0)
+						return String.Format ("{0}x{1}", width, height);
+					else
+						return Catalog.GetString ("(Unknown)");
+				}
+			}
+		}
+
+
+		public bool Update ()
+		{
+			if (Photos == null || Photos.Length == 0) {
+				Hide ();
+			} else if (Photos.Length == 1) {
+				Show ();
+				UpdateSingle ();
+			} else if (Photos.Length > 1) {
+				Show ();
+				UpdateMultiple ();
+			}
+			return false;
+		}
+
+		private void UpdateSingle ()
+		{
+			ImageInfo info;
+
+			IBrowsableItem photo = Photos [0];
+
+			histogram_expander.Visible = true;
+			UpdateHistogram ();
+
+			if (show_name) {
+				name_value_label.Text = photo.Name != null ? photo.Name : String.Empty;
+			}
+			name_label.Visible = show_name;
+			name_value_label.Visible = show_name;
+
+			try {
+				using (var img = ImageFile.Create (photo.DefaultVersion.Uri))
+				{
+					info = new ImageInfo (img);
+				}
+			} catch (System.Exception e) {
+				Hyena.Log.Debug (e.StackTrace);
+				info = new ImageInfo (null);
+			}
+
+			if (show_exposure) {
+				exposure_value_label.Text = info.ExposureInfo;
+				if (exposure_value_label.Text.IndexOf (Environment.NewLine) != -1)
+					exposure_label.Markup = default_exposure_string + Environment.NewLine;
+				else
+					exposure_label.Markup = default_exposure_string;
+			}
+			exposure_label.Visible = show_exposure;
+			exposure_value_label.Visible = show_exposure;
+
+			if (show_size)
+				size_value_label.Text = info.Dimensions;
+			size_label.Visible = show_size;
+			size_value_label.Visible = show_size;
+
+			if (show_date) {
+				DateTime local_time = photo.Time;
+				date_value_label.Text = String.Format ("{0}{2}{1}",
+				                                       local_time.ToShortDateString (),
+				                                       local_time.ToShortTimeString (),
+				                                       Environment.NewLine
+				                                       );
+			}
+			date_label.Visible = show_date;
+			date_value_label.Visible = show_date;
+
+			if (show_focal_length)
+				focal_length_value_label.Text = info.FocalLength;
+			focal_length_label.Visible = show_focal_length;
+			focal_length_value_label.Visible = show_focal_length;
+
+			if (show_camera)
+				camera_value_label.Text = info.CameraModel;
+			camera_label.Visible = show_camera;
+			camera_value_label.Visible = show_camera;
+
+			version_label.Visible = true;
+			version_combo.Visible = true;
+			version_list.Clear ();
+			version_combo.Changed -= OnVersionComboChanged;
+
+			int count = 0;
+			foreach (IBrowsableItemVersion 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;
+
+			if (show_file_size) {
+				try {
+					GFile file = FileFactory.NewForUri (photo.DefaultVersion.Uri);
+					GFileInfo file_info = file.QueryInfo ("standard::size", FileQueryInfoFlags.None, null);
+					file_size_value_label.Text = Format.SizeForDisplay (file_info.Size);
+				} catch (GLib.GException e) {
+					file_size_value_label.Text = Catalog.GetString("(File read error)");
+					Hyena.Log.DebugException (e);
+				}
+			}
+
+			file_size_label.Visible = show_file_size;
+			file_size_value_label.Visible = show_file_size;
+
+			if (show_tags)
+				tag_view.Current = photo;
+			rating_label.Visible = show_rating;
+			rating_view.Visible = show_rating;
+			if (show_rating) {
+				rating_view.Value = (int) photo.Rating;
+			}
+
+			Show ();
+		}
+
+		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, (IBrowsableItemVersion)version_list.GetValue (iter, 0));
+		}
+
+		private void UpdateMultiple ()
+		{
+			histogram_expander.Visible = false;
+
+			name_label.Visible = false;
+			name_value_label.Text = String.Format(Catalog.GetString("{0} Photos"), Photos.Length);
+			name_value_label.Visible = true;
+
+			version_label.Visible = false;
+			version_combo.Visible = false;
+
+			exposure_label.Visible = false;
+			exposure_value_label.Visible = false;
+
+			focal_length_label.Visible = false;
+			focal_length_value_label.Visible = false;
+
+			camera_label.Visible = false;
+			camera_value_label.Visible = false;
+
+			if (show_date) {
+				IBrowsableItem first = Photos[Photos.Length-1];
+				IBrowsableItem last = Photos [0];
+				if (first.Time.Date == last.Time.Date) {
+					//Note for translators: {0} is a date, {1} and {2} are times.
+					date_value_label.Text = String.Format(Catalog.GetString("On {0} between \n{1} and {2}"),
+					                                      first.Time.ToShortDateString (),
+					                                      first.Time.ToShortTimeString (),
+					                                      last.Time.ToShortTimeString ());
+				} else {
+					date_value_label.Text = String.Format(Catalog.GetString("Between {0} \nand {1}"),
+					                                      first.Time.ToShortDateString (),
+					                                      last.Time.ToShortDateString ());
+				}
+			}
+			date_label.Visible = show_date;
+			date_value_label.Visible = show_date;
+
+			if (show_file_size) {
+				long file_size = 0;
+				foreach (IBrowsableItem photo in Photos) {
+
+					try {
+						GFile file = FileFactory.NewForUri (photo.DefaultVersion.Uri);
+						GFileInfo file_info = file.QueryInfo ("standard::size", FileQueryInfoFlags.None, null);
+						file_size += file_info.Size;
+					} catch (GLib.GException e) {
+						file_size = -1;
+						Hyena.Log.DebugException (e);
+						break;
+					}
+				}
+
+				if (file_size != -1)
+					file_size_value_label.Text = Format.SizeForDisplay (file_size);
+
+				else
+					file_size_value_label.Text = Catalog.GetString("(At least one File not found)");
+			}
+			file_size_label.Visible = show_file_size;
+			file_size_value_label.Visible = show_file_size;
+
+			size_label.Visible = false;
+			size_value_label.Visible = false;
+
+			rating_label.Visible = false;
+			rating_view.Visible = false;
+		}
+
+		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;
+
+			IBrowsableItem 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;
+
+			show_name = ContextSwitchStrategy.InfoBoxNameVisible (Context);
+			show_date = ContextSwitchStrategy.InfoBoxDateVisible (Context);
+			show_size = ContextSwitchStrategy.InfoBoxSizeVisible (Context);
+			show_exposure = ContextSwitchStrategy.InfoBoxExposureVisible (Context);
+			show_focal_length = ContextSwitchStrategy.InfoBoxFocalLengthVisible (Context);
+			show_camera = ContextSwitchStrategy.InfoBoxCameraVisible (Context);
+			show_file_size = ContextSwitchStrategy.InfoBoxFileSizeVisible (Context);
+
+			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) {
+
+			if (popup_menu.Children.Length > 0) {
+				GtkUtil.MakeMenuSeparator (popup_menu);
+			}
+
+			MenuItem item;
+
+			item = GtkUtil.MakeCheckMenuItem (popup_menu,
+			                                  Catalog.GetString ("Show Photo Name"),
+			                                  HandleMenuItemSelected,
+			                                  true,
+			                                  show_name,
+			                                  false);
+
+			item.SetData ("cb", name_label.Handle);
+
+			item = GtkUtil.MakeCheckMenuItem (popup_menu,
+			                           Catalog.GetString ("Show Date"),
+			                           HandleMenuItemSelected,
+			                           true,
+			                           show_date,
+			                           false);
+
+			item.SetData ("cb", date_label.Handle);
+
+			item = GtkUtil.MakeCheckMenuItem (popup_menu,
+			                           Catalog.GetString ("Show Size"),
+			                           HandleMenuItemSelected,
+			                           true,
+			                           show_size,
+			                           false);
+
+			item.SetData ("cb", size_label.Handle);
+
+			item = GtkUtil.MakeCheckMenuItem (popup_menu,
+			                           Catalog.GetString ("Show Exposure"),
+			                           HandleMenuItemSelected,
+			                           true,
+			                           show_exposure,
+			                           false);
+
+			item.SetData ("cb", exposure_label.Handle);
+
+			item = GtkUtil.MakeCheckMenuItem (popup_menu,
+			                           Catalog.GetString ("Show Focal Length"),
+			                           HandleMenuItemSelected,
+			                           true,
+			                           show_focal_length,
+			                           false);
+
+			item.SetData ("cb", focal_length_label.Handle);
+
+			item = GtkUtil.MakeCheckMenuItem (popup_menu,
+			                           Catalog.GetString ("Show Camera"),
+			                           HandleMenuItemSelected,
+			                           true,
+			                           show_camera,
+			                           false);
+
+			item.SetData ("cb", camera_label.Handle);
+
+			item = GtkUtil.MakeCheckMenuItem (popup_menu,
+			                           Catalog.GetString ("Show File Size"),
+			                           HandleMenuItemSelected,
+			                           true,
+			                           show_file_size,
+			                           false);
+
+			item.SetData ("cb", file_size_label.Handle);
+		}
+
+		private void HandleMenuItemSelected (object sender, EventArgs args)
+		{
+			IntPtr handle = (sender as CheckMenuItem).GetData ("cb");
+
+			if (handle == name_label.Handle) {
+				show_name = (sender as CheckMenuItem).Active;
+				ContextSwitchStrategy.SetInfoBoxNameVisible (Context, show_name);
+			} else if (handle == date_label.Handle) {
+				show_date = (sender as CheckMenuItem).Active;
+				ContextSwitchStrategy.SetInfoBoxDateVisible (Context, show_date);
+			} else if (handle == size_label.Handle) {
+				show_size = (sender as CheckMenuItem).Active;
+				ContextSwitchStrategy.SetInfoBoxSizeVisible (Context, show_size);
+			} else if (handle == exposure_label.Handle) {
+				show_exposure = (sender as CheckMenuItem).Active;
+				ContextSwitchStrategy.SetInfoBoxExposureVisible (Context, show_exposure);
+			} else if (handle == focal_length_label.Handle) {
+				show_focal_length = (sender as CheckMenuItem).Active;
+				ContextSwitchStrategy.SetInfoBoxFocalLengthVisible (Context, show_focal_length);
+			} else if (handle == camera_label.Handle) {
+				show_camera = (sender as CheckMenuItem).Active;
+				ContextSwitchStrategy.SetInfoBoxCameraVisible (Context, show_camera);
+			} else if (handle == file_size_label.Handle) {
+				show_file_size = (sender as CheckMenuItem).Active;
+				ContextSwitchStrategy.SetInfoBoxFileSizeVisible (Context, show_file_size);
+			}
+
+			update_delay.Start ();
+		}
+
+		// Constructor.
+
+		public InfoBox () : base (false, 0)
+		{
+			ContextSwitchStrategy = new MRUInfoBoxContextSwitchStrategy ();
+			ContextChanged += HandleContextChanged;
+
+			SetupWidgets ();
+
+			update_delay = new Delay (Update);
+			update_delay.Start ();
+
+			histogram_delay = new Delay (DelayedUpdateHistogram);
+
+			BorderWidth = 2;
+			Hide ();
+		}
+	}
+
+	// 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 InfoBoxNameVisible (ViewContext context);
+		public abstract bool InfoBoxDateVisible (ViewContext context);
+		public abstract bool InfoBoxSizeVisible (ViewContext context);
+		public abstract bool InfoBoxExposureVisible (ViewContext context);
+		public abstract bool InfoBoxFocalLengthVisible (ViewContext context);
+		public abstract bool InfoBoxCameraVisible (ViewContext context);
+		public abstract bool InfoBoxFileSizeVisible (ViewContext context);
+
+		public abstract void SetInfoBoxVisible (ViewContext context, bool visible);
+		public abstract void SetHistogramVisible (ViewContext context, bool visible);
+		public abstract void SetInfoBoxNameVisible (ViewContext context, bool visible);
+		public abstract void SetInfoBoxDateVisible (ViewContext context, bool visible);
+		public abstract void SetInfoBoxSizeVisible (ViewContext context, bool visible);
+		public abstract void SetInfoBoxExposureVisible (ViewContext context, bool visible);
+		public abstract void SetInfoBoxFocalLengthVisible (ViewContext context, bool visible);
+		public abstract void SetInfoBoxCameraVisible (ViewContext context, bool visible);
+		public abstract void SetInfoBoxFileSizeVisible (ViewContext context, 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 InfoBoxNameVisible (ViewContext context) {
+			return VisibilityForContext (context, "infobox", "name", true);
+		}
+
+		public override bool InfoBoxDateVisible (ViewContext context) {
+			return VisibilityForContext (context, "infobox", "date", true);
+		}
+
+		public override bool InfoBoxSizeVisible (ViewContext context) {
+			return VisibilityForContext (context, "infobox", "size", true);
+		}
+
+		public override bool InfoBoxExposureVisible (ViewContext context) {
+			return VisibilityForContext (context, "infobox", "exposure", true);
+		}
+
+		public override bool InfoBoxFocalLengthVisible (ViewContext context) {
+			return VisibilityForContext (context, "infobox", "focal_length", false);
+		}
+
+		public override bool InfoBoxCameraVisible (ViewContext context)  {
+			return VisibilityForContext (context, "infobox", "camera", false);
+		}
+
+		public override bool InfoBoxFileSizeVisible (ViewContext context) {
+			return VisibilityForContext (context, "infobox", "file_size", false);
+		}
+
+		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 SetInfoBoxNameVisible (ViewContext context, bool visible) {
+			SetVisibilityForContext (context, "infobox", "name", visible);
+		}
+
+		public override void SetInfoBoxDateVisible (ViewContext context, bool visible) {
+			SetVisibilityForContext (context, "infobox", "date", visible);
+		}
+
+		public override void SetInfoBoxSizeVisible (ViewContext context, bool visible) {
+			SetVisibilityForContext (context, "infobox", "size", visible);
+		}
+
+		public override void SetInfoBoxExposureVisible (ViewContext context, bool visible) {
+			SetVisibilityForContext (context, "infobox", "exposure", visible);
+		}
+
+		public override void SetInfoBoxFocalLengthVisible (ViewContext context, bool visible) {
+			SetVisibilityForContext (context, "infobox", "focal_length", visible);
+		}
+
+		public override void SetInfoBoxCameraVisible (ViewContext context, bool visible) {
+			SetVisibilityForContext (context, "infobox", "camera", visible);
+		}
+
+		public override void SetInfoBoxFileSizeVisible (ViewContext context, bool visible) {
+			SetVisibilityForContext (context, "infobox", "file_size", visible);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/Loupe.cs b/src/Clients/MainApp/FSpot.Widgets/Loupe.cs
new file mode 100644
index 0000000..c760b28
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/Loupe.cs
@@ -0,0 +1,511 @@
+//
+// FSpot.Widgets.Loupe.cs
+//
+// Author(s):
+//	Larry Ewing  <lewing at novell.com:
+//
+// Copyright (c) 2005-2009 Novell, Inc.
+//
+// This is free software. See COPYING for details.
+//
+using Cairo;
+
+using Gtk;
+using Gdk;
+using System;
+using System.Runtime.InteropServices;
+using Mono.Unix;
+using FSpot.Core;
+using FSpot.Utils;
+using Hyena;
+
+namespace FSpot.Widgets {
+	public class Loupe : Gtk.Window {
+		protected PhotoImageView view;
+		protected Gdk.Rectangle region;
+		bool use_shape_ext = false;
+		protected Gdk.Pixbuf source;
+		protected Gdk.Pixbuf overlay;
+		private int radius = 128;
+		private int inner = 128;
+		private int border = 6;
+		private double angle = Math.PI / 4;
+		Gdk.Point start;
+		Gdk.Point start_hot;
+		Gdk.Point hotspot;
+
+		public Loupe (PhotoImageView view) : base ("Loupe")
+		{
+			this.view = view;
+			Decorated = false;
+
+			Gtk.Window win = (Gtk.Window) view.Toplevel;
+
+			win.GetPosition (out old_win_pos.X, out old_win_pos.Y);
+			win.ConfigureEvent += HandleToplevelConfigure;
+
+			TransientFor = win;
+			DestroyWithParent = true;
+
+			BuildUI ();
+		}
+
+		Gdk.Point old_win_pos;
+		[GLib.ConnectBefore]
+		public void HandleToplevelConfigure (object o, ConfigureEventArgs args)
+		{
+			int x, y;
+			int loupe_x, loupe_y;
+
+			x = args.Event.X - old_win_pos.X;
+			y = args.Event.Y - old_win_pos.Y;
+
+			GetPosition (out loupe_x, out loupe_y);
+			Move (loupe_x + x, loupe_y + y);
+
+			old_win_pos.X = args.Event.X;
+			old_win_pos.Y = args.Event.Y;
+		}
+
+		// FIXME
+		//screen "composited-changed"
+
+		public int Radius {
+			get {
+				return radius;
+			}
+			set {
+				if (radius != value) {
+					radius = value;
+					UpdateSample ();
+				}
+			}
+		}
+
+		public int Border {
+			get {
+				return border;
+			}
+			set {
+				if (border != value) {
+					border = value;
+					UpdateSample ();
+				}
+			}
+		}
+
+		public double Angle {
+			get {
+				return angle;
+			}
+			set {
+				Gdk.Point then = hotspot;
+				angle = value;
+				Layout ();
+				Gdk.Point now = hotspot;
+				//System.Console.WriteLine ("{0} now {1}", then, now);
+				int x, y;
+				GdkWindow.GetOrigin (out x, out y);
+				//GdkWindow.MoveResize (x + then.X - now.X, y + then.Y - now.Y, Bounds.Width, Bounds.Height);
+				ShapeWindow ();
+				Move (x + then.X - now.X, y + then.Y - now.Y);
+				//QueueResize ();
+			}
+		}
+
+		protected override void OnSizeAllocated (Gdk.Rectangle allocation)
+		{
+			if (IsRealized)
+				ShapeWindow ();
+
+			base.OnSizeAllocated (allocation);
+		}
+
+		protected override void OnRealized ()
+		{
+			use_shape_ext = ! (CompositeUtils.IsComposited (Screen) && CompositeUtils.SetRgbaColormap (this));
+
+			base.OnRealized ();
+			ShapeWindow ();
+		}
+
+		void SetSamplePoint (Gdk.Point p)
+		{
+			region.X = p.X;
+			region.Y = p.Y;
+			region.Width = 2 * radius;
+			region.Height = 2 * radius;
+
+			if (view.Pixbuf != null) {
+				region.Offset (- Math.Min (region.X, Math.Max (region.Right - view.Pixbuf.Width, radius)),
+					       - Math.Min (region.Y, Math.Max (region.Bottom - view.Pixbuf.Height, radius)));
+
+				region.Intersect (new Gdk.Rectangle (0, 0, view.Pixbuf.Width, view.Pixbuf.Height));
+			}
+			UpdateSample ();
+		}
+
+		protected virtual void UpdateSample ()
+		{
+			if (source != null)
+				source.Dispose ();
+
+			source = null;
+
+			if (view.Pixbuf == null)
+				return;
+
+			int small = (int) (radius * view.Zoom);
+			if (small != inner) {
+				inner = small;
+				QueueResize ();
+			}
+
+			Pixbuf tmp = new Gdk.Pixbuf (view.Pixbuf,
+						 region.X, region.Y,
+						 region.Width, region.Height);
+			using (tmp)
+				source = FSpot.Utils.PixbufUtils.TransformOrientation (tmp, view.PixbufOrientation);
+
+			//FIXME sometimes that ctor returns results with a null
+			//handle this case ourselves
+			if (source.Handle == IntPtr.Zero)
+				source = null;
+
+			this.QueueDraw ();
+		}
+
+		[GLib.ConnectBefore]
+		private void HandleImageViewMotion (object sender, MotionNotifyEventArgs args)
+		{
+			Gdk.Point coords;
+			coords = new Gdk.Point ((int) args.Event.X, (int) args.Event.Y);
+
+			SetSamplePoint (view.WindowCoordsToImage (coords));
+		}
+
+		private void ShapeWindow ()
+		{
+			Layout ();
+			Gdk.Pixmap bitmap = new Gdk.Pixmap (GdkWindow,
+							    Allocation.Width,
+							    Allocation.Height, 1);
+
+			Context g = CairoHelper.Create (bitmap);
+			DrawShape (g, Allocation.Width, Allocation.Height);
+
+			((IDisposable)g).Dispose ();
+
+			if (use_shape_ext)
+				ShapeCombineMask (bitmap, 0, 0);
+			else {
+				Cairo.Context rgba = CairoHelper.Create (GdkWindow);
+				DrawShape (rgba, Allocation.Width, Allocation.Height);
+				((IDisposable)rgba).Dispose ();
+				try {
+					CompositeUtils.InputShapeCombineMask (this, bitmap, 0,0);
+				} catch (EntryPointNotFoundException) {
+					Log.Warning ("gtk+ version doesn't support input shapping");
+				}
+			}
+			bitmap.Dispose ();
+		}
+
+		Gdk.Point Center;
+	        Requisition Bounds;
+
+		public void Layout ()
+		{
+			double a = radius + border;
+			double b = inner + border;
+			double x_proj = (a + b - border) * Math.Cos (angle);
+			double y_proj = (a + b - border) * Math.Sin (angle);
+
+			Center.X = (int) Math.Ceiling (Math.Max (-x_proj + b, a));
+			Center.Y = (int) Math.Ceiling (Math.Max (-y_proj + b, a));
+
+			Bounds.Width = (int) Math.Ceiling (Math.Max (Math.Abs (x_proj) + b, a) + b + a);
+			Bounds.Height = (int) Math.Ceiling (Math.Max (Math.Abs (y_proj) + b, a) + b + a);
+
+			hotspot.X = (int) Math.Ceiling (Center.X + x_proj);
+			hotspot.Y = (int) Math.Ceiling (Center.Y + y_proj);
+		}
+
+		private void DrawShape (Context g, int width, int height)
+		{
+			int inner_x = radius + border + inner;
+			int cx = Center.X;
+			int cy = Center.Y;
+
+			g.Operator = Operator.Source;
+			g.Source = new SolidPattern (new Cairo.Color (0,0,0,0));
+			g.Rectangle (0, 0, width, height);
+			g.Paint ();
+
+			g.NewPath ();
+			g.Translate (cx, cy);
+			g.Rotate (angle);
+
+			g.Source = new SolidPattern (new Cairo.Color (0.2, 0.2, 0.2, .6));
+			g.Operator = Operator.Over;
+			g.Rectangle (0, - (border + inner), inner_x, 2 * (border + inner));
+			g.Arc (inner_x, 0, inner + border, 0, 2 * Math.PI);
+			g.Arc (0, 0, radius + border, 0, 2 * Math.PI);
+			g.Fill ();
+
+			g.Source = new SolidPattern (new Cairo.Color (0, 0, 0, 1.0));
+			g.Operator = Operator.DestOut;
+			g.Arc (inner_x, 0, inner, 0, 2 * Math.PI);
+#if true
+			g.Fill ();
+#else
+			g.FillPreserve ();
+
+			g.Operator = Operator.Over;
+			RadialGradient rg = new RadialGradient (inner_x - (inner * 0.3), inner * 0.3 , inner * 0.1, inner_x, 0, inner);
+			rg.AddColorStop (0, new Cairo.Color (0.0, 0.2, .8, 0.5));
+			rg.AddColorStop (0.7, new Cairo.Color (0.0, 0.2, .8, 0.1));
+			rg.AddColorStop (1.0, new Cairo.Color (0.0, 0.0, 0.0, 0.0));
+			g.Source = rg;
+			g.Fill ();
+			rg.Destroy ();
+#endif
+			g.Operator = Operator.Over;
+			g.Matrix = new Matrix ();
+			g.Translate (cx, cy);
+			if (source != null)
+			CairoHelper.SetSourcePixbuf (g, source, -source.Width / 2, -source.Height / 2);
+
+			g.Arc (0, 0, radius, 0, 2 * Math.PI);
+			g.Fill ();
+
+			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)
+		{
+			Context g = CairoHelper.Create (GdkWindow);
+
+			DrawShape (g, Allocation.Width, Allocation.Height);
+			//base.OnExposeEvent (args);
+			((IDisposable)g).Dispose ();
+			return false;
+
+		}
+
+		bool dragging = false;
+		bool rotate = false;
+		Delay drag;
+		Gdk.Point pos;
+		double start_angle = 0;
+		Gdk.Point root_pos;
+		Gdk.Point start_root;
+		Gdk.Cursor opened_hand_cursor = new Gdk.Cursor (Gdk.CursorType.Hand1);
+		Gdk.Cursor closed_hand_cursor = new Gdk.Cursor (Gdk.CursorType.Fleur);
+
+		private void HandleMotionNotifyEvent (object sender, MotionNotifyEventArgs args)
+		{
+		        pos.X = (int) args.Event.XRoot - start.X;
+		        pos.Y = (int) args.Event.YRoot - start.Y;
+
+			root_pos.X = (int) args.Event.XRoot;
+			root_pos.Y = (int) args.Event.YRoot;
+
+			if (dragging)
+				drag.Start ();
+		}
+
+		private bool DragUpdate ()
+		{
+			if (!dragging)
+				return false;
+
+			if (!rotate) {
+				return MoveWindow ();
+			} else {
+				Gdk.Point initial = start_root;
+				Gdk.Point hot = start_hot;
+				Gdk.Point win = Gdk.Point.Zero;
+
+				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;
+
+				Vector v1 = new Vector (initial);
+				Vector v2 = new Vector (now);
+
+				double angle = Vector.AngleBetween (v1, v2);
+
+				Angle = start_angle + angle;
+				return false;
+			}
+		}
+
+		private bool MoveWindow ()
+		{
+			Gdk.Point view_coords;
+			Gdk.Point top;
+			Gdk.Point current;
+
+			GdkWindow.GetOrigin (out current.X, out current.Y);
+
+			if (current == pos)
+				return false;
+
+			Move (pos.X, pos.Y);
+
+			pos.Offset (hotspot.X, hotspot.Y);
+			Gtk.Window toplevel = (Gtk.Window) view.Toplevel;
+			toplevel.GdkWindow.GetOrigin (out top.X, out top.Y);
+			toplevel.TranslateCoordinates (view,
+						       pos.X - top.X,  pos.Y - top.Y,
+						       out view_coords.X, out view_coords.Y);
+
+			SetSamplePoint (view.WindowCoordsToImage (view_coords));
+
+			return false;
+		}
+
+		private void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs args)
+		{
+			UpdateSample ();
+		}
+
+		private void HandleButtonPressEvent (object sender, ButtonPressEventArgs args)
+		{
+			switch (args.Event.Type) {
+			case Gdk.EventType.ButtonPress:
+				if (args.Event.Button == 1) {
+					start = new Gdk.Point ((int)args.Event.X, (int)args.Event.Y);
+					start_root = new Gdk.Point ((int)args.Event.XRoot, (int)args.Event.YRoot);
+					start_hot = hotspot;
+
+					Gdk.Point win;
+					GdkWindow.GetOrigin (out win.X, out win.Y);
+					start_hot.X += win.X;
+					start_hot.Y += win.Y;
+
+					dragging = true;
+					rotate = (args.Event.State & Gdk.ModifierType.ShiftMask) > 0;
+					start_angle = Angle;
+				} else {
+					Angle += Math.PI /8;
+				}
+				break;
+			case Gdk.EventType.TwoButtonPress:
+				dragging = false;
+				App.Instance.Organizer.HideLoupe ();
+				break;
+			}
+		}
+
+		private void HandleViewZoomChanged (object sender, System.EventArgs args)
+		{
+			UpdateSample ();
+		}
+
+		private void HandleButtonReleaseEvent (object sender, ButtonReleaseEventArgs args)
+		{
+			dragging = false;
+		}
+
+		private void HandleKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
+		{
+			switch (args.Event.Key) {
+			case Gdk.Key.v:
+				App.Instance.Organizer.HideLoupe ();
+				args.RetVal = true;
+				break;
+			default:
+				break;
+			}
+			return;
+		}
+
+		protected override void OnDestroyed ()
+		{
+			view.MotionNotifyEvent -= HandleImageViewMotion;
+			view.Item.Changed -= HandleItemChanged;
+			view.ZoomChanged -= HandleViewZoomChanged;
+
+			opened_hand_cursor.Dispose ();
+			closed_hand_cursor.Dispose ();
+			opened_hand_cursor = null;
+			closed_hand_cursor = null;
+
+			base.OnDestroyed ();
+		}
+
+		protected Widget SetFancyStyle (Widget widget)
+		{
+			//widget.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
+			//widget.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
+			return widget;
+		}
+
+		protected override void OnSizeRequested (ref Requisition requisition)
+		{
+			Layout ();
+			requisition = Bounds;
+		}
+
+		protected virtual void BuildUI ()
+		{
+			SetFancyStyle (this);
+
+			TransientFor = (Gtk.Window) view.Toplevel;
+			SkipPagerHint = true;
+			SkipTaskbarHint = true;
+
+			//view.MotionNotifyEvent += HandleImageViewMotion;
+			view.Item.Changed += HandleItemChanged;
+			view.ZoomChanged += HandleViewZoomChanged;
+
+			SetSamplePoint (Gdk.Point.Zero);
+
+			AddEvents ((int) (Gdk.EventMask.PointerMotionMask
+					  | Gdk.EventMask.ButtonPressMask
+					  | Gdk.EventMask.ButtonReleaseMask));
+
+			ButtonPressEvent += HandleButtonPressEvent;
+			ButtonReleaseEvent += HandleButtonReleaseEvent;
+			MotionNotifyEvent += HandleMotionNotifyEvent;
+			KeyPressEvent += HandleKeyPressEvent;
+
+			drag = new Delay (20, new GLib.IdleHandler (DragUpdate));
+
+			// Update the cursor appropriate to indicate dragability/dragging
+			bool inside = false, pressed = false;
+			EnterNotifyEvent += delegate {
+				inside = true;
+				if (!pressed)
+					GdkWindow.Cursor = opened_hand_cursor;
+			};
+			LeaveNotifyEvent += delegate {
+				inside = false;
+				if (!pressed)
+					GdkWindow.Cursor = null;
+			};
+			ButtonPressEvent += delegate {
+				pressed = true;
+				GdkWindow.Cursor = closed_hand_cursor;
+			};
+			ButtonReleaseEvent += delegate {
+				pressed = false;
+				GdkWindow.Cursor = inside ? opened_hand_cursor : null;
+			};
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs b/src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs
new file mode 100644
index 0000000..766585e
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/MetadataDisplay.cs
@@ -0,0 +1,431 @@
+/*
+ * Widgets.MetadataDisplay.cs
+ *
+ * Author(s)
+ * 	Mike Gemuende <mike at gemuende.de>
+ * 	Ruben Vermeersch <ruben at savanne.be>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.IO;
+using System.Text;
+using System.Collections.Generic;
+using Gtk;
+
+using Mono.Unix;
+
+using FSpot.Core;
+using FSpot.Extensions;
+using FSpot.Imaging;
+
+namespace FSpot.Widgets {
+	public class MetadataDisplayPage : SidebarPage {
+		public MetadataDisplayPage() : base(new MetadataDisplayWidget(),
+											Catalog.GetString ("Metadata"),
+											"gtk-info") {
+			(SidebarWidget as MetadataDisplayWidget).Page = this;
+		}
+
+		protected override void AddedToSidebar ()
+		{
+			MetadataDisplayWidget widget = SidebarWidget as MetadataDisplayWidget;
+			(Sidebar as Sidebar).SelectionChanged += widget.HandleSelectionChanged;
+			(Sidebar as Sidebar).SelectionItemsChanged += widget.HandleSelectionItemsChanged;
+		}
+	}
+
+	public class MetadataDisplayWidget : ScrolledWindow {
+		Delay update_delay;
+
+		/* 	This VBox only contains exif-data,
+			so it is seperated from other information */
+		VBox metadata_vbox;
+
+		VBox main_vbox;
+		Label metadata_message;
+		State display;
+
+		private MetadataDisplayPage page;
+		public MetadataDisplayPage Page {
+			set { page = value; }
+			get { return page; }
+		}
+
+		// stores list of the expanded expanders
+		List<string> open_list;
+
+		ListStore extended_metadata;
+
+		bool up_to_date = false;
+
+		enum State {
+			metadata,
+			message
+		};
+
+		public MetadataDisplayWidget ()
+		{
+			main_vbox = new VBox ();
+			main_vbox.Spacing = 6;
+
+			metadata_message = new Label (String.Empty);
+			metadata_message.UseMarkup = true;
+			metadata_message.LineWrap = true;
+			metadata_vbox = new VBox ();
+			metadata_vbox.Spacing = 6;
+
+			main_vbox.PackStart (metadata_vbox, false, false, 0);
+			AddWithViewport (metadata_message);
+			((Viewport) Child).ShadowType = ShadowType.None;
+			BorderWidth = 3;
+
+			display = State.message;
+			ExposeEvent += HandleExposeEvent;
+
+			open_list = new List<string> ();
+
+			// Create Expander and TreeView for
+			// extended metadata
+			TreeView tree_view = new TreeView ();
+			tree_view.HeadersVisible = false;
+			tree_view.RulesHint = true;
+
+			TreeViewColumn col = new TreeViewColumn ();
+			col.Sizing = TreeViewColumnSizing.Autosize;
+			CellRenderer colr = new CellRendererText ();
+			col.PackStart (colr, false);
+
+			col.AddAttribute (colr, "markup", 0);
+
+			tree_view.AppendColumn (col);
+
+			extended_metadata = new ListStore (typeof(string));
+			tree_view.Model = extended_metadata;
+
+			Expander expander = new Expander (String.Format("<span weight=\"bold\"><small>{0}</small></span>", Catalog.GetString ("Extended Metadata")));
+			expander.UseMarkup = true;
+			expander.Add (tree_view);
+			expander.Expanded = true;
+
+			main_vbox.PackStart (expander, false, false, 6);
+			expander.ShowAll ();
+
+			update_delay = new Delay (Update);
+			update_delay.Start ();
+		}
+
+		private IBrowsableItem photo;
+		public IBrowsableItem Photo {
+			get { return photo; }
+			set {
+				photo = value;
+
+				if (!Visible) {
+					up_to_date = false;
+				} else {
+					update_delay.Start ();
+				}
+			}
+		}
+
+		private void HandleExposeEvent (object sender, ExposeEventArgs args)
+		{
+			if (!up_to_date) {
+				update_delay.Start ();
+			}
+		}
+
+		internal void HandleSelectionChanged (IBrowsableCollection collection) {
+            // Don't show metadata when multiple photos are selected.
+			Photo = (collection != null && collection.Count == 1) ? collection [0] : null;
+		}
+
+		internal void HandleSelectionItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args) {
+			if (!args.Changes.MetadataChanged)
+				return;
+
+			if (!Visible) {
+				up_to_date = false;
+            } else {
+				update_delay.Start ();
+            }
+		}
+
+        private bool Visible {
+            get {
+                return (Page.Sidebar as Sidebar).IsActive (Page);
+            }
+        }
+
+		private ListStore AddExpander (string name, int pos)
+		{
+			TreeView tree_view = new TreeView ();
+			tree_view.HeadersVisible = false;
+			tree_view.RulesHint = true;
+
+			TreeViewColumn col = new TreeViewColumn ();
+			col.Sizing = TreeViewColumnSizing.Autosize;
+			CellRenderer colr = new CellRendererText ();
+			col.PackStart (colr, false);
+
+			col.AddAttribute (colr, "markup", 0);
+
+			tree_view.AppendColumn (col);
+
+			ListStore model = new ListStore (typeof(string));
+			tree_view.Model = model;
+
+			Expander expander = new Expander (String.Format ("<span weight=\"bold\"><small>{0}</small></span>", name));
+			expander.UseMarkup = true;
+			expander.Add (tree_view);
+			expander.Expanded = true;
+
+			metadata_vbox.PackStart (expander, false, false, 6);
+			metadata_vbox.ReorderChild (expander, pos);
+
+			if (open_list.Contains (name))
+				expander.Expanded = true;
+
+			expander.Activated += HandleExpanderActivated;
+
+			expander.ShowAll ();
+
+			return model;
+		}
+
+		public void HandleExpanderActivated (object sender, EventArgs e)
+		{
+			Expander expander = (Expander) sender;
+			if (expander.Expanded)
+				open_list.Add (expander.Label);
+			else
+				open_list.Remove (expander.Label);
+		}
+
+		private bool Update ()
+		{
+			bool empty = true;
+			int index_of_expander = 0;
+			bool missing = false;
+			System.Exception error = null;
+
+			/*
+            // FIXME: The stuff below needs to be ported to Taglib#.
+            TreeIter iter;
+			ListStore model;
+			string name;
+
+			up_to_date = true;
+
+			int i = 0;
+
+			// Write Exif-Data
+			if (exif_info != null) {
+				foreach (ExifContent content in exif_info.GetContents ()) {
+					ExifEntry [] entries = content.GetEntries ();
+
+					i++;
+
+					if (entries.Length < 1)
+						continue;
+
+					empty = false;
+
+					name = ExifUtil.GetIfdNameExtended ((Ifd)i - 1);
+
+					if (index_of_expander >= metadata_vbox.Children.Length)
+						model = AddExpander (name, index_of_expander);
+					else {
+						Expander expander = (Expander)metadata_vbox.Children[index_of_expander];
+						if (expander.Label == name)
+							model = (ListStore)((TreeView)expander.Child).Model;
+						else {
+							model = AddExpander (name, index_of_expander);
+						}
+					}
+
+					model.GetIterFirst(out iter);
+
+					foreach (ExifEntry entry in entries) {
+						string s;
+
+						if (entry.Title != null)
+							s = String.Format ("{0}\n\t<small>{1}</small>", entry.Title, entry.Value);
+						else
+							s = String.Format ("Unknown Tag ID={0}\n\t<small>{1}</small>", entry.Tag.ToString (), entry.Value);
+
+						if (model.IterIsValid(iter)) {
+							model.SetValue (iter, 0, s);
+							model.IterNext(ref iter);
+						} else
+							model.AppendValues (s);
+					}
+
+					// remove rows, that are not used
+					while (model.IterIsValid(iter)) {
+						model.Remove (ref iter);
+					}
+
+					index_of_expander++;
+				}
+			}
+
+
+			// Write Extended Metadata
+			if (photo != null) {
+				MetadataStore store = new MetadataStore ();
+				try {
+					using (var img = ImageFile.Create (photo.DefaultVersion.Uri)) {
+						if (img is SemWeb.StatementSource) {
+							StatementSource source = (StatementSource)img;
+							source.Select (store);
+						}
+					}
+				} catch (System.IO.FileNotFoundException) {
+					missing = true;
+				} catch (System.Exception e){
+					// Sometimes we don't get the right exception, check for the file
+					if (!System.IO.File.Exists (photo.DefaultVersion.Uri.LocalPath)) {
+						missing = true;
+					} else {
+						// if the file is there but we still got an exception display it.
+						error = e;
+					}
+				}
+
+				model = extended_metadata;
+				model.GetIterFirst(out iter);
+
+				if (store.StatementCount > 0) {
+					empty = false;
+
+
+					foreach (Statement stmt in store) {
+						// Skip anonymous subjects because they are
+						// probably part of a collection
+						if (stmt.Subject.Uri == null && store.SelectSubjects (null, stmt.Subject).Length > 0)
+							continue;
+
+						string title;
+						string value;
+						string s;
+
+						Description.GetDescription (store, stmt, out title, out value);
+
+						if (value == null)
+						{
+							MemoryStore substore = store.Select (new Statement ((Entity)stmt.Object, null, null, null)).Load();
+							StringBuilder collection = new StringBuilder ();
+							collection.Append (title);
+							WriteCollection (substore, collection);
+							if (model.IterIsValid(iter))
+							{
+								model.SetValue (iter, 0, collection.ToString ());
+								model.IterNext(ref iter);
+							} else
+								model.AppendValues (collection.ToString ());
+						} else {
+							s = String.Format ("{0}\n\t<small>{1}</small>", title, value);
+							if (model.IterIsValid(iter))
+							{
+								model.SetValue (iter, 0, s);
+								model.IterNext(ref iter);
+							} else
+								model.AppendValues (s);
+						}
+					}
+
+				} else {
+					// clear Extended Metadata
+					String s = String.Format ("<small>{0}</small>", Catalog.GetString ("No Extended Metadata Available"));
+					if (model.IterIsValid(iter))
+					{
+						model.SetValue (iter, 0, s);
+						model.IterNext(ref iter);
+					} else
+						model.AppendValues (s);
+				}
+
+				// remove rows, that are not used
+				while (model.IterIsValid(iter)) {
+					model.Remove (ref iter);
+				}
+			}*/
+
+			if (empty) {
+				string msg;
+				if (photo == null) {
+				     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");
+
+					if (error != null) {
+						msg = String.Format ("<i>{0}</i>", error);
+					}
+				}
+
+				metadata_message.Markup = "<span weight=\"bold\">" + msg + "</span>";
+
+				if (display == State.metadata) {
+					// Child is a Viewport, (AddWithViewport in ctor)
+					((Viewport)Child).Remove (main_vbox);
+					((Viewport)Child).Add (metadata_message);
+					display = State.message;
+					metadata_message.Show ();
+				}
+			} else {
+				// remove Expanders, that are not used
+				while (index_of_expander < metadata_vbox.Children.Length)
+					metadata_vbox.Remove (metadata_vbox.Children[index_of_expander]);
+
+				if (display == State.message) {
+					// Child is a Viewport, (AddWithViewport in ctor)
+					((Viewport)Child).Remove (metadata_message);
+					((Viewport)Child).Add (main_vbox);
+					display = State.metadata;
+					main_vbox.ShowAll ();
+				}
+			}
+
+			return false;
+		}
+
+        /*
+		private void WriteCollection (MemoryStore substore, StringBuilder collection)
+		{
+			string type = null;
+
+			foreach (Statement stmt in substore) {
+				if (stmt.Predicate.Uri == MetadataStore.Namespaces.Resolve ("rdf:type")) {
+					string prefix;
+					MetadataStore.Namespaces.Normalize (stmt.Object.Uri, out prefix, out type);
+				}
+			}
+
+			foreach (Statement sub in substore) {
+				if (sub.Object is SemWeb.Literal) {
+					string title;
+					string value = ((SemWeb.Literal)sub.Object).Value;
+
+					Description.GetDescription (substore, sub, out title, out value);
+
+					if (type == null)
+						collection.AppendFormat ("\n\t<small>{0}: {1}</small>", title, value);
+					else
+						collection.AppendFormat ("\n\t<small>{0}</small>", value);
+
+				} else {
+					if (type == null) {
+						MemoryStore substore2 = substore.Select (new Statement ((Entity)sub.Object, null, null, null)).Load();
+						if (substore.StatementCount > 0)
+							WriteCollection (substore2, collection);
+					}
+				}
+			}
+		}*/
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/PhotoImageView.cs b/src/Clients/MainApp/FSpot.Widgets/PhotoImageView.cs
new file mode 100644
index 0000000..9c4e34f
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/PhotoImageView.cs
@@ -0,0 +1,430 @@
+//
+// FSpot.Widgets.PhotoImageView.cs
+//
+// Copyright (c) 2004-2009 Novell, Inc.
+//
+// Author(s)
+//	Larry Ewing  <lewing at novell.com>
+//	Stephane Delcroix  <stephane at delcroix.org>
+//
+// This is free software. See COPYING for details.
+//
+
+using System;
+using FSpot.Core;
+using FSpot.Editors;
+using FSpot.Utils;
+using FSpot.Loaders;
+
+using Hyena;
+using Gdk;
+
+using TagLib.Image;
+
+namespace FSpot.Widgets {
+	public class PhotoImageView : ImageView {
+#region public API
+
+		protected PhotoImageView (IntPtr raw) : base (raw) { }
+
+		public PhotoImageView (IBrowsableCollection query) : this (new BrowsablePointer (query, -1))
+		{
+		}
+
+		public PhotoImageView (BrowsablePointer item) : base ()
+		{
+			Accelerometer.OrientationChanged += HandleOrientationChanged;
+			Preferences.SettingChanged += OnPreferencesChanged;
+
+			this.item = item;
+			item.Changed += HandlePhotoItemChanged;
+		}
+
+		public BrowsablePointer Item {
+			get { return item; }
+		}
+
+		public IBrowsableCollection Query {
+			get { return item.Collection; }
+		}
+
+		public Loupe Loupe {
+			get { return loupe; }
+		}
+
+		public Gdk.Pixbuf CompletePixbuf ()
+		{
+			//FIXME: this should be an async call
+			if (loader != null)
+				while (loader.Loading)
+					Gtk.Application.RunIteration ();
+			return this.Pixbuf;
+		}
+
+		public void Reload ()
+		{
+			if (Item == null || !Item.IsValid)
+				return;
+
+			HandlePhotoItemChanged (this, null);
+		}
+
+		// Zoom scaled between 0.0 and 1.0
+		public double NormalizedZoom {
+			get { return (Zoom - MIN_ZOOM) / (MAX_ZOOM - MIN_ZOOM); }
+			set { Zoom = (value * (MAX_ZOOM - MIN_ZOOM)) + MIN_ZOOM; }
+		}
+
+		public event EventHandler PhotoChanged;
+#endregion
+
+#region Gtk widgetry
+		protected override void OnStyleSet (Gtk.Style previous)
+		{
+			CheckPattern = new CheckPattern (this.Style.Backgrounds [(int)Gtk.StateType.Normal]);
+		}
+
+		protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
+		{
+			if ((evnt.State & (ModifierType.Mod1Mask | ModifierType.ControlMask)) != 0)
+				return base.OnKeyPressEvent (evnt);
+
+			bool handled = true;
+
+			// Scroll if image is zoomed in (scrollbars are visible)
+			Gtk.ScrolledWindow scrolled_w = this.Parent as Gtk.ScrolledWindow;
+			bool scrolled = scrolled_w != null && !this.Fit;
+
+			// Go to the next/previous photo when not zoomed (no scrollbars)
+			switch (evnt.Key) {
+			case Gdk.Key.Up:
+			case Gdk.Key.KP_Up:
+			case Gdk.Key.Left:
+			case Gdk.Key.KP_Left:
+			case Gdk.Key.h:
+			case Gdk.Key.H:
+			case Gdk.Key.k:
+			case Gdk.Key.K:
+				if (scrolled)
+					handled = false;
+				else
+					this.Item.MovePrevious ();
+				break;
+			case Gdk.Key.Page_Up:
+			case Gdk.Key.KP_Page_Up:
+			case Gdk.Key.BackSpace:
+			case Gdk.Key.b:
+			case Gdk.Key.B:
+				this.Item.MovePrevious ();
+				break;
+			case Gdk.Key.Down:
+			case Gdk.Key.KP_Down:
+			case Gdk.Key.Right:
+			case Gdk.Key.KP_Right:
+			case Gdk.Key.j:
+			case Gdk.Key.J:
+			case Gdk.Key.l:
+			case Gdk.Key.L:
+				if (scrolled)
+					handled = false;
+				else
+					this.Item.MoveNext ();
+				break;
+			case Gdk.Key.Page_Down:
+			case Gdk.Key.KP_Page_Down:
+			case Gdk.Key.space:
+			case Gdk.Key.KP_Space:
+			case Gdk.Key.n:
+			case Gdk.Key.N:
+				this.Item.MoveNext ();
+				break;
+			case Gdk.Key.Home:
+			case Gdk.Key.KP_Home:
+				this.Item.Index = 0;
+				break;
+			case Gdk.Key.r:
+			case Gdk.Key.R:
+				this.Item.Index = new Random().Next(0, this.Query.Count - 1);
+				break;
+			case Gdk.Key.End:
+			case Gdk.Key.KP_End:
+				this.Item.Index = this.Query.Count - 1;
+				break;
+			default:
+				handled = false;
+				break;
+			}
+
+			return handled || base.OnKeyPressEvent (evnt);
+		}
+
+		protected override void OnDestroyed ()
+		{
+			if (loader != null) {
+				loader.AreaUpdated -= HandlePixbufAreaUpdated;
+				loader.AreaPrepared -= HandlePixbufPrepared;
+				loader.Dispose ();
+			}
+			base.OnDestroyed ();
+		}
+#endregion
+
+#region loader
+		uint timer;
+		IImageLoader loader;
+		void Load (SafeUri uri)
+		{
+			timer = Log.DebugTimerStart ();
+			if (loader != null)
+				loader.Dispose ();
+
+			loader = ImageLoader.Create (uri);
+			loader.AreaPrepared += HandlePixbufPrepared;
+			loader.AreaUpdated += HandlePixbufAreaUpdated;
+			loader.Completed += HandleDone;
+			loader.Load (uri);
+		}
+
+		void HandlePixbufPrepared (object sender, AreaPreparedEventArgs args)
+		{
+			IImageLoader loader = sender as IImageLoader;
+			if (loader != this.loader)
+				return;
+
+			if (!ShowProgress)
+				return;
+
+			Gdk.Pixbuf prev = this.Pixbuf;
+			this.Pixbuf = loader.Pixbuf;
+			PixbufOrientation = Accelerometer.GetViewOrientation (loader.PixbufOrientation);
+			if (prev != null)
+				prev.Dispose ();
+
+			this.ZoomFit (args.ReducedResolution);
+		}
+
+		void HandlePixbufAreaUpdated (object sender, AreaUpdatedEventArgs args)
+		{
+			IImageLoader loader = sender as IImageLoader;
+			if (loader != this.loader)
+				return;
+
+			if (!ShowProgress)
+				return;
+
+			Gdk.Rectangle area = this.ImageCoordsToWindow (args.Area);
+			this.QueueDrawArea (area.X, area.Y, area.Width, area.Height);
+		}
+
+		void HandleDone (object sender, System.EventArgs args)
+		{
+			Log.DebugTimerPrint (timer, "Loading image took {0}");
+			IImageLoader loader = sender as IImageLoader;
+			if (loader != this.loader)
+				return;
+
+			Pixbuf prev = this.Pixbuf;
+			if (Pixbuf != loader.Pixbuf)
+				Pixbuf = loader.Pixbuf;
+
+			if (Pixbuf == null) {
+				// FIXME: Do we have test cases for this ???
+
+				// FIXME in some cases the image passes completely through the
+				// pixbuf loader without properly loading... I'm not sure what to do about this other
+				// than try to load the image one last time.
+				try {
+					Log.Warning ("Falling back to file loader");
+					Pixbuf = PhotoLoader.Load (item.Collection, item.Index);
+				} catch (Exception e) {
+					LoadErrorImage (e);
+				}
+			}
+
+			if (loader.Pixbuf != null) //FIXME: this test in case the photo was loaded with the direct loader
+				PixbufOrientation = Accelerometer.GetViewOrientation (loader.PixbufOrientation);
+			else
+				PixbufOrientation = ImageOrientation.TopLeft;
+
+			if (Pixbuf == null)
+				LoadErrorImage (null);
+			else
+				ZoomFit ();
+
+			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)
+		{
+			Reload ();
+		}
+
+		bool progressive_display = true;
+		bool ShowProgress {
+			get { return progressive_display; }
+		}
+
+		void LoadErrorImage (System.Exception e)
+		{
+			// FIXME we should check the exception type and do something
+			// like offer the user a chance to locate the moved file and
+			// update the db entry, but for now just set the error pixbuf
+			Pixbuf old = Pixbuf;
+			Pixbuf = new Pixbuf (PixbufUtils.ErrorPixbuf, 0, 0,
+					     PixbufUtils.ErrorPixbuf.Width,
+					     PixbufUtils.ErrorPixbuf.Height);
+			if (old != null)
+				old.Dispose ();
+
+			PixbufOrientation = ImageOrientation.TopLeft;
+			ZoomFit (false);
+		}
+
+		void HandlePhotoItemChanged (object sender, BrowsablePointerChangedEventArgs args)
+		{
+			// If it is just the position that changed fall out
+			if (args != null &&
+			    args.PreviousItem != null &&
+			    Item.IsValid &&
+			    (args.PreviousIndex != item.Index) &&
+			    (this.Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri))
+				return;
+
+			// Don't reload if the image didn't change at all.
+			if (args != null && args.Changes != null &&
+			    !args.Changes.DataChanged &&
+			    args.PreviousItem != null &&
+			    Item.IsValid &&
+			    this.Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri)
+				return;
+
+			// Same image, don't load it progressively
+			if (args != null &&
+			    args.PreviousItem != null &&
+			    Item.IsValid &&
+			    Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri)
+				progressive_display = false;
+
+			try {
+				if (Item.IsValid)
+					Load (Item.Current.DefaultVersion.Uri);
+				else
+					LoadErrorImage (null);
+			} catch (System.Exception e) {
+				Log.DebugException (e);
+				LoadErrorImage (e);
+			}
+
+			Selection = Gdk.Rectangle.Zero;
+
+			EventHandler eh = PhotoChanged;
+			if (eh != null)
+				eh (this, EventArgs.Empty);
+		}
+
+
+		private void HandleLoupeDestroy (object sender, EventArgs args)
+		{
+			if (sender == loupe)
+				loupe = null;
+
+			if (sender == sharpener)
+				sharpener = null;
+
+		}
+
+
+		public void ShowHideLoupe ()
+		{
+			if (loupe == null) {
+				loupe = new Loupe (this);
+				loupe.Destroyed += HandleLoupeDestroy;
+				loupe.Show ();
+			} else {
+				loupe.Destroy ();
+			}
+
+		}
+
+		public void ShowSharpener ()
+		{
+			if (sharpener == null) {
+				sharpener = new Sharpener (this);
+				sharpener.Destroyed += HandleLoupeDestroy;
+			}
+
+			sharpener.Show ();
+		}
+
+		void OnPreferencesChanged (object sender, NotifyEventArgs args)
+		{
+			LoadPreference (args.Key);
+		}
+
+		void LoadPreference (String key)
+		{
+			switch (key) {
+			case Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE:
+				Reload ();
+				break;
+			}
+		}
+
+		protected override void ApplyColorTransform (Pixbuf pixbuf)
+		{
+			Cms.Profile screen_profile;
+			if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile))
+				FSpot.ColorManagement.ApplyProfile (pixbuf, screen_profile);
+		}
+
+		bool crop_helpers = true;
+		public bool CropHelpers {
+			get { return crop_helpers; }
+			set {
+				if (crop_helpers == value)
+					return;
+				crop_helpers = value;
+				QueueDraw ();
+			}
+		}
+
+		protected override bool OnExposeEvent (EventExpose evnt)
+		{
+			if (!base.OnExposeEvent (evnt))
+				return false;
+
+			if (!CanSelect || !CropHelpers || Selection == Rectangle.Zero)
+				return true;
+
+			using (Cairo.Context ctx = CairoHelper.Create (GdkWindow)) {
+				ctx.SetSourceRGBA (.7, .7, .7, .8);
+				ctx.SetDash (new double [] {10, 15}, 0);
+				ctx.LineWidth = .8;
+				for (int i=1; i<3; i++) {
+					Point s = ImageCoordsToWindow (new Point (Selection.X + Selection.Width / 3 * i, Selection.Y));
+					Point e = ImageCoordsToWindow (new Point (Selection.X + Selection.Width / 3 * i, Selection.Y + Selection.Height));
+					ctx.MoveTo (s.X, s.Y);
+					ctx.LineTo (e.X, e.Y);
+					ctx.Stroke ();
+				}
+				for (int i=1; i<3; i++) {
+					Point s = ImageCoordsToWindow (new Point (Selection.X, Selection.Y + Selection.Height / 3 * i));
+					Point e = ImageCoordsToWindow (new Point (Selection.X + Selection.Width, Selection.Y + Selection.Height / 3 * i));
+					ctx.MoveTo (s.X, s.Y);
+					ctx.LineTo (e.X, e.Y);
+					ctx.Stroke ();
+				}
+			}
+			return true;
+		}
+
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/PreviewPopup.cs b/src/Clients/MainApp/FSpot.Widgets/PreviewPopup.cs
new file mode 100644
index 0000000..7f2a97a
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/PreviewPopup.cs
@@ -0,0 +1,302 @@
+/*
+ *
+ * Author(s)
+ *
+ *   Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details
+ *
+ */
+
+using System;
+using Cairo;
+using Gdk;
+using FSpot.Core;
+using FSpot.Widgets;
+using FSpot.Utils;
+
+namespace FSpot {
+	public class PreviewPopup : Gtk.Window {
+		private IconView view;
+		private Gtk.Image image;
+		private Gtk.Label label;
+
+		private bool show_histogram;
+		public bool ShowHistogram {
+			get {
+				return show_histogram;
+			}
+			set {
+				if (value != show_histogram)
+					item = -1;
+				show_histogram = value;
+			}
+		}
+
+		private FSpot.Histogram hist;
+		private DisposableCache<string, Pixbuf> preview_cache = new DisposableCache<string, Pixbuf> (50);
+
+		private int item = -1;
+		public new int Item {
+			get {
+				return item;
+			}
+			set {
+				if (value != item) {
+					item = value;
+					UpdateImage ();
+				}
+				UpdatePosition ();
+			}
+		}
+
+		private void AddHistogram (Gdk.Pixbuf pixbuf)
+		{
+			if (show_histogram) {
+				Gdk.Pixbuf image = hist.Generate (pixbuf);
+				double scalex = 0.5;
+				double scaley = 0.5;
+
+				int width = (int)(image.Width * scalex);
+				int height = (int)(image.Height * scaley);
+
+				image.Composite (pixbuf,
+						 pixbuf.Width - width - 10, pixbuf.Height - height - 10,
+						 width, height,
+						 pixbuf.Width - width - 10, pixbuf.Height - height - 10,
+						 scalex, scaley,
+						 Gdk.InterpType.Bilinear, 200);
+			}
+		}
+
+		protected override void OnRealized ()
+		{
+			bool composited = CompositeUtils.IsComposited (Screen) && CompositeUtils.SetRgbaColormap (this);
+			AppPaintable = composited;
+			base.OnRealized ();
+		}
+
+
+		protected override bool OnExposeEvent (Gdk.EventExpose args)
+		{
+			int round = 12;
+			Context g = Gdk.CairoHelper.Create (GdkWindow);
+			g.Operator = Operator.Source;
+			g.Source = new SolidPattern (new Cairo.Color (0, 0, 0, 0));
+			g.Paint ();
+			g.Operator = Operator.Over;
+			g.Source = new SolidPattern (new Cairo.Color (0, 0, 0, .7));
+			g.MoveTo (round, 0);
+			//g.LineTo (Allocation.Width - round, 0);
+			g.Arc (Allocation.Width - round, round, round, - Math.PI * 0.5, 0);
+			//g.LineTo (Allocation.Width, Allocation.Height - round);
+			g.Arc (Allocation.Width - round, Allocation.Height - round, round, 0, Math.PI * 0.5);
+			//g.LineTo (round, Allocation.Height);
+			g.Arc (round, Allocation.Height - round, round, Math.PI * 0.5, Math.PI);
+			g.Arc (round, round, round, Math.PI, Math.PI * 1.5);
+			g.ClosePath ();
+			g.Fill ();
+			((IDisposable)g).Dispose ();
+			return base.OnExposeEvent (args);
+		}
+
+		private void UpdateImage ()
+		{
+			IBrowsableItem item = view.Collection [Item];
+
+			string orig_path = item.DefaultVersion.Uri.LocalPath;
+
+			Gdk.Pixbuf pixbuf = FSpot.Utils.PixbufUtils.ShallowCopy (preview_cache.Get (orig_path + show_histogram.ToString ()));
+			if (pixbuf == null) {
+				// A bizarre pixbuf = hack to try to deal with cinematic displays, etc.
+				int preview_size = ((this.Screen.Width + this.Screen.Height)/2)/3;
+				try {
+					pixbuf = FSpot.PhotoLoader.LoadAtMaxSize (item, preview_size, preview_size);
+				} catch (Exception) {
+					pixbuf = null;
+				}
+
+				if (pixbuf != null) {
+					preview_cache.Add (orig_path + show_histogram.ToString (), pixbuf);
+					AddHistogram (pixbuf);
+					image.Pixbuf = pixbuf;
+				} else {
+					image.Pixbuf = PixbufUtils.ErrorPixbuf;
+				}
+			} else {
+				image.Pixbuf = pixbuf;
+				pixbuf.Dispose ();
+			}
+
+			string desc = String.Empty;
+			if (item.Description != null && item.Description.Length > 0)
+				desc = item.Description + Environment.NewLine;
+
+			desc += item.Time.ToString () + "   " + item.Name;
+			label.Text = desc;
+		}
+
+
+		private void UpdatePosition ()
+		{
+			int x, y;
+			Gdk.Rectangle bounds = view.CellBounds (this.Item);
+
+			Gtk.Requisition requisition = this.SizeRequest ();
+			this.Resize (requisition.Width, requisition.Height);
+
+			view.GdkWindow.GetOrigin (out x, out y);
+
+			// Acount for scrolling
+			bounds.X -= (int)view.Hadjustment.Value;
+			bounds.Y -= (int)view.Vadjustment.Value;
+
+			// calculate the cell center
+			x += bounds.X + (bounds.Width / 2);
+			y += bounds.Y + (bounds.Height / 2);
+
+			// find the window's x location limiting it to the screen
+			x = Math.Max (0, x - requisition.Width / 2);
+			x = Math.Min (x, this.Screen.Width - requisition.Width);
+
+			// find the window's y location offset above or below depending on space
+			y = Math.Max (0, y - requisition.Height / 2);
+			y = Math.Min (y, this.Screen.Height - requisition.Height);
+
+			this.Move (x, y);
+		}
+
+		private void UpdateItem (int x, int y)
+		{
+			int item = view.CellAtPosition (x, y);
+			if (item >= 0) {
+				this.Item = item;
+				Show ();
+			} else {
+				this.Hide ();
+			}
+		}
+
+	        private void UpdateItem ()
+		{
+			int x, y;
+			view.GetPointer (out x, out y);
+			x += (int) view.Hadjustment.Value;
+			y += (int) view.Vadjustment.Value;
+			UpdateItem (x, y);
+
+		}
+
+		private void HandleIconViewMotion (object sender, Gtk.MotionNotifyEventArgs args)
+		{
+			if (!this.Visible)
+				return;
+
+			int x = (int) args.Event.X;
+			int y = (int) args.Event.Y;
+			view.GrabFocus ();
+			UpdateItem (x, y);
+		}
+
+		private void HandleIconViewKeyPress (object sender, Gtk.KeyPressEventArgs args)
+		{
+			switch (args.Event.Key) {
+			case Gdk.Key.v:
+				ShowHistogram = false;
+				UpdateItem ();
+				args.RetVal = true;
+				break;
+			case Gdk.Key.V:
+				ShowHistogram = true;
+				UpdateItem ();
+				args.RetVal = true;
+				break;
+			}
+		}
+
+		private void HandleKeyRelease (object sender, Gtk.KeyReleaseEventArgs args)
+		{
+			switch (args.Event.Key) {
+			case Gdk.Key.v:
+			case Gdk.Key.V:
+			case Gdk.Key.h:
+				this.Hide ();
+				break;
+			}
+		}
+
+		private void HandleButtonPress (object sender, Gtk.ButtonPressEventArgs args)
+		{
+			this.Hide ();
+		}
+
+		private void HandleIconViewDestroy (object sender, Gtk.DestroyEventArgs args)
+		{
+			this.Destroy ();
+		}
+
+		private void HandleDestroyed (object sender, System.EventArgs args)
+		{
+			this.preview_cache.Dispose ();
+		}
+
+		protected override bool OnMotionNotifyEvent (Gdk.EventMotion args)
+		{
+			//
+			// We look for motion events on the popup window so that
+			// if the pointer manages to get over the window we can
+			// Update the image properly and/or get out of the way.
+			//
+			UpdateItem ();
+			return false;
+		}
+
+		public PreviewPopup (IconView view) : base (Gtk.WindowType.Toplevel)
+		{
+			Gtk.VBox vbox = new Gtk.VBox ();
+			this.Add (vbox);
+			this.AddEvents ((int) (Gdk.EventMask.PointerMotionMask |
+					       Gdk.EventMask.KeyReleaseMask |
+					       Gdk.EventMask.ButtonPressMask));
+
+			this.Decorated = false;
+			this.SkipTaskbarHint = true;
+			this.SkipPagerHint = true;
+			this.SetPosition (Gtk.WindowPosition.None);
+
+			this.KeyReleaseEvent += HandleKeyRelease;
+			this.ButtonPressEvent += HandleButtonPress;
+			this.Destroyed += HandleDestroyed;
+
+			this.view = view;
+			view.MotionNotifyEvent += HandleIconViewMotion;
+			view.KeyPressEvent += HandleIconViewKeyPress;
+			view.KeyReleaseEvent += HandleKeyRelease;
+			view.DestroyEvent += HandleIconViewDestroy;
+
+			this.BorderWidth = 6;
+
+			hist = new FSpot.Histogram ();
+			hist.RedColorHint = 127;
+			hist.GreenColorHint = 127;
+			hist.BlueColorHint = 127;
+			hist.BackgroundColorHint = 0xff;
+
+			image = new Gtk.Image ();
+			image.CanFocus = false;
+
+
+			label = new Gtk.Label (String.Empty);
+			label.CanFocus = false;
+			label.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
+			label.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
+
+			this.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
+			this.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
+
+			vbox.PackStart (image, true, true, 0);
+			vbox.PackStart (label, true, false, 0);
+			vbox.ShowAll ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/QueryView.cs b/src/Clients/MainApp/FSpot.Widgets/QueryView.cs
new file mode 100644
index 0000000..f3d4e2c
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/QueryView.cs
@@ -0,0 +1,29 @@
+//
+// QueryView.cs
+//
+// Copyright (C) 2004 Novell, Inc.
+//
+
+using FSpot.Core;
+
+namespace FSpot.Widgets
+{
+	public class QueryView : IconView {
+		public QueryView (System.IntPtr raw) : base (raw) {}
+
+		public QueryView (IBrowsableCollection query) : base (query) {}
+
+		protected override bool OnPopupMenu ()
+		{
+			PhotoPopup popup = new PhotoPopup ();
+			popup.Activate ();
+			return true;
+		}
+
+		protected override void ContextMenu (Gtk.ButtonPressEventArgs args, int cell_num)
+		{
+			PhotoPopup popup = new PhotoPopup ();
+			popup.Activate (this.Toplevel, args.Event);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/RatingMenuItem.cs b/src/Clients/MainApp/FSpot.Widgets/RatingMenuItem.cs
new file mode 100644
index 0000000..1fc8b3e
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/RatingMenuItem.cs
@@ -0,0 +1,158 @@
+//
+// RatingMenuItem.cs
+//
+// Author:
+//   Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+using Mono.Unix;
+using Hyena;
+
+namespace FSpot.Widgets
+{
+	public class RatingMenuItem : ComplexMenuItem
+	{
+		private Rating entry;
+		private bool pressing;
+		private bool can_activate = true;
+
+		protected RatingMenuItem (IntPtr raw) : base (raw)
+		{
+		}
+
+		public RatingMenuItem () : this (null)
+		{
+		}
+
+		public RatingMenuItem (object parent) : base ()
+		{
+			HBox box = new HBox ();
+			box.Spacing = 5;
+
+			Label label = new Label ();
+			label.Markup = String.Format ("<i>{0}</i>",
+					GLib.Markup.EscapeText (Catalog.GetString ("Rating:")));
+			box.PackStart (label, false, false, 0);
+
+			if (parent is FullScreenView) {
+				Log.Debug ("PARENT IS FSVIEW");
+				FullScreenView fsview = parent as FullScreenView;
+				entry = new Rating ((int)fsview.View.Item.Current.Rating, true);
+			} else if (App.Instance.Organizer.Selection.Count == 1)
+				entry = new Rating ((int)App.Instance.Organizer.Selection[0].Rating, true);
+			else
+				entry = new Rating (-1, true);
+			entry.Changed += OnEntryChanged;
+			box.PackStart (entry, false, false, 0);
+
+			box.ShowAll ();
+			Add (box);
+		}
+
+		protected override void OnRealized ()
+		{
+			entry.ModifyBg (Gtk.StateType.Prelight, entry.Style.BaseColors [(int)Gtk.StateType.Selected]);
+			base.OnRealized();
+
+		}
+
+		private int TransformX (double inx)
+		{
+			int x = (int)inx - entry.Allocation.X;
+
+			if (x < 0) {
+				x = 0;
+			} else if (x > entry.Allocation.Width) {
+				x = entry.Allocation.Width;
+			}
+
+			return x;
+		}
+
+		protected override bool OnButtonPressEvent (Gdk.EventButton evnt)
+		{
+			pressing = true;
+			entry.SetValueFromPosition (TransformX (evnt.X));
+			return true;
+		}
+
+		protected override bool OnButtonReleaseEvent (Gdk.EventButton evnt)
+		{
+			pressing = false;
+			return true;
+		}
+
+		protected override bool OnMotionNotifyEvent (Gdk.EventMotion evnt)
+		{
+			if (!pressing) {
+				return false;
+			}
+
+			entry.SetValueFromPosition (TransformX (evnt.X));
+			return true;
+		}
+
+		protected override bool OnLeaveNotifyEvent (Gdk.EventCrossing evnt)
+		{
+			pressing = false;
+			return true;
+		}
+
+		protected override bool OnScrollEvent (Gdk.EventScroll evnt)
+		{
+			return entry.HandleScroll (evnt);
+		}
+
+		protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
+		{
+			return entry.HandleKeyPress (evnt);
+		}
+
+		private void OnEntryChanged (object o, EventArgs args)
+		{
+			if (can_activate) {
+				Activate ();
+				OnChanged (o, args);
+			}
+		}
+
+		public void Reset (int value)
+		{
+			can_activate = false;
+			Value = value;
+			can_activate = true;
+		}
+
+		public int Value {
+			get { return entry.Value; }
+			set { entry.Value = value; }
+		}
+
+		public Rating RatingEntry {
+			get { return entry; }
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/ScalingIconView.cs b/src/Clients/MainApp/FSpot.Widgets/ScalingIconView.cs
new file mode 100644
index 0000000..2e43b6a
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/ScalingIconView.cs
@@ -0,0 +1,51 @@
+/*
+ * ScalingIconView.cs
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using FSpot.Core;
+
+namespace FSpot.Widgets {
+	public class ScalingIconView : IconView {
+		protected ScalingIconView (IntPtr raw) : base (raw) {}
+
+		public ScalingIconView () : base () { }
+		public ScalingIconView (IBrowsableCollection collection) : base (collection) { }
+
+		protected override void UpdateLayout ()
+		{
+			int num_thumbnails = collection != null ? collection.Count : 0;
+			cells_per_row = System.Math.Max (num_thumbnails, 1);
+
+			int num_rows = 1;
+			int num_cols = num_thumbnails;
+
+			int available_height = Allocation.Height - 2 * BORDER_SIZE;
+			if (DisplayTags)
+				available_height -= tag_icon_size + tag_icon_vspacing;
+
+			if (DisplayDates && this.Style != null) {
+				Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription, Pango.Language.FromString ("en_US"));
+				available_height -= PangoPixels (metrics.Ascent + metrics.Descent);
+			}
+
+			thumbnail_width = (int) (available_height / thumbnail_ratio);
+
+			cell_width = ThumbnailWidth + 2 * cell_border_width;
+			cell_height = ThumbnailHeight + 2 * cell_border_width;
+
+			SetSize (System.Math.Max (((uint) (num_cols * cell_width + 2 * BORDER_SIZE)), (uint)Allocation.Width), (uint) (num_rows * cell_height + 2 * BORDER_SIZE));
+
+			Vadjustment.StepIncrement = cell_height;
+			Vadjustment.Change ();
+
+			Hadjustment.StepIncrement = cell_width;
+			Hadjustment.Change ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/Sharpener.cs b/src/Clients/MainApp/FSpot.Widgets/Sharpener.cs
new file mode 100644
index 0000000..f0e89a9
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/Sharpener.cs
@@ -0,0 +1,147 @@
+//
+// FSpot.Widgets.Sharpener.cs
+//
+// Author(s):
+//	Larry Ewing  <lewing at novell.com:
+//
+// Copyright (c) 2005-2009 Novell, Inc.
+//
+// This is free software. See COPYING for details.
+//
+using Cairo;
+
+using Gtk;
+using Gdk;
+using System;
+using System.Runtime.InteropServices;
+using Mono.Unix;
+using FSpot.Widgets;
+using FSpot.UI.Dialog;
+using Hyena.Widgets;
+
+namespace FSpot.Widgets {
+	public class Sharpener : Loupe {
+		Gtk.SpinButton amount_spin = new Gtk.SpinButton (0.5, 100.0, .01);
+		Gtk.SpinButton radius_spin = new Gtk.SpinButton (5.0, 50.0, .01);
+		Gtk.SpinButton threshold_spin = new Gtk.SpinButton (0.0, 50.0, .01);
+		Gtk.Dialog dialog;
+
+		public Sharpener (PhotoImageView view) : base (view)
+		{
+		}
+
+		protected override void UpdateSample ()
+		{
+			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);
+		}
+
+		private void HandleSettingsChanged (object sender, EventArgs args)
+		{
+			UpdateSample ();
+		}
+
+		private void HandleOkClicked (object sender, EventArgs args)
+		{
+			Photo photo = view.Item.Current as Photo;
+
+			if (photo == null)
+				return;
+
+			try {
+				Gdk.Pixbuf orig = view.Pixbuf;
+				Gdk.Pixbuf final = PixbufUtils.UnsharpMask (orig,
+									    radius_spin.Value,
+									    amount_spin.Value,
+									    threshold_spin.Value);
+
+				bool create_version = photo.DefaultVersion.IsProtected;
+
+				photo.SaveVersion (final, create_version);
+				photo.Changes.DataChanged = true;
+				App.Instance.Database.Photos.Commit (photo);
+			} 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);
+
+				HigMessageDialog md = new HigMessageDialog (this, DialogFlags.DestroyWithParent,
+									    Gtk.MessageType.Error,
+									    ButtonsType.Ok,
+									    msg,
+									    desc);
+				md.Run ();
+				md.Destroy ();
+			}
+
+			Destroy ();
+		}
+
+		public void HandleCancelClicked (object sender, EventArgs args)
+		{
+			Destroy ();
+		}
+
+		public void HandleLoupeDestroyed (object sender, EventArgs args)
+		{
+			dialog.Destroy ();
+		}
+
+		protected override void BuildUI ()
+		{
+			base.BuildUI ();
+
+			string title = Catalog.GetString ("Sharpen");
+			dialog = new Gtk.Dialog (title, (Gtk.Window) this,
+						 DialogFlags.DestroyWithParent, new object [0]);
+			dialog.BorderWidth = 12;
+			dialog.VBox.Spacing = 6;
+
+			Gtk.Table table = new Gtk.Table (3, 2, false);
+			table.ColumnSpacing = 6;
+			table.RowSpacing = 6;
+
+			table.Attach (SetFancyStyle (new Gtk.Label (Catalog.GetString ("Amount:"))), 0, 1, 0, 1);
+			table.Attach (SetFancyStyle (new Gtk.Label (Catalog.GetString ("Radius:"))), 0, 1, 1, 2);
+			table.Attach (SetFancyStyle (new Gtk.Label (Catalog.GetString ("Threshold:"))), 0, 1, 2, 3);
+
+			SetFancyStyle (amount_spin = new Gtk.SpinButton (0.00, 100.0, .01));
+			SetFancyStyle (radius_spin = new Gtk.SpinButton (1.0, 50.0, .01));
+			SetFancyStyle (threshold_spin = new Gtk.SpinButton (0.0, 50.0, .01));
+			amount_spin.Value = .5;
+			radius_spin.Value = 5;
+			threshold_spin.Value = 0.0;
+
+			amount_spin.ValueChanged += HandleSettingsChanged;
+			radius_spin.ValueChanged += HandleSettingsChanged;
+			threshold_spin.ValueChanged += HandleSettingsChanged;
+
+			table.Attach (amount_spin, 1, 2, 0, 1);
+			table.Attach (radius_spin, 1, 2, 1, 2);
+			table.Attach (threshold_spin, 1, 2, 2, 3);
+
+			Gtk.Button cancel_button = new Gtk.Button (Gtk.Stock.Cancel);
+			cancel_button.Clicked += HandleCancelClicked;
+			dialog.AddActionWidget (cancel_button, Gtk.ResponseType.Cancel);
+
+			Gtk.Button ok_button = new Gtk.Button (Gtk.Stock.Ok);
+			ok_button.Clicked += HandleOkClicked;
+			dialog.AddActionWidget (ok_button, Gtk.ResponseType.Cancel);
+
+			Destroyed += HandleLoupeDestroyed;
+
+			table.ShowAll ();
+			dialog.VBox.PackStart (table);
+			dialog.ShowAll ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/Sidebar.cs b/src/Clients/MainApp/FSpot.Widgets/Sidebar.cs
new file mode 100644
index 0000000..ad46891
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/Sidebar.cs
@@ -0,0 +1,250 @@
+/*
+ * Widgets.Sidebar.cs
+ *
+ * Author(s)
+ * 	Mike Gemuende <mike at gemuende.de>
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *	Ruben Vermeersch <ruben at savanne.be>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+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
+{
+
+	// Decides which sidebar page should be shown for each context. Implemented
+	// using the Strategy pattern, to make it swappable easily, in case the
+	// default MRUSidebarContextSwitchStrategy is not sufficiently usable.
+	public interface ISidebarContextSwitchStrategy {
+		string PageForContext (ViewContext context);
+
+		void SwitchedToPage (ViewContext context, string name);
+	}
+
+	// Implements a Most Recently Used switching strategy. The last page you used
+	// for a given context is used.
+	public class MRUSidebarContextSwitchStrategy : ISidebarContextSwitchStrategy {
+		public const string PREF_PREFIX = Preferences.APP_FSPOT + "ui/sidebar";
+
+		private string PrefKeyForContext (ViewContext context) {
+			return String.Format ("{0}/{1}", PREF_PREFIX, context);
+		}
+
+		public string PageForContext (ViewContext context) {
+			string name = Preferences.Get<string> (PrefKeyForContext (context));
+			if (name == null)
+				name = DefaultForContext (context);
+			return name;
+		}
+
+		public void SwitchedToPage (ViewContext context, string name) {
+			Preferences.Set (PrefKeyForContext (context), name);
+		}
+
+		private string DefaultForContext (ViewContext context) {
+			if (context == ViewContext.Edit)
+				return Catalog.GetString ("Edit");
+			// Don't care otherwise, Tags sounds reasonable
+			return Catalog.GetString ("Tags");
+		}
+	}
+
+	public class Sidebar : VBox  {
+
+		private HBox button_box;
+		public Notebook Notebook { get; private set; }
+		private MenuButton choose_button;
+		private EventBox eventBox;
+		private Menu choose_menu;
+		private List<string> menu_list;
+		private List<string> image_list;
+
+		public event EventHandler CloseRequested;
+
+		// Selection change events, sidebar pages can subscribed to this.
+		public event IBrowsableCollectionChangedHandler SelectionChanged;
+		public event IBrowsableCollectionItemsChangedHandler SelectionItemsChanged;
+
+		// The photos selected.
+		private IBrowsableCollection selection;
+		public IBrowsableCollection Selection {
+			get { return selection; }
+			private set { selection = value; }
+		}
+
+		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 ISidebarContextSwitchStrategy ContextSwitchStrategy;
+
+		public Sidebar () : base ()
+		{
+			ContextSwitchStrategy = new MRUSidebarContextSwitchStrategy ();
+			ContextChanged += HandleContextChanged;
+
+			button_box = new HBox ();
+			PackStart (button_box, false, false, 0);
+
+			Notebook = new Notebook ();
+			Notebook.ShowTabs = false;
+			Notebook.ShowBorder = false;
+			PackStart (Notebook, true, true, 0);
+
+			Button button = new Button ();
+			button.Image = new Image ("gtk-close", IconSize.Button);
+			button.Relief = ReliefStyle.None;
+			button.Pressed += HandleCloseButtonPressed;
+			button_box.PackEnd (button, false, true, 0);
+
+			choose_button = new MenuButton ();
+			choose_button.Relief = ReliefStyle.None;
+
+			eventBox = new EventBox ();
+			eventBox.Add (choose_button);
+
+			button_box.PackStart (eventBox, true, true, 0);
+
+			choose_menu = new Menu ();
+			choose_button.Menu = choose_menu;
+
+			menu_list = new List<string> ();
+			image_list = new List<string> ();
+		}
+
+		private void HandleContextChanged (object sender, EventArgs args)
+		{
+			// Make sure the ViewModeCondition is set correctly.
+			if (Context == ViewContext.Single)
+				ViewModeCondition.Mode = FSpot.Extensions.ViewMode.Single;
+			else if (Context == ViewContext.Library || Context == ViewContext.Edit)
+				ViewModeCondition.Mode = FSpot.Extensions.ViewMode.Library;
+			else
+				ViewModeCondition.Mode = FSpot.Extensions.ViewMode.Unknown;
+
+			string name = ContextSwitchStrategy.PageForContext (Context);
+			SwitchTo (name);
+		}
+
+		private void HandleCanSelectChanged (object sender, EventArgs args)
+		{
+			//Log.Debug ("Can select changed for {0} to {1}", sender, (sender as SidebarPage).CanSelect);
+		}
+
+		public void AppendPage (Widget widget, string label, string icon_name)
+		{
+			AppendPage (new SidebarPage (widget, label, icon_name));
+		}
+
+        public void AppendPage (SidebarPage page)
+		{
+			page.Sidebar = this;
+			page.CanSelectChanged += HandleCanSelectChanged;
+
+			string label = page.Label;
+			string icon_name = page.IconName;
+
+			Notebook.AppendPage (page.SidebarWidget, new Label (label));
+			page.SidebarWidget.Show ();
+
+			MenuItem item;
+			if (icon_name == null)
+				item = new MenuItem (label);
+			else {
+				item = new ImageMenuItem (label);
+				(item as ImageMenuItem).Image = new Image ();
+				((item as ImageMenuItem).Image as Image).IconName = icon_name;
+			}
+
+			item.Activated += HandleItemClicked;
+			choose_menu.Append (item);
+			item.Show ();
+
+			if (Notebook.Children.Length == 1) {
+				choose_button.Label = label;
+				choose_button.Image.IconName = icon_name;
+			}
+			menu_list.Add (label);
+			image_list.Add (icon_name);
+		}
+
+		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;
+		}
+
+		public void HandleItemClicked (object o, EventArgs args)
+		{
+			string name = ((o as MenuItem).Child as Label).Text;
+			SwitchTo (name);
+			ContextSwitchStrategy.SwitchedToPage (Context, name);
+		}
+
+		public void HandleCloseButtonPressed (object sender, EventArgs args)
+		{
+			if (CloseRequested != null)
+				CloseRequested (this, args);
+		}
+
+		public void SwitchTo (int n)
+		{
+			if (n >= Notebook.Children.Length) {
+				n = 0;
+			}
+
+			Notebook.CurrentPage = n;
+			choose_button.Label = menu_list [n];
+			choose_button.Image.IconName = image_list [n];
+		}
+
+		public int CurrentPage
+		{
+			get { return Notebook.CurrentPage; }
+		}
+
+		public void SwitchTo (string name)
+		{
+			if (menu_list.Contains (name))
+				SwitchTo (menu_list.IndexOf (name));
+		}
+
+		public bool IsActive (SidebarPage page)
+		{
+			return (Notebook.GetNthPage (Notebook.CurrentPage) == page.SidebarWidget);
+		}
+
+		public void HandleSelectionChanged (IBrowsableCollection collection) {
+			Selection = collection;
+			// Proxy selection change to the subscribed sidebar pages.
+			if (SelectionChanged != null)
+				SelectionChanged (collection);
+		}
+
+		// Proxy selection item changes to the subscribed sidebar pages.
+		public void HandleSelectionItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args) {
+			if (SelectionItemsChanged != null)
+				SelectionItemsChanged (collection, args);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/SlideShow.cs b/src/Clients/MainApp/FSpot.Widgets/SlideShow.cs
new file mode 100644
index 0000000..cf751bf
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/SlideShow.cs
@@ -0,0 +1,185 @@
+//
+// FSpot.Widgets.SlideShow.cs
+//
+// Author(s):
+//	Stephane Delcroix  <stephane at delcroix.org>
+//
+// This is open source software. See COPYING for details.
+//
+
+using System;
+using System.Collections.Generic;
+
+using Gtk;
+using Gdk;
+using Mono.Addins;
+using FSpot.Core;
+using FSpot.Bling;
+using FSpot.Extensions;
+using FSpot.Imaging;
+using FSpot.Transitions;
+
+namespace FSpot.Widgets
+{
+	public class SlideShow : DrawingArea
+	{
+		bool running;
+		BrowsablePointer item;
+		int loadRetries = 0;
+#region Public API
+
+		public SlideShow (BrowsablePointer item) : this (item, 6000, false)
+		{
+		}
+
+		public SlideShow (BrowsablePointer item, uint interval_ms, bool init) : base ()
+		{
+			this.item = item;
+			DoubleBuffered = false;
+			AppPaintable = true;
+			CanFocus = true;
+			item.Changed += HandleItemChanged;
+
+			foreach (TransitionNode transition in AddinManager.GetExtensionNodes ("/FSpot/SlideShow")) {
+				if (this.transition == null)
+					this.transition = transition.Transition;
+				transitions.Add (transition.Transition);
+			}
+
+			flip = new Delay (interval_ms, delegate {item.MoveNext (true); return true;});
+			animation = new DoubleAnimation (0, 1, new TimeSpan (0, 0, 2), HandleProgressChanged, GLib.Priority.Default);
+
+			if (init) {
+				HandleItemChanged (null, null);
+			}
+		}
+
+		SlideShowTransition transition;
+		public SlideShowTransition Transition {
+			get { return transition; }
+			set {
+				if (value == transition)
+					return;
+				transition = value;
+				QueueDraw ();
+			}
+		}
+
+		List<SlideShowTransition> transitions = new List<SlideShowTransition> ();
+		public IEnumerable<SlideShowTransition> Transitions {
+			get { return transitions; }
+		}
+
+		DoubleAnimation animation;
+		Delay flip;
+		public void Start ()
+		{
+			running = true;
+			flip.Start ();
+		}
+
+		public void Stop ()
+		{
+			running = false;
+			flip.Stop ();
+		}
+#endregion
+
+#region Event Handlers
+		Pixbuf prev, next;
+		object sync_handle = new object ();
+		void HandleItemChanged (object sender, EventArgs e)
+		{
+			flip.Stop ();
+			if (running)
+				flip.Start ();
+			lock (sync_handle) {
+				if (prev != null && prev != PixbufUtils.ErrorPixbuf)
+					prev.Dispose ();
+				prev = next;
+
+				LoadNext ();
+
+				if (animation.IsRunning)
+					animation.Stop ();
+				progress = 0;
+				animation.Start ();
+			}
+		}
+
+		void LoadNext ()
+		{
+				if (next != null) {
+					next = null;
+				}
+
+				if (item == null || item.Current == null)
+					return;
+
+				using (var img = ImageFile.Create (item.Current.DefaultVersion.Uri)) {
+					try {
+						using (var pb =  img.Load ()) {
+							double scale = Math.Min ((double)Allocation.Width/(double)pb.Width, (double)Allocation.Height/(double)pb.Height);
+							int w = (int)(pb.Width * scale);
+							int h = (int)(pb.Height * scale);
+
+							if (w > 0 && h > 0)
+								next = pb.ScaleSimple ((int)(pb.Width * scale), (int)(pb.Height * scale), InterpType.Bilinear);
+						}
+						Cms.Profile screen_profile;
+						if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile))
+							FSpot.ColorManagement.ApplyProfile (next, screen_profile);
+						loadRetries = 0;
+					} catch (Exception) {
+						next = PixbufUtils.ErrorPixbuf;
+						if (++loadRetries < 10)
+							item.MoveNext (true);
+						else
+							loadRetries = 0;
+					}
+				}
+		}
+
+		double progress = 0;
+		void HandleProgressChanged (double progress)
+		{
+			lock (sync_handle) {
+				this.progress = progress;
+				QueueDraw ();
+			}
+		}
+#endregion
+
+#region Gtk Widgetry
+		protected override bool OnExposeEvent (Gdk.EventExpose args)
+		{
+			lock (sync_handle) {
+				transition.Draw (args.Window, prev, next, Allocation.Width, Allocation.Height, progress);
+			}
+			return true;
+		}
+		protected override void OnDestroyed ()
+		{
+			if (prev != null && prev != PixbufUtils.ErrorPixbuf)
+				prev.Dispose ();
+			if (next != null && next != PixbufUtils.ErrorPixbuf)
+				next.Dispose ();
+
+			base.OnDestroyed ();
+		}
+
+		protected override void OnSizeAllocated (Rectangle allocation)
+		{
+			base.OnSizeAllocated (allocation);
+			LoadNext ();
+			QueueDraw ();
+		}
+
+		protected override void OnUnrealized ()
+		{
+			flip.Stop ();
+			base.OnUnrealized ();
+		}
+#endregion
+	}
+}
diff --git a/src/SoftFocus.cs b/src/Clients/MainApp/FSpot.Widgets/SoftFocus.cs
similarity index 100%
rename from src/SoftFocus.cs
rename to src/Clients/MainApp/FSpot.Widgets/SoftFocus.cs
diff --git a/src/Clients/MainApp/FSpot.Widgets/TagEntry.cs b/src/Clients/MainApp/FSpot.Widgets/TagEntry.cs
new file mode 100644
index 0000000..3fffe1b
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/TagEntry.cs
@@ -0,0 +1,297 @@
+/*
+ * Widgets/TagEntry.cs
+ *
+ * Author(s)
+ *   Original work by Nat Friedman in MainWindow.cs
+ *   Refactored as a self-contained widget by Stephane Delcroix
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using System.Text;
+using System.Collections;
+using FSpot.Core;
+
+namespace FSpot.Widgets {
+
+	public delegate void TagsAttachedHandler (object sender, string [] tags);
+	public delegate void TagsRemovedHandler (object sender, Tag [] tags);
+
+	public class TagEntry : Gtk.Entry {
+
+		public event TagsAttachedHandler TagsAttached;
+		public event TagsRemovedHandler TagsRemoved;
+
+		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) : base ()
+		{
+			this.tag_store = tag_store;
+			this.KeyPressEvent += HandleKeyPressEvent;
+			if (update_on_focus_out)
+				this.FocusOutEvent += HandleFocusOutEvent;
+		}
+
+		ArrayList selected_photos_tagnames;
+		public void UpdateFromSelection (IBrowsableItem [] sel)
+		{
+			Hashtable taghash = new Hashtable ();
+
+			for (int i = 0; i < sel.Length; i++) {
+				foreach (Tag tag in sel [i].Tags) {
+					int count = 1;
+
+					if (taghash.Contains (tag))
+						count = ((int) taghash [tag]) + 1;
+
+					if (count <= i)
+						taghash.Remove (tag);
+					else
+						taghash [tag] = count;
+				}
+
+				if (taghash.Count == 0)
+					break;
+			}
+
+			selected_photos_tagnames = new ArrayList ();
+			foreach (Tag tag in taghash.Keys)
+				if ((int) (taghash [tag]) == sel.Length)
+					selected_photos_tagnames.Add (tag.Name);
+
+			Update ();
+		}
+
+		public void UpdateFromTagNames (string [] tagnames)
+		{
+			selected_photos_tagnames = new ArrayList ();
+			foreach (string tagname in tagnames)
+				selected_photos_tagnames.Add (tagname);
+
+			Update ();
+		}
+
+		private void Update ()
+		{
+			selected_photos_tagnames.Sort ();
+
+			StringBuilder sb = new StringBuilder ();
+			foreach (string tagname in selected_photos_tagnames) {
+				if (sb.Length > 0)
+					sb.Append (", ");
+
+				sb.Append (tagname);
+			}
+
+			Text = sb.ToString ();
+			ClearTagCompletions ();
+		}
+
+		private void AppendComma ()
+		{
+			if (Text.Length != 0 && !Text.Trim ().EndsWith (","))
+				AppendText (", ");
+		}
+
+		public string [] GetTypedTagNames ()
+		{
+			string [] tagnames = Text.Split (new char [] {','});
+
+			ArrayList list = new ArrayList ();
+			for (int i = 0; i < tagnames.Length; i ++) {
+				string s = tagnames [i].Trim ();
+
+				if (s.Length > 0)
+					list.Add (s);
+			}
+
+			return (string []) (list.ToArray (typeof (string)));
+		}
+
+		int tag_completion_index = -1;
+		Tag [] tag_completions;
+
+		public void ClearTagCompletions ()
+		{
+			tag_completion_index = -1;
+			tag_completions = null;
+		}
+
+		[GLib.ConnectBefore]
+		private void HandleKeyPressEvent (object o, Gtk.KeyPressEventArgs args)
+		{
+			args.RetVal = false;
+			if (args.Event.Key == Gdk.Key.Escape) {
+				args.RetVal = false;
+			} else if (args.Event.Key == Gdk.Key.comma) {
+				if (tag_completion_index != -1) {
+					// If we are completing a tag, then finish that
+					FinishTagCompletion ();
+					args.RetVal = true;
+				} else
+					// Otherwise do not handle this event here
+					args.RetVal = false;
+			} else if (args.Event.Key == Gdk.Key.Return) {
+				// If we are completing a tag, then finish that
+				if (tag_completion_index != -1)
+					FinishTagCompletion ();
+				// And pass the event to Gtk.Entry in any case,
+				// which will call OnActivated
+				args.RetVal = false;
+			} else if (args.Event.Key == Gdk.Key.Tab) {
+				DoTagCompletion (true);
+				args.RetVal = true;
+			} else if (args.Event.Key == Gdk.Key.ISO_Left_Tab) {
+				DoTagCompletion (false);
+				args.RetVal = true;
+			}
+		}
+
+		bool tag_ignore_changes = false;
+
+		protected override void OnChanged ()
+		{
+			if (tag_ignore_changes)
+				return;
+
+			ClearTagCompletions ();
+		}
+
+		string tag_completion_typed_so_far;
+		int tag_completion_typed_position;
+
+		private void DoTagCompletion (bool forward)
+		{
+			string completion;
+
+			if (tag_completion_index != -1) {
+				if (forward)
+					tag_completion_index = (tag_completion_index + 1) % tag_completions.Length;
+				else
+					tag_completion_index = (tag_completion_index + tag_completions.Length - 1) % tag_completions.Length;
+			} else {
+
+				tag_completion_typed_position = Position;
+
+				string right_of_cursor = Text.Substring (tag_completion_typed_position);
+				if (right_of_cursor.Length > 1)
+					return;
+
+				int last_comma = Text.LastIndexOf (',');
+				if (last_comma > tag_completion_typed_position)
+					return;
+
+				tag_completion_typed_so_far = Text.Substring (last_comma + 1).TrimStart (new char [] {' '});
+				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);
+				if (tag_completions == null)
+					return;
+
+				if (forward)
+					tag_completion_index = 0;
+				else
+					tag_completion_index = tag_completions.Length - 1;
+			}
+
+			tag_ignore_changes = true;
+			completion = tag_completions [tag_completion_index].Name.Substring (tag_completion_typed_so_far.Length);
+			Text = Text.Substring (0, tag_completion_typed_position) + completion;
+			tag_ignore_changes = false;
+
+			Position = Text.Length;
+			SelectRegion (tag_completion_typed_position, Text.Length);
+		}
+
+		void FinishTagCompletion ()
+		{
+			if (tag_completion_index == -1)
+				return;
+
+			int sel_start, sel_end, pos;
+			pos = Position;
+			if (GetSelectionBounds (out sel_start, out sel_end)) {
+				pos = sel_end;
+				SelectRegion (-1, -1);
+			}
+
+			InsertText (", ", ref pos);
+			Position = pos + 2;
+			ClearTagCompletions ();
+
+		}
+
+		//Activated means the user pressed 'Enter'
+		protected override void OnActivated ()
+		{
+			string [] tagnames = GetTypedTagNames ();
+
+			if (tagnames == null)
+				return;
+
+			// Add any new tags to the selected photos
+			ArrayList new_tags = new ArrayList ();
+			for (int i = 0; i < tagnames.Length; i ++) {
+				if (tagnames [i].Length == 0)
+					continue;
+
+				if (selected_photos_tagnames.Contains (tagnames [i]))
+					continue;
+
+				Tag t = tag_store.GetTagByName (tagnames [i]);
+
+				if (t != null) // Correct for capitalization differences
+					tagnames [i] = t.Name;
+
+				new_tags.Add (tagnames [i]);
+			}
+
+			//Send event
+			if (new_tags.Count != 0 && TagsAttached != null)
+				TagsAttached (this, (string []) new_tags.ToArray (typeof (string)));
+
+			// Remove any removed tags from the selected photos
+			ArrayList remove_tags = new ArrayList ();
+			foreach (string tagname in selected_photos_tagnames) {
+				if (! IsTagInList (tagnames, tagname)) {
+					Tag tag = tag_store.GetTagByName (tagname);
+					remove_tags.Add (tag);
+				}
+			}
+
+			//Send event
+			if (remove_tags.Count != 0 && TagsRemoved != null)
+				TagsRemoved (this, (Tag []) remove_tags.ToArray (typeof (Tag)));
+		}
+
+		private static bool IsTagInList (string [] tags, string tag)
+		{
+			foreach (string t in tags)
+				if (t == tag)
+					return true;
+			return false;
+		}
+
+		private void HandleFocusOutEvent (object o, Gtk.FocusOutEventArgs args)
+		{
+			Update ();
+		}
+
+		protected override bool OnFocusInEvent (Gdk.EventFocus evnt)
+		{
+			AppendComma ();
+			return base.OnFocusInEvent (evnt);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/TagMenu.cs b/src/Clients/MainApp/FSpot.Widgets/TagMenu.cs
new file mode 100644
index 0000000..b99307e
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/TagMenu.cs
@@ -0,0 +1,167 @@
+using Gtk;
+#if GTK_2_16
+using GtkBeans;
+#endif
+using System;
+using FSpot;
+using FSpot.Utils;
+using Hyena;
+using FSpot.Core;
+
+public class TagMenu : Menu {
+	private TagStore tag_store;
+
+	public delegate void TagSelectedHandler (Tag t);
+	public event TagSelectedHandler TagSelected;
+
+	private EventHandler new_tag_handler = null;
+	public EventHandler NewTagHandler {
+		get { return new_tag_handler; }
+		set { new_tag_handler = value; }
+	}
+
+	public class TagMenuItem : Gtk.ImageMenuItem {
+		public Tag Value;
+
+		public TagMenuItem (Tag t) : this (t, t.Name) { }
+
+		public TagMenuItem (Tag t, string name) : base (name.Replace ("_", "__"))
+		{
+			Value = t;
+			if (t.Icon != null) {
+				this.Image = new Gtk.Image (t.SizedIcon);
+#if GTK_2_16
+				// override Gnome 2.28+ default setting not to show menuitem icons
+				this.SetAlwaysShowImage (true);
+#endif
+			}
+		}
+
+		public static TagMenuItem IndentedItem (Tag t)
+		{
+			System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
+
+			for (Category parent = t.Category;
+			     parent != null && parent.Category != null;
+			     parent = parent.Category)
+				label_builder.Append ("  ");
+
+			label_builder.Append (t.Name);
+			return new TagMenuItem (t, label_builder.ToString ());
+		}
+
+		protected TagMenuItem (IntPtr raw) : base (raw) {}
+	}
+
+	public TagMenu (MenuItem item, TagStore store)
+	{
+		if (item != null) {
+			item.Submenu = this;
+			item.Activated += HandlePopulate;
+		}
+
+		tag_store = store;
+	}
+
+	protected TagMenu (IntPtr raw) : base (raw) {}
+
+	public void Populate ()
+	{
+		Populate (false);
+	}
+
+	public int GetPosition (Tag t)
+	{
+		// FIXME right now this only works on flat menus
+
+		int i = 0;
+		foreach (Widget w in this.Children) {
+			TagMenuItem item = w as TagMenuItem;
+			if (item != null) {
+				if (t == item.Value)
+					return i;
+			}
+			i++;
+		}
+
+		return -1;
+	}
+
+	public void Populate (bool flat)
+	{
+		if (flat)
+			PopulateFlat (tag_store.RootCategory, this);
+		else
+			Populate (tag_store.RootCategory, this);
+
+		if (NewTagHandler != null) {
+			GtkUtil.MakeMenuSeparator (this);
+			GtkUtil.MakeMenuItem (this, Mono.Unix.Catalog.GetString ("Create New Tag..."),
+					"tag-new", NewTagHandler, true);
+		}
+	}
+
+        public void PopulateFlat (Category cat, Gtk.Menu parent)
+	{
+		foreach (Tag t in cat.Children) {
+			TagMenuItem item = TagMenuItem.IndentedItem (t);
+			parent.Append (item);
+			item.ShowAll ();
+
+			Category subcat = t as Category;
+			if (subcat != null && subcat.Children.Count != 0) {
+				PopulateFlat (t as Category, parent);
+			} else {
+				item.Activated += HandleActivate;
+			}
+		}
+	}
+
+	public void Populate (Category cat, Gtk.Menu parent)
+	{
+		Widget [] dead_pool = parent.Children;
+		for (int i = 0; i < dead_pool.Length; i++)
+			dead_pool [i].Destroy ();
+
+		foreach (Tag t in cat.Children) {
+			TagMenuItem item = new TagMenuItem (t);
+			parent.Append (item);
+			item.ShowAll ();
+
+			Category subcat = t as Category;
+			if (subcat != null && subcat.Children.Count != 0) {
+				Gtk.Menu submenu = new Menu ();
+				Populate (t as Category, submenu);
+
+				Gtk.SeparatorMenuItem sep = new Gtk.SeparatorMenuItem ();
+				submenu.Prepend (sep);
+				sep.ShowAll ();
+
+				TagMenuItem subitem = new TagMenuItem (t);
+				subitem.Activated += HandleActivate;
+				submenu.Prepend (subitem);
+				subitem.ShowAll ();
+
+				item.Submenu = submenu;
+			} else {
+				item.Activated += HandleActivate;
+			}
+		}
+	}
+
+	private void HandlePopulate (object obj, EventArgs args)
+	{
+		this.Populate ();
+	}
+
+	void HandleActivate (object obj, EventArgs args)
+	{
+		if (TagSelected != null) {
+			TagMenuItem t = obj as TagMenuItem;
+			if (t != null)
+				TagSelected (t.Value);
+			else
+				Log.Debug ("TagMenu.HandleActivate: Item was not a TagMenuItem");
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot.Widgets/TagView.cs b/src/Clients/MainApp/FSpot.Widgets/TagView.cs
new file mode 100644
index 0000000..557ac3b
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/TagView.cs
@@ -0,0 +1,124 @@
+/*
+ * FSpot.Widgets.TagView
+ *
+ * Author(s):
+ * 	Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using System;
+using Gtk;
+using Gdk;
+using FSpot.Core;
+
+namespace FSpot.Widgets {
+public class TagView : EventBox {
+	private int thumbnail_size = 20;
+	private IBrowsableItem photo;
+	private Tag [] tags;
+	private static int TAG_ICON_VSPACING = 5;
+
+	private bool HideTags {
+		get {
+			return (FSpot.Preferences.Get<int> (FSpot.Preferences.TAG_ICON_SIZE) == (int) Tag.IconSize.Hidden);
+		}
+	}
+
+
+	public TagView ()
+	{
+		VisibleWindow = false;
+	}
+
+	protected TagView (IntPtr raw) : base (raw)
+	{
+		VisibleWindow = false;
+	}
+
+	public IBrowsableItem Current {
+		set {
+			photo = value;
+
+			if (photo != null && photo.Tags != null && !HideTags) {
+				SetSizeRequest ((thumbnail_size + TAG_ICON_VSPACING) * photo.Tags.Length,
+						thumbnail_size);
+			} else {
+				SetSizeRequest (0, thumbnail_size);
+			}
+			QueueResize ();
+			QueueDraw ();
+		}
+	}
+
+	public Tag [] Tags {
+		get { return tags; }
+		set {
+			this.tags = value;
+			this.QueueDraw ();
+		}
+	}
+
+	protected override bool OnExposeEvent (Gdk.EventExpose args)
+	{
+		if (photo != null)
+			tags = photo.Tags;
+
+		if (tags == null || HideTags) {
+			SetSizeRequest(0,thumbnail_size);
+			return base.OnExposeEvent (args);
+		}
+
+		DrawTags();
+
+		return base.OnExposeEvent (args);
+	}
+
+	public void DrawTags()
+	{
+		if (tags == null)
+			return;
+
+		SetSizeRequest ((thumbnail_size + TAG_ICON_VSPACING) * tags.Length,
+				thumbnail_size);
+
+		int tag_x = Allocation.X;
+		int tag_y = Allocation.Y + (Allocation.Height - thumbnail_size)/2;
+
+		string [] names = new string [tags.Length];
+		int i = 0;
+		foreach (Tag t in tags) {
+			names [i++] = t.Name;
+
+			Pixbuf icon = t.Icon;
+
+			Category category = t.Category;
+			while (icon == null && category != null) {
+				icon = category.Icon;
+				category = category.Category;
+			}
+
+			if (icon == null)
+				continue;
+
+			Pixbuf scaled_icon;
+			if (icon.Width == thumbnail_size) {
+				scaled_icon = icon;
+			} else {
+				scaled_icon = icon.ScaleSimple (thumbnail_size, thumbnail_size, InterpType.Bilinear);
+			}
+				Cms.Profile screen_profile;
+				if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile))
+					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);
+			tag_x += thumbnail_size + TAG_ICON_VSPACING;
+		}
+
+        this.TooltipText =  String.Join (", ", names);
+	}
+}
+}
diff --git a/src/Widgets/Tests/FindBarTests.cs b/src/Clients/MainApp/FSpot.Widgets/Tests/FindBarTests.cs
similarity index 100%
rename from src/Widgets/Tests/FindBarTests.cs
rename to src/Clients/MainApp/FSpot.Widgets/Tests/FindBarTests.cs
diff --git a/src/Clients/MainApp/FSpot.Widgets/TrayView.cs b/src/Clients/MainApp/FSpot.Widgets/TrayView.cs
new file mode 100644
index 0000000..87c299e
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.Widgets/TrayView.cs
@@ -0,0 +1,56 @@
+/*
+ * TrayView.cs
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *
+ *
+ * Copyright (C) 2004 Novell, Inc.
+ * This is free software. See COPYING for details.
+ */
+
+using FSpot.Core;
+
+namespace FSpot.Widgets
+{
+	public class TrayView : IconView {
+		public TrayView (System.IntPtr raw) : base (raw) {}
+
+		public TrayView (IBrowsableCollection query) : base (query)
+		{
+			DisplayDates = false;
+			DisplayTags = false;
+			cell_border_width = 10;
+			tag_icon_vspacing = 0;
+			tag_icon_size = 0;
+		}
+
+		protected override void UpdateLayout ()
+		{
+			//DisplayDates = false;
+			//DisplayTags = false;
+
+			int total_rows;
+			int available_width = Allocation.Width - 2 * BORDER_SIZE;
+			cells_per_row = System.Math.Max (available_width / 256, 1);
+			int width = 0;
+			//int height = 0;
+
+			do {
+				cell_width = System.Math.Min (256, available_width / cells_per_row);
+				width = cell_width - 2 * cell_border_width;
+				cell_height = (int)(width / ThumbnailRatio) + 2 * cell_border_width;
+				total_rows = (int) System.Math.Ceiling (collection.Count / (double)cells_per_row);
+				cells_per_row ++;
+			} while (total_rows > Allocation.Height / cell_height);
+			cells_per_row --;
+
+
+			if (width != ThumbnailWidth) {
+				thumbnail_width = width;
+			}
+
+			//base.UpdateLayout ();
+		}
+	}
+}
diff --git a/src/Widgets/ViewContext.cs b/src/Clients/MainApp/FSpot.Widgets/ViewContext.cs
similarity index 100%
rename from src/Widgets/ViewContext.cs
rename to src/Clients/MainApp/FSpot.Widgets/ViewContext.cs
diff --git a/src/Clients/MainApp/FSpot.addin.xml b/src/Clients/MainApp/FSpot.addin.xml
new file mode 100644
index 0000000..172b884
--- /dev/null
+++ b/src/Clients/MainApp/FSpot.addin.xml
@@ -0,0 +1,84 @@
+<Addin namespace="FSpot"
+       id="Core"
+       version="0.8"
+       compatVersion="0.8"
+       isroot="true">
+
+	<Runtime>
+		<Import assembly="f-spot.exe" />
+		<Import assembly="FSpot.Gui.dll" />
+	</Runtime>
+
+	<ExtensionPoint path = "/FSpot/Editors">
+		<ExtensionNode type="FSpot.Editors.EditorNode"/>
+	</ExtensionPoint>
+
+	<ExtensionPoint path = "/FSpot/Menus">
+		<ExtensionNode type="FSpot.Extensions.SubmenuNode"/>
+	</ExtensionPoint>
+
+	<ExtensionPoint path = "/FSpot/Sidebar">
+		<ExtensionNode name="SidebarPage" type="FSpot.Extensions.SidebarPageNode"/>
+	</ExtensionPoint>
+
+	<ExtensionPoint path = "/FSpot/Services">
+		<ExtensionNode name="Service" type="FSpot.Extensions.ServiceNode"/>
+	</ExtensionPoint>
+
+	<ExtensionPoint path = "/FSpot/SlideShow">
+		<ExtensionNode name="Transition" type="FSpot.Extensions.TransitionNode"/>
+	</ExtensionPoint>
+
+	<Extension path = "/FSpot/Menus">
+		<Menu id="Exports" _label="Export to" />
+	</Extension>
+
+	<Extension path = "/FSpot/Menus">
+		<Menu id="Tools" _label="Tools" />
+	</Extension>
+
+	<Extension path = "/FSpot/Menus">
+		<Menu id = "PhotoPopup" />
+	</Extension>
+
+	<ConditionType id="PhotoSelection" type="FSpot.Extensions.PhotoSelectionCondition" />
+	<ConditionType id="ViewMode" type="FSpot.Extensions.ViewModeCondition" />
+
+	<Extension path = "/FSpot/Menus/PhotoPopup">
+		<Command id = "Copy" _label = "Copy Photo" command_type = "FSpot.Extensions.Copy" />
+		<MenuSeparator id = "Separator1" />
+		<Command id = "RLeft" _label = "Rotate _Left" icon = "object-rotate-left" command_type = "FSpot.Extensions.Rotate270" />
+		<Command id = "RRight" _label = "Rotate _Right" icon = "object-rotate-right" command_type = "FSpot.Extensions.Rotate90" />
+		<MenuSeparator id = "Separator2" />
+		<MenuGenerator id = "OpenWith" _label = "Open _With" icon = "gtk-open" generator_type = "FSpot.Extensions.OpenWith" />
+		<Command id = "Remove" _label = "_Remove From Catalog" command_type = "FSpot.Extensions.Remove" />
+		<Command id = "Delete" _label = "_Delete From Drive" command_type = "FSpot.Extensions.Delete" />
+		<MenuSeparator id = "Separator3" />
+		<MenuGenerator id = "RemoveTag" _label = "Rem_ove Tag" icon = "gtk-remove" generator_type = "FSpot.Extensions.RemoveTag" />
+		<ComplexMenuItem id = "Rate" widget_type = "FSpot.Widgets.RatingMenuItem"  command_type = "FSpot.Extensions.Rate"/>
+	</Extension>
+
+	<Extension path = "/FSpot/Sidebar">
+<!-- FIXME: Disabled until ported		<SidebarPage sidebar_page_type = "FSpot.Widgets.MetadataDisplayPage" /> -->
+		<Condition id="ViewMode" mode="library">
+			<SidebarPage sidebar_page_type = "FSpot.Widgets.EditorPage" />
+			<SidebarPage sidebar_page_type = "FSpot.Widgets.FolderTreePage" />
+		</Condition>
+	</Extension>
+
+	<Extension path = "/FSpot/Editors">
+		<Editor editor_type = "FSpot.Editors.CropEditor"/>
+		<Editor editor_type = "FSpot.Editors.RedEyeEditor"/>
+		<Editor editor_type = "FSpot.Editors.DesaturateEditor"/>
+		<Editor editor_type = "FSpot.Editors.SepiaEditor"/>
+		<Editor editor_type = "FSpot.Editors.TiltEditor"/>
+		<Editor editor_type = "FSpot.Editors.SoftFocusEditor"/>
+		<Editor editor_type = "FSpot.Editors.AutoStretchEditor"/>
+		<Editor editor_type = "FSpot.Editors.ColorEditor"/>
+	</Extension>
+
+	<Extension path = "/FSpot/SlideShow">
+		<Transition transition_type = "FSpot.Transitions.DissolveTransition"/>
+		<Transition transition_type = "FSpot.Transitions.PushTransition"/>
+	</Extension>
+</Addin>
diff --git a/src/Clients/MainApp/FSpot/Accelerometer.cs b/src/Clients/MainApp/FSpot/Accelerometer.cs
new file mode 100644
index 0000000..5fbb959
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/Accelerometer.cs
@@ -0,0 +1,134 @@
+//
+// Support for the ThinkPad accelerometer.
+//
+
+using System;
+using System.IO;
+
+using FSpot.Utils;
+using Hyena;
+using TagLib.Image;
+
+namespace FSpot {
+
+	public class Accelerometer {
+		public const string SYSFS_FILE = "/sys/devices/platform/hdaps/position";
+
+		public static event EventHandler OrientationChanged;
+
+		public enum Orient {
+			Normal,
+			TiltClockwise,
+			TiltCounterclockwise,
+		}
+
+		private static Orient current_orientation;
+
+		public static Orient CurrentOrientation {
+			get {
+				return current_orientation;
+			}
+		}
+
+		public Accelerometer ()
+		{
+		}
+
+		public static ImageOrientation GetViewOrientation (ImageOrientation po)
+		{
+			if (timer == 0 && available)
+				SetupAccelerometer ();
+
+			if (current_orientation == Orient.TiltCounterclockwise)
+				return FSpot.Utils.PixbufUtils.Rotate90 (po);
+
+			if (current_orientation == Orient.TiltClockwise)
+				return FSpot.Utils.PixbufUtils.Rotate270 (po);
+
+			return po;
+		}
+
+		static uint timer = 0;
+		static bool available = true;
+
+		public static void SetupAccelerometer ()
+		{
+			if (!System.IO.File.Exists (SYSFS_FILE)) {
+				available = false;
+				return;
+			}
+
+			int x, y;
+
+			// Call once to set a baseline value.
+			// Hopefully the laptop is flat when this is
+			// called.
+			GetHDAPSCoords (out x, out y);
+
+			timer = GLib.Timeout.Add (500, new GLib.TimeoutHandler (CheckOrientation));
+		}
+
+		private static bool CheckOrientation ()
+		{
+			Orient new_orient = GetScreenOrientation ();
+
+			if (new_orient != current_orientation) {
+				current_orientation = new_orient;
+
+				EventHandler eh = OrientationChanged;
+				if (eh != null)
+					eh (null, EventArgs.Empty);
+
+				Log.Debug ("Laptop orientation changed...");
+			}
+
+			return true;
+		}
+
+		public static Orient GetScreenOrientation ()
+		{
+			int x, y;
+
+			GetHDAPSCoords (out x, out y);
+
+			if (x > 40)
+				return Orient.TiltClockwise;
+
+			if (x < -40)
+				return Orient.TiltCounterclockwise;
+
+			return Orient.Normal;
+		}
+
+		static int base_x = -1000; // initial nonsense values
+		static int base_y = -1000;
+
+		private static void GetHDAPSCoords (out int x, out int y)
+		{
+			try {
+				using (Stream file = System.IO.File.OpenRead (SYSFS_FILE)) {
+					StreamReader sr = new StreamReader (file);
+
+					string s = sr.ReadLine ();
+					string [] ss = s.Substring (1, s.Length - 2).Split (',');
+					x = int.Parse (ss [0]);
+					y = int.Parse (ss [1]);
+
+					if (base_x == -1000)
+						base_x = x;
+
+					if (base_y == -1000)
+						base_y = y;
+
+					x -= base_x;
+					y -= base_y;
+
+					return;
+				}
+			} catch (IOException) {
+				x = 0;
+				y = 0;
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/App.cs b/src/Clients/MainApp/FSpot/App.cs
new file mode 100644
index 0000000..b966261
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/App.cs
@@ -0,0 +1,367 @@
+/*
+ * FSpot.Application.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * Copyright (c) 2009 Stephane Delcroix.
+ *
+ * This is open source software. See COPYING fro details.
+ */
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+
+using Unique;
+
+using Mono.Unix;
+
+using Hyena;
+
+using FSpot.Core;
+using FSpot.Database;
+
+namespace FSpot
+{
+	public class App : Unique.App
+	{
+		static object sync_handle = new object ();
+
+#region public API
+		static App app;
+		public static App Instance {
+			get {
+				lock (sync_handle) {
+					if (app == null)
+						app = new App ();
+				}
+				return app;
+			}
+		}
+
+		Thread constructing_organizer = null;
+
+		public MainWindow Organizer {
+			get {
+				lock (sync_handle) {
+					if (organizer == null) {
+						if (constructing_organizer == Thread.CurrentThread) {
+							throw new Exception ("Recursively tried to acquire App.Organizer!");
+						}
+
+						constructing_organizer = Thread.CurrentThread;
+						organizer = new MainWindow (Database);
+						Register (organizer.Window);
+					}
+				}
+				return organizer;
+			}
+		}
+
+		public Db Database {
+			get {
+				lock (sync_handle) {
+					if (db == null) {
+						if (!File.Exists (Global.BaseDirectory))
+							Directory.CreateDirectory (Global.BaseDirectory);
+
+						db = new Db ();
+
+						try {
+							db.Init (Path.Combine (Global.BaseDirectory, "photos.db"), true);
+						} catch (Exception e) {
+							new FSpot.UI.Dialog.RepairDbDialog (e, db.Repair (), null);
+							db.Init (Path.Combine (Global.BaseDirectory, "photos.db"), true);
+						}
+					}
+				}
+				return db;
+			}
+		}
+
+		public void Import (string path)
+		{
+			if (IsRunning) {
+				var md = new MessageData ();
+				md.Text = path;
+				SendMessage (Command.Import, md);
+				return;
+			}
+			HandleImport (path);
+		}
+
+		public void Organize ()
+		{
+			if (IsRunning) {
+				SendMessage (Command.Organize, null);
+				return;
+			}
+			HandleOrganize ();
+		}
+
+		public void Shutdown ()
+		{
+			if (IsRunning) {
+				SendMessage (Command.Shutdown, null);
+				return;
+			}
+			HandleShutdown ();
+		}
+
+		public void Slideshow (string tagname)
+		{
+			if (IsRunning) {
+				var md = new MessageData ();
+				md.Text = tagname ?? String.Empty;
+				SendMessage (Command.Slideshow, md);
+
+				return;
+			}
+			HandleSlideshow (tagname);
+		}
+
+		public void View (SafeUri uri)
+		{
+			View (new SafeUri[] {uri});
+		}
+
+		public void View (IEnumerable<SafeUri> uris)
+		{
+			var uri_s = from uri in uris select uri.ToString ();
+			View (uri_s);
+		}
+
+		public void View (string uri)
+		{
+			View (new string[] {uri});
+		}
+
+		public void View (IEnumerable<string> uris)
+		{
+			if (IsRunning) {
+				var md = new MessageData ();
+				md.Uris = uris.ToArray ();
+				SendMessage (Command.View, md);
+				return;
+			}
+			HandleView (uris.ToArray());
+		}
+#endregion
+
+#region private ctor and stuffs
+		enum Command {
+			Invalid = 0,
+			Import,
+			View,
+			Organize,
+			Shutdown,
+			Version,
+			Slideshow,
+		}
+
+		List<Gtk.Window> toplevels;
+		MainWindow organizer;
+		Db db;
+
+		App (): base ("org.gnome.FSpot.Core", null,
+				  "Import", Command.Import,
+				  "View", Command.View,
+				  "Organize", Command.Organize,
+				  "Shutdown", Command.Shutdown,
+				  "Slideshow", Command.Slideshow)
+		{
+			toplevels = new List<Gtk.Window> ();
+			if (IsRunning) {
+				Log.Information ("Found active FSpot process");
+			} else {
+				MessageReceived += HandleMessageReceived;
+			}
+		}
+
+		void SendMessage (Command command, MessageData md)
+		{
+			SendMessage ((Unique.Command)command, md);
+		}
+#endregion
+
+#region Command Handlers
+
+		void HandleMessageReceived (object sender, MessageReceivedArgs e)
+		{
+			switch ((Command)e.Command) {
+			case Command.Import:
+				HandleImport (e.MessageData.Text);
+				e.RetVal = Response.Ok;
+				break;
+			case Command.Organize:
+				HandleOrganize ();
+				e.RetVal = Response.Ok;
+				break;
+			case Command.Shutdown:
+				HandleShutdown ();
+				e.RetVal = Response.Ok;
+				break;
+			case Command.Slideshow:
+				HandleSlideshow (e.MessageData.Text);
+				e.RetVal = Response.Ok;
+				break;
+			case Command.View:
+				HandleView (e.MessageData.Uris);
+				e.RetVal = Response.Ok;
+				break;
+			case Command.Invalid:
+			default:
+				Log.Debug ("Wrong command received");
+				break;
+			}
+		}
+
+		void HandleImport (string path)
+		{
+			Organizer.Window.Present ();
+			Organizer.ImportFile (path == null ? null : new SafeUri(path));
+		}
+
+		void HandleOrganize ()
+		{
+			if (Database.Empty)
+				HandleImport (null);
+			else
+				Organizer.Window.Present ();
+		}
+
+		void HandleShutdown ()
+		{
+			try {
+				App.Instance.Organizer.Close ();
+			} catch {
+				System.Environment.Exit (0);
+			}
+		}
+
+		//FIXME move all this in a standalone class
+		void HandleSlideshow (string tagname)
+		{
+			Tag tag;
+			FSpot.Widgets.SlideShow slideshow = null;
+
+			if (!String.IsNullOrEmpty (tagname))
+				tag = Database.Tags.GetTagByName (tagname);
+			else
+				tag = Database.Tags.GetTagById (Preferences.Get<int> (Preferences.SCREENSAVER_TAG));
+
+			IBrowsableItem[] photos;
+			if (tag != null)
+				photos = Database.Photos.Query (new Tag[] {tag});
+			else if (Preferences.Get<int> (Preferences.SCREENSAVER_TAG) == 0)
+				photos = Database.Photos.Query (new Tag [] {});
+			else
+				photos = new IBrowsableItem [0];
+
+			// Minimum delay 1 second; default is 4s
+			var delay = Math.Max (1.0, Preferences.Get<double> (Preferences.SCREENSAVER_DELAY));
+
+			var window = new XScreenSaverSlide ();
+			window.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
+			window.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
+
+			if (photos.Length > 0) {
+				Array.Sort (photos, new IBrowsableItemComparer.RandomSort ());
+				slideshow = new FSpot.Widgets.SlideShow (new BrowsablePointer (new PhotoList (photos), 0), (uint)(delay * 1000), true);
+				slideshow.Transition = new FSpot.Transitions.DissolveTransition ();
+				window.Add (slideshow);
+			} else {
+				Gtk.HBox outer = new Gtk.HBox ();
+				Gtk.HBox hbox = new Gtk.HBox ();
+				Gtk.VBox vbox = new Gtk.VBox ();
+
+				outer.PackStart (new Gtk.Label (String.Empty));
+				outer.PackStart (vbox, false, false, 0);
+				vbox.PackStart (new Gtk.Label (String.Empty));
+				vbox.PackStart (hbox, false, false, 0);
+				hbox.PackStart (new Gtk.Image (Gtk.Stock.DialogWarning, Gtk.IconSize.Dialog),
+						false, false, 0);
+				outer.PackStart (new Gtk.Label (String.Empty));
+
+				string msg;
+				string long_msg;
+
+				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);
+				} 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.");
+				}
+
+				Gtk.Label label = new Gtk.Label (msg);
+				hbox.PackStart (label, false, false, 0);
+
+				Gtk.Label long_label = new Gtk.Label (long_msg);
+				long_label.Markup  = String.Format ("<small>{0}</small>", long_msg);
+
+				vbox.PackStart (long_label, false, false, 0);
+				vbox.PackStart (new Gtk.Label (String.Empty));
+
+				window.Add (outer);
+				label.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
+				label.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
+				long_label.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
+				long_label.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
+			}
+			window.ShowAll ();
+
+			Register (window);
+			GLib.Idle.Add (delegate {
+				if (slideshow != null)
+					slideshow.Start ();
+				return false;
+			});
+		}
+
+		void HandleView (string[] uris)
+		{
+			List<SafeUri> ul = new List<SafeUri> ();
+			foreach (var u in uris)
+				ul.Add (new SafeUri (u, true));
+			try {
+				Register (new FSpot.SingleView (ul.ToArray ()).Window);
+			} catch (System.Exception e) {
+				Log.Exception (e);
+				Log.Debug ("no real valid path to view from");
+			}
+		}
+
+#endregion
+
+#region Track toplevel windows
+		void Register (Gtk.Window window)
+		{
+			toplevels.Add (window);
+			window.Destroyed += HandleDestroyed;
+		}
+
+		void HandleDestroyed (object sender, EventArgs e)
+		{
+			toplevels.Remove (sender as Gtk.Window);
+			if (toplevels.Count == 0) {
+				Log.Information ("Exiting...");
+				Banshee.Kernel.Scheduler.Dispose ();
+				Database.Dispose ();
+				ImageLoaderThread.CleanAll ();
+				Gtk.Application.Quit ();
+				System.Environment.Exit (0);
+			}
+			if (organizer != null && organizer.Window == sender)
+				organizer = null;
+		}
+#endregion
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/BitConverter.cs b/src/Clients/MainApp/FSpot/BitConverter.cs
new file mode 100644
index 0000000..4e55070
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/BitConverter.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace FSpot {
+	//[Obsolete ("use Mono.DataConvert instead")]
+	public class BitConverter {
+		public static uint Swap (uint val, bool little)
+		{
+			return (little != System.BitConverter.IsLittleEndian) ?
+				((uint) ((((uint) (val) & (uint) 0x000000ffU) << 24) |
+					 (((uint) (val) & (uint) 0x0000ff00U) <<  8) |
+					 (((uint) (val) & (uint) 0x00ff0000U) >>  8) |
+					 (((uint) (val) & (uint) 0xff000000U) >> 24)))
+				: val;
+		}
+
+		public static ushort Swap (ushort val, bool little)
+		{
+			return (little != System.BitConverter.IsLittleEndian) ?
+				((ushort) ((ushort)(val >> 8) | (ushort)(val << 8)))
+				: val;
+		}
+
+		public static ushort Swap (ushort val)
+		{
+			return ((ushort) ((ushort)(val >> 8) | (ushort)(val << 8)));
+		}
+
+		public static ulong Swap (ulong val, bool little)
+		{
+		        return (little != System.BitConverter.IsLittleEndian) ?
+			((ulong) ((((ulong) (val) & (ulong) 0x00000000000000ffU) << 56) |
+				  (((ulong) (val) & (ulong) 0x000000000000ff00U) << 40) |
+				  (((ulong) (val) & (ulong) 0x0000000000ff0000U) << 24) |
+				  (((ulong) (val) & (ulong) 0x00000000ff000000U) <<  8) |
+				  (((ulong) (val) & (ulong) 0x000000ff00000000U) >>  8) |
+				  (((ulong) (val) & (ulong) 0x0000ff0000000000U) >> 24) |
+				  (((ulong) (val) & (ulong) 0x00ff000000000000U) >> 40) |
+				  (((ulong) (val) & (ulong) 0xff00000000000000U) >> 56)))
+				: val;
+		}
+
+		public static byte [] GetBytes (uint val, bool little)
+		{
+			val = Swap (val, little);
+			return System.BitConverter.GetBytes (val);
+		}
+
+		public static byte [] GetBytes (ushort val, bool little)
+		{
+			val = Swap (val, little);
+			return System.BitConverter.GetBytes (val);
+		}
+
+		public static byte [] GetBytes (ulong val, bool little)
+		{
+			val = Swap (val, little);
+			return System.BitConverter.GetBytes (val);
+		}
+
+		public static ushort ToUInt16 (byte [] data, int position, bool little)
+		{
+			ushort val = System.BitConverter.ToUInt16 (data, position);
+			return Swap (val, little);
+		}
+
+		public static uint ToUInt32 (byte [] data, int position, bool little)
+		{
+			uint val = System.BitConverter.ToUInt32 (data, position);
+			return Swap (val, little);
+		}
+
+		public static float ToSingle (byte [] data, int position, bool little)
+		{
+			float retval;
+			unsafe {
+				uint * ptr;
+				ptr = (uint *)&retval;
+				*ptr = ToUInt32 (data, position, little);
+			}
+			return retval;
+		}
+
+		public static int ToInt32 (byte [] data, int position, bool little)
+		{
+			return unchecked ((int) ToUInt32 (data, position, little));
+		}
+
+		public static ulong ToUInt64 (byte [] data, int position, bool little)
+		{
+			ulong val = System.BitConverter.ToUInt64(data, position);
+			return Swap (val, little);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/ColorManagement.cs b/src/Clients/MainApp/FSpot/ColorManagement.cs
new file mode 100644
index 0000000..111fbb5
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/ColorManagement.cs
@@ -0,0 +1,100 @@
+/*
+ * FSpot.Core.ColorManagement.cs
+ *
+ * Author(s):
+ * 	Vasiliy Kirilichev <vasyok at gmail.com>
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * Copyright (c) 2008-2009 Novell, Inc.
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using FSpot.Core;
+
+namespace FSpot {
+	public static class ColorManagement {
+		static string [] search_dir = { "/usr/share/color/icc", Path.Combine (Global.HomeDirectory, ".color/icc"), "/usr/local/share/color/icc " };
+
+		static Dictionary<string, Cms.Profile> profiles;
+		public static IDictionary<string, Cms.Profile> Profiles {
+			get {
+				if (profiles == null) {
+					profiles = new Dictionary<string, Cms.Profile> ();
+					Cms.Profile p = Cms.Profile.CreateStandardRgb ();
+					if (!profiles.ContainsKey (p.ProductDescription))
+						profiles.Add (p.ProductDescription, p);
+
+					p = Cms.Profile.CreateAlternateRgb ();
+					if (!profiles.ContainsKey (p.ProductDescription))
+						profiles.Add (p.ProductDescription, p);
+
+					foreach (var path in search_dir)
+						if (!profiles.ContainsKey (path))
+							AddProfiles (path, profiles);
+
+					if (XProfile != null)
+						if (!profiles.ContainsKey ("_x_profile_"))
+							profiles.Add ("_x_profile_", XProfile);
+				}
+				return profiles;
+			}
+		}
+
+		static Cms.Profile x_profile;
+		public static Cms.Profile XProfile {
+			get {
+				if (x_profile == null)
+					x_profile = Cms.Profile.GetScreenProfile (Gdk.Screen.Default);
+				return x_profile;
+			}
+		}
+
+		private static void AddProfiles (string path, IDictionary<string, Cms.Profile> profs)
+		{
+			//recursive search, only RGB color profiles would be added
+			if (Directory.Exists (path)) {
+				string[] IccColorProfilList = System.IO.Directory.GetFiles (path, "*.icc");
+				foreach (string ColorProfilePath in IccColorProfilList) {
+					Cms.Profile profile = new Cms.Profile (ColorProfilePath);
+					if ((Cms.IccColorSpace)profile.ColorSpace == Cms.IccColorSpace.Rgb && profile.ProductDescription != null && !profs.ContainsKey (profile.ProductDescription))
+						profs.Add(profile.ProductDescription, profile);
+				}
+				string[] IcmColorProfilList = System.IO.Directory.GetFiles (path, "*.icm");
+				foreach (string ColorProfilePath in IcmColorProfilList) {
+					Cms.Profile profile = new Cms.Profile (ColorProfilePath);
+					if ((Cms.IccColorSpace)profile.ColorSpace == Cms.IccColorSpace.Rgb && profile.ProductDescription != null && !profs.ContainsKey (profile.ProductDescription))
+						profs.Add(profile.ProductDescription, profile);
+				}
+				string[] DirList = System.IO.Directory.GetDirectories (path);
+					foreach (string dir in DirList)
+						AddProfiles (dir, profs);
+			}
+		}
+
+		public static void ApplyProfile (Gdk.Pixbuf pixbuf, Cms.Profile destination_profile)
+		{
+			ApplyProfile (pixbuf, Cms.Profile.CreateStandardRgb (), destination_profile);
+		}
+
+		public static void ApplyProfile (Gdk.Pixbuf pixbuf, Cms.Profile image_profile, Cms.Profile destination_profile)
+		{
+			if (pixbuf == null || pixbuf.HasAlpha)
+				return;
+
+			image_profile = image_profile ?? Cms.Profile.CreateStandardRgb ();
+
+			Cms.Profile [] list = new Cms.Profile [] { image_profile, destination_profile };
+			Cms.Transform transform = new Cms.Transform (list,
+								     PixbufUtils.PixbufCmsFormat (pixbuf),
+								     PixbufUtils.PixbufCmsFormat (pixbuf),
+								     Cms.Intent.Perceptual,
+								     0x0000);
+			PixbufUtils.ColorAdjust (pixbuf, pixbuf, transform);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/ControlOverlay.cs b/src/Clients/MainApp/FSpot/ControlOverlay.cs
new file mode 100644
index 0000000..c344e06
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/ControlOverlay.cs
@@ -0,0 +1,301 @@
+/*
+ * ControlOverlay.cs
+ *
+ * Copyright 2007 Novell Inc.
+ *
+ * Author
+ *   Larry Ewing <lewing at novell.com>
+ *
+ * See COPYING for license information.
+ */
+using Cairo;
+
+using System;
+using Gtk;
+using FSpot.Widgets;
+using FSpot.Utils;
+using FSpot.Core;
+
+namespace FSpot {
+	public class ControlOverlay : Window {
+		Widget host;
+		Window host_toplevel;
+		bool composited;
+		VisibilityType visibility;
+		int round = 12;
+		Delay hide;
+		Delay fade;
+		Delay dismiss;
+		bool auto_hide = true;
+		double x_align = 0.5;
+		double y_align = 1.0;
+
+		public enum VisibilityType
+		{
+			None,
+			Partial,
+			Full
+		}
+
+		public double XAlign {
+			get { return x_align; }
+			set {
+				x_align = value;
+				Relocate ();
+			}
+		}
+
+		public double YAlign {
+			get { return  y_align; }
+			set {
+				y_align = value;
+				Relocate ();
+			}
+		}
+
+
+		public bool AutoHide {
+			get { return auto_hide; }
+			set { auto_hide = value; }
+		}
+
+		public VisibilityType Visibility {
+			get { return visibility; }
+			set {
+				if (dismiss.IsPending && value != VisibilityType.None)
+					return;
+
+				switch (value) {
+				case VisibilityType.None:
+					FadeToTarget (0.0);
+					break;
+				case VisibilityType.Partial:
+					FadeToTarget (0.4);
+					break;
+				case VisibilityType.Full:
+					FadeToTarget (0.8);
+					break;
+				}
+				visibility = value;
+			}
+
+		}
+
+		public ControlOverlay (Gtk.Widget host) : base (WindowType.Popup)
+		{
+			this.host = host;
+			Decorated = false;
+			DestroyWithParent = true;
+			Name = "FullscreenContainer";
+			AllowGrow = true;
+			//AllowShrink = true;
+			KeepAbove = true;
+
+			host_toplevel = (Gtk.Window) host.Toplevel;
+
+			TransientFor = host_toplevel;
+
+			host_toplevel.ConfigureEvent += HandleHostConfigure;
+			host_toplevel.SizeAllocated += HandleHostSizeAllocated;
+
+			AddEvents ((int) (Gdk.EventMask.PointerMotionMask));
+			hide = new Delay (2000, HideControls);
+			fade = new Delay (40, FadeToTarget);
+			dismiss = new Delay (2000, delegate { /* do nothing */ return false; });
+		}
+
+		protected override void OnDestroyed ()
+		{
+			hide.Stop ();
+			fade.Stop ();
+			base.OnDestroyed ();
+		}
+
+		public bool HideControls ()
+		{
+			int x, y;
+			Gdk.ModifierType type;
+
+			if (!auto_hide)
+				return false;
+
+			if (IsRealized) {
+				GdkWindow.GetPointer (out x, out y, out type);
+				if (Allocation.Contains (x, y)) {
+					hide.Start ();
+					return true;
+				}
+			}
+
+			hide.Stop ();
+			Visibility = VisibilityType.None;
+			return false;
+		}
+
+		protected virtual void ShapeSurface (Context cr, Cairo.Color color)
+		{
+			cr.Operator = Operator.Source;
+			Cairo.Pattern p = new Cairo.SolidPattern (new Cairo.Color (0, 0, 0, 0));
+			cr.Source = p;
+			p.Destroy ();
+			cr.Paint ();
+			cr.Operator = Operator.Over;
+
+			Cairo.Pattern r = new SolidPattern (color);
+			cr.Source = r;
+			r.Destroy ();
+			cr.MoveTo (round, 0);
+			if (x_align == 1.0)
+				cr.LineTo (Allocation.Width, 0);
+			else
+				cr.Arc (Allocation.Width - round, round, round, - Math.PI * 0.5, 0);
+			if (x_align == 1.0 || y_align == 1.0)
+				cr.LineTo (Allocation.Width, Allocation.Height);
+			else
+				cr.Arc (Allocation.Width - round, Allocation.Height - round, round, 0, Math.PI * 0.5);
+			if (y_align == 1.0)
+				cr.LineTo (0, Allocation.Height);
+			else
+				cr.Arc (round, Allocation.Height - round, round, Math.PI * 0.5, Math.PI);
+			cr.Arc (round, round, round, Math.PI, Math.PI * 1.5);
+			cr.ClosePath ();
+			cr.Fill ();
+		}
+
+		double target;
+		double opacity = 0;
+
+		bool FadeToTarget ()
+		{
+			//Log.Debug ("op {0}\ttarget{1}", opacity, target);
+			Visible = (opacity > 0.05);
+			if (Math.Abs (target - opacity) < .05)
+				return false;
+			if (target > opacity)
+				opacity += .04;
+			else
+				opacity -= .04;
+			if (Visible)
+				CompositeUtils.SetWinOpacity (this, opacity);
+			else
+				Hide ();
+			return true;
+		}
+
+		bool FadeToTarget (double target)
+		{
+			//Log.Debug ("FadeToTarget {0}", target);
+			Realize ();
+			this.target = target;
+			fade.Start ();
+
+			if (target > 0.0)
+				hide.Restart ();
+
+			return false;
+		}
+
+		private void ShapeWindow ()
+		{
+			if (composited)
+				return;
+
+			Gdk.Pixmap bitmap = new Gdk.Pixmap (GdkWindow,
+							    Allocation.Width,
+							    Allocation.Height, 1);
+
+			Context cr = Gdk.CairoHelper.Create (bitmap);
+			ShapeCombineMask (bitmap, 0, 0);
+			ShapeSurface (cr, new Color (1, 1, 1));
+			ShapeCombineMask (bitmap, 0, 0);
+			((IDisposable)cr).Dispose ();
+			bitmap.Dispose ();
+
+		}
+
+		protected override bool OnExposeEvent (Gdk.EventExpose args)
+		{
+			Gdk.Color c = Style.Background (State);
+			Context cr = Gdk.CairoHelper.Create (GdkWindow);
+
+			ShapeSurface (cr, new Cairo.Color (c.Red / (double) ushort.MaxValue,
+							   c.Blue / (double) ushort.MaxValue,
+							   c.Green / (double) ushort.MaxValue,
+							   0.8));
+
+			((IDisposable)cr).Dispose ();
+			return base.OnExposeEvent (args);
+		}
+
+		protected override bool OnMotionNotifyEvent (Gdk.EventMotion args)
+		{
+			this.Visibility = VisibilityType.Full;
+			base.OnMotionNotifyEvent (args);
+			return false;
+		}
+
+		protected override void OnSizeAllocated (Gdk.Rectangle rec)
+		{
+			base.OnSizeAllocated (rec);
+			Relocate ();
+			ShapeWindow ();
+			QueueDraw ();
+		}
+
+		private void HandleHostSizeAllocated (object o, SizeAllocatedArgs args)
+		{
+			Relocate ();
+		}
+
+		private void HandleHostConfigure (object o, ConfigureEventArgs args)
+		{
+			Relocate ();
+		}
+
+		private void Relocate ()
+		{
+			int x, y;
+			if (!IsRealized || !host_toplevel.IsRealized)
+				return;
+
+			host.GdkWindow.GetOrigin (out x, out y);
+
+			int xOrigin = x;
+			int yOrigin = y;
+
+			x += (int) (host.Allocation.Width * x_align);
+			y += (int) (host.Allocation.Height * y_align);
+
+			x -= (int) (Allocation.Width * 0.5);
+			y -= (int) (Allocation.Height * 0.5);
+
+			x = Math.Max (0, Math.Min (x, xOrigin + host.Allocation.Width - Allocation.Width));
+			y = Math.Max (0, Math.Min (y, yOrigin + host.Allocation.Height - Allocation.Height));
+
+			Move (x, y);
+		}
+
+		protected override void OnRealized ()
+		{
+			composited = CompositeUtils.IsComposited (Screen) && CompositeUtils.SetRgbaColormap (this);
+			AppPaintable = composited;
+
+			base.OnRealized ();
+
+			ShapeWindow ();
+			Relocate ();
+		}
+
+		public void Dismiss ()
+		{
+			Visibility = VisibilityType.None;
+			dismiss.Start ();
+		}
+
+		protected override void OnMapped ()
+		{
+			base.OnMapped ();
+			Relocate ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/DragDropTargets.cs b/src/Clients/MainApp/FSpot/DragDropTargets.cs
new file mode 100644
index 0000000..a925961
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/DragDropTargets.cs
@@ -0,0 +1,55 @@
+/*
+ * FSpot.DragDropTargets.cs
+ *
+ * Author(s)
+ * 	Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Gtk;
+
+namespace FSpot
+{
+	public static class DragDropTargets
+	{
+		enum TargetType : uint {
+			PlainText = 0,
+			UriList,
+			TagList,
+			TagQueryItem,
+			UriQueryItem,
+			PhotoList,
+			RootWindow,
+			CopyFiles,
+		};
+
+		[Obsolete ("better use gtk_target_list_add_text_targets")]
+		public static readonly TargetEntry PlainTextEntry =
+			new TargetEntry ("text/plain", 0, (uint)TargetType.PhotoList);
+
+		public static readonly TargetEntry PhotoListEntry =
+			new TargetEntry ("application/x-fspot-photos", 0, (uint)TargetType.PhotoList);
+
+		[Obsolete ("Use gtk_target_list_add_uri_target")]
+		public static readonly TargetEntry UriListEntry =
+			new TargetEntry ("text/uri-list", 0, (uint)TargetType.UriList);
+
+		public static readonly TargetEntry TagListEntry =
+			new TargetEntry ("application/x-fspot-tags", 0, (uint)TargetType.TagList);
+
+		/* FIXME: maybe we need just one fspot-query-item */
+		public static readonly TargetEntry UriQueryEntry =
+			new TargetEntry ("application/x-fspot-uri-query-item", 0, (uint)TargetType.UriQueryItem);
+
+		public static readonly TargetEntry TagQueryEntry =
+			new TargetEntry ("application/x-fspot-tag-query-item", 0, (uint)TargetType.TagQueryItem);
+
+		public static readonly TargetEntry RootWindowEntry =
+			new TargetEntry ("application/x-root-window-drop", 0, (uint)TargetType.RootWindow);
+
+		public static readonly TargetEntry CopyFilesEntry =
+			new TargetEntry ("x-special/gnome-copied-files", 0, (uint)TargetType.CopyFiles);
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/ExportStore.cs b/src/Clients/MainApp/FSpot/ExportStore.cs
new file mode 100644
index 0000000..7fbff5d
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/ExportStore.cs
@@ -0,0 +1,150 @@
+using Gdk;
+using Gtk;
+using System.Collections;
+using System.IO;
+using System.Data;
+using System;
+using FSpot;
+using FSpot.Core;
+using FSpot.Database;
+using Hyena.Data.Sqlite;
+
+namespace FSpot {
+public class ExportItem : DbItem {
+
+    private uint image_id;
+    public uint ImageId {
+        get { return image_id; }
+        set { image_id = value; }
+    }
+
+    private uint image_version_id;
+    public uint ImageVersionId {
+        get { return image_version_id; }
+        set { image_version_id = value; }
+    }
+
+    private string export_type;
+    public string ExportType {
+        get { return export_type; }
+        set { export_type = value; }
+    }
+
+    private string export_token;
+    public string ExportToken {
+        get { return export_token; }
+        set { export_token = value; }
+    }
+
+    public ExportItem (uint id, uint image_id, uint image_version_id, string export_type, string export_token) : base (id)
+    {
+        this.image_id = image_id;
+        this.image_version_id = image_version_id;
+        this.export_type = export_type;
+        this.export_token = export_token;
+    }
+}
+
+public class ExportStore : DbStore<ExportItem> {
+
+	public const string FlickrExportType = "fspot:Flickr";
+	public const string OldFolderExportType = "fspot:Folder"; //This is obsolete and meant to be remove once db reach rev4
+	public const string FolderExportType = "fspot:FolderUri";
+	public const string PicasaExportType = "fspot:Picasa";
+	public const string SmugMugExportType = "fspot:SmugMug";
+	public const string Gallery2ExportType = "fspot:Gallery2";
+
+	private void CreateTable ()
+	{
+		Database.Execute (
+			"CREATE TABLE exports (\n" +
+			"	id			INTEGER PRIMARY KEY NOT NULL, \n" +
+			"	image_id		INTEGER NOT NULL, \n" +
+			"	image_version_id	INTEGER NOT NULL, \n" +
+			"	export_type		TEXT NOT NULL, \n" +
+			"	export_token		TEXT NOT NULL\n" +
+			")");
+	}
+
+	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 ());
+	}
+
+	private void LoadAllItems ()
+	{
+		IDataReader reader = Database.Query("SELECT id, image_id, image_version_id, export_type, export_token FROM exports");
+
+		while (reader.Read ()) {
+			AddToCache (LoadItem (reader));
+		}
+
+		reader.Close ();
+	}
+
+	public ExportItem Create (uint image_id, uint image_version_id, string export_type, string export_token)
+	{
+		int id = Database.Execute(new HyenaSqliteCommand("INSERT INTO exports (image_id, image_version_id, export_type, export_token) VALUES (?, ?, ?, ?)",
+		image_id, image_version_id, export_type, export_token));
+
+		ExportItem item = new ExportItem ((uint)id, image_id, image_version_id, export_type, export_token);
+
+		AddToCache (item);
+		EmitAdded (item);
+
+		return item;
+	}
+
+	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));
+
+		EmitChanged (item);
+	}
+
+	public override ExportItem Get (uint id)
+	{
+            // we never use this
+            return null;
+	}
+
+	public ArrayList GetByImageId (uint image_id, uint image_version_id)
+	{
+
+		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));
+		ArrayList list = new ArrayList ();
+		while (reader.Read ()) {
+			list.Add (LoadItem (reader));
+		}
+		reader.Close ();
+
+		return list;
+	}
+
+	public override void Remove (ExportItem item)
+	{
+		RemoveFromCache (item);
+
+		Database.Execute(new HyenaSqliteCommand("DELETE FROM exports WHERE id = ?", item.Id));
+
+		EmitRemoved (item);
+	}
+
+	// Constructor
+
+	public ExportStore (FSpotDatabaseConnection database, bool is_new)
+		: base (database, true)
+	{
+		if (is_new || !Database.TableExists ("exports"))
+			CreateTable ();
+		else
+			LoadAllItems ();
+	}
+}
+}
diff --git a/src/Clients/MainApp/FSpot/Fader.cs b/src/Clients/MainApp/FSpot/Fader.cs
new file mode 100644
index 0000000..34cee13
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/Fader.cs
@@ -0,0 +1,49 @@
+/*
+ * Fader.cs
+ *
+ * Copyright 2007 Novell Inc.
+ *
+ * Author
+ *   Larry Ewing <lewing at novell.com>
+ *
+ * See COPYING for license information.
+ *
+ */
+using System;
+using Gtk;
+using FSpot.Widgets;
+using FSpot.Bling;
+
+namespace FSpot {
+	public class Fader {
+		bool composited;
+		Gtk.Window win;
+		DoubleAnimation fadin;
+
+		public Fader (Gtk.Window win, double target, double msec)
+		{
+			this.win = win;
+			win.Mapped += HandleMapped;
+			win.Unmapped += HandleUnmapped;
+			fadin = new DoubleAnimation (0.0, target, TimeSpan.FromMilliseconds(msec), delegate (double opacity) {
+				CompositeUtils.SetWinOpacity (win, opacity);
+			});
+		}
+
+		[GLib.ConnectBefore]
+		public void HandleMapped (object sender, EventArgs args)
+		{
+			composited = CompositeUtils.SupportsHint (win.Screen, "_NET_WM_WINDOW_OPACITY");
+			if (!composited)
+				return;
+
+			CompositeUtils.SetWinOpacity (win, 0.0);
+			fadin.Start ();
+		}
+
+		public void HandleUnmapped (object sender, EventArgs args)
+		{
+			fadin.Stop ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/FolderQueryWidget.cs b/src/Clients/MainApp/FSpot/FolderQueryWidget.cs
new file mode 100644
index 0000000..356940c
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/FolderQueryWidget.cs
@@ -0,0 +1,116 @@
+/*
+ * FSpot.FolderQueryWidget.cs
+ *
+ * Author(s)
+ * 	Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+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
+{
+	public class FolderQueryWidget : HBox
+	{
+		PhotoQuery query;
+		FolderSet folder_set;
+
+		public FolderQueryWidget (PhotoQuery query) : base ()
+		{
+			folder_set = new FolderSet ();
+			this.query = query;
+
+			query.SetCondition (folder_set);
+
+			Drag.DestSet (this, DestDefaults.All,
+			              folder_query_widget_source_table,
+			              Gdk.DragAction.Copy | Gdk.DragAction.Move);
+		}
+
+		void UpdateGui ()
+		{
+			while (Children.Length != 0)
+				Remove (Children[0]);
+
+			int length = folder_set.Folders.Count ();
+
+			if (length == 0) {
+				Hide ();
+				return;
+			}
+
+			if (length < 4) {
+
+				foreach (var uri in folder_set.Folders) {
+					Image image = new Image ("gtk-directory", IconSize.Button);
+					image.TooltipText = uri.ToString ();
+					PackStart (image);
+				}
+
+				TooltipText = String.Empty;
+
+			} else {
+
+				Label label = new Label (String.Format ("<i>{0}x</i>", length));
+				label.UseMarkup = true;
+				PackStart (label);
+
+				Image image = new Image ("gtk-directory", IconSize.Button);
+				PackStart (image);
+
+				StringBuilder builder = new StringBuilder ();
+				foreach (var uri in folder_set.Folders) {
+					if (builder.Length > 0)
+						builder.AppendLine ();
+
+					builder.Append (uri.ToString ());
+				}
+
+				TooltipText = builder.ToString ();
+			}
+
+			ShowAll ();
+		}
+
+		public void SetFolders (IEnumerable<SafeUri> uris)
+		{
+			folder_set.Folders = uris;
+
+			UpdateGui ();
+		}
+
+		public void Clear ()
+		{
+			folder_set.Folders = null;
+		}
+
+		public bool Empty {
+			get { return folder_set.Folders == null || folder_set.Folders.Count () == 0; }
+		}
+
+		private static TargetEntry [] folder_query_widget_source_table =
+			new TargetEntry [] {
+				DragDropTargets.UriQueryEntry
+		};
+
+		protected override void OnDragDataReceived (Gdk.DragContext context, int x, int y, Gtk.SelectionData selection_data, uint info, uint time_)
+		{
+			base.OnDragDataReceived (context, x, y, selection_data, info, time_);
+
+			SetFolders (selection_data.GetUriListData ());
+			query.RequestReload ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/FullScreenView.cs b/src/Clients/MainApp/FSpot/FullScreenView.cs
new file mode 100644
index 0000000..3d76b04
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/FullScreenView.cs
@@ -0,0 +1,355 @@
+/*
+ * FSpot.FullScreenView
+ *
+ * Author(s):
+ * 	Larry Ewing  <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Gtk;
+using Gdk;
+using FSpot.Core;
+using FSpot.Widgets;
+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;
+		private ToolButton play_pause_button;
+		private ToggleToolButton info_button;
+		private Delay hide_cursor_delay;
+
+		ActionGroup actions;
+		const string ExitFullScreen = "ExitFullScreen";
+		const string HideToolbar = "HideToolbar";
+		const string SlideShow = "SlideShow";
+		const string Info = "Info";
+
+		public FullScreenView (IBrowsableCollection collection, Gtk.Window parent) : base ("Full Screen Mode")
+		{
+			//going fullscreen on the same screen the parent window
+			Gdk.Screen screen = Screen;
+			int monitor = screen.GetMonitorAtWindow (parent.GdkWindow);
+			Gdk.Rectangle bounds = screen.GetMonitorGeometry (monitor);
+			Move (bounds.X, bounds.Y);
+
+			string style = "style \"test\" {\n" +
+				"GtkToolbar::shadow_type = GTK_SHADOW_NONE\n" +
+				"}\n" +
+				"class \"GtkToolbar\" style \"test\"";
+
+			Gtk.Rc.ParseString (style);
+
+			Name = "FullscreenContainer";
+			try {
+				//scroll = new Gtk.ScrolledWindow (null, null);
+				actions = new ActionGroup ("joe");
+
+				actions.Add (new ActionEntry [] {
+					new ActionEntry (HideToolbar, Stock.Close,
+							 Catalog.GetString ("Hide"),
+							 null,
+							 Catalog.GetString ("Hide toolbar"),
+							 HideToolbarAction)});
+
+				actions.Add (new ToggleActionEntry [] {
+					new ToggleActionEntry (Info,
+							       Stock.Info,
+							       Catalog.GetString ("Info"),
+							       null,
+							       Catalog.GetString ("Image information"),
+							       InfoAction,
+							       false)});
+
+				Gtk.Action exit_full_screen = new Gtk.Action (ExitFullScreen,
+					Catalog.GetString ("Exit fullscreen"),
+					null,
+					null);
+				exit_full_screen.IconName = "view-restore";
+				exit_full_screen.Activated += ExitAction;
+				actions.Add (exit_full_screen);
+
+				Gtk.Action slide_show = new Gtk.Action (SlideShow,
+					Catalog.GetString ("Slideshow"),
+					Catalog.GetString ("Start slideshow"),
+					null);
+				slide_show.IconName = "media-playback-start";
+				slide_show.Activated += SlideShowAction;
+				actions.Add (slide_show);
+
+				new Fader (this, 1.0, 600);
+				notebook = new Notebook ();
+				notebook.ShowBorder = false;
+				notebook.ShowTabs = false;
+				notebook.Show ();
+
+				scroll = new ScrolledView ();
+				scroll.ScrolledWindow.SetPolicy (PolicyType.Never, PolicyType.Never);
+				view = new PhotoImageView (collection);
+				// FIXME this should be handled by the new style setting code
+				view.ModifyBg (Gtk.StateType.Normal, this.Style.Black);
+				this.Add (notebook);
+				view.Show ();
+				view.MotionNotifyEvent += HandleViewMotion;
+				view.PointerMode = PointerMode.Scroll;
+
+				scroll.ScrolledWindow.Add (view);
+
+				Toolbar tbar = new Toolbar ();
+				tbar.ToolbarStyle = Gtk.ToolbarStyle.BothHoriz;
+
+				tbar.ShowArrow = false;
+				tbar.BorderWidth = 15;
+
+				ToolItem t_item = (actions [ExitFullScreen]).CreateToolItem () as ToolItem;
+				t_item.IsImportant = true;
+				tbar.Insert (t_item, -1);
+
+				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);
+				actions.Add (action);
+				tbar.Insert (action.CreateToolItem () as ToolItem, -1);
+
+				t_item = new ToolItem ();
+				t_item.Child = new Label (Catalog.GetString ("Slide transition:"));
+				tbar.Insert (t_item, -1);
+
+				display = new SlideShow (view.Item);
+				display.AddEvents ((int) (Gdk.EventMask.PointerMotionMask));
+				display.ModifyBg (Gtk.StateType.Normal, this.Style.Black);
+				display.MotionNotifyEvent += HandleViewMotion;
+				display.Show ();
+
+				t_item = new ToolItem ();
+				ComboBox combo = ComboBox.NewText ();
+				foreach (var transition in display.Transitions)
+					combo.AppendText (transition.Name);
+				combo.Active = 0;
+				combo.Changed += HandleTransitionChanged;
+				t_item.Child = combo;
+				tbar.Insert (t_item, -1);
+
+				action = new RotateLeftAction (view.Item);
+				actions.Add (action);
+				tbar.Insert (action.CreateToolItem () as ToolItem, -1);
+
+				action = new RotateRightAction (view.Item);
+				actions.Add (action);
+				tbar.Insert (action.CreateToolItem () as ToolItem, -1);
+
+				info_button = (ToggleToolButton) ((actions [Info]).CreateToolItem () as ToolItem);
+				tbar.Insert (info_button, -1);
+
+				tbar.Insert ((actions [HideToolbar]).CreateToolItem () as ToolItem, -1);
+
+				notebook.AppendPage (scroll, null);
+				notebook.AppendPage (display, null);
+
+				tbar.ShowAll ();
+
+				scroll.Show ();
+				this.Decorated = false;
+				this.Fullscreen ();
+				this.ButtonPressEvent += HandleButtonPressEvent;
+
+				view.Item.Changed += HandleItemChanged;
+				view.GrabFocus ();
+
+				hide_cursor_delay = new Delay (3000, new GLib.IdleHandler (HideCursor));
+				hide_cursor_delay.Start ();
+
+				controls = new ControlOverlay (this);
+				controls.Add (tbar);
+				controls.Dismiss ();
+
+				notebook.CurrentPage = 0;
+			} catch (System.Exception e) {
+				Log.Exception (e);
+			}
+		}
+
+		private Gdk.Cursor empty_cursor;
+		private bool HideCursor ()
+		{
+			if (view.InPanMotion) {
+				return false;
+			}
+
+			if (empty_cursor == null)
+				empty_cursor = GdkUtils.CreateEmptyCursor (GdkWindow.Display);
+
+			this.GdkWindow.Cursor = empty_cursor;
+			view.GdkWindow.Cursor = empty_cursor;
+			return false;
+		}
+
+		private void ShowCursor ()
+		{
+			view.PointerMode = PointerMode.Scroll;
+			this.GdkWindow.Cursor = null;
+		}
+
+		private void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs args)
+		{
+			if (scroll.ControlBox.Visible)
+				scroll.ShowControls ();
+		}
+
+		void HandleTransitionChanged (object sender, EventArgs e)
+		{
+			ComboBox combo = sender as ComboBox;
+			if (combo == null)
+				return;
+			TreeIter iter;
+			if (combo.GetActiveIter (out iter)) {
+				string name = combo.Model.GetValue (iter, 0) as string;
+				foreach (var transition in display.Transitions)
+					if (transition.Name == name)
+						display.Transition = transition;
+			}
+
+
+		}
+
+		protected override bool OnExposeEvent (Gdk.EventExpose args)
+		{
+			bool ret = base.OnExposeEvent (args);
+
+			HideCursor ();
+			return ret;
+		}
+
+		private void ExitAction (object sender, System.EventArgs args)
+		{
+			Quit ();
+		}
+
+		private void HideToolbarAction (object sender, System.EventArgs args)
+		{
+			scroll.HideControls (true);
+			controls.Dismiss ();
+		}
+
+		private void SlideShowAction (object sender, System.EventArgs args)
+		{
+			PlayPause ();
+		}
+
+		InfoOverlay info;
+		private void InfoAction (object sender, System.EventArgs args)
+		{
+			bool active = false;
+			if (sender is ToggleToolButton) {
+				(sender as ToggleToolButton).Active = ! (sender as ToggleToolButton).Active;
+				active = (sender as ToggleToolButton).Active;
+			} else
+				active = (sender as ToggleAction).Active;
+
+			if (info == null) {
+				info = new InfoOverlay (this, view.Item);
+			}
+
+			info.Visibility = active ?
+				ControlOverlay.VisibilityType.Partial :
+				ControlOverlay.VisibilityType.None;
+		}
+
+		[GLib.ConnectBefore]
+		private void HandleViewMotion (object sender, Gtk.MotionNotifyEventArgs args)
+		{
+			ShowCursor ();
+			hide_cursor_delay.Restart ();
+
+			int x, y;
+			Gdk.ModifierType type;
+			((Gtk.Widget)sender).GdkWindow.GetPointer (out x, out y, out type);
+
+			if (y > (Allocation.Height * 0.75)) {
+				controls.Visibility = ControlOverlay.VisibilityType.Partial;
+				scroll.ShowControls ();
+			}
+		}
+
+		public PhotoImageView View {
+			get {
+				return view;
+			}
+		}
+
+		private void HandleButtonPressEvent (object sender, Gtk.ButtonPressEventArgs args)
+		{
+			if (args.Event.Type == Gdk.EventType.ButtonPress
+			    && args.Event.Button == 3) {
+				PhotoPopup popup = new PhotoPopup (this);
+				popup.Activate (this.Toplevel, args.Event);
+			}
+		}
+
+		public bool PlayPause ()
+		{
+			if (notebook.CurrentPage == 0) {
+				FSpot.Platform.ScreenSaver.Inhibit ("Running slideshow mode");
+				notebook.CurrentPage = 1;
+				play_pause_button.IconName = "media-playback-pause";
+				display.Start ();
+			} else {
+				FSpot.Platform.ScreenSaver.UnInhibit ();
+				notebook.CurrentPage = 0;
+				play_pause_button.IconName = "media-playback-start";
+				display.Stop ();
+			}
+			return true;
+		}
+
+		public void Quit ()
+		{
+			hide_cursor_delay.Stop ();
+			FSpot.Platform.ScreenSaver.UnInhibit ();
+
+			this.Destroy ();
+		}
+
+		protected override bool OnKeyPressEvent (Gdk.EventKey key)
+		{
+			switch (key.Key) {
+			// quit only on certain keys
+			case Gdk.Key.F:
+			case Gdk.Key.f:
+			case Gdk.Key.Q:
+			case Gdk.Key.q:
+			case Gdk.Key.F11:
+			case Gdk.Key.Escape:
+				Quit ();
+				return true;
+			// display infobox for 'i' key
+			case Gdk.Key.i:
+			case Gdk.Key.I:
+				InfoAction (info_button, null);
+				return true;
+			case Gdk.Key.bracketleft:
+				new RotateLeftAction (view.Item).Activate ();
+				return true;
+			case Gdk.Key.bracketright:
+				new RotateRightAction (view.Item).Activate ();
+				return true;
+			}
+
+			return base.OnKeyPressEvent (key);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/GroupAdaptor.cs b/src/Clients/MainApp/FSpot/GroupAdaptor.cs
new file mode 100644
index 0000000..2d8fa17
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/GroupAdaptor.cs
@@ -0,0 +1,66 @@
+using FSpot.Core;
+using FSpot.Utils;
+
+namespace FSpot {
+	public interface ILimitable {
+		void SetLimits (int min, int max);
+	}
+
+	public abstract class GroupAdaptor {
+		protected PhotoQuery query;
+		public PhotoQuery Query {
+			get {
+				return query;
+			}
+		}
+
+		protected bool order_ascending = false;
+		public bool OrderAscending {
+			get {
+				return order_ascending;
+			}
+			set {
+				if (order_ascending != value) {
+					order_ascending = value;
+					Reload();
+				}
+			}
+		}
+
+		public abstract int Value (int item) ;
+		public abstract int Count ();
+		public abstract string TickLabel (int item);
+		public abstract string GlassLabel (int item);
+
+		protected abstract void Reload ();
+
+		public abstract void SetGlass (int item);
+		public abstract int IndexFromPhoto (IBrowsableItem photo);
+		public abstract IBrowsableItem PhotoFromIndex (int item);
+
+		public delegate void GlassSetHandler (GroupAdaptor adaptor, int index);
+		public virtual event GlassSetHandler GlassSet;
+
+		public delegate void ChangedHandler (GroupAdaptor adaptor);
+		public virtual event ChangedHandler Changed;
+
+		protected void HandleQueryChanged (IBrowsableCollection sender)
+		{
+			Reload ();
+		}
+
+		public void Dispose ()
+		{
+			this.query.Changed -= HandleQueryChanged;
+		}
+
+		protected GroupAdaptor (PhotoQuery query, bool order_ascending)
+		{
+			this.order_ascending = order_ascending;
+			this.query = query;
+			this.query.Changed += HandleQueryChanged;
+
+			Reload ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/GroupSelector.cs b/src/Clients/MainApp/FSpot/GroupSelector.cs
new file mode 100644
index 0000000..e8d90d0
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/GroupSelector.cs
@@ -0,0 +1,1150 @@
+using System;
+using Mono.Unix;
+using Gtk;
+using Gdk;
+using GLib;
+using FSpot.Core;
+using FSpot.Utils;
+
+namespace FSpot {
+	public class GroupSelector : Fixed {
+		internal static GType groupSelectorGType;
+
+		int border = 6;
+		int box_spacing = 2;
+		int box_top_padding = 6;
+		public static int MIN_BOX_WIDTH = 20;
+
+		private Glass glass;
+		private Limit min_limit;
+		private Limit max_limit;
+
+		private Gtk.Button left;
+		private Gtk.Button right;
+		private Delay left_delay;
+		private Delay right_delay;
+
+		private Gdk.Window event_window;
+
+		public Gdk.Rectangle background;
+		public Gdk.Rectangle legend;
+		public Gdk.Rectangle action;
+
+		Pango.Layout [] tick_layouts;
+		int [] box_counts = new int [0];
+		int box_count_max;
+		int min_filled;
+		int max_filled;
+		bool has_limits;
+
+		protected FSpot.GroupAdaptor adaptor;
+		public FSpot.GroupAdaptor Adaptor {
+			set {
+				if (adaptor != null) {
+					adaptor.Changed -= HandleAdaptorChanged;
+					adaptor.Dispose ();
+				}
+
+				adaptor = value;
+				HandleAdaptorChanged (adaptor);
+				has_limits = adaptor is FSpot.ILimitable;
+
+				if (has_limits) {
+				    min_limit.SetPosition (0, false);
+				    max_limit.SetPosition (adaptor.Count () - 1, false);
+				}
+
+				if (adaptor is TimeAdaptor) {
+					left.TooltipText = Catalog.GetString ("More dates");
+					right.TooltipText = Catalog.GetString ("More dates");
+				} else {
+					left.TooltipText = Catalog.GetString ("More");
+					right.TooltipText = Catalog.GetString ("More");
+				}
+
+				adaptor.Changed += HandleAdaptorChanged;
+			}
+			get {
+				return adaptor;
+			}
+		}
+
+		public bool GlassUpdating {
+			get {
+				return glass.GlassUpdating;
+			}
+			set {
+				glass.GlassUpdating = value;
+			}
+		}
+
+		public int GlassPosition {
+			get {
+				return glass.Position;
+			}
+		}
+
+		private void HandleAdaptorChanged (GroupAdaptor adaptor)
+		{
+			bool size_changed = box_counts.Length != adaptor.Count ();
+			int [] box_values = new int [adaptor.Count ()];
+
+			if (tick_layouts != null) {
+				foreach (Pango.Layout l in tick_layouts) {
+					if (l != null)
+						l.Dispose ();
+				}
+			}
+			tick_layouts = new Pango.Layout [adaptor.Count ()];
+
+			int i = 0;
+			while (i < adaptor.Count ()) {
+				box_values [i] = adaptor.Value (i);
+				string label = adaptor.TickLabel (i);
+				if (label != null) {
+					tick_layouts [i] = CreatePangoLayout (label);
+				}
+				i++;
+			}
+
+			if (glass.Position >= adaptor.Count())
+				glass.SetPosition (adaptor.Count() - 1);
+
+			Counts = box_values;
+
+			if (has_limits && size_changed) {
+				min_limit.SetPosition (0, false);
+				max_limit.SetPosition (adaptor.Count () - 1, false);
+			}
+
+			for (i = min_limit.Position; i < box_counts.Length; i++)
+				if (box_counts [i] > 0)
+						break;
+
+			SetPosition (i < box_counts.Length ? i : min_limit.Position);
+			ScrollTo (min_limit.Position);
+
+			this.QueueDraw ();
+		}
+
+		private int [] Counts {
+			set {
+				bool min_found = false;
+				box_count_max = 0;
+				min_filled = 0;
+				max_filled = 0;
+
+				if (value != null)
+					box_counts = value;
+				else
+					value = new int [0];
+
+				for (int i = 0; i < box_counts.Length; i++){
+					int count = box_counts [i];
+					box_count_max = Math.Max (count, box_count_max);
+
+					if (count > 0) {
+						if (!min_found) {
+							min_filled = i;
+							min_found = true;
+						}
+						max_filled = i;
+					}
+				}
+			}
+		}
+
+		public enum RangeType {
+			All,
+			Fixed,
+			Min
+		}
+
+		private RangeType mode = RangeType.Min;
+		public RangeType Mode {
+			get {
+				return mode;
+			}
+			set {
+				mode = value;
+				if (Visible)
+					GdkWindow.InvalidateRect (Allocation, false);
+			}
+		}
+
+		private void ScrollTo (int position)
+		{
+			if (position ==  min_filled)
+				position = 0;
+			else if (position == max_filled)
+				position = box_counts.Length - 1;
+
+			Gdk.Rectangle box = new Box (this, position).Bounds;
+
+			// Only scroll to position if we are not dragging
+			if (!glass.Dragging)
+			{
+				if (box.Right > background.Right)
+					Offset -= box.X + box.Width - (background.X + background.Width);
+				else if (box.X < background.X)
+					Offset += background.X - box.X;
+			}
+		}
+
+		private int scroll_offset;
+		public int Offset {
+			get {
+				return scroll_offset;
+			}
+			set {
+				scroll_offset = value;
+
+				int total_width = (int)(box_counts.Length * BoxWidth);
+
+				if (total_width + scroll_offset < background.Width)
+					scroll_offset = background.Width - total_width;
+
+				if (total_width <= background.Width)
+					scroll_offset = 0;
+
+				UpdateButtons ();
+
+				if (Visible)
+					GdkWindow.InvalidateRect (Allocation, false);
+			}
+		}
+
+		private void UpdateButtons ()
+		{
+			left.Sensitive = (scroll_offset < 0);
+			right.Sensitive = (box_counts.Length * BoxWidth > background.Width - scroll_offset);
+
+			if (!left.Sensitive && left_delay.IsPending)
+				left_delay.Stop ();
+
+			if (!right.Sensitive && right_delay.IsPending)
+				right_delay.Stop ();
+		}
+
+		private void BoxXHitFilled (double x, out int out_position)
+		{
+			x -= BoxX (0);
+			double position = (x / BoxWidth);
+			position = System.Math.Max (0, position);
+			position = System.Math.Min (position, box_counts.Length - 1);
+
+			if (box_counts [(int)position] > 0) {
+				out_position = (int)position;
+			} else {
+				int upper = (int)position;
+				while (upper < box_counts.Length && box_counts [upper] == 0)
+					upper++;
+
+				int lower = (int)position;
+				while (lower >= 0 && box_counts [lower] == 0)
+					lower--;
+
+				if (lower == -1 && upper == box_counts.Length) {
+					out_position = (int)position;
+				} else if (lower == -1 && upper < box_counts.Length) {
+					out_position = upper;
+				} else if (upper == box_counts.Length && lower > -1){
+					out_position = lower;
+				} else if (upper + 1 - position > position - lower) {
+					out_position = lower;
+				} else {
+					out_position = upper;
+				}
+			}
+		}
+
+		private bool BoxXHit (double x, out int position)
+		{
+			x -= BoxX (0);
+			position = (int) (x / BoxWidth);
+			if (position < 0) {
+				position = 0;
+				return false;
+			} else if (position >= box_counts.Length) {
+				position = box_counts.Length -1;
+				return false;
+			}
+			return true;
+		}
+
+		private bool BoxHit (double x, double y, out int position)
+		{
+			if (BoxXHit (x, out position)) {
+				Box box = new Box (this, position);
+
+				if (box.Bounds.Contains ((int) x, (int) y))
+					return true;
+
+				position++;
+			}
+			return false;
+		}
+
+		public void SetPosition (int group)
+		{
+			if (!glass.Dragging)
+				glass.SetPosition(group);
+		}
+
+		protected override bool OnButtonPressEvent (Gdk.EventButton args)
+		{
+			if (args.Button == 3)
+				return DrawOrderMenu (args);
+
+			double x = args.X + action.X;
+			double y = args.Y + action.Y;
+
+			if (glass.Contains (x, y)) {
+				glass.StartDrag (x, y, args.Time);
+			} else if (has_limits && min_limit.Contains (x, y)) {
+				min_limit.StartDrag (x, y, args.Time);
+			} else if (has_limits && max_limit.Contains (x, y)) {
+				max_limit.StartDrag (x, y, args.Time);
+			} else {
+				int position;
+				if (BoxHit (x, y, out position)) {
+					BoxXHitFilled (x, out position);
+					glass.UpdateGlass = true;
+					glass.SetPosition (position);
+					glass.UpdateGlass = false;
+					return true;
+				}
+			}
+
+			return base.OnButtonPressEvent (args);
+		}
+
+		protected override bool OnButtonReleaseEvent (Gdk.EventButton args)
+		{
+			double x = args.X + action.X;
+			double y = args.Y + action.Y;
+
+			if (glass.Dragging) {
+				glass.EndDrag (x, y);
+			} else if (min_limit.Dragging) {
+				min_limit.EndDrag (x, y);
+			} else if (max_limit.Dragging) {
+				max_limit.EndDrag (x, y);
+			}
+			return base.OnButtonReleaseEvent (args);
+		}
+
+		public void UpdateLimits ()
+		{
+			if (adaptor != null && has_limits && min_limit != null && max_limit != null)
+				((ILimitable)adaptor).SetLimits (min_limit.Position, max_limit.Position);
+		}
+
+		protected override bool OnMotionNotifyEvent (Gdk.EventMotion args)
+		{
+			double x = args.X + action.X;
+			double y = args.Y + action.Y;
+
+			//Rectangle box = glass.Bounds ();
+			//Console.WriteLine ("please {0} and {1} in box {2}", x, y, box);
+
+			if (glass == null)
+				return base.OnMotionNotifyEvent (args);
+
+			if (glass.Dragging) {
+				glass.UpdateDrag (x, y);
+			} else if (min_limit.Dragging) {
+				min_limit.UpdateDrag (x, y);
+			} else if (max_limit.Dragging) {
+				max_limit.UpdateDrag (x, y);
+			} else {
+				glass.State = glass.Contains (x, y) ? StateType.Prelight : StateType.Normal;
+				min_limit.State = min_limit.Contains (x, y) ? StateType.Prelight : StateType.Normal;
+				max_limit.State = max_limit.Contains (x, y) ? StateType.Prelight : StateType.Normal;
+			}
+
+			return base.OnMotionNotifyEvent (args);
+		}
+
+		protected override void OnRealized ()
+		{
+			SetFlag (WidgetFlags.Realized);
+			GdkWindow = ParentWindow;
+
+			base.OnRealized ();
+
+			WindowAttr attr = WindowAttr.Zero;
+			attr.WindowType = Gdk.WindowType.Child;
+
+
+
+			attr.X = action.X;
+			attr.Y = action.Y;
+			attr.Width = action.Width;
+			attr.Height = action.Height;
+			attr.Wclass = WindowClass.InputOnly;
+			attr.EventMask = (int) Events;
+			attr.EventMask |= (int) (EventMask.ButtonPressMask |
+						 EventMask.KeyPressMask |
+						 EventMask.KeyReleaseMask |
+						 EventMask.ButtonReleaseMask |
+						 EventMask.PointerMotionMask);
+
+			event_window = new Gdk.Window (GdkWindow, attr, (int) (WindowAttributesType.X | WindowAttributesType.Y));
+			event_window.UserData = this.Handle;
+		}
+
+		protected override void OnUnrealized ()
+		{
+			event_window.Dispose ();
+			event_window = null;
+			base.OnUnrealized ();
+		}
+
+		private Double BoxWidth {
+			get {
+				switch (mode) {
+				case RangeType.All:
+					return Math.Max (1.0, background.Width / (double) box_counts.Length);
+				case RangeType.Fixed:
+					return background.Width / (double) 12;
+				case RangeType.Min:
+					return Math.Max (MIN_BOX_WIDTH, background.Width / (double) box_counts.Length);
+				default:
+					return (double) MIN_BOX_WIDTH;
+				}
+			}
+		}
+
+		private int BoxX (int item)
+		{
+			 return scroll_offset + background.X + (int) Math.Round (BoxWidth * item);
+		}
+
+		private struct Box {
+			Gdk.Rectangle bounds;
+			Gdk.Rectangle bar;
+
+			public Box (GroupSelector selector, int item)
+			{
+				bounds.Height = selector.background.Height;
+				bounds.Y = selector.background.Y;
+				bounds.X = selector.BoxX (item);
+				bounds.Width = Math.Max (selector.BoxX (item + 1) - bounds.X, 1);
+
+				if (item < 0 || item > selector.box_counts.Length - 1)
+					return;
+
+				double percent = selector.box_counts [item] / (double) Math.Max (selector.box_count_max, 1);
+				bar = bounds;
+				bar.Height = (int) Math.Ceiling ((bounds.Height - selector.box_top_padding) * percent);
+				bar.Y += bounds.Height - bar.Height - 1;
+
+				bar.Inflate (- selector.box_spacing, 0);
+			}
+
+			public Gdk.Rectangle Bounds {
+				get {
+					return bounds;
+				}
+			}
+
+			public Gdk.Rectangle Bar {
+				get {
+					return bar;
+				}
+			}
+
+		}
+
+		private void DrawBox (Rectangle area, int item)
+		{
+			Box box = new Box (this, item);
+			Rectangle bar = box.Bar;
+
+			if (bar.Intersect (area, out area)) {
+				if (item < min_limit.Position || item > max_limit.Position) {
+					GdkWindow.DrawRectangle (Style.BackgroundGC (StateType.Active), true, area);
+				} else {
+					GdkWindow.DrawRectangle (Style.BaseGC (StateType.Selected), true, area);
+				}
+			}
+		}
+
+		public Rectangle TickBounds (int item)
+		{
+			Rectangle bounds = Rectangle.Zero;
+			bounds.X = BoxX (item);
+			bounds.Y = legend.Y + 3;
+			bounds.Width = 1;
+			bounds.Height = 6;
+
+			return bounds;
+		}
+
+		public void DrawTick (Rectangle area, int item)
+		{
+			Rectangle tick = TickBounds (item);
+			Pango.Layout layout = null;
+
+			if (item < tick_layouts.Length) {
+				layout = tick_layouts [item];
+
+				if (layout != null) {
+					int width, height;
+					layout.GetPixelSize (out width, out height);
+
+					Style.PaintLayout (Style, GdkWindow, State, true, area, this,
+						   "GroupSelector:Tick", tick.X + 3, tick.Y + tick.Height, layout);
+				}
+			}
+
+			if (layout == null)
+				tick.Height /= 2;
+
+			if (tick.Intersect (area, out area)) {
+				GdkWindow.DrawRectangle (Style.ForegroundGC (State), true, area);
+			}
+		}
+
+		protected override bool OnPopupMenu ()
+		{
+			DrawOrderMenu (null);
+			return true;
+		}
+
+		private bool DrawOrderMenu (Gdk.EventButton args)
+		{
+			Gtk.Menu order_menu = new Gtk.Menu();
+
+			order_menu.Append (App.Instance.Organizer.ReverseOrderAction.CreateMenuItem ());
+
+			GtkUtil.MakeMenuItem (order_menu, Catalog.GetString ("_Clear Date Range"),
+						App.Instance.Organizer.HandleClearDateRange);
+
+			if (args != null)
+				order_menu.Popup (null, null, null, args.Button, args.Time);
+			else
+				order_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
+
+			return true;
+		}
+
+		public abstract class Manipulator {
+			protected GroupSelector selector;
+			protected Delay timer;
+			public bool Dragging;
+			public bool UpdateGlass;
+			public bool GlassUpdating;
+			public Point DragStart;
+
+			public Manipulator (GroupSelector selector)
+			{
+				this.selector = selector;
+				timer = new Delay (50, new GLib.IdleHandler (DragTimeout));
+			}
+
+			protected int drag_offset;
+			public int DragOffset {
+				set {
+					Rectangle then = Bounds ();
+					drag_offset = value;
+					Rectangle now = Bounds ();
+
+					if (selector.Visible) {
+						selector.GdkWindow.InvalidateRect (then, false);
+						selector.GdkWindow.InvalidateRect (now, false);
+					}
+				}
+				get {
+					if (Dragging)
+						return drag_offset;
+					else
+						return 0;
+				}
+			}
+
+			public virtual void StartDrag (double x, double y, uint time)
+			{
+				State = StateType.Active;
+				//timer.Start ();
+				Dragging = true;
+				DragStart.X = (int)x;
+				DragStart.Y = (int)y;
+			}
+
+			private bool DragTimeout ()
+			{
+				int x, y;
+				selector.GetPointer (out x, out y);
+				x += selector.Allocation.X;
+				y += selector.Allocation.Y;
+				UpdateDrag ((double) x, (double) y);
+
+				return true;
+			}
+
+			protected bool PositionValid (int position)
+			{
+				if (position < 0 || position > selector.box_counts.Length - 1)
+					return false;
+
+				return true;
+			}
+
+			public virtual void UpdateDrag (double x, double y)
+			{
+				Rectangle bounds = Bounds ();
+				double drag_lower_limit = (selector.background.Left) - (bounds.Width/2);
+				double drag_upper_limit = (selector.background.Right) - (bounds.Width/2);
+				double calX = DragStart.X + (x - DragStart.X);
+
+				if (calX >= drag_lower_limit && calX <= drag_upper_limit) {
+					if (selector.right_delay.IsPending)
+						selector.right_delay.Stop();
+
+					if (selector.left_delay.IsPending)
+						selector.left_delay.Stop();
+
+					DragOffset = (int)x - DragStart.X;
+				} else if (calX >= drag_upper_limit && selector.right.Sensitive && !selector.right_delay.IsPending) {
+					// Ensure selector is at the limit
+					if (bounds.Left != drag_upper_limit)
+						DragOffset = (int)drag_upper_limit - DragStart.X;
+					selector.Offset -= 10;
+					selector.right_delay.Start();
+				} else if (calX <= drag_lower_limit && selector.left.Sensitive && !selector.left_delay.IsPending) {
+					// Ensure selector is at the limit
+					if (bounds.Left != drag_lower_limit)
+						DragOffset = (int)drag_lower_limit - DragStart.X;
+					selector.Offset += 10;
+					selector.left_delay.Start();
+				}
+			}
+
+			public virtual void EndDrag (double x, double y)
+			{
+				timer.Stop ();
+
+				Rectangle box = Bounds ();
+				double middle = box.X + (box.Width / 2.0);
+
+				int position;
+				DragOffset = 0;
+				Dragging = false;
+				if (selector.BoxXHit (middle, out position)) {
+					this.SetPosition (position);
+					State = StateType.Prelight;
+				} else {
+					State = selector.State;
+				}
+			}
+
+			private StateType state;
+			public StateType State {
+				get {
+					return state;
+				}
+				set {
+					if (state != value) {
+						selector.GdkWindow.InvalidateRect (Bounds (), false);
+					}
+					state = value;
+				}
+			}
+
+			public void SetPosition (int position)
+			{
+				SetPosition (position, true);
+			}
+
+			public void SetPosition (int position, bool update)
+			{
+				if (! PositionValid (position))
+					return;
+
+				Rectangle then = Bounds ();
+				this.position = position;
+				Rectangle now = Bounds ();
+
+				if (selector.Visible) {
+					then = now.Union (then);
+					selector.GdkWindow.InvalidateRect (then, false);
+					//selector.GdkWindow.InvalidateRect (now, false);
+				}
+
+				if (update)
+					PositionChanged ();
+			}
+
+			private int position;
+			public int Position {
+				get {
+					return position;
+				}
+			}
+
+			public abstract void Draw (Rectangle area);
+
+			public abstract void PositionChanged ();
+
+			public abstract Rectangle Bounds ();
+
+			public virtual bool Contains (double x, double y)
+			{
+				return Bounds ().Contains ((int)x, (int)y);
+			}
+		}
+
+		private class Glass : Manipulator {
+			Gtk.Window popup_window;
+			Gtk.Label popup_label;
+			int drag_position;
+
+			public Glass (GroupSelector selector) : base (selector)
+			{
+				popup_window = new TipWindow ();
+				popup_label = new Gtk.Label (String.Empty);
+				popup_label.Show ();
+				popup_window.Add (popup_label);
+			}
+
+			public int handle_height = 15;
+			private int border {
+				get {
+					return selector.box_spacing * 2;
+				}
+			}
+
+			private void UpdatePopupPosition ()
+			{
+				int x = 0, y = 0;
+				Rectangle bounds = Bounds ();
+				Requisition requisition = popup_window.SizeRequest ();
+				popup_window.Resize  (requisition.Width, requisition.Height);
+				selector.GdkWindow.GetOrigin (out x, out y);
+				x += bounds.X + (bounds.Width - requisition.Width) / 2;
+				y += bounds.Y - requisition.Height;
+				x = Math.Max (x, 0);
+				x = Math.Min (x, selector.Screen.Width - requisition.Width);
+				popup_window.Move (x, y);
+			}
+
+			public void MaintainPosition()
+			{
+				Rectangle box = Bounds ();
+				double middle = box.X + (box.Width / 2.0);
+				int current_position;
+
+				if (selector.BoxXHit (middle, out current_position)) {
+					if (current_position != drag_position)
+						popup_label.Text = selector.Adaptor.GlassLabel (current_position);
+					drag_position = current_position;
+				}
+				UpdatePopupPosition ();
+				selector.ScrollTo (drag_position);
+			}
+
+			public override void StartDrag (double x, double y, uint time)
+			{
+				if (!PositionValid (Position))
+					return;
+
+				base.StartDrag (x, y, time);
+				popup_label.Text = selector.Adaptor.GlassLabel (this.Position);
+				popup_window.Show ();
+				UpdatePopupPosition ();
+				drag_position = this.Position;
+			}
+
+			public override void UpdateDrag (double x, double y)
+			{
+				base.UpdateDrag (x, y);
+				MaintainPosition();
+			}
+
+			public override void EndDrag (double x, double y)
+			{
+				timer.Stop ();
+
+				Rectangle box = Bounds ();
+				double middle = box.X + (box.Width / 2.0);
+
+				int position;
+				DragOffset = 0;
+				Dragging = false;
+
+				selector.BoxXHitFilled (middle, out position);
+				UpdateGlass = true;
+				this.SetPosition (position);
+				UpdateGlass = false;
+				State = StateType.Prelight;
+				popup_window.Hide ();
+			}
+
+			private Rectangle InnerBounds ()
+			{
+				Rectangle box = new Box (selector, Position).Bounds;
+				if (Dragging) {
+					box.X = DragStart.X + DragOffset;
+				} else {
+					box.X += DragOffset;
+				}
+				return box;
+			}
+
+			public override Rectangle Bounds ()
+			{
+				Rectangle box = InnerBounds ();
+
+				box.Inflate  (border, border);
+				box.Height += handle_height;
+
+				return box;
+			}
+
+			public override void Draw (Rectangle area)
+			{
+				if (! PositionValid (Position))
+					return;
+
+				Rectangle inner = InnerBounds ();
+				Rectangle bounds = Bounds ();
+
+				if (! bounds.Intersect (area, out area))
+				    return;
+
+				int i = 0;
+
+				Rectangle box = inner;
+				box.Width -= 1;
+				box.Height -= 1;
+				while (i < border) {
+					box.Inflate (1, 1);
+
+					selector.Style.BackgroundGC (State).ClipRectangle = area;
+					selector.GdkWindow.DrawRectangle (selector.Style.BackgroundGC (State),
+									  false, box);
+					i++;
+				}
+
+
+				Style.PaintFlatBox (selector.Style, selector.GdkWindow, State, ShadowType.In,
+						    area, selector, "glass", bounds.X, inner.Y + inner.Height + border,
+						    bounds.Width, handle_height);
+
+				Style.PaintHandle (selector.Style, selector.GdkWindow, State, ShadowType.In,
+						   area, selector, "glass", bounds.X, inner.Y + inner.Height + border,
+						   bounds.Width, handle_height, Orientation.Horizontal);
+
+				Style.PaintShadow (selector.Style, selector.GdkWindow, State, ShadowType.Out,
+						   area, selector, null, bounds.X, bounds.Y, bounds.Width, bounds.Height);
+
+				Style.PaintShadow (selector.Style, selector.GdkWindow, State, ShadowType.In,
+						   area, selector, null, inner.X, inner.Y, inner.Width, inner.Height);
+
+			}
+
+			public override void PositionChanged ()
+			{
+				GlassUpdating = true;
+				if (Dragging || UpdateGlass)
+					selector.adaptor.SetGlass (Position);
+				selector.ScrollTo (Position);
+				GlassUpdating = false;
+			}
+
+
+		}
+
+		public class Limit : Manipulator {
+			int width = 10;
+			int handle_height = 10;
+
+			public enum LimitType {
+				Min,
+				Max
+			}
+
+			private LimitType limit_type;
+
+			public override Rectangle Bounds ()
+			{
+				int limit_offset = limit_type == LimitType.Max ? 1 : 0;
+
+				Rectangle bounds = new Rectangle (0, 0, width, selector.background.Height + handle_height);
+
+				if (Dragging) {
+					bounds.X = DragStart.X + DragOffset;
+				} else {
+					bounds.X = DragOffset + selector.BoxX (Position + limit_offset) - bounds.Width /2;
+				}
+				bounds.Y = selector.background.Y - handle_height/2;
+				return bounds;
+			}
+
+			public override void Draw (Rectangle area)
+			{
+				Rectangle bounds = Bounds ();
+				Rectangle top = new Rectangle (bounds.X,
+							       bounds.Y,
+							       bounds.Width,
+							       handle_height);
+
+				Rectangle bottom = new Rectangle (bounds.X,
+								  bounds.Y + bounds.Height - handle_height,
+								  bounds.Width,
+								  handle_height);
+				Style.PaintBox (selector.Style, selector.GdkWindow, State, ShadowType.Out, area,
+						selector, null, top.X, top.Y, top.Width, top.Height);
+
+				Style.PaintBox (selector.Style, selector.GdkWindow, State, ShadowType.Out, area,
+						selector, null, bottom.X, bottom.Y, bottom.Width, bottom.Height);
+			}
+
+			public Limit (GroupSelector selector, LimitType type) : base (selector)
+			{
+				limit_type = type;
+			}
+
+			public override void PositionChanged ()
+			{
+				selector.UpdateLimits ();
+			}
+		}
+
+		protected override void OnMapped ()
+		{
+			base.OnMapped ();
+			if (event_window != null)
+				event_window.Show ();
+		}
+
+		protected override void OnUnmapped ()
+		{
+			base.OnUnmapped ();
+			if (event_window != null)
+				event_window.Hide ();
+
+		}
+
+		protected override bool OnExposeEvent (Gdk.EventExpose args)
+		{
+			Rectangle area;
+			//Console.WriteLine ("expose {0}", args.Area);
+			foreach (Rectangle sub in args.Region.GetRectangles ()) {
+				if (sub.Intersect (background, out area)) {
+					Rectangle active = background;
+					int min_x = BoxX (min_limit.Position);
+					int max_x = BoxX (max_limit.Position + 1);
+					active.X = min_x;
+					active.Width = max_x - min_x;
+
+					if (active.Intersect (area, out active))
+						GdkWindow.DrawRectangle (Style.BaseGC (State), true, active);
+
+					int i;
+					BoxXHit (area.X, out i);
+					int end;
+					BoxXHit (area.X + area.Width, out end);
+					while (i <= end)
+						DrawBox (area, i++);
+				}
+
+				Style.PaintShadow (this.Style, GdkWindow, State, ShadowType.In, area,
+						   this, null, background.X, background.Y,
+						   background.Width, background.Height);
+
+				if (sub.Intersect (legend, out area)) {
+					int i = 0;
+
+					while (i < box_counts.Length)
+						DrawTick (area, i++);
+				}
+
+				if (has_limits) {
+					if (min_limit != null) {
+						min_limit.Draw (sub);
+					}
+
+					if (max_limit != null) {
+						max_limit.Draw (sub);
+					}
+				}
+
+				if (glass != null) {
+					glass.Draw (sub);
+				}
+			}
+			return base.OnExposeEvent (args);
+		}
+
+		protected override void OnSizeRequested (ref Requisition requisition)
+		{
+			left.SizeRequest ();
+			right.SizeRequest ();
+			requisition.Width = 500;
+			requisition.Height = (int) (LegendHeight () + glass.handle_height + 3 * border);
+		}
+
+		// FIXME I can't find a c# wrapper for the C PANGO_PIXELS () macro
+		// So this Function is for that.
+		public static int PangoPixels (int val)
+		{
+			return val >= 0 ? (val + 1024 / 2) / 1024 :
+				(val - 1024 / 2) / 1024;
+		}
+
+		private int LegendHeight ()
+		{
+			int max_height = 0;
+
+			Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
+										  Pango.Language.FromString ("en_US"));
+			max_height += PangoPixels (metrics.Ascent + metrics.Descent);
+
+			foreach (Pango.Layout l in tick_layouts) {
+				if (l != null) {
+					int width, height;
+
+					l.GetPixelSize (out width, out height);
+					max_height = Math.Max (height, max_height);
+				}
+			}
+
+			return (int) (max_height * 1.5);
+		}
+
+		private bool HandleScrollRight ()
+		{
+			if (glass.Dragging)
+				glass.MaintainPosition ();
+
+			Offset -= 10;
+			return true;
+		}
+
+		private bool HandleScrollLeft ()
+		{
+			if (glass.Dragging)
+				glass.MaintainPosition ();
+
+			Offset += 10;
+			return true;
+		}
+
+		private void HandleLeftPressed (object sender, System.EventArgs ars)
+		{
+			HandleScrollLeft ();
+			left_delay.Start ();
+		}
+
+		private void HandleRightPressed (object sender, System.EventArgs ars)
+		{
+			HandleScrollRight ();
+			right_delay.Start ();
+		}
+
+		[GLib.ConnectBefore]
+		private void HandleScrollReleaseEvent (object sender, ButtonReleaseEventArgs args)
+		{
+			right_delay.Stop ();
+			left_delay.Stop ();
+		}
+
+		protected override void OnSizeAllocated (Gdk.Rectangle alloc)
+		{
+			base.OnSizeAllocated (alloc);
+			int legend_height = LegendHeight ();
+
+			Gdk.Rectangle bar = new Rectangle (alloc.X + border, alloc.Y + border,
+							   alloc.Width - 2 *  border,
+							   alloc.Height - 2 * border - glass.handle_height);
+
+
+			if (left.Allocation.Y != bar.Y || left.Allocation.X != bar.X) {
+				left.SetSizeRequest (-1, bar.Height);
+				this.Move (left, bar.X - Allocation.X, bar.Y - Allocation.Y);
+			}
+
+			if (right.Allocation.Y != bar.Y || right.Allocation.X != bar.X + bar.Width - right.Allocation.Width) {
+				right.SetSizeRequest (-1, bar.Height);
+				this.Move (right,  bar.X - Allocation.X + bar.Width - right.Allocation.Width,
+					   bar.Y - Allocation.Y);
+			}
+
+			background = new Rectangle (bar.X + left.Allocation.Width, bar.Y,
+						    bar.Width - left.Allocation.Width - right.Allocation.Width,
+						    bar.Height);
+
+			legend = new Rectangle (background.X, background.Y,
+						background.Width, legend_height);
+
+			action = background.Union (glass.Bounds ());
+
+			if (event_window != null)
+				event_window.MoveResize (action.X, action.Y, action.Width, action.Height);
+
+			this.Offset = this.Offset;
+
+			UpdateButtons ();
+		}
+
+		public void ResetLimits ()
+		{
+			min_limit.SetPosition(0,false);
+			max_limit.SetPosition(adaptor.Count () - 1, false);
+		}
+
+		public void SetLimitsToDates(DateTime start, DateTime stop)
+		{
+			if (((TimeAdaptor)adaptor).OrderAscending) {
+				min_limit.SetPosition(((TimeAdaptor)adaptor).IndexFromDate(start),false);
+				max_limit.SetPosition(((TimeAdaptor)adaptor).IndexFromDate(stop),false);
+			} else {
+				min_limit.SetPosition(((TimeAdaptor)adaptor).IndexFromDate(stop),false);
+				max_limit.SetPosition(((TimeAdaptor)adaptor).IndexFromDate(start),false);
+			}
+		}
+
+		public GroupSelector () : base ()
+		{
+			SetFlag (WidgetFlags.NoWindow);
+
+			background = Rectangle.Zero;
+			glass = new Glass (this);
+			min_limit = new Limit (this, Limit.LimitType.Min);
+			max_limit = new Limit (this, Limit.LimitType.Max);
+
+			left = new Gtk.Button ();
+			//left.Add (new Gtk.Image (Gtk.Stock.GoBack, Gtk.IconSize.Button));
+			left.Add (new Gtk.Arrow (Gtk.ArrowType.Left, Gtk.ShadowType.None));
+			left.Relief = Gtk.ReliefStyle.None;
+			//left.Clicked += HandleScrollLeft;
+			left.Pressed += HandleLeftPressed;
+			left.ButtonReleaseEvent += HandleScrollReleaseEvent;
+			left_delay = new Delay (50, new GLib.IdleHandler (HandleScrollLeft));
+
+			right = new Gtk.Button ();
+			//right.Add (new Gtk.Image (Gtk.Stock.GoForward, Gtk.IconSize.Button));
+			right.Add (new Gtk.Arrow (Gtk.ArrowType.Right, Gtk.ShadowType.None));
+			right.Relief = Gtk.ReliefStyle.None;
+			right.Pressed += HandleRightPressed;
+			right.ButtonReleaseEvent += HandleScrollReleaseEvent;
+			right_delay = new Delay (50, new GLib.IdleHandler (HandleScrollRight));
+			//right.Clicked += HandleScrollRight;
+
+			this.Put (left, 0, 0);
+			this.Put (right, 100, 0);
+			left.Show ();
+			right.Show ();
+
+			CanFocus = true;
+
+			Mode = RangeType.Min;
+			UpdateButtons ();
+		}
+
+		public GroupSelector (IntPtr raw) : base (raw) {}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/Histogram.cs b/src/Clients/MainApp/FSpot/Histogram.cs
new file mode 100644
index 0000000..966eebc
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/Histogram.cs
@@ -0,0 +1,204 @@
+/*
+ * FSpot.Histogram.cs
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *	Ruben Vermeersch  <ruben at savanne.be>
+ *
+ * This is free software, See COPYING for details.
+ */
+
+using System;
+
+namespace FSpot {
+	public class Histogram {
+#region Color hints
+		private byte [] colors = new byte [] {0x00, 0x00, 0x00, 0xff};
+
+		public byte RedColorHint {
+			set { colors [0] = value; }
+		}
+
+		public byte GreenColorHint {
+			set { colors [1] = value; }
+		}
+
+		public byte BlueColorHint {
+			set { colors [2] = value; }
+		}
+
+		public byte BackgroundColorHint {
+			set { colors [3] = value; }
+		}
+
+		private int [,] values = new int [256, 3];
+#endregion
+
+		public Histogram (Gdk.Pixbuf src)
+		{
+		        FillValues (src);
+		}
+
+		public Histogram () {}
+
+		private void FillValues (Gdk.Pixbuf src)
+		{
+			values = new int [256, 3];
+
+			if (src.BitsPerSample != 8)
+				throw new System.Exception ("Invalid bits per sample");
+
+			unsafe {
+				byte * srcb = (byte *)src.Pixels;
+				byte * pixels = srcb;
+				bool alpha = src.HasAlpha;
+				int rowstride = src.Rowstride;
+				int width = src.Width;
+				int height = src.Height;
+
+				// FIXME array bounds checks slow this down a lot
+				// so we use a pointer.  It is sad but I want fastness
+				fixed (int * v = &values [0,0]) {
+					for (int j = 0; j < height; j++) {
+						for (int i = 0; i < width; i++) {
+							v [*(srcb++) * 3 + 0]++;
+							v [*(srcb++) * 3 + 1]++;
+							v [*(srcb++) * 3 + 2]++;
+
+							if (alpha)
+								srcb++;
+
+						}
+						srcb =  ((byte *) pixels) + j * rowstride;
+					}
+				}
+			}
+		}
+
+		private int ChannelSum (int channel)
+		{
+			int sum = 0;
+			for (int i = 0; i < values.GetLength (0); i++) {
+				sum += values [i, channel];
+			}
+
+			return sum;
+		}
+
+		public void GetHighLow (int channel, out int high, out int low)
+		{
+			double total = ChannelSum (channel);
+			double current = 0.0;
+			double percentage;
+			double next_percentage;
+
+			low = 0;
+			high = 0;
+
+			for (int i = 0; i < values.GetLength (0) - 1; i++) {
+				current += values [i, channel];
+				percentage = current / total;
+				next_percentage = (current + values [i + 1, channel]) / total;
+				if (Math.Abs (percentage - 0.006) < Math.Abs (next_percentage - 0.006)) {
+					low = i + 1;
+					break;
+				}
+			}
+
+			for (int i = values.GetLength (0) - 1; i > 0; i--) {
+				current += values [i, channel];
+				percentage = current / total;
+				next_percentage = (current + values [i - 1, channel]) / total;
+				if (Math.Abs (percentage - 0.006) < Math.Abs (next_percentage - 0.006)) {
+					high = i - 1;
+					break;
+				}
+			}
+		}
+
+		private void Draw (Gdk.Pixbuf image)
+		{
+			int max = 0;
+			for (int i = 0; i < values.GetLength (0); i++) {
+				for (int j = 0; j < values.GetLength (1); j++) {
+					max = System.Math.Max (max, values [i, j]);
+				}
+			}
+			unsafe {
+				int height = image.Height;
+				int rowstride = image.Rowstride;
+				int r = 0;
+				int b = 0;
+				int g = 0;
+
+				for (int i = 0; i < image.Width; i++) {
+					byte * pixels = (byte *)image.Pixels + i * 4;
+
+					if (max > 0) {
+						r = values [i, 0] * height / max;
+						g = values [i, 1] * height / max;
+						b = values [i, 2] * height / max;
+					} else
+						r = g = b = 0;
+
+					int top = Math.Max (r, Math.Max (g, b));
+
+					int j = 0;
+					for (; j < height - top; j++) {
+						pixels [0] = colors [0];
+						pixels [1] = colors [1];
+						pixels [2] = colors [2];
+						pixels [3] = colors [3];
+						pixels += rowstride;
+					}
+					for (; j < height; j++) {
+						pixels [0] = (byte) ((j >= height - r) ? 0xff : 0x00);
+						pixels [1] = (byte) ((j >= height - g) ? 0xff : 0x00);
+						pixels [2] = (byte) ((j >= height - b) ? 0xff : 0x00);
+						pixels [3] = 0xff;
+						pixels += rowstride;
+					}
+
+				}
+			}
+		}
+
+		public Gdk.Pixbuf Generate (Gdk.Pixbuf input, int max_width)
+		{
+			Gdk.Pixbuf scaled;
+			using (Gdk.Pixbuf pixbuf = Generate (input))
+				scaled = PixbufUtils.ScaleToMaxSize (pixbuf, max_width, 128);
+			return scaled;
+		}
+
+		public Gdk.Pixbuf Generate (Gdk.Pixbuf input)
+		{
+			FillValues (input);
+			int height = 128;
+			Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, values.GetLength (0), height);
+			Draw (pixbuf);
+			return pixbuf;
+		}
+
+
+#if FSPOT_HISTOGRAM_MAIN
+		public static void Main (string [] args)
+		{
+			Gtk.Application.Init ();
+			Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (args [0]);
+			Log.DebugFormat ("loaded {0}", args [0]);
+			Histogram hist = new Histogram ();
+			Log.DebugFormat ("loaded histgram", args [0]);
+
+			Gtk.Window win = new Gtk.Window ("display");
+			Gtk.Image image = new Gtk.Image ();
+			Gdk.Pixbuf img = hist.Generate (pixbuf);
+			image.Pixbuf = img;
+			win.Add (image);
+			win.ShowAll ();
+			Gtk.Application.Run ();
+
+		}
+#endif
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/InfoOverlay.cs b/src/Clients/MainApp/FSpot/InfoOverlay.cs
new file mode 100644
index 0000000..e902085
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/InfoOverlay.cs
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2007 Novell Inc.
+ *
+ * Author
+ *   Larry Ewing <lewing at novell.com>
+ *
+ * See COPYING for license information.
+ *
+ */
+using Gtk;
+using FSpot.Core;
+using FSpot.Widgets;
+
+namespace FSpot {
+	public class InfoItem : InfoBox {
+		BrowsablePointer item;
+
+		public InfoItem (BrowsablePointer item)
+		{
+			this.item = item;
+			item.Changed += HandleItemChanged;
+			HandleItemChanged (item, null);
+			VersionChanged += HandleVersionChanged;
+			ShowTags = true;
+			ShowRating = true;
+			Context = ViewContext.FullScreen;
+		}
+
+		private void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs args)
+		{
+			Photo = item.Current;
+		}
+
+		private void HandleVersionChanged (InfoBox box, IBrowsableItemVersion version)
+		{
+			IBrowsableItemVersionable versionable = item.Current as IBrowsableItemVersionable;
+			PhotoQuery q = item.Collection as PhotoQuery;
+
+			if (versionable != null && q != null) {
+				versionable.SetDefaultVersion (version);
+				q.Commit (item.Index);
+			}
+		}
+	}
+
+	public class InfoOverlay : ControlOverlay {
+		InfoItem box;
+
+		public InfoOverlay (Widget w, BrowsablePointer item) : base (w)
+		{
+			XAlign = 1.0;
+			YAlign = 0.1;
+			DefaultWidth = 250;
+			box = new InfoItem (item);
+			box.BorderWidth = 15;
+			Add (box);
+			box.ShowAll ();
+			Visibility = VisibilityType.Partial;
+			KeepAbove = true;
+			//WindowPosition = WindowPosition.Mouse;
+			AutoHide = false;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/ItemAction.cs b/src/Clients/MainApp/FSpot/ItemAction.cs
new file mode 100644
index 0000000..022faac
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/ItemAction.cs
@@ -0,0 +1,140 @@
+/*
+ * ItemAction.cs
+ *
+ * Copyright 2007 Novell Inc.
+ *
+ * Author
+ *   Larry Ewing <lewing at novell.com>
+ *
+ * See COPYING for license information.
+ *
+ */
+using Gtk;
+using Mono.Unix;
+using FSpot.Core;
+using FSpot.Filters;
+using System;
+using FSpot.UI.Dialog;
+
+namespace FSpot {
+	public abstract class ItemAction : Gtk.Action {
+		protected BrowsablePointer item;
+
+		public ItemAction (BrowsablePointer pointer,
+				   string name,
+				   string label,
+				   string tooltip,
+				   string icon_name) : base (name, label)
+		{
+			Tooltip = tooltip;
+			IconName = icon_name;
+			item = pointer;
+			item.Changed += ItemChanged;
+		}
+
+	        protected virtual void ItemChanged (object sender,
+						    BrowsablePointerChangedEventArgs args)
+		{
+			Sensitive = item.IsValid;
+		}
+
+	}
+
+	public class RotateAction : ItemAction {
+		protected RotateDirection direction;
+
+		public RotateAction (BrowsablePointer pointer,
+				     RotateDirection direction,
+				     string name,
+				     string label,
+				     string tooltip,
+				     string stock_id)
+			: base (pointer, name, label, tooltip, stock_id)
+		{
+			this.direction = direction;
+		}
+
+		protected override void OnActivated ()
+		{
+			try {
+				RotateOperation op = new RotateOperation (item.Current, direction);
+
+				while (op.Step ());
+
+				item.Collection.MarkChanged (item.Index, FullInvalidate.Instance);
+			} catch (Exception e) {
+				Dialog d = new EditExceptionDialog (null, e, item.Current);
+				d.Show ();
+				d.Run ();
+				d.Destroy ();
+			}
+
+		}
+	}
+
+	public class RotateLeftAction : RotateAction {
+		public RotateLeftAction (BrowsablePointer p)
+			: base (p,
+				RotateDirection.Counterclockwise,
+				"RotateItemLeft",
+				Catalog.GetString ("Rotate Left"),
+				Catalog.GetString ("Rotate picture left"),
+				"object-rotate-left")
+		{
+		}
+	}
+
+	public class RotateRightAction : RotateAction {
+		public RotateRightAction (BrowsablePointer p)
+			: base (p,
+				RotateDirection.Clockwise,
+				"RotateItemRight",
+				Catalog.GetString ("Rotate Right"),
+				Catalog.GetString ("Rotate picture right"),
+				"object-rotate-right")
+		{
+		}
+	}
+
+	public class NextPictureAction : ItemAction {
+		public NextPictureAction (BrowsablePointer p)
+			: base (p,
+				"NextPicture",
+				Catalog.GetString ("Next"),
+				Catalog.GetString ("Next picture"),
+				"gtk-go-forward-ltr")
+		{
+		}
+
+		protected override void ItemChanged (object sender, BrowsablePointerChangedEventArgs args)
+		{
+			Sensitive = item.Index < item.Collection.Count -1;
+		}
+
+		protected override void OnActivated ()
+		{
+			item.MoveNext ();
+		}
+	}
+
+	public class PreviousPictureAction : ItemAction {
+		public PreviousPictureAction (BrowsablePointer p)
+			: base (p,
+				"PreviousPicture",
+				Catalog.GetString ("Previous"),
+				Catalog.GetString ("Previous picture"),
+				"gtk-go-back-ltr")
+		{
+		}
+
+		protected override void ItemChanged (object sender, BrowsablePointerChangedEventArgs args)
+		{
+			Sensitive =  item.Index > 0;
+		}
+
+		protected override void OnActivated ()
+		{
+			item.MovePrevious ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/JobStore.cs b/src/Clients/MainApp/FSpot/JobStore.cs
new file mode 100644
index 0000000..7fc11ab
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/JobStore.cs
@@ -0,0 +1,215 @@
+/*
+ * JobStore.cs
+ *
+ * Author(s):
+ *   Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using System.Collections;
+using System.IO;
+using System.Data;
+using System;
+using Banshee.Kernel;
+using FSpot.Jobs;
+using FSpot.Database;
+using FSpot;
+using FSpot.Core;
+using Hyena;
+
+using Hyena.Data.Sqlite;
+
+namespace FSpot {
+public abstract class Job : DbItem, IJob
+{
+	public Job (uint id, string job_options, JobPriority job_priority, DateTime run_at, bool persistent) : base (id)
+	{
+		this.job_options = job_options;
+		this.job_priority = job_priority;
+		this.run_at = run_at;
+		this.persistent = persistent;
+	}
+
+	private string job_options;
+	public string JobOptions {
+		get { return job_options; }
+		set { job_options = value; }
+	}
+
+	private JobPriority job_priority;
+	internal JobPriority JobPriority {
+		get { return job_priority; }
+		set { job_priority = value; }
+	}
+
+	//Not in use yet !
+	private DateTime run_at;
+	public DateTime RunAt {
+		get { return run_at; }
+//		set { run_at = value; }
+	}
+
+	private bool persistent;
+	public bool Persistent {
+		get { return persistent; }
+	}
+
+	public event EventHandler Finished;
+
+	private JobStatus status;
+	public JobStatus Status
+	{
+		get { return status; }
+		set {
+			status = value;
+			switch (value) {
+			case JobStatus.Finished:
+			case JobStatus.Failed:
+				if (Finished != null)
+					Finished (this, new EventArgs ());
+				break;
+			default:
+				break;
+			}
+		}
+	}
+
+	public void Run ()
+	{
+		Status = JobStatus.Running;
+		if (Execute ())
+			Status = JobStatus.Finished;
+		else
+			Status = JobStatus.Failed;
+	}
+
+	protected abstract bool Execute ();
+}
+
+public class JobStore : DbStore<Job> {
+
+	internal static void CreateTable (FSpotDatabaseConnection database)
+	{
+		if (database.TableExists ("jobs")) {
+			return;
+		}
+
+		database.Execute (
+			"CREATE TABLE jobs (\n" +
+			"	id		INTEGER PRIMARY KEY NOT NULL, \n" +
+			"	job_type	TEXT NOT NULL, \n" +
+			"	job_options	TEXT NOT NULL, \n" +
+			"	run_at		INTEGER, \n" +
+			"	job_priority	INTEGER NOT NULL\n" +
+			")");
+	}
+
+	private Job LoadItem (IDataReader reader)
+	{
+		return (Job) Activator.CreateInstance (
+				Type.GetType (reader ["job_type"].ToString ()),
+				Convert.ToUInt32 (reader["id"]),
+				reader["job_options"].ToString (),
+				Convert.ToInt32 (reader["run_at"]),
+				(JobPriority) Convert.ToInt32 (reader["job_priority"]),
+				true);
+	}
+
+	private void LoadAllItems ()
+	{
+		IDataReader reader = Database.Query ("SELECT id, job_type, job_options, run_at, job_priority FROM jobs");
+
+		Scheduler.Suspend ();
+		while (reader.Read ()) {
+			Job job = LoadItem (reader);
+			AddToCache (job);
+			job.Finished += HandleRemoveJob;
+			Scheduler.Schedule (job, job.JobPriority);
+			job.Status = JobStatus.Scheduled;
+		}
+
+		reader.Close ();
+	}
+
+	public Job Create (Type job_type, string job_options)
+	{
+		return Create (job_type, job_options, DateTime.Now, JobPriority.Lowest, false);
+	}
+
+	public Job CreatePersistent (Type job_type, string job_options)
+	{
+		return Create (job_type, job_options, DateTime.Now, JobPriority.Lowest, true);
+	}
+
+	internal Job Create (Type job_type, string job_options, DateTime run_at, JobPriority job_priority, bool persistent)
+	{
+		int id = 0;
+		if (persistent)
+			id = Database.Execute (new HyenaSqliteCommand ("INSERT INTO jobs (job_type, job_options, run_at, job_priority) VALUES (?, ?, ?, ?)",
+						job_type.ToString (),
+						job_options,
+						DateTimeUtil.FromDateTime (run_at),
+						Convert.ToInt32 (job_priority)));
+
+                Job job = (Job) Activator.CreateInstance (job_type, (uint)id, job_options, run_at, job_priority, true);
+
+		AddToCache (job);
+		job.Finished += HandleRemoveJob;
+		Scheduler.Schedule (job, job.JobPriority);
+		job.Status = JobStatus.Scheduled;
+		EmitAdded (job);
+
+		return job;
+	}
+
+	public override void Commit (Job item)
+	{
+		if (item.Persistent)
+			Database.Execute(new HyenaSqliteCommand("UPDATE jobs " 					+
+									"SET job_type = ? "		+
+									"SET job_options = ? "	+
+									"SET run_at = ? "			+
+									"SET job_priority = ? "	+
+									"WHERE id = ?",
+									"Empty", //FIXME
+									item.JobOptions,
+									DateTimeUtil.FromDateTime (item.RunAt),
+									item.JobPriority,
+									item.Id));
+
+		EmitChanged (item);
+	}
+
+	public override Job Get (uint id)
+	{
+            // we never use this
+            return null;
+	}
+
+	public override void Remove (Job item)
+	{
+		RemoveFromCache (item);
+
+		if ((item as Job).Persistent)
+			Database.Execute (new HyenaSqliteCommand ("DELETE FROM jobs WHERE id = ?", item.Id));
+
+		EmitRemoved (item);
+	}
+
+	public void HandleRemoveJob (Object o, EventArgs e)
+	{
+		Remove (o as Job);
+	}
+
+	public JobStore (FSpotDatabaseConnection database, bool is_new) : base (database, true)
+	{
+		if (is_new || !Database.TableExists ("jobs")) {
+			CreateTable (database);
+		} else {
+			LoadAllItems ();
+                }
+	}
+}
+}
\ No newline at end of file
diff --git a/src/Clients/MainApp/FSpot/MainWindow.cs b/src/Clients/MainApp/FSpot/MainWindow.cs
new file mode 100644
index 0000000..61ddbd1
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/MainWindow.cs
@@ -0,0 +1,3002 @@
+/*
+ * FSpot.MainWindow.cs
+ *
+ * Copyright (c) 2003-2009 Novell, Inc.
+ *
+ * This is open source software. See COPYING for details.
+ */
+
+using System;
+using System.Text;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+
+using Gdk;
+using Gtk;
+
+using Mono.Addins;
+using Mono.Unix;
+
+using Hyena;
+using Hyena.Widgets;
+using Banshee.Kernel;
+
+using FSpot;
+using FSpot.Core;
+using FSpot.Database;
+using FSpot.Extensions;
+using FSpot.Query;
+using FSpot.Widgets;
+using FSpot.Utils;
+using FSpot.UI.Dialog;
+using FSpot.Platform;
+using FSpot.Import;
+
+namespace FSpot
+{
+	public class MainWindow
+	{
+		public Sidebar Sidebar { get; private set; }
+
+		TagSelectionWidget tag_selection_widget;
+		[GtkBeans.Builder.Object] Gtk.Window main_window;
+		public Gtk.Window Window {
+			get { return main_window; }
+		}
+
+		[GtkBeans.Builder.Object] Gtk.HPaned main_hpaned;
+		[GtkBeans.Builder.Object] Gtk.VBox view_vbox;
+
+		[GtkBeans.Builder.Object] Gtk.VBox toolbar_vbox;
+
+		[GtkBeans.Builder.Object] Gtk.ScrolledWindow icon_view_scrolled;
+		[GtkBeans.Builder.Object] Box photo_box;
+		[GtkBeans.Builder.Object] Notebook view_notebook;
+
+		Gtk.ScrolledWindow tag_selection_scrolled;
+
+		[GtkBeans.Builder.Object] Label status_label;
+
+		[GtkBeans.Builder.Object] Gtk.UIManager uimanager;
+		// Photo
+		[GtkBeans.Builder.Object] Gtk.Action create_version_menu_item;
+		[GtkBeans.Builder.Object] Gtk.Action delete_version_menu_item;
+		[GtkBeans.Builder.Object] Gtk.Action detach_version_menu_item;
+		[GtkBeans.Builder.Object] Gtk.Action rename_version_menu_item;
+
+		[GtkBeans.Builder.Object] Gtk.Action tools;
+		[GtkBeans.Builder.Object] Gtk.Action export;
+		[GtkBeans.Builder.Object] Gtk.Action pagesetup_menu_item;
+		[GtkBeans.Builder.Object] Gtk.Action print;
+		[GtkBeans.Builder.Object] Gtk.Action send_mail;
+
+		// Edit
+		[GtkBeans.Builder.Object] Gtk.Action copy;
+		[GtkBeans.Builder.Object] Gtk.Action select_none;
+		[GtkBeans.Builder.Object] Gtk.Action rotate_left;
+		[GtkBeans.Builder.Object] Gtk.Action rotate_right;
+
+		[GtkBeans.Builder.Object] Gtk.Action sharpen;
+		[GtkBeans.Builder.Object] Gtk.Action adjust_time;
+
+		[GtkBeans.Builder.Object] Gtk.Action update_thumbnail;
+		[GtkBeans.Builder.Object] Gtk.Action delete_from_drive;
+		[GtkBeans.Builder.Object] Gtk.Action remove_from_catalog;
+		[GtkBeans.Builder.Object] Gtk.Action set_as_background;
+
+		[GtkBeans.Builder.Object] Gtk.Action attach_tag;
+		[GtkBeans.Builder.Object] Gtk.Action remove_tag;
+
+		// View
+		[GtkBeans.Builder.Object] Gtk.ToggleAction display_toolbar;
+		[GtkBeans.Builder.Object] Gtk.ToggleAction display_sidebar;
+		[GtkBeans.Builder.Object] Gtk.ToggleAction display_timeline;
+		[GtkBeans.Builder.Object] Gtk.ToggleAction display_filmstrip;
+		[GtkBeans.Builder.Object] Gtk.ToggleAction display_dates_menu_item;
+		[GtkBeans.Builder.Object] Gtk.ToggleAction display_tags_menu_item;
+		[GtkBeans.Builder.Object] Gtk.ToggleAction display_ratings_menu_item;
+
+		[GtkBeans.Builder.Object] Gtk.Action zoom_in;
+		[GtkBeans.Builder.Object] Gtk.Action zoom_out;
+		[GtkBeans.Builder.Object] Gtk.ToggleAction loupe_menu_item;
+
+		[GtkBeans.Builder.Object] Gtk.RadioAction tag_icon_hidden;
+		[GtkBeans.Builder.Object] Gtk.RadioAction tag_icon_small;
+		[GtkBeans.Builder.Object] Gtk.RadioAction tag_icon_medium;
+		[GtkBeans.Builder.Object] Gtk.RadioAction tag_icon_large;
+
+		[GtkBeans.Builder.Object] Gtk.ToggleAction reverse_order;
+		public Gtk.ToggleAction ReverseOrderAction {
+			get { return reverse_order; }
+		}
+
+		// Find
+		[GtkBeans.Builder.Object] Gtk.Action clear_date_range;
+		[GtkBeans.Builder.Object] Gtk.Action clear_rating_filter;
+
+		[GtkBeans.Builder.Object] Gtk.ToggleAction find_untagged;
+
+		[GtkBeans.Builder.Object] Gtk.Action clear_roll_filter;
+
+		// Tags
+		[GtkBeans.Builder.Object] Gtk.Action edit_selected_tag;
+		[GtkBeans.Builder.Object] Gtk.Action delete_selected_tag;
+
+		[GtkBeans.Builder.Object] Gtk.Action attach_tag_to_selection;
+		[GtkBeans.Builder.Object] Gtk.Action remove_tag_from_selection;
+
+		// Other Widgets
+		[GtkBeans.Builder.Object] Scale zoom_scale;
+
+		[GtkBeans.Builder.Object] VBox info_vbox;
+
+		[GtkBeans.Builder.Object] Gtk.HBox tagbar;
+		[GtkBeans.Builder.Object] Gtk.VBox tag_entry_container;
+		[GtkBeans.Builder.Object] Gtk.VBox sidebar_vbox;
+		TagEntry tag_entry;
+
+		Gtk.Toolbar toolbar;
+
+		FindBar find_bar;
+
+		PhotoVersionMenu versions_submenu;
+
+		Gtk.ToggleToolButton browse_button;
+		Gtk.ToggleToolButton edit_button;
+
+		QueryView icon_view;
+
+		PhotoView photo_view;
+		public PhotoView PhotoView {
+			get { return photo_view; }
+		}
+
+		FSpot.FullScreenView fsview;
+		FSpot.PhotoQuery query;
+		FSpot.GroupSelector group_selector;
+		FSpot.QueryWidget query_widget;
+
+		ToolButton rl_button;
+		ToolButton rr_button;
+
+		Label count_label;
+
+		Gtk.ToolButton display_next_button;
+		Gtk.ToolButton display_previous_button;
+
+		bool write_metadata = false;
+
+		Gdk.Cursor watch = new Gdk.Cursor (Gdk.CursorType.Watch);
+
+		// Tag Icon Sizes
+		public int TagsIconSize {
+			get { return (int) Tag.TagIconSize; }
+			set { Tag.TagIconSize = (Tag.IconSize) value; }
+		}
+
+		private static TargetEntry [] icon_source_target_table =
+			new TargetEntry [] {
+				DragDropTargets.PhotoListEntry,
+				DragDropTargets.TagQueryEntry,
+				DragDropTargets.UriListEntry,
+				DragDropTargets.RootWindowEntry
+		};
+
+		private static TargetEntry [] icon_dest_target_table =
+			new TargetEntry [] {
+				DragDropTargets.PhotoListEntry,
+				DragDropTargets.TagListEntry,
+				DragDropTargets.UriListEntry
+		};
+
+		private static TargetEntry [] tag_target_table =
+			new TargetEntry [] {
+				DragDropTargets.TagListEntry
+		};
+
+		const int PHOTO_IDX_NONE = -1;
+
+		public Db Database { get; private set; }
+		public ModeType ViewMode { get; private set; }
+		public MainSelection Selection { get; private set; }
+		public InfoBox InfoBox { get; private set; }
+
+		//
+		// Constructor
+		//
+		public MainWindow (Db db)
+		{
+			foreach (ServiceNode service in AddinManager.GetExtensionNodes ("/FSpot/Services")) {
+				try {
+					service.Initialize ();
+					service.Start ();
+				} catch (Exception e) {
+					Log.WarningFormat ("Something went wrong while starting the {0} extension.", service.Id);
+					Log.DebugException (e);
+				}
+			}
+
+#if GSD_2_24
+			Log.Information ("Hack for gnome-settings-daemon engaged");
+			int max_age, max_size;
+			if (Preferences.TryGet<int> (Preferences.GSD_THUMBS_MAX_AGE, out max_age)) {
+				if (max_age < 0)
+					Log.Debug ("maximum_age check already disabled, good");
+				else if (max_age == 0)
+					Log.Warning ("maximum_age is 0 (tin-hat mode), not overriding");
+				else if (max_age < 180) {
+					Log.Debug ("Setting maximum_age to a saner value");
+					Preferences.Set (Preferences.GSD_THUMBS_MAX_AGE, 180);
+				}
+			}
+
+			if (Preferences.TryGet<int> (Preferences.GSD_THUMBS_MAX_SIZE, out max_size)) {
+				int count = App.Instance.Database.Photos.Count ("photos");
+				// average thumbs are taking 70K, so this will push the threshold
+				//if f-spot takes more than 70% of the thumbs space
+				int size = count / 10;
+				if (max_size < 0)
+					Log.Debug ("maximum_size check already disabled, good");
+				else if (max_size == 0)
+					Log.Warning ("maximum_size is 0 (tin-hat mode), not overriding");
+				else if (max_size < size) {
+					Log.DebugFormat ("Setting maximum_size to a saner value ({0}MB), according to your db size", size);
+					Preferences.Set (Preferences.GSD_THUMBS_MAX_SIZE, size);
+				}
+			}
+
+#endif
+			Database = db;
+
+			GtkBeans.Builder builder = new GtkBeans.Builder ("main_window.ui");
+			builder.Autoconnect (this);
+
+			//Set the global DefaultColormap. Allows transparency according
+			//to the theme (work on murrine engine)
+			Gdk.Colormap colormap = ((Widget)main_window).Screen.RgbaColormap;
+			if (colormap == null) {
+				Log.Debug ("Your screen doesn't support alpha channels!");
+				colormap = ((Widget)main_window).Screen.RgbColormap;
+			}
+			Gtk.Widget.DefaultColormap = colormap;
+
+			LoadPreference (Preferences.MAIN_WINDOW_WIDTH);
+			LoadPreference (Preferences.MAIN_WINDOW_X);
+			LoadPreference (Preferences.MAIN_WINDOW_MAXIMIZED);
+			main_window.ShowAll ();
+
+			LoadPreference (Preferences.SIDEBAR_POSITION);
+			LoadPreference (Preferences.METADATA_EMBED_IN_IMAGE);
+
+			pagesetup_menu_item.Activated += HandlePageSetupActivated;
+
+			toolbar = new Gtk.Toolbar ();
+			toolbar_vbox.PackStart (toolbar);
+
+			ToolButton import_button = GtkUtil.ToolButtonFromTheme ("gtk-add", Catalog.GetString ("Import"), true);
+			import_button.Clicked += (o, args) => StartImport (null);
+			import_button.TooltipText = Catalog.GetString ("Import new images");
+			toolbar.Insert (import_button, -1);
+
+			toolbar.Insert (new SeparatorToolItem (), -1);
+
+			rl_button = GtkUtil.ToolButtonFromTheme ("object-rotate-left", Catalog.GetString ("Rotate Left"), false);
+			rl_button.Clicked += HandleRotate270Command;
+			toolbar.Insert (rl_button, -1);
+
+			rr_button = GtkUtil.ToolButtonFromTheme ("object-rotate-right", Catalog.GetString ("Rotate Right"), false);
+			rr_button.Clicked += HandleRotate90Command;
+			toolbar.Insert (rr_button, -1);
+
+			toolbar.Insert (new SeparatorToolItem (), -1);
+
+			browse_button = new ToggleToolButton ();
+			browse_button.Label = Catalog.GetString ("Browse");
+			browse_button.IconName = "mode-browse";
+			browse_button.IsImportant = true;
+			browse_button.Toggled += HandleToggleViewBrowse;
+			browse_button.TooltipText = Catalog.GetString ("Browse many photos simultaneously");
+			toolbar.Insert (browse_button, -1);
+
+			edit_button = new ToggleToolButton ();
+			edit_button.Label = Catalog.GetString ("Edit Image");
+			edit_button.IconName = "mode-image-edit";
+			edit_button.IsImportant = true;
+			edit_button.Toggled += HandleToggleViewPhoto;
+			edit_button.TooltipText = Catalog.GetString ("View and edit a photo");
+			toolbar.Insert (edit_button, -1);
+
+			toolbar.Insert (new SeparatorToolItem (), -1);
+
+			ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), false);
+			fs_button.Clicked += HandleViewFullscreen;
+			fs_button.TooltipText = Catalog.GetString ("View photos fullscreen");
+			toolbar.Insert (fs_button, -1);
+
+			ToolButton ss_button = GtkUtil.ToolButtonFromTheme ("media-playback-start", Catalog.GetString ("Slideshow"), false);
+			ss_button.Clicked += HandleViewSlideShow;
+			ss_button.TooltipText = Catalog.GetString ("View photos in a slideshow");
+			toolbar.Insert (ss_button, -1);
+
+			SeparatorToolItem white_space = new SeparatorToolItem ();
+			white_space.Draw = false;
+			white_space.Expand = true;
+			toolbar.Insert (white_space, -1);
+
+			ToolItem label_item = new ToolItem ();
+			count_label = new Label (String.Empty);
+			label_item.Child = count_label;
+			toolbar.Insert (label_item, -1);
+
+			display_previous_button = new ToolButton (Stock.GoBack);
+			toolbar.Insert (display_previous_button, -1);
+			display_previous_button.TooltipText = Catalog.GetString ("Previous photo");
+			display_previous_button.Clicked += new EventHandler (HandleDisplayPreviousButtonClicked);
+
+			display_next_button = new ToolButton (Stock.GoForward);
+			toolbar.Insert (display_next_button, -1);
+			display_next_button.TooltipText = Catalog.GetString ("Next photo");
+			display_next_button.Clicked += new EventHandler (HandleDisplayNextButtonClicked);
+
+			Sidebar = new Sidebar ();
+			ViewModeChanged += Sidebar.HandleMainWindowViewModeChanged;
+			sidebar_vbox.Add (Sidebar);
+
+			tag_selection_scrolled = new Gtk.ScrolledWindow ();
+			tag_selection_scrolled.ShadowType = ShadowType.In;
+
+			tag_selection_widget = new TagSelectionWidget (Database.Tags);
+			tag_selection_scrolled.Add (tag_selection_widget);
+
+			Sidebar.AppendPage (tag_selection_scrolled, Catalog.GetString ("Tags"), "tag");
+
+			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);
+
+			Sidebar.Context = ViewContext.Library;
+
+			Sidebar.CloseRequested += HideSidebar;
+			Sidebar.Show ();
+
+			InfoBox = new InfoBox ();
+			ViewModeChanged += InfoBox.HandleMainWindowViewModeChanged;
+			InfoBox.VersionChanged += delegate (InfoBox box, IBrowsableItemVersion version) { UpdateForVersionChange (version);};
+			sidebar_vbox.PackEnd (InfoBox, false, false, 0);
+
+			InfoBox.Context = ViewContext.Library;
+
+			tag_selection_widget.Selection.Changed += HandleTagSelectionChanged;
+			tag_selection_widget.KeyPressEvent += HandleTagSelectionKeyPress;
+			tag_selection_widget.ButtonPressEvent += HandleTagSelectionButtonPressEvent;
+			tag_selection_widget.PopupMenu += HandleTagSelectionPopupMenu;
+			tag_selection_widget.RowActivated += HandleTagSelectionRowActivated;
+
+			LoadPreference (Preferences.TAG_ICON_SIZE);
+
+			try {
+				query = new FSpot.PhotoQuery (Database.Photos);
+			} catch (System.Exception e) {
+				//FIXME assume any exception here is due to a corrupt db and handle that.
+				new RepairDbDialog (e, Database.Repair (), main_window);
+				query = new FSpot.PhotoQuery (Database.Photos);
+			}
+
+			UpdateStatusLabel ();
+			query.Changed += HandleQueryChanged;
+
+			Database.Photos.ItemsChanged += HandleDbItemsChanged;
+			Database.Tags.ItemsChanged += HandleTagsChanged;
+			Database.Tags.ItemsAdded += HandleTagsChanged;
+			Database.Tags.ItemsRemoved += HandleTagsChanged;
+
+			group_selector = new FSpot.GroupSelector ();
+			group_selector.Adaptor = new FSpot.TimeAdaptor (query, Preferences.Get<bool> (Preferences.GROUP_ADAPTOR_ORDER_ASC));
+
+			group_selector.ShowAll ();
+
+			if (zoom_scale != null) {
+				zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
+			}
+
+			view_vbox.PackStart (group_selector, false, false, 0);
+			view_vbox.ReorderChild (group_selector, 0);
+
+			find_bar = new FindBar (query, tag_selection_widget.Model);
+			view_vbox.PackStart (find_bar, false, false, 0);
+			view_vbox.ReorderChild (find_bar, 1);
+			main_window.KeyPressEvent += HandleKeyPressEvent;
+
+			query_widget = new FSpot.QueryWidget (query, Database);
+			query_widget.Logic.Changed += HandleQueryLogicChanged;
+			view_vbox.PackStart (query_widget, false, false, 0);
+			view_vbox.ReorderChild (query_widget, 2);
+
+			MenuItem findByTag = uimanager.GetWidget ("/ui/menubar1/find/find_by_tag") as MenuItem;
+			query_widget.Hidden += delegate (object sender, EventArgs args) {
+				((Gtk.Label)findByTag.Child).TextWithMnemonic = Catalog.GetString ("Show _Find Bar");
+			};
+			query_widget.Shown += delegate (object sender, EventArgs args) {
+				((Gtk.Label)findByTag.Child).TextWithMnemonic = Catalog.GetString ("Hide _Find Bar");
+			};
+
+			icon_view = new QueryView (query);
+			icon_view.ZoomChanged += HandleZoomChanged;
+			LoadPreference (Preferences.ZOOM);
+			LoadPreference (Preferences.SHOW_TAGS);
+			LoadPreference (Preferences.SHOW_DATES);
+			LoadPreference (Preferences.SHOW_RATINGS);
+			icon_view_scrolled.Add (icon_view);
+			icon_view.DoubleClicked += HandleDoubleClicked;
+			icon_view.Vadjustment.ValueChanged += HandleIconViewScroll;
+			icon_view.GrabFocus ();
+
+			new FSpot.PreviewPopup (icon_view);
+
+			icon_view.DragBegin += HandleIconViewDragBegin;
+			icon_view.DragEnd += HandleIconViewDragEnd;
+			icon_view.DragDataGet += HandleIconViewDragDataGet;
+			icon_view.DragMotion += HandleIconViewDragMotion;
+			icon_view.DragDrop += HandleIconViewDragDrop;
+			// StartDrag is fired by IconView
+			icon_view.StartDrag += HandleIconViewStartDrag;
+
+			TagMenu tag_menu = new TagMenu (null, Database.Tags);
+			tag_menu.NewTagHandler += delegate { HandleCreateTagAndAttach (this, null); };
+			tag_menu.TagSelected += HandleAttachTagMenuSelected;
+			tag_menu.Populate();
+			(uimanager.GetWidget("/ui/menubar1/edit2/attach_tag") as MenuItem).Submenu = tag_menu;
+
+			PhotoTagMenu pmenu = new PhotoTagMenu ();
+			pmenu.TagSelected += HandleRemoveTagMenuSelected;
+			(uimanager.GetWidget("/ui/menubar1/edit2/remove_tag") as MenuItem).Submenu = pmenu;
+
+			Gtk.Drag.DestSet (icon_view, DestDefaults.All, icon_dest_target_table,
+					  DragAction.Copy | DragAction.Move);
+
+			icon_view.DragDataReceived += HandleIconViewDragDataReceived;
+			icon_view.KeyPressEvent += HandleIconViewKeyPressEvent;
+
+			photo_view = new PhotoView (query);
+			photo_box.Add (photo_view);
+
+			photo_view.DoubleClicked += HandleDoubleClicked;
+			photo_view.KeyPressEvent += HandlePhotoViewKeyPressEvent;
+			photo_view.UpdateStarted += HandlePhotoViewUpdateStarted;
+			photo_view.UpdateFinished += HandlePhotoViewUpdateFinished;
+
+			photo_view.View.ZoomChanged += HandleZoomChanged;
+
+			// Tag typing: focus the tag entry if the user starts typing a tag
+			icon_view.KeyPressEvent += HandlePossibleTagTyping;
+			photo_view.KeyPressEvent += HandlePossibleTagTyping;
+			tag_entry = new TagEntry (Database.Tags);
+			tag_entry.KeyPressEvent += HandleTagEntryKeyPressEvent;
+			tag_entry.TagsAttached += HandleTagEntryTagsAttached;
+			tag_entry.TagsRemoved += HandleTagEntryRemoveTags;
+			tag_entry.Activated += HandleTagEntryActivate;
+			tag_entry_container.Add (tag_entry);
+
+			Gtk.Drag.DestSet (photo_view, DestDefaults.All, tag_target_table,
+					  DragAction.Copy | DragAction.Move);
+
+			photo_view.DragMotion += HandlePhotoViewDragMotion;
+			photo_view.DragDrop += HandlePhotoViewDragDrop;
+			photo_view.DragDataReceived += HandlePhotoViewDragDataReceived;
+
+			view_notebook.SwitchPage += HandleViewNotebookSwitchPage;
+			group_selector.Adaptor.GlassSet += HandleAdaptorGlassSet;
+			group_selector.Adaptor.Changed += HandleAdaptorChanged;
+			LoadPreference (Preferences.GROUP_ADAPTOR_ORDER_ASC);
+			LoadPreference (Preferences.FILMSTRIP_ORIENTATION);
+
+			Selection = new MainSelection (this);
+			Selection.Changed += HandleSelectionChanged;
+			Selection.ItemsChanged += HandleSelectionItemsChanged;
+			Selection.Changed += Sidebar.HandleSelectionChanged;
+			Selection.ItemsChanged += Sidebar.HandleSelectionItemsChanged;
+
+			Mono.Addins.AddinManager.ExtensionChanged += PopulateExtendableMenus;
+			PopulateExtendableMenus (null, null);
+
+			UpdateMenus ();
+
+			main_window.ShowAll ();
+
+			tagbar.Hide ();
+			find_bar.Hide ();
+
+			UpdateFindByTagMenu ();
+
+			LoadPreference (Preferences.SHOW_TOOLBAR);
+			LoadPreference (Preferences.SHOW_SIDEBAR);
+			LoadPreference (Preferences.SHOW_TIMELINE);
+			LoadPreference (Preferences.SHOW_FILMSTRIP);
+
+			LoadPreference (Preferences.GNOME_MAILTO_ENABLED);
+
+			Preferences.SettingChanged += OnPreferencesChanged;
+
+			main_window.DeleteEvent += HandleDeleteEvent;
+
+			// When the icon_view is loaded, set it's initial scroll position
+			icon_view.SizeAllocated += HandleIconViewReady;
+
+			export.Activated += HandleExportActivated;
+			UpdateToolbar ();
+
+			(uimanager.GetWidget("/ui/menubar1/file1/close1") as MenuItem).Hide ();
+
+
+			Banshee.Kernel.Scheduler.Resume ();
+		}
+
+		private void HandleDisplayNextButtonClicked (object sender, EventArgs args)
+		{
+			PhotoView.View.Item.MoveNext ();
+		}
+
+		private void HandleDisplayPreviousButtonClicked (object sender, EventArgs args)
+		{
+			PhotoView.View.Item.MovePrevious ();
+		}
+
+		private void OnSidebarExtensionChanged (object s, ExtensionNodeEventArgs args) {
+			// FIXME: No sidebar page removal yet!
+			if (args.Change == ExtensionChange.Add)
+				Sidebar.AppendPage ((args.ExtensionNode as SidebarPageNode).GetPage ());
+		}
+
+		private Photo CurrentPhoto {
+			get {
+				int active = ActiveIndex ();
+				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 ()
+		{
+			if (Selection.Count == 1)
+				return SelectedIds() [0];
+			else
+				return PHOTO_IDX_NONE;
+		}
+
+		// Switching mode.
+		public enum ModeType {
+			IconView,
+			PhotoView
+		};
+
+		public event EventHandler ViewModeChanged;
+
+		public void SetViewMode (ModeType value)
+		{
+			if (ViewMode == value)
+				return;
+
+			ViewMode = value;
+			switch (ViewMode) {
+			case ModeType.IconView:
+				if (view_notebook.CurrentPage != 0)
+					view_notebook.CurrentPage = 0;
+
+				display_timeline.Sensitive = true;
+				display_filmstrip.Sensitive = false;
+				group_selector.Visible = display_timeline.Active;
+
+				if (photo_view.View.Loupe != null)
+					loupe_menu_item.Active = false;
+				JumpTo (photo_view.Item.Index);
+				zoom_scale.Value = icon_view.Zoom;
+				break;
+			case ModeType.PhotoView:
+				if (view_notebook.CurrentPage != 1)
+					view_notebook.CurrentPage = 1;
+
+				display_timeline.Sensitive = false;
+				display_filmstrip.Sensitive = true;
+				group_selector.Visible = false;
+
+				JumpTo (icon_view.FocusCell);
+				zoom_scale.Value = photo_view.NormalizedZoom;
+
+				photo_view.View.GrabFocus();
+				break;
+			}
+			Selection.MarkChanged ();
+			UpdateToolbar ();
+			if (ViewModeChanged != null)
+				ViewModeChanged (this, null);
+		}
+
+		void UpdateToolbar ()
+		{
+			if (browse_button != null) {
+				bool state = ViewMode == ModeType.IconView;
+
+				if (browse_button.Active != state)
+					browse_button.Active = state;
+			}
+
+			if (edit_button != null) {
+				bool state = ViewMode == ModeType.PhotoView;
+
+				if (edit_button.Active != state)
+					edit_button.Active = state;
+			}
+
+			if (ViewMode == ModeType.PhotoView) {
+				display_previous_button.Visible = true;
+				display_next_button.Visible = true;
+				count_label.Visible = true;
+
+				bool valid = photo_view.View.Item.IsValid;
+				bool prev = valid && photo_view.View.Item.Index > 0;
+				bool next = valid && photo_view.View.Item.Index < query.Count - 1;
+
+				display_previous_button.Sensitive = prev;
+				display_next_button.Sensitive = next;
+
+				if (Query == null)
+					count_label.Text = String.Empty;
+				else
+					// Note for translators: This indicates the current photo is photo {0} of {1} out of photos
+					count_label.Text = String.Format (Catalog.GetString ("{0} of {1}"), Query.Count == 0 ? 0 : photo_view.View.Item.Index + 1, Query.Count == 0 ? 0 : Query.Count);
+			} else {
+				display_previous_button.Visible = false;
+				display_next_button.Visible = false;
+				count_label.Visible = false;
+			}
+
+		}
+
+		private void HandleExportActivated (object o, EventArgs e)
+		{
+			FSpot.Extensions.ExportMenuItemNode.SelectedImages = delegate () {return new PhotoList (SelectedPhotos ()); };
+		}
+
+		private void HandleDbItemsChanged (object sender, DbItemEventArgs<Photo> args)
+		{
+			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)
+				query.RequestReload ();
+		}
+
+		private void HandleTagsChanged (object sender, DbItemEventArgs<Tag> args)
+		{
+			icon_view.QueueDraw ();
+			UpdateTagEntryFromSelection ();
+		}
+
+		void HandleViewNotebookSwitchPage (object sender, SwitchPageArgs args)
+		{
+			switch (view_notebook.CurrentPage) {
+			case 0:
+				SetViewMode (ModeType.IconView);
+				break;
+			case 1:
+				SetViewMode (ModeType.PhotoView);
+				break;
+			}
+		}
+
+		private int [] SelectedIds () {
+			int [] ids = new int [0];
+
+			if (fsview != null && fsview.View.Item.IsValid)
+				ids = new int [] { fsview.View.Item.Index };
+			else {
+				switch (ViewMode) {
+				case ModeType.IconView:
+					ids = icon_view.Selection.Ids;
+					break;
+				default:
+				case ModeType.PhotoView:
+					if (photo_view.Item.IsValid)
+						ids = new int [] { photo_view.Item.Index };
+					break;
+				}
+			}
+
+			return ids;
+		}
+
+		public class MainSelection : IBrowsableCollection {
+			MainWindow win;
+
+			public MainSelection (MainWindow win)
+			{
+				this.win = win;
+				win.icon_view.Selection.Changed += HandleSelectionChanged;
+				win.icon_view.Selection.ItemsChanged += HandleSelectionItemsChanged;
+				win.photo_view.PhotoChanged += HandlePhotoChanged;
+				win.query.ItemsChanged += HandleQueryItemsChanged;
+			}
+
+			public int Count {
+				get {
+					switch (win.ViewMode) {
+					case ModeType.PhotoView:
+						return win.photo_view.Item.IsValid ? 1 : 0;
+					case ModeType.IconView:
+						return win.icon_view.Selection.Count;
+					}
+					return 0;
+				}
+			}
+
+			public int IndexOf (IBrowsableItem item)
+			{
+				switch (win.ViewMode) {
+				case ModeType.PhotoView:
+					return item == win.photo_view.Item.Current ? 0 : -1;
+				case ModeType.IconView:
+					return win.icon_view.Selection.IndexOf (item);
+				}
+				return -1;
+			}
+
+			public bool Contains (IBrowsableItem item)
+			{
+				switch (win.ViewMode) {
+				case ModeType.PhotoView:
+					return item == win.photo_view.Item.Current ? true : false;
+				case ModeType.IconView:
+					return win.icon_view.Selection.Contains (item);
+				}
+				return false;
+			}
+
+			public void MarkChanged ()
+			{
+				if (Changed != null)
+					Changed (this);
+			}
+
+			public void MarkChanged (int index, IBrowsableItemChanges changes)
+			{
+				throw new System.NotImplementedException ("I didn't think you'd find me");
+			}
+
+			public IBrowsableItem this [int index] {
+				get {
+					switch (win.ViewMode) {
+					case ModeType.PhotoView:
+						if (index == 0)
+							return win.photo_view.Item.Current;
+						break;
+					case ModeType.IconView:
+						return win.icon_view.Selection [index];
+					}
+					throw new ArgumentOutOfRangeException ();
+				}
+			}
+
+			public IBrowsableItem [] Items {
+				get {
+					switch (win.ViewMode) {
+					case ModeType.PhotoView:
+						if (win.photo_view.Item.IsValid)
+							return new IBrowsableItem [] {win.photo_view.Item.Current};
+
+						break;
+					case ModeType.IconView:
+						return win.icon_view.Selection.Items;
+					}
+					return new IBrowsableItem [0];
+				}
+			}
+
+			private void HandleQueryItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args)
+			{
+				// FIXME for now we only listen to changes directly from the query
+				// when we are in PhotoView mode because we presume that we'll get
+				// proper notification from the icon view selection in icon view mode
+				if (win.ViewMode != ModeType.PhotoView || ItemsChanged == null)
+					return;
+
+				foreach (int item in args.Items) {
+					if (win.photo_view.Item.Index == item ) {
+						ItemsChanged (this, new BrowsableEventArgs (item, args.Changes));
+						break;
+					}
+				}
+			}
+
+			private void HandlePhotoChanged (PhotoView sender)
+			{
+				if (win.ViewMode == ModeType.PhotoView && Changed != null)
+					Changed (this);
+			}
+
+			public void HandleSelectionChanged (IBrowsableCollection collection)
+			{
+				if (win.ViewMode == ModeType.IconView && Changed != null)
+					Changed (this);
+
+
+			}
+
+			private void HandleSelectionItemsChanged (IBrowsableCollection collection,  BrowsableEventArgs args)
+			{
+				if (win.ViewMode == ModeType.IconView && ItemsChanged != null)
+					ItemsChanged (this, args);
+			}
+
+			public event IBrowsableCollectionChangedHandler Changed;
+			public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
+		}
+
+		private void HandleSelectionChanged (IBrowsableCollection collection)
+		{
+			UpdateMenus ();
+			UpdateTagEntryFromSelection ();
+			UpdateStatusLabel ();
+			UpdateToolbar ();
+
+			InfoBox.Photos = SelectedPhotos ();
+		}
+
+		private void HandleSelectionItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args)
+		{
+			UpdateMenus ();
+			UpdateTagEntryFromSelection ();
+			photo_view.UpdateTagView ();
+			InfoBox.Photos = SelectedPhotos ();
+		}
+
+
+		//
+		// Selection Interface
+		//
+
+		private Photo [] SelectedPhotos (int [] selected_ids)
+		{
+			Photo [] photo_list = new Photo [selected_ids.Length];
+
+			int i = 0;
+			foreach (int num in selected_ids)
+				photo_list [i ++] = query [num] as Photo;
+
+			return photo_list;
+		}
+
+		public Photo [] SelectedPhotos ()
+		{
+			return SelectedPhotos (SelectedIds ());
+		}
+
+		public PhotoQuery Query {
+			get { return query; }
+		}
+
+		//
+		// Commands
+		//
+
+		private void RotateSelectedPictures (Gtk.Window parent, RotateDirection direction)
+		{
+			RotateCommand command = new RotateCommand (parent);
+
+			int [] selected_ids = SelectedIds ();
+			if (command.Execute (direction, SelectedPhotos (selected_ids)))
+				query.MarkChanged (selected_ids, InvalidateData.Instance);
+		}
+
+		//
+		// Tag Selection Drag Handlers
+		//
+
+		public void AddTagExtended (int [] nums, Tag [] tags)
+		{
+			foreach (int num in nums)
+				(query[num] as Photo).AddTag (tags);
+			query.Commit (nums);
+
+			foreach (Tag t in tags) {
+				if (t.Icon != null || t.IconWasCleared)
+					continue;
+				// FIXME this needs a lot more work.
+				Pixbuf icon = null;
+				try {
+					Pixbuf tmp = FSpot.PhotoLoader.LoadAtMaxSize (query [nums[0]], 128, 128);
+					icon = PixbufUtils.TagIconFromPixbuf (tmp);
+					tmp.Dispose ();
+				} catch {
+					icon = null;
+				}
+
+				t.Icon = icon;
+				Database.Tags.Commit (t);
+			}
+		}
+
+		public void SetFolderQuery (IEnumerable<SafeUri> uri_list)
+		{
+			ShowQueryWidget ();
+			query_widget.SetFolders (uri_list);
+		}
+
+		public void RemoveTags (int [] nums, Tag [] tags)
+		{
+			foreach (int num in nums)
+				(query[num] as Photo).RemoveTag (tags);
+			query.Commit (nums);
+		}
+
+		void HandleTagSelectionButtonPressEvent (object sender, ButtonPressEventArgs args)
+		{
+			if (args.Event.Button == 3) {
+				TagPopup popup = new TagPopup ();
+				popup.Activate (args.Event, tag_selection_widget.TagAtPosition (args.Event.X, args.Event.Y),
+				tag_selection_widget.TagHighlight);
+				args.RetVal = true;
+			}
+		}
+
+		void HandleTagSelectionPopupMenu (object sender, PopupMenuArgs args)
+		{
+			TagPopup popup = new TagPopup ();
+			popup.Activate (null, null, tag_selection_widget.TagHighlight);
+			args.RetVal = true;
+		}
+
+		void HandleTagSelectionRowActivated (object sender, RowActivatedArgs args)
+		{
+			ShowQueryWidget ();
+			query_widget.Include (new Tag [] {tag_selection_widget.TagByPath (args.Path)});
+		}
+
+		void JumpTo (int index)
+		{
+			switch (ViewMode) {
+			case ModeType.PhotoView:
+				photo_view.Item.Index = index;
+				break;
+			case ModeType.IconView:
+				icon_view.ScrollTo (index);
+				icon_view.Throb (index);
+				break;
+			}
+		}
+
+		void HandleAdaptorGlassSet (FSpot.GroupAdaptor sender, int index)
+		{
+			JumpTo (index);
+		}
+
+		void HandleAdaptorChanged (FSpot.GroupAdaptor sender)
+		{
+			UpdateGlass ();
+		}
+
+		/*
+		 * Keep the glass temporal slider in sync with the user's scrolling in the icon_view
+		 */
+		private void UpdateGlass ()
+		{
+			// If people cant see the timeline don't update it.
+			if (! display_timeline.Active)
+				return;
+
+			int cell_num = icon_view.TopLeftVisibleCell();
+			if (cell_num == -1 /*|| cell_num == lastTopLeftCell*/)
+				return;
+
+			IBrowsableItem photo = icon_view.Collection [cell_num];
+			/*
+			 * FIXME this is a lame hack to get around a delegate chain.  This should
+			 * actually operate directly on the adaptor not on the selector but I don't have
+			 * time to fix it right now.
+			 */
+			if (!group_selector.GlassUpdating) {
+				group_selector.SetPosition (group_selector.Adaptor.IndexFromPhoto (photo));
+			}
+		}
+
+		void HandleIconViewScroll (object sender, EventArgs args)
+		{
+			UpdateGlass ();
+		}
+
+		void HandleIconViewReady (object sender, EventArgs args)
+		{
+			LoadPreference (Preferences.GLASS_POSITION);
+
+			// We only want to set the position the first time
+			// the icon_view is ready (eg on startup)
+			icon_view.SizeAllocated -= HandleIconViewReady;
+		}
+
+		//
+		// IconView Drag Handlers
+		//
+
+		public void HandleIconViewStartDrag (object sender, StartDragArgs args)
+		{
+			Gtk.Drag.Begin (icon_view, new TargetList (icon_source_target_table),
+					DragAction.Copy | DragAction.Move, (int) args.Button, args.Event);
+		}
+
+		public void HandleIconViewDragBegin (object sender, DragBeginArgs args)
+		{
+			Photo [] photos = SelectedPhotos ();
+
+			if (photos.Length > 0) {
+				int len = Math.Min (photos.Length, 4);
+				int size = 48;
+				int border  = 2;
+				int csize = size/2 + len * size / 2 + 2 * border ;
+
+				Pixbuf container = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, csize, csize);
+				container.Fill (0x00000000);
+
+				bool use_icon = false;;
+				while (len-- > 0) {
+					FSpot.PixbufCache.CacheEntry entry = icon_view.Cache.Lookup (photos [len].DefaultVersion.Uri);
+
+					Pixbuf thumbnail = null;
+					if (entry != null) {
+						Cms.Profile screen_profile;
+						if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
+							thumbnail = entry.Pixbuf.Copy ();
+							FSpot.ColorManagement.ApplyProfile (thumbnail, screen_profile);
+						} else
+							thumbnail = entry.ShallowCopyPixbuf ();
+					}
+
+					if (thumbnail != null) {
+						Pixbuf small = PixbufUtils.ScaleToMaxSize (thumbnail, size, size);
+
+						int x = border + len * (size/2) + (size - small.Width)/2;
+						int y = border + len * (size/2) + (size - small.Height)/2;
+						Pixbuf box = new Pixbuf (container, x - border, y - border,
+									 small.Width + 2 * border, small.Height + 2 * border);
+
+						box.Fill (0x000000ff);
+						small.CopyArea (0, 0, small.Width, small.Height, container, x, y);
+
+						thumbnail.Dispose ();
+						small.Dispose ();
+						use_icon = true;
+					}
+				}
+				if (use_icon)
+					Gtk.Drag.SetIconPixbuf (args.Context, container, 0, 0);
+				container.Dispose ();
+			}
+		}
+
+		void HandleIconViewDragEnd (object sender, DragEndArgs args) {
+		}
+
+		void HandleIconViewDragDataGet (object sender, DragDataGetArgs args)
+		{
+			if (args.Info == DragDropTargets.UriListEntry.Info) {
+                var uris = from p in SelectedPhotos () select p.DefaultVersion.Uri;
+				args.SelectionData.SetUriListData (new UriList (uris), args.Context.Targets[0]);
+				return;
+			}
+
+			if (args.Info == DragDropTargets.PhotoListEntry.Info) {
+				args.SelectionData.SetPhotosData (SelectedPhotos (), args.Context.Targets[0]);
+				return;
+			}
+
+			if (args.Info == DragDropTargets.RootWindowEntry.Info) {
+				HandleSetAsBackgroundCommand (null, null);
+				return;
+			}
+		}
+
+		void HandleIconViewDragDrop (object sender, DragDropArgs args)
+		{
+			args.RetVal = true;
+		}
+
+		void HandleIconViewDragMotion (object sender, DragMotionArgs args)
+		{
+			Gdk.Drag.Status (args.Context, args.Context.SuggestedAction, args.Time);
+			args.RetVal = true;
+		}
+
+		public void ImportUriList (UriList list, bool copy)
+		{
+			// Drag'n drop import.
+			var controller = new ImportController (false);
+			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;
+			controller.CopyFiles = copy;
+			controller.DuplicateDetect = true;
+			controller.RecurseSubdirectories = true;
+			controller.RemoveOriginals = false;
+
+			var import_window = new ImportDialog (controller, Window);
+			import_window.Show ();
+
+			controller.StartImport ();
+		}
+
+		void HandleImportCommand (object obj, EventArgs args)
+		{
+			StartImport (null);
+		}
+
+		public void ImportFile (SafeUri uri)
+		{
+			StartImport (uri);
+		}
+
+		void StartImport (SafeUri uri)
+		{
+			var controller = new ImportController (true);
+			controller.StatusEvent += (evnt) => {
+				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 ();
+		}
+
+		void HandleIconViewDragDataReceived (object sender, DragDataReceivedArgs args)
+		{
+			Widget source = Gtk.Drag.GetSourceWidget (args.Context);
+
+			if (args.Info == DragDropTargets.TagListEntry.Info) {
+				//
+				// Translate the event args from viewport space to window space,
+				// 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);
+
+				//Console.WriteLine ("Drop cell = {0} ({1},{2})", item, args.X, args.Y);
+				if (item >= 0) {
+					if (icon_view.Selection.Contains (item))
+						AttachTags (tag_selection_widget.TagHighlight, SelectedIds());
+					else
+						AttachTags (tag_selection_widget.TagHighlight, new int [] {item});
+				}
+
+				Gtk.Drag.Finish (args.Context, true, false, args.Time);
+				return;
+			}
+
+			if (args.Info == DragDropTargets.UriListEntry.Info) {
+
+				/*
+				 * If the drop is coming from inside f-spot then we don't want to import
+				 */
+				if (source != null)
+					return;
+
+				UriList list = args.SelectionData.GetUriListData ();
+				ImportUriList (list, (args.Context.Action & Gdk.DragAction.Copy) != 0);
+
+				Gtk.Drag.Finish (args.Context, true, false, args.Time);
+				return;
+			}
+
+			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);
+
+				if (p_item >= 0) {
+					if (icon_view.Selection.Contains (p_item)) //We don't want to reparent ourselves!
+						return;
+					PhotoVersionCommands.Reparent cmd = new PhotoVersionCommands.Reparent ();
+					Photo[] photos_to_reparent = SelectedPhotos ();
+					// Give feedback to user that something happened, and leave the parent selected after reparenting
+					icon_view.Selection.Add (p_item);
+					cmd.Execute (Database.Photos, photos_to_reparent, query.Photos [p_item], GetToplevel (null));
+					UpdateQuery ();
+				}
+				Gtk.Drag.Finish (args.Context, true, false, args.Time);
+				return;
+			}
+		}
+
+		//
+		// IconView event handlers
+		//
+
+		void HandleDoubleClicked (object sender, BrowsableEventArgs args)
+		{
+			Widget widget = sender as Widget;
+			if (widget == null)
+				return;
+
+			switch (ViewMode) {
+			case ModeType.IconView:
+				icon_view.FocusCell = args.Items[0];
+				SetViewMode (ModeType.PhotoView);
+				break;
+			case ModeType.PhotoView:
+				SetViewMode (ModeType.IconView);
+				break;
+			}
+		}
+
+		public void HandleCommonPhotoCommands (object sender, Gtk.KeyPressEventArgs args) {
+			bool alt = ModifierType.Mod1Mask == (args.Event.State & ModifierType.Mod1Mask);
+			bool shift = ModifierType.ShiftMask == (args.Event.State & ModifierType.ShiftMask);
+
+			if (args.RetVal == null)
+				args.RetVal = false;
+
+			switch (args.Event.Key) {
+			case Gdk.Key.Delete:
+				if (shift)
+					HandleDeleteCommand (sender, args);
+				else
+					HandleRemoveCommand (sender, args);
+				break;
+			case Gdk.Key.Key_0:
+			case Gdk.Key.KP_0:
+				if (alt)
+					HandleRatingMenuSelected (0);
+				break;
+			case Gdk.Key.Key_1:
+			case Gdk.Key.KP_1:
+				if (alt)
+					HandleRatingMenuSelected (1);
+				break;
+			case Gdk.Key.Key_2:
+			case Gdk.Key.KP_2:
+				if (alt)
+					HandleRatingMenuSelected (2);
+				break;
+			case Gdk.Key.Key_3:
+			case Gdk.Key.KP_3:
+				if (alt)
+					HandleRatingMenuSelected (3);
+				break;
+			case Gdk.Key.Key_4:
+			case Gdk.Key.KP_4:
+				if (alt)
+					HandleRatingMenuSelected (4);
+				break;
+			case Gdk.Key.Key_5:
+			case Gdk.Key.KP_5:
+				if (alt)
+					HandleRatingMenuSelected (5);
+				break;
+			default:
+				return; //do not set the RetVal to true
+			}
+			args.RetVal = true;
+		}
+
+		void HandleIconViewKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
+		{
+			HandleCommonPhotoCommands (sender, args);
+			if ((bool)args.RetVal)
+				return;
+
+			switch (args.Event.Key) {
+			case Gdk.Key.F:
+			case Gdk.Key.f:
+				HandleViewFullscreen (sender, args);
+				args.RetVal = true;
+				break;
+			}
+		}
+
+		//
+		// FullScreenView event handlers.
+		//
+
+		void HandleFullScreenViewKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
+		{
+			HandleCommonPhotoCommands (sender, args);
+			if ((bool)args.RetVal)
+				// this will hide any panels again that might have appeared above the fullscreen view
+				fsview.Present ();
+		}
+
+		//
+		// PhotoView event handlers.
+		//
+
+		void HandlePhotoViewKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
+		{
+			HandleCommonPhotoCommands (sender, args);
+			if ((bool)args.RetVal)
+				return;
+
+			switch (args.Event.Key) {
+			case Gdk.Key.F:
+			case Gdk.Key.f:
+				HandleViewFullscreen (sender, args);
+				args.RetVal = true;
+				break;
+			case Gdk.Key.Escape:
+				SetViewMode (ModeType.IconView);
+				args.RetVal = true;
+				break;
+			}
+		}
+
+		void HandlePhotoViewUpdateStarted (PhotoView sender)
+		{
+			main_window.GdkWindow.Cursor = watch;
+			// FIXME: use gdk_display_flush() when available
+			main_window.GdkWindow.Display.Sync ();
+		}
+
+		void HandlePhotoViewUpdateFinished (PhotoView sender)
+		{
+			main_window.GdkWindow.Cursor = null;
+			// FIXME: use gdk_display_flush() when available
+			main_window.GdkWindow.Display.Sync ();
+		}
+
+		//
+		// PhotoView drag handlers.
+		//
+
+		void HandlePhotoViewDragDrop (object sender, DragDropArgs args)
+		{
+			//Widget source = Gtk.Drag.GetSourceWidget (args.Context);
+
+			args.RetVal = true;
+		}
+
+		void HandlePhotoViewDragMotion (object sender, DragMotionArgs args)
+		{
+			//Widget source = Gtk.Drag.GetSourceWidget (args.Context);
+			//Console.WriteLine ("Drag Motion {0}", source == null ? "null" : source.TypeName);
+
+			Gdk.Drag.Status (args.Context, args.Context.SuggestedAction, args.Time);
+			args.RetVal = true;
+		}
+
+		void HandlePhotoViewDragDataReceived (object sender, DragDataReceivedArgs args)
+		{
+			//Widget source = Gtk.Drag.GetSourceWidget (args.Context);
+			//Console.WriteLine ("Drag received {0}", source == null ? "null" : source.TypeName);
+
+			HandleAttachTagCommand (sender, null);
+
+			Gtk.Drag.Finish (args.Context, true, false, args.Time);
+
+			photo_view.View.GrabFocus();
+		}
+
+		//
+		// RatingMenu commands
+		//
+
+		public void HandleRatingMenuSelected (int r)
+		{
+			if (ViewMode == ModeType.PhotoView)
+				this.photo_view.UpdateRating(r);
+
+			Photo p;
+			Database.BeginTransaction ();
+			int [] selected_photos = SelectedIds ();
+			foreach (int num in selected_photos) {
+				p = query [num] as Photo;
+				p.Rating = (uint) r;
+			}
+			query.Commit (selected_photos);
+			Database.CommitTransaction ();
+		}
+
+		//
+		// TagMenu commands.
+		//
+
+		public void HandleTagMenuActivate (object sender, EventArgs args)
+		{
+
+			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 ());
+			}
+		}
+
+		public void HandleAttachTagMenuSelected (Tag t)
+		{
+			Database.BeginTransaction ();
+			AddTagExtended (SelectedIds (), new Tag [] {t});
+			Database.CommitTransaction ();
+			query_widget.PhotoTagsChanged (new Tag[] {t});
+		}
+
+		public void HandleRequireTag (object sender, EventArgs args)
+		{
+			ShowQueryWidget ();
+			query_widget.Require (tag_selection_widget.TagHighlight);
+		}
+
+		public void HandleUnRequireTag (object sender, EventArgs args)
+		{
+			query_widget.UnRequire (tag_selection_widget.TagHighlight);
+		}
+
+		public void HandleRemoveTagMenuSelected (Tag t)
+		{
+			Database.BeginTransaction ();
+			RemoveTags (SelectedIds (), new Tag [] {t});
+			Database.CommitTransaction ();
+			query_widget.PhotoTagsChanged (new Tag [] {t});
+		}
+
+		//
+		// Main menu commands
+		//
+
+		void HandlePageSetupActivated (object o, EventArgs e)
+		{
+			FSpot.Core.Global.PageSetup = Print.RunPageSetupDialog (this.Window, FSpot.Core.Global.PageSetup, null);
+		}
+
+		void HandlePrintCommand (object sender, EventArgs e)
+		{
+			FSpot.PrintOperation print = new FSpot.PrintOperation (SelectedPhotos ());
+			print.Run (PrintOperationAction.PrintDialog, null);
+		}
+
+		public void HandlePreferences (object sender, EventArgs args)
+		{
+			var pref = new PreferenceDialog (GetToplevel (sender));
+			pref.Run ();
+			pref.Destroy ();
+		}
+
+		public void HandleManageExtensions (object sender, EventArgs args)
+		{
+			Mono.Addins.Gui.AddinManagerWindow.Run (main_window);
+		}
+
+		void HandleSendMailCommand (object sender, EventArgs args)
+		{
+			//TestDisplay ();
+			new FSpot.SendEmail (new PhotoList (SelectedPhotos ()), Window);
+		}
+
+		public static void HandleHelp (object sender, EventArgs args)
+		{
+			GtkBeans.Global.ShowUri (App.Instance.Organizer.Window.Screen, "ghelp:f-spot");
+		}
+
+		public static void HandleAbout (object sender, EventArgs args)
+		{
+			FSpot.UI.Dialog.AboutDialog.ShowUp ();
+		}
+
+		void HandleTagSizeChange (object sender, EventArgs args)
+		{
+			RadioAction choice = sender as RadioAction;
+
+			//Get this callback twice. Once for the active going menuitem,
+			//once for the inactive leaving one. Ignore the inactive.
+			if (!choice.Active)
+				return;
+
+			int old_size = TagsIconSize;
+
+			if (choice == tag_icon_hidden) {
+				TagsIconSize = (int) Tag.IconSize.Hidden;
+			} else if (choice == tag_icon_small) {
+				TagsIconSize = (int) Tag.IconSize.Small;
+			} else if (choice == tag_icon_medium) {
+				TagsIconSize = (int) Tag.IconSize.Medium;
+			} else if (choice == tag_icon_large) {
+				TagsIconSize = (int) Tag.IconSize.Large;
+			} else {
+				return;
+			}
+
+			if (old_size != TagsIconSize) {
+				tag_selection_widget.ColumnsAutosize();
+				if (photo_view != null)
+					photo_view.UpdateTagView ();
+				Preferences.Set (Preferences.TAG_ICON_SIZE, TagsIconSize);
+			}
+		}
+
+		public void HandleFilmstripHorizontal (object sender, EventArgs args)
+		{
+			if (photo_view.FilmstripOrientation == Orientation.Horizontal)
+				return;
+			(sender as Gtk.CheckMenuItem).Active = false;
+			photo_view.PlaceFilmstrip (Orientation.Horizontal);
+		}
+
+		public void HandleFilmstripVertical (object sender, EventArgs args)
+		{
+			if (photo_view.FilmstripOrientation == Orientation.Vertical)
+				return;
+			(sender as Gtk.CheckMenuItem).Active = false;
+			photo_view.PlaceFilmstrip (Orientation.Vertical);
+		}
+
+		public void HandleReverseOrder (object sender, EventArgs args)
+		{
+			ToggleAction item = sender as ToggleAction;
+
+			if (group_selector.Adaptor.OrderAscending == item.Active)
+				return;
+
+			group_selector.Adaptor.OrderAscending = item.Active;
+			query.TimeOrderAsc = item.Active;
+
+			// FIXME this is blah...we need UIManager love here
+			if (item != reverse_order)
+				reverse_order.Active = item.Active;
+
+			//update the selection in the timeline
+			if ( query.Range != null && group_selector.Adaptor is TimeAdaptor) {
+				group_selector.SetLimitsToDates(query.Range.Start, query.Range.End);
+
+			}
+
+		}
+
+		// Called when the user clicks the X button
+		void HandleDeleteEvent (object sender, DeleteEventArgs args)
+		{
+			Close();
+			args.RetVal = true;
+		}
+
+		void HandleCloseCommand (object sender, EventArgs args)
+		{
+			Close();
+		}
+
+		public void Close ()
+		{
+			int x, y, width, height;
+			main_window.GetPosition (out x, out y);
+			main_window.GetSize (out width, out height);
+
+			bool maximized = ((main_window.GdkWindow.State & Gdk.WindowState.Maximized) > 0);
+			Preferences.Set (Preferences.MAIN_WINDOW_MAXIMIZED, maximized);
+
+			if (!maximized) {
+				Preferences.Set (Preferences.MAIN_WINDOW_X,		x);
+				Preferences.Set (Preferences.MAIN_WINDOW_Y,		y);
+				Preferences.Set (Preferences.MAIN_WINDOW_WIDTH,		width);
+				Preferences.Set (Preferences.MAIN_WINDOW_HEIGHT,	height);
+			}
+
+			Preferences.Set (Preferences.SHOW_TOOLBAR,		toolbar.Visible);
+			Preferences.Set (Preferences.SHOW_SIDEBAR,		info_vbox.Visible);
+			Preferences.Set (Preferences.SHOW_TIMELINE,		display_timeline.Active);
+			Preferences.Set (Preferences.SHOW_FILMSTRIP,		display_filmstrip.Active);
+			Preferences.Set (Preferences.SHOW_TAGS,			icon_view.DisplayTags);
+			Preferences.Set (Preferences.SHOW_DATES,		icon_view.DisplayDates);
+			Preferences.Set (Preferences.SHOW_RATINGS,		icon_view.DisplayRatings);
+
+			Preferences.Set (Preferences.GROUP_ADAPTOR_ORDER_ASC,   group_selector.Adaptor.OrderAscending);
+			Preferences.Set (Preferences.GLASS_POSITION,		group_selector.GlassPosition);
+
+			Preferences.Set (Preferences.SIDEBAR_POSITION,		main_hpaned.Position);
+			Preferences.Set (Preferences.ZOOM,			icon_view.Zoom);
+
+			tag_selection_widget.SaveExpandDefaults ();
+
+			this.Window.Destroy ();
+		}
+
+		void HandleCreateVersionCommand (object obj, EventArgs args)
+		{
+			PhotoVersionCommands.Create cmd = new PhotoVersionCommands.Create ();
+			cmd.Execute (Database.Photos, CurrentPhoto, GetToplevel (null));
+		}
+
+		void HandleDeleteVersionCommand (object obj, EventArgs args)
+		{
+			PhotoVersionCommands.Delete cmd = new PhotoVersionCommands.Delete ();
+			cmd.Execute (Database.Photos, CurrentPhoto, GetToplevel (null));
+		}
+
+		void HandleDetachVersionCommand (object obj, EventArgs args)
+		{
+			PhotoVersionCommands.Detach cmd = new PhotoVersionCommands.Detach ();
+			cmd.Execute (Database.Photos, CurrentPhoto, GetToplevel (null));
+			UpdateQuery ();
+		}
+
+		void HandleRenameVersionCommand (object obj, EventArgs args)
+		{
+			PhotoVersionCommands.Rename cmd = new PhotoVersionCommands.Rename ();
+			cmd.Execute (Database.Photos, CurrentPhoto, main_window);
+		}
+
+		public void HandleCreateTagAndAttach (object sender, EventArgs args)
+		{
+			Tag new_tag = CreateTag (sender, args);
+
+			if (new_tag != null)
+				HandleAttachTagMenuSelected (new_tag);
+		}
+
+		public void HandleCreateNewCategoryCommand (object sender, EventArgs args)
+		{
+			Tag new_tag = CreateTag (sender, args);
+
+			if (new_tag != null) {
+				tag_selection_widget.ScrollTo (new_tag);
+				tag_selection_widget.TagHighlight = new Tag [] {new_tag};
+			}
+		}
+
+		public Tag CreateTag (object sender, EventArgs args)
+		{
+			TagCommands.Create command = new TagCommands.Create (Database.Tags);
+			return command.Execute (TagCommands.TagType.Category, tag_selection_widget.TagHighlight);
+		}
+
+		public void HandleAttachTagCommand (object obj, EventArgs args)
+		{
+			AttachTags (tag_selection_widget.TagHighlight, SelectedIds ());
+		}
+
+		void AttachTags (Tag [] tags, int [] ids)
+		{
+			Database.BeginTransaction ();
+			AddTagExtended (ids, tags);
+			Database.CommitTransaction ();
+			query_widget.PhotoTagsChanged (tags);
+		}
+
+		public void HandleRemoveTagCommand (object obj, EventArgs args)
+		{
+			Tag [] tags = this.tag_selection_widget.TagHighlight;
+
+			Database.BeginTransaction ();
+			RemoveTags (SelectedIds (), tags);
+			Database.CommitTransaction ();
+			query_widget.PhotoTagsChanged (tags);
+		}
+
+		public void HandleEditSelectedTag (object sender, EventArgs ea)
+		{
+			Tag [] tags = this.tag_selection_widget.TagHighlight;
+			if (tags.Length != 1)
+				return;
+
+			HandleEditSelectedTagWithTag (tags [0]);
+		}
+
+		public void HandleEditSelectedTagWithTag (Tag tag)
+		{
+			if (tag == null)
+				return;
+
+			EditTagDialog dialog = new EditTagDialog (Database, tag, main_window);
+			if ((ResponseType)dialog.Run () == ResponseType.Ok) {
+				bool name_changed = false;
+				try {
+					if (tag.Name != dialog.TagName) {
+						tag.Name = dialog.TagName;
+						name_changed = true;
+					}
+					tag.Category = dialog.TagCategory;
+					Database.Tags.Commit (tag, name_changed);
+				} catch (Exception ex) {
+					Log.Exception (ex);
+				}
+			}
+
+			dialog.Destroy ();
+		}
+
+		public void HandleMergeTagsCommand (object obj, EventArgs args)
+		{
+			Tag [] tags = this.tag_selection_widget.TagHighlight;
+			if (tags.Length < 2)
+				return;
+
+			// Translators, The singular case will never happen here.
+			string header = Catalog.GetPluralString ("Merge the selected tag",
+									    "Merge the {0} selected tags?", tags.Length);
+			header = String.Format (header, tags.Length);
+
+			// If a tag with children tags is selected for merging, we
+			// should also merge its children..
+			List<Tag> all_tags = new List<Tag> (tags.Length);
+			foreach (Tag tag in tags) {
+				if (! all_tags.Contains (tag))
+					all_tags.Add (tag);
+				else
+					continue;
+
+				if (! (tag is Category))
+					continue;
+
+				(tag as Category).AddDescendentsTo (all_tags);
+			}
+
+			// debug..
+			tags = all_tags.ToArray ();
+			System.Array.Sort (tags, new TagRemoveComparer ());
+
+			foreach (Tag tag in tags) {
+				Log.Debug ("tag: {0}", tag.Name);
+			}
+
+			string msg = Catalog.GetString("This operation will merge the selected tags and any sub-tags into a single tag.");
+
+			string ok_caption = Catalog.GetString ("_Merge Tags");
+
+			if (ResponseType.Ok != HigMessageDialog.RunHigConfirmation(main_window,
+										   DialogFlags.DestroyWithParent,
+										   MessageType.Warning,
+										   header,
+										   msg,
+										   ok_caption))
+				return;
+
+			// The surviving tag is the last tag, as it is definitely not a child of any other the
+			// other tags.  removetags will contain the tags to be merged.
+			Tag survivor = tags[tags.Length - 1];
+
+			Tag [] removetags = new Tag [tags.Length - 1];
+			Array.Copy (tags, 0, removetags, 0, tags.Length - 1);
+
+			// Add the surviving tag to all the photos with the other tags
+			Photo [] photos = Database.Photos.Query (removetags);
+			foreach (Photo p in photos) {
+				p.AddTag (survivor);
+			}
+
+			// Remove the defunct tags, which removes them from the photos, commits
+			// the photos, and removes the tags from the TagStore
+			Database.BeginTransaction ();
+			Database.Photos.Remove (removetags);
+			Database.CommitTransaction ();
+
+			HandleEditSelectedTagWithTag (survivor);
+		}
+
+		void HandleAdjustTime (object sender, EventArgs args)
+		{
+			PhotoList list = new PhotoList (Selection.Items);
+			list.Sort (new IBrowsableItemComparer.CompareDateName ());
+			(new AdjustTimeDialog (Database, list)).Run ();
+		}
+
+		public void HideLoupe ()
+		{
+			loupe_menu_item.Active = false;
+		}
+
+		void HandleLoupe (object sender, EventArgs args)
+		{
+			// Don't steal characters from any text entries
+			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
+				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
+				return;
+			}
+
+			photo_view.View.ShowHideLoupe ();
+		}
+
+		void HandleSharpen (object sender, EventArgs args)
+		{
+			// Don't steal characters from any text entries
+			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
+				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
+				return;
+			}
+
+			photo_view.View.ShowSharpener ();
+		}
+
+		void HandleDisplayToolbar (object sender, EventArgs args)
+		{
+			if (display_toolbar.Active)
+				toolbar.Show ();
+			else
+				toolbar.Hide ();
+		}
+
+		void HandleDisplayTags (object sender, EventArgs args)
+		{
+			icon_view.DisplayTags = !icon_view.DisplayTags;
+		}
+
+		void HandleDisplayDates (object sender, EventArgs args)
+		{
+			// Peg the icon_view's value to the MenuItem's active state,
+			// as icon_view.DisplayDates's get won't always be equal to it's true value
+			// because of logic to hide dates when zoomed way out.
+			icon_view.DisplayDates = display_dates_menu_item.Active;
+		}
+
+		void HandleDisplayRatings (object sender, EventArgs args)
+		{
+			icon_view.DisplayRatings = display_ratings_menu_item.Active;
+		}
+
+		void HandleDisplayGroupSelector (object sender, EventArgs args)
+		{
+			if (group_selector.Visible)
+				group_selector.Hide ();
+			else
+				group_selector.Show ();
+		}
+
+		void HandleDisplayFilmstrip (object sender, EventArgs args)
+		{
+			photo_view.FilmStripVisibility = display_filmstrip.Active;
+			if (ViewMode == ModeType.PhotoView)
+				photo_view.QueueDraw ();
+		}
+
+		void HandleDisplayInfoSidebar (object sender, EventArgs args)
+		{
+			if (info_vbox.Visible)
+				info_vbox.Hide ();
+			else
+				info_vbox.Show ();
+		}
+
+		void HandleViewSlideShow (object sender, EventArgs args)
+		{
+			HandleViewFullscreen (sender, args);
+			fsview.PlayPause ();
+		}
+
+		void HandleToggleViewBrowse (object sender, EventArgs args)
+		{
+			if (ViewMode == ModeType.IconView)
+				browse_button.Active = true;
+			else if (browse_button.Active)
+				SetViewMode (ModeType.IconView);
+		}
+
+		void HandleToggleViewPhoto (object sender, EventArgs args)
+		{
+			if (ViewMode == ModeType.PhotoView)
+				edit_button.Active = true;
+			else if (edit_button.Active)
+				SetViewMode (ModeType.PhotoView);
+		}
+
+		void HandleViewBrowse (object sender, EventArgs args)
+		{
+			SetViewMode (ModeType.IconView);
+		}
+
+		void HandleViewPhoto (object sender, EventArgs args)
+		{
+			SetViewMode (ModeType.PhotoView);
+		}
+
+		void HandleViewFullscreen (object sender, EventArgs args)
+		{
+			int active = (Selection.Count > 0 ? SelectedIds() [0] : 0);
+			if (fsview == null) {
+				fsview = new FSpot.FullScreenView (query, main_window);
+				fsview.Destroyed += HandleFullScreenViewDestroy;
+				fsview.KeyPressEvent += HandleFullScreenViewKeyPressEvent;
+				fsview.View.Item.Index = active;
+			} else {
+				// FIXME this needs to be another mode like PhotoView and IconView mode.
+				fsview.View.Item.Index = active;
+			}
+
+			fsview.Show ();
+		}
+
+		void HandleFullScreenViewDestroy (object sender, EventArgs args)
+		{
+			JumpTo (fsview.View.Item.Index);
+			fsview = null;
+		}
+
+		void HandleZoomScaleValueChanged (object sender, System.EventArgs args)
+		{
+			switch (ViewMode) {
+			case ModeType.PhotoView:
+				photo_view.View.ZoomChanged -= HandleZoomChanged;
+				photo_view.NormalizedZoom = zoom_scale.Value;
+				photo_view.View.ZoomChanged += HandleZoomChanged;
+				break;
+			case ModeType.IconView:
+				icon_view.ZoomChanged -= HandleZoomChanged;
+				icon_view.Zoom = zoom_scale.Value;
+				icon_view.ZoomChanged += HandleZoomChanged;
+				break;
+			}
+
+			zoom_in.Sensitive = (zoom_scale.Value != 1.0);
+			zoom_out.Sensitive = (zoom_scale.Value != 0.0);
+		}
+
+		void HandleQueryChanged (IBrowsableCollection sender)
+		{
+			if (find_untagged.Active != query.Untagged)
+				find_untagged.Active = query.Untagged;
+
+			clear_date_range.Sensitive = (query.Range != null);
+			clear_rating_filter.Sensitive = (query.RatingRange != null);
+			update_status_label = true;
+			GLib.Idle.Add (UpdateStatusLabel);
+		}
+
+		bool update_status_label;
+		private bool UpdateStatusLabel ()
+		{
+			update_status_label = false;
+			int total_photos = Database.Photos.TotalPhotos;
+			if (total_photos != query.Count)
+				status_label.Text = String.Format (Catalog.GetPluralString ("{0} Photo out of {1}", "{0} Photos out of {1}", query.Count), query.Count, total_photos);
+			else
+				status_label.Text = String.Format (Catalog.GetPluralString ("{0} Photo", "{0} Photos", query.Count), query.Count);
+
+			if ((Selection != null) && (Selection.Count > 0))
+				status_label.Text += String.Format (Catalog.GetPluralString (" ({0} selected)", " ({0} selected)", Selection.Count), Selection.Count);
+			status_label.UseMarkup = true;
+			return update_status_label;
+		}
+
+		void HandleZoomChanged (object sender, System.EventArgs args)
+		{
+			zoom_scale.ValueChanged -= HandleZoomScaleValueChanged;
+
+			double zoom = .5;
+			switch (ViewMode) {
+			case ModeType.PhotoView:
+				zoom = photo_view.NormalizedZoom;
+				zoom_scale.Value = zoom;
+				break;
+			case ModeType.IconView:
+				zoom = icon_view.Zoom;
+				if (zoom == 0.0 || zoom == 100.0 || zoom != zoom_scale.Value)
+					zoom_scale.Value = zoom;
+
+				break;
+			}
+
+			zoom_in.Sensitive = (zoom != 1.0);
+			zoom_out.Sensitive = (zoom != 0.0);
+
+			zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
+		}
+
+		void HandleZoomOut (object sender, ButtonPressEventArgs args)
+		{
+			ZoomOut ();
+		}
+
+		void HandleZoomOut (object sender, EventArgs args)
+		{
+			ZoomOut ();
+		}
+
+		void HandleZoomIn (object sender, ButtonPressEventArgs args)
+		{
+			ZoomIn ();
+		}
+
+		void HandleZoomIn (object sender, EventArgs args)
+		{
+			ZoomIn ();
+		}
+
+		private void ZoomOut ()
+		{
+			switch (ViewMode) {
+			case ModeType.PhotoView:
+				photo_view.ZoomOut ();
+				break;
+			case ModeType.IconView:
+				icon_view.ZoomOut ();
+				break;
+			}
+		}
+
+		private void ZoomIn ()
+		{
+			switch (ViewMode) {
+			case ModeType.PhotoView:
+				double old_zoom = photo_view.Zoom;
+				try {
+					photo_view.ZoomIn ();
+				} catch {
+					photo_view.Zoom = old_zoom;
+				}
+
+				break;
+			case ModeType.IconView:
+				icon_view.ZoomIn ();
+				break;
+			}
+		}
+
+		public void DeleteException (Exception e, string fname)
+		{
+			string ok_caption = Catalog.GetString ("_Ok");
+			string error = Catalog.GetString ("Error Deleting Picture");
+			string msg;
+
+			if (e is UnauthorizedAccessException)
+				msg = String.Format (
+					Catalog.GetString ("No permission to delete the file:{1}{0}"),
+					fname, Environment.NewLine).Replace ("_", "__");
+			else
+				msg = String.Format (
+					Catalog.GetString ("An error of type {0} occurred while deleting the file:{2}{1}"),
+					e.GetType (), fname.Replace ("_", "__"), Environment.NewLine);
+
+			HigMessageDialog.RunHigConfirmation (
+				main_window, DialogFlags.DestroyWithParent, MessageType.Error,
+				error, msg, ok_caption);
+		}
+
+		public Gtk.Window GetToplevel (object sender)
+		{
+			Widget wsender = sender as Widget;
+			Gtk.Window toplevel = null;
+
+			if (wsender != null && !(wsender is MenuItem))
+				toplevel = (Gtk.Window) wsender.Toplevel;
+			else if (fsview != null)
+				toplevel = fsview;
+			else
+				toplevel = main_window;
+
+			return toplevel;
+		}
+
+		public void HandleDeleteCommand (object sender, EventArgs args)
+		{
+			// Don't steal characters from any text entries
+			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
+				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
+				return;
+			}
+
+			Photo[] photos = SelectedPhotos();
+			string header = Catalog.GetPluralString ("Delete the selected photo permanently?",
+									    "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.",
+									 photos.Length);
+			string ok_caption = Catalog.GetPluralString ("_Delete photo", "_Delete photos", photos.Length);
+
+			if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(GetToplevel (sender),
+										   DialogFlags.DestroyWithParent,
+										   MessageType.Warning,
+										   header, msg, ok_caption)) {
+
+				uint timer = Log.DebugTimerStart ();
+				foreach (Photo photo in photos) {
+					foreach (uint id in photo.VersionIds) {
+						try {
+							photo.DeleteVersion (id, true);
+						} catch (Exception e) {
+							DeleteException (e, photo.VersionUri (id).ToString ());
+						}
+					}
+				}
+				Database.Photos.Remove (photos);
+
+				UpdateQuery ();
+				Log.DebugTimerPrint (timer, "HandleDeleteCommand took {0}");
+			}
+		}
+
+		public void HandleRemoveCommand (object sender, EventArgs args)
+		{
+			// Don't steal characters from any text entries
+			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
+				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
+				return;
+			}
+
+			Photo[] photos = SelectedPhotos();
+			if (photos.Length == 0)
+				return;
+
+			string header = Catalog.GetPluralString ("Remove the selected photo from F-Spot?",
+									    "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.");
+			string ok_caption = Catalog.GetString("_Remove from Catalog");
+			if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(GetToplevel (sender), DialogFlags.DestroyWithParent,
+										   MessageType.Warning, header, msg, ok_caption)) {
+				Database.Photos.Remove (photos);
+				UpdateQuery ();
+			}
+		}
+
+		void HandleSelectAllCommand (object sender, EventArgs args)
+		{
+			if (Window.Focus is Editable) {
+				(Window.Focus as Editable).SelectRegion (0, -1); // select all in text box
+				return;
+			}
+
+			icon_view.SelectAllCells ();
+			UpdateStatusLabel ();
+		}
+
+		void HandleSelectNoneCommand (object sender, EventArgs args)
+		{
+			icon_view.Selection.Clear ();
+			UpdateStatusLabel ();
+		}
+
+		void HandleSelectInvertCommand (object sender, EventArgs args)
+		{
+			icon_view.Selection.SelectionInvert ();
+			UpdateStatusLabel ();
+		}
+
+		// This ConnectBefore is needed because otherwise the editability of the name
+		// column will steal returns, spaces, and clicks if the tag name is focused
+		[GLib.ConnectBefore]
+		public void HandleTagSelectionKeyPress (object sender, Gtk.KeyPressEventArgs args)
+		{
+			args.RetVal = true;
+
+			switch (args.Event.Key) {
+			case Gdk.Key.Delete:
+				HandleDeleteSelectedTagCommand (sender, (EventArgs) args);
+				break;
+
+			case Gdk.Key.space:
+			case Gdk.Key.Return:
+			case Gdk.Key.KP_Enter:
+				ShowQueryWidget ();
+				query_widget.Include (tag_selection_widget.TagHighlight);
+				break;
+
+			case Gdk.Key.F2:
+				tag_selection_widget.EditSelectedTagName ();
+				break;
+
+			default:
+				args.RetVal = false;
+				break;
+			}
+		}
+
+		public void HandleDeleteSelectedTagCommand (object sender, EventArgs args)
+		{
+			Tag [] tags = this.tag_selection_widget.TagHighlight;
+
+			System.Array.Sort (tags, new TagRemoveComparer ());
+
+			//How many pictures are associated to these tags?
+			Db db = App.Instance.Database;
+			FSpot.PhotoQuery count_query = new FSpot.PhotoQuery(db.Photos);
+			count_query.Terms = FSpot.OrTerm.FromTags(tags);
+			int associated_photos = count_query.Count;
+
+			string header;
+			if (tags.Length == 1)
+				header = String.Format (Catalog.GetString ("Delete tag \"{0}\"?"), tags [0].Name.Replace ("_", "__"));
+			else
+				header = String.Format (Catalog.GetString ("Delete the {0} selected tags?"), tags.Length);
+
+			header = String.Format (header, tags.Length);
+			string msg = String.Empty;
+			if (associated_photos > 0) {
+				string photodesc = Catalog.GetPluralString ("photo", "photos", associated_photos);
+				msg = String.Format(
+					Catalog.GetPluralString("If you delete this tag, the association with {0} {1} will be lost.",
+								"If you delete these tags, the association with {0} {1} will be lost.",
+								tags.Length),
+					associated_photos, photodesc);
+			}
+			string ok_caption = Catalog.GetPluralString ("_Delete tag", "_Delete tags", tags.Length);
+
+			if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(main_window,
+										   DialogFlags.DestroyWithParent,
+										   MessageType.Warning,
+										   header,
+										   msg,
+										   ok_caption)) {
+				try {
+					db.Photos.Remove (tags);
+				} catch (InvalidTagOperationException e) {
+					Log.Debug ("this is something or another");
+
+					// A Category is not empty. Can not delete it.
+					string error_msg = Catalog.GetString ("Tag is not empty");
+					string error_desc = String.Format (Catalog.GetString ("Can not delete tags that have tags within them.  " +
+													 "Please delete tags under \"{0}\" first"),
+									   e.Tag.Name.Replace ("_", "__"));
+
+					HigMessageDialog md = new HigMessageDialog (main_window, DialogFlags.DestroyWithParent,
+										    Gtk.MessageType.Error, ButtonsType.Ok,
+										    error_msg,
+										    error_desc);
+					md.Run ();
+					md.Destroy ();
+				}
+			}
+		}
+
+		void HandleUpdateThumbnailCommand (object sender, EventArgs args)
+		{
+			ThumbnailCommand command = new ThumbnailCommand (main_window);
+
+			int [] selected_ids = SelectedIds ();
+			if (command.Execute (SelectedPhotos (selected_ids)))
+				query.MarkChanged (selected_ids, InvalidateData.Instance);
+		}
+
+		public void HandleRotate90Command (object sender, EventArgs args)
+		{
+			// Don't steal characters from any text entries
+			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
+				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
+				return;
+			}
+
+			RotateSelectedPictures (GetToplevel (sender), RotateDirection.Clockwise);
+		}
+
+		public void HandleRotate270Command (object sender, EventArgs args)
+		{
+			// Don't steal characters from any text entries
+			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
+				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
+				return;
+			}
+
+			RotateSelectedPictures (GetToplevel (sender), RotateDirection.Counterclockwise);
+		}
+
+		public void HandleCopy (object sender, EventArgs args)
+		{
+			Clipboard primary = Clipboard.Get (Atom.Intern ("PRIMARY", false));
+			Clipboard clipboard = Clipboard.Get (Atom.Intern ("CLIPBOARD", false));
+
+			if (Window.Focus is Editable) {
+				(Window.Focus as Editable).CopyClipboard ();
+				return;
+			}
+
+			clipboard.SetWithData (new TargetEntry[] {
+						DragDropTargets.PlainTextEntry,
+						DragDropTargets.UriListEntry,
+						DragDropTargets.CopyFilesEntry,},
+					delegate (Clipboard clip, SelectionData data, uint info) {
+						var paths = new List<string> ();
+						var uris = new List<string> ();
+						foreach (Photo p in SelectedPhotos ()) {
+							paths.Add (System.IO.Path.GetFullPath (p.DefaultVersion.Uri.LocalPath));
+							uris.Add (p.DefaultVersion.Uri.ToString ());
+						}
+						data.Text = String.Join (" ", paths.ToArray ());
+						data.SetUris (String.Join (" ", uris.ToArray ()));
+						data.Set (Atom.Intern ("x-special/gnome-copied-files", true), 8, System.Text.Encoding.UTF8.GetBytes ("copy\n" + String.Join ("\n", uris.ToArray ())));
+
+					},
+					delegate {});
+
+			var pt = new List<string> ();
+			foreach (Photo p in SelectedPhotos ()) {
+				pt.Add (System.IO.Path.GetFullPath (p.DefaultVersion.Uri.LocalPath));
+			}
+
+			primary.Text = String.Join (" ", pt.ToArray ());
+		}
+
+		void HandleSetAsBackgroundCommand (object sender, EventArgs args)
+		{
+			Photo current = CurrentPhoto;
+
+			if (current == null)
+				return;
+
+			Desktop.SetBackgroundImage (current.DefaultVersion.Uri.LocalPath);
+		}
+
+		void HandleSetDateRange (object sender, EventArgs args) {
+			var date_range_dialog = new DateRangeDialog (query.Range, main_window);
+			if ((ResponseType)date_range_dialog.Run () == ResponseType.Ok)
+				query.Range = date_range_dialog.Range;
+			date_range_dialog.Destroy ();
+
+			//update the TimeLine
+			if (group_selector.Adaptor is TimeAdaptor && query.Range != null)
+				group_selector.SetLimitsToDates(query.Range.Start, query.Range.End);
+		}
+
+		public void HandleClearDateRange (object sender, EventArgs args) {
+			if (group_selector.Adaptor is FSpot.TimeAdaptor) {
+				group_selector.ResetLimits();
+			}
+			query.Range = null;
+		}
+
+		void HandleSelectLastRoll (object sender, EventArgs args) {
+			query.RollSet = new RollSet (Database.Rolls.GetRolls (1));
+		}
+
+		void HandleSelectRolls (object sender, EventArgs args) {
+			new LastRolls (query, Database.Rolls, main_window);
+		}
+
+		void HandleClearRollFilter (object sender, EventArgs args) {
+			query.RollSet = null;
+		}
+
+		void HandleSetRatingFilter (object sender, EventArgs args) {
+			new RatingFilterDialog (query, main_window);
+		}
+
+		public void HandleClearRatingFilter (object sender, EventArgs args) {
+			query.RatingRange = null;
+		}
+
+		void HandleFindUntagged (object sender, EventArgs args) {
+			if (query.Untagged == find_untagged.Active)
+				return;
+
+			query.Untagged = !query.Untagged;
+		}
+
+		void OnPreferencesChanged (object sender, NotifyEventArgs args)
+		{
+			LoadPreference (args.Key);
+		}
+
+		void LoadPreference (String key)
+		{
+			switch (key) {
+			case Preferences.MAIN_WINDOW_MAXIMIZED:
+				if (Preferences.Get<bool> (key))
+					main_window.Maximize ();
+				else
+					main_window.Unmaximize ();
+				break;
+
+			case Preferences.MAIN_WINDOW_X:
+			case Preferences.MAIN_WINDOW_Y:
+				main_window.Move(Preferences.Get<int> (Preferences.MAIN_WINDOW_X),
+						 Preferences.Get<int> (Preferences.MAIN_WINDOW_Y));
+				break;
+
+			case Preferences.MAIN_WINDOW_WIDTH:
+			case Preferences.MAIN_WINDOW_HEIGHT:
+				if (Preferences.Get<int> (Preferences.MAIN_WINDOW_WIDTH) > 0 &&
+							  Preferences.Get<int> (Preferences.MAIN_WINDOW_HEIGHT) > 0)
+					main_window.Resize(Preferences.Get<int> (Preferences.MAIN_WINDOW_WIDTH),
+							   Preferences.Get<int> (Preferences.MAIN_WINDOW_HEIGHT));
+
+				break;
+
+			case Preferences.SHOW_TOOLBAR:
+				if (display_toolbar.Active != Preferences.Get<bool> (key))
+					display_toolbar.Active = Preferences.Get<bool> (key);
+				break;
+
+			case Preferences.SHOW_SIDEBAR:
+				if (display_sidebar.Active != Preferences.Get<bool> (key))
+					display_sidebar.Active = Preferences.Get<bool> (key);
+				break;
+
+			case Preferences.SHOW_TIMELINE:
+				if (display_timeline.Active != Preferences.Get<bool> (key))
+					display_timeline.Active = Preferences.Get<bool> (key);
+				break;
+
+			case Preferences.SHOW_FILMSTRIP:
+				if (display_filmstrip.Active != Preferences.Get<bool> (key)) {
+					display_filmstrip.Active = Preferences.Get<bool> (key);
+				}
+				break;
+
+			case Preferences.SHOW_TAGS:
+				if (display_tags_menu_item.Active != Preferences.Get<bool> (key))
+					display_tags_menu_item.Active = Preferences.Get<bool> (key);
+				break;
+
+			case Preferences.SHOW_DATES:
+				if (display_dates_menu_item.Active != Preferences.Get<bool> (key))
+					display_dates_menu_item.Active = Preferences.Get<bool> (key);
+					//display_dates_menu_item.Toggle ();
+				break;
+
+			case Preferences.SHOW_RATINGS:
+				if (display_ratings_menu_item.Active != Preferences.Get<bool> (key))
+					display_ratings_menu_item.Active = Preferences.Get<bool> (key);
+				break;
+
+			case Preferences.GROUP_ADAPTOR_ORDER_ASC:
+				group_selector.Adaptor.OrderAscending = Preferences.Get<bool> (key);
+				reverse_order.Active = Preferences.Get<bool> (key);
+				query.TimeOrderAsc = group_selector.Adaptor.OrderAscending;
+				break;
+
+			case Preferences.GLASS_POSITION:
+				if (query.Count > 0) {
+					// If the database has changed since this pref was saved, this could cause
+					// an exception to be thrown.
+					try {
+						IBrowsableItem photo = group_selector.Adaptor.PhotoFromIndex (Preferences.Get<int> (key));
+
+						if (photo != null)
+							JumpTo (query.IndexOf (photo));
+					} catch (Exception) {}
+				}
+
+				icon_view.GrabFocus ();
+				break;
+			case Preferences.SIDEBAR_POSITION:
+				if (main_hpaned.Position !=Preferences.Get<int> (key) )
+					main_hpaned.Position = Preferences.Get<int> (key);
+				break;
+
+			case Preferences.TAG_ICON_SIZE:
+				int s = Preferences.Get<int> (key);
+				tag_icon_hidden.Active = (s == (int) Tag.IconSize.Hidden);
+				tag_icon_small.Active = (s == (int) Tag.IconSize.Small);
+				tag_icon_medium.Active = (s == (int) Tag.IconSize.Medium);
+				tag_icon_large.Active = (s == (int) Tag.IconSize.Large);
+
+				break;
+
+			case Preferences.ZOOM:
+				icon_view.Zoom = Preferences.Get<double> (key);
+				break;
+
+			case Preferences.METADATA_EMBED_IN_IMAGE:
+				write_metadata =Preferences.Get<bool> (key) ;
+				break;
+			case Preferences.GNOME_MAILTO_ENABLED:
+				send_mail.Visible = Preferences.Get<bool> (key);
+				break;
+			}
+		}
+
+		// Version Id updates.
+
+		void UpdateForVersionChange (IBrowsableItemVersion version)
+		{
+			IBrowsableItemVersionable versionable = CurrentPhoto as IBrowsableItemVersionable;
+
+			if (versionable != null) {
+				versionable.SetDefaultVersion (version);
+				query.Commit (ActiveIndex ());
+			}
+		}
+
+		// Queries.
+
+		public void UpdateQuery ()
+		{
+			main_window.GdkWindow.Cursor = watch;
+			main_window.GdkWindow.Display.Sync ();
+			query.RequestReload ();
+			main_window.GdkWindow.Cursor = null;
+		}
+
+		void HandleTagSelectionChanged (object obj, EventArgs args)
+		{
+			UpdateMenus ();
+		}
+
+		public bool TagIncluded (Tag tag)
+		{
+			return query_widget.TagIncluded (tag);
+		}
+
+		public bool TagRequired (Tag tag)
+		{
+			return query_widget.TagRequired (tag);
+		}
+
+		private void HandleQueryLogicChanged (object sender, EventArgs args)
+		{
+			HandleFindAddTagWith (null, null);
+		}
+
+		public void HandleIncludeTag (object sender, EventArgs args)
+		{
+			ShowQueryWidget ();
+			query_widget.Include (tag_selection_widget.TagHighlight);
+		}
+
+		public void HandleUnIncludeTag (object sender, EventArgs args)
+		{
+			query_widget.UnInclude (tag_selection_widget.TagHighlight);
+		}
+
+		void HandleFindByTag (object sender, EventArgs args)
+		{
+			UpdateFindByTagMenu ();
+		}
+
+		public void UpdateFindByTagMenu ()
+		{
+			if (query_widget.Visible) {
+				query_widget.Close ();
+			} else {
+				ShowQueryWidget ();
+			}
+		}
+
+		void HandleFindAddTagWith (object sender, EventArgs args)
+		{
+			MenuItem find_add_tag_with = uimanager.GetWidget ("/ui/menubar1/find/find_add_tag_with") as MenuItem;
+			if (find_add_tag_with.Submenu != null)
+				find_add_tag_with.Submenu.Dispose ();
+
+			Gtk.Menu submenu = FSpot.TermMenuItem.GetSubmenu (tag_selection_widget.TagHighlight);
+			find_add_tag_with.Sensitive = (submenu != null);
+			if (submenu != null)
+				find_add_tag_with.Submenu = submenu;
+		}
+
+		public void HandleAddTagToTerm (object sender, EventArgs args)
+		{
+			MenuItem item = sender as MenuItem;
+
+			int item_pos = 0;
+			foreach (MenuItem i in (item.Parent as Menu).Children) {
+				if (item == i) {
+					break;
+				}
+
+				item_pos++;
+			}
+			// account for All and separator menu items
+			item_pos -= 2;
+
+			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;
+				FSpot.LogicWidget.Box.InsertTerm (tag_selection_widget.TagHighlight, parent_term, after);
+			}
+		}
+
+		//
+		// Handle Main Menu
+
+		void UpdateMenus ()
+		{
+			int tags_selected = tag_selection_widget.Selection.CountSelectedRows ();
+			bool tag_sensitive = tags_selected > 0;
+			bool active_selection = Selection.Count > 0;
+			bool single_active = CurrentPhoto != null;
+			MenuItem version_menu_item = uimanager.GetWidget ("/ui/menubar1/file1/version_menu_item") as MenuItem;
+
+			if (!single_active) {
+				version_menu_item.Sensitive = false;
+				version_menu_item.Submenu = new Menu ();
+
+				create_version_menu_item.Sensitive = false;
+				delete_version_menu_item.Sensitive = false;
+				detach_version_menu_item.Sensitive = false;
+				rename_version_menu_item.Sensitive = false;
+
+				sharpen.Sensitive = false;
+				loupe_menu_item.Sensitive = false;
+			} else {
+				version_menu_item.Sensitive = true;
+				create_version_menu_item.Sensitive = true;
+
+				if (CurrentPhoto.DefaultVersionId == Photo.OriginalVersionId) {
+					delete_version_menu_item.Sensitive = false;
+					detach_version_menu_item.Sensitive = false;
+					rename_version_menu_item.Sensitive = false;
+				} else {
+					delete_version_menu_item.Sensitive = true;
+					detach_version_menu_item.Sensitive = true;
+					rename_version_menu_item.Sensitive = true;
+				}
+
+				versions_submenu = new PhotoVersionMenu (CurrentPhoto);
+				versions_submenu.VersionChanged += delegate (PhotoVersionMenu menu) { UpdateForVersionChange (menu.Version);};
+				version_menu_item.Submenu = versions_submenu;
+
+				sharpen.Sensitive = (ViewMode == ModeType.IconView ? false : true);
+				loupe_menu_item.Sensitive = (ViewMode == ModeType.IconView ? false : true);
+			}
+
+			set_as_background.Sensitive = single_active;
+			adjust_time.Sensitive = active_selection;
+
+			attach_tag.Sensitive = active_selection;
+			remove_tag.Sensitive = active_selection;
+
+			rotate_left.Sensitive = active_selection;
+			rotate_right.Sensitive = active_selection;
+			update_thumbnail.Sensitive = active_selection;
+			delete_from_drive.Sensitive = active_selection;
+
+			send_mail.Sensitive = active_selection;
+			print.Sensitive = active_selection;
+			select_none.Sensitive = active_selection;
+			copy.Sensitive = active_selection;
+			remove_from_catalog.Sensitive = active_selection;
+
+			clear_rating_filter.Sensitive = (query.RatingRange != null);
+
+			clear_roll_filter.Sensitive = (query.RollSet != null);
+
+			delete_selected_tag.Sensitive = tag_sensitive;
+			edit_selected_tag.Sensitive = tag_sensitive;
+
+
+			attach_tag_to_selection.Sensitive = tag_sensitive && active_selection;
+			remove_tag_from_selection.Sensitive = tag_sensitive && active_selection;
+
+			export.Sensitive = active_selection;
+
+			MenuItem toolsmenu = uimanager.GetWidget ("/ui/menubar1/tools") as MenuItem;
+			try {
+				tools.Visible = (toolsmenu.Submenu as Menu).Children.Length > 0;
+			} catch {
+				tools.Visible = false;
+			}
+
+			if (rl_button != null) {
+				if (Selection.Count == 0) {
+					rl_button.Sensitive = false;
+					rl_button.TooltipText = String.Empty;
+				} else {
+					rl_button.Sensitive = true;
+
+					string msg = Catalog.GetPluralString ("Rotate selected photo left",
+									      "Rotate selected photos left", Selection.Count);
+					rl_button.TooltipText = String.Format (msg, Selection.Count);
+				}
+			}
+
+			if (rr_button != null) {
+				if (Selection.Count == 0) {
+					rr_button.Sensitive = false;
+					rr_button.TooltipText = String.Empty;
+				} else {
+					rr_button.Sensitive = true;
+
+					string msg = Catalog.GetPluralString ("Rotate selected photo right",
+									      "Rotate selected photos right", Selection.Count);
+					rr_button.TooltipText = String.Format (msg, Selection.Count);
+				}
+			}
+
+			//if (last_tags_selected_count != tags_selected) {
+			MenuItem find_add_tag = uimanager.GetWidget ("/ui/menubar1/find/find_add_tag") as MenuItem;
+			MenuItem find_add_tag_with = uimanager.GetWidget ("/ui/menubar1/find/find_add_tag_with") as MenuItem;
+
+			((Gtk.Label)find_add_tag.Child).TextWithMnemonic = String.Format (
+				Catalog.GetPluralString ("Find _Selected Tag", "Find _Selected Tags", tags_selected), tags_selected
+			);
+
+			((Gtk.Label)find_add_tag_with.Child).TextWithMnemonic = String.Format (
+				Catalog.GetPluralString ("Find Selected Tag _With", "Find Selected Tags _With", tags_selected), tags_selected
+			);
+
+			find_add_tag.Sensitive = tag_sensitive;
+			find_add_tag_with.Sensitive = tag_sensitive && find_add_tag_with.Submenu != null;
+
+			//last_tags_selected_count = tags_selected;
+			//}
+		}
+
+		void PopulateExtendableMenus (object o, EventArgs args)
+		{
+			MenuItem exportmenu = uimanager.GetWidget ("/ui/menubar1/file1/export") as MenuItem;
+			MenuItem toolsmenu = uimanager.GetWidget ("/ui/menubar1/tools") as MenuItem;
+			try {
+				if (exportmenu.Submenu != null)
+					exportmenu.Submenu.Dispose ();
+				if (toolsmenu.Submenu != null)
+					toolsmenu.RemoveSubmenu ();
+
+				exportmenu.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Exports") as FSpot.Extensions.SubmenuNode).GetSubmenu ();
+				exportmenu.Submenu.ShowAll ();
+
+				toolsmenu.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Tools") as FSpot.Extensions.SubmenuNode).GetSubmenu ();
+				toolsmenu.Submenu.ShowAll ();
+
+				tools.Visible = (toolsmenu.Submenu as Menu).Children.Length > 0;
+			} catch {
+				Log.Warning ("There's (maybe) something wrong with some of the installed extensions. You can try removing the directory addin-db-000 from ~/.config/f-spot/");
+				toolsmenu.Visible = false;
+			}
+		}
+
+		public void HandleOpenWith (object sender, ApplicationActivatedEventArgs e)
+		{
+			GLib.AppInfo application = e.AppInfo;
+			Photo[] selected = SelectedPhotos ();
+
+			if (selected == null || selected.Length < 1)
+				return;
+
+			string header = Catalog.GetPluralString ("Create New Version?", "Create New Versions?", selected.Length);
+			string msg = String.Format (Catalog.GetPluralString (
+					"Before launching {1}, should F-Spot create a new version of the selected photo to preserve the original?",
+					"Before launching {1}, should F-Spot create new versions of the selected photos to preserve the originals?", selected.Length),
+					selected.Length, application.Name);
+
+			// FIXME add cancel button? add help button?
+			HigMessageDialog hmd = new HigMessageDialog(GetToplevel (sender), DialogFlags.DestroyWithParent,
+								    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);
+			hmd.AddButton (Gtk.Stock.Yes, Gtk.ResponseType.Yes, true);
+
+			bool support_xcf = false;;
+			if (application.Id == "gimp.desktop")
+				foreach (Gdk.PixbufFormat format in Gdk.Pixbuf.Formats)
+					if (format.Name == "xcf")
+						support_xcf = true;
+
+			//This allows creating a version with a .xcf extension.
+			//There's no need to convert the file to xcf file format, gimp will take care of this
+			if (support_xcf) {
+				CheckButton cb = new CheckButton (Catalog.GetString ("XCF version"));
+				cb.Active = Preferences.Get<bool> (Preferences.EDIT_CREATE_XCF_VERSION);
+				hmd.VBox.Add (cb);
+				cb.Toggled += delegate (object s, EventArgs ea) {
+					Preferences.Set (Preferences.EDIT_CREATE_XCF_VERSION, (s as CheckButton).Active);
+				};
+				cb.Show ();
+			}
+
+			Gtk.ResponseType response = Gtk.ResponseType.Cancel;
+
+			try {
+				response = (Gtk.ResponseType) hmd.Run();
+			} finally {
+				hmd.Destroy ();
+			}
+
+			bool create_xcf = false;
+			if (support_xcf)
+				create_xcf = Preferences.Get<bool> (Preferences.EDIT_CREATE_XCF_VERSION);
+
+			Log.DebugFormat ("XCF ? {0}", create_xcf);
+
+			if (response == Gtk.ResponseType.Cancel)
+				return;
+
+			bool create_new_versions = (response == Gtk.ResponseType.Yes);
+
+			ArrayList errors = new ArrayList ();
+			GLib.List uri_list = new GLib.List (typeof (string));
+			foreach (Photo photo in selected) {
+				try {
+					if (create_new_versions) {
+						uint version = photo.CreateNamedVersion (application.Name, create_xcf ? ".xcf" : null, photo.DefaultVersionId, true);
+						photo.DefaultVersionId = version;
+					}
+				} catch (Exception ex) {
+					errors.Add (new EditException (photo, ex));
+				}
+
+				uri_list.Append (photo.DefaultVersion.Uri.ToString ());
+			}
+
+			// FIXME need to clean up the error dialog here.
+			if (errors.Count > 0) {
+				Dialog md = new EditExceptionDialog (GetToplevel (sender), errors.ToArray (typeof (EditException)) as EditException []);
+				md.Run ();
+				md.Destroy ();
+			}
+
+			if (create_new_versions)
+				Database.Photos.Commit (selected);
+
+			try {
+				application.LaunchUris (uri_list, null);
+			} catch (System.Exception) {
+				Log.ErrorFormat ("Failed to lauch {0}", application.Name);
+			}
+		}
+
+		public void GetWidgetPosition(Widget widget, out int x, out int y)
+		{
+			main_window.GdkWindow.GetOrigin(out x, out y);
+
+			x += widget.Allocation.X;
+			y += widget.Allocation.Y;
+		}
+
+		// Tag typing ...
+
+		private void UpdateTagEntryFromSelection ()
+		{
+			if (!tagbar.Visible)
+				return;
+			tag_entry.UpdateFromSelection (SelectedPhotos ());
+		}
+
+		public void HandlePossibleTagTyping (object sender, Gtk.KeyPressEventArgs args)
+		{
+			if (Selection.Count == 0 || tagbar.Visible && tag_entry.HasFocus)
+				return;
+
+			if (args.Event.Key != Gdk.Key.t)
+				return;
+
+			tagbar.Show ();
+			UpdateTagEntryFromSelection ();
+			tag_entry.GrabFocus ();
+			tag_entry.SelectRegion (-1, -1);
+		}
+
+		// "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 ();
+		       }
+		}
+
+		private void HandleTagEntryTagsAttached (object o, string [] new_tags)
+		{
+			int [] selected_photos = SelectedIds ();
+			if (selected_photos == null || new_tags == null || new_tags.Length == 0)
+				return;
+
+			Category default_category = null;
+			Tag [] selection = tag_selection_widget.TagHighlight;
+			if (selection.Length > 0) {
+				if (selection [0] is Category)
+					default_category = (Category) selection [0];
+				else
+					default_category = selection [0].Category;
+			}
+			Tag [] tags = new Tag [new_tags.Length];
+			int i = 0;
+			Database.BeginTransaction ();
+			foreach (string tagname in new_tags) {
+				Tag t = Database.Tags.GetTagByName (tagname);
+				if (t == null) {
+					t = Database.Tags.CreateCategory (default_category, tagname, true) as Tag;
+					Database.Tags.Commit (t);
+				}
+				tags [i++] = t;
+			}
+			AddTagExtended (selected_photos, tags);
+			Database.CommitTransaction ();
+		}
+
+		private void HandleTagEntryRemoveTags (object o, Tag [] remove_tags)
+		{
+			int [] selected_photos = SelectedIds ();
+			if (selected_photos == null || remove_tags == null || remove_tags.Length == 0)
+				return;
+
+			Database.BeginTransaction ();
+			RemoveTags (selected_photos, remove_tags);
+			Database.CommitTransaction ();
+		}
+
+		private void HideTagbar ()
+		{
+			if (! tagbar.Visible)
+				return;
+
+			UpdateTagEntryFromSelection ();
+
+			// Cancel any pending edits...
+			tagbar.Hide ();
+
+			if (ViewMode == ModeType.IconView)
+				icon_view.GrabFocus ();
+			else {
+				photo_view.QueueDraw ();
+				photo_view.View.GrabFocus ();
+			}
+
+			tag_entry.ClearTagCompletions ();
+		}
+
+		public void HandleTagBarCloseButtonPressed (object sender, EventArgs args)
+		{
+			HideTagbar ();
+		}
+
+		public void HandleTagEntryKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
+		{
+			args.RetVal = false;
+
+			if (args.Event.Key == Gdk.Key.Escape) {
+				HideTagbar ();
+				args.RetVal = true;
+			}
+		}
+
+		public List<string> SelectedMimeTypes ()
+		{
+			List<string> contents = new List<string> ();
+
+			foreach (Photo p in SelectedPhotos ()) {
+				string content;
+				try {
+					content = GLib.FileFactory.NewForUri (p.DefaultVersion.Uri).QueryInfo ("standard::content-type", GLib.FileQueryInfoFlags.None, null).ContentType;
+				} catch (GLib.GException) {
+					content = null;
+				}
+
+				if (! contents.Contains (content))
+					contents.Add (content);
+			}
+
+			return contents;
+		}
+
+		private void ShowQueryWidget ()
+		{
+			if (find_bar.Visible) {
+				find_bar.Entry.Text = String.Empty;
+				find_bar.Hide ();
+			}
+
+			query_widget.ShowBar ();
+			return;
+		}
+
+		public void HideSidebar (object o, EventArgs args) {
+			display_sidebar.Active = false;
+		}
+
+		public void HandleKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
+		{
+			bool ctrl = ModifierType.ControlMask == (args.Event.State & ModifierType.ControlMask);
+
+			if ((ctrl && args.Event.Key == Gdk.Key.F) || args.Event.Key == Gdk.Key.slash) {
+				if (!find_bar.Visible) {
+					if (query_widget.Visible) {
+						query_widget.Close ();
+					}
+
+					find_bar.ShowAll();
+				}
+
+				// Grab the focus even if it's already shown
+				find_bar.Entry.GrabFocus ();
+				args.RetVal = true;
+				return;
+			}
+
+			args.RetVal = false;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/MemorySurface.cs b/src/Clients/MainApp/FSpot/MemorySurface.cs
new file mode 100644
index 0000000..3c06d8f
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/MemorySurface.cs
@@ -0,0 +1,82 @@
+/*
+ * MemorySurface.cs
+ *
+ * Copyright 2007 Novell Inc.
+ *
+ * Author
+ * 	Larry Ewing <lewing at novell.com>
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * See COPYING for license information.
+ *
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace FSpot {
+	public sealed class MemorySurface : Cairo.Surface {
+		static class NativeMethods
+		{
+			[DllImport ("libfspot")]
+			public static extern IntPtr f_image_surface_create (Cairo.Format format, int width, int height);
+
+			[DllImport ("libfspot")]
+			public static extern IntPtr f_image_surface_get_data (IntPtr surface);
+
+			[DllImport ("libfspot")]
+			public static extern Cairo.Format f_image_surface_get_format (IntPtr surface);
+
+			[DllImport ("libfspot")]
+			public static extern int f_image_surface_get_width (IntPtr surface);
+
+			[DllImport ("libfspot")]
+			public static extern int f_image_surface_get_height (IntPtr surface);
+
+			[DllImport("libfspot")]
+			public static extern IntPtr f_pixbuf_to_cairo_surface (IntPtr handle);
+
+			[DllImport("libfspot")]
+			public static extern IntPtr f_pixbuf_from_cairo_surface (IntPtr handle);
+		}
+
+		public MemorySurface (Cairo.Format format, int width, int height)
+			: this (NativeMethods.f_image_surface_create (format, width, height))
+		{
+		}
+
+		public MemorySurface (IntPtr handle) : base (handle, true)
+		{
+			if (DataPtr == IntPtr.Zero)
+				throw new ApplicationException ("Missing image data");
+		}
+
+		public IntPtr DataPtr {
+			get { return NativeMethods.f_image_surface_get_data (Handle); }
+		}
+
+		public Cairo.Format Format {
+			get { return NativeMethods.f_image_surface_get_format (Handle); }
+		}
+
+		public int Width {
+			get { return NativeMethods.f_image_surface_get_width (Handle); }
+		}
+
+		public int Height {
+			get { return NativeMethods.f_image_surface_get_height (Handle); }
+		}
+
+		public static MemorySurface CreateSurface (Gdk.Pixbuf pixbuf)
+		{
+			IntPtr surface = NativeMethods.f_pixbuf_to_cairo_surface (pixbuf.Handle);
+			return new MemorySurface (surface);
+		}
+
+		public static Gdk.Pixbuf CreatePixbuf (MemorySurface mem)
+		{
+			IntPtr result = NativeMethods.f_pixbuf_from_cairo_surface (mem.Handle);
+			return (Gdk.Pixbuf) GLib.Object.GetObject (result, true);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/MetaStore.cs b/src/Clients/MainApp/FSpot/MetaStore.cs
new file mode 100644
index 0000000..cc9847f
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/MetaStore.cs
@@ -0,0 +1,165 @@
+using Gdk;
+using Gtk;
+using System.Collections;
+using System.IO;
+using System.Data;
+using System;
+using FSpot;
+using FSpot.Core;
+using FSpot.Database;
+using Hyena.Data.Sqlite;
+
+namespace FSpot {
+public class MetaItem : DbItem {
+	private string name;
+	public string Name {
+		get { return name; }
+		set { name = value; }
+	}
+
+	private string data;
+	public string Value {
+		get { return data; }
+		set { data = value; }
+	}
+
+	public int ValueAsInt {
+		get { return System.Int32.Parse (Value); }
+		set { Value = value.ToString (); }
+	}
+
+	public MetaItem (uint id, string name, string data) : base (id)
+	{
+		this.name = name;
+		this.data = data;
+	}
+}
+
+public class MetaStore : DbStore<MetaItem> {
+	private const string version = "F-Spot Version";
+	private const string db_version = "F-Spot Database Version";
+	private const string hidden = "Hidden Tag Id";
+
+	public MetaItem FSpotVersion {
+		get { return GetByName (version); }
+	}
+
+	public MetaItem DatabaseVersion {
+		get { return GetByName (db_version); }
+	}
+
+	public MetaItem HiddenTagId {
+		get { return GetByName (hidden); }
+	}
+
+	private MetaItem GetByName (string name)
+	{
+		foreach (MetaItem i in this.item_cache.Values)
+			if (i.Name == name)
+				return i;
+
+		// Otherwise make it and return it
+		return Create (name, null);
+	}
+
+	private void CreateTable ()
+	{
+		Database.Execute (
+			"CREATE TABLE meta (\n" +
+			"	id	INTEGER PRIMARY KEY NOT NULL, \n" +
+			"	name	TEXT UNIQUE NOT NULL, \n" +
+			"	data	TEXT\n" +
+			")");
+	}
+
+	private void CreateDefaultItems (bool is_new)
+	{
+		Create (version, Defines.VERSION);
+		Create (db_version, (is_new) ? FSpot.Database.Updater.LatestVersion.ToString () : "0");
+
+		// Get the hidden tag id, if it exists
+		try {
+			string id = Database.Query<string> ("SELECT id FROM tags WHERE name = 'Hidden'");
+			Create (hidden, id);
+		} catch (Exception) {}
+	}
+
+	private void LoadAllItems ()
+	{
+		IDataReader reader = Database.Query("SELECT id, name, data FROM meta");
+
+		while (reader.Read ()) {
+			uint id = Convert.ToUInt32 (reader ["id"]);
+
+			string name = reader ["name"].ToString ();
+
+			string data = null;
+			if (reader ["data"] != null)
+				data = reader ["data"].ToString ();
+
+			MetaItem item = new MetaItem (id, name, data);
+
+			AddToCache (item);
+		}
+
+		reader.Close ();
+
+		if (FSpotVersion.Value != Defines.VERSION) {
+			FSpotVersion.Value = Defines.VERSION;
+			Commit (FSpotVersion);
+		}
+	}
+
+	private MetaItem Create (string name, string data)
+	{
+
+		uint id = (uint)Database.Execute(new HyenaSqliteCommand("INSERT INTO meta (name, data) VALUES (?, ?)",
+				name, (data == null) ? "NULL" : data ));
+
+		//FIXME This smells bad. This line used to be *before* the
+		//Command.executeNonQuery. It smells of a bug, but there might
+		//have been a reason for this
+
+		MetaItem item = new MetaItem (id, name, data);
+
+
+		AddToCache (item);
+		EmitAdded (item);
+
+		return item;
+	}
+
+	public override void Commit (MetaItem item)
+	{
+		Database.Execute(new HyenaSqliteCommand("UPDATE meta SET data = ? WHERE name = ?", item.Value, item.Name));
+
+		EmitChanged (item);
+	}
+
+	public override MetaItem Get (uint id)
+	{
+		return LookupInCache (id);
+	}
+
+	public override void Remove (MetaItem item)
+	{
+		RemoveFromCache (item);
+
+		Database.Execute (new HyenaSqliteCommand ("DELETE FROM meta WHERE id = ?", item.Id));
+
+		EmitRemoved (item);
+	}
+
+	// Constructor
+
+	public MetaStore (FSpotDatabaseConnection database, bool is_new)
+		: base (database, true)
+	{
+		if (is_new || !Database.TableExists ("meta")) {
+			CreateTable ();
+			CreateDefaultItems (is_new);
+		} else
+			LoadAllItems ();
+	}
+}
+}
\ No newline at end of file
diff --git a/src/Clients/MainApp/FSpot/Photo.cs b/src/Clients/MainApp/FSpot/Photo.cs
new file mode 100644
index 0000000..37602d2
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/Photo.cs
@@ -0,0 +1,595 @@
+/*
+ * FSpot.Photo.cs
+ *
+ * Author(s):
+ *	Ettore Perazzoli <ettore at perazzoli.org>
+ *	Larry Ewing <lewing at gnome.org>
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+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
+{
+	public class Photo : DbItem, IComparable, IBrowsableItem, IBrowsableItemVersionable {
+
+		PhotoChanges changes = new PhotoChanges ();
+		public PhotoChanges Changes {
+			get{ return changes; }
+			set {
+				if (value != null)
+					throw new ArgumentException ("The only valid value is null");
+				changes = new PhotoChanges ();
+			}
+		}
+
+		// The time is always in UTC.
+		private DateTime time;
+		public DateTime Time {
+			get { return time; }
+			set {
+				if (time == value)
+					return;
+				time = value;
+				changes.TimeChanged = true;
+			}
+		}
+
+		public string Name {
+			get { return Uri.UnescapeDataString (System.IO.Path.GetFileName (VersionUri (OriginalVersionId).AbsolutePath)); }
+		}
+
+		private ArrayList tags;
+		public Tag [] Tags {
+			get {
+				if (tags == null)
+					return new Tag [0];
+
+				return (Tag []) tags.ToArray (typeof (Tag));
+			}
+		}
+
+		private bool loaded = false;
+		public bool Loaded {
+			get { return loaded; }
+			set {
+				if (value) {
+					if (DefaultVersionId != OriginalVersionId && !versions.ContainsKey (DefaultVersionId))
+						DefaultVersionId = OriginalVersionId;
+				}
+				loaded = value;
+			}
+		}
+
+		private string description;
+		public string Description {
+			get { return description; }
+			set {
+				if (description == value)
+					return;
+				description = value;
+				changes.DescriptionChanged = true;
+			}
+		}
+
+		private uint roll_id = 0;
+		public uint RollId {
+			get { return roll_id; }
+			set {
+				if (roll_id == value)
+					return;
+				roll_id = value;
+				changes.RollIdChanged = true;
+			}
+		}
+
+		private uint rating;
+		public uint Rating {
+			get { return rating; }
+			set {
+				if (rating == value || value < 0 || value > 5)
+					return;
+				rating = value;
+				changes.RatingChanged = true;
+			}
+		}
+
+		// Version management
+		public const int OriginalVersionId = 1;
+		private uint highest_version_id;
+
+		private Dictionary<uint, PhotoVersion> versions = new Dictionary<uint, PhotoVersion> ();
+		public IEnumerable<IBrowsableItemVersion> Versions {
+			get {
+				foreach (var version in versions.Values)
+					yield return version;
+			}
+		}
+
+		public uint [] VersionIds {
+			get {
+				if (versions == null)
+					return new uint [0];
+
+				uint [] ids = new uint [versions.Count];
+				versions.Keys.CopyTo (ids, 0);
+				Array.Sort (ids);
+				return ids;
+			}
+		}
+
+		public PhotoVersion GetVersion (uint version_id)
+		{
+			if (versions == null)
+				return null;
+
+			return versions [version_id];
+		}
+
+		private uint default_version_id = OriginalVersionId;
+		public uint DefaultVersionId {
+			get { return default_version_id; }
+			set {
+				if (default_version_id == value)
+					return;
+				default_version_id = value;
+				changes.DefaultVersionIdChanged = true;
+			}
+		}
+
+		// This doesn't check if a version of that name already exists,
+		// it's supposed to be used only within the Photo and PhotoStore classes.
+		internal void AddVersionUnsafely (uint version_id, SafeUri base_uri, string filename, string import_md5, string name, bool is_protected)
+		{
+			versions [version_id] = new PhotoVersion (this, version_id, base_uri, filename, import_md5, name, is_protected);
+
+			highest_version_id = Math.Max (version_id, highest_version_id);
+			changes.AddVersion (version_id);
+		}
+
+		public uint AddVersion (SafeUri base_uri, string filename, string name)
+		{
+			return AddVersion (base_uri, filename, name, false);
+		}
+
+		public uint AddVersion (SafeUri base_uri, string filename, string name, bool is_protected)
+		{
+			if (VersionNameExists (name))
+				throw new ApplicationException ("A version with that name already exists");
+			highest_version_id ++;
+			string import_md5 = String.Empty; // Modified version
+
+			versions [highest_version_id] = new PhotoVersion (this, highest_version_id, base_uri, filename, import_md5, name, is_protected);
+
+			changes.AddVersion (highest_version_id);
+			return highest_version_id;
+		}
+
+		//FIXME: store versions next to originals. will crash on ro locations.
+		private string GetFilenameForVersionName (string version_name, string extension)
+		{
+			string name_without_extension = System.IO.Path.GetFileNameWithoutExtension (Name);
+
+			return name_without_extension + " (" +
+				UriUtils.EscapeString (version_name, true, true, true)
+				+ ")" + extension;
+		}
+
+		public bool VersionNameExists (string version_name)
+		{
+            return Versions.Where ((v) => v.Name == version_name).Any ();
+		}
+
+		public SafeUri VersionUri (uint version_id)
+		{
+			if (!versions.ContainsKey (version_id))
+				return null;
+
+			PhotoVersion v = versions [version_id];
+			if (v != null)
+				return v.Uri;
+
+			return null;
+		}
+
+		public IBrowsableItemVersion DefaultVersion {
+			get {
+				if (!versions.ContainsKey (DefaultVersionId))
+					throw new Exception ("Something is horribly wrong, this should never happen: no default version!");
+				return versions [DefaultVersionId];
+			}
+		}
+
+		public void SetDefaultVersion (IBrowsableItemVersion version)
+		{
+			PhotoVersion photo_version = version as PhotoVersion;
+			if (photo_version == null)
+				throw new ArgumentException ("Not a valid version for this photo");
+
+			DefaultVersionId = photo_version.VersionId;
+		}
+
+
+		//FIXME: won't work on non file uris
+		public uint SaveVersion (Gdk.Pixbuf buffer, bool create_version)
+		{
+			uint version = DefaultVersionId;
+			using (var img = ImageFile.Create (DefaultVersion.Uri)) {
+				// Always create a version if the source is not a jpeg for now.
+				create_version = create_version || ImageFile.IsJpeg (DefaultVersion.Uri);
+
+				if (buffer == null)
+					throw new ApplicationException ("invalid (null) image");
+
+				if (create_version)
+					version = CreateDefaultModifiedVersion (DefaultVersionId, false);
+
+				try {
+					var versionUri = VersionUri (version);
+
+					PixbufUtils.CreateDerivedVersion (DefaultVersion.Uri, versionUri, 95, buffer);
+					(GetVersion (version) as PhotoVersion).ImportMD5 = HashUtils.GenerateMD5 (VersionUri (version));
+					DefaultVersionId = version;
+				} catch (System.Exception e) {
+					Log.Exception (e);
+					if (create_version)
+						DeleteVersion (version);
+
+					throw e;
+				}
+			}
+
+			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, bool keep_file)
+		{
+			if (version_id == OriginalVersionId && !remove_original)
+				throw new Exception ("Cannot delete original version");
+
+			SafeUri uri = VersionUri (version_id);
+
+			if (!keep_file) {
+				GLib.File file = GLib.FileFactory.NewForUri (uri);
+				if (file.Exists) {
+					try {
+						file.Trash (null);
+					} catch (GLib.GException) {
+						Log.Debug ("Unable to Trash, trying to Delete");
+						file.Delete ();
+					}
+				}
+
+				try {
+					XdgThumbnailSpec.RemoveThumbnail (uri);
+				} catch {
+					// ignore an error here we don't really care.
+				}
+
+				// do we really need to check if the parent is a directory?
+				// i.e. is file.Parent always a directory if the file instance is
+				// an actual file?
+				GLib.File directory = file.Parent;
+				GLib.FileType file_type = directory.QueryFileType (GLib.FileQueryInfoFlags.None, null);
+
+				if (directory.Exists && file_type == GLib.FileType.Directory)
+					DeleteEmptyDirectory (directory);
+			}
+
+			versions.Remove (version_id);
+			changes.RemoveVersion (version_id);
+
+			for (version_id = highest_version_id; version_id >= OriginalVersionId; version_id--) {
+				if (versions.ContainsKey (version_id)) {
+					DefaultVersionId = version_id;
+					break;
+				}
+			}
+		}
+
+		private void DeleteEmptyDirectory (GLib.File directory)
+		{
+			// if the directory we're dealing with is not in the
+			// F-Spot photos directory, don't delete anything,
+			// even if it is empty
+			string photo_uri = SafeUri.UriToFilename (Global.PhotoUri.ToString ());
+			bool path_matched = directory.Path.IndexOf (photo_uri) > -1;
+
+			if (directory.Path.Equals (photo_uri) || !path_matched)
+				return;
+
+			if (DirectoryIsEmpty (directory)) {
+				try {
+					Log.DebugFormat ("Removing empty directory: {0}", directory.Path);
+					directory.Delete ();
+				} catch (GLib.GException e) {
+					// silently log the exception, but don't re-throw it
+					// as to not annoy the user
+					Log.Exception (e);
+				}
+				// check to see if the parent is empty
+				DeleteEmptyDirectory (directory.Parent);
+			}
+		}
+
+		private bool DirectoryIsEmpty (GLib.File directory)
+		{
+			uint count = 0;
+			GLib.FileEnumerator list = directory.EnumerateChildren ("standard::name",
+				GLib.FileQueryInfoFlags.None, null);
+			foreach (var item in list)
+				count++;
+			return count == 0;
+		}
+
+		public uint CreateVersion (string name, uint base_version_id, bool create)
+		{
+			return CreateVersion (name, null, base_version_id, create, 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;
+			string filename = GetFilenameForVersionName (name, extension);
+			SafeUri original_uri = VersionUri (base_version_id);
+			SafeUri new_uri = new_base_uri.Append (filename);
+			string import_md5 = DefaultVersion.ImportMD5;
+
+			if (VersionNameExists (name))
+				throw new Exception ("This version name already exists");
+
+			if (create) {
+				GLib.File destination = GLib.FileFactory.NewForUri (new_uri);
+				if (destination.Exists)
+					throw new Exception (String.Format ("An object at this uri {0} already exists", new_uri));
+
+		//FIXME. or better, fix the copy api !
+				GLib.File source = GLib.FileFactory.NewForUri (original_uri);
+				source.Copy (destination, GLib.FileCopyFlags.None, null, null);
+			}
+			highest_version_id ++;
+
+			versions [highest_version_id] = new PhotoVersion (this, highest_version_id, new_base_uri, filename, import_md5, name, is_protected);
+
+			changes.AddVersion (highest_version_id);
+
+			return highest_version_id;
+		}
+
+		public uint CreateReparentedVersion (PhotoVersion version)
+		{
+			return CreateReparentedVersion (version, false);
+		}
+
+		public uint CreateReparentedVersion (PhotoVersion version, bool is_protected)
+		{
+			// Try to derive version name from its filename
+			string filename = Uri.UnescapeDataString (Path.GetFileNameWithoutExtension (version.Uri.AbsolutePath));
+			string parent_filename = Path.GetFileNameWithoutExtension (Name);
+			string name = null;
+			if (filename.StartsWith (parent_filename))
+				name = filename.Substring (parent_filename.Length).Replace ("(", "").Replace (")", "").Replace ("_", " "). Trim();
+
+			if (String.IsNullOrEmpty (name)) {
+				// Note for translators: Reparented is a picture becoming a version of another one
+				string rep = name = Catalog.GetString ("Reparented");
+				for (int num = 1; VersionNameExists (name); num++)
+					name = String.Format (rep + " ({0})", num);
+			}
+			highest_version_id ++;
+			versions [highest_version_id] = new PhotoVersion (this, highest_version_id, version.BaseUri, version.Filename, version.ImportMD5, name, is_protected);
+
+			changes.AddVersion (highest_version_id);
+
+			return highest_version_id;
+		}
+
+		public uint CreateDefaultModifiedVersion (uint base_version_id, bool create_file)
+		{
+			int num = 1;
+
+			while (true) {
+				string name = Catalog.GetPluralString ("Modified",
+									 "Modified ({0})",
+									 num);
+				name = String.Format (name, num);
+				//SafeUri uri = GetUriForVersionName (name, System.IO.Path.GetExtension (VersionUri(base_version_id).GetFilename()));
+				string filename = GetFilenameForVersionName (name, System.IO.Path.GetExtension (versions[base_version_id].Filename));
+				SafeUri uri = DefaultVersion.BaseUri.Append (filename);
+				GLib.File file = GLib.FileFactory.NewForUri (uri);
+
+				if (! VersionNameExists (name) && ! file.Exists)
+					return CreateVersion (name, base_version_id, create_file);
+
+				num ++;
+			}
+		}
+
+		public uint CreateNamedVersion (string name, string extension, uint base_version_id, bool create_file)
+		{
+			int num = 1;
+
+			string final_name;
+			while (true) {
+				final_name = String.Format (
+						(num == 1) ? Catalog.GetString ("Modified in {1}") : Catalog.GetString ("Modified in {1} ({0})"),
+						num, name);
+
+				string filename = GetFilenameForVersionName (name, System.IO.Path.GetExtension (versions[base_version_id].Filename));
+				SafeUri uri = DefaultVersion.BaseUri.Append (filename);
+				GLib.File file = GLib.FileFactory.NewForUri (uri);
+
+				if (! VersionNameExists (final_name) && ! file.Exists)
+					return CreateVersion (final_name, extension, base_version_id, create_file);
+
+				num ++;
+			}
+		}
+
+		public void RenameVersion (uint version_id, string new_name)
+		{
+			if (version_id == OriginalVersionId)
+				throw new Exception ("Cannot rename original version");
+
+			if (VersionNameExists (new_name))
+				throw new Exception ("This name already exists");
+
+
+			(GetVersion (version_id) as PhotoVersion).Name = new_name;
+			changes.ChangeVersion (version_id);
+
+			//TODO: rename file too ???
+
+	//		if (System.IO.File.Exists (new_path))
+	//			throw new Exception ("File with this name already exists");
+	//
+	//		File.Move (old_path, new_path);
+	//		PhotoStore.MoveThumbnail (old_path, new_path);
+		}
+
+		public void CopyAttributesFrom (Photo that)
+		{
+			Time = that.Time;
+			Description = that.Description;
+			Rating = that.Rating;
+			AddTag (that.Tags);
+		}
+
+		// Tag management.
+
+		// This doesn't check if the tag is already there, use with caution.
+		public void AddTagUnsafely (Tag tag)
+		{
+			if (tags == null)
+				tags = new ArrayList ();
+
+			tags.Add (tag);
+			changes.AddTag (tag);
+		}
+
+		// This on the other hand does, but is O(n) with n being the number of existing tags.
+		public void AddTag (Tag tag)
+		{
+			if (!HasTag (tag))
+				AddTagUnsafely (tag);
+		}
+
+		public void AddTag (IEnumerable<Tag> taglist)
+		{
+			/*
+			 * FIXME need a better naming convention here, perhaps just
+			 * plain Add.
+			 */
+			foreach (Tag tag in taglist)
+				AddTag (tag);
+		}
+
+		public void RemoveTag (Tag tag)
+		{
+			if (!HasTag (tag))
+				return;
+
+			tags.Remove (tag);
+			changes.RemoveTag (tag);
+		}
+
+		public void RemoveTag (Tag []taglist)
+		{
+			foreach (Tag tag in taglist)
+				RemoveTag (tag);
+		}
+
+		public void RemoveCategory (IList<Tag> taglist)
+		{
+			foreach (Tag tag in taglist) {
+				Category cat = tag as Category;
+
+				if (cat != null)
+					RemoveCategory (cat.Children);
+
+				RemoveTag (tag);
+			}
+		}
+
+		public bool HasTag (Tag tag)
+		{
+			if (tags == null)
+				return false;
+
+			return tags.Contains (tag);
+		}
+
+		private static IDictionary<SafeUri, string> md5_cache = new Dictionary<SafeUri, string> ();
+
+		public static void ResetMD5Cache () {
+			if (md5_cache != null)
+				md5_cache.Clear ();
+		}
+
+		// Constructor
+		public Photo (uint id, long unix_time)
+			: base (id)
+		{
+			time = DateTimeUtil.ToDateTime (unix_time);
+
+			description = String.Empty;
+			rating = 0;
+		}
+
+#region IComparable implementation
+
+		// IComparable
+		public int CompareTo (object obj) {
+			if (this.GetType () == obj.GetType ()) {
+				return this.Compare((Photo)obj);
+			} else if (obj is DateTime) {
+				return this.time.CompareTo ((DateTime)obj);
+			} else {
+				throw new Exception ("Object must be of type Photo");
+			}
+		}
+
+		public int CompareTo (Photo photo)
+		{
+			int result = Id.CompareTo (photo.Id);
+
+			if (result == 0)
+				return 0;
+			else
+				return (this as IBrowsableItem).Compare (photo);
+		}
+
+#endregion
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/PhotoEventArgs.cs b/src/Clients/MainApp/FSpot/PhotoEventArgs.cs
new file mode 100644
index 0000000..dc40baf
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/PhotoEventArgs.cs
@@ -0,0 +1,30 @@
+/*
+ * FSpot.PhotoEventArgs.cs
+ *
+ * Author(s):
+ *	Ruben Vermeersch
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using FSpot.Core;
+
+namespace FSpot
+{
+	public class PhotoEventArgs : DbItemEventArgs<Photo> {
+		PhotosChanges changes;
+		public PhotosChanges Changes {
+			get { return changes; }
+		}
+
+		public PhotoEventArgs (Photo photo, PhotosChanges changes) : this (new Photo[] {photo}, changes)
+		{
+		}
+
+		public PhotoEventArgs (Photo[] photos, PhotosChanges changes) : base (photos)
+		{
+			this.changes = changes;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/PhotoList.cs b/src/Clients/MainApp/FSpot/PhotoList.cs
new file mode 100644
index 0000000..7f104cc
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/PhotoList.cs
@@ -0,0 +1,119 @@
+/*
+ * FSpot.PhotoList.cs
+ *
+ * Author(s):
+ *	Larry Ewing
+ *
+ * This is free software, See COPYING for details
+ */
+
+using System.Collections.Generic;
+
+using FSpot.Core;
+
+namespace FSpot {
+	public class PhotoList : IBrowsableCollection {
+		protected List<IBrowsableItem> list;
+		IBrowsableItem [] cache;
+
+		public PhotoList (IBrowsableItem [] photos)
+		{
+			list = new List<IBrowsableItem> (photos);
+		}
+
+		public PhotoList ()
+		{
+			list = new List<IBrowsableItem> ();
+		}
+
+		public int Count {
+			get { return list.Count; }
+		}
+
+		public void Clear ()
+		{
+			list.Clear ();
+			Reload ();
+		}
+
+		public int Capacity {
+			set { list.Capacity = value; }
+		}
+
+		public void AddAll (List<IBrowsableItem> photos)
+		{
+			list = photos;
+			Reload ();
+		}
+
+		public void Add (IBrowsableItem photo)
+		{
+			list.Add (photo);
+			Reload ();
+		}
+
+		public void Add (IBrowsableItem [] items)
+		{
+			list.AddRange (items);
+			Reload ();
+		}
+
+		public int IndexOf (IBrowsableItem item)
+		{
+			return list.IndexOf (item);
+		}
+
+		public bool Contains (IBrowsableItem item)
+		{
+			return list.Contains (item);
+		}
+
+		public IBrowsableItem this [int index] {
+			get { return list [index]; }
+			set {
+				list [index] = value;
+				MarkChanged (index, FullInvalidate.Instance);
+			}
+		}
+
+		public void Sort (IComparer<IBrowsableItem> compare)
+		{
+			list.Sort (compare);
+			Reload ();
+		}
+
+		public void Reload ()
+		{
+			cache = null;
+			if (Changed != null)
+				Changed (this);
+		}
+
+		public void MarkChanged (int num, IBrowsableItemChanges changes)
+		{
+			MarkChanged (new BrowsableEventArgs (num, changes));
+		}
+
+		public void MarkChanged (BrowsableEventArgs args)
+		{
+			if (ItemsChanged != null)
+				ItemsChanged (this, args);
+		}
+
+		public IBrowsableItem [] Items {
+			get {
+				if (cache == null)
+					cache = list.ToArray ();
+
+				return cache;
+			}
+			set {
+				list.Clear ();
+				Add (value);
+			}
+		}
+
+		public event IBrowsableCollectionChangedHandler Changed;
+		public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/PhotoLoader.cs b/src/Clients/MainApp/FSpot/PhotoLoader.cs
new file mode 100644
index 0000000..96de303
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/PhotoLoader.cs
@@ -0,0 +1,44 @@
+using System;
+
+using FSpot.Core;
+using FSpot.Platform;
+using FSpot.Imaging;
+using Hyena;
+
+namespace FSpot {
+	[Obsolete ("nuke or rename this")]
+	public class PhotoLoader {
+		public PhotoQuery query;
+
+		public Gdk.Pixbuf Load (int index) {
+			return Load (query, index);
+		}
+
+		static public Gdk.Pixbuf Load (IBrowsableCollection collection, int index)
+		{
+			IBrowsableItem item = collection [index];
+			return Load (item);
+		}
+
+		static public Gdk.Pixbuf Load (IBrowsableItem item)
+		{
+			using (var img = ImageFile.Create (item.DefaultVersion.Uri)) {
+				Gdk.Pixbuf pixbuf = img.Load ();
+				return pixbuf;
+			}
+		}
+
+		static public Gdk.Pixbuf LoadAtMaxSize (IBrowsableItem item, int width, int height)
+		{
+			using (var img = ImageFile.Create (item.DefaultVersion.Uri)) {
+				Gdk.Pixbuf pixbuf = img.Load (width, height);
+				return pixbuf;
+			}
+		}
+
+		public PhotoLoader (PhotoQuery query)
+		{
+			this.query = query;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/PhotoPopup.cs b/src/Clients/MainApp/FSpot/PhotoPopup.cs
new file mode 100644
index 0000000..1b49b9e
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/PhotoPopup.cs
@@ -0,0 +1,52 @@
+/*
+ * FSpot.PhotoPopup
+ *
+ * Author(s)
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+
+using Gtk;
+
+using Mono.Addins;
+
+using FSpot.Extensions;
+
+namespace FSpot
+{
+	public class PhotoPopup : Gtk.Menu
+	{
+
+		protected PhotoPopup (IntPtr handle) : base (handle)
+		{
+		}
+
+		public PhotoPopup () : this (null)
+		{
+		}
+
+		public PhotoPopup (Widget parent) : base ()
+		{
+			foreach (MenuNode node in AddinManager.GetExtensionNodes ("/FSpot/Menus/PhotoPopup"))
+				Append (node.GetMenuItem (parent));
+			ShowAll ();
+		}
+
+		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);
+			else
+				Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
+		}
+
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/PhotoQuery.cs b/src/Clients/MainApp/FSpot/PhotoQuery.cs
new file mode 100644
index 0000000..c9dfbf7
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/PhotoQuery.cs
@@ -0,0 +1,383 @@
+/*
+ * FSpot.PhotoQuery.cs
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using FSpot.Core;
+using FSpot.Query;
+using Hyena;
+
+namespace FSpot {
+	public class PhotoQuery : IBrowsableCollection {
+		class PhotoCache
+		{
+			static int SIZE = 100;
+			public int Size {
+				get { return SIZE; }
+			}
+
+			Dictionary <int, Photo []> cache;
+			string temp_table;
+			PhotoStore store;
+
+			public PhotoCache (PhotoStore store, string temp_table)
+			{
+				this.temp_table = temp_table;
+				this.store = store;
+				cache = new Dictionary<int, Photo[]> ();
+			}
+
+			public bool TryGetPhoto (int index, out Photo photo)
+			{
+				photo = null;
+				Photo [] val;
+				int offset = index - index % SIZE;
+				if (!cache.TryGetValue (offset, out val))
+					return false;
+				photo = val [index - offset];
+				return true;
+			}
+
+			public Photo Get (int index)
+			{
+				Photo [] val;
+				int offset = index - index % SIZE;
+				if (!cache.TryGetValue (offset, out val)) {
+					val = store.QueryFromTemp (temp_table, offset, SIZE);
+					cache [offset] = val;
+				}
+				return val [index - offset];
+			}
+		}
+
+		PhotoCache cache;
+		private PhotoStore store;
+		private Term terms;
+
+		static int query_count = 0;
+		static int QueryCount {
+			get {return query_count ++;}
+		}
+
+		Dictionary<uint, int> reverse_lookup;
+
+		int count = -1;
+
+		string temp_table = String.Format ("photoquery_temp_{0}", QueryCount);
+
+		// Constructor
+		public PhotoQuery (PhotoStore store, params IQueryCondition [] conditions)
+		{
+			this.store = store;
+			this.store.ItemsChanged += MarkChanged;
+			cache = new PhotoCache (store, temp_table);
+			reverse_lookup = new Dictionary<uint, int> ();
+			SetCondition (OrderByTime.OrderByTimeDesc);
+
+			foreach (IQueryCondition condition in conditions)
+				SetCondition (condition);
+
+			RequestReload ();
+		}
+
+		public int Count {
+			get {
+				if (count < 0)
+					count = store.Count (temp_table);
+				return count;
+			}
+		}
+
+		public bool Contains (IBrowsableItem item) {
+			return IndexOf (item) >= 0;
+		}
+
+		// IPhotoCollection Interface
+		public event IBrowsableCollectionChangedHandler Changed;
+		public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
+
+		public IBrowsableItem this [int index] {
+			get { return cache.Get (index); }
+		}
+
+		[Obsolete ("DO NOT USE THIS, IT'S TOO SLOW")]
+		public Photo [] Photos {
+			get { return store.QueryFromTemp (temp_table); }
+		}
+
+		[Obsolete ("DO NOT USE Items on PhotoQuery")]
+		public IBrowsableItem [] Items {
+			get { throw new NotImplementedException (); }
+		}
+
+		public PhotoStore Store {
+			get { return store; }
+		}
+
+		//Query Conditions
+		private Dictionary<Type, IQueryCondition> conditions;
+		private Dictionary<Type, IQueryCondition> Conditions {
+			get {
+				if (conditions == null)
+					conditions = new Dictionary<Type, IQueryCondition> ();
+				return conditions;
+			}
+		}
+
+		internal bool SetCondition (IQueryCondition condition)
+		{
+			if (condition == null)
+				throw new ArgumentNullException ("condition");
+			if (Conditions.ContainsKey (condition.GetType ()) && Conditions [condition.GetType ()] == condition)
+				return false;
+			Conditions [condition.GetType ()] = condition;
+			return true;
+		}
+
+		internal T GetCondition<T> () where T : IQueryCondition
+		{
+			IQueryCondition val;
+			Conditions.TryGetValue (typeof (T), out val);
+			return (T)val;
+		}
+
+		internal bool UnSetCondition<T> ()
+		{
+			if (!Conditions.ContainsKey (typeof(T)))
+				return false;
+			Conditions.Remove (typeof(T));
+			return true;
+		}
+
+		public Term Terms {
+			get { return terms; }
+			set {
+				terms = value;
+				untagged = false;
+				RequestReload ();
+			}
+		}
+
+		public DateRange Range {
+			get { return GetCondition<DateRange> (); }
+			set {
+				if (value == null && UnSetCondition<DateRange> () || value != null && SetCondition (value))
+					RequestReload ();
+			}
+		}
+
+		private bool untagged = false;
+		public bool Untagged {
+			get { return untagged; }
+			set {
+				if (untagged != value) {
+					untagged = value;
+
+					if (untagged) {
+						UnSetCondition<ConditionWrapper> ();
+						UnSetCondition<HiddenTag> ();
+					}
+
+					RequestReload ();
+				}
+			}
+		}
+
+		public RollSet RollSet {
+			get { return GetCondition<RollSet> (); }
+			set {
+				if (value == null && UnSetCondition<RollSet> () || value != null && SetCondition (value))
+					RequestReload ();
+			}
+		}
+
+		public RatingRange RatingRange {
+			get { return GetCondition<RatingRange> (); }
+			set {
+				if (value == null && UnSetCondition<RatingRange>() || value != null && SetCondition (value))
+					RequestReload ();
+			}
+		}
+
+		public HiddenTag HiddenTag {
+			get { return GetCondition<HiddenTag> (); }
+			set {
+				if (value == null && UnSetCondition<HiddenTag>() || value != null && SetCondition (value))
+					RequestReload ();
+			}
+		}
+
+		public ConditionWrapper TagTerm {
+			get { return GetCondition<ConditionWrapper> (); }
+			set {
+				if (value == null && UnSetCondition<ConditionWrapper>()
+				    || value != null && SetCondition (value)) {
+
+					if (value != null) {
+						untagged = false;
+						SetCondition (HiddenTag.ShowHiddenTag);
+					} else {
+						UnSetCondition<HiddenTag> ();
+					}
+
+					RequestReload ();
+				}
+			}
+		}
+
+		public OrderByTime OrderByTime {
+			get { return GetCondition<OrderByTime> (); }
+			set {
+				if (value != null && SetCondition (value))
+					RequestReload ();
+			}
+		}
+
+		public bool TimeOrderAsc {
+			get { return OrderByTime.Asc; }
+			set {
+				if (value != OrderByTime.Asc)
+					OrderByTime = new OrderByTime (value);
+			}
+		}
+
+		public void RequestReload ()
+		{
+			uint timer = Log.DebugTimerStart ();
+			IQueryCondition[] condition_array;
+
+			int i = 0;
+			if (untagged) {
+				condition_array = new IQueryCondition[conditions.Count + 1];
+				condition_array[0] = new UntaggedCondition ();
+				i = 1;
+			} else {
+				condition_array = new IQueryCondition[conditions.Count + 2];
+		//		condition_array[0] = new ConditionWrapper (extra_condition);
+				condition_array[1] = new ConditionWrapper (terms != null ? terms.SqlCondition () : null);
+				i = 2;
+			}
+
+			foreach (IQueryCondition condition in Conditions.Values) {
+				condition_array[i] = condition;
+				i++;
+			}
+
+			store.QueryToTemp (temp_table, condition_array);
+
+			count = -1;
+			cache = new PhotoCache (store, temp_table);
+			reverse_lookup = new Dictionary<uint,int> ();
+
+			if (Changed != null)
+				Changed (this);
+
+			Log.DebugTimerPrint (timer, "Reloading the query took {0}");
+		}
+
+		public int IndexOf (IBrowsableItem photo)
+		{
+			if (photo == null || !(photo is Photo))
+				return -1;
+			return store.IndexOf (temp_table, photo as Photo);
+		}
+
+		private int [] IndicesOf (DbItem [] dbitems)
+		{
+			uint timer = Log.DebugTimerStart ();
+			List<int> indices = new List<int> ();
+			List<uint> items_to_search = new List<uint> ();
+			int cur;
+			foreach (DbItem dbitem in dbitems) {
+				if (reverse_lookup.TryGetValue (dbitem.Id, out cur))
+					indices.Add (cur);
+				else
+					items_to_search.Add (dbitem.Id);
+			}
+
+			if (items_to_search.Count > 0)
+				indices.AddRange (store.IndicesOf (temp_table, items_to_search.ToArray ()));
+			Log.DebugTimerPrint (timer, "IndicesOf took {0}");
+			return indices.ToArray ();
+		}
+
+		public int LookupItem (System.DateTime date)
+		{
+			return LookupItem (date, TimeOrderAsc);
+		}
+
+		private int LookupItem (System.DateTime date, bool asc)
+		{
+			if (Count == 0)
+				return -1;
+
+			uint timer = Log.DebugTimerStart ();
+			int low = 0;
+			int high = Count - 1;
+			int mid = (low + high) / 2;
+			Photo current;
+			while (low <= high) {
+				mid = (low + high) / 2;
+				if (!cache.TryGetPhoto (mid, out current))
+					//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);
+
+				int comp = this [mid].Time.CompareTo (date);
+				if (!asc && comp < 0 || asc && comp > 0)
+					high = mid - 1;
+				else if (!asc && comp > 0 || asc && comp < 0)
+					low = mid + 1;
+				else
+					return mid;
+			}
+			Log.DebugTimerPrint (timer, "LookupItem took {0}");
+			if (asc)
+				return this[mid].Time < date ? mid + 1 : mid;
+			return this[mid].Time > date ? mid + 1 : mid;
+
+		}
+
+		public void Commit (int index)
+		{
+			Commit (new int [] {index});
+		}
+
+		public void Commit (int [] indexes)
+		{
+			List<Photo> to_commit = new List<Photo>();
+			foreach (int index in indexes) {
+				to_commit.Add (this [index] as Photo);
+				reverse_lookup [(this [index] as Photo).Id] = index;
+			}
+			store.Commit (to_commit.ToArray ());
+		}
+
+		private void MarkChanged (object sender, DbItemEventArgs<Photo> args)
+		{
+			int [] indexes = IndicesOf (args.Items);
+
+			if (indexes.Length > 0 && ItemsChanged != null)
+				ItemsChanged (this, new BrowsableEventArgs(indexes, (args as PhotoEventArgs).Changes));
+		}
+
+		public void MarkChanged (int index, IBrowsableItemChanges changes)
+		{
+			MarkChanged (new int [] {index}, changes);
+		}
+
+		public void MarkChanged (int [] indexes, IBrowsableItemChanges changes)
+		{
+			ItemsChanged (this, new BrowsableEventArgs (indexes, changes));
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/PhotoStore.cs b/src/Clients/MainApp/FSpot/PhotoStore.cs
new file mode 100644
index 0000000..ad88899
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/PhotoStore.cs
@@ -0,0 +1,927 @@
+/*
+ * PhotoStore.cs
+ *
+ * Author(s):
+ *	Ettore Perazzoli <ettore at perazzoli.org>
+ *	Larry Ewing <lewing at gnome.org>
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using Gdk;
+using Gtk;
+
+using Mono.Unix;
+
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Data;
+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;
+
+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.Close ();
+			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 (IBrowsableItem 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.Close();
+		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.Close ();
+		}
+
+		// No matches
+		return false;
+	}
+
+	public Photo CreateFrom (IBrowsableItem 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.Loaded = 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.Close();
+	}
+
+	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.Close();
+	}
+
+	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.Loaded) {
+				//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.Close();
+	}
+
+	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.Loaded) {
+				//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.Close();
+	}
+
+	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.Close();
+
+		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.Close();
+
+		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);
+
+		ArrayList query_builder = new ArrayList (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 ("','", ((string []) query_builder.ToArray (typeof (string))));
+		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.Close();
+		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.Close();
+		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.Close ();
+		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;
+
+		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.Close ();
+
+		//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.Close();
+
+		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.Loaded;
+		}
+
+		photo_ids = photo_ids + "-1)";
+
+		if (need_load) {
+			GetAllTags (photo_ids);
+			GetAllVersions (photo_ids);
+			foreach (Photo photo in new_photos)
+				photo.Loaded = 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 ();
+		ArrayList where_clauses = new ArrayList ();
+		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 ", ((String []) where_clauses.ToArray (typeof(String)))));
+		}
+		query_builder.Append (" ORDER BY time");
+		return Query (query_builder.ToString ());
+	}
+}
+}
\ No newline at end of file
diff --git a/src/Clients/MainApp/FSpot/PhotoVersion.cs b/src/Clients/MainApp/FSpot/PhotoVersion.cs
new file mode 100644
index 0000000..478bef2
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/PhotoVersion.cs
@@ -0,0 +1,46 @@
+/*
+ * PhotoStore.cs
+ *
+ * Author(s):
+ *	Ettore Perazzoli <ettore at perazzoli.org>
+ *	Larry Ewing <lewing at gnome.org>
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *	Thomas Van Machelen <thomas.vanmachelen at gmail.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using Hyena;
+using FSpot.Core;
+
+namespace FSpot
+{
+    public class PhotoVersion : IBrowsableItemVersion
+    {
+        public string Name { get; set; }
+        public IBrowsableItem Photo { get; private set; }
+        public SafeUri BaseUri { get; set; }
+        public string Filename { get; set; }
+        public SafeUri Uri {
+            get { return BaseUri.Append (Filename); }
+            set {
+                BaseUri = value.GetBaseUri ();
+                Filename = value.GetFilename ();
+            }
+        }
+        public string ImportMD5 { get; set; }
+        public uint VersionId { get; private set; }
+        public bool IsProtected { get; private set; }
+
+        public PhotoVersion (IBrowsableItem photo, uint version_id, SafeUri base_uri, string filename, string md5_sum, string name, bool is_protected)
+        {
+            Photo = photo;
+            VersionId = version_id;
+            BaseUri = base_uri;
+            Filename = filename;
+            ImportMD5 = md5_sum;
+            Name = name;
+            IsProtected = is_protected;
+        }
+    }
+}
diff --git a/src/Clients/MainApp/FSpot/PhotoView.cs b/src/Clients/MainApp/FSpot/PhotoView.cs
new file mode 100644
index 0000000..1c91377
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/PhotoView.cs
@@ -0,0 +1,405 @@
+/*
+ * FSpot.PhotoView.cs
+ *
+ * Author(s)
+ * 	Ettore Perazzoli
+ * 	Larry Ewing
+ *	Stephane Delcroix
+ *
+ * This is free software. See COPYING for details.
+ */
+
+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.Widgets;
+using FSpot.Utils;
+using Hyena;
+using FSpot.UI.Dialog;
+
+namespace FSpot {
+	public class PhotoView : EventBox {
+		Delay commit_delay;
+
+		private PhotoImageView photo_view;
+		private ScrolledWindow photo_view_scrolled;
+		private EventBox background;
+
+		private Filmstrip filmstrip;
+		VBox inner_vbox;
+		HBox inner_hbox;
+
+		private Widgets.TagView tag_view;
+
+		private Entry description_entry;
+		private Widgets.Rating rating;
+
+		// Public events.
+
+		public delegate void PhotoChangedHandler (PhotoView me);
+		public event PhotoChangedHandler PhotoChanged;
+
+		public delegate void UpdateStartedHandler (PhotoView view);
+		public event UpdateStartedHandler UpdateStarted;
+
+		public delegate void UpdateFinishedHandler (PhotoView view);
+		public event UpdateFinishedHandler UpdateFinished;
+
+		public event EventHandler<BrowsableEventArgs> DoubleClicked;
+
+		public Orientation FilmstripOrientation {
+			get { return filmstrip.Orientation; }
+		}
+
+		public PhotoImageView View {
+			get { return photo_view; }
+		}
+
+		public BrowsablePointer Item {
+			get { return photo_view.Item; }
+		}
+
+		private IBrowsableCollection query;
+		public IBrowsableCollection Query {
+			get { return query; }
+			set { query = value; }
+		}
+
+		public double Zoom {
+			get { return photo_view.Zoom; }
+			set { photo_view.Zoom = value; }
+		}
+
+		public double NormalizedZoom {
+			get { return photo_view.NormalizedZoom; }
+			set { photo_view.NormalizedZoom = value; }
+		}
+
+		public void Reload ()
+		{
+			photo_view.Reload ();
+		}
+
+		private void UpdateDescriptionEntry ()
+		{
+			description_entry.Changed -= HandleDescriptionChanged;
+			if (Item.IsValid) {
+				if (description_entry.Sensitive == false)
+					description_entry.Sensitive = true;
+
+				string desc = Item.Current.Description;
+				if (description_entry.Text != desc) {
+					description_entry.Text = desc == null ? String.Empty : desc;
+				}
+			} else {
+				description_entry.Sensitive = false;
+				description_entry.Text = String.Empty;
+			}
+
+			description_entry.Changed += HandleDescriptionChanged;
+		}
+
+		public void UpdateRating ()
+		{
+			if (Item.IsValid)
+				UpdateRating ((int)Item.Current.Rating);
+		}
+
+		public void UpdateRating (int r)
+		{
+			rating.Changed -= HandleRatingChanged;
+			rating.Value = r;
+			rating.Changed += HandleRatingChanged;
+		}
+
+		private void Update ()
+		{
+			if (UpdateStarted != null)
+				UpdateStarted (this);
+
+			UpdateDescriptionEntry ();
+			UpdateRating ();
+
+			if (UpdateFinished != null)
+				UpdateFinished (this);
+		}
+
+		public void ZoomIn ()
+		{
+			photo_view.ZoomIn ();
+		}
+
+		public void ZoomOut ()
+		{
+			photo_view.ZoomOut ();
+		}
+
+		// Event handlers.
+		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) {
+				PhotoPopup popup = new PhotoPopup ();
+				popup.Activate (this.Toplevel, args.Event);
+			}
+		}
+
+		protected override bool OnPopupMenu ()
+		{
+			PhotoPopup popup = new PhotoPopup ();
+			popup.Activate (this.Toplevel);
+			return true;
+		}
+
+		int changed_photo;
+		private bool CommitPendingChanges ()
+		{
+			if (commit_delay.IsPending) {
+				commit_delay.Stop ();
+				((PhotoQuery)query).Commit (changed_photo);
+			}
+			return true;
+		}
+
+		private void HandleDescriptionChanged (object sender, EventArgs args)
+		{
+			if (!Item.IsValid)
+				return;
+
+			((Photo)Item.Current).Description = description_entry.Text;
+
+			if (commit_delay.IsPending)
+				if (changed_photo == Item.Index)
+					commit_delay.Stop ();
+				else
+					CommitPendingChanges ();
+
+			changed_photo = Item.Index;
+			commit_delay.Start ();
+		}
+
+		private void HandleRatingChanged (object o, EventArgs e)
+		{
+			if (!Item.IsValid)
+				return;
+
+			((Photo)Item.Current).Rating = (uint)(o as Widgets.Rating).Value;
+
+			if (commit_delay.IsPending)
+				if (changed_photo == Item.Index)
+					commit_delay.Stop();
+				else
+					CommitPendingChanges ();
+			changed_photo = Item.Index;
+			commit_delay.Start ();
+		}
+
+		public void UpdateTagView ()
+		{
+			tag_view.DrawTags ();
+			tag_view.QueueDraw ();
+		}
+
+		void HandlePhotoChanged (object sender, EventArgs e)
+		{
+			if (query is PhotoQuery) {
+				CommitPendingChanges ();
+			}
+
+			tag_view.Current = Item.Current;
+			Update ();
+
+			if (this.PhotoChanged != null)
+				PhotoChanged (this);
+		}
+
+		private void HandleDestroy (object sender, System.EventArgs args)
+		{
+			CommitPendingChanges ();
+			Dispose ();
+		}
+
+		private void OnPreferencesChanged (object sender, NotifyEventArgs args)
+		{
+			LoadPreference (args.Key);
+		}
+
+		private void LoadPreference (String key)
+		{
+			switch (key) {
+			case Preferences.FILMSTRIP_ORIENTATION:
+				PlaceFilmstrip ((Orientation) Preferences.Get<int> (key));
+				break;
+			}
+		}
+
+		public void PlaceFilmstrip (Orientation pos)
+		{
+			PlaceFilmstrip (pos, false);
+		}
+
+		public void PlaceFilmstrip (Orientation pos, bool force)
+		{
+			if (!force && filmstrip.Orientation == pos)
+				return;
+			filmstrip.Orientation = pos;
+
+			System.Collections.IEnumerator widgets;
+			switch (pos) {
+			case Orientation.Horizontal:
+				widgets = inner_hbox.AllChildren.GetEnumerator ();
+				while (widgets.MoveNext ())
+					if (widgets.Current == filmstrip) {
+						inner_hbox.Remove (filmstrip);
+						break;
+					}
+				inner_vbox.PackStart (filmstrip, false, false, 0);
+				inner_vbox.ReorderChild (filmstrip, 0);
+				break;
+			case Orientation.Vertical:
+				widgets = inner_vbox.AllChildren.GetEnumerator ();
+				while (widgets.MoveNext ())
+					if (widgets.Current == filmstrip) {
+						inner_vbox.Remove (filmstrip);
+						break;
+					}
+				inner_hbox.PackEnd (filmstrip, false, false, 0);
+				break;
+			}
+			Preferences.Set (Preferences.FILMSTRIP_ORIENTATION, (int) pos);
+		}
+
+		public bool FilmStripVisibility {
+			get { return filmstrip.Visible; }
+			set { filmstrip.Visible = value; }
+		}
+
+		public PhotoView (IBrowsableCollection query)
+			: base ()
+		{
+			this.query = query;
+
+			commit_delay = new Delay (1000, new GLib.IdleHandler (CommitPendingChanges));
+			this.Destroyed += HandleDestroy;
+
+			Name = "ImageContainer";
+			Box vbox = new VBox (false, 6);
+			Add (vbox);
+
+		        background = new EventBox ();
+			Frame frame = new Frame ();
+			background.Add (frame);
+
+			frame.ShadowType = ShadowType.In;
+			vbox.PackStart (background, true, true, 0);
+
+			inner_vbox = new VBox (false , 2);
+			inner_hbox = new HBox (false , 2);
+
+			frame.Add (inner_hbox);
+
+			BrowsablePointer bp = new BrowsablePointer (query, -1);
+			photo_view = new PhotoImageView (bp);
+
+			filmstrip = new Filmstrip (bp);
+			filmstrip.ThumbOffset = 1;
+			filmstrip.Spacing = 4;
+			filmstrip.ThumbSize = 75;
+			PlaceFilmstrip ((Orientation) Preferences.Get <int> (Preferences.FILMSTRIP_ORIENTATION), true);
+
+			photo_view.PhotoChanged += HandlePhotoChanged;
+
+			photo_view_scrolled = new ScrolledWindow (null, null);
+
+			photo_view_scrolled.SetPolicy (PolicyType.Automatic, PolicyType.Automatic);
+			photo_view_scrolled.ShadowType = ShadowType.None;
+			photo_view_scrolled.Add (photo_view);
+			photo_view_scrolled.Child.ButtonPressEvent += HandleButtonPressEvent;
+			photo_view.AddEvents ((int) EventMask.KeyPressMask);
+			inner_vbox.PackStart (photo_view_scrolled, true, true, 0);
+			inner_hbox.PackStart (inner_vbox, true, true, 0);
+
+			HBox lower_hbox = new HBox (false, 2);
+			//inner_hbox.BorderWidth = 6;
+
+			tag_view = new Widgets.TagView ();
+			lower_hbox.PackStart (tag_view, false, true, 0);
+
+			Label comment = new Label (Catalog.GetString ("Description:"));
+			lower_hbox.PackStart (comment, false, false, 0);
+			description_entry = new Entry ();
+			lower_hbox.PackStart (description_entry, true, true, 0);
+			description_entry.Changed += HandleDescriptionChanged;
+
+			rating = new Widgets.Rating();
+			lower_hbox.PackStart (rating, false, false, 0);
+			rating.Changed += HandleRatingChanged;
+
+			SetColors ();
+
+			inner_vbox.PackStart (lower_hbox, false, true, 0);
+
+			vbox.ShowAll ();
+
+			Realized += delegate (object o, EventArgs e) {SetColors ();};
+			Preferences.SettingChanged += OnPreferencesChanged;
+		}
+
+		~PhotoView ()
+		{
+			Hyena.Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
+			Dispose (false);
+		}
+
+		public override void Dispose ()
+		{
+			Dispose (true);
+			base.Dispose ();
+			System.GC.SuppressFinalize (this);
+		}
+
+		bool is_disposed = false;
+		protected virtual void Dispose (bool disposing)
+		{
+			if (is_disposed)
+				return;
+			if (disposing) { //Free managed resources
+				filmstrip.Dispose ();
+			}
+
+			is_disposed = true;
+		}
+
+		private void SetColors ()
+		{
+			GtkUtil.ModifyColors (filmstrip);
+			GtkUtil.ModifyColors (tag_view);
+			GtkUtil.ModifyColors (photo_view);
+			GtkUtil.ModifyColors (background);
+			GtkUtil.ModifyColors (photo_view_scrolled);
+			GtkUtil.ModifyColors (rating);
+
+			Gdk.Color dark = Style.Dark (Gtk.StateType.Normal);
+			filmstrip.ModifyBg (Gtk.StateType.Normal, dark);
+			tag_view.ModifyBg (Gtk.StateType.Normal, dark);
+			photo_view.ModifyBg (Gtk.StateType.Normal, dark);
+			background.ModifyBg (Gtk.StateType.Normal, dark);
+			photo_view_scrolled.ModifyBg (Gtk.StateType.Normal, dark);
+			rating.ModifyBg (Gtk.StateType.Normal, dark);
+		}
+
+		protected override void OnStyleSet (Style previous)
+		{
+			SetColors ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/PixbufCache.cs b/src/Clients/MainApp/FSpot/PixbufCache.cs
new file mode 100644
index 0000000..4943d44
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/PixbufCache.cs
@@ -0,0 +1,391 @@
+/*
+ * FSpot.PixbufCache.cs
+ *
+ * Author(s):
+ * 	Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Collections;
+using System.Threading;
+using Hyena;
+
+using FSpot.Utils;
+using FSpot.Platform;
+
+namespace FSpot {
+	public class PixbufCache {
+		Hashtable items;
+		ArrayList items_mru;
+		int total_size;
+		int max_size = 256 * 256 * 4 * 30;
+
+		private Thread worker;
+
+		public delegate void PixbufLoadedHandler (PixbufCache cache, CacheEntry entry);
+		public event PixbufLoadedHandler OnPixbufLoaded;
+
+		public PixbufCache ()
+		{
+			items = new Hashtable ();
+			items_mru = new ArrayList ();
+
+			worker = new Thread (new ThreadStart (WorkerTask));
+			worker.Start ();
+
+			ThumbnailLoader.Default.OnPixbufLoaded += HandleThumbnailLoaded;
+		}
+
+		public void HandleThumbnailLoaded (ImageLoaderThread loader, ImageLoaderThread.RequestItem result)
+		{
+            Reload (result.Uri);
+		}
+
+		public void Request (SafeUri uri, object closure, int width, int height)
+		{
+			lock (items) {
+				CacheEntry entry = items[uri] as CacheEntry;
+
+				if (entry == null) {
+					entry = new CacheEntry (this, uri, closure, width, height);
+					items [uri] = entry;
+					items_mru.Add (entry);
+				} else {
+					MoveForward (entry);
+					entry.Data = closure;
+				}
+				Monitor.Pulse (items);
+			}
+		}
+
+//		public void Update (SafeUri uri, Gdk.Pixbuf pixbuf)
+//		{
+//			lock (items) {
+//				CacheEntry entry = (CacheEntry) items [uri];
+//				if (entry != null) {
+//					entry.SetPixbufExtended (pixbuf, true);
+//				}
+//			}
+//		}
+
+		public void Update (CacheEntry entry, Gdk.Pixbuf pixbuf)
+		{
+			lock (items) {
+				entry.SetPixbufExtended (pixbuf, true);
+			}
+		}
+
+		public void Reload (CacheEntry entry, object data, int width, int height)
+		{
+			lock (items) {
+				lock (entry) {
+					entry.Reload = true;
+					entry.Width = width;
+					entry.Height = height;
+					entry.Data = data;
+				}
+				Monitor.Pulse (items);
+			}
+		}
+
+		public void Reload (SafeUri uri)
+		{
+			CacheEntry entry;
+
+			lock (items) {
+				entry = (CacheEntry) items [uri];
+				if (entry != null) {
+					lock (entry) {
+						entry.Reload = true;
+					}
+					Monitor.Pulse (items);
+				}
+			}
+		}
+
+		private CacheEntry FindNext ()
+		{
+			CacheEntry entry;
+			int i = items_mru.Count;
+			int size = 0;
+			if (total_size > max_size * 4) {
+				//System.Console.WriteLine ("Hit major limit ({0}) out of {1}",
+				//			  total_size, max_size);
+				return null;
+			}
+			while (i-- > 0) {
+				entry = (CacheEntry) items_mru [i];
+				lock (entry) {
+					if (entry.Reload) {
+						entry.Reload = false;
+						return entry;
+					}
+
+					//if the depth of the queue is so large that we've reached double our limit
+					//break out of here and let the queue shrink.
+					if (entry.Pixbuf != null)
+						size += entry.Size;
+
+					if (size > max_size * 2) {
+						//System.Console.WriteLine ("Hit limit ({0},{1}) out of {2}",
+						//			  size, total_size,max_size);
+						return null;
+					}
+				}
+			}
+			return null;
+		}
+
+		private bool ShrinkIfNeeded ()
+		{
+			int num = 0;
+			while ((items_mru.Count - num) > 10 && total_size > max_size) {
+				CacheEntry entry = (CacheEntry) items_mru [num++];
+				items.Remove (entry.Uri);
+				entry.Dispose ();
+			}
+			if (num > 0) {
+				//System.Console.WriteLine ("removing {0} out of {3}  ({1} > {2})",
+				//			  num, total_size, max_size, items_mru.Count);
+				items_mru.RemoveRange (0, num);
+				return true;
+			}
+			return false;
+		}
+
+		private void WorkerTask ()
+		{
+			CacheEntry current = null;
+			//ThumbnailGenerator.Default.PushBlock ();
+			while (true) {
+				try {
+					lock (items) {
+						/* find the next item */
+						while ((current = FindNext ()) == null) {
+							if (!ShrinkIfNeeded ()){
+								//ThumbnailGenerator.Default.PopBlock ();
+								Monitor.Wait (items);
+								//ThumbnailGenerator.Default.PushBlock ();
+							}
+						}
+					}
+					ProcessRequest (current);
+					QueueLast (current);
+				} catch (System.Exception e) {
+					Log.Exception (e);
+					current = null;
+				}
+			}
+		}
+
+		protected virtual void ProcessRequest (CacheEntry entry)
+		{
+			Gdk.Pixbuf loaded = null;
+			try {
+				loaded = XdgThumbnailSpec.LoadThumbnail (entry.Uri, ThumbnailSize.Large);
+				this.Update (entry, loaded);
+			} catch (GLib.GException){
+				if (loaded != null)
+					loaded.Dispose ();
+				return;
+			}
+		}
+
+		private void QueueLast (CacheEntry entry)
+		{
+			ThreadAssist.ProxyToMain (() => {
+				if (entry.Uri != null && OnPixbufLoaded != null)
+					OnPixbufLoaded (this, entry);
+			});
+		}
+
+		private void MoveForward (CacheEntry entry)
+		{
+#if true
+			int i = items_mru.Count;
+			CacheEntry tmp1 = entry;
+			CacheEntry tmp2;
+			while (i-- > 0) {
+				tmp2 = (CacheEntry) items_mru [i];
+				items_mru [i] = tmp1;
+				tmp1 = tmp2;
+				if (tmp2 == entry)
+					return;
+			}
+			throw new System.Exception ("move forward failed");
+#else
+			items_mru.Remove (entry);
+			items_mru.Add (entry);
+#endif
+		}
+
+
+		private CacheEntry ULookup (SafeUri uri)
+		{
+			CacheEntry entry = (CacheEntry) items [uri];
+			if (entry != null) {
+				MoveForward (entry);
+			}
+			return (CacheEntry) entry;
+		}
+
+		public CacheEntry Lookup (SafeUri uri)
+		{
+			lock (items) {
+				return ULookup (uri);
+			}
+		}
+
+		private void URemove (SafeUri uri)
+		{
+			CacheEntry entry = (CacheEntry) items [uri];
+			if (entry != null) {
+				items.Remove (uri);
+				items_mru.Remove (entry);
+				entry.Dispose ();
+			}
+		}
+
+		public void Remove (SafeUri uri)
+		{
+			lock (items) {
+				URemove (uri);
+			}
+		}
+
+		public class CacheEntry : System.IDisposable {
+			private Gdk.Pixbuf pixbuf;
+			private SafeUri uri;
+			private int width;
+			private int height;
+			private object data;
+			private bool reload;
+			private PixbufCache cache;
+
+			public CacheEntry (PixbufCache cache, SafeUri uri, object closure, int width, int height)
+			{
+				this.uri = uri;
+				this.width = width;
+				this.height = height;
+				this.data = closure;
+				this.Reload = true;
+				this.cache = cache;
+				cache.total_size += this.Size;
+			}
+
+			public bool Reload {
+				get { return reload; }
+				set { reload = value; }
+			}
+
+			public SafeUri Uri {
+				get { return uri; }
+			}
+
+			public int Width {
+				get { return width; }
+				set { width = value; }
+			}
+
+			public int Height {
+				get { return height; }
+				set { height = value; }
+			}
+
+			public object Data {
+				get {
+					lock (this) {
+						return data;
+					}
+				}
+				set {
+					lock (this) {
+						data = value;
+					}
+				}
+			}
+
+			public bool IsDisposed {
+				get { return uri == null; }
+			}
+
+			public void SetPixbufExtended (Gdk.Pixbuf value, bool ignore_undead)
+			{
+				lock (this) {
+					if (IsDisposed) {
+						if (ignore_undead) {
+							return;
+						} else {
+							throw new System.Exception ("I don't want to be undead");
+						}
+					}
+
+					Gdk.Pixbuf old = this.Pixbuf;
+					cache.total_size -= this.Size;
+					this.pixbuf = value;
+					if (pixbuf != null) {
+						this.width = pixbuf.Width;
+						this.height = pixbuf.Height;
+					}
+					cache.total_size += this.Size;
+					this.Reload = false;
+
+					if (old != null)
+						old.Dispose ();
+				}
+			}
+
+			public Gdk.Pixbuf Pixbuf {
+				get {
+					lock (this) {
+						return pixbuf;
+					}
+				}
+			}
+
+			public Gdk.Pixbuf ShallowCopyPixbuf ()
+			{
+				lock (this) {
+					if (IsDisposed)
+						return null;
+
+					if (pixbuf == null)
+						return null;
+
+					return pixbuf.ShallowCopy ();
+				}
+			}
+
+			~CacheEntry ()
+			{
+				if (!IsDisposed)
+					this.Dispose ();
+			}
+
+			public void Dispose ()
+			{
+				lock (this) {
+					if (! IsDisposed)
+						cache.total_size -= this.Size;
+
+					if (this.pixbuf != null) {
+						this.pixbuf.Dispose ();
+
+					}
+					this.pixbuf = null;
+					this.cache = null;
+					this.uri = null;
+				}
+				System.GC.SuppressFinalize (this);
+			}
+
+			public int Size {
+				get {
+					return width * height * 3;
+				}
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/Preferences.cs b/src/Clients/MainApp/FSpot/Preferences.cs
new file mode 100644
index 0000000..5996b5f
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/Preferences.cs
@@ -0,0 +1,245 @@
+using System.Net;
+using System;
+using System.Collections.Generic;
+using Mono.Unix;
+using FSpot.Core;
+using FSpot.Platform;
+using Hyena;
+
+namespace FSpot
+{
+	public class Preferences
+	{
+		public const string APP_FSPOT = "/apps/f-spot/";
+		public const string APP_FSPOT_EXPORT = APP_FSPOT + "export/";
+		public const string APP_FSPOT_EXPORT_TOKENS = APP_FSPOT_EXPORT + "tokens/";
+
+		public const string GTK_RC = APP_FSPOT + "ui/gtkrc";
+
+		public const string MAIN_WINDOW_MAXIMIZED = APP_FSPOT + "ui/maximized";
+		public const string MAIN_WINDOW_X = APP_FSPOT + "ui/main_window_x";
+		public const string MAIN_WINDOW_Y = APP_FSPOT + "ui/main_window_y";
+		public const string MAIN_WINDOW_WIDTH = APP_FSPOT + "ui/main_window_width";
+		public const string MAIN_WINDOW_HEIGHT = APP_FSPOT + "ui/main_window_height";
+
+		public const string IMPORT_WINDOW_WIDTH = APP_FSPOT + "ui/import_window_width";
+		public const string IMPORT_WINDOW_HEIGHT = APP_FSPOT + "ui/import_window_height";
+		public const string IMPORT_WINDOW_PANE_POSITION = APP_FSPOT + "ui/import_window_pane_position";
+
+		public const string IMPORT_COPY_FILES = "/apps/f-spot/import/copy_files";
+		public const string IMPORT_INCLUDE_SUBFOLDERS = "/apps/f-spot/import/include_subfolders";
+		public const string IMPORT_CHECK_DUPLICATES = "/apps/f-spot/import/check_duplicates";
+		public const string IMPORT_REMOVE_ORIGINALS = "/apps/f-spot/import/remove_originals";
+
+		public const string VIEWER_WIDTH = APP_FSPOT + "ui/viewer_width";
+		public const string VIEWER_HEIGHT = APP_FSPOT + "ui/viewer_height";
+		public const string VIEWER_MAXIMIZED = APP_FSPOT + "ui/viewer_maximized";
+		public const string VIEWER_SHOW_TOOLBAR = APP_FSPOT + "ui/viewer_show_toolbar";
+		public const string VIEWER_SHOW_FILENAMES = APP_FSPOT + "ui/viewer_show_filenames";
+		public const string VIEWER_INTERPOLATION = APP_FSPOT + "viewer/interpolation";
+		public const string VIEWER_TRANS_COLOR = APP_FSPOT + "viewer/trans_color";
+		public const string VIEWER_TRANSPARENCY = APP_FSPOT + "viewer/transparency";
+		public const string CUSTOM_CROP_RATIOS = APP_FSPOT + "viewer/custom_crop_ratios";
+
+		public const string COLOR_MANAGEMENT_DISPLAY_PROFILE = APP_FSPOT + "ui/color_management_display_profile";
+		public const string COLOR_MANAGEMENT_OUTPUT_PROFILE = APP_FSPOT + "ui/color_management_output_profile";
+
+		public const string SHOW_TOOLBAR = APP_FSPOT + "ui/show_toolbar";
+		public const string SHOW_SIDEBAR = APP_FSPOT + "ui/show_sidebar";
+		public const string SHOW_TIMELINE = APP_FSPOT + "ui/show_timeline";
+		public const string SHOW_FILMSTRIP = APP_FSPOT + "ui/show_filmstrip";
+		public const string FILMSTRIP_ORIENTATION = APP_FSPOT + "ui/filmstrip_orientation";
+		public const string SHOW_TAGS = APP_FSPOT + "ui/show_tags";
+		public const string SHOW_DATES = APP_FSPOT + "ui/show_dates";
+		public const string EXPANDED_TAGS = APP_FSPOT + "ui/expanded_tags";
+		public const string SHOW_RATINGS = APP_FSPOT + "ui/show_ratings";
+		public const string TAG_ICON_SIZE = APP_FSPOT + "ui/tag_icon_size";
+		public const string TAG_ICON_AUTOMATIC = APP_FSPOT + "ui/tag_icon_automatic";
+
+		public const string GLASS_POSITION = APP_FSPOT + "ui/glass_position";
+		public const string GROUP_ADAPTOR_ORDER_ASC = APP_FSPOT + "ui/group_adaptor_sort_asc";
+
+		public const string SIDEBAR_POSITION = APP_FSPOT + "ui/sidebar_size";
+		public const string ZOOM = APP_FSPOT + "ui/zoom";
+
+		public const string EXPORT_EMAIL_SIZE = APP_FSPOT + "export/email/size";
+		public const string EXPORT_EMAIL_ROTATE = APP_FSPOT + "export/email/auto_rotate";
+
+		public const string IMPORT_GUI_ROLL_HISTORY = APP_FSPOT + "import/gui_roll_history";
+
+		public const string SCREENSAVER_TAG = APP_FSPOT + "screensaver/tag_id";
+		public const string SCREENSAVER_DELAY = APP_FSPOT + "screensaver/delay";
+
+		public const string STORAGE_PATH = APP_FSPOT + "import/storage_path";
+
+		public const string METADATA_EMBED_IN_IMAGE = APP_FSPOT + "metadata/embed_in_image";
+
+		public const string METADATA_ALWAYS_USE_SIDECAR = APP_FSPOT + "metadata/always_use_sidecar";
+
+		public const string EDIT_REDEYE_THRESHOLD = APP_FSPOT + "edit/redeye_threshold";
+		public const string EDIT_CREATE_XCF_VERSION = APP_FSPOT + "edit/create_xcf";
+
+		public const string GNOME_MAILTO = "/desktop/gnome/url-handlers/mailto/";
+		public const string GNOME_MAILTO_COMMAND = GNOME_MAILTO + "command";
+		public const string GNOME_MAILTO_ENABLED = GNOME_MAILTO + "enabled";
+
+		public const string GSD_THUMBS_MAX_AGE = "/desktop/gnome/thumbnail_cache/maximum_age";
+		public const string GSD_THUMBS_MAX_SIZE = "/desktop/gnome/thumbnail_cache/maximum_size";
+
+
+		private static PreferenceBackend backend;
+		private static EventHandler<NotifyEventArgs> changed_handler;
+		private static PreferenceBackend Backend {
+			get {
+				if (backend == null) {
+					backend = new PreferenceBackend ();
+					changed_handler = new EventHandler<NotifyEventArgs> (OnSettingChanged);
+					backend.AddNotify (APP_FSPOT, changed_handler);
+					backend.AddNotify (GNOME_MAILTO, changed_handler);
+				}
+				return backend;
+			}
+		}
+
+		private static Dictionary<string, object> cache = new Dictionary<string, object>();
+
+		static object GetDefault (string key)
+		{
+			switch (key) {
+			case MAIN_WINDOW_X:
+			case MAIN_WINDOW_Y:
+			case MAIN_WINDOW_HEIGHT:
+			case MAIN_WINDOW_WIDTH:
+			case IMPORT_WINDOW_HEIGHT:
+			case IMPORT_WINDOW_WIDTH:
+			case IMPORT_WINDOW_PANE_POSITION:
+			case FILMSTRIP_ORIENTATION:
+				return 0;
+
+			case METADATA_EMBED_IN_IMAGE:
+			case METADATA_ALWAYS_USE_SIDECAR:
+			case MAIN_WINDOW_MAXIMIZED:
+			case GROUP_ADAPTOR_ORDER_ASC:
+			case IMPORT_REMOVE_ORIGINALS:
+				return false;
+
+			case GLASS_POSITION:
+				return null;
+
+			case SHOW_TOOLBAR:
+			case SHOW_SIDEBAR:
+			case SHOW_TIMELINE:
+			case SHOW_FILMSTRIP:
+			case SHOW_TAGS:
+			case SHOW_DATES:
+			case SHOW_RATINGS:
+			case VIEWER_SHOW_FILENAMES:
+				return true;
+
+			case TAG_ICON_SIZE:
+				return (int) Tag.IconSize.Medium;
+
+			case TAG_ICON_AUTOMATIC:
+				return true;
+
+			case SIDEBAR_POSITION:
+				return 130;
+			case ZOOM:
+				return null;
+
+			case IMPORT_GUI_ROLL_HISTORY:
+				return 10;
+
+			case SCREENSAVER_TAG:
+				return 1;
+			case SCREENSAVER_DELAY:
+				return 4.0;
+			case STORAGE_PATH:
+				return System.IO.Path.Combine (Global.HomeDirectory, Catalog.GetString("Photos"));
+			case EXPORT_EMAIL_SIZE:
+				return 3;	// medium size 640px
+			case EXPORT_EMAIL_ROTATE:
+			case VIEWER_INTERPOLATION:
+				return true;
+			case VIEWER_TRANSPARENCY:
+				return "NONE";
+			case VIEWER_TRANS_COLOR:
+				return "#000000";
+			case EDIT_REDEYE_THRESHOLD:
+				return -15;
+
+			case GTK_RC:
+			case COLOR_MANAGEMENT_DISPLAY_PROFILE:
+			case COLOR_MANAGEMENT_OUTPUT_PROFILE:
+				return String.Empty;
+			case IMPORT_CHECK_DUPLICATES:
+			case IMPORT_COPY_FILES:
+			case IMPORT_INCLUDE_SUBFOLDERS:
+				return true;
+			default:
+				return null;
+			}
+		}
+
+		//return true if the key exists in the backend
+		public static bool TryGet<T> (string key, out T value)
+		{
+			lock (cache) {
+				value = default (T);
+				object o;
+				if (cache.TryGetValue (key, out o)) {
+					value = (T)o;
+					return true;
+				}
+
+				try {
+					value = (T) Backend.Get (key);
+				} catch { //catching NoSuchKeyException
+					return false;
+				}
+
+				cache.Add (key, value);
+				return true;
+			}
+		}
+
+		public static T Get<T> (string key)
+		{
+			T val;
+			if (TryGet<T> (key, out val))
+				return val;
+			try {
+				return (T) GetDefault (key);
+			} catch { //catching InvalidCastException
+				return default (T);
+			}
+		}
+
+		public static void Set (string key, object value)
+		{
+			lock (cache) {
+				try {
+					cache [key] = value;
+					Backend.Set (key, value);
+				} catch (Exception e){
+					Log.Exception ("Unable to set this :"+key, e);
+				}
+			}
+		}
+
+		public static event EventHandler<NotifyEventArgs> SettingChanged;
+
+		static void OnSettingChanged (object sender, NotifyEventArgs args)
+		{
+			lock (cache) {
+				if (cache.ContainsKey (args.Key)) {
+					cache [args.Key] = args.Value;
+				}
+			}
+
+			if (SettingChanged != null)
+				SettingChanged (sender, args);
+		}
+
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/PrintOperation.cs b/src/Clients/MainApp/FSpot/PrintOperation.cs
new file mode 100644
index 0000000..16bf54f
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/PrintOperation.cs
@@ -0,0 +1,263 @@
+/*
+ * FSpot.PrintOperation.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using Cairo;
+using System;
+using System.Runtime.InteropServices;
+using Mono.Unix;
+
+using FSpot.Core;
+using FSpot.Widgets;
+using FSpot.Imaging;
+using Hyena;
+
+namespace FSpot
+{
+	public class PrintOperation : Gtk.PrintOperation
+	{
+		IBrowsableItem [] selected_photos;
+		int photos_per_page = 1;
+		CustomPrintWidget.FitMode fit = CustomPrintWidget.FitMode.Scaled;
+		bool repeat, white_borders, crop_marks;
+		string print_label_format;
+		string comment;
+
+		public PrintOperation (IBrowsableItem [] selected_photos) : base ()
+		{
+			this.selected_photos = selected_photos;
+			CustomTabLabel = Catalog.GetString ("Image Settings");
+			NPages = selected_photos.Length;
+			DefaultPageSetup = Global.PageSetup;
+		}
+
+		protected override void OnBeginPrint (Gtk.PrintContext context)
+		{
+			base.OnBeginPrint (context);
+		}
+
+		protected override Gtk.Widget OnCreateCustomWidget ()
+		{
+			Gtk.Widget widget = new CustomPrintWidget (this);
+			widget.ShowAll ();
+			(widget as CustomPrintWidget).Changed += OnCustomWidgetChanged;
+			OnCustomWidgetChanged (widget);
+			return widget;
+		}
+
+		protected override void OnCustomWidgetApply (Gtk.Widget widget)
+		{
+			CustomPrintWidget cpw = widget as CustomPrintWidget;
+			UseFullPage = cpw.UseFullPage;
+			photos_per_page = cpw.PhotosPerPage;
+			repeat = cpw.Repeat;
+			NPages = repeat ? selected_photos.Length :(int) Math.Ceiling (1.0 * selected_photos.Length / photos_per_page);
+			fit = cpw.Fitmode;
+			white_borders = cpw.WhiteBorders;
+			crop_marks = cpw.CropMarks;
+			print_label_format = cpw.PrintLabelFormat;
+			comment = cpw.CustomText;
+		}
+
+		protected void OnCustomWidgetChanged (Gtk.Widget widget)
+		{
+			OnCustomWidgetApply (widget);
+			using (ImageSurface surface = new ImageSurface (Format.ARGB32, 360, 254)) {
+				using (Context gr = new Context (surface)) {
+					gr.Color = new Color (1, 1, 1);
+					gr.Rectangle (0, 0, 360, 254);
+					gr.Fill ();
+					using (Gdk.Pixbuf pixbuf = Gdk.Pixbuf.LoadFromResource ("flower.png")) {
+						DrawImage (gr, pixbuf,0, 0, 360, 254);
+					}
+				}
+				(widget as CustomPrintWidget).PreviewImage.Pixbuf = CreatePixbuf (surface);
+			}
+		}
+
+		protected override void OnDrawPage (Gtk.PrintContext context, int page_nr)
+		{
+			base.OnDrawPage (context, page_nr);
+			Context cr = context.CairoContext;
+
+			int ppx, ppy;
+			switch (photos_per_page) {
+			default:
+			case 1: ppx = ppy =1; break;
+			case 2: ppx = 1; ppy = 2; break;
+			case 4: ppx = ppy = 2; break;
+			case 9: ppx = ppy = 3; break;
+			case 12: ppx = 3; ppy = 4; break;
+			case 20: ppx = 4; ppy = 5; break;
+			case 30: ppx = 5; ppy = 6; break;
+			}
+
+			//FIXME: if paper is landscape, swap ppx with ppy
+
+			double w = context.Width / ppx;
+			double h = context.Height / ppy;
+
+			// compute picture size using 4800DPI
+			double mx=(w / 25.4) * 4800, my=(h / 25.4) * 4800;
+
+			for (int x = 0; x <= ppx; x++) {
+				for (int y = 0; y <= ppy; y++) {
+					int p_index = repeat ? page_nr : page_nr * photos_per_page + y * ppx + x;
+					if (crop_marks)
+						DrawCropMarks (cr, x*w, y*h, w*.1);
+					if (x == ppx || y == ppy || p_index >= selected_photos.Length)
+						continue;
+					using (var img = ImageFile.Create (selected_photos[p_index].DefaultVersion.Uri))
+					{
+						Gdk.Pixbuf pixbuf;
+						try {
+							pixbuf = img.Load ((int) mx, (int) my);
+							Cms.Profile printer_profile;
+							if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE), out printer_profile))
+								FSpot.ColorManagement.ApplyProfile (pixbuf, img.GetProfile (), printer_profile);
+						} catch (Exception e) {
+							Log.Exception ("Unable to load image " + selected_photos[p_index].DefaultVersion.Uri + "\n", e);
+							// If the image is not found load error pixbuf
+							pixbuf = new Gdk.Pixbuf (PixbufUtils.ErrorPixbuf, 0, 0,
+										      PixbufUtils.ErrorPixbuf.Width,
+										      PixbufUtils.ErrorPixbuf.Height);
+						}
+						//Gdk.Pixbuf pixbuf = img.Load (100, 100);
+						bool rotated = false;
+						if (Math.Sign ((double)pixbuf.Width/pixbuf.Height - 1.0) != Math.Sign (w/h - 1.0)) {
+							Gdk.Pixbuf d_pixbuf = pixbuf.RotateSimple (Gdk.PixbufRotation.Counterclockwise);
+							pixbuf.Dispose ();
+							pixbuf = d_pixbuf;
+							rotated = true;
+						}
+
+						DrawImage (cr, pixbuf, x * w, y * h, w, h);
+
+						string tag_string = "";
+						foreach (Tag t in selected_photos[p_index].Tags)
+							tag_string = String.Concat (tag_string, t.Name);
+
+						string label = String.Format (print_label_format,
+									      comment,
+									      selected_photos[p_index].Name,
+									      selected_photos[p_index].Time.ToLocalTime ().ToShortDateString (),
+									      selected_photos[p_index].Time.ToLocalTime ().ToShortTimeString (),
+									      tag_string,
+									      selected_photos[p_index].Description);
+
+						DrawComment (context, (x + 1) * w, (rotated ? y : y + 1) * h, (rotated ? w : h) * .025, label, rotated);
+
+						pixbuf.Dispose ();
+					}
+				}
+			}
+
+		}
+
+		protected override void OnEndPrint (Gtk.PrintContext context)
+		{
+			base.OnEndPrint (context);
+			context.Dispose ();
+		}
+
+		protected override void OnRequestPageSetup (Gtk.PrintContext context, int page_nr, Gtk.PageSetup setup)
+		{
+			base.OnRequestPageSetup (context, page_nr, setup);
+		}
+
+		private void DrawCropMarks (Context cr, double x, double y, double length)
+		{
+			cr.Save ();
+			cr.Color = new Color (0, 0, 0);
+			cr.MoveTo (x - length/2, y);
+			cr.LineTo (x + length/2, y);
+			cr.MoveTo (x, y - length/2);
+			cr.LineTo (x, y + length/2);
+			cr.LineWidth = .2;
+			cr.SetDash (new double[] {length*.4, length*.2}, 0);
+			cr.Stroke ();
+			cr.Restore ();
+		}
+
+		private static void DrawComment (Gtk.PrintContext context, double x, double y, double h, string comment, bool rotated)
+		{
+			if (comment == null || comment == String.Empty)
+				return;
+
+			Context cr = context.CairoContext;
+			cr.Save ();
+			Pango.Layout layout = context.CreatePangoLayout ();
+			Pango.FontDescription desc = Pango.FontDescription.FromString ("sans 14");
+			layout.FontDescription = desc;
+			layout.SetText (comment);
+			int lay_w, lay_h;
+			layout.GetPixelSize (out lay_w, out lay_h);
+			double scale = h/lay_h;
+			if (rotated) {
+				cr.Translate (x - h, y + lay_w * scale);
+				cr.Rotate (- Math.PI / 2);
+			}
+			else
+				cr.Translate (x - lay_w * scale, y - h);
+			cr.Scale (scale, scale);
+			Pango.CairoHelper.ShowLayout (context.CairoContext, layout);
+			cr.Restore ();
+		}
+
+
+		private void DrawImage (Context cr, Gdk.Pixbuf pixbuf, double x, double y, double w, double h)
+		{
+			double scalex, scaley;
+			switch (fit) {
+			case CustomPrintWidget.FitMode.Zoom:
+				scalex = scaley = Math.Max (w/pixbuf.Width, h/pixbuf.Height);
+				break;
+			case CustomPrintWidget.FitMode.Fill:
+				scalex = w/pixbuf.Width;
+				scaley = h/pixbuf.Height;
+				break;
+			default:
+			case CustomPrintWidget.FitMode.Scaled:
+				scalex = scaley = Math.Min (w/pixbuf.Width, h/pixbuf.Height);
+				break;
+			}
+
+			double rectw = w / scalex;
+			double recth = h / scaley;
+
+			cr.Save ();
+			if (white_borders)
+				cr.Translate (w * .025, h * .025);
+
+			cr.Translate (x, y);
+			if (white_borders)
+				cr.Scale (.95, .95);
+			cr.Scale (scalex, scaley);
+			cr.Rectangle (0, 0, rectw, recth);
+			Gdk.CairoHelper.SetSourcePixbuf (cr, pixbuf, (rectw - pixbuf.Width) / 2.0, (recth - pixbuf.Height) / 2.0);
+			cr.Fill ();
+
+			if (white_borders) {
+				cr.Rectangle (0, 0 ,rectw, recth);
+				cr.Color = new Color (0, 0, 0);
+				cr.LineWidth = 1 / scalex;
+				cr.Stroke ();
+			}
+			cr.Restore ();
+		}
+
+		[DllImport("libfspot")]
+		static extern IntPtr f_pixbuf_from_cairo_surface (IntPtr handle);
+
+		private static Gdk.Pixbuf CreatePixbuf (Surface s)
+		{
+			IntPtr result = f_pixbuf_from_cairo_surface (s.Handle);
+			return (Gdk.Pixbuf) GLib.Object.GetObject (result, true);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/ProgressItem.cs b/src/Clients/MainApp/FSpot/ProgressItem.cs
new file mode 100644
index 0000000..12206ba
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/ProgressItem.cs
@@ -0,0 +1,36 @@
+/*
+ * FSpot.ProgressItem.cs
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+
+namespace FSpot {
+	public class ProgressItem {
+		public ProgressItem () {
+		}
+
+		public delegate void ChangedHandler (ProgressItem item);
+		public event ChangedHandler Changed;
+
+		double value;
+		public double Value {
+			get {
+				lock (this) {
+					return value;
+				}
+			}
+			set {
+				lock (this) {
+					this.value = value;
+					if (Changed != null)
+						Changed (this);
+				}
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/QueryWidget.cs b/src/Clients/MainApp/FSpot/QueryWidget.cs
new file mode 100644
index 0000000..71fb1f0
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/QueryWidget.cs
@@ -0,0 +1,228 @@
+/*
+ * FSpot.QueryWidget.cs
+ *
+ * Author(s):
+ *	Gabriel Burt
+ *
+ * This is free software. See COPYING for details.
+ */
+
+
+using System;
+using System.Collections.Generic;
+
+using Mono.Unix;
+
+using Gtk;
+
+using FSpot.Core;
+using FSpot.Database;
+using FSpot.Utils;
+using FSpot.Query;
+using FSpot.Widgets;
+using Hyena;
+
+
+namespace FSpot {
+
+	public class QueryWidget : HighlightedBox {
+		PhotoQuery query;
+		LogicWidget logic_widget;
+		FolderQueryWidget folder_query_widget;
+
+		Gtk.HBox box;
+		Gtk.Label label;
+		Gtk.Label untagged;
+		Gtk.Label rated;
+		Gtk.Label comma1_label;
+		Gtk.Label comma2_label;
+		Gtk.Label rollfilter;
+		Gtk.HBox warning_box;
+		Gtk.Button clear_button;
+		Gtk.Button refresh_button;
+
+		public LogicWidget Logic {
+			get { return logic_widget; }
+		}
+
+		protected QueryWidget (IntPtr raw) : base (raw) {}
+
+		public QueryWidget (PhotoQuery query, Db db) : base(new HBox())
+		{
+			box = Child as HBox;
+			box.Spacing = 6;
+			box.BorderWidth = 2;
+
+			this.query = query;
+			query.Changed += HandleChanged;
+
+			label = new Gtk.Label (Catalog.GetString ("Find: "));
+			label.Show ();
+			label.Ypad = 9;
+			box.PackStart (label, false, false, 0);
+
+			untagged = new Gtk.Label (Catalog.GetString ("Untagged photos"));
+			untagged.Visible = false;
+			box.PackStart (untagged, false, false, 0);
+
+			comma1_label = new Gtk.Label (", ");
+			comma1_label.Visible = false;
+			box.PackStart (comma1_label, false, false, 0);
+
+			rated = new Gtk.Label (Catalog.GetString ("Rated photos"));
+			rated.Visible = false;
+			box.PackStart (rated, false, false, 0);
+
+			comma2_label = new Gtk.Label (", ");
+			comma2_label.Visible = false;
+			box.PackStart (comma2_label, false, false, 0);
+
+			// Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
+			rollfilter = new Gtk.Label (Catalog.GetString ("Import roll"));
+			rollfilter.Visible = false;
+			box.PackStart (rollfilter, false, false, 0);
+
+			folder_query_widget = new FolderQueryWidget (query);
+			folder_query_widget.Visible = false;
+			box.PackStart (folder_query_widget, false, false, 0);
+
+			logic_widget = new LogicWidget (query, db.Tags);
+			logic_widget.Show ();
+			box.PackStart (logic_widget, true, true, 0);
+
+			warning_box = new Gtk.HBox ();
+			warning_box.PackStart (new Gtk.Label (System.String.Empty));
+
+			Gtk.Image warning_image = new Gtk.Image ("gtk-info", Gtk.IconSize.Button);
+			warning_image.Show ();
+			warning_box.PackStart (warning_image, false, false, 0);
+
+			clear_button = new Gtk.Button ();
+			clear_button.Add (new Gtk.Image ("gtk-close", Gtk.IconSize.Button));
+			clear_button.Clicked += HandleClearButtonClicked;
+			clear_button.Relief = Gtk.ReliefStyle.None;
+			clear_button.TooltipText = Catalog.GetString("Clear search");
+			box.PackEnd (clear_button, false, false, 0);
+
+			refresh_button = new Gtk.Button ();
+			refresh_button.Add (new Gtk.Image ("gtk-refresh", Gtk.IconSize.Button));
+			refresh_button.Clicked += HandleRefreshButtonClicked;
+			refresh_button.Relief = Gtk.ReliefStyle.None;
+			refresh_button.TooltipText = Catalog.GetString("Refresh search");
+			box.PackEnd (refresh_button, false, false, 0);
+
+			Gtk.Label warning = new Gtk.Label (Catalog.GetString ("No matching photos found"));
+			warning_box.PackStart (warning, false, false, 0);
+			warning_box.ShowAll ();
+			warning_box.Spacing = 6;
+			warning_box.Visible = false;
+
+			box.PackEnd (warning_box, false, false, 0);
+
+			warning_box.Visible = false;
+		}
+
+		public void HandleClearButtonClicked (object sender, System.EventArgs args)
+		{
+			Close ();
+		}
+
+		public void HandleRefreshButtonClicked (object sender, System.EventArgs args)
+		{
+			query.RequestReload ();
+		}
+
+		public void Close ()
+		{
+			query.Untagged = false;
+			query.RollSet = null;
+
+			if (query.Untagged)
+				return;
+
+			query.RatingRange = null;
+			logic_widget.Clear = true;
+			logic_widget.UpdateQuery ();
+
+			folder_query_widget.Clear ();
+			query.RequestReload ();
+
+			HideBar ();
+		}
+
+		public void ShowBar ()
+		{
+			Show ();
+		}
+
+		public void HideBar ()
+		{
+			Hide ();
+		}
+
+		public void HandleChanged (IBrowsableCollection collection)
+		{
+			if (query.TagTerm == null)
+				logic_widget.Clear = true;
+
+			if ( ! logic_widget.Clear
+			    || query.Untagged
+			    || (query.RollSet != null)
+			    || (query.RatingRange != null)
+			    || ! folder_query_widget.Empty)
+				ShowBar ();
+			else
+				HideBar ();
+
+			untagged.Visible = query.Untagged;
+			rated.Visible = (query.RatingRange != null);
+			warning_box.Visible = (query.Count < 1);
+			rollfilter.Visible = (query.RollSet != null);
+			comma1_label.Visible = (untagged.Visible && rated.Visible);
+			comma2_label.Visible = (!untagged.Visible && rated.Visible && rollfilter.Visible) ||
+					       (untagged.Visible && rollfilter.Visible);
+
+		}
+
+		public void PhotoTagsChanged (Tag[] tags)
+		{
+			logic_widget.PhotoTagsChanged (tags);
+		}
+
+		public void Include (Tag [] tags)
+		{
+			logic_widget.Include (tags);
+		}
+
+		public void UnInclude (Tag [] tags)
+		{
+			logic_widget.UnInclude (tags);
+		}
+
+		public void Require (Tag [] tags)
+		{
+			logic_widget.Require (tags);
+		}
+
+		public void UnRequire (Tag [] tags)
+		{
+			logic_widget.UnRequire (tags);
+		}
+
+		public bool TagIncluded (Tag tag)
+		{
+			return logic_widget.TagIncluded (tag);
+		}
+
+		public bool TagRequired (Tag tag)
+		{
+			return logic_widget.TagRequired (tag);
+		}
+
+		public void SetFolders (IEnumerable<SafeUri> uri_list)
+		{
+			folder_query_widget.SetFolders (uri_list);
+			query.RequestReload ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/RollStore.cs b/src/Clients/MainApp/FSpot/RollStore.cs
new file mode 100644
index 0000000..b4dd0d1
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/RollStore.cs
@@ -0,0 +1,125 @@
+/*
+ * RollStore.cs
+ *
+ * Author(s)
+ *	Ettore Perazzoli <ettore at perazzoli.org>
+ *	Bengt Thuree
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System.Collections;
+using System.IO;
+using System.Data;
+using System;
+
+using FSpot.Core;
+using FSpot.Database;
+using FSpot.Utils;
+using FSpot;
+
+using Hyena;
+
+using Hyena.Data.Sqlite;
+
+namespace FSpot {
+public class RollStore : DbStore<Roll>
+{
+	public RollStore (FSpotDatabaseConnection database, bool is_new) : base (database, false)
+	{
+		if (!is_new && Database.TableExists("rolls"))
+			return;
+
+		Database.Execute (
+			"CREATE TABLE rolls (\n" +
+			"	id	INTEGER PRIMARY KEY NOT NULL, \n" +
+			"       time	INTEGER NOT NULL\n" +
+			")");
+	}
+
+	public Roll Create (DateTime time_in_utc)
+	{
+		long unix_time = DateTimeUtil.FromDateTime (time_in_utc);
+		uint id = (uint) Database.Execute (new HyenaSqliteCommand ("INSERT INTO rolls (time) VALUES (?)", unix_time));
+
+		Roll roll = new Roll (id, unix_time);
+		AddToCache (roll);
+
+		return roll;
+	}
+
+	public Roll Create ()
+	{
+		return Create (System.DateTime.UtcNow);
+	}
+
+	public override Roll Get (uint id)
+	{
+		Roll roll = LookupInCache (id) as Roll;
+		if (roll != null)
+			return roll;
+
+		IDataReader reader = Database.Query(new HyenaSqliteCommand ("SELECT time FROM rolls WHERE id = ?", id));
+
+		if (reader.Read ()) {
+			roll = new Roll (id, Convert.ToUInt32 (reader ["time"]));
+			AddToCache (roll);
+		}
+
+		return roll;
+	}
+
+	public override void Remove (Roll item)
+	{
+		RemoveFromCache (item);
+		Database.Execute (new HyenaSqliteCommand ("DELETE FROM rolls WHERE id = ?", item.Id));
+	}
+
+	public override void Commit (Roll item)
+	{
+		// Nothing to do here, since all the properties of a roll are immutable.
+	}
+
+	public uint PhotosInRoll (Roll roll)
+	{
+		uint number_of_photos = 0;
+		using (IDataReader reader = Database.Query (new HyenaSqliteCommand ("SELECT count(*) AS count FROM photos WHERE roll_id = ?", roll.Id))) {
+			if (reader.Read ())
+				number_of_photos = Convert.ToUInt32 (reader ["count"]);
+
+			reader.Close ();
+		}
+                return number_of_photos;
+	}
+
+	public Roll [] GetRolls ()
+	{
+		return GetRolls (-1);
+	}
+
+	public Roll [] GetRolls (int limit)
+	{
+		ArrayList list = new ArrayList ();
+
+		string query = "SELECT DISTINCT rolls.id AS roll_id, rolls.time AS roll_time FROM rolls, photos WHERE photos.roll_id = rolls.id ORDER BY rolls.time DESC";
+		if (limit >= 0)
+			query += " LIMIT " + limit;
+
+		using (IDataReader reader = Database.Query(query)) {
+			while (reader.Read ()) {
+				uint id = Convert.ToUInt32 (reader["roll_id"]);
+
+				Roll roll = LookupInCache (id) as Roll;
+				if (roll == null) {
+					roll = new Roll (id, Convert.ToUInt32 (reader["roll_time"]));
+					AddToCache (roll);
+				}
+				list.Add (roll);
+			}
+			reader.Close ();
+		}
+		return (Roll []) list.ToArray (typeof (Roll));
+	}
+}
+}
\ No newline at end of file
diff --git a/src/Clients/MainApp/FSpot/RotateCommand.cs b/src/Clients/MainApp/FSpot/RotateCommand.cs
new file mode 100644
index 0000000..a6e5830
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/RotateCommand.cs
@@ -0,0 +1,240 @@
+/*
+ * Filters/IFilter.cs
+ *
+ * Author(s)
+ *   Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details
+ *
+ */
+
+using System;
+using System.IO;
+
+using Gtk;
+using Gdk;
+
+using FSpot;
+using FSpot.UI.Dialog;
+
+using Hyena;
+using Hyena.Widgets;
+using FSpot.Utils;
+using FSpot.Core;
+
+using Mono.Unix;
+
+namespace FSpot {
+	public class RotateException : ApplicationException {
+		public string path;
+		public bool ReadOnly = false;
+
+		public string Path {
+			get { return path; }
+		}
+
+		public RotateException (string msg, string path) : this (msg, path, false) {}
+
+		public RotateException (string msg, string path, bool ro) : base (msg) {
+			this.path = path;
+			this.ReadOnly = ro;
+		}
+	}
+
+	public enum RotateDirection {
+		Clockwise,
+		Counterclockwise,
+	}
+
+	public class RotateOperation {
+		IBrowsableItem item;
+		RotateDirection direction;
+		bool done;
+
+		public RotateOperation (IBrowsableItem item, RotateDirection direction)
+		{
+			this.item = item;
+			this.direction = direction;
+			done = false;
+		}
+
+		private static void RotateOrientation (string original_path, RotateDirection direction)
+		{
+            try {
+                using (var metadata = Metadata.Parse (new SafeUri (original_path))) {
+                    var tag = metadata.ImageTag;
+                    var orientation = direction == RotateDirection.Clockwise
+                        ? FSpot.Utils.PixbufUtils.Rotate90 (tag.Orientation)
+                        : FSpot.Utils.PixbufUtils.Rotate270 (tag.Orientation);
+
+                    tag.Orientation = orientation;
+                    metadata.Save ();
+                }
+            } 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 () {
+			string original_path;
+
+			if (done)
+				return false;
+
+			original_path = item.DefaultVersion.Uri.LocalPath;
+			done = true;
+
+			if ((File.GetAttributes(original_path) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) {
+				throw new RotateException (Catalog.GetString ("Unable to rotate readonly file"), original_path, true);
+			}
+
+			Rotate (original_path, direction);
+
+			return !done;
+		}
+	}
+
+	public class RotateMultiple {
+		RotateDirection direction;
+		IBrowsableItem [] items;
+		int index;
+		RotateOperation op;
+
+		public int Index {
+			get { return index; }
+		}
+
+		public IBrowsableItem [] Items {
+			get { return items; }
+		}
+
+		public RotateMultiple (IBrowsableItem [] items, RotateDirection direction)
+		{
+			this.direction = direction;
+			this.items = items;
+			index = 0;
+		}
+
+		public bool Step ()
+		{
+			if (index >= items.Length)
+				return false;
+
+			if (op == null)
+				op = new RotateOperation (items [index], direction);
+
+			if (op.Step ())
+				return true;
+			else {
+				index++;
+				op = null;
+			}
+
+			return (index < items.Length);
+		}
+	}
+}
+
+public class RotateCommand {
+	private Gtk.Window parent_window;
+
+	public RotateCommand (Gtk.Window parent_window)
+	{
+		this.parent_window = parent_window;
+	}
+
+	public bool Execute (RotateDirection direction, IBrowsableItem [] items)
+	{
+		ProgressDialog progress_dialog = null;
+
+		if (items.Length > 1)
+			progress_dialog = new ProgressDialog (Catalog.GetString ("Rotating photos"),
+							      ProgressDialog.CancelButtonType.Stop,
+							      items.Length, parent_window);
+
+	        RotateMultiple op = new RotateMultiple (items, direction);
+		int readonly_count = 0;
+		bool done = false;
+		int index = 0;
+
+		while (!done) {
+			if (progress_dialog != null && op.Index != -1 && index < items.Length)
+				if (progress_dialog.Update (String.Format (Catalog.GetString ("Rotating photo \"{0}\""), op.Items [op.Index].Name)))
+					break;
+
+			try {
+				done = !op.Step ();
+			} catch (RotateException re) {
+				if (!re.ReadOnly)
+					RunGenericError (re, re.Path, re.Message);
+				else
+					readonly_count++;
+			} catch (GLib.GException) {
+				readonly_count++;
+			} catch (DirectoryNotFoundException e) {
+				RunGenericError (e, op.Items [op.Index].DefaultVersion.Uri.LocalPath, Catalog.GetString ("Directory not found"));
+			} catch (FileNotFoundException e) {
+				RunGenericError (e, op.Items [op.Index].DefaultVersion.Uri.LocalPath, Catalog.GetString ("File not found"));
+			} catch (Exception e) {
+				RunGenericError (e, op.Items [op.Index].DefaultVersion.Uri.LocalPath);
+			}
+			index ++;
+		}
+
+		if (progress_dialog != null)
+			progress_dialog.Destroy ();
+
+		if (readonly_count > 0)
+			RunReadonlyError (readonly_count);
+
+		return true;
+	}
+
+	private void RunReadonlyError (int readonly_count)
+	{
+		string notice = Catalog.GetPluralString ("Unable to rotate photo", "Unable to rotate {0} photos", readonly_count);
+		string desc = Catalog.GetPluralString (
+			"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.",
+			"{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.",
+			readonly_count
+		);
+
+		notice = String.Format (notice, readonly_count);
+		desc = String.Format (desc, readonly_count);
+
+		HigMessageDialog md = new HigMessageDialog (parent_window,
+							    DialogFlags.DestroyWithParent,
+							    MessageType.Error,
+							    ButtonsType.Close,
+							    notice,
+							    desc);
+		md.Run();
+		md.Destroy();
+	}
+
+	// FIXME shouldn't need this method, should catch all exceptions explicitly
+	// so can present translated error messages.
+	private void RunGenericError (System.Exception e, string path)
+	{
+		RunGenericError (e, path, e.Message);
+	}
+
+	private void RunGenericError (System.Exception e, string path, string msg)
+	{
+		string longmsg = String.Format (Catalog.GetString ("Received error \"{0}\" while attempting to rotate {1}"),
+						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);
+		md.Run ();
+		md.Destroy ();
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/SelectionDataExtensions.cs b/src/Clients/MainApp/FSpot/SelectionDataExtensions.cs
new file mode 100644
index 0000000..718e62b
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/SelectionDataExtensions.cs
@@ -0,0 +1,117 @@
+/*
+ * FSpot.SelectionDataExtensions.cs
+ *
+ * Author(s)
+ * 	Mike Gemuende <mike at gemuende.de>
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Text;
+
+using Gtk;
+using Gdk;
+
+using FSpot;
+using FSpot.Core;
+using FSpot.Utils;
+
+namespace FSpot
+{
+	public static class SelectionDataExtensions
+	{
+		public static void SetPhotosData (this SelectionData selection_data, Photo [] photos, Atom target)
+		{
+			byte [] data = new byte [photos.Length * sizeof (uint)];
+
+			int i = 0;
+			foreach (Photo photo in photos) {
+				byte [] bytes = System.BitConverter.GetBytes (photo.Id);
+
+				foreach (byte b in bytes) {
+					data[i] = b;
+					i++;
+				}
+			}
+
+			selection_data.Set (target, 8, data, data.Length);
+		}
+
+		public static Photo [] GetPhotosData (this SelectionData selection_data)
+		{
+			int size = sizeof (uint);
+			int length = selection_data.Length / size;
+
+			PhotoStore photo_store = App.Instance.Database.Photos;
+
+			Photo [] photos = new Photo [length];
+
+			for (int i = 0; i < length; i ++) {
+				uint id = System.BitConverter.ToUInt32 (selection_data.Data, i * size);
+				photos[i] = photo_store.Get (id);
+			}
+
+			return photos;
+		}
+
+		public static void SetTagsData (this SelectionData selection_data, Tag [] tags, Atom target)
+		{
+			byte [] data = new byte [tags.Length * sizeof (uint)];
+
+			int i = 0;
+			foreach (Tag tag in tags) {
+				byte [] bytes = System.BitConverter.GetBytes (tag.Id);
+
+				foreach (byte b in bytes) {
+					data[i] = b;
+					i++;
+				}
+			}
+
+			selection_data.Set (target, 8, data, data.Length);
+		}
+
+		public static Tag [] GetTagsData (this SelectionData selection_data)
+		{
+			int size = sizeof (uint);
+			int length = selection_data.Length / size;
+
+			TagStore tag_store = App.Instance.Database.Tags;
+
+			Tag [] tags = new Tag [length];
+
+			for (int i = 0; i < length; i ++) {
+				uint id = System.BitConverter.ToUInt32 (selection_data.Data, i * size);
+				tags[i] = tag_store.Get (id);
+			}
+
+			return tags;
+		}
+
+		public static string GetStringData (this SelectionData selection_data)
+		{
+			if (selection_data.Length <= 0)
+				return String.Empty;
+
+			try {
+				return Encoding.UTF8.GetString (selection_data.Data);
+			} catch (Exception) {
+				return String.Empty;
+			}
+		}
+
+		public static void SetUriListData (this SelectionData selection_data, UriList uri_list, Atom target)
+		{
+			Byte [] data = Encoding.UTF8.GetBytes (uri_list.ToString ());
+
+			selection_data.Set (target, 8, data, data.Length);
+		}
+
+		public static UriList GetUriListData (this SelectionData selection_data)
+		{
+			return new UriList (GetStringData (selection_data));
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/SendEmail.cs b/src/Clients/MainApp/FSpot/SendEmail.cs
new file mode 100644
index 0000000..1f67217
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/SendEmail.cs
@@ -0,0 +1,317 @@
+/*
+ * FSpot.SendEmail
+ *
+ * Author(s)
+ * 	Bengt Thuree  <bengt at thuree.com>
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ * 	Paul Lange <palango at gmx.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using Gtk;
+using GLib;
+using System;
+
+using FSpot.Core;
+using FSpot.Widgets;
+using FSpot.Filters;
+using FSpot.UI.Dialog;
+
+using Hyena;
+using Hyena.Widgets;
+using Mono.Unix;
+
+namespace FSpot
+{
+	public class SendEmail : BuilderDialog
+	{
+		Window parent_window;
+
+#pragma warning disable 0649
+		[GtkBeans.Builder.Object] private Gtk.ScrolledWindow   tray_scrolled;
+		[GtkBeans.Builder.Object] private Label 		NumberOfPictures, TotalOriginalSize, ApproxNewSize;
+		[GtkBeans.Builder.Object] private RadioButton 	tiny_size, small_size, medium_size,
+														large_size, x_large_size, original_size;
+#pragma warning restore 0649
+
+		long Orig_Photo_Size 	= 0;
+		double scale_percentage = 0.3;
+
+		// The different sizes we can shrink to foto to. See RadioButton above for labels.
+		static int[] sizes 		= { 0, 320, 	480, 	640, 	800, 	1024 };
+
+		// Estimated size relative to original after shrinking down the photo.
+		double[] avg_scale_ref 	= { 0, 0.0186,	0.0348,	0.0532,	0.0826,	0.1234 };
+
+		static int NoOfSizes	= sizes.Length;
+		double[] avg_scale	= new double [NoOfSizes];
+		string tmp_mail_dir;	// To temporary keep the resized images
+		bool force_original = false;
+
+		IBrowsableCollection selection;
+
+		public SendEmail (IBrowsableCollection selection, Window parent_window) : base ("mail_dialog.ui", "mail_dialog")
+		{
+			this.selection = selection;
+			this.parent_window = parent_window;
+
+			foreach (var p in selection.Items) {
+				if (FileFactory.NewForUri (p.DefaultVersion.Uri).QueryInfo ("standard::content-type", FileQueryInfoFlags.None, null).ContentType != "image/jpeg")
+					force_original = true;
+			}
+
+			if (force_original) {
+				original_size.Active = true;
+				tiny_size.Sensitive = false;
+				small_size.Sensitive = false;
+				medium_size.Sensitive = false;
+				large_size.Sensitive = false;
+				x_large_size.Sensitive = false;
+			} else
+				switch (Preferences.Get<int> (Preferences.EXPORT_EMAIL_SIZE)) {
+					case 0 :  original_size.Active = true; break;
+					case 1 :  tiny_size.Active = true; break;
+					case 2 :  small_size.Active = true; break;
+					case 3 :  medium_size.Active = true; break;
+					case 4 :  large_size.Active = true; break;
+					case 5 :  x_large_size.Active = true; break;
+					default: break;
+				}
+
+
+			tray_scrolled.Add (new TrayView (selection));
+
+			Modal = false;
+
+			// Calculate total original filesize
+			foreach (var photo in selection.Items) {
+				try {
+					Orig_Photo_Size += FileFactory.NewForUri (photo.DefaultVersion.Uri).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
+				} catch {
+				}
+			}
+
+			for (int k = 0; k < avg_scale_ref.Length; k++)
+				avg_scale[k] = avg_scale_ref[k];
+
+
+			// Calculate approximate size shrinking, use first photo, and shrink to medium size as base.
+			var scalephoto = selection [0];
+			if (scalephoto != null && !force_original) {
+
+				// Get first photos file size
+				long orig_size = FileFactory.NewForUri (scalephoto.DefaultVersion.Uri).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
+
+				FilterSet filters = new FilterSet ();
+				filters.Add (new ResizeFilter ((uint)(sizes [3])));
+				long new_size;
+				using (FilterRequest request = new FilterRequest (scalephoto.DefaultVersion.Uri)) {
+					filters.Convert (request);
+					new_size = FileFactory.NewForUri (request.Current).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
+				}
+
+				if (orig_size > 0) {
+
+					// Get the factor (scale) between original and resized medium size.
+					scale_percentage = 1 - ( (float) (orig_size - new_size) / orig_size);
+
+					// What is the relation between the estimated medium scale factor, and reality?
+					double scale_scale = scale_percentage / avg_scale_ref[3];
+
+					//System.Console.WriteLine ("scale_percentage {0}, ref {1}, relative {2}",
+					//	scale_percentage, avg_scale_ref[3], scale_scale  );
+
+					// Re-Calculate the proper relation per size
+					for (int k = 0; k < avg_scale_ref.Length; k++) {
+						avg_scale[k] = avg_scale_ref[k] * scale_scale;
+					//	System.Console.WriteLine ("avg_scale[{0}]={1} (was {2})",
+					//		k, avg_scale[k], avg_scale_ref[k]  );
+					}
+				}
+
+			}
+
+			NumberOfPictures.Text 	= selection.Count.ToString();
+			TotalOriginalSize.Text 	= GLib.Format.SizeForDisplay (Orig_Photo_Size);
+
+			UpdateEstimatedSize();
+
+			ShowAll ();
+
+			//LoadHistory ();
+
+			Response += HandleResponse;
+		}
+
+		private int GetScaleSize()
+		{
+			// not only convert dialog size to pixel size, but also set preferences se we use same size next time
+			int size_number = 0; // default to original size
+			if (tiny_size.Active)
+				size_number = 1;
+			if (small_size.Active)
+				size_number = 2;
+			if (medium_size.Active)
+				size_number = 3;
+			if (large_size.Active)
+				size_number = 4;
+			if (x_large_size.Active)
+				size_number = 5;
+
+			if (!force_original)
+				Preferences.Set (Preferences.EXPORT_EMAIL_SIZE, size_number);
+			return sizes [ size_number ];
+		}
+
+		private int GetScaleIndex ()
+		{
+			int scale = GetScaleSize();
+			for (int k = 0; k < sizes.Length; k++)
+				if (sizes[k] == scale)
+					return k;
+			return 0;
+		}
+
+		private void UpdateEstimatedSize()
+		{
+				int new_size_index;
+				long new_approx_total_size;
+				string approxresult;
+
+				new_size_index = GetScaleIndex();
+				if (new_size_index == 0)
+					new_approx_total_size = Orig_Photo_Size;
+				else
+					new_approx_total_size = System.Convert.ToInt64(Orig_Photo_Size * avg_scale [new_size_index]);
+
+				approxresult = GLib.Format.SizeForDisplay (new_approx_total_size);
+				ApproxNewSize.Text 	= approxresult;
+
+		}
+
+		public void on_size_toggled (object o, EventArgs args)
+		{
+			UpdateEstimatedSize();
+		}
+
+
+		private void HandleResponse (object sender, Gtk.ResponseArgs args)
+		{
+			int size = 0;
+			bool UserCancelled = false;
+
+			// Lets remove the mail "create mail" dialog
+			Destroy();
+
+			if (args.ResponseId != Gtk.ResponseType.Ok) {
+				return;
+			}
+			ProgressDialog progress_dialog = null;
+
+			progress_dialog = new ProgressDialog (Catalog.GetString ("Preparing email"),
+												ProgressDialog.CancelButtonType.Stop,
+												selection.Count,
+												parent_window);
+
+			size = GetScaleSize(); // Which size should we scale to. 0 --> Original
+
+			// evaluate mailto command and define attachment args for cli
+			System.Text.StringBuilder attach_arg = new System.Text.StringBuilder ();
+			switch (Preferences.Get<string> (Preferences.GNOME_MAILTO_COMMAND)) {
+			case "thunderbird %s":
+			case "mozilla-thunderbird %s":
+			case "seamonkey -mail -compose %s":
+			case "icedove %s":
+				attach_arg.Append(",");
+				break;
+			case "kmail %s":
+				attach_arg.Append(" --attach ");
+				break;
+			default://evolution falls into default, since it supports mailto uri correctly
+				attach_arg.Append("&attach=");
+				break;
+			}
+
+			// Create a tmp directory.
+			tmp_mail_dir = System.IO.Path.GetTempFileName ();	// Create a tmp file
+			System.IO.File.Delete (tmp_mail_dir);			// Delete above tmp file
+			System.IO.Directory.CreateDirectory (tmp_mail_dir);	// Create a directory with above tmp name
+
+			System.Text.StringBuilder mail_attach = new System.Text.StringBuilder ();
+
+			FilterSet filters = new FilterSet ();
+
+			if (size != 0)
+				filters.Add (new ResizeFilter ((uint) size));
+			filters.Add (new UniqueNameFilter (new SafeUri (tmp_mail_dir)));
+
+
+			for (int i = 0; i < selection.Count; i++) {
+				var photo = selection [i];
+				if ( (photo != null) && (!UserCancelled) ) {
+
+					if (progress_dialog != null)
+						UserCancelled = progress_dialog.Update (String.Format
+							(Catalog.GetString ("Exporting picture \"{0}\""), photo.Name));
+
+					if (UserCancelled)
+						break;
+
+					try {
+						// Prepare a tmp_mail file name
+						FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri);
+
+						filters.Convert (request);
+						request.Preserve(request.Current);
+
+						mail_attach.Append(((i == 0 && attach_arg.ToString () == ",") ? "" : attach_arg.ToString()) + request.Current.ToString ());
+					} catch (Exception e) {
+						Hyena.Log.ErrorFormat ("Error preparing {0}: {1}", selection[i].Name, e.Message);
+						HigMessageDialog md = new HigMessageDialog (parent_window,
+											    DialogFlags.DestroyWithParent,
+											    MessageType.Error,
+											    ButtonsType.Close,
+											    Catalog.GetString("Error processing image"),
+											    String.Format(Catalog.GetString("An error occured while processing \"{0}\": {1}"), selection[i].Name, e.Message));
+						md.Run();
+						md.Destroy();
+						UserCancelled = true;
+					}
+				}
+			} // foreach
+
+			if (progress_dialog != null)
+				progress_dialog.Destroy (); // No need to keep this window
+
+			if (!UserCancelled) {
+				// Send the mail :)
+				string mail_subject = Catalog.GetString("My Photos");
+				switch (Preferences.Get<string> (Preferences.GNOME_MAILTO_COMMAND)) {
+				// openSuSE
+				case "thunderbird %s":
+					System.Diagnostics.Process.Start("thunderbird", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\"");
+					break;
+				case "icedove %s":
+					System.Diagnostics.Process.Start("icedove", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\"");
+					break;
+				case "mozilla-thunderbird %s":
+					System.Diagnostics.Process.Start("mozilla-thunderbird", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\"");
+					break;
+				case "seamonkey -mail -compose %s":
+					System.Diagnostics.Process.Start("seamonkey", " -mail -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\"");
+					break;
+				case "kmail %s":
+					System.Diagnostics.Process.Start("kmail", "  --composer --subject \"" + mail_subject + "\"" + mail_attach);
+					break;
+				case "evolution %s": //evo doesn't urldecode the subject
+					GtkBeans.Global.ShowUri (Screen, "mailto:?subject=" + mail_subject + mail_attach);
+					break;
+				default:
+					GtkBeans.Global.ShowUri (Screen, "mailto:?subject=" + System.Web.HttpUtility.UrlEncode(mail_subject) + mail_attach);
+					break;
+				}
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/SingleView.cs b/src/Clients/MainApp/FSpot/SingleView.cs
new file mode 100644
index 0000000..7b65c25
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/SingleView.cs
@@ -0,0 +1,674 @@
+using Gtk;
+using Gdk;
+using System;
+using System.Collections.Generic;
+
+using Mono.Addins;
+using Mono.Unix;
+
+using Hyena;
+using FSpot.Extensions;
+using FSpot.Utils;
+using FSpot.UI.Dialog;
+using FSpot.Widgets;
+using FSpot.Platform;
+using FSpot.Core;
+
+namespace FSpot {
+	public class SingleView {
+		[GtkBeans.Builder.Object]  Gtk.HBox toolbar_hbox;
+		[GtkBeans.Builder.Object]  Gtk.VBox info_vbox;
+		[GtkBeans.Builder.Object]  Gtk.ScrolledWindow image_scrolled;
+
+		Gtk.ScrolledWindow directory_scrolled;
+
+		[GtkBeans.Builder.Object]  Gtk.CheckMenuItem side_pane_item;
+		[GtkBeans.Builder.Object]  Gtk.CheckMenuItem toolbar_item;
+		[GtkBeans.Builder.Object]  Gtk.CheckMenuItem filenames_item;
+
+		[GtkBeans.Builder.Object]  Gtk.MenuItem zoom_in;
+		[GtkBeans.Builder.Object]  Gtk.MenuItem zoom_out;
+
+		[GtkBeans.Builder.Object]  Gtk.MenuItem export;
+
+		[GtkBeans.Builder.Object]  Gtk.Scale zoom_scale;
+
+		[GtkBeans.Builder.Object]  Label status_label;
+
+		[GtkBeans.Builder.Object]  ImageMenuItem rotate_left;
+		[GtkBeans.Builder.Object]  ImageMenuItem rotate_right;
+
+		ToolButton rr_button, rl_button;
+
+		Sidebar sidebar;
+
+		[GtkBeans.Builder.Object] private Gtk.Window single_view;
+
+		public Gtk.Window Window {
+			get {
+				return single_view;
+			}
+		}
+
+		PhotoImageView image_view;
+		FSpot.Widgets.IconView directory_view;
+		private SafeUri uri;
+
+		UriCollection collection;
+
+		FullScreenView fsview;
+
+		public SingleView (SafeUri [] uris)
+		{
+			this.uri = uris [0];
+			Log.Debug ("uri: " + this.uri);
+
+			GtkBeans.Builder builder = new GtkBeans.Builder ("single_view.ui");
+			builder.Autoconnect (this);
+
+			LoadPreference (Preferences.VIEWER_WIDTH);
+			LoadPreference (Preferences.VIEWER_MAXIMIZED);
+
+			Gtk.Toolbar toolbar = new Gtk.Toolbar ();
+			toolbar_hbox.PackStart (toolbar);
+
+			rl_button = GtkUtil.ToolButtonFromTheme ("object-rotate-left", Catalog.GetString ("Rotate Left"), true);
+			rl_button.Clicked += HandleRotate270Command;
+			rl_button.TooltipText = Catalog.GetString ("Rotate photo left");
+			toolbar.Insert (rl_button, -1);
+
+			rr_button = GtkUtil.ToolButtonFromTheme ("object-rotate-right", Catalog.GetString ("Rotate Right"), true);
+			rr_button.Clicked += HandleRotate90Command;
+			rr_button.TooltipText = Catalog.GetString ("Rotate photo right");
+			toolbar.Insert (rr_button, -1);
+
+			toolbar.Insert (new SeparatorToolItem (), -1);
+
+			ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), true);
+			fs_button.Clicked += HandleViewFullscreen;
+			fs_button.TooltipText = Catalog.GetString ("View photos fullscreen");
+			toolbar.Insert (fs_button, -1);
+
+			ToolButton ss_button = GtkUtil.ToolButtonFromTheme ("media-playback-start", Catalog.GetString ("Slideshow"), true);
+			ss_button.Clicked += HandleViewSlideshow;
+			ss_button.TooltipText = Catalog.GetString ("View photos in a slideshow");
+			toolbar.Insert (ss_button, -1);
+
+			collection = new UriCollection (uris);
+
+			TargetEntry [] dest_table = {
+				FSpot.DragDropTargets.UriListEntry,
+				FSpot.DragDropTargets.PlainTextEntry
+			};
+
+			directory_view = new FSpot.Widgets.IconView (collection);
+			directory_view.Selection.Changed += HandleSelectionChanged;
+			directory_view.DragDataReceived += HandleDragDataReceived;
+			Gtk.Drag.DestSet (directory_view, DestDefaults.All, dest_table,
+					DragAction.Copy | DragAction.Move);
+			directory_view.DisplayTags = false;
+			directory_view.DisplayDates = false;
+			directory_view.DisplayRatings = false;
+
+			directory_scrolled = new ScrolledWindow();
+			directory_scrolled.Add (directory_view);
+
+			sidebar = new Sidebar ();
+
+			info_vbox.Add (sidebar);
+			sidebar.AppendPage (directory_scrolled, Catalog.GetString ("Folder"), "gtk-directory");
+
+			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);
+
+			sidebar.Context = ViewContext.Single;
+
+			sidebar.CloseRequested += HandleHideSidePane;
+			sidebar.Show ();
+
+			ThumbnailLoader.Default.OnPixbufLoaded += delegate { directory_view.QueueDraw (); };
+
+			image_view = new PhotoImageView (collection);
+			GtkUtil.ModifyColors (image_view);
+			GtkUtil.ModifyColors (image_scrolled);
+			image_view.ZoomChanged += HandleZoomChanged;
+			image_view.Item.Changed += HandleItemChanged;
+			image_view.ButtonPressEvent += HandleImageViewButtonPressEvent;
+			image_view.DragDataReceived += HandleDragDataReceived;
+			Gtk.Drag.DestSet (image_view, DestDefaults.All, dest_table,
+					DragAction.Copy | DragAction.Move);
+			image_scrolled.Add (image_view);
+
+			Window.ShowAll ();
+
+			zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
+
+			LoadPreference (Preferences.VIEWER_SHOW_TOOLBAR);
+			LoadPreference (Preferences.VIEWER_INTERPOLATION);
+			LoadPreference (Preferences.VIEWER_TRANSPARENCY);
+			LoadPreference (Preferences.VIEWER_TRANS_COLOR);
+
+			ShowSidebar = collection.Count > 1;
+
+			LoadPreference (Preferences.VIEWER_SHOW_FILENAMES);
+
+			Preferences.SettingChanged += OnPreferencesChanged;
+			Window.DeleteEvent += HandleDeleteEvent;
+
+			collection.Changed += HandleCollectionChanged;
+
+			// wrap the methods to fit to the delegate
+			image_view.Item.Changed += delegate (object sender, BrowsablePointerChangedEventArgs old) {
+					BrowsablePointer pointer = sender as BrowsablePointer;
+					if (pointer == null)
+						return;
+					IBrowsableItem [] item = {pointer.Current};
+					sidebar.HandleSelectionChanged (new PhotoList (item));
+			};
+
+			image_view.Item.Collection.ItemsChanged += sidebar.HandleSelectionItemsChanged;
+
+			UpdateStatusLabel ();
+
+			if (collection.Count > 0)
+				directory_view.Selection.Add (0);
+
+			export.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Exports") as FSpot.Extensions.SubmenuNode).GetMenuItem (this).Submenu;
+			export.Submenu.ShowAll ();
+			export.Activated += HandleExportActivated ;
+		}
+
+		private void OnSidebarExtensionChanged (object s, ExtensionNodeEventArgs args) {
+			// FIXME: No sidebar page removal yet!
+			if (args.Change == ExtensionChange.Add)
+				sidebar.AppendPage ((args.ExtensionNode as SidebarPageNode).GetPage ());
+		}
+
+		void HandleExportActivated (object o, EventArgs e)
+		{
+			FSpot.Extensions.ExportMenuItemNode.SelectedImages = delegate () {return new PhotoList (directory_view.Selection.Items); };
+		}
+
+		public void HandleCollectionChanged (IBrowsableCollection collection)
+		{
+			if (collection.Count > 0 && directory_view.Selection.Count == 0) {
+				Log.Debug ("Added selection");
+				directory_view.Selection.Add (0);
+			}
+
+			if (collection.Count > 1)
+				ShowSidebar = true;
+
+			rotate_left.Sensitive = rotate_right.Sensitive = rr_button.Sensitive = rl_button.Sensitive = collection.Count != 0;
+
+			UpdateStatusLabel ();
+		}
+
+		public bool ShowSidebar {
+			get {
+				return info_vbox.Visible;
+			}
+			set {
+				info_vbox.Visible = value;
+				if (side_pane_item.Active != value)
+					side_pane_item.Active = value;
+			}
+		}
+
+		public bool ShowToolbar {
+			get {
+				return toolbar_hbox.Visible;
+			}
+			set {
+				toolbar_hbox.Visible = value;
+				if (toolbar_item.Active != value)
+					toolbar_item.Active = value;
+			}
+		}
+
+		private SafeUri CurrentUri
+		{
+			get {
+				return this.uri;
+			}
+			set {
+				this.uri = value;
+				collection.Clear ();
+				collection.LoadItems (new SafeUri[] { this.uri });
+			}
+		}
+
+		void HandleRotate90Command (object sender, System.EventArgs args)
+		{
+			RotateCommand command = new RotateCommand (this.Window);
+			if (command.Execute (RotateDirection.Clockwise, new IBrowsableItem [] { image_view.Item.Current }))
+				collection.MarkChanged (image_view.Item.Index, FullInvalidate.Instance);
+		}
+
+		void HandleRotate270Command (object sender, System.EventArgs args)
+		{
+			RotateCommand command = new RotateCommand (this.Window);
+			if (command.Execute (RotateDirection.Counterclockwise, new IBrowsableItem [] { image_view.Item.Current }))
+				collection.MarkChanged (image_view.Item.Index, FullInvalidate.Instance);
+		}
+
+		private void HandleSelectionChanged (IBrowsableCollection selection)
+		{
+
+			if (selection.Count > 0) {
+				image_view.Item.Index = ((FSpot.Widgets.IconView.SelectionCollection)selection).Ids[0];
+
+				zoom_scale.Value = image_view.NormalizedZoom;
+			}
+			UpdateStatusLabel ();
+		}
+
+		private void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs old)
+		{
+			BrowsablePointer pointer = sender as BrowsablePointer;
+			if (pointer == null)
+				return;
+
+			directory_view.FocusCell = pointer.Index;
+			directory_view.Selection.Clear ();
+			if (collection.Count > 0) {
+				directory_view.Selection.Add (directory_view.FocusCell);
+				directory_view.ScrollTo (directory_view.FocusCell);
+			}
+		}
+
+		void HandleSetAsBackgroundCommand (object sender, EventArgs args)
+		{
+			IBrowsableItem current = image_view.Item.Current;
+
+			if (current == null)
+				return;
+
+			Desktop.SetBackgroundImage (current.DefaultVersion.Uri.LocalPath);
+		}
+
+		private void HandleViewToolbar (object sender, System.EventArgs args)
+		{
+			ShowToolbar = toolbar_item.Active;
+		}
+
+		private void HandleHideSidePane (object sender, System.EventArgs args)
+		{
+			ShowSidebar = false;
+		}
+
+		private void HandleViewSidePane (object sender, System.EventArgs args)
+		{
+			ShowSidebar = side_pane_item.Active;
+		}
+
+		private void HandleViewSlideshow (object sender, System.EventArgs args)
+		{
+			HandleViewFullscreen (sender, args);
+			fsview.PlayPause ();
+		}
+
+		private void HandleViewFilenames (object sender, System.EventArgs args)
+		{
+			directory_view.DisplayFilenames = filenames_item.Active;
+			UpdateStatusLabel ();
+		}
+
+		private void HandleAbout (object sender, System.EventArgs args)
+		{
+			FSpot.UI.Dialog.AboutDialog.ShowUp ();
+		}
+
+		private void HandleNewWindow (object sender, System.EventArgs args)
+		{
+			/* FIXME this needs to register witth the core */
+			new SingleView (new SafeUri[] {uri});
+		}
+
+		private void HandlePreferences (object sender, System.EventArgs args)
+		{
+			SingleView.PreferenceDialog.Show ();
+		}
+
+		private void HandleOpenFolder (object sender, System.EventArgs args)
+		{
+			Open (FileChooserAction.SelectFolder);
+		}
+
+		private void HandleOpen (object sender, System.EventArgs args)
+		{
+			Open (FileChooserAction.Open);
+		}
+
+		private void Open (FileChooserAction action)
+		{
+			string title = Catalog.GetString ("Open");
+
+			if (action == FileChooserAction.SelectFolder)
+				title = Catalog.GetString ("Select Folder");
+
+			FileChooserDialog chooser = new FileChooserDialog (title,
+									   Window,
+									   action);
+
+			chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
+			chooser.AddButton (Stock.Open, ResponseType.Ok);
+
+			chooser.SetUri (uri.ToString ());
+			int response = chooser.Run ();
+
+			if ((ResponseType) response == ResponseType.Ok)
+				CurrentUri = new SafeUri (chooser.Uri, true);
+
+
+			chooser.Destroy ();
+		}
+
+		private void HandleViewFullscreen (object sender, System.EventArgs args)
+		{
+			if (fsview != null)
+				fsview.Destroy ();
+
+			fsview = new FSpot.FullScreenView (collection, Window);
+			fsview.Destroyed += HandleFullScreenViewDestroy;
+
+			fsview.View.Item.Index = image_view.Item.Index;
+			fsview.Show ();
+		}
+
+		private void HandleFullScreenViewDestroy (object sender, System.EventArgs args)
+		{
+			directory_view.Selection.Clear ();
+			if (fsview.View.Item.IsValid)
+				directory_view.Selection.Add (fsview.View.Item.Index);
+			fsview = null;
+		}
+
+		public void HandleZoomOut (object sender, System.EventArgs args)
+		{
+			image_view.ZoomOut ();
+		}
+
+		public void HandleZoomOut (object sender, Gtk.ButtonPressEventArgs args)
+		{
+			image_view.ZoomOut ();
+		}
+
+		public void HandleZoomIn (object sender, Gtk.ButtonPressEventArgs args)
+		{
+			image_view.ZoomIn ();
+		}
+
+		public void HandleZoomIn (object sender, System.EventArgs args)
+		{
+			image_view.ZoomIn ();
+		}
+
+		private void HandleZoomScaleValueChanged (object sender, System.EventArgs args)
+		{
+			image_view.NormalizedZoom = zoom_scale.Value;
+		}
+
+		private void HandleZoomChanged (object sender, System.EventArgs args)
+		{
+			zoom_scale.Value = image_view.NormalizedZoom;
+
+			// FIXME something is broken here
+			//zoom_in.Sensitive = (zoom_scale.Value != 1.0);
+			//zoom_out.Sensitive = (zoom_scale.Value != 0.0);
+		}
+
+		private void HandleImageViewButtonPressEvent (object sender, ButtonPressEventArgs args)
+		{
+			if (args.Event.Type != EventType.ButtonPress || args.Event.Button != 3)
+				return;
+
+			Gtk.Menu popup_menu = new Gtk.Menu ();
+			bool has_item = image_view.Item.Current != null;
+
+			GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Rotate _Left"), "object-rotate-left", delegate { HandleRotate270Command(Window, null); }, has_item);
+			GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Rotate _Right"), "object-rotate-right", delegate { HandleRotate90Command (Window, null); }, has_item);
+			GtkUtil.MakeMenuSeparator (popup_menu);
+			GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Set as Background"), HandleSetAsBackgroundCommand, has_item);
+
+			popup_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
+		}
+
+		void HandleDeleteEvent (object sender, DeleteEventArgs args)
+		{
+			SavePreferences ();
+			this.Window.Destroy ();
+			args.RetVal = true;
+		}
+
+		void HandleDragDataReceived (object sender, DragDataReceivedArgs args)
+		{
+			if (args.Info == FSpot.DragDropTargets.UriListEntry.Info
+			    || args.Info == FSpot.DragDropTargets.PlainTextEntry.Info) {
+
+				/*
+				 * If the drop is coming from inside f-spot then we don't want to import
+				 */
+				if (Gtk.Drag.GetSourceWidget (args.Context) != null)
+					return;
+
+				UriList list = args.SelectionData.GetUriListData ();
+				collection.LoadItems (list.ToArray());
+
+				Gtk.Drag.Finish (args.Context, true, false, args.Time);
+
+				return;
+			}
+		}
+
+		private void UpdateStatusLabel ()
+		{
+			IBrowsableItem item = image_view.Item.Current;
+			System.Text.StringBuilder sb = new System.Text.StringBuilder();
+			if (filenames_item.Active && item != null)
+				sb.Append (System.IO.Path.GetFileName (item.DefaultVersion.Uri.LocalPath) + "  -  ");
+
+			sb.AppendFormat (Catalog.GetPluralString ("{0} Photo", "{0} Photos", collection.Count), collection.Count);
+			status_label.Text = sb.ToString ();
+		}
+
+		private void HandleFileClose (object sender, System.EventArgs args)
+		{
+			SavePreferences ();
+			this.Window.Destroy ();
+		}
+
+		private void SavePreferences  ()
+		{
+			int width, height;
+			Window.GetSize (out width, out height);
+
+			bool maximized = ((Window.GdkWindow.State & Gdk.WindowState.Maximized) > 0);
+			Preferences.Set (Preferences.VIEWER_MAXIMIZED, maximized);
+
+			if (!maximized) {
+				Preferences.Set (Preferences.VIEWER_WIDTH,	width);
+				Preferences.Set (Preferences.VIEWER_HEIGHT,	height);
+			}
+
+			Preferences.Set (Preferences.VIEWER_SHOW_TOOLBAR,	toolbar_hbox.Visible);
+			Preferences.Set (Preferences.VIEWER_SHOW_FILENAMES, filenames_item.Active);
+		}
+
+		private void HandleFileOpen (object sender, System.EventArgs args)
+		{
+			FileChooserDialog file_selector =
+				new FileChooserDialog ("Open", this.Window,
+						       FileChooserAction.Open);
+
+			file_selector.SetUri (uri.ToString ());
+			int response = file_selector.Run ();
+
+			if ((Gtk.ResponseType) response == Gtk.ResponseType.Ok) {
+				var l = new List<SafeUri> ();
+				foreach (var s in file_selector.Uris)
+					l.Add (new SafeUri (s));
+				new FSpot.SingleView (l.ToArray ());
+			}
+
+			file_selector.Destroy ();
+		}
+
+		void OnPreferencesChanged (object sender, NotifyEventArgs args)
+		{
+			LoadPreference (args.Key);
+		}
+
+		void LoadPreference (String key)
+		{
+			switch (key) {
+			case Preferences.VIEWER_MAXIMIZED:
+				if (Preferences.Get<bool> (key))
+					Window.Maximize ();
+				else
+					Window.Unmaximize ();
+				break;
+
+			case Preferences.VIEWER_WIDTH:
+			case Preferences.VIEWER_HEIGHT:
+				int width, height;
+				width = Preferences.Get<int> (Preferences.VIEWER_WIDTH);
+				height = Preferences.Get<int> (Preferences.VIEWER_HEIGHT);
+
+				if( width == 0 || height == 0 )
+					break;
+
+				Window.SetDefaultSize(width, height);
+
+				Window.ReshowWithInitialSize();
+				break;
+
+			case Preferences.VIEWER_SHOW_TOOLBAR:
+				if (toolbar_item.Active != Preferences.Get<bool> (key))
+					toolbar_item.Active = Preferences.Get<bool> (key);
+
+				toolbar_hbox.Visible = Preferences.Get<bool> (key);
+				break;
+
+			case Preferences.VIEWER_INTERPOLATION:
+				if (Preferences.Get<bool> (key))
+					image_view.Interpolation = Gdk.InterpType.Bilinear;
+				else
+					image_view.Interpolation = Gdk.InterpType.Nearest;
+				break;
+
+			case Preferences.VIEWER_SHOW_FILENAMES:
+				if (filenames_item.Active != Preferences.Get<bool> (key))
+					filenames_item.Active = Preferences.Get<bool> (key);
+				break;
+
+			case Preferences.VIEWER_TRANSPARENCY:
+				if (Preferences.Get<string> (key) == "CHECK_PATTERN")
+					image_view.CheckPattern = CheckPattern.Dark;
+				else if (Preferences.Get<string> (key) == "COLOR")
+					image_view.CheckPattern = new CheckPattern (Preferences.Get<string> (Preferences.VIEWER_TRANS_COLOR));
+				else // NONE
+					image_view.CheckPattern = new CheckPattern (image_view.Style.BaseColors [(int)Gtk.StateType.Normal]);
+				break;
+
+			case Preferences.VIEWER_TRANS_COLOR:
+				if (Preferences.Get<string> (Preferences.VIEWER_TRANSPARENCY) == "COLOR")
+					image_view.CheckPattern = new CheckPattern (Preferences.Get<string> (key));
+				break;
+			}
+		}
+
+		public class PreferenceDialog : BuilderDialog {
+			[GtkBeans.Builder.Object] private CheckButton interpolation_check;
+			[GtkBeans.Builder.Object] private ColorButton color_button;
+			[GtkBeans.Builder.Object] private RadioButton as_background_radio;
+			[GtkBeans.Builder.Object] private RadioButton as_check_radio;
+			[GtkBeans.Builder.Object] private RadioButton as_color_radio;
+
+			public PreferenceDialog () : base ("viewer_preferences.ui", "viewer_preferences")
+			{
+				this.LoadPreference (Preferences.VIEWER_INTERPOLATION);
+				this.LoadPreference (Preferences.VIEWER_TRANSPARENCY);
+				this.LoadPreference (Preferences.VIEWER_TRANS_COLOR);
+				Preferences.SettingChanged += OnPreferencesChanged;
+				this.Destroyed += HandleDestroyed;
+			}
+
+			void InterpolationToggled (object sender, System.EventArgs args)
+			{
+				Preferences.Set (Preferences.VIEWER_INTERPOLATION, interpolation_check.Active);
+			}
+
+			void HandleTransparentColorSet (object sender, System.EventArgs args)
+			{
+				Preferences.Set (Preferences.VIEWER_TRANS_COLOR,
+						"#" +
+						(color_button.Color.Red / 256 ).ToString("x").PadLeft (2, '0') +
+						(color_button.Color.Green / 256 ).ToString("x").PadLeft (2, '0') +
+						(color_button.Color.Blue / 256 ).ToString("x").PadLeft (2, '0'));
+			}
+
+			void HandleTransparencyToggled (object sender, System.EventArgs args)
+			{
+				if (as_background_radio.Active)
+					Preferences.Set (Preferences.VIEWER_TRANSPARENCY, "NONE");
+				else if (as_check_radio.Active)
+					Preferences.Set (Preferences.VIEWER_TRANSPARENCY, "CHECK_PATTERN");
+				else if (as_color_radio.Active)
+					Preferences.Set (Preferences.VIEWER_TRANSPARENCY, "COLOR");
+			}
+
+			static PreferenceDialog prefs;
+			public static void Show ()
+			{
+				if (prefs == null)
+					prefs = new PreferenceDialog ();
+
+				prefs.Present ();
+			}
+
+			void OnPreferencesChanged (object sender, NotifyEventArgs args)
+			{
+				LoadPreference (args.Key);
+			}
+
+			void HandleClose (object sender, EventArgs args)
+			{
+				this.Destroy ();
+			}
+
+			private void HandleDestroyed (object sender, EventArgs args)
+			{
+				prefs = null;
+			}
+
+			void LoadPreference (string key)
+			{
+
+				switch (key) {
+				case Preferences.VIEWER_INTERPOLATION:
+					interpolation_check.Active = Preferences.Get<bool> (key);
+					break;
+				case Preferences.VIEWER_TRANSPARENCY:
+					switch (Preferences.Get<string> (key)) {
+					case "COLOR":
+						as_color_radio.Active = true;
+						break;
+					case "CHECK_PATTERN":
+						as_check_radio.Active = true;
+						break;
+					default: //NONE
+						as_background_radio.Active = true;
+						break;
+					}
+					break;
+				case Preferences.VIEWER_TRANS_COLOR:
+					color_button.Color = new Gdk.Color (
+						Byte.Parse (Preferences.Get<string> (key).Substring (1,2), System.Globalization.NumberStyles.AllowHexSpecifier),
+						Byte.Parse (Preferences.Get<string> (key).Substring (3,2), System.Globalization.NumberStyles.AllowHexSpecifier),
+						Byte.Parse (Preferences.Get<string> (key).Substring (5,2), System.Globalization.NumberStyles.AllowHexSpecifier));
+					break;
+				}
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/TagQueryWidget.cs b/src/Clients/MainApp/FSpot/TagQueryWidget.cs
new file mode 100644
index 0000000..7261f96
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/TagQueryWidget.cs
@@ -0,0 +1,703 @@
+using System;
+using System.Collections;
+using System.Text;
+using Mono.Unix;
+using Gtk;
+using Gdk;
+
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Query;
+
+namespace FSpot
+{
+	public class LiteralPopup
+	{
+		//private Literal literal;
+
+		public void Activate (Gdk.EventButton eb, Literal literal)
+		{
+			Activate (eb, literal, new Gtk.Menu (), true);
+		}
+
+		public void Activate (Gdk.EventButton eb, Literal literal, Gtk.Menu popup_menu, bool is_popup)
+		{
+			//this.literal = literal;
+
+			/*MenuItem attach_item = new MenuItem (Catalog.GetString ("Find With"));
+			TagMenu attach_menu = new TagMenu (attach_item, App.Instance.Database.Tags);
+			attach_menu.TagSelected += literal.HandleAttachTagCommand;
+			attach_item.ShowAll ();
+			popup_menu.Append (attach_item);*/
+
+			if (literal.IsNegated) {
+				GtkUtil.MakeMenuItem (popup_menu,
+						      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);
+			}
+
+			GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Remove From Search"),
+					      "gtk-remove",
+					      new EventHandler (literal.HandleRemoveCommand),
+					      true);
+
+			if (is_popup) {
+				if (eb != null)
+					popup_menu.Popup (null, null, null, eb.Button, eb.Time);
+				else
+					popup_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
+			}
+		}
+	}
+
+	public class LiteralMenu : Menu
+	{
+		private LiteralPopup popup;
+		private Literal literal;
+
+		public LiteralMenu (MenuItem item, Literal literal)
+		{
+			popup = new LiteralPopup ();
+
+			this.literal = literal;
+
+			item.Submenu = this;
+			item.Activated += HandlePopulate;
+		}
+
+		private void HandlePopulate (object obj, EventArgs args)
+		{
+			foreach (Widget child in Children) {
+				Remove (child);
+				child.Destroy ();
+			}
+
+			popup.Activate (null, literal, this, false);
+		}
+	}
+
+	public static class TermMenuItem
+	{
+		public static void Create (Tag [] tags, Gtk.Menu menu)
+		{
+			Gtk.MenuItem item = new Gtk.MenuItem (String.Format (Catalog.GetPluralString ("Find _With", "Find _With", tags.Length), tags.Length));
+
+			Gtk.Menu submenu = GetSubmenu (tags);
+			if (submenu == null)
+				item.Sensitive = false;
+			else
+				item.Submenu = submenu;
+
+			menu.Append (item);
+			item.Show ();
+		}
+
+		public static Gtk.Menu GetSubmenu (Tag [] tags)
+		{
+			Tag single_tag = null;
+			if (tags != null && tags.Length == 1)
+				single_tag = tags[0];
+
+			//Console.WriteLine ("creating find with menu item");
+			if (LogicWidget.Root == null || LogicWidget.Root.SubTerms.Count == 0) {
+				//Console.WriteLine ("root is null or has no terms");
+				return null;
+			} 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);
+
+				int sensitive_items = 0;
+				foreach (Term term in LogicWidget.Root.SubTerms) {
+					ArrayList term_parts = new ArrayList ();
+
+					bool contains_tag = AppendTerm (term_parts, term, single_tag);
+
+					string name = "_" + String.Join (", ", (string []) term_parts.ToArray (typeof(string)));
+
+					Gtk.MenuItem item = GtkUtil.MakeMenuItem (m, name, new EventHandler (App.Instance.Organizer.HandleAddTagToTerm));
+					item.Sensitive = !contains_tag;
+
+					if (!contains_tag)
+						sensitive_items++;
+				}
+
+				if (sensitive_items == 0)
+					all_item.Sensitive = false;
+
+				return m;
+			}
+		}
+
+		private static bool AppendTerm (ArrayList parts, Term term, Tag single_tag)
+		{
+			bool tag_matches = false;
+			if (term != null) {
+				Literal literal = term as Literal;
+				if (literal != null) {
+					if (literal.Tag == single_tag)
+						tag_matches = true;
+
+					if (literal.IsNegated)
+						parts.Add (String.Format (Catalog.GetString ("Not {0}"), literal.Tag.Name));
+					else
+						parts.Add (literal.Tag.Name);
+				} else {
+					foreach (Term subterm in term.SubTerms) {
+						tag_matches |= AppendTerm (parts, subterm, single_tag);
+					}
+				}
+			}
+
+			return tag_matches;
+		}
+	}
+
+	public class LiteralBox : VBox {
+		private GrabHandle handle;
+
+		public LiteralBox () : base ()
+		{
+			handle = new GrabHandle (24, 8);
+
+			PackEnd (handle, false, false, 0);
+
+			Show ();
+		}
+	}
+
+	public class GrabHandle : DrawingArea {
+		public GrabHandle (int w, int h) : base ()
+		{
+			Size (w, h);
+			Orientation = Gtk.Orientation.Horizontal;
+			Show ();
+		}
+
+		private Gtk.Orientation orientation;
+		public Gtk.Orientation Orientation {
+			get { return orientation; }
+			set { orientation = value; }
+		}
+
+		protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+		{
+			bool ret = base.OnExposeEvent(evnt);
+
+			if (evnt.Window != GdkWindow) {
+				return ret;
+			}
+
+			Gtk.Style.PaintHandle(Style, GdkWindow, State, ShadowType.In,
+					      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,
+			//Height + (y_offset * 2));
+
+			return ret;
+		}
+	}
+
+	public class LogicWidget : HBox {
+		private PhotoQuery query;
+
+
+		private static Term rootTerm;
+		private EventBox rootAdd;
+		private HBox rootBox;
+		private Label help;
+		private HBox sepBox;
+
+		private bool preventUpdate = false;
+		private bool preview = false;
+
+		public event EventHandler Changed;
+
+		public static Term Root
+		{
+			get {
+				return rootTerm;
+			}
+		}
+
+		private static LogicWidget logic_widget = null;
+		public static LogicWidget Box {
+			get { return logic_widget; }
+		}
+
+		// Drag and Drop
+		private static TargetEntry [] tag_dest_target_table =
+			new TargetEntry [] {
+				DragDropTargets.TagListEntry,
+				DragDropTargets.TagQueryEntry
+			};
+
+		public LogicWidget (PhotoQuery query, TagStore tag_store) : base ()
+		{
+			//SetFlag (WidgetFlags.NoWindow);
+			this.query = query;
+
+			CanFocus = true;
+			Sensitive = true;
+
+			Init ();
+
+			tag_store.ItemsChanged += HandleTagChanged;
+			tag_store.ItemsRemoved += HandleTagDeleted;
+
+			Show ();
+
+			logic_widget = this;
+		}
+
+		private void Init ()
+		{
+			sepBox = null;
+			preview = false;
+
+			rootAdd = new Gtk.EventBox ();
+			rootAdd.VisibleWindow = false;
+			rootAdd.CanFocus = true;
+			rootAdd.DragMotion  += HandleDragMotion;
+			rootAdd.DragDataReceived += HandleDragDataReceived;
+			rootAdd.DragLeave  += HandleDragLeave;
+
+			help = new Gtk.Label ("<i>" + Catalog.GetString ("Drag tags here to search for them") + "</i>");
+			help.UseMarkup = true;
+			help.Visible = true;
+
+			rootBox = new HBox();
+			rootBox.Add (help);
+			rootBox.Show ();
+
+			rootAdd.Child = rootBox;
+			rootAdd.Show ();
+
+			Gtk.Drag.DestSet (rootAdd, DestDefaults.All, tag_dest_target_table,
+					  DragAction.Copy | DragAction.Move );
+
+			PackEnd (rootAdd, true, true, 0);
+
+			rootTerm = new OrTerm (null, null);
+		}
+
+		private void Preview ()
+		{
+			if (sepBox == null) {
+				sepBox = new HBox ();
+				Widget sep = rootTerm.SeparatorWidget ();
+				if (sep != null) {
+					sep.Show ();
+					sepBox.PackStart (sep, false, false, 0);
+				}
+				rootBox.Add (sepBox);
+			}
+
+			help.Hide ();
+			sepBox.Show ();
+		}
+
+		/** Handlers **/
+
+		// When the user edits a tag (it's icon, name, etc) we get called
+		// and update the images/text in the query as needed to reflect the changes.
+		private void HandleTagChanged (object sender, DbItemEventArgs<Tag> args)
+		{
+			foreach (Tag t in args.Items)
+                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 ();
+		}
+
+		private void HandleDragMotion (object o, DragMotionArgs args)
+		{
+			if (!preview && rootTerm.Count > 0 && (Literal.FocusedLiterals.Count == 0 || Children.Length > 2)) {
+				Preview ();
+				preview = true;
+			}
+		}
+
+		private void HandleDragLeave (object o, EventArgs args)
+		{
+			if (preview && Children.Length > 1) {
+				sepBox.Hide ();
+				preview = false;
+			} else if (preview && Children.Length == 1) {
+				help.Show ();
+			}
+		}
+
+		private void HandleLiteralsMoved (ArrayList literals, Term parent, Literal after)
+		{
+			preventUpdate = true;
+			foreach (Literal term in literals) {
+				Tag tag = term.Tag;
+
+				// Don't listen for it to be removed since we are
+				// moving it. We will update when we're done.
+				term.Removed -= HandleRemoved;
+				term.RemoveSelf ();
+
+				// Add it to where it was dropped
+				ArrayList groups = InsertTerm (new Tag[] {tag}, parent, after);
+
+				if (term.IsNegated)
+					foreach (Literal group in groups)
+					group.IsNegated = true;
+			}
+			preventUpdate = false;
+			UpdateQuery ();
+		}
+
+		private void HandleTagsAdded (Tag[] tags, Term parent, Literal after)
+		{
+			InsertTerm (tags, parent, after);
+		}
+
+		private void HandleAttachTag (Tag tag, Term parent, Literal after)
+		{
+			InsertTerm (new Tag [] {tag}, parent, after);
+		}
+
+		private void HandleNegated (Literal group)
+		{
+			UpdateQuery ();
+		}
+
+		private void HandleRemoving (Literal term)
+		{
+			foreach (Widget w in HangersOn (term))
+			Remove (w);
+
+			// Remove the term's widget
+			Remove (term.Widget);
+		}
+
+		public ArrayList HangersOn (Literal term)
+		{
+			ArrayList w = new ArrayList ();
+
+			// Find separators that only exist because of this term
+			if (term.Parent != null) {
+				if (term.Parent.Count > 1)
+				{
+					if (term == term.Parent.Last)
+						w.Add (Children[WidgetPosition (term.Widget) - 1]);
+					else
+						w.Add (Children[WidgetPosition (term.Widget) + 1]);
+				}
+				else if (term.Parent.Count == 1)
+				{
+					if (term.Parent.Parent != null) {
+						if (term.Parent.Parent.Count > 1) {
+							if (term.Parent == term.Parent.Parent.Last)
+								w.Add (Children[WidgetPosition (term.Widget) - 1]);
+							else
+								w.Add (Children[WidgetPosition (term.Widget) + 1]);
+						}
+					}
+				}
+			}
+			return w;
+		}
+
+		private void HandleRemoved (Literal group)
+		{
+			UpdateQuery ();
+		}
+
+		private void HandleDragDataReceived (object o, DragDataReceivedArgs args)
+		{
+			args.RetVal = true;
+
+			if (args.Info == DragDropTargets.TagListEntry.Info) {
+
+				InsertTerm (args.SelectionData.GetTagsData (), rootTerm, null);
+				return;
+			}
+
+			if (args.Info == DragDropTargets.TagQueryEntry.Info) {
+
+				// FIXME: use drag data
+				HandleLiteralsMoved (Literal.FocusedLiterals, rootTerm, null);
+
+				// Prevent them from being removed again
+				Literal.FocusedLiterals = null;
+
+				return;
+			}
+		}
+
+		/** Helper Functions **/
+
+		public void PhotoTagsChanged (Tag [] tags)
+		{
+			bool refresh_required = false;
+
+			foreach (Tag tag in tags) {
+				if ((rootTerm.FindByTag (tag)).Count > 0) {
+					refresh_required = true;
+					break;
+				}
+			}
+
+			if (refresh_required)
+				UpdateQuery ();
+		}
+
+		// Inserts a widget into a Box at a certain index
+		private void InsertWidget (int index, Gtk.Widget widget) {
+			widget.Visible = true;
+			PackStart (widget, false, false, 0);
+			ReorderChild (widget, index);
+		}
+
+		// Return the index position of a widget in this Box
+		private int WidgetPosition (Gtk.Widget widget)
+		{
+			for (int i = 0; i < Children.Length; i++)
+				if (Children[i] == widget)
+					return i;
+
+			return Children.Length - 1;
+		}
+
+		public bool TagIncluded (Tag tag)
+		{
+			return rootTerm.TagIncluded (tag);
+		}
+
+		public bool TagRequired (Tag tag)
+		{
+			return rootTerm.TagRequired (tag);
+		}
+
+		// Add a tag or group of tags to the rootTerm, at the end of the Box
+		public void Include (Tag [] tags)
+		{
+			// Filter out any tags that are already included
+			ArrayList new_tags = new ArrayList(tags.Length);
+			foreach (Tag tag in tags) {
+				if (! rootTerm.TagIncluded (tag))
+					new_tags.Add (tag);
+
+			}
+
+			if (new_tags.Count == 0)
+				return;
+
+			tags = (Tag []) new_tags.ToArray (typeof (Tag));
+
+			InsertTerm (tags, rootTerm, null);
+		}
+
+		public void UnInclude (Tag [] tags)
+		{
+			ArrayList new_tags = new ArrayList(tags.Length);
+			foreach (Tag tag in tags) {
+				if (rootTerm.TagIncluded (tag))
+					new_tags.Add (tag);
+			}
+
+			if (new_tags.Count == 0)
+				return;
+
+			tags = (Tag []) new_tags.ToArray (typeof (Tag));
+
+			bool needsUpdate = false;
+			preventUpdate = true;
+			foreach (Term parent in rootTerm.LiteralParents ()) {
+				if (parent.Count == 1) {
+					foreach (Tag tag in tags) {
+						if ((parent.Last as Literal).Tag == tag) {
+							(parent.Last as Literal).RemoveSelf ();
+							needsUpdate = true;
+							break;
+						}
+					}
+				}
+			}
+			preventUpdate = false;
+
+			if (needsUpdate)
+				UpdateQuery ();
+		}
+
+		// AND this tag with all terms
+		public void Require (Tag [] tags)
+		{
+			// TODO it would be awesome if this was done by putting parentheses around
+			// OR terms and ANDing the result with this term (eg factored out)
+
+			// Trim out tags that are already required
+			ArrayList new_tags = new ArrayList(tags.Length);
+			foreach (Tag tag in tags) {
+				if (! rootTerm.TagRequired (tag))
+					new_tags.Add (tag);
+			}
+
+			if (new_tags.Count == 0)
+				return;
+
+			tags = (Tag []) new_tags.ToArray (typeof (Tag));
+
+			bool added = false;
+			preventUpdate = true;
+			foreach (Term parent in rootTerm.LiteralParents ()) {
+				// TODO logic could be broken if a term's SubTerms are a mixture
+				// of Literals and non-Literals
+				InsertTerm (tags, parent, parent.Last as Literal);
+				added = true;
+			}
+
+			// If there were no LiteralParents to add this tag to, then add it to the rootTerm
+			// TODO should add the first tag in the array,
+			// then add the others to the first's parent (so they will be ANDed together)
+			if (!added)
+				InsertTerm (tags, rootTerm, null);
+
+			preventUpdate = false;
+
+			UpdateQuery ();
+		}
+
+		public void UnRequire (Tag [] tags)
+		{
+			// Trim out tags that are not required
+			ArrayList new_tags = new ArrayList(tags.Length);
+			foreach (Tag tag in tags) {
+				if (rootTerm.TagRequired (tag))
+					new_tags.Add (tag);
+			}
+
+			if (new_tags.Count == 0)
+				return;
+
+			tags = (Tag []) new_tags.ToArray (typeof (Tag));
+
+			preventUpdate = true;
+			foreach (Term parent in rootTerm.LiteralParents ()) {
+				// Don't remove if this tag is the only child of a term
+				if (parent.Count > 1) {
+					foreach (Tag tag in tags) {
+						((parent.FindByTag (tag))[0] as Literal).RemoveSelf ();
+					}
+				}
+			}
+
+			preventUpdate = false;
+
+			UpdateQuery ();
+		}
+
+		public ArrayList InsertTerm (Tag [] tags, Term parent, Literal after)
+		{
+			int position;
+			if (after != null)
+				position = WidgetPosition (after.Widget) + 1;
+			else
+				position = Children.Length - 1;
+
+			ArrayList added = new ArrayList ();
+
+			foreach (Tag tag in tags) {
+				//Console.WriteLine ("Adding tag {0}", tag.Name);
+
+				// Don't put a tag into a Term twice
+				if (parent != Root && (parent.FindByTag (tag, true)).Count > 0)
+					continue;
+
+				if (parent.Count > 0) {
+					Widget sep = parent.SeparatorWidget ();
+
+					InsertWidget (position, sep);
+					position++;
+				}
+
+				// Encapsulate new OR terms within a new AND term of which they are the
+				// only member, so later other terms can be AND'd with them
+				//
+				// TODO should really see what type of term the parent is, and
+				// encapsulate this term in a term of the opposite type. This will
+				// allow the query system to be expanded to work for multiple levels much easier.
+				if (parent == rootTerm) {
+					parent = new AndTerm (rootTerm, after);
+					after = null;
+				}
+
+				Literal term  = new Literal (parent, tag, after);
+				term.TagsAdded  += HandleTagsAdded;
+				term.LiteralsMoved += HandleLiteralsMoved;
+				term.AttachTag  += HandleAttachTag;
+				term.NegatedToggled += HandleNegated;
+				term.Removing  += HandleRemoving;
+				term.Removed  += HandleRemoved;
+				term.RequireTag  += Require;
+				term.UnRequireTag += UnRequire;
+
+				added.Add (term);
+
+				// Insert this widget into the appropriate place in the hbox
+				InsertWidget (position, term.Widget);
+			}
+
+			UpdateQuery ();
+
+			return added;
+		}
+
+		// Update the query, which updates the icon_view
+		public void UpdateQuery ()
+		{
+			if (preventUpdate)
+				return;
+
+			if (sepBox != null)
+				sepBox.Hide ();
+
+			if (rootTerm.Count == 0) {
+				help.Show ();
+				query.TagTerm = null;
+			} else {
+				help.Hide ();
+				query.TagTerm = new ConditionWrapper (rootTerm.SqlCondition ());
+			}
+
+			EventHandler handler = Changed;
+			if (handler != null)
+				handler (this, new EventArgs ());
+		}
+
+		public bool Clear
+		{
+			get {
+				return rootTerm.Count == 0;
+			}
+
+			set {
+				// Clear out the query, starting afresh
+				foreach (Widget widget in Children) {
+					Remove (widget);
+					widget.Destroy ();
+				}
+				Init ();
+			}
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/TagSelectionWidget.cs b/src/Clients/MainApp/FSpot/TagSelectionWidget.cs
new file mode 100644
index 0000000..7295a56
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/TagSelectionWidget.cs
@@ -0,0 +1,830 @@
+/*
+ * TagSelectionWidget.cs
+ *
+ * Author(s)
+ *
+ * This is free software. See COPYING for details.
+ */
+
+
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System;
+
+using GLib;
+
+using Gdk;
+
+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 {
+
+	public class TagSelectionWidget : SaneTreeView {
+
+		Db database;
+		TagStore tag_store;
+
+		// FIXME this is a hack.
+		private static Pixbuf empty_pixbuf = new Pixbuf (Colorspace.Rgb, true, 8, 1, 1);
+
+		// If these are changed, the base () call in the constructor must be updated.
+		private const int IdColumn = 0;
+		private const int NameColumn = 1;
+
+		// Selection management.
+
+		public Tag TagAtPosition (double x, double y)
+	    {
+	        return TagAtPosition((int) x, (int) y);
+	    }
+
+		public Tag TagAtPosition (int x, int y)
+		{
+			TreePath path;
+
+			// Work out which tag we're dropping onto
+			if (!this.GetPathAtPos (x, y, out path))
+				return null;
+
+			return TagByPath (path);
+		}
+
+		public Tag TagByPath (TreePath path)
+		{
+			TreeIter iter;
+
+			if (!Model.GetIter (out iter, path))
+				return null;
+
+			return TagByIter (iter);
+		}
+
+		public Tag TagByIter (TreeIter iter)
+		{
+			GLib.Value val = new GLib.Value ();
+
+			Model.GetValue (iter, IdColumn, ref val);
+			uint tag_id = (uint) val;
+
+			return tag_store.Get (tag_id) as Tag;
+		}
+
+		// Loading up the store.
+
+		private void LoadCategory (Category category, TreeIter parent_iter)
+		{
+			IList<Tag> tags = category.Children;
+
+			foreach (Tag t in tags) {
+				TreeIter iter = (Model as TreeStore).AppendValues (parent_iter, t.Id, t.Name);
+				if (t is Category)
+					LoadCategory (t as Category, iter);
+			}
+		}
+
+		public void ScrollTo (Tag tag)
+		{
+			TreeIter iter;
+			if (! TreeIterForTag (tag, out iter))
+				return;
+
+			TreePath path = Model.GetPath (iter);
+
+			ScrollToCell (path, null, false, 0, 0);
+		}
+
+		public Tag [] TagHighlight {
+			get {
+				TreeModel model;
+				TreeIter iter;
+
+				TreePath [] rows = Selection.GetSelectedRows(out model);
+
+				Tag [] tags = new Tag [rows.Length];
+				int i = 0;
+
+				foreach (TreePath path in rows) {
+					GLib.Value value = new GLib.Value ();
+					Model.GetIter (out iter, path);
+					Model.GetValue (iter, IdColumn, ref value);
+					uint tag_id = (uint) value;
+					tags[i] = tag_store.Get (tag_id) as Tag;
+					i++;
+				}
+				return tags;
+			}
+
+			set {
+				if (value == null)
+					return;
+
+				Selection.UnselectAll ();
+
+				TreeIter iter;
+				foreach (Tag tag in value)
+					if (TreeIterForTag (tag, out iter))
+						Selection.SelectIter (iter);
+			}
+		}
+
+		public void Update ()
+		{
+			(Model as TreeStore).Clear ();
+
+			// GRRR We have to special case the root because I can't pass null for a
+			// Gtk.TreeIter (since it's a struct, and not a class).
+			// FIXME: This should be fixed in GTK#...  It's gross.
+
+			foreach (Tag t in tag_store.RootCategory.Children) {
+				TreeIter iter = (Model as TreeStore).AppendValues (t.Id, t.Name);
+				if (t is Category)
+					LoadCategory (t as Category, iter);
+			}
+		}
+
+		// Data functions.
+
+		private void SetBackground (CellRenderer renderer, Tag tag)
+		{
+			// FIXME this should be themable but Gtk# doesn't give me access to the proper
+			// members in GtkStyle for that.
+			/*
+			if (tag is Category)
+				renderer.CellBackground = ToHashColor (this.Style.MidColors [(int) Gtk.StateType.Normal]);
+			else
+				renderer.CellBackground = ToHashColor (this.Style.LightColors [(int) Gtk.StateType.Normal]);
+			*/
+		}
+
+		private void IconDataFunc (TreeViewColumn column,
+					   CellRenderer renderer,
+					   TreeModel model,
+					   TreeIter iter)
+		{
+			GLib.Value value = new GLib.Value ();
+			Model.GetValue (iter, IdColumn, ref value);
+			uint tag_id = (uint) value;
+			Tag tag = tag_store.Get (tag_id) as Tag;
+
+			if (tag == null)
+				return;
+
+			SetBackground (renderer, tag);
+
+			if (tag.SizedIcon != null) {
+				Cms.Profile screen_profile;
+				if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
+					//FIXME, we're leaking a pixbuf here
+					Gdk.Pixbuf temp = tag.SizedIcon.Copy();
+					FSpot.ColorManagement.ApplyProfile (temp, screen_profile);
+					(renderer as CellRendererPixbuf).Pixbuf = temp;
+				} else
+					(renderer as CellRendererPixbuf).Pixbuf = tag.SizedIcon;
+			} else
+				(renderer as CellRendererPixbuf).Pixbuf = empty_pixbuf;
+		}
+
+		private void NameDataFunc (TreeViewColumn column,
+					   CellRenderer renderer,
+					   TreeModel model,
+					   TreeIter iter)
+		{
+			// FIXME not sure why it happens...
+			if (model == null)
+				return;
+
+			GLib.Value value = new GLib.Value ();
+			Model.GetValue (iter, IdColumn, ref value);
+			uint tag_id = (uint) value;
+
+			Tag tag = tag_store.Get (tag_id) as Tag;
+			if (tag == null)
+				return;
+
+			SetBackground (renderer, tag);
+
+			(renderer as CellRendererText).Text = tag.Name;
+		}
+
+		private bool TreeIterForTag(Tag tag, out TreeIter iter)
+		{
+			TreeIter root = TreeIter.Zero;
+			iter = TreeIter.Zero;
+
+			bool valid = Model.GetIterFirst (out root);
+
+			while (valid) {
+				if (TreeIterForTagRecurse (tag, root, out iter))
+					return true;
+
+				valid = Model.IterNext (ref root);
+			}
+			return false;
+		}
+
+		// Depth first traversal
+		private bool TreeIterForTagRecurse (Tag tag, TreeIter parent, out TreeIter iter)
+		{
+			bool valid = Model.IterChildren (out iter, parent);
+
+			while (valid) {
+				if (TreeIterForTagRecurse (tag, iter, out iter))
+					return true;
+				valid = Model.IterNext (ref iter);
+			}
+
+			GLib.Value value = new GLib.Value ();
+			Model.GetValue (parent, IdColumn, ref value);
+			iter = parent;
+
+			if (tag.Id == (uint) value)
+				return true;
+
+			return false;
+		}
+
+		// Copy a branch of the tree to a new parent
+		// (note, this doesn't work generically as it only copies the first value of each node)
+		private void CopyBranch (TreeIter src, TreeIter dest, bool is_root, bool is_parent)
+		{
+			TreeIter copy, iter;
+			GLib.Value value = new GLib.Value ();
+			TreeStore store = Model as TreeStore;
+			bool valid;
+
+			store.GetValue (src, IdColumn, ref 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);
+			} else {
+				copy = store.AppendValues (dest, (uint)value, tag.Name);
+			}
+
+			valid = Model.IterChildren (out iter, src);
+			while (valid) {
+				// child nodes are already ordered
+				CopyBranch (iter, copy, false, false);
+				valid = Model.IterNext (ref iter);
+			}
+		}
+
+		// insert tag into the correct place in the tree, with parent. return the new TagIter in iter.
+		private TreeIter InsertInOrder (TreeIter parent, bool is_root, Tag tag)
+		{
+			TreeStore store = Model as TreeStore;
+			TreeIter iter;
+			Tag compare;
+			bool valid;
+
+			if (is_root)
+				valid = store.GetIterFirst (out iter);
+			else
+				valid = store.IterChildren (out iter, parent);
+
+			while (valid) {
+				//I have no desire to figure out a more performant sort over this...
+				GLib.Value value = new GLib.Value ();
+				store.GetValue(iter, IdColumn, ref value);
+				compare = (Tag) tag_store.Get ((uint) value);
+
+				if (compare.CompareTo (tag) > 0) {
+					iter = store.InsertNodeBefore (iter);
+					store.SetValue (iter, IdColumn, tag.Id);
+					store.SetValue (iter, NameColumn, tag.Name);
+
+					if (!is_root)
+						ExpandRow (Model.GetPath (parent), false);
+					return iter;
+				}
+				valid = store.IterNext(ref iter);
+			}
+
+			if (is_root)
+				iter = store.AppendNode ();
+			else {
+				iter = store.AppendNode (parent);
+				ExpandRow (Model.GetPath (parent), false);
+			}
+
+			store.SetValue (iter, IdColumn, tag.Id);
+			store.SetValue (iter, NameColumn, tag.Name);
+			return iter;
+		}
+
+		private void HandleTagsRemoved (object sender, DbItemEventArgs<Tag> args)
+		{
+			TreeIter iter;
+
+			foreach (Tag tag in args.Items) {
+				if (TreeIterForTag (tag, out iter))
+					(Model as TreeStore).Remove (ref iter);
+			}
+		}
+
+		private void HandleTagsAdded (object sender, DbItemEventArgs<Tag> args)
+		{
+			TreeIter iter = TreeIter.Zero;
+
+			foreach (Tag tag in args.Items) {
+				if (tag.Category != tag_store.RootCategory)
+					TreeIterForTag (tag.Category, out iter);
+
+				InsertInOrder (iter,
+					       tag.Category.Name == tag_store.RootCategory.Name,
+					       tag);
+			}
+		}
+
+		private void HandleTagsChanged (object sender, DbItemEventArgs<Tag> args)
+		{
+			TreeStore store = Model as TreeStore;
+			TreeIter iter, category_iter, parent_iter;
+
+			foreach (Tag tag in args.Items) {
+				TreeIterForTag (tag, out iter);
+
+				bool category_valid = TreeIterForTag(tag.Category, out category_iter);
+				bool parent_valid = Model.IterParent(out parent_iter, iter);
+
+				if ((category_valid && (category_iter.Equals (parent_iter))) || (!category_valid && !parent_valid)) {
+					// if we haven't been reparented
+					TreePath path = store.GetPath (iter);
+					store.EmitRowChanged (path, iter);
+				} else {
+					// It is a bit tougher. We need to do an annoying clone of structs...
+					CopyBranch (iter, category_iter, !category_valid, true);
+					store.Remove (ref iter);
+				}
+			}
+		}
+
+		void ExpandDefaults ()
+		{
+			int [] tags = FSpot.Preferences.Get<int []> (FSpot.Preferences.EXPANDED_TAGS);
+			if (tags == null) {
+				ExpandAll ();
+				return;
+			}
+
+			TreeIter [] iters = ModelIters ();
+			if (iters == null || iters.Length == 0 || tags.Length == 0)
+				return;
+
+			foreach (TreeIter iter in iters)
+			{
+				GLib.Value v = new GLib.Value ();
+				Model.GetValue (iter, IdColumn, ref v);
+				int tag_id = (int)(uint) v;
+				if (Array.IndexOf (tags, tag_id) > -1) {
+					ExpandRow (Model.GetPath (iter), false);
+				}
+			}
+		}
+
+		// Returns a flattened array of TreeIter's from the Model
+		TreeIter [] ModelIters ()
+		{
+			TreeIter root;
+			if (Model.GetIterFirst (out root))
+			{
+				return ModelIters (root, true).ToArray (typeof (TreeIter)) as TreeIter [];
+			}
+
+			return null;
+		}
+
+		// Returns ArrayList containing the root TreeIter and all TreeIters at root's level and
+		// descended from it
+		ArrayList ModelIters (TreeIter root, bool first)
+		{
+			ArrayList model_iters = new ArrayList (Model.IterNChildren ());
+
+			model_iters.Add (root);
+
+			// Append any children
+			TreeIter child;
+			if (Model.IterChildren (out child, root))
+				model_iters.AddRange (ModelIters (child, true));
+
+			// Append any siblings and their children
+			if (first) {
+				while (Model.IterNext (ref root)) {
+					model_iters.AddRange (ModelIters (root, false));
+				}
+			}
+
+			return model_iters;
+		}
+
+		public void SaveExpandDefaults ()
+		{
+			ArrayList expanded_tags = new ArrayList ();
+
+			TreeIter [] iters = ModelIters ();
+			if (iters == null)
+				return;
+
+			foreach (TreeIter iter in iters)
+			{
+				if (GetRowExpanded (Model.GetPath (iter))) {
+					GLib.Value v = new GLib.Value ();
+					Model.GetValue (iter, IdColumn, ref v);
+					expanded_tags.Add ((int)(uint) v);
+				}
+			}
+
+	#if GCONF_SHARP_2_18
+			FSpot.Preferences.Set (	FSpot.Preferences.EXPANDED_TAGS, (int []) expanded_tags.ToArray (typeof (int)));
+	#else
+			if (expanded_tags.Count == 0)
+				expanded_tags.Add (-1);
+
+			FSpot.Preferences.Set (	FSpot.Preferences.EXPANDED_TAGS,
+							(int []) expanded_tags.ToArray (typeof (int)));
+	#endif
+		}
+
+		public void EditSelectedTagName ()
+		{
+			TreePath [] rows = Selection.GetSelectedRows();
+			if (rows.Length != 1)
+				return;
+
+			//SetCursor (rows[0], NameColumn, true);
+			text_render.Editable = true;
+			text_render.Edited += HandleTagNameEdited;
+			SetCursor (rows[0], complete_column, true);
+			text_render.Editable = false;
+		}
+
+		public void HandleTagNameEdited (object sender, EditedArgs args)
+		{
+			args.RetVal = false;
+
+			TreeIter iter;
+
+			if (!Model.GetIterFromString (out iter, args.Path))
+				return;
+
+			GLib.Value value = new GLib.Value ();
+			Model.GetValue (iter, IdColumn, ref value);
+			uint tag_id = (uint) value;
+			Tag tag = tag_store.Get (tag_id) as Tag;
+
+			// Ignore if it hasn't changed
+			if (tag.Name == args.NewText)
+				return;
+
+			// Check that the tag doesn't already exist
+			if (String.Compare (args.NewText, tag.Name, true) != 0 &&
+			    tag_store.GetTagByName (args.NewText) != null) {
+				HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window,
+					DialogFlags.DestroyWithParent,
+					MessageType.Warning, ButtonsType.Ok,
+					Catalog.GetString ("Error renaming tag"),
+					Catalog.GetString ("This name is already in use"));
+
+				md.Run ();
+				md.Destroy ();
+				this.GrabFocus ();
+				return;
+			}
+
+			tag.Name = args.NewText;
+			tag_store.Commit (tag, true);
+
+			text_render.Edited -= HandleTagNameEdited;
+
+			args.RetVal = true;
+			return;
+		}
+
+		private static TargetEntry [] tag_source_target_table =
+			new TargetEntry [] {
+				DragDropTargets.TagListEntry
+			};
+
+		private static TargetEntry [] tag_dest_target_table =
+			new TargetEntry [] {
+				DragDropTargets.PhotoListEntry,
+				DragDropTargets.UriListEntry,
+				DragDropTargets.TagListEntry
+			};
+
+
+		CellRendererPixbuf pix_render;
+		TreeViewColumn complete_column;
+		CellRendererText text_render;
+
+		protected TagSelectionWidget (IntPtr raw) : base (raw) { }
+
+		// Constructor.
+		public TagSelectionWidget (TagStore tag_store)
+			: base (new TreeStore (typeof(uint), typeof(string)))
+		{
+			database = App.Instance.Database;
+
+			HeadersVisible = false;
+
+			complete_column = new TreeViewColumn ();
+
+			pix_render = new CellRendererPixbuf ();
+			complete_column.PackStart (pix_render, false);
+			complete_column.SetCellDataFunc (pix_render, new TreeCellDataFunc (IconDataFunc));
+			//complete_column.AddAttribute (pix_render, "pixbuf", OpenIconColumn);
+
+			//icon_column = AppendColumn ("icon",
+			//, new TreeCellDataFunc (IconDataFunc));
+			//icon_column = AppendColumn ("icon", new CellRendererPixbuf (), new TreeCellDataFunc (IconDataFunc));
+
+			text_render = new CellRendererText ();
+			complete_column.PackStart (text_render, true);
+			complete_column.SetCellDataFunc (text_render, new TreeCellDataFunc (NameDataFunc));
+
+			AppendColumn (complete_column);
+
+			this.tag_store = tag_store;
+
+			Update ();
+
+			ExpandDefaults ();
+
+			tag_store.ItemsAdded += HandleTagsAdded;
+			tag_store.ItemsRemoved += HandleTagsRemoved;
+			tag_store.ItemsChanged += HandleTagsChanged;
+
+			// TODO make the search find tags that are not currently expanded
+			EnableSearch = true;
+			SearchColumn = NameColumn;
+
+			// Transparent white
+			empty_pixbuf.Fill(0xffffff00);
+
+
+			/* set up drag and drop */
+			DragDataGet += HandleDragDataGet;
+			DragDrop += HandleDragDrop;
+			DragBegin += HandleDragBegin;
+
+			Gtk.Drag.SourceSet (this,
+			           Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
+			           tag_source_target_table,
+			           DragAction.Copy | DragAction.Move);
+
+			DragDataReceived += HandleDragDataReceived;
+			DragMotion += HandleDragMotion;
+
+			Gtk.Drag.DestSet (this,
+			                  DestDefaults.All,
+			                  tag_dest_target_table,
+			                  DragAction.Copy | DragAction.Move);
+		}
+
+		void HandleDragBegin (object sender, DragBeginArgs args)
+		{
+			Tag [] tags = TagHighlight;
+			int len = tags.Length;
+			int size = 32;
+			int csize = size/2 + len * size / 2 + 2;
+
+			Pixbuf container = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, csize, csize);
+			container.Fill (0x00000000);
+
+			bool use_icon = false;;
+			while (len-- > 0) {
+				Pixbuf thumbnail = tags[len].Icon;
+
+				if (thumbnail != null) {
+					Pixbuf small = PixbufUtils.ScaleToMaxSize (thumbnail, size, size);
+
+					int x = len * (size/2) + (size - small.Width)/2;
+					int y = len * (size/2) + (size - small.Height)/2;
+
+					small.Composite (container, x, y, small.Width, small.Height, x, y, 1.0, 1.0, Gdk.InterpType.Nearest, 0xff);
+					small.Dispose ();
+
+					use_icon = true;
+				}
+			}
+
+			if (use_icon)
+				Gtk.Drag.SetIconPixbuf (args.Context, container, 0, 0);
+
+			container.Dispose ();
+		}
+
+		void HandleDragDataGet (object sender, DragDataGetArgs args)
+		{
+			if (args.Info == DragDropTargets.TagListEntry.Info) {
+				args.SelectionData.SetTagsData (TagHighlight, args.Context.Targets[0]);
+				return;
+			}
+		}
+
+		void HandleDragDrop (object sender, DragDropArgs args)
+		{
+			args.RetVal = true;
+		}
+
+		public void HandleDragMotion (object o, DragMotionArgs args)
+		{
+			TreePath path;
+	        TreeViewDropPosition position = TreeViewDropPosition.IntoOrAfter;
+			GetPathAtPos (args.X, args.Y, out path);
+
+	        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;
+	            }
+	        }
+
+			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)
+				Vadjustment.Value += 30;
+		}
+
+		public void HandleDragDataReceived (object o, DragDataReceivedArgs args)
+		{
+	        TreePath path;
+	        TreeViewDropPosition position;
+
+	        if ( ! GetDestRowAtPos ((int)args.X, (int)args.Y, out path, out position))
+	            return;
+
+	        Tag tag = path == null ? null : TagByPath (path);
+			if (tag == null)
+				return;
+
+			if (args.Info == DragDropTargets.PhotoListEntry.Info) {
+				database.BeginTransaction ();
+
+				Photo[] photos = args.SelectionData.GetPhotosData ();
+
+				foreach (Photo photo in photos) {
+
+					if (photo == null)
+						continue;
+
+					photo.AddTag (tag);
+					database.Photos.Commit (photo);
+
+					// FIXME: AddTagExtendes from Mainwindow.cs does some tag-icon handling.
+					// this should be done here or completely located to the Tag-class.
+				}
+				database.CommitTransaction ();
+
+				// FIXME: this needs to be done somewhere:
+				//query_widget.PhotoTagsChanged (new Tag[] {tag});
+				return;
+			}
+
+			if (args.Info == DragDropTargets.UriListEntry.Info) {
+				UriList list = args.SelectionData.GetUriListData ();
+
+				database.BeginTransaction ();
+				List<Photo> photos = new List<Photo> ();
+				foreach (var photo_uri in list) {
+					Photo photo = database.Photos.GetByUri (photo_uri);
+
+					// FIXME - at this point we should import the photo, and then continue
+					if (photo == null)
+						continue;
+
+					// FIXME this should really follow the AddTagsExtended path too
+					photo.AddTag (new Tag[] {tag});
+					photos.Add (photo);
+				}
+				database.Photos.Commit (photos.ToArray ());
+				database.CommitTransaction ();
+
+				// FIXME: this need to be done
+				//InvalidateViews (); // but it seems not to be needed. tags are updated through in IconView through PhotoChanged
+				return;
+			}
+
+			if (args.Info == DragDropTargets.TagListEntry.Info) {
+				Category parent;
+	            if (position == TreeViewDropPosition.Before || position == TreeViewDropPosition.After) {
+	                parent = tag.Category;
+	            } else {
+	                parent = tag as Category;
+	            }
+
+				if (parent == null || TagHighlight.Length < 1) {
+	                args.RetVal = false;
+					return;
+	            }
+
+	            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 as Category;
+
+	                    // Saving changes will automatically cause the TreeView to be updated
+	                    database.Tags.Commit (child);
+	                    moved_count++;
+	                }
+	            }
+
+	            // Reselect the same tags
+	            TagHighlight = highlighted_tags;
+
+	            args.RetVal = moved_count > 0;
+				return;
+			}
+		}
+
+
+	#if TEST_TAG_SELECTION_WIDGET
+
+		class Test {
+
+			private TagSelectionWidget selection_widget;
+
+			private void OnSelectionChanged ()
+			{
+				Log.Debug ("Selection changed:");
+
+				foreach (Tag t in selection_widget.TagSelection)
+					Log.DebugFormat ("\t{0}", t.Name);
+			}
+
+			private Test ()
+			{
+				const string path = "/tmp/TagSelectionTest.db";
+
+				try {
+					File.Delete (path);
+				} catch {}
+
+				Db db = new Db (path, true);
+
+				Category people_category = db.Tags.CreateCategory (null, "People");
+				db.Tags.CreateTag (people_category, "Anna");
+				db.Tags.CreateTag (people_category, "Ettore");
+				db.Tags.CreateTag (people_category, "Miggy");
+				db.Tags.CreateTag (people_category, "Nat");
+
+				Category places_category = db.Tags.CreateCategory (null, "Places");
+				db.Tags.CreateTag (places_category, "Milan");
+				db.Tags.CreateTag (places_category, "Boston");
+
+				Category exotic_category = db.Tags.CreateCategory (places_category, "Exotic");
+				db.Tags.CreateTag (exotic_category, "Bengalore");
+				db.Tags.CreateTag (exotic_category, "Manila");
+				db.Tags.CreateTag (exotic_category, "Tokyo");
+
+				selection_widget = new TagSelectionWidget (db.Tags);
+				selection_widget.SelectionChanged += new SelectionChangedHandler (OnSelectionChanged);
+
+				Window window = new Window (WindowType.Toplevel);
+				window.SetDefaultSize (400, 200);
+				ScrolledWindow scrolled = new ScrolledWindow (null, null);
+				scrolled.SetPolicy (PolicyType.Automatic, PolicyType.Automatic);
+				scrolled.Add (selection_widget);
+				window.Add (scrolled);
+
+				window.ShowAll ();
+			}
+
+			static private void Main (string [] args)
+			{
+				Program program = new Program ("TagSelectionWidgetTest", "0.0", Modules.UI, args);
+
+				Test test = new Test ();
+
+				program.Run ();
+			}
+		}
+
+	#endif
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/TagStore.cs b/src/Clients/MainApp/FSpot/TagStore.cs
new file mode 100644
index 0000000..958eecf
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/TagStore.cs
@@ -0,0 +1,397 @@
+using Gdk;
+using Gtk;
+using Mono.Unix;
+using System.Collections.Generic;
+using System.Collections;
+using System.IO;
+using System.Data;
+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;
+
+namespace FSpot {
+public class InvalidTagOperationException : InvalidOperationException {
+	public Tag tag;
+
+	public InvalidTagOperationException (Tag t, string message) : base (message)
+	{
+		tag = t;
+	}
+
+	public Tag Tag {
+		get {
+			return tag;
+		}
+	}
+
+}
+
+// Sorts tags into an order that it will be safe to delete
+// them in (eg children first).
+public class TagRemoveComparer : IComparer {
+	public int Compare (object obj1, object obj2)
+	{
+		Tag t1 = obj1 as Tag;
+		Tag t2 = obj2 as Tag;
+
+		return Compare (t1, t2);
+	}
+
+	public int Compare (Tag t1, Tag t2)
+	{
+		if (t1.IsAncestorOf (t2))
+			return 1;
+		else if (t2.IsAncestorOf (t1))
+			return -1;
+		else
+			return 0;
+	}
+}
+
+public class TagStore : DbStore<Tag> {
+	Category root_category;
+	public Category RootCategory {
+		get {
+			return root_category;
+		}
+	}
+
+	private const string STOCK_ICON_DB_PREFIX = "stock_icon:";
+
+	static void SetIconFromString (Tag tag, string icon_string)
+	{
+		if (icon_string == null) {
+			tag.Icon = null;
+			// IconWasCleared automatically set already, override
+			// it in this case since it was NULL in the db.
+			tag.IconWasCleared = false;
+		} else if (icon_string == String.Empty)
+			tag.Icon = null;
+		else if (icon_string.StartsWith (STOCK_ICON_DB_PREFIX))
+			tag.ThemeIconName = icon_string.Substring (STOCK_ICON_DB_PREFIX.Length);
+		else
+			tag.Icon = GdkUtils.Deserialize (Convert.FromBase64String (icon_string));
+	}
+
+	private Tag hidden;
+	public Tag Hidden {
+		get {
+			return hidden;
+		}
+	}
+
+	public Tag GetTagByName (string name)
+	{
+		foreach (Tag t in this.item_cache.Values)
+			if (t.Name.ToLower () == name.ToLower ())
+				return t;
+
+		return null;
+	}
+
+	public Tag GetTagById (int id)
+	{
+		foreach (Tag t in this.item_cache.Values)
+			if (t.Id == id)
+				return t;
+		return null;
+	}
+
+	public Tag [] GetTagsByNameStart (string s)
+	{
+		List <Tag> l = new List<Tag> ();
+		foreach (Tag t in this.item_cache.Values) {
+			if (t.Name.ToLower ().StartsWith (s.ToLower ()))
+				l.Add (t);
+		}
+
+		if (l.Count == 0)
+			return null;
+
+		l.Sort (delegate (Tag t1, Tag t2) {return t2.Popularity.CompareTo (t1.Popularity); });
+
+		return l.ToArray ();
+	}
+
+	// In this store we keep all the items (i.e. the tags) in memory at all times.  This is
+	// mostly to simplify handling of the parent relationship between tags, but it also makes it
+	// a little bit faster.  We achieve this by passing "true" as the cache_is_immortal to our
+	// base class.
+	private void LoadAllTags ()
+	{
+
+		// Pass 1, get all the tags.
+
+		IDataReader reader = Database.Query ("SELECT id, name, is_category, sort_priority, icon FROM tags");
+
+		while (reader.Read ()) {
+			uint id = Convert.ToUInt32 (reader ["id"]);
+			string name = reader ["name"].ToString ();
+			bool is_category = (Convert.ToUInt32 (reader ["is_category"]) != 0);
+
+			Tag tag;
+			if (is_category)
+				tag = new Category (null, id, name);
+			else
+				tag = new Tag (null, id, name);
+
+			if (reader ["icon"] != null)
+				try {
+					SetIconFromString (tag, reader ["icon"].ToString ());
+				} catch (Exception ex) {
+					Log.Exception ("Unable to load icon for tag " + name, ex);
+				}
+
+			tag.SortPriority = Convert.ToInt32 (reader["sort_priority"]);
+			AddToCache (tag);
+		}
+
+		reader.Close ();
+
+		// Pass 2, set the parents.
+		reader = Database.Query ("SELECT id, category_id FROM tags");
+
+		while (reader.Read ()) {
+			uint id = Convert.ToUInt32 (reader ["id"]);
+			uint category_id = Convert.ToUInt32 (reader ["category_id"]);
+
+			Tag tag = Get (id) as Tag;
+			if (tag == null)
+				throw new Exception (String.Format ("Cannot find tag {0}", id));
+			if (category_id == 0)
+				tag.Category = RootCategory;
+			else {
+				tag.Category = Get (category_id) as Category;
+				if (tag.Category == null)
+					Log.Warning ("Tag Without category found");
+			}
+
+		}
+		reader.Close ();
+
+		//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"])) as Tag;
+			if (t != null)
+				t.Popularity = Convert.ToInt32 (reader ["popularity"]);
+		}
+		reader.Close ();
+
+		if (FSpot.App.Instance.Database.Meta.HiddenTagId.Value != null)
+			hidden = LookupInCache ((uint) FSpot.App.Instance.Database.Meta.HiddenTagId.ValueAsInt) as Tag;
+	}
+
+
+	private void CreateTable ()
+	{
+		Database.Execute (
+			"CREATE TABLE tags (\n" +
+			"	id		INTEGER PRIMARY KEY NOT NULL, \n" +
+			"	name		TEXT UNIQUE, \n" +
+			"	category_id	INTEGER, \n" +
+			"	is_category	BOOLEAN, \n" +
+			"	sort_priority	INTEGER, \n" +
+			"	icon		TEXT\n" +
+			")");
+	}
+
+	private void CreateDefaultTags ()
+	{
+		Category favorites_category = CreateCategory (RootCategory, Catalog.GetString ("Favorites"), false);
+		favorites_category.ThemeIconName = "emblem-favorite";
+		favorites_category.SortPriority = -10;
+		Commit (favorites_category);
+
+		Tag hidden_tag = CreateTag (RootCategory, Catalog.GetString ("Hidden"), false);
+		hidden_tag.ThemeIconName = "emblem-readonly";
+		hidden_tag.SortPriority = -9;
+		this.hidden = hidden_tag;
+		Commit (hidden_tag);
+		FSpot.App.Instance.Database.Meta.HiddenTagId.ValueAsInt = (int) hidden_tag.Id;
+		FSpot.App.Instance.Database.Meta.Commit (FSpot.App.Instance.Database.Meta.HiddenTagId);
+
+		Tag people_category = CreateCategory (RootCategory, Catalog.GetString ("People"), false);
+		people_category.ThemeIconName = "emblem-people";
+		people_category.SortPriority = -8;
+		Commit (people_category);
+
+		Tag places_category = CreateCategory (RootCategory, Catalog.GetString ("Places"), false);
+		places_category.ThemeIconName = "emblem-places";
+		places_category.SortPriority = -8;
+		Commit (places_category);
+
+		Tag events_category = CreateCategory (RootCategory, Catalog.GetString ("Events"), false);
+		events_category.ThemeIconName = "emblem-event";
+		events_category.SortPriority = -7;
+		Commit (events_category);
+	}
+
+
+	// Constructor
+
+	public TagStore (FSpotDatabaseConnection database, bool is_new)
+		: base (database, true)
+	{
+		// The label for the root category is used in new and edit tag dialogs
+		root_category = new Category (null, 0, Catalog.GetString ("(None)"));
+
+		if (! is_new) {
+			LoadAllTags ();
+		} else {
+			CreateTable ();
+			CreateDefaultTags ();
+		}
+	}
+
+	private uint InsertTagIntoTable (Category parent_category, string name, bool is_category, bool autoicon)
+	{
+
+		uint parent_category_id = parent_category.Id;
+		String default_tag_icon_value = autoicon ? null : String.Empty;
+
+		int id = Database.Execute (new HyenaSqliteCommand ("INSERT INTO tags (name, category_id, is_category, sort_priority, icon)"
+                          + "VALUES (?, ?, ?, 0, ?)",
+						  name,
+						  parent_category_id,
+						  is_category ? 1 : 0,
+						  default_tag_icon_value));
+
+
+		return (uint) id;
+	}
+
+	public Tag CreateTag (Category category, string name, bool autoicon)
+	{
+		if (category == null)
+			category = RootCategory;
+
+		uint id = InsertTagIntoTable (category, name, false, autoicon);
+
+		Tag tag = new Tag (category, id, name);
+		tag.IconWasCleared = !autoicon;
+
+		AddToCache (tag);
+		EmitAdded (tag);
+
+		return tag;
+	}
+
+	public Category CreateCategory (Category parent_category, string name, bool autoicon)
+	{
+		if (parent_category == null)
+			parent_category = RootCategory;
+
+		uint id = InsertTagIntoTable (parent_category, name, true, autoicon);
+
+		Category new_category = new Category (parent_category, id, name);
+		new_category.IconWasCleared = !autoicon;
+
+		AddToCache (new_category);
+		EmitAdded (new_category);
+
+		return new_category;
+	}
+
+	public override Tag Get (uint id)
+	{
+		if (id == 0)
+			return RootCategory;
+		else
+			return LookupInCache (id);
+	}
+
+	public override void Remove (Tag tag)
+	{
+		Category category = tag as Category;
+		if (category != null &&
+		    category.Children != null &&
+		    category.Children.Count > 0)
+			throw new InvalidTagOperationException (category, "Cannot remove category that contains children");
+
+		RemoveFromCache (tag);
+
+		tag.Category = null;
+
+		Database.Execute (new HyenaSqliteCommand ("DELETE FROM tags WHERE id = ?", tag.Id));
+
+		EmitRemoved (tag);
+	}
+
+
+	private string GetIconString (Tag tag)
+	{
+		if (tag.ThemeIconName != null)
+			return STOCK_ICON_DB_PREFIX + tag.ThemeIconName;
+		if (tag.Icon == null) {
+			if (tag.IconWasCleared)
+				return String.Empty;
+			return null;
+		}
+
+		byte [] data = GdkUtils.Serialize (tag.Icon);
+		return Convert.ToBase64String (data);
+	}
+
+	public override void Commit (Tag tag)
+	{
+		Commit (tag, false);
+	}
+
+	public void Commit (Tag tag, bool update_xmp)
+	{
+		Commit (new Tag[] {tag}, update_xmp);
+	}
+
+	public void Commit (Tag [] tags, bool update_xmp)
+	{
+
+		// TODO.
+		bool use_transactions = update_xmp;//!Database.InTransaction && update_xmp;
+
+		//if (use_transactions)
+		//	Database.BeginTransaction ();
+
+		// FIXME: this hack is used, because HyenaSqliteConnection does not support
+		// the InTransaction propery
+
+		if (use_transactions) {
+			try {
+				Database.BeginTransaction ();
+			} catch {
+				use_transactions = false;
+			}
+		}
+
+		foreach (Tag tag in tags) {
+			Database.Execute (new HyenaSqliteCommand ("UPDATE tags SET name = ?, category_id = ?, "
+						+ "is_category = ?, sort_priority = ?, icon = ? WHERE id = ?",
+							  tag.Name,
+							  tag.Category.Id,
+							  tag is Category ? 1 : 0,
+							  tag.SortPriority,
+							  GetIconString (tag),
+							  tag.Id));
+
+			if (update_xmp && Preferences.Get<bool> (Preferences.METADATA_EMBED_IN_IMAGE)) {
+				Photo [] photos = App.Instance.Database.Photos.Query (new Tag [] { tag });
+				foreach (Photo p in photos)
+					if (p.HasTag (tag)) // the query returns all the pics of the tag and all its child. this avoids updating child tags
+						SyncMetadataJob.Create (App.Instance.Database.Jobs, p);
+			}
+		}
+
+		if (use_transactions)
+			Database.CommitTransaction ();
+
+		EmitChanged (tags);
+	}
+}
+}
\ No newline at end of file
diff --git a/src/Clients/MainApp/FSpot/Term.cs b/src/Clients/MainApp/FSpot/Term.cs
new file mode 100644
index 0000000..9414566
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/Term.cs
@@ -0,0 +1,947 @@
+/*
+ * Term.cs
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using Mono.Unix;
+using Gtk;
+using Gdk;
+using Hyena;
+using FSpot.Core;
+
+namespace FSpot {
+	public abstract class Term {
+		private ArrayList sub_terms = new ArrayList ();
+		private Term parent = null;
+
+		protected bool is_negated = false;
+		protected Tag tag = null;
+
+		public Term (Term parent, Literal after)
+		{
+			this.parent = parent;
+
+			if (parent != null) {
+				if (after == null)
+					parent.Add (this);
+				else
+					parent.SubTerms.Insert (parent.SubTerms.IndexOf (after) + 1, this);
+			}
+		}
+
+		/** Properties **/
+		public bool HasMultiple {
+			get {
+				return (SubTerms.Count > 1);
+			}
+		}
+
+		public ArrayList SubTerms {
+			get {
+				return sub_terms;
+			}
+		}
+
+		public Term Last {
+			get {
+				// Return the last Literal in this term
+				if (SubTerms.Count > 0)
+					return SubTerms[SubTerms.Count - 1] as Term;
+				else
+					return null;
+			}
+		}
+
+		public int Count {
+			get {
+				return SubTerms.Count;
+			}
+		}
+
+		public Term Parent {
+			get { return parent; }
+			set {
+				if (parent == value)
+					return;
+
+				// If our parent was already set, remove ourself from it
+				if (parent != null)
+					parent.Remove(this);
+
+				// Add ourself to our new parent
+				parent = value;
+				parent.Add(this);
+			}
+		}
+
+		public virtual bool IsNegated {
+			get { return is_negated; }
+			set {
+				if (is_negated != value)
+					Invert(false);
+
+				is_negated = value;
+			}
+		}
+
+
+		/** Methods **/
+
+		public void Add (Term term)
+		{
+			SubTerms.Add (term);
+		}
+
+		public void Remove (Term term)
+		{
+			SubTerms.Remove (term);
+
+			// Remove ourselves if we're now empty
+			if (SubTerms.Count == 0)
+				if (Parent != null)
+					Parent.Remove (this);
+		}
+
+		public void CopyAndInvertSubTermsFrom (Term term, bool recurse)
+		{
+			is_negated = true;
+			ArrayList termsToMove = new ArrayList(term.SubTerms);
+			foreach (Term subterm in termsToMove) {
+				if (recurse)
+					subterm.Invert(true).Parent = this;
+				else
+					subterm.Parent = this;
+			}
+		}
+
+		public ArrayList FindByTag (Tag t)
+		{
+			return FindByTag (t, true);
+		}
+
+		public ArrayList FindByTag (Tag t, bool recursive)
+		{
+			ArrayList results = new ArrayList ();
+
+			if (tag != null && tag == t)
+				results.Add (this);
+
+			if (recursive)
+				foreach (Term term in SubTerms)
+				results.AddRange (term.FindByTag (t, true));
+			else
+				foreach (Term term in SubTerms) {
+				foreach (Term literal in SubTerms) {
+					if (literal.tag != null && literal.tag == t) {
+						results.Add (literal);
+					}
+				}
+
+				if (term.tag != null && term.tag == t) {
+					results.Add (term);
+				}
+			}
+
+			return results;
+		}
+
+		public ArrayList LiteralParents ()
+		{
+			ArrayList results = new ArrayList ();
+
+			bool meme = false;
+			foreach (Term term in SubTerms) {
+				if (term is Literal)
+					meme = true;
+
+				results.AddRange (term.LiteralParents ());
+			}
+
+			if (meme)
+				results.Add (this);
+
+			return results;
+		}
+
+		public bool TagIncluded(Tag t)
+		{
+			ArrayList parents = LiteralParents ();
+
+			if (parents.Count == 0)
+				return false;
+
+			foreach (Term term in parents) {
+				bool termHasTag = false;
+				bool onlyTerm = true;
+				foreach (Term literal in term.SubTerms) {
+					if (literal.tag != null) {
+						if (literal.tag == t) {
+							termHasTag = true;
+						} else {
+							onlyTerm = false;
+						}
+					}
+				}
+
+				if (termHasTag && onlyTerm)
+					return true;
+			}
+
+			return false;
+		}
+
+		public bool TagRequired(Tag t)
+		{
+			int count, grouped_with;
+			return TagRequired(t, out count, out grouped_with);
+		}
+
+		public bool TagRequired(Tag t, out int num_terms, out int grouped_with)
+		{
+			ArrayList parents = LiteralParents ();
+
+			num_terms = 0;
+			grouped_with = 100;
+			int min_grouped_with = 100;
+
+			if (parents.Count == 0)
+				return false;
+
+			foreach (Term term in parents) {
+				bool termHasTag = false;
+
+				// Don't count it as required if it's the only subterm..though it is..
+				// it is more clearly identified as Included at that point.
+				if (term.Count > 1) {
+					foreach (Term literal in term.SubTerms) {
+						if (literal.tag != null) {
+							if (literal.tag == t) {
+								num_terms++;
+								termHasTag = true;
+								grouped_with = term.SubTerms.Count;
+								break;
+							}
+						}
+					}
+				}
+
+				if (grouped_with < min_grouped_with)
+					min_grouped_with = grouped_with;
+
+				if (!termHasTag)
+					return false;
+			}
+
+			grouped_with = min_grouped_with;
+
+			return true;
+		}
+
+		public abstract Term Invert(bool recurse);
+
+		// Recursively generate the SQL condition clause that this
+		// term represents.
+		public virtual string SqlCondition ()
+		{
+			StringBuilder condition = new StringBuilder ("(");
+
+			for (int i = 0; i < SubTerms.Count; i++) {
+				Term term = SubTerms[i] as Term;
+				condition.Append (term.SqlCondition ());
+
+				if (i != SubTerms.Count - 1)
+					condition.Append (SQLOperator ());
+			}
+
+			condition.Append(")");
+
+			return condition.ToString ();
+		}
+
+		public virtual Gtk.Widget SeparatorWidget ()
+		{
+			return null;
+		}
+
+		public virtual string SQLOperator ()
+		{
+			return String.Empty;
+		}
+
+		protected static Hashtable op_term_lookup = new Hashtable();
+		public static Term TermFromOperator (string op, Term parent, Literal after)
+		{
+			//Console.WriteLine ("finding type for operator {0}", op);
+			//op = op.Trim ();
+			op = op.ToLower ();
+
+			if (AndTerm.Operators.Contains (op)) {
+				//Console.WriteLine ("AND!");
+				return new AndTerm (parent, after);
+			} else if (OrTerm.Operators.Contains (op)) {
+				//Console.WriteLine ("OR!");
+				return new OrTerm (parent, after);
+			}
+
+			Log.DebugFormat ("Do not have Term for operator {0}", op);
+			return null;
+		}
+	}
+
+	public class AndTerm : Term {
+		static ArrayList operators = new ArrayList ();
+		static AndTerm () {
+			operators.Add (Catalog.GetString (" and "));
+			//operators.Add (Catalog.GetString (" && "));
+			operators.Add (Catalog.GetString (", "));
+		}
+
+		public static ArrayList Operators {
+			get { return operators; }
+		}
+
+		public AndTerm (Term parent, Literal after) : base (parent, after) {}
+
+		public override Term Invert (bool recurse)
+		{
+			OrTerm newme = new OrTerm(Parent, null);
+			newme.CopyAndInvertSubTermsFrom(this, recurse);
+			if (Parent != null)
+				Parent.Remove(this);
+			return newme;
+		}
+
+		public override Widget SeparatorWidget ()
+		{
+			Widget sep = new Label (String.Empty);
+			sep.SetSizeRequest (3, 1);
+			sep.Show ();
+			return sep;
+			//return null;
+		}
+
+		public override string SqlCondition ()
+		{
+			StringBuilder condition = new StringBuilder ("(");
+
+			condition.Append (base.SqlCondition());
+
+			Tag hidden = App.Instance.Database.Tags.Hidden;
+			if (hidden != null) {
+				if (FindByTag (hidden, true).Count == 0) {
+					condition.Append (String.Format (
+								  " AND id NOT IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0})", hidden.Id
+							  ));
+				}
+			}
+
+			condition.Append (")");
+
+			return condition.ToString ();
+		}
+
+		public override string SQLOperator ()
+		{
+			return " AND ";
+		}
+	}
+
+	public class OrTerm : Term {
+		static ArrayList operators = new ArrayList ();
+		static OrTerm () {
+			operators.Add (Catalog.GetString (" or "));
+			//operators.Add (Catalog.GetString (" || "));
+		}
+
+		public static OrTerm FromTags(Tag [] from_tags)
+		{
+			if (from_tags == null || from_tags.Length == 0)
+				return null;
+
+			OrTerm or = new OrTerm(null, null);
+			foreach (Tag t in from_tags) {
+				Literal l = new Literal(t);
+				l.Parent = or;
+			}
+			return or;
+		}
+
+
+		public static ArrayList Operators {
+			get { return operators; }
+		}
+
+		public OrTerm (Term parent, Literal after) : base (parent, after) {}
+
+		private static string OR = Catalog.GetString ("or");
+
+		public override Term Invert (bool recurse)
+		{
+			AndTerm newme = new AndTerm(Parent, null);
+			newme.CopyAndInvertSubTermsFrom(this, recurse);
+			if (Parent != null)
+				Parent.Remove(this);
+			return newme;
+		}
+
+		public override Gtk.Widget SeparatorWidget ()
+		{
+			Widget label = new Label (" " + OR + " ");
+			label.Show ();
+			return label;
+		}
+
+		public override string SQLOperator ()
+		{
+			return " OR ";
+		}
+	}
+
+	public abstract class AbstractLiteral : Term {
+		public AbstractLiteral(Term parent, Literal after) : base (parent, after) {}
+
+		public override Term Invert (bool recurse)
+		{
+			is_negated = !is_negated;
+			return this;
+		}
+	}
+
+	// TODO rename to TagLiteral?
+	public class Literal : AbstractLiteral {
+		public Literal (Tag tag) : this (null, tag, null)
+		{
+		}
+
+		public Literal (Term parent, Tag tag, Literal after) : base (parent, after) {
+			this.tag = tag;
+		}
+
+		/** Properties **/
+
+		public static ArrayList FocusedLiterals
+		{
+			get {
+				return focusedLiterals;
+			}
+			set {
+				focusedLiterals = value;
+			}
+		}
+
+		public Tag Tag {
+			get {
+				return tag;
+			}
+		}
+
+		public override bool IsNegated {
+			get {
+				return is_negated;
+			}
+
+			set {
+				if (is_negated == value)
+					return;
+
+				is_negated = value;
+
+				NormalIcon = null;
+				NegatedIcon = null;
+				Update ();
+
+				if (NegatedToggled != null)
+					NegatedToggled (this);
+			}
+		}
+
+		private Pixbuf NegatedIcon
+		{
+			get {
+				if (negated_icon != null)
+					return negated_icon;
+
+				if (NormalIcon == null)
+					return null;
+
+				negated_icon = NormalIcon.Copy ();
+
+				int offset = ICON_SIZE - overlay_size;
+				NegatedOverlay.Composite (negated_icon, offset, 0, overlay_size, overlay_size, offset, 0, 1.0, 1.0, InterpType.Bilinear, 200);
+
+				return negated_icon;
+			}
+
+			set {
+				negated_icon = null;
+			}
+		}
+
+		public Widget Widget {
+			get {
+				if (widget != null)
+					return widget;
+
+				container = new EventBox ();
+				box = new HBox ();
+
+				handle_box = new LiteralBox ();
+				handle_box.BorderWidth = 1;
+
+				label = new Label (System.Web.HttpUtility.HtmlEncode (tag.Name));
+				label.UseMarkup = true;
+
+				image = new Gtk.Image (NormalIcon);
+
+				container.CanFocus = true;
+
+				container.KeyPressEvent  += KeyHandler;
+				container.ButtonPressEvent += HandleButtonPress;
+				container.ButtonReleaseEvent += HandleButtonRelease;
+				container.EnterNotifyEvent += HandleMouseIn;
+				container.LeaveNotifyEvent += HandleMouseOut;
+
+				//new PopupManager (new LiteralPopup (container, this));
+
+				// Setup this widget as a drag source (so tags can be moved after being placed)
+				container.DragDataGet += HandleDragDataGet;
+				container.DragBegin += HandleDragBegin;
+				container.DragEnd += HandleDragEnd;
+
+				Gtk.Drag.SourceSet (container, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
+						    tag_target_table, DragAction.Copy | DragAction.Move);
+
+				// Setup this widget as a drag destination (so tags can be added to our parent's Term)
+				container.DragDataReceived += HandleDragDataReceived;
+				container.DragMotion += HandleDragMotion;
+				container.DragLeave += HandleDragLeave;
+
+				Gtk.Drag.DestSet (container, DestDefaults.All, tag_dest_target_table,
+						  DragAction.Copy | DragAction.Move );
+
+				container.TooltipText = tag.Name;
+
+				label.Show ();
+				image.Show ();
+
+				if (tag.Icon == null) {
+					handle_box.Add (label);
+				} else {
+					handle_box.Add (image);
+				}
+
+				handle_box.Show ();
+
+				box.Add (handle_box);
+				box.Show ();
+
+				container.Add (box);
+
+				widget = container;
+
+				return widget;
+			}
+		}
+
+		private Pixbuf NormalIcon
+		{
+			get {
+				if (normal_icon != null)
+					return normal_icon;
+
+				Pixbuf scaled = null;
+				scaled = tag.Icon;
+
+				for (Category category = tag.Category; category != null && scaled == null; category = category.Category)
+					scaled = category.Icon;
+
+				if (scaled == null)
+					return null;
+
+				if (scaled.Width != ICON_SIZE) {
+					scaled = scaled.ScaleSimple (ICON_SIZE, ICON_SIZE, InterpType.Bilinear);
+				}
+
+				normal_icon = scaled;
+
+				return normal_icon;
+			}
+
+			set {
+				normal_icon = null;
+			}
+		}
+
+		/** Methods **/
+		public void Update ()
+		{
+			// Clear out the old icons
+			normal_icon = null;
+			negated_icon = null;
+			if (IsNegated) {
+				widget.TooltipText = String.Format (Catalog.GetString ("Not {0}"), tag.Name);
+				label.Text = "<s>" + System.Web.HttpUtility.HtmlEncode (tag.Name) + "</s>";
+				image.Pixbuf = NegatedIcon;
+			} else {
+				widget.TooltipText = tag.Name;
+				label.Text = System.Web.HttpUtility.HtmlEncode (tag.Name);
+				image.Pixbuf = NormalIcon;
+			}
+
+			label.UseMarkup = true;
+
+			// Show the icon unless it's null
+			if (tag.Icon == null && container.Children [0] == image) {
+				container.Remove (image);
+				container.Add (label);
+			} else if (tag.Icon != null && container.Children [0] == label) {
+				container.Remove (label);
+				container.Add (image);
+			}
+
+
+			if (isHoveredOver && image.Pixbuf != null ) {
+				// Brighten the image slightly
+				Pixbuf brightened = image.Pixbuf.Copy ();
+				image.Pixbuf.SaturateAndPixelate (brightened, 1.85f, false);
+				//Pixbuf brightened = PixbufUtils.Glow (image.Pixbuf, .6f);
+
+				image.Pixbuf = brightened;
+			}
+		}
+
+		public void RemoveSelf ()
+		{
+			if (Removing != null)
+				Removing (this);
+
+			if (Parent != null)
+				Parent.Remove (this);
+
+			if (Removed != null)
+				Removed (this);
+		}
+
+		public override string SqlCondition ()
+		{
+			StringBuilder ids = new StringBuilder (tag.Id.ToString ());
+
+			if (tag is Category) {
+				List<Tag> tags = new List<Tag> ();
+				(tag as Category).AddDescendentsTo (tags);
+
+				for (int i = 0; i < tags.Count; i++)
+					ids.Append (", " + (tags [i] as Tag).Id.ToString ());
+			}
+
+			return String.Format (
+				       "id {0}IN (SELECT photo_id FROM photo_tags WHERE tag_id IN ({1}))",
+				       (IsNegated ? "NOT " : String.Empty), ids.ToString ());
+		}
+
+		public override Gtk.Widget SeparatorWidget ()
+		{
+			return new Label ("ERR");
+		}
+
+		private static Pixbuf NegatedOverlay
+		{
+			get {
+				if (negated_overlay == null) {
+					System.Reflection.Assembly assembly = System.Reflection.Assembly.GetCallingAssembly ();
+					negated_overlay = new Pixbuf (assembly.GetManifestResourceStream ("f-spot-not.png"));
+					negated_overlay = negated_overlay.ScaleSimple (overlay_size, overlay_size, InterpType.Bilinear);
+				}
+
+				return negated_overlay;
+			}
+		}
+
+		public static void RemoveFocusedLiterals ()
+		{
+			if (focusedLiterals != null)
+				foreach (Literal literal in focusedLiterals)
+				literal.RemoveSelf ();
+		}
+
+		/** Handlers **/
+
+		private void KeyHandler (object o, KeyPressEventArgs args)
+		{
+			args.RetVal = false;
+
+			switch (args.Event.Key) {
+			case Gdk.Key.Delete:
+				RemoveFocusedLiterals ();
+				args.RetVal = true;
+				return;
+			}
+		}
+
+		private void HandleButtonPress (object o, ButtonPressEventArgs args)
+		{
+			args.RetVal = true;
+
+			switch (args.Event.Type) {
+			case EventType.TwoButtonPress:
+				if (args.Event.Button == 1)
+					IsNegated = !IsNegated;
+				else
+					args.RetVal = false;
+				return;
+
+			case EventType.ButtonPress:
+				Widget.GrabFocus ();
+
+				if (args.Event.Button == 1) {
+					// TODO allow multiple selection of literals so they can be deleted, modified all at once
+					//if ((args.Event.State & ModifierType.ControlMask) != 0) {
+					//}
+
+				}
+				else if (args.Event.Button == 3)
+				{
+					LiteralPopup popup = new LiteralPopup ();
+					popup.Activate (args.Event, this);
+				}
+
+				return;
+
+			default:
+				args.RetVal = false;
+				return;
+			}
+		}
+
+		private void HandleButtonRelease (object o, ButtonReleaseEventArgs args)
+		{
+			args.RetVal = true;
+
+			switch (args.Event.Type) {
+			case EventType.TwoButtonPress:
+				args.RetVal = false;
+				return;
+
+			case EventType.ButtonPress:
+				if (args.Event.Button == 1) {
+				}
+				return;
+
+			default:
+				args.RetVal = false;
+				return;
+			}
+		}
+
+		private void HandleMouseIn (object o, EnterNotifyEventArgs args)
+		{
+			isHoveredOver = true;
+			Update ();
+		}
+
+		private void HandleMouseOut (object o, LeaveNotifyEventArgs args)
+		{
+			isHoveredOver = false;
+			Update ();
+		}
+
+		void HandleDragDataGet (object sender, DragDataGetArgs args)
+		{
+			args.RetVal = true;
+
+			if (args.Info == DragDropTargets.TagListEntry.Info || args.Info == DragDropTargets.TagQueryEntry.Info) {
+
+				// FIXME: do really write data
+				Byte [] data = Encoding.UTF8.GetBytes (String.Empty);
+				Atom [] targets = args.Context.Targets;
+
+				args.SelectionData.Set (targets[0], 8, data, data.Length);
+
+				return;
+			}
+
+			// Drop cancelled
+			args.RetVal = false;
+
+			foreach (Widget w in hiddenWidgets)
+				w.Visible = true;
+
+			focusedLiterals = null;
+		}
+
+		void HandleDragBegin (object sender, DragBeginArgs args)
+		{
+			Gtk.Drag.SetIconPixbuf (args.Context, image.Pixbuf, 0, 0);
+
+			focusedLiterals.Add (this);
+
+			// Hide the tag and any separators that only exist because of it
+			container.Visible = false;
+			hiddenWidgets.Add (container);
+			foreach (Widget w in LogicWidget.Box.HangersOn (this)) {
+				hiddenWidgets.Add (w);
+				w.Visible = false;
+			}
+		}
+
+		void HandleDragEnd (object sender, DragEndArgs args)
+		{
+			// Remove any literals still marked as focused, because
+			// the user is throwing them away.
+			RemoveFocusedLiterals ();
+
+			focusedLiterals = new ArrayList();
+			args.RetVal = true;
+		}
+
+		private void HandleDragDataReceived (object o, DragDataReceivedArgs args)
+		{
+			args.RetVal = true;
+
+			if (args.Info == DragDropTargets.TagListEntry.Info) {
+
+				if (TagsAdded != null)
+					TagsAdded (args.SelectionData.GetTagsData (), Parent, this);
+
+				return;
+			}
+
+			if (args.Info == DragDropTargets.TagQueryEntry.Info) {
+
+				if (! focusedLiterals.Contains(this))
+					if (LiteralsMoved != null)
+						LiteralsMoved (focusedLiterals, Parent, this);
+
+				// Unmark the literals as focused so they don't get nixed
+				focusedLiterals = null;
+			}
+		}
+
+		private bool preview = false;
+		private Gtk.Widget preview_widget;
+		private void HandleDragMotion (object o, DragMotionArgs args)
+		{
+			if (!preview) {
+				if (preview_widget == null) {
+					preview_widget = new Gtk.Label (" | ");
+					box.Add (preview_widget);
+				}
+
+				preview_widget.Show ();
+			}
+		}
+
+		private void HandleDragLeave (object o, EventArgs args)
+		{
+			preview = false;
+			preview_widget.Hide ();
+		}
+
+		public void HandleToggleNegatedCommand (object o, EventArgs args)
+		{
+			IsNegated = !IsNegated;
+		}
+
+		public void HandleRemoveCommand (object o, EventArgs args)
+		{
+			RemoveSelf ();
+		}
+
+		public void HandleAttachTagCommand (Tag t)
+		{
+			if (AttachTag != null)
+				AttachTag (t, Parent, this);
+		}
+
+		public void HandleRequireTag (object sender, EventArgs args)
+		{
+			if (RequireTag != null)
+				RequireTag (new Tag [] {this.Tag});
+		}
+
+		public void HandleUnRequireTag (object sender, EventArgs args)
+		{
+			if (UnRequireTag != null)
+				UnRequireTag (new Tag [] {this.Tag});
+		}
+
+		private const int ICON_SIZE = 24;
+
+		private const int overlay_size = (int) (.40 * ICON_SIZE);
+
+		private static TargetEntry [] tag_target_table =
+			new TargetEntry [] { DragDropTargets.TagQueryEntry };
+
+		private static TargetEntry [] tag_dest_target_table =
+			new TargetEntry [] {
+				DragDropTargets.TagListEntry,
+				DragDropTargets.TagQueryEntry
+			};
+
+		private static ArrayList focusedLiterals = new ArrayList();
+		private static ArrayList hiddenWidgets = new ArrayList();
+		private Gtk.Container container;
+		private LiteralBox handle_box;
+		private Gtk.Box box;
+		private Gtk.Image image;
+		private Gtk.Label label;
+
+		private Pixbuf normal_icon;
+		//private EventBox widget;
+		private Widget widget;
+		private Pixbuf negated_icon;
+		private static Pixbuf negated_overlay;
+		private bool isHoveredOver = false;
+
+		public delegate void NegatedToggleHandler (Literal group);
+		public event NegatedToggleHandler NegatedToggled;
+
+		public delegate void RemovingHandler (Literal group);
+		public event RemovingHandler Removing;
+
+		public delegate void RemovedHandler (Literal group);
+		public event RemovedHandler Removed;
+
+		public delegate void TagsAddedHandler (Tag[] tags, Term parent, Literal after);
+		public event TagsAddedHandler TagsAdded;
+
+		public delegate void AttachTagHandler (Tag tag, Term parent, Literal after);
+		public event AttachTagHandler AttachTag;
+
+		public delegate void TagRequiredHandler (Tag [] tags);
+		public event TagRequiredHandler RequireTag;
+
+		public delegate void TagUnRequiredHandler (Tag [] tags);
+		public event TagUnRequiredHandler UnRequireTag;
+
+		public delegate void LiteralsMovedHandler (ArrayList literals, Term parent, Literal after);
+		public event LiteralsMovedHandler LiteralsMoved;
+	}
+
+	public class TextLiteral : AbstractLiteral {
+		private string text;
+
+		public TextLiteral (Term parent, string text) : base (parent, null)
+		{
+			this.text = text;
+		}
+
+		public override string SqlCondition ()
+		{
+			return String.Format (
+				       "id {0}IN (SELECT id FROM photos WHERE base_uri LIKE '%{1}%' OR filename LIKE '%{1}%' OR description LIKE '%{1}%')",
+				       (IsNegated ? "NOT " : ""), EscapeQuotes(text)
+			       );
+		}
+
+		protected static string EscapeQuotes (string v)
+		{
+			return v == null ? String.Empty : v.Replace("'", "''");
+		}
+	}
+}
diff --git a/src/ThumbnailCache.cs b/src/Clients/MainApp/FSpot/ThumbnailCache.cs
similarity index 100%
rename from src/ThumbnailCache.cs
rename to src/Clients/MainApp/FSpot/ThumbnailCache.cs
diff --git a/src/ThumbnailGenerator.cs b/src/Clients/MainApp/FSpot/ThumbnailGenerator.cs
similarity index 100%
rename from src/ThumbnailGenerator.cs
rename to src/Clients/MainApp/FSpot/ThumbnailGenerator.cs
diff --git a/src/Clients/MainApp/FSpot/TimeAdaptor.cs b/src/Clients/MainApp/FSpot/TimeAdaptor.cs
new file mode 100644
index 0000000..5cedb38
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/TimeAdaptor.cs
@@ -0,0 +1,197 @@
+/*
+ * FSpot.TimeAdaptor.cs
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ * 	Stephane Delcroix  <stephnae at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Threading;
+using System.Collections.Generic;
+using FSpot.Core;
+using FSpot.Query;
+using Hyena;
+
+namespace FSpot {
+	public class TimeAdaptor : GroupAdaptor, FSpot.ILimitable {
+		Dictionary <int, int[]> years = new Dictionary<int, int[]> ();
+
+		public override event GlassSetHandler GlassSet;
+		public override void SetGlass (int min)
+		{
+			DateTime date = DateFromIndex (min);
+
+			if (GlassSet != null)
+				GlassSet (this, query.LookupItem (date));
+		}
+
+		public void SetLimits (int min, int max)
+		{
+			DateTime start = DateFromIndex (min);
+
+			DateTime end = DateFromIndex(max);
+
+			if (order_ascending)
+				end = end.AddMonths (1);
+			else
+				end = end.AddMonths(-1);
+
+			SetLimits (start, end);
+		}
+
+		public void SetLimits (DateTime start, DateTime end)
+		{
+			query.Range = (start > end) ? new DateRange (end, start) : new DateRange (start, end);
+		}
+
+		public override int Count ()
+		{
+			return years.Count * 12;
+		}
+
+		public override string GlassLabel (int item)
+		{
+			return String.Format ("{0} ({1})", DateFromIndex (item).ToString ("MMMM yyyy"), Value (item));
+		}
+
+		public override string TickLabel (int item)
+		{
+			DateTime start = DateFromIndex (item);
+
+			if ((start.Month == 12 && !order_ascending) || (start.Month == 1 && order_ascending))
+				return start.Year.ToString ();
+			else
+				return null;
+		}
+
+		public override int Value (int item)
+		{
+			if (order_ascending)
+				return years [startyear + item/12][item % 12];
+			else
+				return years [endyear - item/12][11 - item % 12];
+		}
+
+		public DateTime DateFromIndex (int item)
+		{
+			item = Math.Max (item, 0);
+			item = Math.Min (years.Count * 12 - 1, item);
+
+			if (order_ascending)
+				return DateFromIndexAscending (item);
+
+			return DateFromIndexDescending (item);
+		}
+
+		private DateTime DateFromIndexAscending (int item)
+		{
+			int year = startyear + item/12;
+			int month = 1 + (item % 12);
+
+			return new DateTime(year, month, 1);
+		}
+
+		private DateTime DateFromIndexDescending (int item)
+		{
+			int year = endyear - item/12;
+			int month = 12 - (item % 12);
+
+			return new DateTime (year, month, DateTime.DaysInMonth (year, month)).AddDays (1.0).AddMilliseconds (-.1);
+		}
+
+		public override int IndexFromPhoto (IBrowsableItem photo)
+		{
+			if (order_ascending)
+			       return IndexFromDateAscending (photo.Time);
+
+			return IndexFromDateDescending (photo.Time);
+		}
+
+		public int IndexFromDate (DateTime date)
+		{
+			if (order_ascending)
+				return IndexFromDateAscending(date);
+
+			return IndexFromDateDescending(date);
+		}
+
+		private int IndexFromDateAscending(DateTime date)
+		{
+			int year = date.Year;
+			int min_year = startyear;
+			int max_year = endyear;
+
+			if (year < min_year || year > max_year) {
+				Log.DebugFormat ("TimeAdaptor.IndexFromDate year out of range[{1},{2}]: {0}", year, min_year, max_year);
+				return 0;
+			}
+
+			return (year - startyear) * 12 + date.Month - 1 ;
+		}
+
+		private int IndexFromDateDescending(DateTime date)
+		{
+			int year = date.Year;
+			int min_year = startyear;
+			int max_year = endyear;
+
+			if (year < min_year || year > max_year) {
+				Log.DebugFormat ("TimeAdaptor.IndexFromPhoto year out of range[{1},{2}]: {0}", year, min_year, max_year);
+				return 0;
+			}
+
+			return 12 * (endyear - year) + 12 - date.Month;
+		}
+
+		public override IBrowsableItem PhotoFromIndex (int item)
+		{
+			DateTime start = DateFromIndex (item);
+			return query [query.LookupItem (start)];
+
+		}
+
+		public override event ChangedHandler Changed;
+
+		uint timer;
+		protected override void Reload ()
+		{
+			timer = Log.DebugTimerStart ();
+			Thread reload = new Thread (new ThreadStart (DoReload));
+			reload.IsBackground = true;
+			reload.Priority = ThreadPriority.Lowest;
+			reload.Start ();
+		}
+
+		int startyear = Int32.MaxValue, endyear = Int32.MinValue;
+		void DoReload ()
+		{
+			Thread.Sleep (200);
+			Dictionary <int, int[]> years_tmp = query.Store.PhotosPerMonth ();
+			int startyear_tmp = Int32.MaxValue;
+			int endyear_tmp = Int32.MinValue;
+
+			foreach (int year in years_tmp.Keys) {
+				startyear_tmp = Math.Min (year, startyear_tmp);
+				endyear_tmp = Math.Max (year, endyear_tmp);
+			}
+
+			ThreadAssist.ProxyToMain (() => {
+				years = years_tmp;
+				startyear = startyear_tmp;
+				endyear = endyear_tmp;
+
+				if (Changed != null)
+					Changed (this);
+			});
+
+			Log.DebugTimerPrint (timer, "TimeAdaptor REAL Reload took {0}");
+		}
+
+		public TimeAdaptor (PhotoQuery query, bool order_ascending)
+			: base (query, order_ascending)
+		{ }
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/TipWindow.cs b/src/Clients/MainApp/FSpot/TipWindow.cs
new file mode 100644
index 0000000..b952df6
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/TipWindow.cs
@@ -0,0 +1,22 @@
+using Gtk;
+using Gdk;
+
+namespace FSpot {
+	internal class TipWindow : Gtk.Window {
+		public TipWindow () : base (Gtk.WindowType.Popup)
+		{
+			Name = "gtk-tooltips";
+			AppPaintable = true;
+			BorderWidth = 4;
+		}
+
+		protected override bool OnExposeEvent (Gdk.EventExpose args)
+		{
+			Gtk.Style.PaintFlatBox (Style, GdkWindow, State, ShadowType.Out,
+						args.Area, this, "tooltip", Allocation.X, Allocation.Y,
+						Allocation.Width, Allocation.Height);
+
+			return base.OnExposeEvent (args);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/UriCollection.cs b/src/Clients/MainApp/FSpot/UriCollection.cs
new file mode 100644
index 0000000..96556d5
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/UriCollection.cs
@@ -0,0 +1,159 @@
+/*
+ * UriCollection.cs
+ *
+ * Author(s):
+ *	Larry Ewing  (lewing at novell.com)
+ *	Stephane Delcroix  (stephane at delcroix.org)
+ *
+ * Copyright (c) 2005-2009 Novell, Inc.
+ * Copyright (c) 2007 Stephane Delcroix
+ *
+ * This is free software. See COPYING for details
+ */
+
+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;
+
+namespace FSpot {
+	public class UriCollection : PhotoList {
+		public UriCollection () : base (new IBrowsableItem [0])
+		{
+		}
+
+		public UriCollection (System.IO.FileInfo [] files) : this ()
+		{
+			LoadItems (files);
+		}
+
+		public UriCollection (SafeUri [] uri) : this ()
+		{
+			LoadItems (uri);
+		}
+
+		public void Add (SafeUri uri)
+		{
+			if (ImageFile.HasLoader (uri)) {
+				//Console.WriteLine ("using image loader {0}", uri.ToString ());
+				Add (new FileBrowsableItem (uri));
+			} else {
+				GLib.FileInfo info = FileFactory.NewForUri (uri).QueryInfo ("standard::type,standard::content-type", FileQueryInfoFlags.None, null);
+
+				if (info.FileType == FileType.Directory)
+					new DirectoryLoader (this, uri);
+				else {
+					// FIXME ugh...
+					if (info.ContentType == "text/xml"
+					 || info.ContentType == "application/xml"
+					 || info.ContentType == "application/rss+xml"
+					 || info.ContentType == "text/plain") {
+						new RssLoader (this, uri);
+					}
+				}
+			}
+		}
+
+		public void LoadItems (SafeUri [] uris)
+		{
+			foreach (SafeUri uri in uris) {
+				Add (uri);
+			}
+		}
+
+		private class RssLoader
+		{
+			public RssLoader (UriCollection collection, SafeUri uri)
+			{
+				XmlDocument doc = new XmlDocument ();
+				doc.Load (uri.ToString ());
+				XmlNamespaceManager ns = new XmlNamespaceManager (doc.NameTable);
+				ns.AddNamespace ("media", "http://search.yahoo.com/mrss/");
+				ns.AddNamespace ("pheed", "http://www.pheed.com/pheed/");
+				ns.AddNamespace ("apple", "http://www.apple.com/ilife/wallpapers");
+
+				ArrayList items = new ArrayList ();
+				XmlNodeList list = doc.SelectNodes ("/rss/channel/item/media:content", ns);
+				foreach (XmlNode item in list) {
+					SafeUri image_uri = new SafeUri (item.Attributes ["url"].Value);
+					Hyena.Log.DebugFormat ("flickr uri = {0}", image_uri.ToString ());
+					items.Add (new FileBrowsableItem (image_uri));
+				}
+
+				if (list.Count < 1) {
+					list = doc.SelectNodes ("/rss/channel/item/pheed:imgsrc", ns);
+					foreach (XmlNode item in list) {
+						SafeUri image_uri = new SafeUri (item.InnerText.Trim ());
+						Hyena.Log.DebugFormat ("pheed uri = {0}", uri);
+						items.Add (new FileBrowsableItem (image_uri));
+					}
+				}
+
+				if (list.Count < 1) {
+					list = doc.SelectNodes ("/rss/channel/item/apple:image", ns);
+					foreach (XmlNode item in list) {
+						SafeUri image_uri = new SafeUri (item.InnerText.Trim ());
+						Hyena.Log.DebugFormat ("apple uri = {0}", uri);
+						items.Add (new FileBrowsableItem (image_uri));
+					}
+				}
+				collection.Add (items.ToArray (typeof (FileBrowsableItem)) as FileBrowsableItem []);
+			}
+		}
+
+		private class DirectoryLoader
+		{
+			UriCollection collection;
+			GLib.File file;
+
+			public DirectoryLoader (UriCollection collection, SafeUri uri)
+			{
+				this.collection = collection;
+				file = FileFactory.NewForUri (uri);
+				file.EnumerateChildrenAsync ("standard::*",
+							     FileQueryInfoFlags.None,
+							     500,
+							     null,
+							     InfoLoaded);
+
+			}
+
+			void InfoLoaded (GLib.Object o, GLib.AsyncResult res)
+			{
+				List<FileBrowsableItem> items = new List<FileBrowsableItem> ();
+				foreach (GLib.FileInfo info in file.EnumerateChildrenFinish (res)) {
+					SafeUri i = new SafeUri (file.GetChild (info.Name).Uri);
+					Hyena.Log.DebugFormat ("testing uri = {0}", i);
+					if (ImageFile.HasLoader (i))
+						items.Add (new FileBrowsableItem (i));
+				}
+				ThreadAssist.ProxyToMain (() => {
+					collection.Add (items.ToArray ());
+				});
+			}
+		}
+
+		protected void LoadItems (System.IO.FileInfo [] files)
+		{
+			List<IBrowsableItem> items = new List<IBrowsableItem> ();
+			foreach (var f in files) {
+				if (ImageFile.HasLoader (new SafeUri (f.FullName))) {
+					Hyena.Log.Debug (f.FullName);
+					items.Add (new FileBrowsableItem (new SafeUri (f.FullName)));
+				}
+			}
+
+			list = items;
+			this.Reload ();
+		}
+	}
+
+
+}
diff --git a/src/Clients/MainApp/FSpot/XScreenSaverSlide.cs b/src/Clients/MainApp/FSpot/XScreenSaverSlide.cs
new file mode 100644
index 0000000..82f1980
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/XScreenSaverSlide.cs
@@ -0,0 +1,61 @@
+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 {
+		public const string ScreenSaverEnviroment = "XSCREENSAVER_WINDOW";
+
+		public XScreenSaverSlide () : base (String.Empty)
+		{
+		}
+
+		protected override void OnRealized ()
+		{
+			string env = Environment.GetEnvironmentVariable (ScreenSaverEnviroment);
+
+			if (env != null) {
+				try {
+					env = env.ToLower ();
+
+					if (env.StartsWith ("0x"))
+						env = env.Substring (2);
+
+					uint xid = UInt32.Parse (env, System.Globalization.NumberStyles.HexNumber);
+
+					GdkWindow = Gdk.Window.ForeignNew (xid);
+					Style.Attach (GdkWindow);
+					GdkWindow.Events = EventMask.ExposureMask
+						| EventMask.StructureMask
+						| EventMask.EnterNotifyMask
+						| EventMask.LeaveNotifyMask
+						| EventMask.FocusChangeMask;
+
+					Style.SetBackground (GdkWindow, Gtk.StateType.Normal);
+					GdkWindow.SetDecorations ((Gdk.WMDecoration) 0);
+					GdkWindow.UserData = this.Handle;
+					SetFlag (WidgetFlags.Realized);
+					SizeRequest ();
+					Gdk.Rectangle geom;
+					int depth;
+					GdkWindow.GetGeometry (out geom.X, out geom.Y, out geom.Width, out geom.Height, out depth);
+					SizeAllocate (new Gdk.Rectangle (geom.X, geom.Y, geom.Width, geom.Height));
+					Resize (geom.Width, geom.Height);
+					return;
+				} catch (System.Exception e) {
+					Hyena.Log.Exception (e);
+				}
+			} else {
+				Hyena.Log.DebugFormat ("{0} not set, falling back to window", ScreenSaverEnviroment);
+			}
+
+			SetSizeRequest (640, 480);
+			base.OnRealized ();
+		}
+	}
+}
diff --git a/src/Clients/MainApp/FSpot/main.cs b/src/Clients/MainApp/FSpot/main.cs
new file mode 100644
index 0000000..24b541c
--- /dev/null
+++ b/src/Clients/MainApp/FSpot/main.cs
@@ -0,0 +1,364 @@
+using Gtk;
+using System;
+using System.Reflection;
+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;
+
+namespace FSpot
+{
+	public static class Driver
+	{
+		private static void ShowVersion ()
+		{
+			Console.WriteLine ("F-Spot {0}", Defines.VERSION);
+			Console.WriteLine ("http://f-spot.org");
+			Console.WriteLine ("\t(c)2003-2009, Novell Inc");
+			Console.WriteLine ("\t(c)2009 Stephane Delcroix");
+			Console.WriteLine("Personal photo management for the GNOME Desktop");
+		}
+
+		private static void ShowAssemblyVersions ()
+		{
+			ShowVersion ();
+			Console.WriteLine ();
+			Console.WriteLine ("Mono/.NET Version: " + Environment.Version.ToString ());
+			Console.WriteLine (String.Format ("{0}Assembly Version Information:", Environment.NewLine));
+
+			foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies ())
+			{
+				AssemblyName name = asm.GetName ();
+				Console.WriteLine ("\t" + name.Name + " (" + name.Version.ToString () + ")");
+			}
+		}
+
+		private static void ShowHelp ()
+		{
+			Console.WriteLine ("Usage: f-spot [options...] [files|URIs...]");
+			Console.WriteLine ();
+
+			Hyena.CommandLine.Layout commands = new Hyena.CommandLine.Layout (
+				new LayoutGroup ("help", "Help Options",
+					new LayoutOption ("help", "Show this help"),
+					new LayoutOption ("help-options", "Show command line options"),
+					new LayoutOption ("help-all", "Show all options"),
+					new LayoutOption ("version", "Show version information"),
+					new LayoutOption ("versions", "Show detailed version information")),
+				new LayoutGroup ("options", "General options",
+					new LayoutOption ("basedir=DIR", "Path to the photo database folder"),
+					new LayoutOption ("import=URI", "Import from the given uri"),
+					new LayoutOption ("photodir=DIR", "Default import folder"),
+					new LayoutOption ("view ITEM", "View file(s) or directories"),
+					new LayoutOption ("shutdown", "Shut down a running instance of F-Spot"),
+					new LayoutOption ("slideshow", "Display a slideshow"),
+					new LayoutOption ("debug", "Run in debug mode")));
+
+			if (ApplicationContext.CommandLine.Contains ("help-all")) {
+				Console.WriteLine (commands);
+				return;
+			}
+
+			List<string> errors = null;
+			foreach (KeyValuePair<string, string> argument in ApplicationContext.CommandLine.Arguments) {
+				switch (argument.Key) {
+					case "help": Console.WriteLine (commands.ToString ("help")); break;
+					case "help-options": Console.WriteLine (commands.ToString ("options")); break;
+					default:
+						if (argument.Key.StartsWith ("help")) {
+							(errors ?? (errors = new List<string> ())).Add (argument.Key);
+						}
+						break;
+				}
+			}
+
+			if (errors != null) {
+				Console.WriteLine (commands.LayoutLine (String.Format (
+					"The following help arguments are invalid: {0}",
+					Hyena.Collections.CollectionExtensions.Join (errors, "--", null, ", "))));
+			}
+		}
+
+		static string [] FixArgs (string [] args)
+		{
+			// Makes sure command line arguments are parsed backwards compatible.
+			var outargs = new List<string> ();
+			for (int i = 0; i < args.Length; i++) {
+				switch (args [i]) {
+					case "-h": case "-help": case "-usage":
+						outargs.Add ("--help");
+						break;
+					case "-V": case "-version":
+						outargs.Add ("--version");
+						break;
+					case "-versions":
+						outargs.Add ("--versions");
+						break;
+					case "-shutdown":
+						outargs.Add ("--shutdown");
+						break;
+					case "-b": case "-basedir": case "--basedir":
+						outargs.Add ("--basedir=" + (i + 1 == args.Length ? String.Empty : args [++i]));
+						break;
+					case "-p": case "-photodir": case "--photodir":
+						outargs.Add ("--photodir=" + (i + 1 == args.Length ? String.Empty : args [++i]));
+						break;
+					case "-i": case "-import": case "--import":
+						outargs.Add ("--import=" + (i + 1 == args.Length ? String.Empty : args [++i]));
+						break;
+					case "-v": case "-view":
+						outargs.Add ("--view");
+						break;
+					case "-slideshow":
+						outargs.Add ("--slideshow");
+						break;
+					default:
+						outargs.Add (args [i]);
+						break;
+				}
+			}
+			return outargs.ToArray ();
+		}
+
+		static int Main (string [] args)
+		{
+			args = FixArgs (args);
+
+			ApplicationContext.ApplicationName = "F-Spot";
+			ApplicationContext.TrySetProcessName (Defines.PACKAGE);
+
+			Paths.ApplicationName = "f-spot";
+			ThreadAssist.InitializeMainThread ();
+			ThreadAssist.ProxyToMainHandler = RunIdle;
+			XdgThumbnailSpec.DefaultLoader = (uri) => {
+				using (var file = ImageFile.Create (uri))
+					return file.Load ();
+			};
+
+			// Options and Option parsing
+			bool shutdown = false;
+			bool view = false;
+			bool slideshow = false;
+			bool import = false;
+
+			GLib.GType.Init ();
+			Catalog.Init ("f-spot", Defines.LOCALE_DIR);
+
+			FSpot.Core.Global.PhotoUri = new SafeUri (Preferences.Get<string> (Preferences.STORAGE_PATH));
+
+			ApplicationContext.CommandLine = new CommandLineParser (args, 0);
+
+			if (ApplicationContext.CommandLine.ContainsStart ("help")) {
+				ShowHelp ();
+				return 0;
+			}
+
+			if (ApplicationContext.CommandLine.Contains ("version")) {
+				ShowVersion ();
+				return 0;
+			}
+
+			if (ApplicationContext.CommandLine.Contains ("versions")) {
+				ShowAssemblyVersions ();
+				return 0;
+			}
+
+			if (ApplicationContext.CommandLine.Contains ("shutdown")) {
+				Log.Information ("Shutting down existing F-Spot server...");
+				shutdown = true;
+			}
+
+			if (ApplicationContext.CommandLine.Contains ("slideshow")) {
+				Log.Information ("Running F-Spot in slideshow mode.");
+				slideshow = true;
+			}
+
+			if (ApplicationContext.CommandLine.Contains ("basedir")) {
+				string dir = ApplicationContext.CommandLine ["basedir"];
+
+				if (!string.IsNullOrEmpty (dir))
+				{
+					FSpot.Core.Global.BaseDirectory = dir;
+					Log.InformationFormat ("BaseDirectory is now {0}", dir);
+				} else {
+					Log.Error ("f-spot: -basedir option takes one argument");
+					return 1;
+				}
+			}
+
+			if (ApplicationContext.CommandLine.Contains ("photodir")) {
+				string dir = ApplicationContext.CommandLine ["photodir"];
+
+				if (!string.IsNullOrEmpty (dir))
+				{
+					FSpot.Core.Global.PhotoUri = new SafeUri (dir);
+					Log.InformationFormat ("PhotoDirectory is now {0}", dir);
+				} else {
+					Log.Error ("f-spot: -photodir option takes one argument");
+					return 1;
+				}
+			}
+
+			if (ApplicationContext.CommandLine.Contains ("import"))
+				import = true;
+
+			if (ApplicationContext.CommandLine.Contains ("view"))
+				view = true;
+
+			if (ApplicationContext.CommandLine.Contains ("debug")) {
+				Log.Debugging = true;
+				// Debug GdkPixbuf critical warnings
+				GLib.LogFunc logFunc = new GLib.LogFunc (GLib.Log.PrintTraceLogFunction);
+				GLib.Log.SetLogHandler ("GdkPixbuf", GLib.LogLevelFlags.Critical, logFunc);
+
+				// Debug Gtk critical warnings
+				GLib.Log.SetLogHandler ("Gtk", GLib.LogLevelFlags.Critical, logFunc);
+
+				// Debug GLib critical warnings
+				GLib.Log.SetLogHandler ("GLib", GLib.LogLevelFlags.Critical, logFunc);
+
+				//Debug GLib-GObject critical warnings
+				GLib.Log.SetLogHandler ("GLib-GObject", GLib.LogLevelFlags.Critical, logFunc);
+
+				GLib.Log.SetLogHandler ("GLib-GIO", GLib.LogLevelFlags.Critical, logFunc);
+			}
+
+			// Validate command line options
+			if ((import && (view || shutdown || slideshow)) ||
+				(view && (shutdown || slideshow)) ||
+				(shutdown && slideshow))
+			{
+				Log.Error ("Can't mix -import, -view, -shutdown or -slideshow");
+				return 1;
+			}
+
+			InitializeAddins ();
+
+			// Gtk initialization
+			Gtk.Application.Init (Defines.PACKAGE, ref args);
+
+			// init web proxy globally
+			Platform.WebProxy.Init ();
+
+			if (File.Exists (Preferences.Get<string> (Preferences.GTK_RC))) {
+				if (File.Exists (Path.Combine (FSpot.Core.Global.BaseDirectory, "gtkrc")))
+					Gtk.Rc.AddDefaultFile (Path.Combine (FSpot.Core.Global.BaseDirectory, "gtkrc"));
+
+				FSpot.Core.Global.DefaultRcFiles = Gtk.Rc.DefaultFiles;
+				Gtk.Rc.AddDefaultFile (Preferences.Get<string> (Preferences.GTK_RC));
+				Gtk.Rc.ReparseAllForSettings (Gtk.Settings.Default, true);
+			}
+
+			try {
+				Gtk.Window.DefaultIconList = new Gdk.Pixbuf [] {
+					GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, "f-spot", 16, (Gtk.IconLookupFlags)0),
+					GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, "f-spot", 22, (Gtk.IconLookupFlags)0),
+					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 {}
+
+			CleanRoomStartup.Startup (Startup);
+
+			return 0;
+		}
+
+		static void InitializeAddins ()
+		{
+			uint timer = Log.InformationTimerStart ("Initializing Mono.Addins");
+			try {
+				UpdatePlugins ();
+			} catch (Exception e) {
+				Log.Debug ("Failed to initialize plugins, will remove addin-db and try again.");
+				Log.DebugException (e);
+				ResetPluginDb ();
+			}
+			SetupService setupService = new SetupService (AddinManager.Registry);
+			foreach (AddinRepository repo in setupService.Repositories.GetRepositories ()) {
+				if (repo.Url.StartsWith ("http://addins.f-spot.org/")) {
+					Log.InformationFormat ("Unregistering {0}", repo.Url);
+					setupService.Repositories.RemoveRepository (repo.Url);
+				}
+			}
+			Log.DebugTimerPrint (timer, "Mono.Addins Initialization took {0}");
+		}
+
+		static void UpdatePlugins ()
+		{
+			AddinManager.Initialize (FSpot.Core.Global.BaseDirectory);
+			AddinManager.Registry.Update (null);
+		}
+
+		static void ResetPluginDb ()
+		{
+			// Nuke addin-db
+			var directory = GLib.FileFactory.NewForUri (new SafeUri (FSpot.Core.Global.BaseDirectory));
+			var list = directory.EnumerateChildren ("standard::name", GLib.FileQueryInfoFlags.None, null);
+			foreach (GLib.FileInfo info in list) {
+				if (info.Name.StartsWith ("addin-db-")) {
+					var file = GLib.FileFactory.NewForPath (Path.Combine (directory.Path, info.Name));
+					file.DeleteRecursive ();
+				}
+			}
+
+			// Try again
+			UpdatePlugins ();
+		}
+
+		static void Startup ()
+		{
+			if (ApplicationContext.CommandLine.Contains ("slideshow"))
+				App.Instance.Slideshow (null);
+			else if (ApplicationContext.CommandLine.Contains ("shutdown"))
+				App.Instance.Shutdown ();
+			else if (ApplicationContext.CommandLine.Contains ("view")) {
+				if (ApplicationContext.CommandLine.Files.Count == 0) {
+					Log.Error ("f-spot: -view option takes at least one argument");
+					System.Environment.Exit (1);
+				}
+
+				var list = new UriList ();
+
+				foreach (var f in ApplicationContext.CommandLine.Files)
+					list.AddUnknown (f);
+
+				if (list.Count == 0) {
+					ShowHelp ();
+					System.Environment.Exit (1);
+				}
+
+				App.Instance.View (list);
+			} else if (ApplicationContext.CommandLine.Contains ("import")) {
+				string dir = ApplicationContext.CommandLine ["import"];
+
+				if (string.IsNullOrEmpty (dir)) {
+					Log.Error ("f-spot: -import option takes one argument");
+					System.Environment.Exit (1);
+				}
+
+				App.Instance.Import (dir);
+			} else
+				App.Instance.Organize ();
+
+			if (!App.Instance.IsRunning)
+				Gtk.Application.Run ();
+		}
+
+		public static void RunIdle (InvokeHandler handler)
+		{
+			GLib.Idle.Add (delegate { handler (); return false; });
+		}
+	}
+}
diff --git a/src/Clients/MainApp/ImageLoaderThread.cs b/src/Clients/MainApp/ImageLoaderThread.cs
new file mode 100644
index 0000000..4d0bd82
--- /dev/null
+++ b/src/Clients/MainApp/ImageLoaderThread.cs
@@ -0,0 +1,306 @@
+/*
+ * ImageLoaderThread.cs
+ *
+ * Author(s):
+ *	Ettore Perazzoli <ettore at perazzoli.org>
+ *	Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details
+ */
+using Gdk;
+using Gtk;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System;
+
+using Hyena;
+
+using FSpot.Utils;
+using FSpot.Imaging;
+
+public class ImageLoaderThread {
+
+	// Types.
+
+	public class RequestItem {
+		/* The uri to the image.  */
+		public SafeUri Uri { get; set; }
+
+		/* Order value; requests with a lower value get performed first.  */
+		public int Order { get; set; }
+
+		/* The pixbuf obtained from the operation.  */
+        private Pixbuf result;
+		public Pixbuf Result {
+            get {
+				if (result == null) return null;
+				return result.ShallowCopy ();
+			}
+            set { result = value; }
+        }
+
+		/* the maximium size both must be greater than zero if either is */
+		public int Width { get; set; }
+		public int Height { get; set; }
+
+		public RequestItem (SafeUri uri, int order, int width, int height) {
+			this.Uri = uri;
+			this.Order = order;
+			this.Width = width;
+			this.Height = height;
+			if ((width <= 0 && height > 0) || (height <= 0 && width > 0))
+				throw new System.Exception ("Invalid arguments");
+		}
+
+        ~RequestItem () {
+            if (result != null)
+                result.Dispose ();
+            result = null;
+        }
+	}
+
+
+	// Private members.
+    static List<ImageLoaderThread> instances = new List<ImageLoaderThread> ();
+
+	/* The thread used to handle the requests.  */
+	private Thread worker_thread;
+
+	/* The request queue; it's shared between the threads so it
+	   needs to be locked prior to access.  */
+	private ArrayList queue;
+
+	/* A dict of all the requests; note that the current request
+	   isn't in the dict.  */
+	Dictionary<SafeUri, RequestItem> requests_by_uri;
+
+	/* Current request.  Request currently being handled by the
+	   auxiliary thread.  Should be modified only by the auxiliary
+	   thread (the GTK thread can only read it).  */
+	private RequestItem current_request;
+
+	/* The queue of processed requests.  */
+	private Queue processed_requests;
+
+	/* This is used by the helper thread to notify the main GLib
+	   thread that there are pending items in the
+	   `processed_requests' queue.  */
+	ThreadNotify pending_notify;
+
+	/* Whether a notification is pending on `pending_notify'
+	   already or not.  */
+	private bool pending_notify_notified;
+
+	volatile bool should_cancel = false;
+
+	// Public API.
+
+	public delegate void PixbufLoadedHandler (ImageLoaderThread loader, RequestItem result);
+	public event PixbufLoadedHandler OnPixbufLoaded;
+
+	public ImageLoaderThread ()
+	{
+		queue = new ArrayList ();
+		requests_by_uri = new Dictionary<SafeUri, RequestItem> ();
+//		requests_by_path = Hashtable.Synchronized (new Hashtable ());
+		processed_requests = new Queue ();
+
+		pending_notify = new ThreadNotify (new Gtk.ReadyEvent (HandleProcessedRequests));
+
+        instances.Add (this);
+	}
+
+    void StartWorker ()
+    {
+        if (worker_thread != null)
+            return;
+
+		should_cancel = false;
+		worker_thread = new Thread (new ThreadStart (WorkerThread));
+		worker_thread.Start ();
+    }
+
+	int block_count;
+	public void PushBlock ()
+	{
+		System.Threading.Interlocked.Increment (ref block_count);
+	}
+
+	public void PopBlock ()
+	{
+		if (System.Threading.Interlocked.Decrement (ref block_count) == 0) {
+			lock (queue) {
+				Monitor.Pulse (queue);
+			}
+		}
+	}
+
+	public void Cleanup ()
+	{
+		should_cancel = true;
+		if (worker_thread != null) {
+			lock (queue) {
+				Monitor.Pulse (queue);
+			}
+			worker_thread.Join ();
+		}
+		worker_thread = null;
+	}
+
+    public static void CleanAll ()
+    {
+        foreach (var thread in instances)
+            thread.Cleanup ();
+    }
+
+	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))
+				Monitor.Pulse (queue);
+		}
+	}
+
+	public void Cancel (SafeUri uri)
+	{
+		lock (queue) {
+			RequestItem r = requests_by_uri [uri];
+			if (r != null) {
+				requests_by_uri.Remove (uri);
+				queue.Remove (r);
+			}
+		}
+	}
+
+	// Private utility methods.
+
+	protected virtual void ProcessRequest (RequestItem request)
+	{
+		Pixbuf orig_image;
+		try {
+			using (var img = ImageFile.Create (request.Uri)) {
+				if (request.Width > 0) {
+					orig_image = img.Load (request.Width, request.Height);
+				} else {
+					orig_image = img.Load ();
+				}
+			}
+		} catch (GLib.GException e){
+			Log.Exception (e);
+			return;
+		}
+
+		if (orig_image == null)
+			return;
+
+		request.Result = orig_image;
+	}
+
+	/* Insert the request in the queue, return TRUE if the queue actually grew.
+	   NOTE: Lock the queue before calling.  */
+
+	private bool InsertRequest (SafeUri uri, int order, int width, int height)
+	{
+        StartWorker ();
+
+		/* Check if this is the same as the request currently being processed.  */
+		lock(processed_requests) {
+			if (current_request != null && current_request.Uri == uri)
+				return false;
+		}
+		/* Check if a request for this path has already been queued.  */
+		RequestItem existing_request;
+		if (requests_by_uri.TryGetValue (uri, out existing_request)) {
+			/* FIXME: At least for now, this shouldn't happen.  */
+			if (existing_request.Order != order)
+				Log.WarningFormat ("BUG: Filing another request of order {0} (previously {1}) for `{2}'",
+						   order, existing_request.Order, uri);
+
+			queue.Remove (existing_request);
+			queue.Add (existing_request);
+			return false;
+		}
+
+		/* New request, just put it on the queue with the right order.  */
+		RequestItem new_request = new RequestItem (uri, order, width, height);
+
+		queue.Add (new_request);
+
+		lock (queue) {
+			requests_by_uri.Add (uri, new_request);
+		}
+		return true;
+	}
+
+	/* The worker thread's main function.  */
+	private void WorkerThread ()
+	{
+        Log.Debug (this.ToString (), "Worker starting");
+		try {
+			while (!should_cancel) {
+				lock (processed_requests) {
+					if (current_request != null) {
+						processed_requests.Enqueue (current_request);
+
+						if (! pending_notify_notified) {
+							pending_notify.WakeupMain ();
+							pending_notify_notified = true;
+						}
+
+						current_request = null;
+					}
+				}
+
+				lock (queue) {
+
+					while ((queue.Count == 0 || block_count > 0) && !should_cancel)
+						Monitor.Wait (queue);
+
+					if (should_cancel)
+						return;
+
+					int pos = queue.Count - 1;
+
+					current_request = queue [pos] as RequestItem;
+					queue.RemoveAt (pos);
+					requests_by_uri.Remove (current_request.Uri);
+				}
+
+				ProcessRequest (current_request);
+			}
+		} catch (ThreadAbortException) {
+			//Aborting
+		}
+	}
+
+	protected virtual void EmitLoaded (Queue results)
+	{
+		if (OnPixbufLoaded != null) {
+			foreach (RequestItem r in results)
+				OnPixbufLoaded (this, r);
+		}
+	}
+
+	private void HandleProcessedRequests ()
+	{
+		Queue results;
+
+
+		lock (processed_requests) {
+			/* Copy the queued items out of the shared queue so we hold the lock for
+			   as little time as possible.  */
+			results = processed_requests.Clone() as Queue;
+			processed_requests.Clear ();
+
+			pending_notify_notified = false;
+		}
+
+		EmitLoaded (results);
+	}
+}
diff --git a/src/Clients/MainApp/Makefile.am b/src/Clients/MainApp/Makefile.am
new file mode 100644
index 0000000..fc0c8e9
--- /dev/null
+++ b/src/Clients/MainApp/Makefile.am
@@ -0,0 +1,205 @@
+ASSEMBLY = f-spot
+TARGET = exe
+LINK = $(REF_FSPOT)
+ASSEMBLY_BUILD_FLAGS = -unsafe
+
+SOURCES =  \
+	DependentListStore.cs \
+	FSpot.ColorAdjustment/Adjustment.cs \
+	FSpot.ColorAdjustment/AutoStretch.cs \
+	FSpot.ColorAdjustment/Desaturate.cs \
+	FSpot.ColorAdjustment/FullColorAdjustment.cs \
+	FSpot.ColorAdjustment/SepiaTone.cs \
+	FSpot.Database/Db.cs \
+	FSpot.Database/DbException.cs \
+	FSpot.Database/DbStore.cs \
+	FSpot.Database/FSpotDatabaseConnection.cs \
+	FSpot.Database/Tests/UpdaterTests.cs \
+	FSpot.Database/Updater.cs \
+	FSpot.Editors/AutoStretchEditor.cs \
+	FSpot.Editors/ColorEditor.cs \
+	FSpot.Editors/CropEditor.cs \
+	FSpot.Editors/DesaturateEditor.cs \
+	FSpot.Editors/Editor.cs \
+	FSpot.Editors/RedEyeEditor.cs \
+	FSpot.Editors/SepiaEditor.cs \
+	FSpot.Editors/SoftFocusEditor.cs \
+	FSpot.Editors/TiltEditor.cs \
+	FSpot.Extensions/CommandMenuItemNode.cs \
+	FSpot.Extensions/ComplexMenuItemNode.cs \
+	FSpot.Extensions/ExportMenuItemNode.cs \
+	FSpot.Extensions/ICommand.cs \
+	FSpot.Extensions/IExporter.cs \
+	FSpot.Extensions/IMenuGenerator.cs \
+	FSpot.Extensions/IService.cs \
+	FSpot.Extensions/MenuNode.cs \
+	FSpot.Extensions/PhotoSelectionCondition.cs \
+	FSpot.Extensions/PopupCommands.cs \
+	FSpot.Extensions/ServiceNode.cs \
+	FSpot.Extensions/SidebarPage.cs \
+	FSpot.Extensions/SidebarPageNode.cs \
+	FSpot.Extensions/TransitionNode.cs \
+	FSpot.Extensions/ViewModeCondition.cs \
+	FSpot.Filters/ChmodFilter.cs \
+	FSpot.Filters/FilterRequest.cs \
+	FSpot.Filters/FilterSet.cs \
+	FSpot.Filters/IFilter.cs \
+	FSpot.Filters/JpegFilter.cs \
+	FSpot.Filters/ResizeFilter.cs \
+	FSpot.Filters/SharpFilter.cs \
+	FSpot.Filters/UniqueNameFilter.cs \
+	FSpot.Filters/WhiteListFilter.cs \
+	FSpot.Imaging/Ciff.cs \
+	FSpot.Imaging/DCRawFile.cs \
+	FSpot.Imaging/ImageFile.cs \
+	FSpot.Imaging/InternalProcess.cs \
+	FSpot.Imaging/IOChannel.cs \
+	FSpot.Imaging/RafFile.cs \
+	FSpot.Imaging/Tests/ImageFileTests.cs \
+	FSpot.Imaging/Tiff.cs \
+	FSpot.Import/FileImportSource.cs \
+	FSpot.Import/ImportController.cs \
+	FSpot.Import/ImportSource.cs \
+	FSpot.Import/MetadataImporter.cs \
+	FSpot.Jobs/CalculateHashJob.cs \
+	FSpot.Jobs/SyncMetadataJob.cs \
+	FSpot.Loaders/AreaPreparedEventArgs.cs \
+	FSpot.Loaders/AreaUpdatedEventArgs.cs \
+	FSpot.Loaders/GdkImageLoader.cs \
+	FSpot.Loaders/IImageLoader.cs \
+	FSpot.Loaders/ImageLoader.cs \
+	FSpot.Query/HiddenTag.cs \
+	FSpot.UI.Dialog/AboutDialog.cs \
+	FSpot.UI.Dialog/AdjustTimeDialog.cs \
+	FSpot.UI.Dialog/BuilderDialog.cs \
+	FSpot.UI.Dialog/DateRangeDialog.cs \
+	FSpot.UI.Dialog/EditExceptionDialog.cs \
+	FSpot.UI.Dialog/EditTagDialog.cs \
+	FSpot.UI.Dialog/EditTagIconDialog.cs \
+	FSpot.UI.Dialog/GladeDialog.cs \
+	FSpot.UI.Dialog/ImportDialog.cs \
+	FSpot.UI.Dialog/ImportFailureDialog.cs \
+	FSpot.UI.Dialog/LastRollDialog.cs \
+	FSpot.UI.Dialog/PreferenceDialog.cs \
+	FSpot.UI.Dialog/ProgressDialog.cs \
+	FSpot.UI.Dialog/RatingFilterDialog.cs \
+	FSpot.UI.Dialog/RepairDbDialog.cs \
+	FSpot.UI.Dialog/RepairDialog.cs \
+	FSpot.UI.Dialog/SelectionRatioDialog.cs \
+	FSpot.UI.Dialog/TagSelectionDialog.cs \
+	FSpot.UI.Dialog/ThreadProgressDialog.cs \
+	FSpot.Widgets/CellRendererTextProgress.cs \
+	FSpot.Widgets/CompositeUtils.cs \
+	FSpot.Widgets/EditorPage.cs \
+	FSpot.Widgets/Filmstrip.cs \
+	FSpot.Widgets/FindBar.cs \
+	FSpot.Widgets/FolderTreeModel.cs \
+	FSpot.Widgets/FolderTreePage.cs \
+	FSpot.Widgets/FolderTreeView.cs \
+	FSpot.Widgets/IconView.cs \
+	FSpot.Widgets/ImageInfo.cs \
+	FSpot.Widgets/InfoBox.cs \
+	FSpot.Widgets/Loupe.cs \
+	FSpot.Widgets/MetadataDisplay.cs \
+	FSpot.Widgets/PhotoImageView.cs \
+	FSpot.Widgets/PreviewPopup.cs \
+	FSpot.Widgets/QueryView.cs \
+	FSpot.Widgets/RatingMenuItem.cs \
+	FSpot.Widgets/ScalingIconView.cs \
+	FSpot.Widgets/Sharpener.cs \
+	FSpot.Widgets/Sidebar.cs \
+	FSpot.Widgets/SlideShow.cs \
+	FSpot.Widgets/SoftFocus.cs \
+	FSpot.Widgets/TagEntry.cs \
+	FSpot.Widgets/TagMenu.cs \
+	FSpot.Widgets/TagView.cs \
+	FSpot.Widgets/Tests/FindBarTests.cs \
+	FSpot.Widgets/TrayView.cs \
+	FSpot.Widgets/ViewContext.cs \
+	FSpot/Accelerometer.cs \
+	FSpot/App.cs \
+	FSpot/BitConverter.cs \
+	FSpot/ColorManagement.cs \
+	FSpot/ControlOverlay.cs \
+	FSpot/DragDropTargets.cs \
+	FSpot/ExportStore.cs \
+	FSpot/Fader.cs \
+	FSpot/FolderQueryWidget.cs \
+	FSpot/FullScreenView.cs \
+	FSpot/GroupAdaptor.cs \
+	FSpot/GroupSelector.cs \
+	FSpot/Histogram.cs \
+	FSpot/InfoOverlay.cs \
+	FSpot/ItemAction.cs \
+	FSpot/JobStore.cs \
+	FSpot/main.cs \
+	FSpot/MainWindow.cs \
+	FSpot/MemorySurface.cs \
+	FSpot/MetaStore.cs \
+	FSpot/Photo.cs \
+	FSpot/PhotoEventArgs.cs \
+	FSpot/PhotoList.cs \
+	FSpot/PhotoLoader.cs \
+	FSpot/PhotoPopup.cs \
+	FSpot/PhotoQuery.cs \
+	FSpot/PhotoStore.cs \
+	FSpot/PhotoVersion.cs \
+	FSpot/PhotoView.cs \
+	FSpot/PixbufCache.cs \
+	FSpot/Preferences.cs \
+	FSpot/PrintOperation.cs \
+	FSpot/ProgressItem.cs \
+	FSpot/QueryWidget.cs \
+	FSpot/RollStore.cs \
+	FSpot/RotateCommand.cs \
+	FSpot/SelectionDataExtensions.cs \
+	FSpot/SendEmail.cs \
+	FSpot/SingleView.cs \
+	FSpot/TagQueryWidget.cs \
+	FSpot/TagSelectionWidget.cs \
+	FSpot/TagStore.cs \
+	FSpot/Term.cs \
+	FSpot/ThumbnailCache.cs \
+	FSpot/ThumbnailGenerator.cs \
+	FSpot/TimeAdaptor.cs \
+	FSpot/TipWindow.cs \
+	FSpot/UriCollection.cs \
+	FSpot/XScreenSaverSlide.cs \
+	ImageLoaderThread.cs \
+	PhotoTagMenu.cs \
+	PhotoVersionCommands.cs \
+	PhotoVersionMenu.cs \
+	PixbufUtils.cs \
+	TagCommands.cs \
+	TagPopup.cs \
+	ThumbnailCommand.cs
+
+RESOURCES =  \
+	../../../COPYING \
+	../../../icons/flower.png \
+	../../../icons/f-spot-128.png \
+	../../../icons/f-spot-not.png \
+	FSpot.addin.xml \
+	f-spot.glade \
+	FSpot.UI.Dialog/ui/AdjustTimeDialog.ui \
+	FSpot.UI.Dialog/ui/CreateTagDialog.ui \
+	FSpot.UI.Dialog/ui/DateRangeDialog.ui \
+	FSpot.UI.Dialog/ui/EditTagDialog.ui \
+	FSpot.UI.Dialog/ui/EditTagIconDialog.ui \
+	FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui \
+	FSpot.UI.Dialog/ui/PreferenceDialog.ui \
+	FSpot.UI.Dialog/ui/RatingFilterDialog.ui \
+	FSpot.UI.Dialog/ui/RepairDialog.ui \
+	ui/import.ui \
+	ui/mail_dialog.ui \
+	ui/main_window.ui \
+	ui/single_view.ui \
+	ui/tag_selection_dialog.ui \
+	ui/version_name_dialog.ui \
+	ui/viewer_preferences.ui
+
+include $(top_srcdir)/build/build.mk
+
+bin_SCRIPTS = f-spot
+EXTRA_DIST += f-spot.exe.config
+module_SCRIPTS += f-spot.exe.config
diff --git a/src/Clients/MainApp/Makefile.in b/src/Clients/MainApp/Makefile.in
new file mode 100644
index 0000000..b3ceea7
--- /dev/null
+++ b/src/Clients/MainApp/Makefile.in
@@ -0,0 +1,1040 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/f-spot.exe.config.in $(srcdir)/f-spot.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Clients/MainApp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = f-spot f-spot.exe.config
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(bin_SCRIPTS) $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = f-spot
+TARGET = exe
+LINK = $(REF_FSPOT) $(am__append_1)
+ASSEMBLY_BUILD_FLAGS = -unsafe
+SOURCES = \
+	DependentListStore.cs \
+	FSpot.ColorAdjustment/Adjustment.cs \
+	FSpot.ColorAdjustment/AutoStretch.cs \
+	FSpot.ColorAdjustment/Desaturate.cs \
+	FSpot.ColorAdjustment/FullColorAdjustment.cs \
+	FSpot.ColorAdjustment/SepiaTone.cs \
+	FSpot.Database/Db.cs \
+	FSpot.Database/DbException.cs \
+	FSpot.Database/DbStore.cs \
+	FSpot.Database/FSpotDatabaseConnection.cs \
+	FSpot.Database/Tests/UpdaterTests.cs \
+	FSpot.Database/Updater.cs \
+	FSpot.Editors/AutoStretchEditor.cs \
+	FSpot.Editors/ColorEditor.cs \
+	FSpot.Editors/CropEditor.cs \
+	FSpot.Editors/DesaturateEditor.cs \
+	FSpot.Editors/Editor.cs \
+	FSpot.Editors/RedEyeEditor.cs \
+	FSpot.Editors/SepiaEditor.cs \
+	FSpot.Editors/SoftFocusEditor.cs \
+	FSpot.Editors/TiltEditor.cs \
+	FSpot.Extensions/CommandMenuItemNode.cs \
+	FSpot.Extensions/ComplexMenuItemNode.cs \
+	FSpot.Extensions/ExportMenuItemNode.cs \
+	FSpot.Extensions/ICommand.cs \
+	FSpot.Extensions/IExporter.cs \
+	FSpot.Extensions/IMenuGenerator.cs \
+	FSpot.Extensions/IService.cs \
+	FSpot.Extensions/MenuNode.cs \
+	FSpot.Extensions/PhotoSelectionCondition.cs \
+	FSpot.Extensions/PopupCommands.cs \
+	FSpot.Extensions/ServiceNode.cs \
+	FSpot.Extensions/SidebarPage.cs \
+	FSpot.Extensions/SidebarPageNode.cs \
+	FSpot.Extensions/TransitionNode.cs \
+	FSpot.Extensions/ViewModeCondition.cs \
+	FSpot.Filters/ChmodFilter.cs \
+	FSpot.Filters/FilterRequest.cs \
+	FSpot.Filters/FilterSet.cs \
+	FSpot.Filters/IFilter.cs \
+	FSpot.Filters/JpegFilter.cs \
+	FSpot.Filters/ResizeFilter.cs \
+	FSpot.Filters/SharpFilter.cs \
+	FSpot.Filters/UniqueNameFilter.cs \
+	FSpot.Filters/WhiteListFilter.cs \
+	FSpot.Imaging/Ciff.cs \
+	FSpot.Imaging/DCRawFile.cs \
+	FSpot.Imaging/ImageFile.cs \
+	FSpot.Imaging/InternalProcess.cs \
+	FSpot.Imaging/IOChannel.cs \
+	FSpot.Imaging/RafFile.cs \
+	FSpot.Imaging/Tests/ImageFileTests.cs \
+	FSpot.Imaging/Tiff.cs \
+	FSpot.Import/FileImportSource.cs \
+	FSpot.Import/ImportController.cs \
+	FSpot.Import/ImportSource.cs \
+	FSpot.Import/MetadataImporter.cs \
+	FSpot.Jobs/CalculateHashJob.cs \
+	FSpot.Jobs/SyncMetadataJob.cs \
+	FSpot.Loaders/AreaPreparedEventArgs.cs \
+	FSpot.Loaders/AreaUpdatedEventArgs.cs \
+	FSpot.Loaders/GdkImageLoader.cs \
+	FSpot.Loaders/IImageLoader.cs \
+	FSpot.Loaders/ImageLoader.cs \
+	FSpot.Query/HiddenTag.cs \
+	FSpot.UI.Dialog/AboutDialog.cs \
+	FSpot.UI.Dialog/AdjustTimeDialog.cs \
+	FSpot.UI.Dialog/BuilderDialog.cs \
+	FSpot.UI.Dialog/DateRangeDialog.cs \
+	FSpot.UI.Dialog/EditExceptionDialog.cs \
+	FSpot.UI.Dialog/EditTagDialog.cs \
+	FSpot.UI.Dialog/EditTagIconDialog.cs \
+	FSpot.UI.Dialog/GladeDialog.cs \
+	FSpot.UI.Dialog/ImportDialog.cs \
+	FSpot.UI.Dialog/ImportFailureDialog.cs \
+	FSpot.UI.Dialog/LastRollDialog.cs \
+	FSpot.UI.Dialog/PreferenceDialog.cs \
+	FSpot.UI.Dialog/ProgressDialog.cs \
+	FSpot.UI.Dialog/RatingFilterDialog.cs \
+	FSpot.UI.Dialog/RepairDbDialog.cs \
+	FSpot.UI.Dialog/RepairDialog.cs \
+	FSpot.UI.Dialog/SelectionRatioDialog.cs \
+	FSpot.UI.Dialog/TagSelectionDialog.cs \
+	FSpot.UI.Dialog/ThreadProgressDialog.cs \
+	FSpot.Widgets/CellRendererTextProgress.cs \
+	FSpot.Widgets/CompositeUtils.cs \
+	FSpot.Widgets/EditorPage.cs \
+	FSpot.Widgets/Filmstrip.cs \
+	FSpot.Widgets/FindBar.cs \
+	FSpot.Widgets/FolderTreeModel.cs \
+	FSpot.Widgets/FolderTreePage.cs \
+	FSpot.Widgets/FolderTreeView.cs \
+	FSpot.Widgets/IconView.cs \
+	FSpot.Widgets/ImageInfo.cs \
+	FSpot.Widgets/InfoBox.cs \
+	FSpot.Widgets/Loupe.cs \
+	FSpot.Widgets/MetadataDisplay.cs \
+	FSpot.Widgets/PhotoImageView.cs \
+	FSpot.Widgets/PreviewPopup.cs \
+	FSpot.Widgets/QueryView.cs \
+	FSpot.Widgets/RatingMenuItem.cs \
+	FSpot.Widgets/ScalingIconView.cs \
+	FSpot.Widgets/Sharpener.cs \
+	FSpot.Widgets/Sidebar.cs \
+	FSpot.Widgets/SlideShow.cs \
+	FSpot.Widgets/SoftFocus.cs \
+	FSpot.Widgets/TagEntry.cs \
+	FSpot.Widgets/TagMenu.cs \
+	FSpot.Widgets/TagView.cs \
+	FSpot.Widgets/Tests/FindBarTests.cs \
+	FSpot.Widgets/TrayView.cs \
+	FSpot.Widgets/ViewContext.cs \
+	FSpot/Accelerometer.cs \
+	FSpot/App.cs \
+	FSpot/BitConverter.cs \
+	FSpot/ColorManagement.cs \
+	FSpot/ControlOverlay.cs \
+	FSpot/DragDropTargets.cs \
+	FSpot/ExportStore.cs \
+	FSpot/Fader.cs \
+	FSpot/FolderQueryWidget.cs \
+	FSpot/FullScreenView.cs \
+	FSpot/GroupAdaptor.cs \
+	FSpot/GroupSelector.cs \
+	FSpot/Histogram.cs \
+	FSpot/InfoOverlay.cs \
+	FSpot/ItemAction.cs \
+	FSpot/JobStore.cs \
+	FSpot/main.cs \
+	FSpot/MainWindow.cs \
+	FSpot/MemorySurface.cs \
+	FSpot/MetaStore.cs \
+	FSpot/Photo.cs \
+	FSpot/PhotoEventArgs.cs \
+	FSpot/PhotoList.cs \
+	FSpot/PhotoLoader.cs \
+	FSpot/PhotoPopup.cs \
+	FSpot/PhotoQuery.cs \
+	FSpot/PhotoStore.cs \
+	FSpot/PhotoVersion.cs \
+	FSpot/PhotoView.cs \
+	FSpot/PixbufCache.cs \
+	FSpot/Preferences.cs \
+	FSpot/PrintOperation.cs \
+	FSpot/ProgressItem.cs \
+	FSpot/QueryWidget.cs \
+	FSpot/RollStore.cs \
+	FSpot/RotateCommand.cs \
+	FSpot/SelectionDataExtensions.cs \
+	FSpot/SendEmail.cs \
+	FSpot/SingleView.cs \
+	FSpot/TagQueryWidget.cs \
+	FSpot/TagSelectionWidget.cs \
+	FSpot/TagStore.cs \
+	FSpot/Term.cs \
+	FSpot/ThumbnailCache.cs \
+	FSpot/ThumbnailGenerator.cs \
+	FSpot/TimeAdaptor.cs \
+	FSpot/TipWindow.cs \
+	FSpot/UriCollection.cs \
+	FSpot/XScreenSaverSlide.cs \
+	ImageLoaderThread.cs \
+	PhotoTagMenu.cs \
+	PhotoVersionCommands.cs \
+	PhotoVersionMenu.cs \
+	PixbufUtils.cs \
+	TagCommands.cs \
+	TagPopup.cs \
+	ThumbnailCommand.cs
+
+RESOURCES = \
+	../../../COPYING \
+	../../../icons/flower.png \
+	../../../icons/f-spot-128.png \
+	../../../icons/f-spot-not.png \
+	FSpot.addin.xml \
+	f-spot.glade \
+	FSpot.UI.Dialog/ui/AdjustTimeDialog.ui \
+	FSpot.UI.Dialog/ui/CreateTagDialog.ui \
+	FSpot.UI.Dialog/ui/DateRangeDialog.ui \
+	FSpot.UI.Dialog/ui/EditTagDialog.ui \
+	FSpot.UI.Dialog/ui/EditTagIconDialog.ui \
+	FSpot.UI.Dialog/ui/LastImportRollFilterDialog.ui \
+	FSpot.UI.Dialog/ui/PreferenceDialog.ui \
+	FSpot.UI.Dialog/ui/RatingFilterDialog.ui \
+	FSpot.UI.Dialog/ui/RepairDialog.ui \
+	ui/import.ui \
+	ui/mail_dialog.ui \
+	ui/main_window.ui \
+	ui/single_view.ui \
+	ui/tag_selection_dialog.ui \
+	ui/version_name_dialog.ui \
+	ui/viewer_preferences.ui
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) f-spot.exe.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+	$(THEME_ICONS_SOURCE) f-spot.exe.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+bin_SCRIPTS = f-spot
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Clients/MainApp/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Clients/MainApp/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+f-spot: $(top_builddir)/config.status $(srcdir)/f-spot.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+f-spot.exe.config: $(top_builddir)/config.status $(srcdir)/f-spot.exe.config.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-binSCRIPTS: $(bin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-binSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binSCRIPTS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS uninstall-local \
+	uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-binSCRIPTS install-data install-data-am \
+	install-data-local install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-moduleSCRIPTS install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-binSCRIPTS uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Clients/MainApp/PhotoTagMenu.cs b/src/Clients/MainApp/PhotoTagMenu.cs
new file mode 100644
index 0000000..77d6fac
--- /dev/null
+++ b/src/Clients/MainApp/PhotoTagMenu.cs
@@ -0,0 +1,89 @@
+//
+// PhotoTagMenu.cs
+//
+// Copyright (C) 2004 Novell, Inc.
+//
+//
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+using Gtk;
+
+using FSpot;
+using FSpot.Core;
+using Hyena;
+
+public class PhotoTagMenu : Menu {
+	public delegate void TagSelectedHandler (Tag t);
+	public event TagSelectedHandler TagSelected;
+
+	public PhotoTagMenu () : base () {
+	}
+
+	protected PhotoTagMenu (IntPtr raw) : base (raw) {}
+
+	public void Populate (IBrowsableItem [] photos) {
+		Hashtable hash = new Hashtable ();
+		if (photos != null) {
+			foreach (IBrowsableItem p in photos) {
+				foreach (Tag t in p.Tags) {
+					if (!hash.Contains (t.Id)) {
+						hash.Add (t.Id, t);
+					}
+				}
+			}
+		}
+
+		foreach (Widget w in this.Children) {
+			w.Destroy ();
+		}
+
+		if (hash.Count == 0) {
+			/* Fixme this should really set parent menu
+			   items insensitve */
+			MenuItem item = new MenuItem (Mono.Unix.Catalog.GetString ("(No Tags)"));
+			this.Append (item);
+			item.Sensitive = false;
+			item.ShowAll ();
+			return;
+		}
+
+		foreach (Tag t in hash.Values) {
+			MenuItem item = new TagMenu.TagMenuItem (t);
+			this.Append (item);
+			item.ShowAll ();
+			item.Activated += HandleActivate;
+		}
+
+	}
+
+	void HandleActivate (object obj, EventArgs args)
+	{
+		if (TagSelected != null) {
+			TagMenu.TagMenuItem t = obj as TagMenu.TagMenuItem;
+			if (t != null)
+				TagSelected (t.Value);
+			else
+				Log.Debug ("Item was not a TagMenuItem");
+		}
+	}
+}
diff --git a/src/Clients/MainApp/PhotoVersionCommands.cs b/src/Clients/MainApp/PhotoVersionCommands.cs
new file mode 100644
index 0000000..b30689e
--- /dev/null
+++ b/src/Clients/MainApp/PhotoVersionCommands.cs
@@ -0,0 +1,246 @@
+using Gtk;
+using Glade;
+using System;
+using Mono.Unix;
+using FSpot;
+using Hyena;
+using Hyena.Widgets;
+using FSpot.UI.Dialog;
+
+public class PhotoVersionCommands
+{
+	private class VersionNameRequest : BuilderDialog {
+		private Photo photo;
+
+		[GtkBeans.Builder.Object] private Button ok_button;
+		[GtkBeans.Builder.Object] private Entry version_name_entry;
+		[GtkBeans.Builder.Object] private Label prompt_label;
+		[GtkBeans.Builder.Object] private Label already_in_use_label;
+
+		public enum RequestType {
+			Create,
+			Rename
+		}
+
+		private RequestType request_type;
+
+		private void Update ()
+		{
+			string new_name = version_name_entry.Text;
+
+			if (photo.VersionNameExists (new_name)
+			    && ! (request_type == RequestType.Rename
+				  && new_name == photo.GetVersion (photo.DefaultVersionId).Name)) {
+				already_in_use_label.Markup = "<small>This name is already in use</small>";
+				ok_button.Sensitive = false;
+				return;
+			}
+
+			already_in_use_label.Text = String.Empty;
+
+			if (new_name.Length == 0)
+				ok_button.Sensitive = false;
+			else
+				ok_button.Sensitive = true;
+		}
+
+		private void HandleVersionNameEntryChanged (object obj, EventArgs args)
+		{
+			Update ();
+		}
+
+		public VersionNameRequest (RequestType request_type, Photo photo, Gtk.Window parent_window) : base ("version_name_dialog.ui", "version_name_dialog")
+		{
+			this.request_type = request_type;
+			this.photo = photo;
+
+			switch (request_type) {
+			case RequestType.Create:
+				this.Title = Catalog.GetString ("Create New Version");
+				prompt_label.Text = Catalog.GetString ("Name:");
+				break;
+
+			case RequestType.Rename:
+				this.Title = Catalog.GetString ("Rename Version");
+				prompt_label.Text = Catalog.GetString ("New name:");
+				version_name_entry.Text = photo.GetVersion (photo.DefaultVersionId).Name;
+				version_name_entry.SelectRegion (0, -1);
+				break;
+			}
+
+			version_name_entry.Changed += HandleVersionNameEntryChanged;
+			version_name_entry.ActivatesDefault = true;
+
+			this.TransientFor = parent_window;
+			this.DefaultResponse = ResponseType.Ok;
+
+			Update ();
+		}
+
+		public ResponseType Run (out string name)
+		{
+			ResponseType response = (ResponseType) this.Run ();
+
+			name = version_name_entry.Text;
+			if (request_type == RequestType.Rename && name == photo.GetVersion (photo.DefaultVersionId).Name)
+				response = ResponseType.Cancel;
+
+			this.Destroy ();
+
+			return response;
+		}
+	}
+
+	// Creating a new version.
+
+	public class Create {
+		public bool Execute (PhotoStore store, Photo photo, Gtk.Window parent_window)
+		{
+			VersionNameRequest request = new VersionNameRequest (VersionNameRequest.RequestType.Create,
+									     photo, parent_window);
+
+			string name;
+			ResponseType response = request.Run (out name);
+
+			if (response != ResponseType.Ok)
+				return false;
+
+			try {
+				photo.DefaultVersionId = photo.CreateVersion (name, photo.DefaultVersionId, true);
+				store.Commit (photo);
+				return true;
+			} catch (Exception e) {
+				HandleException ("Could not create a new version", e, parent_window);
+				return false;
+			}
+		}
+	}
+
+
+	// Deleting a version.
+
+	public class Delete {
+		public bool Execute (PhotoStore store, Photo photo, Gtk.Window parent_window)
+		{
+			string ok_caption = Catalog.GetString ("Delete");
+			string msg = String.Format (Catalog.GetString ("Really delete version \"{0}\"?"), photo.DefaultVersion.Name);
+			string desc = Catalog.GetString ("This removes the version and deletes the corresponding file from disk.");
+			try {
+				if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(parent_window, DialogFlags.DestroyWithParent,
+									   MessageType.Warning, msg, desc, ok_caption)) {
+					photo.DeleteVersion (photo.DefaultVersionId);
+					store.Commit (photo);
+					return true;
+				}
+			} catch (Exception e) {
+				HandleException ("Could not delete a version", e, parent_window);
+			}
+			return false;
+		}
+	}
+
+	// Renaming a version.
+
+	public class Rename {
+		public bool Execute (PhotoStore store, Photo photo, Gtk.Window parent_window)
+		{
+			VersionNameRequest request = new VersionNameRequest (VersionNameRequest.RequestType.Rename,
+									     photo, parent_window);
+
+			string new_name;
+			ResponseType response = request.Run (out new_name);
+
+			if (response != ResponseType.Ok)
+				return false;
+
+			try {
+				photo.RenameVersion (photo.DefaultVersionId, new_name);
+				store.Commit (photo);
+				return true;
+			} catch (Exception e) {
+				HandleException ("Could not rename a version", e, parent_window);
+				return false;
+			}
+		}
+	}
+
+	// Detaching a version (making it a separate photo).
+
+	public class Detach {
+		public bool Execute (PhotoStore store, Photo photo, Gtk.Window parent_window)
+		{
+			string ok_caption = Catalog.GetString ("De_tach");
+			string msg = String.Format (Catalog.GetString ("Really detach version \"{0}\" from \"{1}\"?"), photo.DefaultVersion.Name, photo.Name.Replace("_", "__"));
+			string desc = Catalog.GetString ("This makes the version appear as a separate photo in the library. To undo, drag the new photo back to its parent.");
+			try {
+				if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(parent_window, DialogFlags.DestroyWithParent,
+									   MessageType.Warning, msg, desc, ok_caption)) {
+					Photo new_photo = store.CreateFrom (photo, photo.RollId);
+					new_photo.CopyAttributesFrom (photo);
+					photo.DeleteVersion (photo.DefaultVersionId, false, true);
+					store.Commit (new Photo[] {new_photo, photo});
+					return true;
+				}
+			} catch (Exception e) {
+				HandleException ("Could not detach a version", e, parent_window);
+			}
+			return false;
+		}
+	}
+
+	// Reparenting a photo as version of another one
+
+	public class Reparent {
+		public bool Execute (PhotoStore store, Photo [] photos, Photo new_parent, Gtk.Window parent_window)
+		{
+			string ok_caption = Catalog.GetString ("Re_parent");
+			string msg = String.Format (Catalog.GetPluralString ("Really reparent \"{0}\" as version of \"{1}\"?",
+			                                                     "Really reparent {2} photos as versions of \"{1}\"?", photos.Length),
+			                            new_parent.Name.Replace ("_", "__"), photos[0].Name.Replace ("_", "__"), photos.Length);
+			string desc = Catalog.GetString ("This makes the photos appear as a single one in the library. The versions can be detached using the Photo menu.");
+
+			try {
+				if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(parent_window, DialogFlags.DestroyWithParent,
+									   MessageType.Warning, msg, desc, ok_caption)) {
+					uint highest_rating = new_parent.Rating;
+					string new_description = new_parent.Description;
+					foreach (Photo photo in photos) {
+						highest_rating = Math.Max(photo.Rating, highest_rating);
+						if (string.IsNullOrEmpty(new_description))
+							new_description = photo.Description;
+						new_parent.AddTag (photo.Tags);
+
+						foreach (uint version_id in photo.VersionIds) {
+							new_parent.DefaultVersionId = new_parent.CreateReparentedVersion (photo.GetVersion (version_id) as PhotoVersion);
+							store.Commit (new_parent);
+						}
+						uint [] version_ids = photo.VersionIds;
+						Array.Reverse (version_ids);
+						foreach (uint version_id in version_ids) {
+							photo.DeleteVersion (version_id, true, true);
+						}
+						store.Remove (photo);
+					}
+					new_parent.Rating = highest_rating;
+					new_parent.Description = new_description;
+					store.Commit (new_parent);
+					return true;
+				}
+			}
+			catch (Exception e) {
+				HandleException ("Could not reparent photos", e, parent_window);
+			}
+			return false;
+		}
+	}
+
+	private static void HandleException (string msg, Exception e, Gtk.Window parent_window) {
+		Log.DebugException (e);
+		msg = Catalog.GetString (msg);
+		string desc = String.Format (Catalog.GetString ("Received exception \"{0}\"."), e.Message);
+		HigMessageDialog md = new HigMessageDialog (parent_window, DialogFlags.DestroyWithParent,
+							    Gtk.MessageType.Error, ButtonsType.Ok, msg, desc);
+		md.Run ();
+		md.Destroy ();
+	}
+}
diff --git a/src/Clients/MainApp/PhotoVersionMenu.cs b/src/Clients/MainApp/PhotoVersionMenu.cs
new file mode 100644
index 0000000..bf9cd11
--- /dev/null
+++ b/src/Clients/MainApp/PhotoVersionMenu.cs
@@ -0,0 +1,61 @@
+
+using Gtk;
+
+using System;
+using System.Collections.Generic;
+
+using FSpot;
+using FSpot.Core;
+
+
+public class PhotoVersionMenu : Menu {
+
+	public IBrowsableItemVersion Version {
+		get; private set;
+	}
+
+	public delegate void VersionChangedHandler (PhotoVersionMenu menu);
+	public event VersionChangedHandler VersionChanged;
+
+	private Dictionary <MenuItem, IBrowsableItemVersion> version_mapping;
+
+	private void HandleMenuItemActivated (object sender, EventArgs args)
+	{
+		MenuItem item = sender as MenuItem;
+
+		if (item != null && version_mapping.ContainsKey (item)) {
+			Version = version_mapping [item];
+			VersionChanged (this);
+		}
+	}
+
+	public PhotoVersionMenu (IBrowsableItem photo)
+	{
+		Version = photo.DefaultVersion;
+
+		version_mapping = new Dictionary<MenuItem, IBrowsableItemVersion> ();
+
+		foreach (IBrowsableItemVersion version in photo.Versions) {
+			MenuItem menu_item = new MenuItem (version.Name);
+			menu_item.Show ();
+			menu_item.Sensitive = true;
+			Gtk.Label child = ((Gtk.Label) menu_item.Child);
+
+			if (version == photo.DefaultVersion) {
+				child.UseMarkup = true;
+				child.Markup = String.Format ("<b>{0}</b>", version.Name);
+			}
+
+			version_mapping.Add (menu_item, version);
+
+			Append (menu_item);
+		}
+
+		if (version_mapping.Count == 1) {
+			MenuItem no_edits_menu_item = new MenuItem (Mono.Unix.Catalog.GetString ("(No Edits)"));
+			no_edits_menu_item.Show ();
+			no_edits_menu_item.Sensitive = false;
+			Append (no_edits_menu_item);
+		}
+	}
+}
diff --git a/src/Clients/MainApp/PixbufUtils.cs b/src/Clients/MainApp/PixbufUtils.cs
new file mode 100644
index 0000000..9330fe0
--- /dev/null
+++ b/src/Clients/MainApp/PixbufUtils.cs
@@ -0,0 +1,504 @@
+//
+// FSpot.PixbufUtils.cs
+//
+// Author(s):
+//	Ettore Perazzoli
+//	Larry Ewing  <lewing at novell.com>
+//	Stephane Delcroix  <stephane at declroix.org>
+//
+// This is free software. See COPYING for details
+//
+
+using Gdk;
+using System.Collections;
+using System.Runtime.InteropServices;
+using System;
+using System.IO;
+using FSpot;
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Imaging;
+using Hyena;
+using TagLib.Image;
+
+public static class PixbufUtils {
+	static Pixbuf error_pixbuf = null;
+	public static Pixbuf ErrorPixbuf {
+		get {
+			if (error_pixbuf == null)
+				error_pixbuf = GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, "f-spot-question-mark", 256, (Gtk.IconLookupFlags)0);
+			return error_pixbuf;
+		}
+	}
+	public static Pixbuf LoadingPixbuf = PixbufUtils.LoadFromAssembly ("f-spot-loading.png");
+
+	public static double Fit (Pixbuf pixbuf,
+				  int dest_width, int dest_height,
+				  bool upscale_smaller,
+				  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);
+	}
+
+	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)
+	{
+		if (orig_width == 0 || orig_height == 0) {
+			fit_width = 0;
+			fit_height = 0;
+			return 0.0;
+		}
+
+		double scale = Math.Min (dest_width / (double)orig_width,
+					 dest_height / (double)orig_height);
+
+		if (scale > 1.0 && !upscale_smaller)
+			scale = 1.0;
+
+		fit_width = (int) Math.Round (scale * orig_width);
+		fit_height = (int) Math.Round (scale * orig_height);
+
+		return scale;
+	}
+
+
+	// FIXME: These should be in GTK#.  When my patch is committed, these LoadFrom* methods will
+	// go away.
+
+	public class AspectLoader {
+		Gdk.PixbufLoader loader = new Gdk.PixbufLoader ();
+		int max_width;
+		int max_height;
+		ImageOrientation orientation;
+
+		public AspectLoader (int max_width, int max_height)
+		{
+			this.max_height = max_height;
+			this.max_width = max_width;
+			loader.SizePrepared += HandleSizePrepared;
+		}
+
+		private void HandleSizePrepared (object obj, SizePreparedArgs args)
+		{
+			switch (orientation) {
+			case ImageOrientation.LeftTop:
+			case ImageOrientation.LeftBottom:
+			case ImageOrientation.RightTop:
+			case ImageOrientation.RightBottom:
+				int tmp = max_width;
+				max_width = max_height;
+				max_height = tmp;
+				break;
+			default:
+				break;
+			}
+
+			int scale_width = 0;
+			int scale_height = 0;
+
+			double scale = Fit (args.Width, args.Height, max_width, max_height, true, out scale_width, out scale_height);
+
+			if (scale < 1.0)
+				loader.SetSize (scale_width, scale_height);
+		}
+
+		public Pixbuf Load (System.IO.Stream stream, ImageOrientation orientation)
+		{
+			int count;
+			byte [] data = new byte [8192];
+			while (((count = stream.Read (data, 0, data.Length)) > 0) && loader.Write (data, (ulong)count))
+				;
+
+			loader.Close ();
+			Pixbuf orig = loader.Pixbuf;
+			Gdk.Pixbuf rotated = FSpot.Utils.PixbufUtils.TransformOrientation (orig, orientation);
+
+			if (orig != rotated) {
+				orig.Dispose ();
+			}
+			loader.Dispose ();
+			return rotated;
+		}
+
+		public Pixbuf LoadFromFile (string path)
+		{
+			try {
+				orientation = GetOrientation (path);
+				using (FileStream fs = System.IO.File.OpenRead (path)) {
+					return Load (fs, orientation);
+				}
+			} catch (Exception) {
+				Log.ErrorFormat ("Error loading photo {0}", path);
+				return null;
+			}
+		}
+	}
+
+	public static Pixbuf ScaleToMaxSize (Pixbuf pixbuf, int width, int height)
+	{
+		return ScaleToMaxSize (pixbuf, width, height, true);
+	}
+
+	public static Pixbuf ScaleToMaxSize (Pixbuf pixbuf, int width, int height, bool upscale)
+	{
+		int scale_width = 0;
+		int scale_height = 0;
+		double scale = Fit (pixbuf, width, height, upscale, out scale_width, out scale_height);
+
+		Gdk.Pixbuf result;
+		if (upscale || (scale < 1.0))
+			result = pixbuf.ScaleSimple (scale_width, scale_height, (scale_width > 20) ? Gdk.InterpType.Bilinear : Gdk.InterpType.Nearest);
+		else
+			result = pixbuf.Copy ();
+
+		return result;
+	}
+
+	static public Pixbuf LoadAtMaxSize (string path, int max_width, int max_height)
+	{
+		PixbufUtils.AspectLoader loader = new AspectLoader (max_width, max_height);
+		return loader.LoadFromFile (path);
+	}
+
+	public static Pixbuf TagIconFromPixbuf (Pixbuf source)
+	{
+		return IconFromPixbuf (source, (int) Tag.IconSize.Large);
+	}
+
+	public static Pixbuf IconFromPixbuf (Pixbuf source, int size)
+	{
+		Pixbuf tmp = null;
+		Pixbuf icon = null;
+
+		if (source.Width > source.Height)
+			source = tmp = new Pixbuf (source, (source.Width - source.Height) /2, 0, source.Height, source.Height);
+		else if (source.Width < source.Height)
+			source = tmp = new Pixbuf (source, 0, (source.Height - source.Width) /2, source.Width, source.Width);
+
+		if (source.Width == source.Height)
+			icon = source.ScaleSimple (size, size, InterpType.Bilinear);
+		else
+			throw new Exception ("Bad logic leads to bad accidents");
+
+		if (tmp != null)
+			tmp.Dispose ();
+
+		return icon;
+	}
+
+	static Pixbuf LoadFromAssembly (string resource)
+	{
+		try {
+			return new Pixbuf (System.Reflection.Assembly.GetEntryAssembly (), resource);
+		} catch {
+			return null;
+		}
+	}
+
+	public static Gdk.Pixbuf ScaleToAspect (Gdk.Pixbuf orig, int width, int height)
+	{
+		Gdk.Rectangle pos;
+		double scale = Fit (orig, width, height, false, out pos.Width, out pos.Height);
+		pos.X = (width - pos.Width) / 2;
+		pos.Y = (height - pos.Height) / 2;
+
+		Pixbuf scaled = new Pixbuf (Colorspace.Rgb, false, 8, width, height);
+		scaled.Fill (0x000000);
+
+		orig.Composite (scaled, pos.X, pos.Y,
+				pos.Width, pos.Height,
+				pos.X, pos.Y, scale, scale,
+				Gdk.InterpType.Bilinear,
+				255);
+
+		return scaled;
+	}
+
+	public static Pixbuf Flatten (Pixbuf pixbuf)
+	{
+		if (!pixbuf.HasAlpha)
+			return null;
+
+		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);
+
+		return flattened;
+	}
+
+	[DllImport ("libfspot")]
+	static extern IntPtr f_pixbuf_unsharp_mask (IntPtr src, double radius, double amount, double threshold);
+
+	public static Pixbuf UnsharpMask (Pixbuf src, double radius, double amount, double threshold)
+	{
+		IntPtr raw_ret = f_pixbuf_unsharp_mask (src.Handle, radius, amount, threshold);
+		Gdk.Pixbuf ret = (Gdk.Pixbuf) GLib.Object.GetObject(raw_ret, true);
+		return ret;
+	}
+
+	[DllImport ("libfspot")]
+	static extern IntPtr f_pixbuf_blur (IntPtr src, double radius);
+
+	public static Pixbuf Blur (Pixbuf src, double radius)
+	{
+		IntPtr raw_ret = f_pixbuf_blur (src.Handle, radius);
+		Gdk.Pixbuf ret = (Gdk.Pixbuf) GLib.Object.GetObject(raw_ret, true);
+		return ret;
+	}
+
+	public unsafe static Gdk.Pixbuf RemoveRedeye (Gdk.Pixbuf src, Gdk.Rectangle area)
+	{
+		return RemoveRedeye (src, area, -15);
+	}
+
+	public unsafe static Gdk.Pixbuf RemoveRedeye (Gdk.Pixbuf src, Gdk.Rectangle area, int threshold)
+	//threshold, factors and comparisons borrowed from the gimp plugin 'redeye.c' by Robert Merkel
+	{
+		Gdk.Pixbuf copy = src.Copy ();
+		Gdk.Pixbuf selection = new Gdk.Pixbuf (copy, area.X, area.Y, area.Width, area.Height);
+		byte *spix = (byte *)selection.Pixels;
+		int h = selection.Height;
+		int w = selection.Width;
+		int channels = src.NChannels;
+
+		double RED_FACTOR = 0.5133333;
+		double GREEN_FACTOR = 1;
+		double BLUE_FACTOR = 0.1933333;
+
+		for (int j = 0; j < h; j++) {
+			byte *s = spix;
+			for (int i = 0; i < w; i++) {
+				int adjusted_red = (int)(s[0] * RED_FACTOR);
+				int adjusted_green = (int)(s[1] * GREEN_FACTOR);
+				int adjusted_blue = (int)(s[2] * BLUE_FACTOR);
+
+				if (adjusted_red >= adjusted_green - threshold
+				    && adjusted_red >= adjusted_blue - threshold)
+					s[0] = (byte)(((double)(adjusted_green + adjusted_blue)) / (2.0 * RED_FACTOR));
+				s += channels;
+			}
+			spix += selection.Rowstride;
+		}
+
+		return copy;
+	}
+
+	public static unsafe Pixbuf ColorAdjust (Pixbuf src, double brightness, double contrast,
+					  double hue, double saturation, int src_color, int dest_color)
+	{
+		Pixbuf adjusted = new Pixbuf (Colorspace.Rgb, src.HasAlpha, 8, src.Width, src.Height);
+		PixbufUtils.ColorAdjust (src, adjusted, brightness, contrast, hue, saturation, src_color, dest_color);
+		return adjusted;
+	}
+
+	public static Cms.Format PixbufCmsFormat (Pixbuf buf)
+	{
+		return buf.HasAlpha ? Cms.Format.Rgba8Planar : Cms.Format.Rgb8;
+	}
+
+	public static unsafe void ColorAdjust (Pixbuf src, Pixbuf dest,
+					       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");
+
+		Cms.Profile srgb = Cms.Profile.CreateStandardRgb ();
+
+		Cms.Profile bchsw = Cms.Profile.CreateAbstract (256,
+								0.0,
+								brightness, contrast,
+								hue, saturation, src_color,
+								dest_color);
+
+		Cms.Profile [] list = new Cms.Profile [] { srgb, bchsw, srgb };
+		Cms.Transform trans = new Cms.Transform (list,
+							 PixbufCmsFormat (src),
+							 PixbufCmsFormat (dest),
+							 Cms.Intent.Perceptual, 0x0100);
+
+		ColorAdjust (src, dest, trans);
+
+		trans.Dispose ();
+		srgb.Dispose ();
+		bchsw.Dispose ();
+	}
+
+
+	public static unsafe void ColorAdjust (Gdk.Pixbuf src, Gdk.Pixbuf dest, Cms.Transform trans)
+	{
+		int width = src.Width;
+		byte * srcpix  = (byte *) src.Pixels;
+		byte * destpix = (byte *) dest.Pixels;
+
+		for (int row = 0; row < src.Height; row++) {
+			trans.Apply ((IntPtr) (srcpix + row * src.Rowstride),
+				     (IntPtr) (destpix + row * dest.Rowstride),
+				     (uint)width);
+		}
+
+	}
+
+	public static unsafe bool IsGray (Gdk.Pixbuf pixbuf, int max_difference)
+	{
+		int chan = pixbuf.NChannels;
+
+		byte *pix = (byte *)pixbuf.Pixels;
+		int h = pixbuf.Height;
+		int w = pixbuf.Width;
+		int stride = pixbuf.Rowstride;
+
+		for (int j = 0; j < h; j++) {
+			byte *p = pix;
+			for (int i = 0; i < w; i++) {
+				if (Math.Abs (p[0] - p[1]) > max_difference || Math.Abs (p[0] - p [2]) > max_difference) {
+					goto Found;
+				}
+				p += chan;
+			}
+			pix += stride;
+		}
+
+		return true;
+
+	Found:
+		return false;
+	}
+
+	public static unsafe void ReplaceColor (Gdk.Pixbuf src, Gdk.Pixbuf dest)
+	{
+		if (src.HasAlpha || !dest.HasAlpha || (src.Width != dest.Width) || (src.Height != dest.Height))
+			throw new ApplicationException ("invalid pixbufs");
+
+		byte *dpix = (byte *)dest.Pixels;
+		byte *spix = (byte *)src.Pixels;
+		int h = src.Height;
+		int w = src.Width;
+		for (int j = 0; j < h; j++) {
+			byte *d = dpix;
+			byte *s = spix;
+			for (int i = 0; i < w; i++) {
+				d[0] = s[0];
+				d[1] = s[1];
+				d[2] = s[2];
+				d += 4;
+				s += 3;
+			}
+			dpix += dest.Rowstride;
+			spix += src.Rowstride;
+		}
+	}
+
+	public static ImageOrientation GetOrientation (SafeUri uri)
+	{
+		using (var img = ImageFile.Create (uri)) {
+			return img.Orientation;
+		}
+	}
+
+	[Obsolete ("Use GetOrientation (SafeUri) instead")]
+	public static ImageOrientation GetOrientation (string path)
+	{
+        return GetOrientation (new SafeUri (path));
+	}
+
+	[DllImport("libgnomeui-2-0.dll")]
+	static extern IntPtr gnome_thumbnail_scale_down_pixbuf(IntPtr pixbuf, int dest_width, int dest_height);
+
+	public static Gdk.Pixbuf ScaleDown (Gdk.Pixbuf src, int width, int height)
+	{
+		IntPtr raw_ret = gnome_thumbnail_scale_down_pixbuf(src.Handle, width, height);
+		Gdk.Pixbuf ret;
+		if (raw_ret == IntPtr.Zero)
+			ret = null;
+		else
+			ret = (Gdk.Pixbuf) GLib.Object.GetObject(raw_ret, true);
+		return ret;
+	}
+
+    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!
+            var file_from = GLib.FileFactory.NewForUri (source);
+            var file_to = GLib.FileFactory.NewForUri (destination);
+            file_from.Copy (file_to, GLib.FileCopyFlags.AllMetadata | GLib.FileCopyFlags.Overwrite, null, null);
+            return;
+        }
+
+        // Else make a derived copy with metadata copied
+        using (var img = ImageFile.Create (source)) {
+            using (var pixbuf = img.Load ()) {
+                CreateDerivedVersion (source, destination, jpeg_quality, pixbuf);
+            }
+        }
+    }
+
+    public static void CreateDerivedVersion (SafeUri source, SafeUri destination, uint jpeg_quality, Pixbuf pixbuf)
+    {
+        SaveToSuitableFormat (destination, pixbuf, jpeg_quality);
+
+        using (var metadata_from = Metadata.Parse (source)) {
+            using (var metadata_to = Metadata.Parse (destination)) {
+                metadata_to.CopyFrom (metadata_from);
+                metadata_to.Save ();
+            }
+        }
+    }
+
+    private static void SaveToSuitableFormat (SafeUri destination, Pixbuf pixbuf, uint jpeg_quality)
+    {
+        // FIXME: this needs to work on streams rather than filenames. Do that when we switch to
+        // newer GDK.
+        var extension = destination.GetExtension ().ToLower ();
+        if (extension == ".png") {
+            pixbuf.Save (destination.LocalPath, "png");
+        } else if (extension == ".jpg" || extension == ".jpeg") {
+            pixbuf.Save (destination.LocalPath, "jpeg", jpeg_quality);
+        } else {
+            throw new NotImplementedException ("Saving this file format is not supported");
+        }
+    }
+
+#region Gdk hackery
+
+    // This hack below is needed because there is no wrapped version of
+    // Save which allows specifying the variable arguments (it's not
+    // possible with p/invoke).
+
+    [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);
+
+    private static bool Save (this Pixbuf pixbuf, string filename, string type, uint jpeg_quality)
+    {
+        IntPtr error = IntPtr.Zero;
+        IntPtr nfilename = GLib.Marshaller.StringToPtrGStrdup (filename);
+        IntPtr ntype = GLib.Marshaller.StringToPtrGStrdup (type);
+        IntPtr optlabel1 = GLib.Marshaller.StringToPtrGStrdup ("quality");
+        IntPtr optvalue1 = GLib.Marshaller.StringToPtrGStrdup (jpeg_quality.ToString ());
+        bool ret = gdk_pixbuf_save(pixbuf.Handle, nfilename, ntype, out error, optlabel1, optvalue1, IntPtr.Zero);
+        GLib.Marshaller.Free (nfilename);
+        GLib.Marshaller.Free (ntype);
+        GLib.Marshaller.Free (optlabel1);
+        GLib.Marshaller.Free (optvalue1);
+        if (error != IntPtr.Zero) throw new GLib.GException (error);
+        return ret;
+    }
+
+#endregion
+}
diff --git a/src/Clients/MainApp/TagCommands.cs b/src/Clients/MainApp/TagCommands.cs
new file mode 100644
index 0000000..58fb173
--- /dev/null
+++ b/src/Clients/MainApp/TagCommands.cs
@@ -0,0 +1,205 @@
+/*
+ * TagCommand.cs
+ *
+ * Author(s):
+ * 	Larry Ewing <lewing at novell.com>
+ * 	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * Copyright (c) 2003-2009 Novell, Inc,
+ * Copyright (c) 2007 Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using Gtk;
+using Gdk;
+using System;
+using System.Text;
+using System.Collections;
+
+using Mono.Unix;
+using FSpot;
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.UI.Dialog;
+using FSpot.Widgets;
+using Hyena;
+
+public class TagCommands {
+
+	public enum TagType {
+		Tag,
+		Category
+	}
+
+	public class Create : BuilderDialog {
+		TagStore tag_store;
+
+
+		[GtkBeans.Builder.Object] private Button create_button;
+		[GtkBeans.Builder.Object] private Entry tag_name_entry;
+		[GtkBeans.Builder.Object] private Label prompt_label;
+		[GtkBeans.Builder.Object] private Label already_in_use_label;
+		[GtkBeans.Builder.Object] private ComboBox category_option_menu;
+		[GtkBeans.Builder.Object] private CheckButton auto_icon_checkbutton;
+
+		private ArrayList categories;
+
+		private void PopulateCategories (ArrayList categories, Category parent)
+		{
+			foreach (Tag tag in parent.Children) {
+				if (tag is Category) {
+					categories.Add (tag);
+					PopulateCategories (categories, tag as Category);
+				}
+			}
+		}
+
+		private string Indentation (Category category)
+		{
+			int indentations = 0;
+			for (Category parent = category.Category;
+			     parent != null && parent.Category != null;
+			     parent = parent.Category)
+				indentations++;
+			return new string (' ', indentations*2);
+		}
+
+		private void PopulateCategoryOptionMenu ()
+		{
+			categories = new ArrayList ();
+			categories.Add (tag_store.RootCategory);
+			PopulateCategories (categories, tag_store.RootCategory);
+
+			ListStore category_store = new ListStore (typeof(Pixbuf), typeof(string));
+
+			foreach (Category category in categories) {
+				category_store.AppendValues (category.SizedIcon, Indentation (category) + category.Name);
+			}
+
+			category_option_menu.Sensitive = true;
+
+			category_option_menu.Model = category_store;
+			var icon_renderer = new CellRendererPixbuf ();
+			icon_renderer.Width = (int)Tag.TagIconSize;
+			category_option_menu.PackStart (icon_renderer, true);
+
+			var text_renderer = new CellRendererText ();
+			text_renderer.Alignment = Pango.Alignment.Left;
+			text_renderer.Width = 150;
+			category_option_menu.PackStart (text_renderer, true);
+
+			category_option_menu.AddAttribute (icon_renderer, "pixbuf", 0);
+			category_option_menu.AddAttribute (text_renderer, "text", 1);
+			category_option_menu.ShowAll ();
+		}
+
+		private bool TagNameExistsInCategory (string name, Category category)
+		{
+			foreach (Tag tag in category.Children) {
+				if (String.Compare(tag.Name, name, true) == 0)
+					return true;
+
+				if (tag is Category && TagNameExistsInCategory (name, tag as Category))
+					return true;
+			}
+
+			return false;
+		}
+
+		private void Update ()
+		{
+			if (tag_name_entry.Text == String.Empty) {
+				create_button.Sensitive = false;
+				already_in_use_label.Markup = String.Empty;
+			} else if (TagNameExistsInCategory (tag_name_entry.Text, tag_store.RootCategory)) {
+				create_button.Sensitive = false;
+				already_in_use_label.Markup = "<small>" + Catalog.GetString ("This name is already in use") + "</small>";
+			} else {
+				create_button.Sensitive = true;
+				already_in_use_label.Markup = String.Empty;
+			}
+		}
+
+		private void HandleTagNameEntryChanged (object sender, EventArgs args)
+		{
+			Update ();
+		}
+
+		private Category Category {
+			get {
+				if (categories.Count == 0)
+					return tag_store.RootCategory;
+				else
+					return categories [category_option_menu.Active] as Category;
+			}
+			set {
+				if ((value != null) && (categories.Count > 0)) {
+					//System.Console.WriteLine("TagCreateCommand.set_Category(" + value.Name + ")");
+					for (int i = 0; i < categories.Count; i++) {
+						Category category = (Category)categories[i];
+						// should there be an equals type method?
+						if (value.Id == category.Id) {
+							category_option_menu.Active = i;
+							return;
+						}
+					}
+				} else {
+					category_option_menu.Active = 0;
+				}
+			}
+		}
+
+		public Tag Execute (TagType type, Tag [] selection)
+		{
+			Category default_category = null;
+			if (selection.Length > 0) {
+				if (selection [0] is Category)
+					default_category = (Category) selection [0];
+				else
+					default_category = selection [0].Category;
+			} else {
+				default_category = tag_store.RootCategory;
+			}
+
+			this.DefaultResponse = ResponseType.Ok;
+
+			this.Title = Catalog.GetString ("Create New Tag");
+			prompt_label.Text = Catalog.GetString ("Name of New Tag:");
+			this.auto_icon_checkbutton.Active = Preferences.Get<bool> (Preferences.TAG_ICON_AUTOMATIC);
+
+			PopulateCategoryOptionMenu ();
+			this.Category = default_category;
+			Update ();
+			tag_name_entry.GrabFocus ();
+
+			ResponseType response = (ResponseType) this.Run ();
+
+
+			Tag new_tag = null;
+			if (response == ResponseType.Ok) {
+				bool autoicon = this.auto_icon_checkbutton.Active;
+				Preferences.Set (Preferences.TAG_ICON_AUTOMATIC, autoicon);
+				try {
+					Category parent_category = Category;
+
+					if (type == TagType.Category)
+						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) {
+					// FIXME error dialog.
+					Log.Exception (ex);
+				}
+			}
+
+			this.Destroy ();
+			return new_tag;
+		}
+
+		public Create (TagStore tag_store) : base ("CreateTagDialog.ui", "create_tag_dialog")
+		{
+			this.tag_store = tag_store;
+		}
+	}
+}
diff --git a/src/Clients/MainApp/TagPopup.cs b/src/Clients/MainApp/TagPopup.cs
new file mode 100644
index 0000000..79acd85
--- /dev/null
+++ b/src/Clients/MainApp/TagPopup.cs
@@ -0,0 +1,74 @@
+/*
+ * TagPopup.cs
+ *
+ * Author:
+ *   Larry Ewing <lewing at novell.com>
+ *
+ * Copyright (c) 2004 Novell, Inc.
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Mono.Unix;
+using FSpot;
+using FSpot.Core;
+using FSpot.Utils;
+
+public class TagPopup {
+	public void Activate (Gdk.EventButton eb, Tag tag, Tag [] tags)
+	{
+		int photo_count = App.Instance.Organizer.SelectedPhotos ().Length;
+		int tags_count = tags.Length;
+
+		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
+        );
+
+        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);
+
+        GtkUtil.MakeMenuSeparator (popup_menu);
+
+		GtkUtil.MakeMenuItem (popup_menu,
+			Catalog.GetString ("Edit Tag..."), "gtk-edit",
+			delegate { App.Instance.Organizer.HandleEditSelectedTagWithTag (tag); }, tag != null && tags_count == 1);
+
+		GtkUtil.MakeMenuItem (popup_menu,
+			Catalog.GetPluralString ("Delete Tag", "Delete Tags", tags_count), "gtk-delete",
+			new EventHandler (App.Instance.Organizer.HandleDeleteSelectedTagCommand), tag != null);
+
+		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);
+
+		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);
+
+		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);
+
+		}
+
+		if (eb != null)
+			popup_menu.Popup (null, null, null, eb.Button, eb.Time);
+		else
+			popup_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
+
+	}
+}
diff --git a/src/Clients/MainApp/ThumbnailCommand.cs b/src/Clients/MainApp/ThumbnailCommand.cs
new file mode 100644
index 0000000..2351fd0
--- /dev/null
+++ b/src/Clients/MainApp/ThumbnailCommand.cs
@@ -0,0 +1,45 @@
+using System;
+using Gtk;
+using FSpot;
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.UI.Dialog;
+
+public class ThumbnailCommand {
+
+	private Gtk.Window parent_window;
+
+	public ThumbnailCommand (Gtk.Window parent_window)
+	{
+		this.parent_window = parent_window;
+	}
+
+	public bool Execute (IBrowsableItem [] photos)
+	{
+		ProgressDialog progress_dialog = null;
+        var loader = ThumbnailLoader.Default;
+		if (photos.Length > 1) {
+			progress_dialog = new ProgressDialog (Mono.Unix.Catalog.GetString ("Updating Thumbnails"),
+							      ProgressDialog.CancelButtonType.Stop,
+							      photos.Length, parent_window);
+		}
+
+		int count = 0;
+		foreach (IBrowsableItem photo in photos) {
+			if (progress_dialog != null
+			    && progress_dialog.Update (String.Format (Mono.Unix.Catalog.GetString ("Updating picture \"{0}\""), photo.Name)))
+				break;
+
+			foreach (IBrowsableItemVersion version in photo.Versions) {
+				loader.Request (version.Uri, ThumbnailSize.Large, 10);
+			}
+
+			count++;
+		}
+
+		if (progress_dialog != null)
+			progress_dialog.Destroy ();
+
+		return true;
+	}
+}
diff --git a/src/f-spot.exe.config b/src/Clients/MainApp/f-spot.exe.config
similarity index 100%
rename from src/f-spot.exe.config
rename to src/Clients/MainApp/f-spot.exe.config
diff --git a/src/f-spot.exe.config.in b/src/Clients/MainApp/f-spot.exe.config.in
similarity index 100%
rename from src/f-spot.exe.config.in
rename to src/Clients/MainApp/f-spot.exe.config.in
diff --git a/src/Clients/MainApp/f-spot.glade b/src/Clients/MainApp/f-spot.glade
new file mode 100644
index 0000000..4cddb77
--- /dev/null
+++ b/src/Clients/MainApp/f-spot.glade
@@ -0,0 +1,881 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+  <requires lib="canvas"/>
+  <requires lib="gnome"/>
+  <widget class="GtkDialog" id="tag_selection_dialog">
+    <property name="width_request">300</property>
+    <property name="height_request">300</property>
+    <property name="visible">True</property>
+    <property name="title" translatable="yes">Select a Tag...</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="selection_vbox">
+        <property name="visible">True</property>
+        <child>
+          <widget class="GtkScrolledWindow" id="tag_selection_scrolled">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+            <property name="shadow_type">GTK_SHADOW_IN</property>
+            <child>
+              <placeholder/>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <widget class="GtkHButtonBox" id="dialog-action_area9">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <widget class="GtkButton" id="cancel_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">-6</property>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkButton" id="ok_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-ok</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">-5</property>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="GtkDialog" id="tag_selection_dialog">
+    <property name="width_request">300</property>
+    <property name="height_request">300</property>
+    <property name="visible">True</property>
+    <property name="title" translatable="yes">Select a Tag...</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="selection_vbox">
+        <property name="visible">True</property>
+        <child>
+          <widget class="GtkScrolledWindow" id="tag_selection_scrolled">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+            <property name="shadow_type">GTK_SHADOW_IN</property>
+            <child>
+              <placeholder/>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <widget class="GtkHButtonBox" id="dialog-action_area9">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <widget class="GtkButton" id="cancel_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">-6</property>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkButton" id="ok_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-ok</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">-5</property>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+
+<widget class="GtkWindow" id="color_editor_prefs_window">
+  <property name="title" translatable="yes"></property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkVBox" id="color_editor_prefs">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child>
+	<widget class="GtkExpander" id="expander13">
+	  <property name="visible">True</property>
+	  <property name="can_focus">True</property>
+	  <property name="expanded">True</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkTable" id="table20">
+	      <property name="border_width">6</property>
+	      <property name="visible">True</property>
+	      <property name="n_rows">10</property>
+	      <property name="n_columns">2</property>
+	      <property name="homogeneous">False</property>
+	      <property name="row_spacing">0</property>
+	      <property name="column_spacing">6</property>
+
+	      <child>
+		<widget class="GtkSpinButton" id="contrast_spinbutton">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">2</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">0 -1 1 0.00999999977648 0.00999999977648 0.10000000149</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">8</property>
+		  <property name="bottom_attach">9</property>
+		  <property name="x_options"></property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkSpinButton" id="hue_spinbutton">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">0</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">0 0 100 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">6</property>
+		  <property name="bottom_attach">7</property>
+		  <property name="x_options"></property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkSpinButton" id="brightness_spinbutton">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">1</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">0 0 100 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">4</property>
+		  <property name="bottom_attach">5</property>
+		  <property name="x_options"></property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkSpinButton" id="sat_spinbutton">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">0</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">0 0 100 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		  <property name="x_options"></property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHScale" id="exposure_scale">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="draw_value">False</property>
+		  <property name="value_pos">GTK_POS_TOP</property>
+		  <property name="digits">1</property>
+		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		  <property name="inverted">False</property>
+		  <property name="adjustment">0 -4 4 0.10000000149 0.10000000149 0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">1</property>
+		  <property name="bottom_attach">2</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHScale" id="sat_scale">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="draw_value">False</property>
+		  <property name="value_pos">GTK_POS_RIGHT</property>
+		  <property name="digits">0</property>
+		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		  <property name="inverted">False</property>
+		  <property name="adjustment">0 -100 100 1 10 0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">3</property>
+		  <property name="bottom_attach">4</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHScale" id="brightness_scale">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="draw_value">False</property>
+		  <property name="value_pos">GTK_POS_RIGHT</property>
+		  <property name="digits">1</property>
+		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		  <property name="inverted">False</property>
+		  <property name="adjustment">0 -100 100 1 1 0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">5</property>
+		  <property name="bottom_attach">6</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHScale" id="hue_scale">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="draw_value">False</property>
+		  <property name="value_pos">GTK_POS_RIGHT</property>
+		  <property name="digits">0</property>
+		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		  <property name="inverted">False</property>
+		  <property name="adjustment">0 -180 180 0.5 36 0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">7</property>
+		  <property name="bottom_attach">8</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHScale" id="contrast_scale">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="draw_value">False</property>
+		  <property name="value_pos">GTK_POS_RIGHT</property>
+		  <property name="digits">2</property>
+		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		  <property name="inverted">False</property>
+		  <property name="adjustment">0 -1 1 0.00999999977648 0.00999999977648 0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">9</property>
+		  <property name="bottom_attach">10</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkSpinButton" id="exposure_spinbutton">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">1</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">0 -4 4 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		  <property name="x_options"></property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label166">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">C_ontrast:</property>
+		  <property name="use_underline">True</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_CENTER</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="mnemonic_widget">contrast_scale</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">8</property>
+		  <property name="bottom_attach">9</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label163">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_Hue:</property>
+		  <property name="use_underline">True</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_RIGHT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="mnemonic_widget">hue_scale</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">6</property>
+		  <property name="bottom_attach">7</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label164">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_Brightness:</property>
+		  <property name="use_underline">True</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_RIGHT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="mnemonic_widget">brightness_scale</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">4</property>
+		  <property name="bottom_attach">5</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label167">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_Saturation:</property>
+		  <property name="use_underline">True</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="mnemonic_widget">sat_scale</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label165">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_Exposure:</property>
+		  <property name="use_underline">True</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="mnemonic_widget">exposure_scale</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label168">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes"><b>Co_rrections</b></property>
+	      <property name="use_underline">True</property>
+	      <property name="use_markup">True</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">label_item</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkExpander" id="expander14">
+	  <property name="visible">True</property>
+	  <property name="can_focus">True</property>
+	  <property name="expanded">True</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkTable" id="table21">
+	      <property name="border_width">6</property>
+	      <property name="visible">True</property>
+	      <property name="n_rows">4</property>
+	      <property name="n_columns">2</property>
+	      <property name="homogeneous">False</property>
+	      <property name="row_spacing">0</property>
+	      <property name="column_spacing">6</property>
+
+	      <child>
+		<widget class="GtkSpinButton" id="temp_spinbutton">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">0</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">1 0 100 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		  <property name="x_options"></property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkSpinButton" id="temptint_spinbutton">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">0</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">0 0 100 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		  <property name="x_options"></property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHScale" id="temp_scale">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="draw_value">False</property>
+		  <property name="value_pos">GTK_POS_TOP</property>
+		  <property name="digits">0</property>
+		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		  <property name="inverted">False</property>
+		  <property name="adjustment">5000 1000 25000 1 100 0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">1</property>
+		  <property name="bottom_attach">2</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHScale" id="temptint_scale">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="draw_value">False</property>
+		  <property name="value_pos">GTK_POS_TOP</property>
+		  <property name="digits">0</property>
+		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		  <property name="inverted">False</property>
+		  <property name="adjustment">0 -150 150 1 12 24</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">3</property>
+		  <property name="bottom_attach">4</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label169">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_Tint:</property>
+		  <property name="use_underline">True</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="mnemonic_widget">temptint_scale</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label170">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes" comments="Note for translators: meant as Temperature">Te_mp:</property>
+		  <property name="use_underline">True</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="mnemonic_widget">temp_scale</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label171">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes"><b>_White Balance</b></property>
+	      <property name="use_underline">True</property>
+	      <property name="use_markup">True</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">label_item</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkLabel" id="label172">
+	  <property name="visible">True</property>
+	  <property name="label" translatable="yes"></property>
+	  <property name="use_underline">False</property>
+	  <property name="use_markup">False</property>
+	  <property name="justify">GTK_JUSTIFY_LEFT</property>
+	  <property name="wrap">False</property>
+	  <property name="selectable">False</property>
+	  <property name="xalign">0.5</property>
+	  <property name="yalign">0.5</property>
+	  <property name="xpad">0</property>
+	  <property name="ypad">0</property>
+	  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	  <property name="width_chars">-1</property>
+	  <property name="single_line_mode">False</property>
+	  <property name="angle">0</property>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">False</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+  <widget class="GtkDialog" id="customratio_dialog">
+    <property name="border_width">5</property>
+    <property name="has_separator">False</property>
+    <property name="title" translatable="yes">Selection Constraints</property>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="dialog-vbox26">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <property name="spacing">2</property>
+        <child>
+          <widget class="GtkVBox" id="vbox6">
+            <property name="visible">True</property>
+            <child>
+              <widget class="GtkLabel" id="label6">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="xpad">6</property>
+                <property name="label" translatable="yes">Manage your custom selection ratios</property>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="padding">6</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkHBox" id="hbox7">
+                <property name="visible">True</property>
+                <child>
+                  <widget class="GtkTreeView" id="content_treeview">
+                    <property name="visible">True</property>
+                  </widget>
+                  <packing>
+                    <property name="padding">6</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="GtkVButtonBox" id="vbuttonbox1">
+                    <property name="visible">True</property>
+                    <property name="spacing">6</property>
+                    <property name="layout_style">GTK_BUTTONBOX_START</property>
+                    <child>
+                      <widget class="GtkButton" id="add_button">
+                        <property name="visible">True</property>
+                        <property name="label">gtk-add</property>
+                        <property name="use_stock">True</property>
+                      </widget>
+                    </child>
+                    <child>
+                      <widget class="GtkButton" id="delete_button">
+                        <property name="visible">True</property>
+                        <property name="label">gtk-delete</property>
+                        <property name="use_stock">True</property>
+                      </widget>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkButton" id="up_button">
+                        <property name="visible">True</property>
+                        <property name="label">gtk-go-up</property>
+                        <property name="use_stock">True</property>
+                      </widget>
+                      <packing>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkButton" id="down_button">
+                        <property name="visible">True</property>
+                        <property name="label">gtk-go-down</property>
+                        <property name="use_stock">True</property>
+                      </widget>
+                      <packing>
+                        <property name="position">3</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="padding">6</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <widget class="GtkHButtonBox" id="dialog-action_area26">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <widget class="GtkButton" id="close_button">
+                <property name="visible">True</property>
+                <property name="label">gtk-close</property>
+                <property name="use_stock">True</property>
+              </widget>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</glade-interface>
diff --git a/src/Clients/MainApp/f-spot.in b/src/Clients/MainApp/f-spot.in
new file mode 100644
index 0000000..ee10345
--- /dev/null
+++ b/src/Clients/MainApp/f-spot.in
@@ -0,0 +1,99 @@
+#!/bin/bash
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+turtledir=@TURTLEDIR@
+
+EXE_TO_RUN="$libdir/f-spot/f-spot.exe"
+
+if test "x$DBUS_SESSION_BUS_ADDRESS" == "x"; then
+    echo "** No session dbus found. Starting one **"
+    DBUSLAUNCH="dbus-launch"
+else
+    DBUSLAUNCH=""
+fi
+
+if test "x$turtledir" != "x"; then
+    export MONO_PATH=$turtledir/lib:$turtledir/gui:$MONO_PATH
+fi
+
+[ -n "$FSPOT_DEBUG" ] && FSPOT_DEBUG="--debug"
+[ -n "$FSPOT_TRACE" ] && FSPOT_TRACE="--trace=$FSPOT_TRACE"
+[ -n "$FSPOT_PROFILE" ] && FSPOT_PROFILE="--profile=$FSPOT_PROFILE"
+run_mdb=false
+run_gdb=false
+run_valgrind=false
+run_strace=false
+basedir_set=false
+
+for arg in "$@"; do
+    case "x$arg" in
+	x--debug)
+	    FSPOT_DEBUG="$arg"
+	    ;;
+	x--mdb)
+	    run_mdb=true
+	    ;;
+	x--gdb)
+	    run_gdb=true
+	    ;;
+	x-b) basedir_set=true;;
+	x-basedir) basedir_set=true;;
+	x--basedir) basedir_set=true;;
+	x--valgrind)
+	    run_valgrind=true
+	    ;;
+	x--trace=*)
+	    FSPOT_TRACE="$arg"
+	    ;;
+	x--strace)
+	    run_strace=true
+	    ;;
+	x--profile=*)
+	    FSPOT_PROFILE="$arg"
+	    ;;
+	x--uninstalled)
+	    echo "*** Running uninstalled f-spot ***"
+	    EXE_TO_RUN="./f-spot.exe"
+	    export MONO_PATH=../lib/gio-sharp/gio:../lib/gtk-sharp-beans:../lib/unique-sharp/unique:../bin:$MONO_PATH
+	    ;;
+    esac
+done
+
+if [ "$basedir_set" != "true" ]; then
+    if [ ! -n "$XDG_CONFIG_HOME" ]; then
+        XDG_CONFIG_HOME="$HOME/.config"
+    fi
+    if [ -e "$HOME/.gnome2/f-spot" ] && [ -e "$XDG_CONFIG_HOME/f-spot" ]; then
+        echo "It looks like you have 2 settings directories for f-spot ($HOME/.gnome2/f-spot and $XDG_CONFIG_HOME/f-spot). Remove one or run f-spot with --basedir option"
+        zenity --error --text="It looks like you have 2 settings directories for f-spot ($HOME/.gnome2/f-spot and $XDG_CONFIG_HOME/f-spot). Remove one or run f-spot with --basedir option"
+	exit -1
+    elif [ -e "$HOME/.gnome2/f-spot" ]; then
+        mkdir -p $XDG_CONFIG_HOME/
+	echo "Moving $HOME/.gnome2/f-spot to $XDG_CONFIG_HOME/"
+        mv $HOME/.gnome2/f-spot $XDG_CONFIG_HOME/
+	rm -rf $XDG_CONFIG_HOME/addin*
+    fi
+fi
+
+if [ -n "$FSPOT_DEBUG" ]; then
+    echo "** Running f-spot in Debug Mode **"
+fi
+
+if [ -n "$FSPOT_DEBUG" -o -n "$FSPOT_TRACE" -o -n "$FSPOT_PROFILE" ]; then
+    MONO_OPTIONS="$FSPOT_DEBUG $FSPOT_TRACE $FSPOT_PROFILE"
+    echo "** Running Mono with $MONO_OPTIONS **"
+fi
+
+if $run_mdb; then
+	mdb $EXE_TO_RUN -args "$@"
+elif $run_gdb; then
+	gdb --eval-command="handle SIGXCPU SIG33 SIG35 SIGPWR nostop noprint" --eval-command=run --args mono $MONO_OPTIONS $EXE_TO_RUN "$@"
+elif $run_valgrind; then
+	valgrind --tool=memcheck --leak-check=full --show-reachable=yes --log-file=valgrind --smc-check=all --suppressions=/home/sde/Mono/mono/data/mono.supp mono $MONO_OPTIONS $EXE_TO_RUN "$@"
+elif $run_strace; then
+	strace -ttt -f -o /tmp/f-spot.strace mono $MONO_OPTIONS $EXE_TO_RUN "$@"
+else
+	exec -a @PACKAGE@ $DBUSLAUNCH mono $MONO_OPTIONS $EXE_TO_RUN "$@"
+fi
diff --git a/src/Clients/MainApp/ui/import.ui b/src/Clients/MainApp/ui/import.ui
new file mode 100644
index 0000000..2038dcf
--- /dev/null
+++ b/src/Clients/MainApp/ui/import.ui
@@ -0,0 +1,347 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.12 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkDialog" id="import_dialog">
+    <property name="title" translatable="yes">Import</property>
+    <property name="modal">True</property>
+    <property name="default_width">664</property>
+    <property name="type_hint">dialog</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox14">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkVBox" id="vbox62">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkVBox" id="vbox65">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkHBox" id="hbox59">
+                    <property name="visible">True</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="import_label">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes" comments="Translators: this string means 'source of import'">Import _from:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">sources_combo</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkComboBox" id="sources_combo">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHPaned" id="import_hpaned">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="position">1</property>
+                    <child>
+                      <object class="GtkScrolledWindow" id="icon_scrolled">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hscrollbar_policy">automatic</property>
+                        <property name="vscrollbar_policy">automatic</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="resize">False</property>
+                        <property name="shrink">True</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkScrolledWindow" id="photo_scrolled">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hscrollbar_policy">automatic</property>
+                        <property name="vscrollbar_policy">automatic</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="resize">True</property>
+                        <property name="shrink">True</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkProgressBar" id="progress_bar">
+                    <property name="visible">True</property>
+                    <property name="pulse_step">0.02</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHBox" id="hbox1">
+                <property name="visible">True</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkLabel" id="attachtags_label">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">_Attach tags:</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHBox" id="tagentry_box">
+                    <property name="visible">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkTable" id="table1">
+                <property name="visible">True</property>
+                <property name="n_rows">2</property>
+                <property name="n_columns">2</property>
+                <property name="column_spacing">6</property>
+                <property name="row_spacing">6</property>
+                <property name="homogeneous">True</property>
+                <child>
+                  <object class="GtkCheckButton" id="duplicate_check">
+                    <property name="label" translatable="yes">_Detect duplicates</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="copy_check">
+                    <property name="label" translatable="yes">C_opy files to the Photos folder</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="recurse_check">
+                    <property name="label" translatable="yes">I_nclude subfolders</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHBox" id="hbox2">
+                    <property name="visible">True</property>
+                    <property name="spacing">2</property>
+                    <child>
+                      <object class="GtkCheckButton" id="remove_check">
+                        <property name="label" translatable="yes">_Remove original files after import</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkAlignment" id="alignment1">
+                        <property name="visible">True</property>
+                        <property name="xalign">1</property>
+                        <child>
+                          <object class="GtkButton" id="remove_warning_button">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <child>
+                              <object class="GtkImage" id="image1">
+                                <property name="visible">True</property>
+                                <property name="stock">gtk-dialog-warning</property>
+                                <property name="icon-size">1</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area14">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="cancel_button">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="import_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment49">
+                    <property name="visible">True</property>
+                    <property name="xscale">0</property>
+                    <property name="yscale">0</property>
+                    <child>
+                      <object class="GtkHBox" id="hbox64">
+                        <property name="visible">True</property>
+                        <property name="spacing">2</property>
+                        <child>
+                          <object class="GtkImage" id="image15">
+                            <property name="visible">True</property>
+                            <property name="stock">gtk-ok</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label157">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">_Import</property>
+                            <property name="use_underline">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">cancel_button</action-widget>
+      <action-widget response="-5">import_button</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/src/ui/mail_dialog.ui b/src/Clients/MainApp/ui/mail_dialog.ui
similarity index 100%
rename from src/ui/mail_dialog.ui
rename to src/Clients/MainApp/ui/mail_dialog.ui
diff --git a/src/ui/main_window.ui b/src/Clients/MainApp/ui/main_window.ui
similarity index 100%
rename from src/ui/main_window.ui
rename to src/Clients/MainApp/ui/main_window.ui
diff --git a/src/ui/single_view.ui b/src/Clients/MainApp/ui/single_view.ui
similarity index 100%
rename from src/ui/single_view.ui
rename to src/Clients/MainApp/ui/single_view.ui
diff --git a/src/Clients/MainApp/ui/tag_selection_dialog.ui b/src/Clients/MainApp/ui/tag_selection_dialog.ui
new file mode 100644
index 0000000..2332f3c
--- /dev/null
+++ b/src/Clients/MainApp/ui/tag_selection_dialog.ui
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.12 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkDialog" id="tag_selection_dialog">
+    <property name="width_request">300</property>
+    <property name="height_request">300</property>
+    <property name="visible">True</property>
+    <property name="title" translatable="yes">Select a Tag...</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="selection_vbox">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkScrolledWindow" id="tag_selection_scrolled">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hscrollbar_policy">automatic</property>
+            <property name="vscrollbar_policy">automatic</property>
+            <property name="shadow_type">in</property>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area9">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="cancel_button">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="ok_button">
+                <property name="label">gtk-ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">cancel_button</action-widget>
+      <action-widget response="-5">ok_button</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/src/ui/version_name_dialog.ui b/src/Clients/MainApp/ui/version_name_dialog.ui
similarity index 100%
rename from src/ui/version_name_dialog.ui
rename to src/Clients/MainApp/ui/version_name_dialog.ui
diff --git a/src/ui/viewer_preferences.ui b/src/Clients/MainApp/ui/viewer_preferences.ui
similarity index 100%
rename from src/ui/viewer_preferences.ui
rename to src/Clients/MainApp/ui/viewer_preferences.ui
diff --git a/src/Clients/Makefile.am b/src/Clients/Makefile.am
new file mode 100644
index 0000000..9b96dfa
--- /dev/null
+++ b/src/Clients/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = \
+	MainApp
diff --git a/src/Clients/Makefile.in b/src/Clients/Makefile.in
new file mode 100644
index 0000000..d9d90cb
--- /dev/null
+++ b/src/Clients/Makefile.in
@@ -0,0 +1,672 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/Clients
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+	MainApp
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Clients/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Clients/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Cms/Makefile.am b/src/Cms/Makefile.am
deleted file mode 100644
index e32fd8d..0000000
--- a/src/Cms/Makefile.am
+++ /dev/null
@@ -1,28 +0,0 @@
-ASSEMBLY = FSpot.Cms
-ASSEMBLY_BUILD_FLAGS = -unsafe
-TARGET = library
-LINK = $(REF_FSPOT_CMS)
-
-SOURCES = \
-	CctTable.cs \
-	CmsException.cs \
-	ColorCIELab.cs \
-	ColorCIELCh.cs \
-	ColorCIExyY.cs \
-	ColorCIEXYZ.cs \
-	Format.cs \
-	GammaTable.cs \
-	IccColorSpace.cs \
-	IccProfileClass.cs \
-	Intent.cs \
-	NativeMethods.cs \
-	Profile.cs \
-	SaveException.cs \
-	Transform.cs
-
-RESOURCES =
-
-include $(top_srcdir)/build/build.mk
-
-EXTRA_DIST += FSpot.Cms.dll.config
-module_SCRIPTS += FSpot.Cms.dll.config
diff --git a/src/Cms/Makefile.in b/src/Cms/Makefile.in
deleted file mode 100644
index 90f0003..0000000
--- a/src/Cms/Makefile.in
+++ /dev/null
@@ -1,818 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/FSpot.Cms.dll.config.in $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = src/Cms
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = FSpot.Cms.dll.config
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Cms
-ASSEMBLY_BUILD_FLAGS = -unsafe
-TARGET = library
-LINK = $(REF_FSPOT_CMS) $(am__append_1)
-SOURCES = \
-	CctTable.cs \
-	CmsException.cs \
-	ColorCIELab.cs \
-	ColorCIELCh.cs \
-	ColorCIExyY.cs \
-	ColorCIEXYZ.cs \
-	Format.cs \
-	GammaTable.cs \
-	IccColorSpace.cs \
-	IccProfileClass.cs \
-	Intent.cs \
-	NativeMethods.cs \
-	Profile.cs \
-	SaveException.cs \
-	Transform.cs
-
-RESOURCES = 
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES) FSpot.Cms.dll.config
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
-	$(THEME_ICONS_SOURCE) FSpot.Cms.dll.config
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Cms/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign src/Cms/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-FSpot.Cms.dll.config: $(top_builddir)/config.status $(srcdir)/FSpot.Cms.dll.config.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/ColorAdjustment/Adjustment.cs b/src/ColorAdjustment/Adjustment.cs
deleted file mode 100644
index 15ac762..0000000
--- a/src/ColorAdjustment/Adjustment.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Adjustment.cs
- * 
- * Copyright 2006, 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *   Ruben Vermeersch <ruben at savanne.be>
- *
- * See COPYING for license information
- *
- */
-
-using FSpot.Utils;
-using Cms;
-using Gdk;
-using System.Collections.Generic;
-
-namespace FSpot.ColorAdjustment {
-	public abstract class Adjustment {
-		protected int nsteps = 20;
-		private Cms.Intent intent = Cms.Intent.Perceptual;
-
-		// This is the input pixbuf, on which the adjustment will be performed.
-		protected readonly Gdk.Pixbuf Input;
-
-		private Cms.Profile input_profile;
-		public Cms.Profile InputProfile {
-			get {
-				if (input_profile == null)
-					input_profile = Cms.Profile.CreateStandardRgb ();
-
-				return input_profile;
-			}
-			set { input_profile = value; }
-		}
-
-		private Cms.Profile destination_profile;
-		public Cms.Profile DestinationProfile {
-			get {
-				if (destination_profile == null)
-					destination_profile = InputProfile;
-
-				return destination_profile;
-			}
-			set { destination_profile = value; }
-		}
-
-		public Adjustment (Pixbuf input, Cms.Profile input_profile)
-		{
-			Input = input;
-			InputProfile = input_profile;
-		}
-
-		protected abstract List <Cms.Profile> GenerateAdjustments ();
-
-		public Pixbuf Adjust ()
-		{
-			Gdk.Pixbuf final = new Gdk.Pixbuf (Gdk.Colorspace.Rgb,
-							   false, 8,
-							   Input.Width,
-							   Input.Height);
-			Cms.Profile [] list = GenerateAdjustments ().ToArray ();
-			
-			if (Input.HasAlpha) {
-				Gdk.Pixbuf input_copy = (Gdk.Pixbuf)Input.Clone ();
-				Pixbuf alpha = PixbufUtils.Flatten (Input);
-				Transform transform = new Transform (list,
-								     PixbufUtils.PixbufCmsFormat (alpha),
-								     PixbufUtils.PixbufCmsFormat (final),
-								     intent, 0x0000);
-				PixbufUtils.ColorAdjust (alpha, final, transform);
-				PixbufUtils.ReplaceColor (final, input_copy);
-				alpha.Dispose ();
-				final.Dispose ();
-				final = input_copy;
-			} else {
-				Cms.Transform transform = new Cms.Transform (list,
-									     PixbufUtils.PixbufCmsFormat (Input),
-									     PixbufUtils.PixbufCmsFormat (final),
-									     intent, 0x0000);
-				
-				PixbufUtils.ColorAdjust (Input, final, transform);
-			}
-
-			return final;
-		}
-	}
-}
diff --git a/src/ColorAdjustment/AutoStretch.cs b/src/ColorAdjustment/AutoStretch.cs
deleted file mode 100644
index d4dcaab..0000000
--- a/src/ColorAdjustment/AutoStretch.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * AutoStretch.cs
- * 
- * Author
- *   Larry Ewing <lewing at novell.com>
- *   Ruben Vermeersch <ruben at savanne.be>
- *
- * See COPYING for license information
- *
- */
-using Cms;
-using Gdk;
-using System;
-using System.Collections.Generic;
-using Hyena;
-
-namespace FSpot.ColorAdjustment {
-	public class AutoStretch : Adjustment {
-		public AutoStretch (Pixbuf input, Cms.Profile input_profile) : base (input, input_profile)
-		{
-		}
-
-		protected override List <Cms.Profile> GenerateAdjustments ()
-		{
-			List <Cms.Profile> profiles = new List <Cms.Profile> ();
-			Histogram hist = new Histogram (Input);
-			tables = new GammaTable [3];
-
-			for (int channel = 0; channel < tables.Length; channel++) {
-				int high, low;
-				hist.GetHighLow (channel, out high, out low);
-				Log.DebugFormat ("high = {0}, low = {1}", high, low);
-				tables [channel] = StretchChannel (255, low / 255.0, high / 255.0); 
-			}
-			profiles.Add (new Cms.Profile (IccColorSpace.Rgb, tables));
-			return profiles;
-		}
-
-		GammaTable StretchChannel (int count, double low, double high)
-		{
-			ushort [] entries = new ushort [count];
-			for (int i = 0; i < entries.Length; i++) {
-				double val = i / (double)entries.Length;
-				
-				if (high != low) {
-					val = Math.Max ((val - low), 0) / (high - low);
-				} else {
-					val = Math.Max ((val - low), 0);
-				}
-
-				entries [i] = (ushort) Math.Min (Math.Round (ushort.MaxValue * val), ushort.MaxValue);
-				//System.Console.WriteLine ("val {0}, result {1}", Math.Round (val * ushort.MaxValue), entries [i]);
-			}
-			return new GammaTable (entries);
-		}
-
-		GammaTable [] tables;
-	}
-}
diff --git a/src/ColorAdjustment/Desaturate.cs b/src/ColorAdjustment/Desaturate.cs
deleted file mode 100644
index 4ee5990..0000000
--- a/src/ColorAdjustment/Desaturate.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Desaturate.cs
- * 
- * Copyright 2006, 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *   Ruben Vermeersch <ruben at savanne.be>
- *
- * See COPYING for license information
- *
- */
-using Cms;
-using Gdk;
-using System.Collections.Generic;
-
-namespace FSpot.ColorAdjustment {
-	public class Desaturate : Adjustment {
-		public Desaturate (Pixbuf input, Cms.Profile input_profile) : base (input, input_profile)
-		{
-		}
-
-		protected override List <Cms.Profile> GenerateAdjustments ()
-		{
-			List <Cms.Profile> profiles = new List <Cms.Profile> ();
-			profiles.Add (InputProfile);
-			profiles.Add (Cms.Profile.CreateAbstract (nsteps,
-								  1.0,
-								  0.0,
-								  0.0,
-								  0.0,
-								  -100.0,
-								  null,
-								  ColorCIExyY.D50,
-								  ColorCIExyY.D50));
-			profiles.Add (DestinationProfile);
-			return profiles;
-		}
-	}
-}
diff --git a/src/ColorAdjustment/FullColorAdjustment.cs b/src/ColorAdjustment/FullColorAdjustment.cs
deleted file mode 100644
index 049d2b7..0000000
--- a/src/ColorAdjustment/FullColorAdjustment.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * FullColorAdjustment.cs
- * 
- * Copyright 2006, 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *   Ruben Vermeersch <ruben at savanne.be>
- *
- * See COPYING for license information
- *
- */
-using Cms;
-using Gdk;
-using System;
-using System.Collections.Generic;
-
-namespace FSpot.ColorAdjustment {
-	public class FullColorAdjustment : Adjustment {
-		private double exposure;
-		private double brightness;
-		private double contrast;
-		private double hue;
-		private double saturation;
-		private Cms.ColorCIEXYZ src_wp;
-		private Cms.ColorCIEXYZ dest_wp;
-
-		public FullColorAdjustment (Pixbuf input, Cms.Profile input_profile, 
-				double exposure, double brightness, double contrast, 
-				double hue, double saturation, 
-				Cms.ColorCIEXYZ src_wp, Cms.ColorCIEXYZ dest_wp) 
-			: base (input, input_profile)
-		{
-			this.exposure = exposure;
-			this.brightness = brightness;
-			this.contrast = contrast;
-			this.hue = hue;
-			this.saturation = saturation;
-			this.src_wp = src_wp;
-			this.dest_wp = dest_wp;
-		}
-
-		protected override List <Cms.Profile> GenerateAdjustments ()
-		{
-			List <Cms.Profile> profiles = new List <Cms.Profile> ();
-			profiles.Add (InputProfile);
-			profiles.Add (Cms.Profile.CreateAbstract (nsteps,
-						Math.Pow (Math.Sqrt (2.0), exposure),
-						brightness,
-						contrast,
-						hue,
-						saturation,
-						null,
-						src_wp.ToxyY (),
-						dest_wp.ToxyY ()));
-			profiles.Add (DestinationProfile);
-			return profiles;
-		}
-	}
-}
diff --git a/src/ColorAdjustment/SepiaTone.cs b/src/ColorAdjustment/SepiaTone.cs
deleted file mode 100644
index 73996fd..0000000
--- a/src/ColorAdjustment/SepiaTone.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * SepiaTone.cs
- * 
- * Copyright 2006, 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *   Ruben Vermeersch <ruben at savanne.be>
- *
- * See COPYING for license information
- *
- */
-using Cms;
-using Gdk;
-using System.Collections.Generic;
-
-namespace FSpot.ColorAdjustment {
-	public class SepiaTone : Adjustment {
-		public SepiaTone (Pixbuf input, Cms.Profile input_profile) : base (input, input_profile)
-		{
-		}
-
-		protected override List <Cms.Profile> GenerateAdjustments ()
-		{
-			List <Cms.Profile> profiles = new List <Cms.Profile> ();
-			profiles.Add (InputProfile);
-			profiles.Add (Cms.Profile.CreateAbstract (nsteps,
-								  1.0,
-								  0.0,
-								  0.0,
-								  0.0,
-								  -100.0,
-								  null,
-								  ColorCIExyY.D50,
-								  ColorCIExyY.D50));
-
-			profiles.Add (Cms.Profile.CreateAbstract (nsteps,
-								  1.0,
-								  32.0,
-								  0.0,
-								  0.0,
-								  0.0,
-								  null,
-								  ColorCIExyY.D50,
-								  ColorCIExyY.WhitePointFromTemperature (9934)));
-			profiles.Add (DestinationProfile);
-			return profiles;
-		}
-	}
-}
diff --git a/src/ControlOverlay.cs b/src/ControlOverlay.cs
deleted file mode 100644
index f744f03..0000000
--- a/src/ControlOverlay.cs
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * ControlOverlay.cs
- *
- * Copyright 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- * See COPYING for license information.
- */
-using Cairo;
-
-using System;
-using Gtk;
-using FSpot.Widgets;
-using FSpot.Utils;
-
-namespace FSpot {
-	public class ControlOverlay : Window {
-		Widget host;
-		Window host_toplevel;
-		bool composited;
-		VisibilityType visibility;
-		int round = 12;
-		Delay hide; 
-		Delay fade;
-		Delay dismiss;
-		bool auto_hide = true;
-		double x_align = 0.5;
-		double y_align = 1.0;
-		
-		public enum VisibilityType
-		{
-			None,
-			Partial,
-			Full
-		}
-		
-		public double XAlign {
-			get { return x_align; }
-			set {
-				x_align = value;
-				Relocate ();
-			}
-		}
-
-		public double YAlign {
-			get { return  y_align; }
-			set {
-				y_align = value;
-				Relocate ();
-			}
-		}
-			      
-		
-		public bool AutoHide {
-			get { return auto_hide; }
-			set { auto_hide = value; }
-		}
-
-		public VisibilityType Visibility {
-			get { return visibility; }
-			set {
-				if (dismiss.IsPending && value != VisibilityType.None)
-					return;
-
-				switch (value) {
-				case VisibilityType.None:
-					FadeToTarget (0.0);
-					break;
-				case VisibilityType.Partial:
-					FadeToTarget (0.4);
-					break;
-				case VisibilityType.Full:
-					FadeToTarget (0.8);
-					break;
-				}
-				visibility = value;
-			}
-
-		}
-
-		public ControlOverlay (Gtk.Widget host) : base (WindowType.Popup)
-		{
-			this.host = host;
-			Decorated = false;
-			DestroyWithParent = true;
-			Name = "FullscreenContainer";
-			AllowGrow = true;
-			//AllowShrink = true;
-			KeepAbove = true;
-			
-			host_toplevel = (Gtk.Window) host.Toplevel;
-			
-			TransientFor = host_toplevel;
-
-			host_toplevel.ConfigureEvent += HandleHostConfigure;
-			host_toplevel.SizeAllocated += HandleHostSizeAllocated;
-			
-			AddEvents ((int) (Gdk.EventMask.PointerMotionMask));
-			hide = new Delay (2000, HideControls);
-			fade = new Delay (40, FadeToTarget);
-			dismiss = new Delay (2000, delegate { /* do nothing */ return false; });
-		}
-
-		protected override void OnDestroyed ()
-		{
-			hide.Stop ();
-			fade.Stop ();
-			base.OnDestroyed ();
-		}
-
-		public bool HideControls ()
-		{
-			int x, y;
-			Gdk.ModifierType type;
-			
-			if (!auto_hide)
-				return false;
-
-			if (IsRealized) {
-				GdkWindow.GetPointer (out x, out y, out type);
-				if (Allocation.Contains (x, y)) {
-					hide.Start ();
-					return true;
-				}
-			}
-
-			hide.Stop ();
-			Visibility = VisibilityType.None;
-			return false;
-		}
-
-		protected virtual void ShapeSurface (Context cr, Cairo.Color color)
-		{
-			cr.Operator = Operator.Source;
-			Cairo.Pattern p = new Cairo.SolidPattern (new Cairo.Color (0, 0, 0, 0));
-			cr.Source = p;
-			p.Destroy ();
-			cr.Paint ();
-			cr.Operator = Operator.Over;
-
-			Cairo.Pattern r = new SolidPattern (color);
-			cr.Source = r;
-			r.Destroy ();
-			cr.MoveTo (round, 0);
-			if (x_align == 1.0)
-				cr.LineTo (Allocation.Width, 0);
-			else
-				cr.Arc (Allocation.Width - round, round, round, - Math.PI * 0.5, 0);
-			if (x_align == 1.0 || y_align == 1.0)
-				cr.LineTo (Allocation.Width, Allocation.Height);
-			else
-				cr.Arc (Allocation.Width - round, Allocation.Height - round, round, 0, Math.PI * 0.5);
-			if (y_align == 1.0)
-				cr.LineTo (0, Allocation.Height);
-			else
-				cr.Arc (round, Allocation.Height - round, round, Math.PI * 0.5, Math.PI);
-			cr.Arc (round, round, round, Math.PI, Math.PI * 1.5);
-			cr.ClosePath ();
-			cr.Fill ();			
-		}
-
-		double target;
-		double opacity = 0;
-
-		bool FadeToTarget ()
-		{
-			//Log.Debug ("op {0}\ttarget{1}", opacity, target);
-			Visible = (opacity > 0.05);
-			if (Math.Abs (target - opacity) < .05)
-				return false;
-			if (target > opacity)
-				opacity += .04;
-			else
-				opacity -= .04;
-			if (Visible)
-				CompositeUtils.SetWinOpacity (this, opacity);
-			else
-				Hide ();
-			return true;
-		}
-
-		bool FadeToTarget (double target)
-		{
-			//Log.Debug ("FadeToTarget {0}", target);
-			Realize ();
-			this.target = target;
-			fade.Start ();
-
-			if (target > 0.0)
-				hide.Restart ();
-
-			return false;
-		}
-
-		private void ShapeWindow ()
-		{
-			if (composited)
-				return;
-
-			Gdk.Pixmap bitmap = new Gdk.Pixmap (GdkWindow, 
-							    Allocation.Width, 
-							    Allocation.Height, 1);
-
-			Context cr = Gdk.CairoHelper.Create (bitmap);
-			ShapeCombineMask (bitmap, 0, 0);
-			ShapeSurface (cr, new Color (1, 1, 1));
-			ShapeCombineMask (bitmap, 0, 0);
-			((IDisposable)cr).Dispose ();
-			bitmap.Dispose ();
-
-		}
-
-		protected override bool OnExposeEvent (Gdk.EventExpose args)
-		{
-			Gdk.Color c = Style.Background (State);
-			Context cr = Gdk.CairoHelper.Create (GdkWindow);
-
-			ShapeSurface (cr, new Cairo.Color (c.Red / (double) ushort.MaxValue,
-							   c.Blue / (double) ushort.MaxValue, 
-							   c.Green / (double) ushort.MaxValue,
-							   0.8));
-
-			((IDisposable)cr).Dispose ();
-			return base.OnExposeEvent (args);
-		}
-
-		protected override bool OnMotionNotifyEvent (Gdk.EventMotion args)
-		{
-			this.Visibility = VisibilityType.Full;
-			base.OnMotionNotifyEvent (args);
-			return false;
-		}
-
-		protected override void OnSizeAllocated (Gdk.Rectangle rec)
-		{
-			base.OnSizeAllocated (rec);
-			Relocate ();
-			ShapeWindow ();
-			QueueDraw ();
-		}
-
-		private void HandleHostSizeAllocated (object o, SizeAllocatedArgs args)
-		{
-			Relocate ();
-		}
-		
-		private void HandleHostConfigure (object o, ConfigureEventArgs args)
-		{
-			Relocate ();
-		}
-		
-		private void Relocate ()
-		{
-			int x, y;
-			if (!IsRealized || !host_toplevel.IsRealized)
-				return;
-			
-			host.GdkWindow.GetOrigin (out x, out y);
-
-			int xOrigin = x;
-			int yOrigin = y;
-
-			x += (int) (host.Allocation.Width * x_align);
-			y += (int) (host.Allocation.Height * y_align);
-			
-			x -= (int) (Allocation.Width * 0.5);
-			y -= (int) (Allocation.Height * 0.5);
-
-			x = Math.Max (0, Math.Min (x, xOrigin + host.Allocation.Width - Allocation.Width));
-			y = Math.Max (0, Math.Min (y, yOrigin + host.Allocation.Height - Allocation.Height));
-			
-			Move (x, y);
-		}
-
-		protected override void OnRealized ()
-		{
-			composited = CompositeUtils.IsComposited (Screen) && CompositeUtils.SetRgbaColormap (this);
-			AppPaintable = composited;
-
-			base.OnRealized ();
-			
-			ShapeWindow ();
-			Relocate ();
-		}
-		
-		public void Dismiss ()
-		{
-			Visibility = VisibilityType.None;
-			dismiss.Start ();
-		}
-
-		protected override void OnMapped ()
-		{
-			base.OnMapped ();
-			Relocate ();
-		}
-	}
-}
diff --git a/src/Core/App.cs b/src/Core/App.cs
deleted file mode 100644
index 04b9213..0000000
--- a/src/Core/App.cs
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * FSpot.Application.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * Copyright (c) 2009 Stephane Delcroix.
- *
- * This is open source software. See COPYING fro details.
- */
-
-using System;
-using System.IO;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-
-using Unique;
-
-using Mono.Unix;
-
-using Hyena;
-
-namespace FSpot
-{
-	public class App : Unique.App
-	{
-		static object sync_handle = new object ();
-
-#region public API
-		static App app;
-		public static App Instance {
-			get {
-				lock (sync_handle) {
-					if (app == null)
-						app = new App ();
-				}
-				return app;
-			}
-		}
-
-		Thread constructing_organizer = null;
-
-		public MainWindow Organizer {
-			get {
-				lock (sync_handle) {
-					if (organizer == null) {
-						if (constructing_organizer == Thread.CurrentThread) {
-							throw new Exception ("Recursively tried to acquire App.Organizer!");
-						}
-
-						constructing_organizer = Thread.CurrentThread;
-						organizer = new MainWindow (Database);
-						Register (organizer.Window);
-					}
-				}
-				return organizer;
-			}
-		}
-
-		public Db Database {
-			get {
-				lock (sync_handle) {
-					if (db == null) {
-						if (!File.Exists (FSpot.Global.BaseDirectory))
-							Directory.CreateDirectory (FSpot.Global.BaseDirectory);
-
-						db = new Db ();
-
-						try {
-							db.Init (Path.Combine (FSpot.Global.BaseDirectory, "photos.db"), true);
-						} catch (Exception e) {
-							new FSpot.UI.Dialog.RepairDbDialog (e, db.Repair (), null);
-							db.Init (Path.Combine (FSpot.Global.BaseDirectory, "photos.db"), true);
-						}
-					}
-				}
-				return db;
-			}
-		}
-
-		public void Import (string path)
-		{
-			if (IsRunning) {
-				var md = new MessageData ();
-				md.Text = path;
-				SendMessage (Command.Import, md);
-				return;
-			}
-			HandleImport (path);
-		}
-
-		public void Organize ()
-		{
-			if (IsRunning) {
-				SendMessage (Command.Organize, null);
-				return;
-			}
-			HandleOrganize ();
-		}
-
-		public void Shutdown ()
-		{
-			if (IsRunning) {
-				SendMessage (Command.Shutdown, null);
-				return;
-			}
-			HandleShutdown ();
-		}
-
-		public void Slideshow (string tagname)
-		{
-			if (IsRunning) {
-				var md = new MessageData ();
-				md.Text = tagname ?? String.Empty;
-				SendMessage (Command.Slideshow, md);
-
-				return;
-			}
-			HandleSlideshow (tagname);
-		}
-
-		public void View (SafeUri uri)
-		{
-			View (new SafeUri[] {uri});
-		}
-
-		public void View (IEnumerable<SafeUri> uris)
-		{
-			var uri_s = from uri in uris select uri.ToString ();
-			View (uri_s);
-		}
-
-		public void View (string uri)
-		{
-			View (new string[] {uri});
-		}
-
-		public void View (IEnumerable<string> uris)
-		{
-			if (IsRunning) {
-				var md = new MessageData ();
-				md.Uris = uris.ToArray ();
-				SendMessage (Command.View, md);
-				return;
-			}
-			HandleView (uris.ToArray());
-		}
-#endregion
-
-#region private ctor and stuffs
-		enum Command {
-			Invalid = 0, 
-			Import,
-			View,
-			Organize,
-			Shutdown,
-			Version,
-			Slideshow,
-		}
-
-		List<Gtk.Window> toplevels;
-		MainWindow organizer;
-		Db db;
-
-		App (): base ("org.gnome.FSpot.Core", null,
-				  "Import", Command.Import,
-				  "View", Command.View,
-				  "Organize", Command.Organize,
-				  "Shutdown", Command.Shutdown,
-				  "Slideshow", Command.Slideshow)
-		{
-			toplevels = new List<Gtk.Window> ();
-			if (IsRunning) {
-				Log.Information ("Found active FSpot process");
-			} else {
-				MessageReceived += HandleMessageReceived;
-			}
-		}
-
-		void SendMessage (Command command, MessageData md)
-		{
-			SendMessage ((Unique.Command)command, md);
-		}
-#endregion
-
-#region Command Handlers
-
-		void HandleMessageReceived (object sender, MessageReceivedArgs e)
-		{
-			switch ((Command)e.Command) {
-			case Command.Import:
-				HandleImport (e.MessageData.Text);
-				e.RetVal = Response.Ok;
-				break;
-			case Command.Organize:
-				HandleOrganize ();
-				e.RetVal = Response.Ok;
-				break;
-			case Command.Shutdown:
-				HandleShutdown ();
-				e.RetVal = Response.Ok;
-				break;
-			case Command.Slideshow:
-				HandleSlideshow (e.MessageData.Text);
-				e.RetVal = Response.Ok;
-				break;
-			case Command.View:
-				HandleView (e.MessageData.Uris);
-				e.RetVal = Response.Ok;
-				break;
-			case Command.Invalid:
-			default:
-				Log.Debug ("Wrong command received");
-				break;
-			}
-		}
-
-		void HandleImport (string path)
-		{
-			Organizer.Window.Present ();
-			Organizer.ImportFile (path == null ? null : new SafeUri(path));
-		}
-
-		void HandleOrganize ()
-		{
-			if (Database.Empty)
-				HandleImport (null);
-			else
-				Organizer.Window.Present ();
-		}
-
-		void HandleShutdown ()
-		{
-			try {
-				App.Instance.Organizer.Close ();
-			} catch {
-				System.Environment.Exit (0);
-			}
-		}
-
-		//FIXME move all this in a standalone class
-		void HandleSlideshow (string tagname)
-		{
-			Tag tag;
-			FSpot.Widgets.SlideShow slideshow = null;
-
-			if (!String.IsNullOrEmpty (tagname))
-				tag = Database.Tags.GetTagByName (tagname);
-			else
-				tag = Database.Tags.GetTagById (Preferences.Get<int> (Preferences.SCREENSAVER_TAG));
-
-			IBrowsableItem[] photos;
-			if (tag != null)
-				photos = Database.Photos.Query (new Tag[] {tag});
-			else if (Preferences.Get<int> (Preferences.SCREENSAVER_TAG) == 0)
-				photos = Database.Photos.Query (new Tag [] {});
-			else
-				photos = new IBrowsableItem [0];
-
-			// Minimum delay 1 second; default is 4s
-			var delay = Math.Max (1.0, Preferences.Get<double> (Preferences.SCREENSAVER_DELAY));
-
-			var window = new XScreenSaverSlide ();
-			window.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
-			window.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
-
-			if (photos.Length > 0) {
-				Array.Sort (photos, new IBrowsableItemComparer.RandomSort ());
-				slideshow = new FSpot.Widgets.SlideShow (new BrowsablePointer (new PhotoList (photos), 0), (uint)(delay * 1000), true);
-				slideshow.Transition = new FSpot.Widgets.DissolveTransition ();
-				window.Add (slideshow);
-			} else {
-				Gtk.HBox outer = new Gtk.HBox ();
-				Gtk.HBox hbox = new Gtk.HBox ();
-				Gtk.VBox vbox = new Gtk.VBox ();
-
-				outer.PackStart (new Gtk.Label (String.Empty));
-				outer.PackStart (vbox, false, false, 0);
-				vbox.PackStart (new Gtk.Label (String.Empty));
-				vbox.PackStart (hbox, false, false, 0);
-				hbox.PackStart (new Gtk.Image (Gtk.Stock.DialogWarning, Gtk.IconSize.Dialog),
-						false, false, 0);
-				outer.PackStart (new Gtk.Label (String.Empty));
-
-				string msg;
-				string long_msg;
-
-				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);
-				} 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.");
-				}
-
-				Gtk.Label label = new Gtk.Label (msg);
-				hbox.PackStart (label, false, false, 0);
-
-				Gtk.Label long_label = new Gtk.Label (long_msg);
-				long_label.Markup  = String.Format ("<small>{0}</small>", long_msg);
-
-				vbox.PackStart (long_label, false, false, 0);
-				vbox.PackStart (new Gtk.Label (String.Empty));
-
-				window.Add (outer);
-				label.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
-				label.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
-				long_label.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
-				long_label.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
-			}
-			window.ShowAll ();
-
-			Register (window);
-			GLib.Idle.Add (delegate {
-				if (slideshow != null)
-					slideshow.Start ();
-				return false;
-			});
-		}
-
-		void HandleView (string[] uris)
-		{
-			List<SafeUri> ul = new List<SafeUri> ();
-			foreach (var u in uris)
-				ul.Add (new SafeUri (u, true));
-			try {
-				Register (new FSpot.SingleView (ul.ToArray ()).Window);
-			} catch (System.Exception e) {
-				Log.Exception (e);
-				Log.Debug ("no real valid path to view from");
-			} 
-		}
-
-#endregion
-
-#region Track toplevel windows
-		void Register (Gtk.Window window)
-		{
-			toplevels.Add (window);
-			window.Destroyed += HandleDestroyed;
-		}
-
-		void HandleDestroyed (object sender, EventArgs e)
-		{
-			toplevels.Remove (sender as Gtk.Window);
-			if (toplevels.Count == 0) {
-				Log.Information ("Exiting...");
-				Banshee.Kernel.Scheduler.Dispose ();
-				Database.Dispose ();
-				ImageLoaderThread.CleanAll ();
-				Gtk.Application.Quit ();
-				System.Environment.Exit (0);
-			}
-			if (organizer != null && organizer.Window == sender)
-				organizer = null;
-		}
-#endregion
-	}
-}
diff --git a/src/Core/BrowsableEventArgs.cs b/src/Core/BrowsableEventArgs.cs
deleted file mode 100644
index e546631..0000000
--- a/src/Core/BrowsableEventArgs.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * FSpot.BrowsableEventArgs.cs
- * 
- * Author(s):
- *	Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-
-namespace FSpot
-{
-	public class BrowsableEventArgs : System.EventArgs {
-		private readonly int [] items;
-		public int [] Items {
-			get { return items; }
-		}
-
-		IBrowsableItemChanges changes;
-		public IBrowsableItemChanges Changes {
-			get { return changes; }
-		}
-
-		public BrowsableEventArgs (int item, IBrowsableItemChanges changes) : this (new int[] {item}, changes)
-		{
-		}
-
-		public BrowsableEventArgs (int[] items, IBrowsableItemChanges changes)
-		{
-			this.items = items;
-			this.changes = changes;
-		}
-	}
-}
diff --git a/src/Core/BrowsablePointer.cs b/src/Core/BrowsablePointer.cs
deleted file mode 100644
index b355d25..0000000
--- a/src/Core/BrowsablePointer.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * FSpot.BrowsablePointer.cs
- * 
- * Author(s):
- *	Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- */
-using System;
-
-namespace FSpot
-{
-
-	public class BrowsablePointer {
-		IBrowsableCollection collection;
-		IBrowsableItem item;
-		int index;
-		public event EventHandler<BrowsablePointerChangedEventArgs> Changed;
-
-		public BrowsablePointer (IBrowsableCollection collection, int index)
-		{
-			if (collection == null)
-				throw new ArgumentNullException ("collection");
-
-			this.collection = collection;
-			this.Index = index;
-			item = Current;
-
-			collection.Changed += HandleCollectionChanged;
-			collection.ItemsChanged += HandleCollectionItemsChanged;
-		}
-
-		public IBrowsableCollection Collection {
-			get { return collection; }
-		}
-
-		public IBrowsableItem Current {
-			get {
-				if (!this.IsValid)
-					return null;
-				else 
-					return collection [index];
-			}
-		}
-
-		private bool Valid (int val)
-		{
-			return val >= 0 && val < collection.Count;
-		}
-
-		public bool IsValid {
-			get { return Valid (this.Index); }
-		}
-
-		public void MoveFirst ()
-		{
-			Index = 0;
-		}
-
-		public void MoveLast ()
-		{
-			Index = collection.Count - 1;
-		}
-		
-		public void MoveNext ()
-		{
-			MoveNext (false);
-		}
-
-		public void MoveNext (bool wrap)
-		{
-			int val = Index;
-
-			val++;
-			if (!Valid (val))
-				val = wrap ? 0 : Index;
-			
-			Index = val;
-		}
-		
-		public void MovePrevious ()
-		{
-			MovePrevious (false);
-		}
-
-		public void MovePrevious (bool wrap)
-		{
-			int val = Index;
-
-			val--;
-			if (!Valid (val))
-				val = wrap ? collection.Count - 1 : Index;
-
-			Index = val;
-		}
-
-		public int Index {
-			get { return index; }
-			set {
-				if (index != value) {
-					SetIndex (value);
-				}				
-			}
-		}
-
-		private void SetIndex (int value)
-		{
-			SetIndex (value, null);
-		}
-
-		private void SetIndex (int value, IBrowsableItemChanges changes)
-		{
-			BrowsablePointerChangedEventArgs args = new BrowsablePointerChangedEventArgs (Current, index, changes);
-			
-			index = value;
-			item = Current;
-			
-			if (Changed != null)
-				Changed (this, args);
-		}
-
-		protected void HandleCollectionItemsChanged (IBrowsableCollection collection,
-							     BrowsableEventArgs event_args)
-		{
-			foreach (int item in event_args.Items)
-				if (item == Index) 
-					SetIndex (Index, event_args.Changes);
-		}
-		
-		protected void HandleCollectionChanged (IBrowsableCollection collection)
-		{
-			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, null);
-
-				return;
-			}
-			
-			if (Valid (next_location))
-				SetIndex (next_location);
-			else if (Valid (old_location))
-				SetIndex (old_location);
-			else
-				SetIndex (0);
-		}
-	}
-}
diff --git a/src/Core/BrowsablePointerChangedEventArgs.cs b/src/Core/BrowsablePointerChangedEventArgs.cs
deleted file mode 100644
index e0b26d3..0000000
--- a/src/Core/BrowsablePointerChangedEventArgs.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * FSpot.BrowsablePointerChangedEventArgs.cs
- *
- * Author(s):
- *	Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- */
-
-namespace FSpot
-{
-	public class BrowsablePointerChangedEventArgs : System.EventArgs
-	{
-		IBrowsableItem previous_item;
-		public IBrowsableItem PreviousItem {
-			get { return previous_item; }
-		}
-
-		int previous_index;
-		public int PreviousIndex {
-			get { return previous_index; }
-		}
-
-		IBrowsableItemChanges changes;
-		public IBrowsableItemChanges Changes {
-			get { return changes; }
-		}
-
-		public BrowsablePointerChangedEventArgs (IBrowsableItem previous_item, int previous_index, IBrowsableItemChanges changes) : base ()
-		{
-			this.previous_item = previous_item;
-			this.previous_index = previous_index;
-			this.changes = changes;
-		}
-	}
-}
diff --git a/src/Core/Category.cs b/src/Core/Category.cs
deleted file mode 100644
index a7ed123..0000000
--- a/src/Core/Category.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * FSpot.Category.cs
- * 
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace FSpot
-{
-	public class Category : Tag {
-		List<Tag> children;
-		bool children_need_sort;
-		public IList<Tag> Children {
-			get {
-				if (children_need_sort)
-					children.Sort ();
-				return children.ToArray ();
-			}
-			set {
-				children = new List<Tag> (value);
-				children_need_sort = true;
-			}
-		}
-	
-		// Appends all of this categories descendents to the list
-		public void AddDescendentsTo (IList<Tag> list)
-		{
-			if (list == null)
-				throw new ArgumentNullException ("list");
-
-			foreach (Tag tag in children) {
-				if (! list.Contains (tag))
-					list.Add (tag);
-	
-				Category cat = tag as Category;
-				if (cat == null)
-					continue;
-		
-				cat.AddDescendentsTo (list);
-			}
-		}
-	
-		public void AddChild (Tag child)
-		{
-			children.Add (child);
-			children_need_sort = true;
-		}
-	
-		public void RemoveChild (Tag child)
-		{
-			children.Remove (child);
-			children_need_sort = true;
-		}
-	
-		public Category (Category category, uint id, string name)
-			: base (category, id, name)
-		{
-			children = new List<Tag> ();
-		}
-	}
-}
diff --git a/src/Core/ColorManagement.cs b/src/Core/ColorManagement.cs
deleted file mode 100644
index 083268e..0000000
--- a/src/Core/ColorManagement.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * FSpot.Core.ColorManagement.cs
- *
- * Author(s):
- * 	Vasiliy Kirilichev <vasyok at gmail.com>
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * Copyright (c) 2008-2009 Novell, Inc.
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using System;
-using System.IO;
-using System.Collections.Generic;
-
-namespace FSpot {
-	public static class ColorManagement {
-		static string [] search_dir = { "/usr/share/color/icc", Path.Combine (Global.HomeDirectory, ".color/icc"), "/usr/local/share/color/icc " };
-
-		static Dictionary<string, Cms.Profile> profiles;
-		public static IDictionary<string, Cms.Profile> Profiles {
-			get {
-				if (profiles == null) {
-					profiles = new Dictionary<string, Cms.Profile> ();
-					Cms.Profile p = Cms.Profile.CreateStandardRgb ();
-					if (!profiles.ContainsKey (p.ProductDescription))
-						profiles.Add (p.ProductDescription, p);
-
-					p = Cms.Profile.CreateAlternateRgb ();
-					if (!profiles.ContainsKey (p.ProductDescription))
-						profiles.Add (p.ProductDescription, p);
-
-					foreach (var path in search_dir)
-						if (!profiles.ContainsKey (path))
-							AddProfiles (path, profiles);
-
-					if (XProfile != null)
-						if (!profiles.ContainsKey ("_x_profile_"))
-							profiles.Add ("_x_profile_", XProfile);
-				}
-				return profiles;
-			}
-		}
-
-		static Cms.Profile x_profile;
-		public static Cms.Profile XProfile {
-			get {
-				if (x_profile == null)
-					x_profile = Cms.Profile.GetScreenProfile (Gdk.Screen.Default);
-				return x_profile;
-			}
-		}
-
-		private static void AddProfiles (string path, IDictionary<string, Cms.Profile> profs)
-		{
-			//recursive search, only RGB color profiles would be added
-			if (Directory.Exists (path)) {
-				string[] IccColorProfilList = System.IO.Directory.GetFiles (path, "*.icc");
-				foreach (string ColorProfilePath in IccColorProfilList) {
-					Cms.Profile profile = new Cms.Profile (ColorProfilePath);
-					if ((Cms.IccColorSpace)profile.ColorSpace == Cms.IccColorSpace.Rgb && profile.ProductDescription != null && !profs.ContainsKey (profile.ProductDescription))
-						profs.Add(profile.ProductDescription, profile);
-				}
-				string[] IcmColorProfilList = System.IO.Directory.GetFiles (path, "*.icm");
-				foreach (string ColorProfilePath in IcmColorProfilList) {
-					Cms.Profile profile = new Cms.Profile (ColorProfilePath);
-					if ((Cms.IccColorSpace)profile.ColorSpace == Cms.IccColorSpace.Rgb && !profs.ContainsKey (profile.ProductDescription))
-						profs.Add(profile.ProductDescription, profile);
-				}
-				string[] DirList = System.IO.Directory.GetDirectories (path);
-					foreach (string dir in DirList)
-						AddProfiles (dir, profs);
-			}
-		}
-		
-		public static void ApplyProfile (Gdk.Pixbuf pixbuf, Cms.Profile destination_profile)
-		{
-			ApplyProfile (pixbuf, Cms.Profile.CreateStandardRgb (), destination_profile);
-		}
-
-		public static void ApplyProfile (Gdk.Pixbuf pixbuf, Cms.Profile image_profile, Cms.Profile destination_profile)
-		{
-			if (pixbuf == null || pixbuf.HasAlpha)
-				return;
-
-			image_profile = image_profile ?? Cms.Profile.CreateStandardRgb ();
-
-			Cms.Profile [] list = new Cms.Profile [] { image_profile, destination_profile };
-			Cms.Transform transform = new Cms.Transform (list,
-								     PixbufUtils.PixbufCmsFormat (pixbuf),
-								     PixbufUtils.PixbufCmsFormat (pixbuf),
-								     Cms.Intent.Perceptual,
-								     0x0000);
-			PixbufUtils.ColorAdjust (pixbuf, pixbuf, transform);
-		}
-	}
-}
diff --git a/src/Core/DbItem.cs b/src/Core/DbItem.cs
deleted file mode 100644
index c2efc7b..0000000
--- a/src/Core/DbItem.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * FSpot.DbItem.cs
- *
- * Author(s):
- *	Larry Ewing
- *	Stephane Delcroix
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-
-namespace FSpot
-{
-	public class DbItem {
-		uint id;
-		public uint Id {
-			get { return id; }
-		}
-	
-		protected DbItem (uint id) {
-			this.id = id;
-		}
-	}
-
-	public class DbItemEventArgs<T> : EventArgs where T : DbItem {
-		private T [] items;
-
-		public T [] Items {
-			get { return items; }
-		}
-
-		public DbItemEventArgs (T [] items) : base ()
-		{
-			this.items = items;
-		}
-
-		public DbItemEventArgs (T item) : base ()
-		{
-			this.items = new T [] { item };
-		}
-	}
-}
diff --git a/src/Core/Defines.cs b/src/Core/Defines.cs
deleted file mode 100644
index ee16c52..0000000
--- a/src/Core/Defines.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// Defines.cs
-// Get the locale directory
-//
-// Authors: 
-//	Martin Willemoes Hansen
-//
-// (C) 2004 Martin Willemoes Hansen
-// 
-
-namespace FSpot {
-	public struct Defines {
-		public const string LOCALE_DIR = "/home/ruben/Build/share/locale";
-		public const string VERSION = "0.7.1";
-		public const string PACKAGE = "f-spot";
-		public const string PREFIX = "/home/ruben/Build";
-		public const string APP_DATA_DIR = "/home/ruben/Build/share/f-spot";
-		public const string BINDIR = PREFIX + "/bin";
-	}			
-}
diff --git a/src/Core/Defines.cs.in b/src/Core/Defines.cs.in
deleted file mode 100644
index 3fd7d47..0000000
--- a/src/Core/Defines.cs.in
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// Defines.cs
-// Get the locale directory
-//
-// Authors: 
-//	Martin Willemoes Hansen
-//
-// (C) 2004 Martin Willemoes Hansen
-// 
-
-namespace FSpot {
-	public struct Defines {
-		public const string LOCALE_DIR = "@prefix@/share/locale";
-		public const string VERSION = "@VERSION@";
-		public const string PACKAGE = "@PACKAGE@";
-		public const string PREFIX = "@prefix@";
-		public const string APP_DATA_DIR = "@prefix@/share/@PACKAGE@";
-		public const string BINDIR = PREFIX + "/bin";
-	}			
-}
diff --git a/src/Core/Delay.cs b/src/Core/Delay.cs
deleted file mode 100644
index af0aff6..0000000
--- a/src/Core/Delay.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Delay.cs
- *
- * Copyright 2007 Novell Inc.
- * 
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- * See COPYING for license information.
- *
- */
-
-using System;
-
-namespace FSpot
-{
-	public class Delay
-	{
-		object syncHandle = new object ();
-
-		public Delay (uint interval, GLib.IdleHandler op)
-		{
-			this.op = op;
-			this.interval = interval;
-		}
-
-		public Delay (GLib.IdleHandler op) 
-		{
-			this.op = op;
-		}
-
-		uint source;
-		uint interval;
-
-		private GLib.IdleHandler op;
-
-		private bool HandleOperation ()
-		{
-			lock (syncHandle) {
-				bool runagain = op ();
-				if (!runagain)
-					source = 0;
-
-				return runagain;
-			}
-		}
-		
-		public void Start () {
-			lock (syncHandle) {
-				if (this.IsPending)
-					return;
-
-				if (interval != 0) 
-					source = GLib.Timeout.Add (interval, new GLib.TimeoutHandler (HandleOperation));
-				else 
-					source = GLib.Idle.Add (new GLib.IdleHandler (HandleOperation));
-			}
-		}
-
-		public bool IsPending {
-			get {
-				return source != 0;
-			}
-		}
-
-		public void Connect (Gtk.Object obj)
-		{
-			if (obj == null)
-				throw new ArgumentNullException ("obj");
-			obj.Destroyed += HandleDestroy; 
-		}	     
-		
-		private void HandleDestroy (object sender, System.EventArgs args)
-		{
-			this.Stop ();
-		}
-		
-		public void Stop () 
-		{
-			lock (syncHandle) {
-				if (this.IsPending) {
-					GLib.Source.Remove (source);
-					source = 0;
-				}
-			}
-		}
-
-		public void Restart ()
-		{
-			Stop ();
-			Start ();
-		}
-	}
-}
diff --git a/src/Bling/Animation.cs b/src/Core/FSpot.Bling/FSpot.Bling/Animation.cs
similarity index 100%
rename from src/Bling/Animation.cs
rename to src/Core/FSpot.Bling/FSpot.Bling/Animation.cs
diff --git a/src/Bling/BackEase.cs b/src/Core/FSpot.Bling/FSpot.Bling/BackEase.cs
similarity index 100%
rename from src/Bling/BackEase.cs
rename to src/Core/FSpot.Bling/FSpot.Bling/BackEase.cs
diff --git a/src/Bling/CubicEase.cs b/src/Core/FSpot.Bling/FSpot.Bling/CubicEase.cs
similarity index 100%
rename from src/Bling/CubicEase.cs
rename to src/Core/FSpot.Bling/FSpot.Bling/CubicEase.cs
diff --git a/src/Bling/DoubleAnimation.cs b/src/Core/FSpot.Bling/FSpot.Bling/DoubleAnimation.cs
similarity index 100%
rename from src/Bling/DoubleAnimation.cs
rename to src/Core/FSpot.Bling/FSpot.Bling/DoubleAnimation.cs
diff --git a/src/Bling/EasedAnimation.cs b/src/Core/FSpot.Bling/FSpot.Bling/EasedAnimation.cs
similarity index 100%
rename from src/Bling/EasedAnimation.cs
rename to src/Core/FSpot.Bling/FSpot.Bling/EasedAnimation.cs
diff --git a/src/Bling/EasingFunction.cs b/src/Core/FSpot.Bling/FSpot.Bling/EasingFunction.cs
similarity index 100%
rename from src/Bling/EasingFunction.cs
rename to src/Core/FSpot.Bling/FSpot.Bling/EasingFunction.cs
diff --git a/src/Bling/EasingMode.cs b/src/Core/FSpot.Bling/FSpot.Bling/EasingMode.cs
similarity index 100%
rename from src/Bling/EasingMode.cs
rename to src/Core/FSpot.Bling/FSpot.Bling/EasingMode.cs
diff --git a/src/Bling/QuinticEase.cs b/src/Core/FSpot.Bling/FSpot.Bling/QuinticEase.cs
similarity index 100%
rename from src/Bling/QuinticEase.cs
rename to src/Core/FSpot.Bling/FSpot.Bling/QuinticEase.cs
diff --git a/src/Core/FSpot.Bling/Makefile.am b/src/Core/FSpot.Bling/Makefile.am
new file mode 100644
index 0000000..ce78870
--- /dev/null
+++ b/src/Core/FSpot.Bling/Makefile.am
@@ -0,0 +1,17 @@
+ASSEMBLY = FSpot.Bling
+TARGET = library
+LINK = $(REF_FSPOT_BLING)
+
+SOURCES =  \
+	FSpot.Bling/Animation.cs \
+	FSpot.Bling/BackEase.cs \
+	FSpot.Bling/CubicEase.cs \
+	FSpot.Bling/DoubleAnimation.cs \
+	FSpot.Bling/EasedAnimation.cs \
+	FSpot.Bling/EasingFunction.cs \
+	FSpot.Bling/EasingMode.cs \
+	FSpot.Bling/QuinticEase.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Core/FSpot.Bling/Makefile.in b/src/Core/FSpot.Bling/Makefile.in
new file mode 100644
index 0000000..eb8b19e
--- /dev/null
+++ b/src/Core/FSpot.Bling/Makefile.in
@@ -0,0 +1,813 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Core/FSpot.Bling
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Bling
+TARGET = library
+LINK = $(REF_FSPOT_BLING) $(am__append_1)
+SOURCES = \
+	FSpot.Bling/Animation.cs \
+	FSpot.Bling/BackEase.cs \
+	FSpot.Bling/CubicEase.cs \
+	FSpot.Bling/DoubleAnimation.cs \
+	FSpot.Bling/EasedAnimation.cs \
+	FSpot.Bling/EasingFunction.cs \
+	FSpot.Bling/EasingMode.cs \
+	FSpot.Bling/QuinticEase.cs
+
+RESOURCES = 
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Core/FSpot.Bling/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Core/FSpot.Bling/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Cms/CctTable.cs b/src/Core/FSpot.Cms/Cms/CctTable.cs
similarity index 100%
rename from src/Cms/CctTable.cs
rename to src/Core/FSpot.Cms/Cms/CctTable.cs
diff --git a/src/Cms/CmsException.cs b/src/Core/FSpot.Cms/Cms/CmsException.cs
similarity index 100%
rename from src/Cms/CmsException.cs
rename to src/Core/FSpot.Cms/Cms/CmsException.cs
diff --git a/src/Cms/ColorCIELCh.cs b/src/Core/FSpot.Cms/Cms/ColorCIELCh.cs
similarity index 100%
rename from src/Cms/ColorCIELCh.cs
rename to src/Core/FSpot.Cms/Cms/ColorCIELCh.cs
diff --git a/src/Cms/ColorCIELab.cs b/src/Core/FSpot.Cms/Cms/ColorCIELab.cs
similarity index 100%
rename from src/Cms/ColorCIELab.cs
rename to src/Core/FSpot.Cms/Cms/ColorCIELab.cs
diff --git a/src/Cms/ColorCIEXYZ.cs b/src/Core/FSpot.Cms/Cms/ColorCIEXYZ.cs
similarity index 100%
rename from src/Cms/ColorCIEXYZ.cs
rename to src/Core/FSpot.Cms/Cms/ColorCIEXYZ.cs
diff --git a/src/Cms/ColorCIExyY.cs b/src/Core/FSpot.Cms/Cms/ColorCIExyY.cs
similarity index 100%
rename from src/Cms/ColorCIExyY.cs
rename to src/Core/FSpot.Cms/Cms/ColorCIExyY.cs
diff --git a/src/Cms/Format.cs b/src/Core/FSpot.Cms/Cms/Format.cs
similarity index 100%
rename from src/Cms/Format.cs
rename to src/Core/FSpot.Cms/Cms/Format.cs
diff --git a/src/Cms/GammaTable.cs b/src/Core/FSpot.Cms/Cms/GammaTable.cs
similarity index 100%
rename from src/Cms/GammaTable.cs
rename to src/Core/FSpot.Cms/Cms/GammaTable.cs
diff --git a/src/Cms/IccColorSpace.cs b/src/Core/FSpot.Cms/Cms/IccColorSpace.cs
similarity index 100%
rename from src/Cms/IccColorSpace.cs
rename to src/Core/FSpot.Cms/Cms/IccColorSpace.cs
diff --git a/src/Cms/IccProfileClass.cs b/src/Core/FSpot.Cms/Cms/IccProfileClass.cs
similarity index 100%
rename from src/Cms/IccProfileClass.cs
rename to src/Core/FSpot.Cms/Cms/IccProfileClass.cs
diff --git a/src/Cms/Intent.cs b/src/Core/FSpot.Cms/Cms/Intent.cs
similarity index 100%
rename from src/Cms/Intent.cs
rename to src/Core/FSpot.Cms/Cms/Intent.cs
diff --git a/src/Cms/NativeMethods.cs b/src/Core/FSpot.Cms/Cms/NativeMethods.cs
similarity index 100%
rename from src/Cms/NativeMethods.cs
rename to src/Core/FSpot.Cms/Cms/NativeMethods.cs
diff --git a/src/Cms/Profile.cs b/src/Core/FSpot.Cms/Cms/Profile.cs
similarity index 100%
rename from src/Cms/Profile.cs
rename to src/Core/FSpot.Cms/Cms/Profile.cs
diff --git a/src/Cms/SaveException.cs b/src/Core/FSpot.Cms/Cms/SaveException.cs
similarity index 100%
rename from src/Cms/SaveException.cs
rename to src/Core/FSpot.Cms/Cms/SaveException.cs
diff --git a/src/Cms/Transform.cs b/src/Core/FSpot.Cms/Cms/Transform.cs
similarity index 100%
rename from src/Cms/Transform.cs
rename to src/Core/FSpot.Cms/Cms/Transform.cs
diff --git a/src/Cms/FSpot.Cms.dll.config b/src/Core/FSpot.Cms/FSpot.Cms.dll.config
similarity index 100%
rename from src/Cms/FSpot.Cms.dll.config
rename to src/Core/FSpot.Cms/FSpot.Cms.dll.config
diff --git a/src/Cms/FSpot.Cms.dll.config.in b/src/Core/FSpot.Cms/FSpot.Cms.dll.config.in
similarity index 100%
rename from src/Cms/FSpot.Cms.dll.config.in
rename to src/Core/FSpot.Cms/FSpot.Cms.dll.config.in
diff --git a/src/Core/FSpot.Cms/Makefile.am b/src/Core/FSpot.Cms/Makefile.am
new file mode 100644
index 0000000..0b0091b
--- /dev/null
+++ b/src/Core/FSpot.Cms/Makefile.am
@@ -0,0 +1,28 @@
+ASSEMBLY = FSpot.Cms
+ASSEMBLY_BUILD_FLAGS = -unsafe
+TARGET = library
+LINK = $(REF_FSPOT_CMS)
+
+SOURCES =  \
+	Cms/CctTable.cs \
+	Cms/CmsException.cs \
+	Cms/ColorCIELab.cs \
+	Cms/ColorCIELCh.cs \
+	Cms/ColorCIExyY.cs \
+	Cms/ColorCIEXYZ.cs \
+	Cms/Format.cs \
+	Cms/GammaTable.cs \
+	Cms/IccColorSpace.cs \
+	Cms/IccProfileClass.cs \
+	Cms/Intent.cs \
+	Cms/NativeMethods.cs \
+	Cms/Profile.cs \
+	Cms/SaveException.cs \
+	Cms/Transform.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
+
+EXTRA_DIST += FSpot.Cms.dll.config
+module_SCRIPTS += FSpot.Cms.dll.config
diff --git a/src/Core/FSpot.Cms/Makefile.in b/src/Core/FSpot.Cms/Makefile.in
new file mode 100644
index 0000000..916338b
--- /dev/null
+++ b/src/Core/FSpot.Cms/Makefile.in
@@ -0,0 +1,824 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/FSpot.Cms.dll.config.in $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Core/FSpot.Cms
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = FSpot.Cms.dll.config
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Cms
+ASSEMBLY_BUILD_FLAGS = -unsafe
+TARGET = library
+LINK = $(REF_FSPOT_CMS) $(am__append_1)
+SOURCES = \
+	Cms/CctTable.cs \
+	Cms/CmsException.cs \
+	Cms/ColorCIELab.cs \
+	Cms/ColorCIELCh.cs \
+	Cms/ColorCIExyY.cs \
+	Cms/ColorCIEXYZ.cs \
+	Cms/Format.cs \
+	Cms/GammaTable.cs \
+	Cms/IccColorSpace.cs \
+	Cms/IccProfileClass.cs \
+	Cms/Intent.cs \
+	Cms/NativeMethods.cs \
+	Cms/Profile.cs \
+	Cms/SaveException.cs \
+	Cms/Transform.cs
+
+RESOURCES = 
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) FSpot.Cms.dll.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+	$(THEME_ICONS_SOURCE) FSpot.Cms.dll.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Core/FSpot.Cms/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Core/FSpot.Cms/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+FSpot.Cms.dll.config: $(top_builddir)/config.status $(srcdir)/FSpot.Cms.dll.config.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/extensions/f-spot.global.addins b/src/Core/FSpot.Core/FSpot.Core.addins
similarity index 100%
rename from extensions/f-spot.global.addins
rename to src/Core/FSpot.Core/FSpot.Core.addins
diff --git a/src/Core/FSpot.Core.dll.config b/src/Core/FSpot.Core/FSpot.Core.dll.config
similarity index 100%
rename from src/Core/FSpot.Core.dll.config
rename to src/Core/FSpot.Core/FSpot.Core.dll.config
diff --git a/src/Core/FSpot.Core.dll.config.in b/src/Core/FSpot.Core/FSpot.Core.dll.config.in
similarity index 100%
rename from src/Core/FSpot.Core.dll.config.in
rename to src/Core/FSpot.Core/FSpot.Core.dll.config.in
diff --git a/src/Core/FSpot.Core/FSpot.Core/BrowsableCollectionProxy.cs b/src/Core/FSpot.Core/FSpot.Core/BrowsableCollectionProxy.cs
new file mode 100644
index 0000000..7a818cc
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/BrowsableCollectionProxy.cs
@@ -0,0 +1,92 @@
+/*
+ * FSpot.BrowsableCollectionProxy.cs
+ *
+ * Author(s):
+ *    Paul Wellner Bou
+ *
+ * This is free software, See COPYING for details
+ */
+
+using System.Collections.Generic;
+
+namespace FSpot.Core {
+    public class BrowsableCollectionProxy : IBrowsableCollection {
+
+        private IBrowsableCollection collection;
+
+        public IBrowsableCollection Collection {
+            get { return collection; }
+            set {
+                if (collection == value)
+                    return;
+
+                if (collection != null) {
+                    collection.Changed -= ChangedHandler;
+                    collection.ItemsChanged -= ItemsChangedHandler;
+                }
+
+                collection = value;
+
+                if (collection != null) {
+                    collection.Changed += ChangedHandler;
+                    collection.ItemsChanged += ItemsChangedHandler;
+                }
+
+                ChangedHandler (this);
+            }
+        }
+
+        public int Count {
+            get { return collection != null ? collection.Count : 0; }
+        }
+
+        public int IndexOf (IBrowsableItem item)
+        {
+            if (collection == null)
+                return -1;
+            return collection.IndexOf (item);
+        }
+
+        public bool Contains (IBrowsableItem item)
+        {
+            if (collection == null)
+                return false;
+            return collection.Contains (item);
+        }
+
+        public IBrowsableItem this [int index] {
+            get {
+                if (collection == null)
+                    throw new System.IndexOutOfRangeException ();
+                return collection [index];
+            }
+        }
+
+        public void MarkChanged (int num, IBrowsableItemChanges changes)
+        {
+            if (collection != null)
+                collection.MarkChanged (num, changes);
+        }
+
+        public IBrowsableItem [] Items {
+            get {
+                return collection.Items;
+            }
+        }
+
+        protected virtual void ChangedHandler (IBrowsableCollection collection)
+        {
+            if (Changed != null)
+                Changed (this);
+        }
+
+        protected virtual void ItemsChangedHandler (IBrowsableCollection collection, BrowsableEventArgs args)
+        {
+            if (ItemsChanged != null)
+                ItemsChanged (this, args);
+        }
+
+        public event IBrowsableCollectionChangedHandler Changed;
+        public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
+    }
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/BrowsableEventArgs.cs b/src/Core/FSpot.Core/FSpot.Core/BrowsableEventArgs.cs
new file mode 100644
index 0000000..22144b1
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/BrowsableEventArgs.cs
@@ -0,0 +1,35 @@
+/*
+ * FSpot.BrowsableEventArgs.cs
+ *
+ * Author(s):
+ *	Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+
+namespace FSpot.Core
+{
+	public class BrowsableEventArgs : System.EventArgs {
+		private readonly int [] items;
+		public int [] Items {
+			get { return items; }
+		}
+
+		IBrowsableItemChanges changes;
+		public IBrowsableItemChanges Changes {
+			get { return changes; }
+		}
+
+		public BrowsableEventArgs (int item, IBrowsableItemChanges changes) : this (new int[] {item}, changes)
+		{
+		}
+
+		public BrowsableEventArgs (int[] items, IBrowsableItemChanges changes)
+		{
+			this.items = items;
+			this.changes = changes;
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/BrowsablePointer.cs b/src/Core/FSpot.Core/FSpot.Core/BrowsablePointer.cs
new file mode 100644
index 0000000..768d26b
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/BrowsablePointer.cs
@@ -0,0 +1,152 @@
+/*
+ * BrowsablePointer.cs
+ *
+ * Author(s):
+ *	Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+using System;
+
+namespace FSpot.Core
+{
+
+	public class BrowsablePointer {
+		IBrowsableCollection collection;
+		IBrowsableItem item;
+		int index;
+		public event EventHandler<BrowsablePointerChangedEventArgs> Changed;
+
+		public BrowsablePointer (IBrowsableCollection collection, int index)
+		{
+			if (collection == null)
+				throw new ArgumentNullException ("collection");
+
+			this.collection = collection;
+			this.Index = index;
+			item = Current;
+
+			collection.Changed += HandleCollectionChanged;
+			collection.ItemsChanged += HandleCollectionItemsChanged;
+		}
+
+		public IBrowsableCollection Collection {
+			get { return collection; }
+		}
+
+		public IBrowsableItem Current {
+			get {
+				if (!this.IsValid)
+					return null;
+				else
+					return collection [index];
+			}
+		}
+
+		private bool Valid (int val)
+		{
+			return val >= 0 && val < collection.Count;
+		}
+
+		public bool IsValid {
+			get { return Valid (this.Index); }
+		}
+
+		public void MoveFirst ()
+		{
+			Index = 0;
+		}
+
+		public void MoveLast ()
+		{
+			Index = collection.Count - 1;
+		}
+
+		public void MoveNext ()
+		{
+			MoveNext (false);
+		}
+
+		public void MoveNext (bool wrap)
+		{
+			int val = Index;
+
+			val++;
+			if (!Valid (val))
+				val = wrap ? 0 : Index;
+
+			Index = val;
+		}
+
+		public void MovePrevious ()
+		{
+			MovePrevious (false);
+		}
+
+		public void MovePrevious (bool wrap)
+		{
+			int val = Index;
+
+			val--;
+			if (!Valid (val))
+				val = wrap ? collection.Count - 1 : Index;
+
+			Index = val;
+		}
+
+		public int Index {
+			get { return index; }
+			set {
+				if (index != value) {
+					SetIndex (value);
+				}
+			}
+		}
+
+		private void SetIndex (int value)
+		{
+			SetIndex (value, null);
+		}
+
+		private void SetIndex (int value, IBrowsableItemChanges changes)
+		{
+			BrowsablePointerChangedEventArgs args = new BrowsablePointerChangedEventArgs (Current, index, changes);
+
+			index = value;
+			item = Current;
+
+			if (Changed != null)
+				Changed (this, args);
+		}
+
+		protected void HandleCollectionItemsChanged (IBrowsableCollection collection,
+							     BrowsableEventArgs event_args)
+		{
+			foreach (int item in event_args.Items)
+				if (item == Index)
+					SetIndex (Index, event_args.Changes);
+		}
+
+		protected void HandleCollectionChanged (IBrowsableCollection collection)
+		{
+			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, null);
+
+				return;
+			}
+
+			if (Valid (next_location))
+				SetIndex (next_location);
+			else if (Valid (old_location))
+				SetIndex (old_location);
+			else
+				SetIndex (0);
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/BrowsablePointerChangedEventArgs.cs b/src/Core/FSpot.Core/FSpot.Core/BrowsablePointerChangedEventArgs.cs
new file mode 100644
index 0000000..053df03
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/BrowsablePointerChangedEventArgs.cs
@@ -0,0 +1,36 @@
+/*
+ * BrowsablePointerChangedEventArgs.cs
+ *
+ * Author(s):
+ *	Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+namespace FSpot.Core
+{
+	public class BrowsablePointerChangedEventArgs : System.EventArgs
+	{
+		IBrowsableItem previous_item;
+		public IBrowsableItem PreviousItem {
+			get { return previous_item; }
+		}
+
+		int previous_index;
+		public int PreviousIndex {
+			get { return previous_index; }
+		}
+
+		IBrowsableItemChanges changes;
+		public IBrowsableItemChanges Changes {
+			get { return changes; }
+		}
+
+		public BrowsablePointerChangedEventArgs (IBrowsableItem previous_item, int previous_index, IBrowsableItemChanges changes) : base ()
+		{
+			this.previous_item = previous_item;
+			this.previous_index = previous_index;
+			this.changes = changes;
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/Category.cs b/src/Core/FSpot.Core/FSpot.Core/Category.cs
new file mode 100644
index 0000000..f158fff
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/Category.cs
@@ -0,0 +1,67 @@
+/*
+ * FSpot.Category.cs
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace FSpot.Core
+{
+	public class Category : Tag {
+		List<Tag> children;
+		bool children_need_sort;
+		public IList<Tag> Children {
+			get {
+				if (children_need_sort)
+					children.Sort ();
+				return children.ToArray ();
+			}
+			set {
+				children = new List<Tag> (value);
+				children_need_sort = true;
+			}
+		}
+
+		// Appends all of this categories descendents to the list
+		public void AddDescendentsTo (IList<Tag> list)
+		{
+			if (list == null)
+				throw new ArgumentNullException ("list");
+
+			foreach (Tag tag in children) {
+				if (! list.Contains (tag))
+					list.Add (tag);
+
+				Category cat = tag as Category;
+				if (cat == null)
+					continue;
+
+				cat.AddDescendentsTo (list);
+			}
+		}
+
+		public void AddChild (Tag child)
+		{
+			children.Add (child);
+			children_need_sort = true;
+		}
+
+		public void RemoveChild (Tag child)
+		{
+			children.Remove (child);
+			children_need_sort = true;
+		}
+
+		public Category (Category category, uint id, string name)
+			: base (category, id, name)
+		{
+			children = new List<Tag> ();
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/DbItem.cs b/src/Core/FSpot.Core/FSpot.Core/DbItem.cs
new file mode 100644
index 0000000..712534a
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/DbItem.cs
@@ -0,0 +1,43 @@
+/*
+ * FSpot.DbItem.cs
+ *
+ * Author(s):
+ *	Larry Ewing
+ *	Stephane Delcroix
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+
+namespace FSpot.Core
+{
+	public class DbItem {
+		uint id;
+		public uint Id {
+			get { return id; }
+		}
+
+		protected DbItem (uint id) {
+			this.id = id;
+		}
+	}
+
+	public class DbItemEventArgs<T> : EventArgs where T : DbItem {
+		private T [] items;
+
+		public T [] Items {
+			get { return items; }
+		}
+
+		public DbItemEventArgs (T [] items) : base ()
+		{
+			this.items = items;
+		}
+
+		public DbItemEventArgs (T item) : base ()
+		{
+			this.items = new T [] { item };
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/Defines.cs b/src/Core/FSpot.Core/FSpot.Core/Defines.cs
new file mode 100644
index 0000000..a22812a
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/Defines.cs
@@ -0,0 +1,20 @@
+//
+// Defines.cs
+// Get the locale directory
+//
+// Authors:
+//	Martin Willemoes Hansen
+//
+// (C) 2004 Martin Willemoes Hansen
+//
+
+namespace FSpot.Core {
+	public struct Defines {
+		public const string LOCALE_DIR = "/home/ruben/Build/share/locale";
+		public const string VERSION = "0.7.2";
+		public const string PACKAGE = "f-spot";
+		public const string PREFIX = "/home/ruben/Build";
+		public const string APP_DATA_DIR = "/home/ruben/Build/share/f-spot";
+		public const string BINDIR = PREFIX + "/bin";
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/Defines.cs.in b/src/Core/FSpot.Core/FSpot.Core/Defines.cs.in
new file mode 100644
index 0000000..60af4dd
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/Defines.cs.in
@@ -0,0 +1,20 @@
+//
+// Defines.cs
+// Get the locale directory
+//
+// Authors:
+//	Martin Willemoes Hansen
+//
+// (C) 2004 Martin Willemoes Hansen
+//
+
+namespace FSpot.Core {
+	public struct Defines {
+		public const string LOCALE_DIR = "@prefix@/share/locale";
+		public const string VERSION = "@VERSION@";
+		public const string PACKAGE = "@PACKAGE@";
+		public const string PREFIX = "@prefix@";
+		public const string APP_DATA_DIR = "@prefix@/share/@PACKAGE@";
+		public const string BINDIR = PREFIX + "/bin";
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/Delay.cs b/src/Core/FSpot.Core/FSpot.Core/Delay.cs
new file mode 100644
index 0000000..b21fc12
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/Delay.cs
@@ -0,0 +1,94 @@
+/*
+ * Delay.cs
+ *
+ * Copyright 2007 Novell Inc.
+ *
+ * Author
+ *   Larry Ewing <lewing at novell.com>
+ *
+ * See COPYING for license information.
+ *
+ */
+
+using System;
+
+namespace FSpot.Core
+{
+	public class Delay
+	{
+		object syncHandle = new object ();
+
+		public Delay (uint interval, GLib.IdleHandler op)
+		{
+			this.op = op;
+			this.interval = interval;
+		}
+
+		public Delay (GLib.IdleHandler op)
+		{
+			this.op = op;
+		}
+
+		uint source;
+		uint interval;
+
+		private GLib.IdleHandler op;
+
+		private bool HandleOperation ()
+		{
+			lock (syncHandle) {
+				bool runagain = op ();
+				if (!runagain)
+					source = 0;
+
+				return runagain;
+			}
+		}
+
+		public void Start () {
+			lock (syncHandle) {
+				if (this.IsPending)
+					return;
+
+				if (interval != 0)
+					source = GLib.Timeout.Add (interval, new GLib.TimeoutHandler (HandleOperation));
+				else
+					source = GLib.Idle.Add (new GLib.IdleHandler (HandleOperation));
+			}
+		}
+
+		public bool IsPending {
+			get {
+				return source != 0;
+			}
+		}
+
+		public void Connect (Gtk.Object obj)
+		{
+			if (obj == null)
+				throw new ArgumentNullException ("obj");
+			obj.Destroyed += HandleDestroy;
+		}
+
+		private void HandleDestroy (object sender, System.EventArgs args)
+		{
+			this.Stop ();
+		}
+
+		public void Stop ()
+		{
+			lock (syncHandle) {
+				if (this.IsPending) {
+					GLib.Source.Remove (source);
+					source = 0;
+				}
+			}
+		}
+
+		public void Restart ()
+		{
+			Stop ();
+			Start ();
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/FileBrowsableItem.cs b/src/Core/FSpot.Core/FSpot.Core/FileBrowsableItem.cs
new file mode 100644
index 0000000..9a13619
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/FileBrowsableItem.cs
@@ -0,0 +1,113 @@
+/*
+ * FileBrowsableItem.cs
+ *
+ * Author(s):
+ *	Larry Ewing  (lewing at novell.com)
+ *	Stephane Delcroix  (stephane at delcroix.org)
+ *
+ * This is free software. See COPYING for details
+ */
+
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Xml;
+
+using Hyena;
+using FSpot.Utils;
+
+using Mono.Unix.Native;
+
+namespace FSpot.Core {
+    public class FileBrowsableItem : IBrowsableItem
+    {
+        bool metadata_parsed = false;
+
+        public FileBrowsableItem (SafeUri uri)
+        {
+            DefaultVersion = new FileBrowsableItemVersion () {
+                Uri = uri
+            };
+        }
+
+        private void EnsureMetadataParsed ()
+        {
+            if (metadata_parsed)
+                return;
+
+            using (var metadata = Metadata.Parse (DefaultVersion.Uri)) {
+                var date = metadata.ImageTag.DateTime;
+                time = date.HasValue ? date.Value : CreateDate;
+                description = metadata.ImageTag.Comment;
+            }
+
+            metadata_parsed = true;
+        }
+
+        private DateTime CreateDate {
+            get {
+                var info = GLib.FileFactory.NewForUri (DefaultVersion.Uri).QueryInfo ("time::changed", GLib.FileQueryInfoFlags.None, null);
+                return NativeConvert.ToDateTime ((long)info.GetAttributeULong ("time::changed"));
+            }
+        }
+
+        public Tag [] Tags {
+            get {
+                return null;
+            }
+        }
+
+        private DateTime time;
+        public DateTime Time {
+            get {
+                EnsureMetadataParsed ();
+                return time;
+            }
+        }
+
+        public IBrowsableItemVersion DefaultVersion { get; private set; }
+
+		public IEnumerable<IBrowsableItemVersion> Versions {
+			get { yield return DefaultVersion; }
+		}
+
+        private string description;
+        public string Description {
+            get {
+                EnsureMetadataParsed ();
+                return description;
+            }
+        }
+
+        public string Name {
+            get {
+                return DefaultVersion.Uri.GetFilename ();
+            }
+        }
+
+        public uint Rating {
+            get {
+                return 0; //FIXME ndMaxxer: correct?
+            }
+        }
+
+        private class FileBrowsableItemVersion : IBrowsableItemVersion {
+            public string Name { get { return String.Empty; } }
+            public bool IsProtected { get { return true; } }
+
+            public SafeUri BaseUri { get { return Uri.GetBaseUri (); } }
+            public string Filename { get { return Uri.GetFilename (); } }
+            public SafeUri Uri { get; set; }
+
+            private string import_md5 = String.Empty;
+            public string ImportMD5 {
+                get {
+                    if (import_md5 == String.Empty)
+                        import_md5 = HashUtils.GenerateMD5 (Uri);
+                    return import_md5;
+                }
+            }
+        }
+    }
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/Global.cs b/src/Core/FSpot.Core/FSpot.Core/Global.cs
new file mode 100644
index 0000000..a7b1043
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/Global.cs
@@ -0,0 +1,76 @@
+/*
+ * Global.cs
+ *
+ * This is free software. See COPYING for details
+ *
+ */
+using System;
+using Hyena;
+
+namespace FSpot.Core {
+	public static class Global {
+		public static string HomeDirectory {
+			get { return System.IO.Path.Combine (System.Environment.GetEnvironmentVariable ("HOME"), System.String.Empty); }
+		}
+
+		//$XDG_CONFIG_HOME/f-spot or $HOME/.config/f-spot
+		private static string xdg_config_home = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);
+		private static string base_dir = System.IO.Path.Combine (xdg_config_home, "f-spot");
+		public static string BaseDirectory {
+			get { return base_dir; }
+			set { base_dir = value; }
+		}
+
+		private static SafeUri photo_uri;
+		public static SafeUri PhotoUri {
+			get { return photo_uri; }
+			set { photo_uri = value; }
+		}
+
+		public static string HelpDirectory {
+			get {
+				// path is relative
+				return "f-spot";
+			}
+		}
+
+		private static Cms.Profile display_profile;
+		public static Cms.Profile DisplayProfile {
+			set { display_profile = value; }
+			get { return display_profile; }
+		}
+
+		private static Cms.Profile destination_profile;
+		public static Cms.Profile DestinationProfile {
+			set { destination_profile = value; }
+			get { return destination_profile; }
+		}
+
+		private static Gtk.IconTheme icon_theme;
+		public static Gtk.IconTheme IconTheme {
+			get {
+				if (icon_theme == null) {
+					icon_theme = Gtk.IconTheme.Default;
+					icon_theme.AppendSearchPath (System.IO.Path.Combine (Defines.APP_DATA_DIR, "icons"));
+				}
+				return icon_theme;
+			}
+		}
+
+		private static string [] default_rc_files;
+		public static string [] DefaultRcFiles {
+			get {
+				if (default_rc_files == null)
+					default_rc_files = Gtk.Rc.DefaultFiles;
+				return default_rc_files;
+			}
+			set { default_rc_files = value; }
+		}
+
+		private static Gtk.PageSetup page_setup;
+		public static Gtk.PageSetup PageSetup {
+			get { return page_setup; }
+			set { page_setup = value; }
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/IBrowsableCollection.cs b/src/Core/FSpot.Core/FSpot.Core/IBrowsableCollection.cs
new file mode 100644
index 0000000..db8e217
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/IBrowsableCollection.cs
@@ -0,0 +1,43 @@
+/*
+ * IBrowsableCollection.cs
+ *
+ * Author(s):
+ *	Larry Ewing <lewing at novell.com>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+namespace FSpot.Core
+{
+	public delegate void IBrowsableCollectionChangedHandler (IBrowsableCollection collection);
+	public delegate void IBrowsableCollectionItemsChangedHandler (IBrowsableCollection collection, BrowsableEventArgs args);
+
+	public interface IBrowsableCollection {
+		// FIXME this should really be ToArray ()
+		IBrowsableItem [] Items {
+			get;
+		}
+
+		int IndexOf (IBrowsableItem item);
+
+		IBrowsableItem this [int index] {
+			get;
+		}
+
+		int Count {
+			get;
+		}
+
+		bool Contains (IBrowsableItem item);
+
+		// FIXME the Changed event needs to pass along information
+		// about the items that actually changed if possible.  For things like
+		// TrayView everything has to be redrawn when a single
+		// item has been added or removed which adds too much
+		// overhead.
+		event IBrowsableCollectionChangedHandler Changed;
+		event IBrowsableCollectionItemsChangedHandler ItemsChanged;
+
+		void MarkChanged (int index, IBrowsableItemChanges changes);
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/IBrowsableItem.cs b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItem.cs
new file mode 100644
index 0000000..dd9375d
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItem.cs
@@ -0,0 +1,69 @@
+/*
+ * IBrowsableItem.cs
+ *
+ * Author(s):
+ *  Larry Ewing <lewing at novell.com>
+ *  Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System.Collections.Generic;
+
+using Hyena;
+
+
+namespace FSpot.Core
+{
+
+	public interface IBrowsableItem
+	{
+
+#region Metadata
+
+		/// <summary>
+		///    The time the item was created.
+		/// </summary>
+		System.DateTime Time { get; }
+
+		/// <summary>
+		///    The tags which are dedicated to this item.
+		/// </summary>
+		Tag [] Tags { get; }
+
+		/// <summary>
+		///    The description of the item.
+		/// </summary>
+		string Description { get; }
+
+		/// <summary>
+		///    The name of the item.
+		/// </summary>
+		string Name { get; }
+
+		/// <summary>
+		///    The rating which is dedicted to this item. It should only range from 0 to 5.
+		/// </summary>
+		uint Rating { get; }
+
+#endregion
+
+
+#region Versioning
+
+		/// <summary>
+		///    The default version of this item. Every item must have at least one version and this must not be
+		///    <see langref="null"/>
+		/// </summary>
+		IBrowsableItemVersion DefaultVersion { get; }
+
+		/// <summary>
+		///    All versions of this item. Since every item must have at least the default version, this enumeration
+		///    must not be empty.
+		/// </summary>
+		IEnumerable<IBrowsableItemVersion> Versions { get; }
+
+#endregion
+
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemChanges.cs b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemChanges.cs
new file mode 100644
index 0000000..dcc0d73
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemChanges.cs
@@ -0,0 +1,43 @@
+/*
+ * IBrowsableItemChanges.cs
+ *
+ * Author(s):
+ * 	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ */
+
+namespace FSpot.Core
+{
+	public interface IBrowsableItemChanges
+	{
+		bool DataChanged {get;}
+		bool MetadataChanged {get;}
+	}
+
+	public class FullInvalidate : IBrowsableItemChanges
+	{
+		static FullInvalidate instance = new FullInvalidate ();
+		public static FullInvalidate Instance {
+			get { return instance; }
+		}
+
+		public bool DataChanged {
+			get { return true; }
+		}
+		public bool MetadataChanged {
+			get { return true; }
+		}
+	}
+
+	public class InvalidateData : IBrowsableItemChanges
+	{
+		static InvalidateData instance = new InvalidateData ();
+		public static InvalidateData Instance {
+			get { return instance; }
+		}
+
+		public bool DataChanged { get { return true; } }
+		public bool MetadataChanged { get { return false; } }
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemComparer.cs b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemComparer.cs
new file mode 100644
index 0000000..21d23ae
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemComparer.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace FSpot.Core
+{
+	public static class IBrowsableItemComparer {
+		public class CompareDateName : IComparer<IBrowsableItem>
+		{
+			public int Compare (IBrowsableItem p1, IBrowsableItem p2)
+			{
+				int result = p1.CompareDate (p2);
+
+				if (result == 0)
+					result = p1.CompareName (p2);
+
+				return result;
+			}
+		}
+
+		public class RandomSort : IComparer
+		{
+			Random random = new Random ();
+
+			public int Compare (object obj1, object obj2)
+			{
+				return random.Next (-5, 5);
+			}
+		}
+
+		public class CompareDirectory : IComparer<IBrowsableItem>
+		{
+			public int Compare (IBrowsableItem p1, IBrowsableItem p2)
+			{
+				int result = p1.CompareDefaultVersionUri (p2);
+
+				if (result == 0)
+					result = p1.CompareName (p2);
+
+				return result;
+			}
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemExtensions.cs b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemExtensions.cs
new file mode 100644
index 0000000..054e3c7
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemExtensions.cs
@@ -0,0 +1,37 @@
+using System;
+using System.IO;
+
+namespace FSpot.Core
+{
+	public static class IBrowsableItemExtensions {
+		public static int CompareDate (this IBrowsableItem photo1, IBrowsableItem photo2)
+		{
+			return DateTime.Compare (photo1.Time, photo2.Time);
+		}
+
+		public static int CompareName (this IBrowsableItem photo1, IBrowsableItem photo2)
+		{
+			return string.Compare (photo1.Name, photo2.Name);
+		}
+
+		public static int Compare (this IBrowsableItem photo1, IBrowsableItem photo2)
+		{
+			int result = photo1.CompareDate (photo2);
+
+			if (result == 0)
+				result = CompareDefaultVersionUri (photo1, photo2);
+
+			if (result == 0)
+				result = photo1.CompareName (photo2);
+
+			return result;
+		}
+
+		public static int CompareDefaultVersionUri (this IBrowsableItem photo1, IBrowsableItem photo2)
+		{
+			var photo1_uri = Path.Combine (photo1.DefaultVersion.BaseUri, photo1.DefaultVersion.Filename);
+			var photo2_uri = Path.Combine (photo2.DefaultVersion.BaseUri, photo2.DefaultVersion.Filename);
+			return string.Compare (photo1_uri, photo2_uri);
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemVersion.cs b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemVersion.cs
new file mode 100644
index 0000000..88c800e
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemVersion.cs
@@ -0,0 +1,62 @@
+/*
+ * IBrowsableItemVersion.cs
+ *
+ * Author(s):
+ *  Ruben Vermeersch <ruben at savanne.be>
+ *  Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using Hyena;
+
+
+namespace FSpot.Core
+{
+
+	public interface IBrowsableItemVersion : ILoadable
+	{
+
+#region Metadata
+
+		/// <summary>
+		///   The name of the version. e.g. "Convert to Black and White"
+		/// </summary>
+		/// <remarks>
+		///   This is not the name of the file.
+		/// </remarks>
+		string Name { get; }
+
+		// TODO: add Comment
+		bool IsProtected { get; }
+
+		// TODO: add more metadata
+
+#endregion
+
+
+#region File Information
+
+		// TODO: BaseUri and Filename are just in the database scheme. Does it make sense to provide them
+		//       to the outside?
+
+		/// <summary>
+		///   The base uri of the directory of this version. That is the whole uri without the
+		///   filename.
+		/// </summary>
+		SafeUri BaseUri { get; }
+
+		/// <summary>
+		///    The filename of this version.
+		/// </summary>
+		string Filename { get; }
+
+		// TODO: add Comment
+		// TODO: not every item is also imported. So does it make sense to have that checksum here?
+		//       (If a comment is added, include the easons for having this here!)
+		string ImportMD5 { get; }
+
+#endregion
+
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemVersionable.cs b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemVersionable.cs
new file mode 100644
index 0000000..9bf8878
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/IBrowsableItemVersionable.cs
@@ -0,0 +1,30 @@
+/*
+ * IBrowsableItemVersion.cs
+ *
+ * Author(s):
+ *  Ruben Vermeersch <ruben at savanne.be>
+ *  Mike Gemuende <mike at gemuende.de>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System.Collections.Generic;
+
+namespace FSpot.Core
+{
+	/// <summary>
+	///    The interface adds functionality which is related to items where
+	///    versions can be added or removed.
+	/// </summary>
+	public interface IBrowsableItemVersionable : IBrowsableItem{
+
+		/// <summary>
+		///    Sets the default version of a the item.
+		/// </summary>
+		/// <param name="version">
+		///    A <see cref="IBrowsableItemVersion"/> which will be the new
+		///    default version.
+		/// </param>
+		void SetDefaultVersion (IBrowsableItemVersion version);
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/ILoadable.cs b/src/Core/FSpot.Core/FSpot.Core/ILoadable.cs
new file mode 100644
index 0000000..034f7cb
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/ILoadable.cs
@@ -0,0 +1,13 @@
+using Hyena;
+
+namespace FSpot.Core
+{
+	/// <summary>
+	///    This is the contract that needs to be implemented before the image
+	///    data of the object can be loaded.
+	/// </summary>
+	public interface ILoadable
+	{
+		SafeUri Uri { get; set; }
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/PhotoChanges.cs b/src/Core/FSpot.Core/FSpot.Core/PhotoChanges.cs
new file mode 100644
index 0000000..fd1ae42
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/PhotoChanges.cs
@@ -0,0 +1,156 @@
+/*
+ * FSpot.PhotoChanges.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace FSpot.Core
+{
+	//Track the changes done to a Photo between Commit's
+	public class PhotoChanges : PhotosChanges
+	{
+
+		public override bool VersionsChanged {
+			get { return VersionsAdded == null && VersionsRemoved == null && VersionsModified == null; }
+		}
+
+		public override bool TagsChanged {
+			get { return TagsAdded == null && TagsRemoved == null; }
+		}
+
+		List<Tag> tags_added = null;
+		public Tag [] TagsAdded {
+			get {
+				if (tags_added == null)
+					return null;
+				if (tags_added.Count == 0)
+					return null;
+				return tags_added.ToArray ();
+			}
+			set {
+				foreach (Tag t in value)
+					AddTag (t);
+			}
+		}
+
+		public void AddTag (Tag t)
+		{
+			if (tags_added == null)
+				tags_added = new List<Tag> ();
+			if (tags_removed != null)
+				tags_removed.Remove (t);
+			tags_added.Add (t);
+
+		}
+
+		List<Tag> tags_removed = null;
+		public Tag [] TagsRemoved {
+			get {
+				if (tags_removed == null)
+					return null;
+				if (tags_removed.Count == 0)
+					return null;
+				return tags_removed.ToArray ();
+			}
+			set {
+				foreach (Tag t in value)
+					RemoveTag (t);
+			}
+		}
+
+		public void RemoveTag (Tag t)
+		{
+			if (tags_removed == null)
+				tags_removed = new List<Tag> ();
+			if (tags_added != null)
+				tags_added.Remove (t);
+			tags_removed.Add (t);
+		}
+
+
+		List<uint> versions_added = null;
+		public uint [] VersionsAdded {
+			get {
+				if (versions_added == null)
+					return null;
+				if (versions_added.Count == 0)
+					return null;
+				return versions_added.ToArray ();
+			}
+			set {
+				foreach (uint u in value)
+					AddVersion (u);
+			}
+		}
+
+		public void AddVersion (uint v)
+		{
+			if (versions_added == null)
+				versions_added = new List<uint> ();
+			versions_added.Add (v);
+		}
+
+		List<uint> versions_removed = null;
+		public uint [] VersionsRemoved {
+			get {
+				if (versions_removed == null)
+					return null;
+				if (versions_removed.Count == 0)
+					return null;
+				return versions_removed.ToArray ();
+			}
+			set {
+				foreach (uint u in value)
+					RemoveVersion (u);
+			}
+		}
+
+		public void RemoveVersion (uint v)
+		{
+			if (versions_removed == null)
+				versions_removed= new List<uint> ();
+			if (versions_added != null)
+				versions_added.Remove (v);
+			if (versions_modified != null)
+				versions_modified.Remove (v);
+			versions_removed.Add (v);
+		}
+
+
+		List<uint> versions_modified = null;
+		public uint [] VersionsModified {
+			get {
+				if (versions_modified == null)
+					return null;
+				if (versions_modified.Count == 0)
+					return null;
+				return versions_modified.ToArray ();
+			}
+			set {
+				foreach (uint u in value)
+					ChangeVersion (u);
+			}
+		}
+
+		public void ChangeVersion (uint v)
+		{
+			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/PhotosChanges.cs b/src/Core/FSpot.Core/FSpot.Core/PhotosChanges.cs
new file mode 100644
index 0000000..6dd377c
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/PhotosChanges.cs
@@ -0,0 +1,140 @@
+/*
+ * FSpot.PhotosChanges.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace FSpot.Core
+{
+	//used to aggregate PhotoChanges and notifying the various ui pieces
+	public class PhotosChanges : IBrowsableItemChanges
+	{
+		[Flags ()]
+		enum Changes {
+			DefaultVersionId 	= 0x1,
+			Time			= 0x2,
+			Uri			= 0x4,
+			Rating			= 0x8,
+			Description		= 0x10,
+			RollId			= 0x20,
+			Data			= 0x40,
+			MD5Sum			= 0x80
+		}
+
+		Changes changes = 0;
+
+		public bool MetadataChanged {
+			get { return (changes & ~Changes.Data) != 0 || TagsChanged || VersionsChanged; }
+		}
+
+		public bool DataChanged {
+			get { return (changes & Changes.Data) == Changes.Data; }
+			set {
+				if (value)
+					changes |= Changes.Data;
+				else
+					changes &= ~Changes.Data;
+			}
+		}
+		public bool DefaultVersionIdChanged {
+			get { return (changes & Changes.DefaultVersionId) == Changes.DefaultVersionId; }
+			set {
+				if (value) {
+					changes |= Changes.DefaultVersionId;
+					DataChanged = true;
+				} else
+					changes &= ~Changes.DefaultVersionId;
+			}
+		}
+		public bool TimeChanged {
+			get { return (changes & Changes.Time) == Changes.Time; }
+			set {
+				if (value)
+					changes |= Changes.Time;
+				else
+					changes &= ~Changes.Time;
+			}
+		}
+		public bool UriChanged {
+			get { return (changes & Changes.Uri) == Changes.Uri; }
+			set {
+				if (value)
+					changes |= Changes.Uri;
+				else
+					changes &= ~Changes.Uri;
+			}
+		}
+		public bool RatingChanged {
+			get { return (changes & Changes.Rating) == Changes.Rating; }
+			set {
+				if (value)
+					changes |= Changes.Rating;
+				else
+					changes &= ~Changes.Rating;
+			}
+		}
+		public bool DescriptionChanged {
+			get { return (changes & Changes.Description) == Changes.Description; }
+			set {
+				if (value)
+					changes |= Changes.Description;
+				else
+					changes &= ~ Changes.Description;
+			}
+		}
+		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 {
+				if (value)
+					changes |= Changes.RollId;
+				else
+					changes &= ~Changes.RollId;
+			}
+		}
+
+		public bool MD5SumChanged {
+			get { return (changes & Changes.MD5Sum) == Changes.MD5Sum ; }
+			set {
+				if (value)
+					changes |= Changes.MD5Sum;
+				else
+					changes &= ~Changes.MD5Sum;
+			}
+
+		}
+
+		public static PhotosChanges operator | (PhotosChanges c1, PhotosChanges c2)
+		{
+			if (c1 == null)
+				throw new ArgumentNullException ("c1");
+			if (c2 == null)
+				throw new ArgumentNullException ("c2");
+
+			PhotosChanges changes = new PhotosChanges ();
+			changes.changes = c1.changes | c2.changes;
+			changes.VersionsChanged = c1.VersionsChanged || c2.VersionsChanged;
+			changes.TagsChanged = c1.TagsChanged || c2.TagsChanged;
+			return changes;
+		}
+
+		public PhotosChanges ()
+		{
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/Roll.cs b/src/Core/FSpot.Core/FSpot.Core/Roll.cs
new file mode 100644
index 0000000..226fa90
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/Roll.cs
@@ -0,0 +1,29 @@
+/*
+ * RollStore.cs
+ *
+ * Author(s)
+ *	Bengt Thuree
+ *	Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Hyena;
+
+namespace FSpot.Core
+{
+	public class Roll : DbItem
+	{
+		// The time is always in UTC.
+		private DateTime time;
+		public DateTime Time {
+			get { return time; }
+		}
+
+		public Roll (uint id, long unix_time) : base (id)
+		{
+			time = DateTimeUtil.ToDateTime (unix_time);
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/FSpot.Core/Tag.cs b/src/Core/FSpot.Core/FSpot.Core/Tag.cs
new file mode 100644
index 0000000..81452e1
--- /dev/null
+++ b/src/Core/FSpot.Core/FSpot.Core/Tag.cs
@@ -0,0 +1,189 @@
+/*
+ * FSpot.Tag
+ *
+ * Author(s):
+ *	Larry Ewing  <lewing at novell.com>
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Gdk;
+using FSpot.Utils;
+using Hyena;
+
+namespace FSpot.Core
+{
+	public class Tag : DbItem, IComparable<Tag>, IDisposable {
+		string name;
+		public string Name {
+			get { return name; }
+			set {  name = value;}
+		}
+
+		Category category;
+		public Category Category {
+			get { return category; }
+			set {
+				if (Category != null)
+					Category.RemoveChild (this);
+
+				category = value;
+				if (category != null)
+					category.AddChild (this);
+			}
+		}
+
+		int sort_priority;
+		public int SortPriority {
+			get { return sort_priority; }
+			set { sort_priority = value; }
+		}
+
+		int popularity = 0;
+		public int Popularity {
+			get { return popularity; }
+			set { popularity = value; }
+		}
+
+		// Icon.  If theme_icon_name is not null, then we save the name of the icon instead
+		// of the actual icon data.
+		string theme_icon_name;
+		public string ThemeIconName {
+			get { return theme_icon_name; }
+			set { theme_icon_name = value; }
+		}
+
+		Pixbuf icon;
+		public Pixbuf Icon {
+			get {
+				if (icon == null && theme_icon_name != null) {
+					cached_icon_size = IconSize.Hidden;
+					icon = GtkUtil.TryLoadIcon (Global.IconTheme, theme_icon_name, 48, (Gtk.IconLookupFlags)0);
+				}
+				return icon;
+			}
+			set {
+				theme_icon_name = null;
+				if (icon != null)
+					icon.Dispose ();
+				icon = value;
+				cached_icon_size = IconSize.Hidden;
+				IconWasCleared = value == null;
+			}
+		}
+
+		bool icon_was_cleared = false;
+		public bool IconWasCleared {
+			get { return icon_was_cleared; }
+			set { icon_was_cleared = value; }
+		}
+
+		public enum IconSize {
+			Hidden = 0,
+			Small = 16,
+			Medium = 24,
+			Large = 48
+		};
+
+		static IconSize tag_icon_size = IconSize.Large;
+		public static IconSize TagIconSize {
+			get { return tag_icon_size; }
+			set { tag_icon_size = value; }
+		}
+
+		Pixbuf cached_icon;
+		private IconSize cached_icon_size = IconSize.Hidden;
+
+		// We can use a SizedIcon everywhere we were using an Icon
+		public Pixbuf SizedIcon {
+			get {
+				if (tag_icon_size == IconSize.Hidden) //Hidden
+					return null;
+				if (tag_icon_size == cached_icon_size)
+					return cached_icon;
+				if (theme_icon_name != null) { //Theme icon
+					if (cached_icon != null)
+						cached_icon.Dispose ();
+					cached_icon = GtkUtil.TryLoadIcon (Global.IconTheme, theme_icon_name, (int) tag_icon_size, (Gtk.IconLookupFlags)0);
+
+					if (Math.Max (cached_icon.Width, cached_icon.Height) <= (int) tag_icon_size)
+						return cached_icon;
+				}
+				if (Icon == null)
+					return null;
+
+				if (Math.Max (Icon.Width, Icon.Height) >= (int) tag_icon_size) { //Don't upscale
+					if (cached_icon != null)
+						cached_icon.Dispose ();
+					cached_icon = Icon.ScaleSimple ((int) tag_icon_size, (int) tag_icon_size, InterpType.Bilinear);
+					cached_icon_size = tag_icon_size;
+					return cached_icon;
+				} else
+					return Icon;
+			}
+		}
+
+
+		// You are not supposed to invoke these constructors outside of the TagStore class.
+		public Tag (Category category, uint id, string name)
+			: base (id)
+		{
+			Category = category;
+			Name = name;
+		}
+
+
+		// IComparer.
+		public int CompareTo (Tag tag)
+		{
+			if (tag == null)
+				throw new ArgumentNullException ("tag");
+
+			if (Category == tag.Category) {
+				if (SortPriority == tag.SortPriority)
+					return Name.CompareTo (tag.Name);
+				else
+					return SortPriority - tag.SortPriority;
+			} else {
+				return Category.CompareTo (tag.Category);
+			}
+		}
+
+		public bool IsAncestorOf (Tag tag)
+		{
+			if (tag == null)
+				throw new ArgumentNullException ("tag");
+
+			for (Category parent = tag.Category; parent != null; parent = parent.Category) {
+				if (parent == this)
+					return true;
+			}
+
+			return false;
+		}
+
+		public void Dispose ()
+		{
+			if (icon != null)
+				icon.Dispose ();
+			if (cached_icon != null)
+				cached_icon.Dispose ();
+			if (category != null)
+				category.Dispose ();
+			System.GC.SuppressFinalize (this);
+		}
+
+		~Tag ()
+		{
+			Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
+			if (icon != null)
+				icon.Dispose ();
+			if (cached_icon != null)
+				cached_icon.Dispose ();
+			if (category != null)
+				category.Dispose ();
+		}
+	}
+}
diff --git a/src/Core/FSpot.Core/Makefile.am b/src/Core/FSpot.Core/Makefile.am
new file mode 100644
index 0000000..61e438c
--- /dev/null
+++ b/src/Core/FSpot.Core/Makefile.am
@@ -0,0 +1,36 @@
+ASSEMBLY = FSpot.Core
+TARGET = library
+LINK = $(REF_FSPOT_CORE)
+
+SOURCES =  \
+	FSpot.Core/BrowsableCollectionProxy.cs \
+	FSpot.Core/BrowsableEventArgs.cs \
+	FSpot.Core/BrowsablePointer.cs \
+	FSpot.Core/BrowsablePointerChangedEventArgs.cs \
+	FSpot.Core/Category.cs \
+	FSpot.Core/DbItem.cs \
+	FSpot.Core/Defines.cs \
+	FSpot.Core/Delay.cs \
+	FSpot.Core/FileBrowsableItem.cs \
+	FSpot.Core/Global.cs \
+	FSpot.Core/IBrowsableCollection.cs \
+	FSpot.Core/IBrowsableItem.cs \
+	FSpot.Core/IBrowsableItemChanges.cs \
+	FSpot.Core/IBrowsableItemComparer.cs \
+	FSpot.Core/IBrowsableItemExtensions.cs \
+	FSpot.Core/IBrowsableItemVersion.cs \
+	FSpot.Core/IBrowsableItemVersionable.cs \
+	FSpot.Core/ILoadable.cs \
+	FSpot.Core/PhotoChanges.cs \
+	FSpot.Core/PhotosChanges.cs \
+	FSpot.Core/Roll.cs \
+	FSpot.Core/Tag.cs
+
+RESOURCES = FSpot.Core.addins
+
+module_DATA = FSpot.Core.addins
+
+include $(top_srcdir)/build/build.mk
+
+EXTRA_DIST += FSpot.Core.dll.config
+module_SCRIPTS += FSpot.Core.dll.config
diff --git a/src/Core/FSpot.Core/Makefile.in b/src/Core/FSpot.Core/Makefile.in
new file mode 100644
index 0000000..5de6980
--- /dev/null
+++ b/src/Core/FSpot.Core/Makefile.in
@@ -0,0 +1,856 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/FSpot.Core.dll.config.in $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Core/FSpot.Core
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = FSpot.Core.dll.config
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)" "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DATA = $(module_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Core
+TARGET = library
+LINK = $(REF_FSPOT_CORE) $(am__append_1)
+SOURCES = \
+	FSpot.Core/BrowsableCollectionProxy.cs \
+	FSpot.Core/BrowsableEventArgs.cs \
+	FSpot.Core/BrowsablePointer.cs \
+	FSpot.Core/BrowsablePointerChangedEventArgs.cs \
+	FSpot.Core/Category.cs \
+	FSpot.Core/DbItem.cs \
+	FSpot.Core/Defines.cs \
+	FSpot.Core/Delay.cs \
+	FSpot.Core/FileBrowsableItem.cs \
+	FSpot.Core/Global.cs \
+	FSpot.Core/IBrowsableCollection.cs \
+	FSpot.Core/IBrowsableItem.cs \
+	FSpot.Core/IBrowsableItemChanges.cs \
+	FSpot.Core/IBrowsableItemComparer.cs \
+	FSpot.Core/IBrowsableItemExtensions.cs \
+	FSpot.Core/IBrowsableItemVersion.cs \
+	FSpot.Core/IBrowsableItemVersionable.cs \
+	FSpot.Core/ILoadable.cs \
+	FSpot.Core/PhotoChanges.cs \
+	FSpot.Core/PhotosChanges.cs \
+	FSpot.Core/Roll.cs \
+	FSpot.Core/Tag.cs
+
+RESOURCES = FSpot.Core.addins
+module_DATA = FSpot.Core.addins
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) FSpot.Core.dll.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+	$(THEME_ICONS_SOURCE) FSpot.Core.dll.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Core/FSpot.Core/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Core/FSpot.Core/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+FSpot.Core.dll.config: $(top_builddir)/config.status $(srcdir)/FSpot.Core.dll.config.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-moduleDATA: $(module_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_DATA)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(moduledir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(moduledir)" || exit $$?; \
+	done
+
+uninstall-moduleDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_DATA)'; test -n "$(moduledir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) $(DATA) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)" "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleDATA \
+	install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleDATA \
+	uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleDATA install-moduleSCRIPTS \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am uninstall-local uninstall-moduleDATA \
+	uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Widgets/FSpot.Widgets.dll.config b/src/Core/FSpot.Gui/FSpot.Gui.dll.config
similarity index 100%
rename from src/Widgets/FSpot.Widgets.dll.config
rename to src/Core/FSpot.Gui/FSpot.Gui.dll.config
diff --git a/src/Widgets/FSpot.Widgets.dll.config.in b/src/Core/FSpot.Gui/FSpot.Gui.dll.config.in
similarity index 100%
rename from src/Widgets/FSpot.Widgets.dll.config.in
rename to src/Core/FSpot.Gui/FSpot.Gui.dll.config.in
diff --git a/src/Core/FSpot.Gui/FSpot.Transitions/CairoTransition.cs b/src/Core/FSpot.Gui/FSpot.Transitions/CairoTransition.cs
new file mode 100644
index 0000000..6dfada3
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Transitions/CairoTransition.cs
@@ -0,0 +1,38 @@
+//
+// FSpot.Widgets.CairoTransition.cs
+//
+// Author(s):
+//	Stephane Delcroix  <stephane at delcroix.org>
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// This is open source software. See COPYING for details.
+//
+
+using System;
+
+using Cairo;
+using Gdk;
+
+using FSpot.Utils;
+
+using Color = Cairo.Color;
+
+namespace FSpot.Transitions
+{
+	public abstract class CairoTransition : SlideShowTransition
+	{
+		public CairoTransition (string name) : base (name)
+		{
+		}
+
+		public override void Draw (Drawable d, Pixbuf prev, Pixbuf next, int width, int height, double progress)
+		{
+			using (Cairo.Context cr = Gdk.CairoHelper.Create (d)) {
+				Draw (cr, prev, next, width, height, progress);
+			}
+		}
+
+		protected abstract void Draw (Context cr, Pixbuf prev, Pixbuf next, int width, int height, double progress);
+	}
+}
diff --git a/src/Core/FSpot.Gui/FSpot.Transitions/DissolveTransition.cs b/src/Core/FSpot.Gui/FSpot.Transitions/DissolveTransition.cs
new file mode 100644
index 0000000..88561c2
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Transitions/DissolveTransition.cs
@@ -0,0 +1,57 @@
+//
+// FSpot.Widgets.DissolveTransition.cs
+//
+// Author(s):
+//	Stephane Delcroix  <stephane at delcroix.org>
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// This is open source software. See COPYING for details.
+//
+
+using System;
+
+using Cairo;
+using Gdk;
+
+using FSpot.Utils;
+using FSpot.Widgets;
+
+using Color = Cairo.Color;
+
+namespace FSpot.Transitions
+{
+	public class DissolveTransition : CairoTransition
+	{
+		public DissolveTransition () : base ("Dissolve")
+		{
+		}
+
+		protected override void Draw (Context cr, Pixbuf prev, Pixbuf next, int width, int height, double progress)
+		{
+			cr.Color = new Color (0, 0, 0, progress);
+			if (next != null) {
+				double scale = Math.Min ((double)width/(double)next.Width, (double)height/(double)next.Height);
+				cr.Save ();
+
+				cr.Rectangle (0, 0, width, .5 * (height - scale*next.Height));
+				cr.Fill ();
+
+				cr.Rectangle (0, height - .5 * (height - scale*next.Height), width, .5 * (height - scale*next.Height));
+				cr.Fill ();
+
+				cr.Rectangle (0, 0, .5 * (width - scale*next.Width), height);
+				cr.Fill ();
+
+				cr.Rectangle (width - .5 * (width - scale*next.Width), 0, .5 * (width - scale*next.Width), height);
+				cr.Fill ();
+
+				cr.Rectangle (0, 0, width, height);
+				cr.Scale (scale, scale);
+				CairoHelper.SetSourcePixbuf (cr, next, .5 * ((double)width/scale - next.Width), .5 * ((double)height/scale - next.Height));
+				cr.PaintWithAlpha (progress);
+				cr.Restore ();
+			}
+		}
+	}
+}
diff --git a/src/Core/FSpot.Gui/FSpot.Transitions/PushTransition.cs b/src/Core/FSpot.Gui/FSpot.Transitions/PushTransition.cs
new file mode 100644
index 0000000..ce91181
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Transitions/PushTransition.cs
@@ -0,0 +1,80 @@
+//
+// FSpot.Widgets.PushTransition.cs
+//
+// Author(s):
+//	Stephane Delcroix  <stephane at delcroix.org>
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// This is open source software. See COPYING for details.
+//
+
+using System;
+
+using Cairo;
+using Gdk;
+
+using FSpot.Utils;
+
+using Color = Cairo.Color;
+
+namespace FSpot.Transitions
+{
+	public class PushTransition : CairoTransition
+	{
+		public PushTransition () : base ("Push")
+		{
+		}
+
+		protected override void Draw (Context cr, Pixbuf prev, Pixbuf next, int width, int height, double progress)
+		{
+			cr.Color = new Color (0, 0, 0);
+			if (prev != null) {
+				double scale = Math.Min ((double)width/(double)prev.Width, (double)height/(double)prev.Height);
+				cr.Save ();
+				cr.Translate (-progress * width, 0);
+
+				cr.Rectangle (0, 0, width, .5 * (height - scale*prev.Height));
+				cr.Fill ();
+
+				cr.Rectangle (0, height - .5 * (height - scale*prev.Height), width, .5 * (height - scale*prev.Height));
+				cr.Fill ();
+
+				cr.Rectangle (0, 0, .5 * (width - scale*prev.Width), height);
+				cr.Fill ();
+
+				cr.Rectangle (width - .5 * (width - scale*prev.Width), 0, .5 * (width - scale*prev.Width), height);
+				cr.Fill ();
+
+				cr.Rectangle (0, 0, width, height);
+				cr.Scale (scale, scale);
+				CairoHelper.SetSourcePixbuf (cr, prev, .5 * ((double)width/scale - prev.Width), .5 * ((double)height/scale - prev.Height));
+				cr.Fill ();
+				cr.Restore ();
+			}
+			if (next != null) {
+				double scale = Math.Min ((double)width/(double)next.Width, (double)height/(double)next.Height);
+				cr.Save ();
+				cr.Translate (width * (1.0 - progress), 0);
+
+				cr.Rectangle (0, 0, width, .5 * (height - scale*next.Height));
+				cr.Fill ();
+
+				cr.Rectangle (0, height - .5 * (height - scale*next.Height), width, .5 * (height - scale*next.Height));
+				cr.Fill ();
+
+				cr.Rectangle (0, 0, .5 * (width - scale*next.Width), height);
+				cr.Fill ();
+
+				cr.Rectangle (width - .5 * (width - scale*next.Width), 0, .5 * (width - scale*next.Width), height);
+				cr.Fill ();
+
+				cr.Rectangle (0, 0, width, height);
+				cr.Scale (scale, scale);
+				CairoHelper.SetSourcePixbuf (cr, next, .5 * ((double)width/scale - next.Width), .5 * ((double)height/scale - next.Height));
+				cr.Fill ();
+				cr.Restore ();
+			}
+		}
+	}
+}
diff --git a/src/Core/FSpot.Gui/FSpot.Transitions/SlideShowTransition.cs b/src/Core/FSpot.Gui/FSpot.Transitions/SlideShowTransition.cs
new file mode 100644
index 0000000..bd7a9b7
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Transitions/SlideShowTransition.cs
@@ -0,0 +1,37 @@
+//
+// FSpot.Widgets.SlideShowTransition.cs
+//
+// Author(s):
+//	Stephane Delcroix  <stephane at delcroix.org>
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// This is open source software. See COPYING for details.
+//
+
+using System;
+
+using Cairo;
+using Gdk;
+
+using FSpot.Utils;
+
+using Color = Cairo.Color;
+
+namespace FSpot.Transitions
+{
+	public abstract class SlideShowTransition
+	{
+		public SlideShowTransition (string name)
+		{
+			this.name = name;
+		}
+
+		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/Widgets/ApplicationActivatedEventArgs.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ApplicationActivatedEventArgs.cs
similarity index 100%
rename from src/Widgets/ApplicationActivatedEventArgs.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/ApplicationActivatedEventArgs.cs
diff --git a/src/Widgets/BuilderWindow.cs b/src/Core/FSpot.Gui/FSpot.Widgets/BuilderWindow.cs
similarity index 100%
rename from src/Widgets/BuilderWindow.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/BuilderWindow.cs
diff --git a/src/Widgets/CheckPattern.cs b/src/Core/FSpot.Gui/FSpot.Widgets/CheckPattern.cs
similarity index 100%
rename from src/Widgets/CheckPattern.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/CheckPattern.cs
diff --git a/src/Widgets/ComplexMenuItem.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ComplexMenuItem.cs
similarity index 100%
rename from src/Widgets/ComplexMenuItem.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/ComplexMenuItem.cs
diff --git a/src/Widgets/Curve.cs b/src/Core/FSpot.Gui/FSpot.Widgets/Curve.cs
similarity index 100%
rename from src/Widgets/Curve.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/Curve.cs
diff --git a/src/Widgets/CurveType.cs b/src/Core/FSpot.Gui/FSpot.Widgets/CurveType.cs
similarity index 100%
rename from src/Widgets/CurveType.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/CurveType.cs
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs b/src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs
new file mode 100644
index 0000000..8289513
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/CustomPrintWidget.cs
@@ -0,0 +1,193 @@
+/*
+ * FSpot.Widgets.CustomPrintWidget.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Mono.Unix;
+using Gtk;
+using FSpot.Utils;
+
+namespace FSpot.Widgets
+{
+	public class CustomPrintWidget : Table
+	{
+		public delegate void ChangedHandler (Gtk.Widget widget);
+
+		public enum FitMode {
+			Zoom,
+			Scaled,
+			Fill,
+		}
+
+		Gtk.Image preview_image;
+		CheckButton fullpage;
+
+		RadioButton ppp1, ppp2, ppp4, ppp9, ppp20, ppp30;
+		RadioButton zoom, fill, scaled;
+
+		CheckButton repeat, white_border, crop_marks, print_tags,
+			print_filename, print_date, print_time, print_comments;
+		Entry custom_text;
+	
+		PrintOperation print_operation;
+
+		public event ChangedHandler Changed;
+		private void TriggerChanged (object sender, EventArgs e)
+		{
+			if (Changed != null)
+				Changed (this);
+		}
+
+		public bool CropMarks {
+			get { return crop_marks.Active; }
+		}
+
+		public string PrintLabelFormat {
+			get {
+				string label_format = "{0}";
+
+				if (print_tags.Active)
+					label_format += "\t{4}";
+				if (print_filename.Active)
+					label_format += "\t{1}";
+				if (print_date.Active)
+					label_format += "\t{2}";
+				if (print_time.Active)
+					label_format += " {3}";
+				if (print_comments.Active)
+					label_format += "\t{5}";
+
+				return label_format;
+			}
+		}
+
+		public string CustomText {
+			get { return custom_text.Text; }
+		}
+
+		public FitMode Fitmode {
+			get {
+				if (zoom.Active)	return FitMode.Zoom;
+				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;
+				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 Gtk.Image PreviewImage {
+			get { return preview_image; }
+		}
+
+		public bool Repeat {
+			get { return repeat.Active; }
+		}
+
+		public bool UseFullPage {
+			get { return fullpage.Active; }
+		}
+
+		public bool WhiteBorders {
+			get { return white_border.Active; }
+		}
+
+		public CustomPrintWidget (PrintOperation print_operation) : base (2, 4, false)
+		{
+			this.print_operation = print_operation;
+
+			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 ();
+			Label current_settings = new Label ();
+			if (FSpot.Core.Global.PageSetup != null)
+				current_settings.Text = String.Format (Catalog.GetString ("Paper Size: {0} x {1} mm"), 
+								Math.Round (print_operation.DefaultPageSetup.GetPaperWidth (Unit.Mm), 1), 
+								Math.Round (print_operation.DefaultPageSetup.GetPaperHeight (Unit.Mm), 1));
+			else
+				current_settings.Text = String.Format (Catalog.GetString ("Paper Size: {0} x {1} mm"), "...", "...");
+
+			page_box.PackStart (current_settings, false, false, 0);
+			Button page_setup_btn = new Button (Catalog.GetString ("Set Page Size and Orientation"));
+			page_setup_btn.Clicked += delegate {
+				this.print_operation.DefaultPageSetup = Print.RunPageSetupDialog (null, print_operation.DefaultPageSetup, this.print_operation.PrintSettings); 
+				current_settings.Text = String.Format (Catalog.GetString ("Paper Size: {0} x {1} mm"), 
+								Math.Round (print_operation.DefaultPageSetup.GetPaperWidth (Unit.Mm), 1), 
+								Math.Round (print_operation.DefaultPageSetup.GetPaperHeight (Unit.Mm), 1));
+			};
+			page_box.PackStart (page_setup_btn, false, false, 0);
+			page_frame.Add (page_box);
+			Attach (page_frame, 1, 2, 3, 4);
+
+			Frame ppp_frame = new Frame (Catalog.GetString ("Photos per page"));
+			Table ppp_tbl = new Table(2, 7, false);
+
+			ppp_tbl.Attach (ppp1 = new RadioButton ("1"), 0, 1, 1, 2);
+			ppp_tbl.Attach (ppp2 = new RadioButton (ppp1, "2"), 0, 1, 2, 3);
+			ppp_tbl.Attach (ppp4 = new RadioButton (ppp1, "2 x 2"), 0, 1, 3, 4);
+			ppp_tbl.Attach (ppp9 = new RadioButton (ppp1, "3 x 3"), 0, 1, 4, 5);
+			ppp_tbl.Attach (ppp20 = new RadioButton (ppp1, "4 x 5"), 0, 1, 5, 6);
+			ppp_tbl.Attach (ppp30 = new RadioButton (ppp1, "5 x 6"), 0, 1, 6, 7);
+
+			ppp_tbl.Attach (repeat = new CheckButton (Catalog.GetString ("Repeat")), 1, 2, 2, 3);
+			ppp_tbl.Attach (crop_marks = new CheckButton (Catalog.GetString ("Print cut marks")), 1, 2, 3, 4);
+//			crop_marks.Toggled += TriggerChanged;
+
+			ppp_frame.Child = ppp_tbl;
+			Attach (ppp_frame, 0, 1, 1, 2);
+
+			Frame layout_frame = new Frame (Catalog.GetString ("Photos layout"));
+			VBox layout_vbox = new VBox();
+			layout_vbox.PackStart (fullpage = new CheckButton (Catalog.GetString ("Full Page (no margin)")), false, false, 0);
+			HBox hb = new HBox ();
+			// Note for translators: "Zoom" is a Fit Mode
+			hb.PackStart (zoom = new RadioButton (Catalog.GetString ("Zoom")), false, false, 0);
+			hb.PackStart (fill = new RadioButton (zoom, Catalog.GetString ("Fill")), false, false, 0);
+			hb.PackStart (scaled = new RadioButton (zoom, Catalog.GetString ("Scaled")), false, false, 0);
+			zoom.Toggled += TriggerChanged;
+			fill.Toggled += TriggerChanged;
+			scaled.Toggled += TriggerChanged;
+			layout_vbox.PackStart (hb, false, false, 0);
+			layout_vbox.PackStart (white_border = new CheckButton (Catalog.GetString ("White borders")), false, false, 0);
+			white_border.Toggled += TriggerChanged;
+
+			layout_frame.Child = layout_vbox;
+			Attach (layout_frame, 1, 2, 1, 2);
+
+			Frame cmt_frame = new Frame (Catalog.GetString ("Custom Text"));
+			cmt_frame.Child = custom_text = new Entry ();
+			Attach (cmt_frame, 1, 2, 2, 3);
+
+			Frame detail_frame = new Frame (Catalog.GetString ("Photos infos"));
+			VBox detail_vbox = new VBox();
+			detail_vbox.PackStart (print_filename = new CheckButton (Catalog.GetString ("Print file name")), false, false, 0);
+			detail_vbox.PackStart (print_date = new CheckButton (Catalog.GetString ("Print photo date")), false, false, 0);
+			detail_vbox.PackStart (print_time = new CheckButton (Catalog.GetString ("Print photo time")), false, false, 0);
+			detail_vbox.PackStart (print_tags = new CheckButton (Catalog.GetString ("Print photo tags")), false, false, 0);
+			detail_vbox.PackStart (print_comments = new CheckButton (Catalog.GetString ("Print photo comment")), false, false, 0);
+			detail_frame.Child = detail_vbox;
+			Attach (detail_frame, 0, 1, 2, 4);
+
+			TriggerChanged (this, null);
+		}
+	}
+}
diff --git a/src/Widgets/DateEdit.cs b/src/Core/FSpot.Gui/FSpot.Widgets/DateEdit.cs
similarity index 100%
rename from src/Widgets/DateEdit.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/DateEdit.cs
diff --git a/src/Widgets/DateEditFlags.cs b/src/Core/FSpot.Gui/FSpot.Widgets/DateEditFlags.cs
similarity index 100%
rename from src/Widgets/DateEditFlags.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/DateEditFlags.cs
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/HighlightedBox.cs b/src/Core/FSpot.Gui/FSpot.Widgets/HighlightedBox.cs
new file mode 100644
index 0000000..a6b0dbb
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/HighlightedBox.cs
@@ -0,0 +1,42 @@
+/*
+ * FSpot.Widgets.HighlightedBox.cs
+ *
+ * Author(s)
+ *  Gabriel Burt  <gabriel.burt at gmail.com>
+ * 
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using Gtk;
+
+namespace FSpot.Widgets
+{
+	public class HighlightedBox : EventBox
+	{
+		private bool changing_style = false;
+
+		protected HighlightedBox (IntPtr raw) : base (raw) {}
+
+		public HighlightedBox (Widget child) : base ()
+		{
+			Child = child;
+			AppPaintable = true;
+		}
+
+		protected override void OnStyleSet(Style style)
+		{
+			if (!changing_style) {
+				changing_style = true;
+				ModifyBg(StateType.Normal, Style.Background(StateType.Selected));
+				changing_style = false;
+			}
+		}
+
+		protected override bool OnExposeEvent(Gdk.EventExpose evnt)
+		{
+			GdkWindow.DrawRectangle(Style.ForegroundGC(StateType.Normal), false, 0, 0, Allocation.Width - 1, Allocation.Height - 1);
+			return base.OnExposeEvent(evnt);
+		}
+	}
+}
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/ImageView.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView.cs
new file mode 100644
index 0000000..f67a34f
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView.cs
@@ -0,0 +1,1033 @@
+//
+// FSpot.Widgets.ImageView.cs
+//
+// Author(s):
+//	Stephane Delcroix  <stephane at delcroix.org>
+//
+// This is free software. See COPYING for details.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+using Gtk;
+using Gdk;
+
+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) { }
+
+		public ImageView (Adjustment hadjustment, Adjustment vadjustment, bool can_select) : base ()
+		{
+			OnSetScrollAdjustments (hadjustment, vadjustment);
+			AdjustmentsChanged += ScrollToAdjustments;
+			WidgetFlags &= ~WidgetFlags.NoWindow;
+			SetFlag (WidgetFlags.CanFocus);
+
+			this.can_select = can_select;
+		}
+
+		public ImageView (bool can_select) : this (null, null, can_select)
+		{
+		}
+
+		public ImageView () : this (true)
+		{
+		}
+
+		Pixbuf pixbuf;
+		public Pixbuf Pixbuf {
+			get { return pixbuf; } 
+			set {
+				if (pixbuf == value)
+					return;
+
+				pixbuf = value;
+				min_zoom = ComputeMinZoom (upscale);
+
+				ComputeScaledSize ();
+				AdjustmentsChanged -= ScrollToAdjustments;
+				Hadjustment.Value = Vadjustment.Value = 0;
+				XOffset = YOffset = 0;
+				AdjustmentsChanged += ScrollToAdjustments;
+				QueueDraw ();
+			} 
+		}
+
+		ImageOrientation pixbuf_orientation;
+		public ImageOrientation PixbufOrientation {
+			get { return pixbuf_orientation; }
+			set {
+				if (value == pixbuf_orientation)
+					return;
+				pixbuf_orientation = value;
+				min_zoom = ComputeMinZoom (upscale);
+				ComputeScaledSize ();
+				QueueDraw ();
+			}
+		}
+
+		CheckPattern check_pattern = CheckPattern.Dark;
+		public CheckPattern CheckPattern {
+			get { return check_pattern; } 
+			set { 
+				if (check_pattern == value)
+					return;
+				check_pattern = value;
+				if (Pixbuf != null && Pixbuf.HasAlpha)
+					QueueDraw ();
+			} 
+		}
+
+		PointerMode pointer_mode = PointerMode.Select;
+		public PointerMode PointerMode {
+			get { return pointer_mode; } 
+			set { pointer_mode = value; } 
+		}
+
+		public Adjustment Hadjustment { get; private set; }
+		public Adjustment Vadjustment { get; private set; }
+
+		bool can_select = false;
+		public bool CanSelect {
+			get { return can_select; }
+			set { 
+				if (can_select == value)
+					return;
+				can_select = value;
+				if (!can_select)
+					selection = Rectangle.Zero;
+			}
+		}
+
+		Gdk.Rectangle selection = Rectangle.Zero;
+		public Gdk.Rectangle Selection {
+			get {
+				if (!can_select)
+					return Rectangle.Zero;
+				return selection;
+			}
+			set { 
+				if (!can_select)
+					return;
+
+				if (value == selection)
+					return;
+
+				selection = value;
+
+				EventHandler eh = SelectionChanged;
+				if (eh != null)
+					eh (this, EventArgs.Empty);
+				QueueDraw ();
+			}
+		}
+
+		double selection_xy_ratio = 0;
+		public double SelectionXyRatio {
+			get { return selection_xy_ratio; } 
+			set {
+				if (selection_xy_ratio == value)
+					return;
+				selection_xy_ratio = value;
+
+				if (selection_xy_ratio == 0)
+					return;
+
+				if (Selection == Rectangle.Zero)
+					return;
+
+				Selection = ConstrainSelection (Selection, false, false);
+			} 
+		}
+
+		InterpType interpolation = InterpType.Bilinear;
+		public Gdk.InterpType Interpolation {
+			get { return interpolation; } 
+			set { 
+				if (interpolation == value)
+					return;
+				interpolation = value;
+				QueueDraw ();
+			} 
+		}
+
+        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 ()
+		{
+			Zoom *= ZOOM_FACTOR;
+		}
+
+		public void ZoomOut ()
+		{
+			Zoom *= 1.0 / ZOOM_FACTOR;
+		}
+
+		public void ZoomAboutPoint (double zoom_increment, int x, int y)
+		{
+			DoZoom (zoom * zoom_increment, x, y);
+		}
+
+        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);
+
+            min_zoom = ComputeMinZoom (upscale);
+
+            this.upscale = upscale;
+
+            Fit = true;
+            DoZoom (MIN_ZOOM, Allocation.Width / 2, Allocation.Height / 2);
+
+            if (scrolled != null) {
+                ThreadAssist.ProxyToMain (() => {
+                        scrolled.SetPolicy (Gtk.PolicyType.Automatic, Gtk.PolicyType.Automatic);
+                });
+            }
+        }
+
+		public Point WindowCoordsToImage (Point win)
+		{
+			if (Pixbuf == null)
+				return Point.Zero;
+
+			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;
+
+			win.X = Clamp (win.X - x_offset, 0, (int)scaled_width - 1);
+			win.Y = Clamp (win.Y - y_offset, 0, (int)scaled_height - 1);
+
+			win = PixbufUtils.TransformOrientation ((int)scaled_width, (int)scaled_height, win, PixbufUtils.ReverseTransformation (pixbuf_orientation));
+
+			return  new Point ((int) Math.Floor (win.X * (double)(((int)PixbufOrientation <= 4 ? Pixbuf.Width : Pixbuf.Height) - 1) / (double)(scaled_width - 1) + .5),
+					   (int) Math.Floor (win.Y * (double)(((int)PixbufOrientation <= 4 ? Pixbuf.Height : Pixbuf.Width) - 1) / (double)(scaled_height - 1) + .5));
+		}
+
+		public event EventHandler ZoomChanged;
+		public event EventHandler SelectionChanged;
+#endregion
+
+#region protected API
+
+		protected static double ZOOM_FACTOR = 1.1;
+
+		protected double max_zoom = 10.0;
+		protected double MAX_ZOOM {
+			get { return max_zoom; }
+		}
+
+		protected double min_zoom = 0.1;
+		protected double MIN_ZOOM {
+			get { return min_zoom; }
+		}
+
+		bool upscale;
+		protected void ZoomFit ()
+		{
+			ZoomFit (upscale);
+		}
+
+		protected virtual void ApplyColorTransform (Pixbuf pixbuf)
+		{
+		}
+
+		protected Point ImageCoordsToWindow (Point image)
+		{
+			if (this.Pixbuf == null)
+				return Point.Zero;
+
+			image = PixbufUtils.TransformOrientation (Pixbuf.Width, Pixbuf.Height, image, pixbuf_orientation);
+			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;
+
+			return new Point ((int) Math.Floor (image.X * (double) (scaled_width - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Width : Pixbuf.Height) - 1) + 0.5) + x_offset,
+					  (int) Math.Floor (image.Y * (double) (scaled_height - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Height : Pixbuf.Width) - 1) + 0.5) + y_offset);
+		}
+
+		protected Rectangle ImageCoordsToWindow (Rectangle image)
+		{
+			if (this.Pixbuf == null)
+				return Gdk.Rectangle.Zero;
+
+			image = PixbufUtils.TransformOrientation (Pixbuf.Width, Pixbuf.Height, image, pixbuf_orientation);
+			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;
+
+			Gdk.Rectangle win = Gdk.Rectangle.Zero;
+			win.X = (int) Math.Floor (image.X * (double) (scaled_width - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Width : Pixbuf.Height) - 1) + 0.5) + x_offset;
+			win.Y = (int) Math.Floor (image.Y * (double) (scaled_height - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Height : Pixbuf.Width) - 1) + 0.5) + y_offset;
+			win.Width = (int) Math.Floor ((image.X + image.Width) * (double) (scaled_width - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Width : Pixbuf.Height) - 1) + 0.5) - win.X + x_offset;
+			win.Height = (int) Math.Floor ((image.Y + image.Height) * (double) (scaled_height - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Height : Pixbuf.Width) - 1) + 0.5) - win.Y + y_offset;
+
+			return win;
+		}
+#endregion
+
+#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 bool OnExposeEvent (Gdk.EventExpose evnt)
+		{
+			if (evnt.Window != GdkWindow)
+				return false;
+
+			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));
+				if (p_area == Rectangle.Zero)
+					continue;
+
+				//draw synchronously if InterpType.Nearest or zoom 1:1
+				if (Interpolation == InterpType.Nearest || zoom == 1.0) {
+					PaintRectangle (p_area, InterpType.Nearest);
+					continue;
+				}
+				
+				//Do this on idle ???
+				PaintRectangle (p_area, Interpolation);
+			}
+			
+			if (can_select)
+				OnSelectionExposeEvent (evnt);
+
+			return true;
+		}
+
+		protected override void OnSetScrollAdjustments (Gtk.Adjustment hadjustment, Gtk.Adjustment vadjustment)
+		{
+			if (hadjustment == null)
+				hadjustment = new Gtk.Adjustment (0, 0, 0, 0, 0, 0);
+			if (vadjustment == null)
+				vadjustment = new Gtk.Adjustment (0, 0, 0, 0, 0, 0);
+
+			bool need_change = false;
+
+			if (Hadjustment != hadjustment) {
+				Hadjustment = hadjustment;
+				Hadjustment.Upper = scaled_width;
+				Hadjustment.ValueChanged += HandleAdjustmentsValueChanged;
+				need_change = true;
+			}
+			if (Vadjustment != vadjustment) {
+				Vadjustment = vadjustment;
+				Vadjustment.Upper = scaled_height;
+				Vadjustment.ValueChanged += HandleAdjustmentsValueChanged;
+				need_change = true;
+			}
+
+			if (need_change)
+				HandleAdjustmentsValueChanged (this, EventArgs.Empty);
+		}	
+
+		protected override bool OnButtonPressEvent (EventButton evnt)
+		{
+			bool handled = false;
+
+			if (!HasFocus)
+				GrabFocus ();
+
+			if (PointerMode == PointerMode.None)
+				return false;
+
+			handled = handled || OnPanButtonPressEvent (evnt);
+
+			if (can_select)
+				handled = handled || OnSelectionButtonPressEvent (evnt);
+
+			return handled || base.OnButtonPressEvent (evnt);
+		}
+
+		protected override bool OnButtonReleaseEvent (EventButton evnt)
+		{
+			bool handled = false;
+
+			handled = handled || OnPanButtonReleaseEvent (evnt);
+
+			if (can_select)
+				handled = handled || OnSelectionButtonReleaseEvent (evnt);
+
+			return handled || base.OnButtonReleaseEvent (evnt);
+		}
+
+		protected override bool OnMotionNotifyEvent (EventMotion evnt)
+		{
+			bool handled = false;
+
+			handled = handled || OnPanMotionNotifyEvent (evnt);
+
+			if (can_select)
+				handled = handled || OnSelectionMotionNotifyEvent (evnt);
+
+			return handled || base.OnMotionNotifyEvent (evnt);
+
+		}
+
+		protected override bool OnScrollEvent (EventScroll evnt)
+		{
+			if ((evnt.State & ModifierType.ShiftMask) == 0) {//no shift, let's zoom
+				ZoomAboutPoint ((evnt.Direction == ScrollDirection.Up || evnt.Direction == ScrollDirection.Right) ? ZOOM_FACTOR : 1.0 / ZOOM_FACTOR,
+						 (int)evnt.X, (int)evnt.Y);
+				return true;
+			}
+
+			int x_incr = (int)Hadjustment.PageIncrement / 4;
+			int y_incr = (int)Vadjustment.PageIncrement / 4;
+			if ((evnt.State & ModifierType.ControlMask) == 0) {//no control scroll
+				ScrollBy ((evnt.Direction == ScrollDirection.Left) ? -x_incr : (evnt.Direction == ScrollDirection.Right) ? x_incr : 0,
+					  (evnt.Direction == ScrollDirection.Up) ? -y_incr : (evnt.Direction == ScrollDirection.Down) ? y_incr : 0);
+				return true;
+			} else { //invert x and y for scrolling
+				ScrollBy ((evnt.Direction == ScrollDirection.Up) ? -y_incr : (evnt.Direction == ScrollDirection.Down) ? y_incr : 0,
+					  (evnt.Direction == ScrollDirection.Left) ? -x_incr : (evnt.Direction == ScrollDirection.Right) ? x_incr : 0);	
+				return true;
+			}
+		}
+
+		protected override bool OnKeyPressEvent (EventKey evnt)
+		{
+			if ((evnt.State & (ModifierType.Mod1Mask | ModifierType.ControlMask)) != 0)
+				return base.OnKeyPressEvent (evnt);
+
+			bool handled = true;
+			int x, y;
+			Gdk.ModifierType type;
+
+			switch(evnt.Key) {
+			case Gdk.Key.Up:
+			case Gdk.Key.KP_Up:
+			case Gdk.Key.k:
+			case Gdk.Key.K:
+				ScrollBy (0, -Vadjustment.StepIncrement);
+				break;
+			case Gdk.Key.Down:
+			case Gdk.Key.KP_Down:
+			case Gdk.Key.j:
+			case Gdk.Key.J:
+				ScrollBy (0, Vadjustment.StepIncrement);
+				break;
+			case Gdk.Key.Left:
+			case Gdk.Key.KP_Left:
+			case Gdk.Key.h:
+			case Gdk.Key.H:
+				ScrollBy (-Hadjustment.StepIncrement, 0);
+				break;
+			case Gdk.Key.Right:
+			case Gdk.Key.KP_Right:
+			case Gdk.Key.l:
+			case Gdk.Key.L:
+				ScrollBy (Hadjustment.StepIncrement, 0);
+				break;
+			case Gdk.Key.equal:
+			case Gdk.Key.plus:
+			case Gdk.Key.KP_Add:
+				ZoomIn ();
+				break;
+			case Gdk.Key.minus:
+			case Gdk.Key.KP_Subtract:
+				ZoomOut ();
+				break;
+			case Gdk.Key.Key_0:
+			case Gdk.Key.KP_0:
+				ZoomFit ();
+				break;
+			case Gdk.Key.KP_1:
+			case Gdk.Key.Key_1:
+				GdkWindow.GetPointer (out x, out y, out type);
+				DoZoom (1.0, x, y);
+				break;
+			case Gdk.Key.Key_2:
+			case Gdk.Key.KP_2:
+				GdkWindow.GetPointer (out x, out y, out type);
+				DoZoom (2.0, x, y);
+				break;
+			default:
+				handled = false;
+				break;
+			}
+			
+			return handled || base.OnKeyPressEvent (evnt);
+		}
+#endregion
+
+#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 ();
+        }
+
+		void PaintBackground (Rectangle backgound, Rectangle area)
+		{
+			GdkWindow.DrawRectangle (Style.BackgroundGCs [(int)StateType.Normal], true, area);
+		}
+
+		void PaintRectangle (Rectangle area, InterpType interpolation)
+		{
+			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;
+			//Draw background
+			if (y_offset > 0) 	//Top
+				PaintBackground (new Rectangle (0, 0, Allocation.Width, y_offset), area);
+			if (x_offset > 0) 	//Left
+				PaintBackground (new Rectangle (0, y_offset, x_offset, (int)scaled_height), area);
+			if (x_offset >= 0)	//Right
+				PaintBackground (new Rectangle (x_offset + (int)scaled_width, y_offset, Allocation.Width - x_offset - (int)scaled_width, (int)scaled_height), area);
+			if (y_offset >= 0)	//Bottom
+				PaintBackground (new Rectangle (0, y_offset + (int)scaled_height, Allocation.Width, Allocation.Height - y_offset - (int)scaled_height), area);
+
+			if (Pixbuf == null)
+				return;
+
+			area.Intersect (new Rectangle (x_offset, y_offset, (int)scaled_width, (int)scaled_height));
+
+			if (area.Width <= 0  || area.Height <= 0)
+				return;
+
+			//Short circuit for 1:1 zoom
+			if (zoom == 1.0 &&
+			    !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);
+				return;
+			}
+
+			Rectangle pixbuf_area = PixbufUtils.TransformOrientation ((int)scaled_width,
+										  (int)scaled_height,
+										  new Rectangle ((area.X - x_offset),
+												 (area.Y - y_offset),
+												 area.Width,
+												 area.Height),
+										  PixbufUtils.ReverseTransformation (pixbuf_orientation));
+			using (Pixbuf temp_pixbuf = new Pixbuf (Colorspace.Rgb, false, 8, pixbuf_area.Width, pixbuf_area.Height)) {
+				if (Pixbuf.HasAlpha)
+					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);
+
+
+				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);
+				}
+			}
+		}
+
+		uint scaled_width, scaled_height;
+		void ComputeScaledSize ()
+		{
+			if (Pixbuf == null)
+				scaled_width = scaled_height = 0;
+			else {
+				double width;
+				double height;
+				if ((int)pixbuf_orientation <= 4 ) { //TopLeft, TopRight, BottomRight, BottomLeft
+					width = Pixbuf.Width;
+					height = Pixbuf.Height;
+				} else {			//LeftTop, RightTop, RightBottom, LeftBottom
+					width = Pixbuf.Height;
+					height = Pixbuf.Width;
+				}
+				scaled_width = (uint)Math.Floor (width * Zoom + .5);
+				scaled_height = (uint)Math.Floor (height * Zoom + .5);
+			}
+
+			Hadjustment.PageSize = Math.Min (scaled_width, Allocation.Width);
+			Hadjustment.PageIncrement = scaled_width * .9;
+			Hadjustment.StepIncrement = 32;
+			Hadjustment.Upper = scaled_width;
+			Hadjustment.Lower = 0;
+
+			Vadjustment.PageSize = Math.Min (scaled_height, Allocation.Height);
+			Vadjustment.PageIncrement = scaled_height * .9;
+			Vadjustment.StepIncrement = 32;
+			Vadjustment.Upper = scaled_height;
+			Vadjustment.Lower = 0;
+
+		}
+
+		event EventHandler AdjustmentsChanged;
+		void HandleAdjustmentsValueChanged (object sender, EventArgs e)
+		{
+			EventHandler eh = AdjustmentsChanged;
+			if (eh != null)
+				eh (this, EventArgs.Empty);
+		}
+
+		void ScrollToAdjustments (object sender, EventArgs e)
+		{
+			ScrollTo ((int)Hadjustment.Value, (int)Vadjustment.Value, false);
+		}
+
+		void ScrollTo (int x, int y, bool change_adjustments)
+		{
+			x = Clamp (x, 0, (int)(Hadjustment.Upper - Hadjustment.PageSize));
+			y = Clamp (y, 0, (int)(Vadjustment.Upper - Vadjustment.PageSize));
+
+			int xof = x - XOffset;
+			int yof = y - YOffset;
+			XOffset = x;
+			YOffset = y;
+
+			if (IsRealized) {
+				GdkWindow.Scroll (-xof, -yof);
+				GdkWindow.ProcessUpdates (true);
+			}
+
+			if (change_adjustments) {
+				AdjustmentsChanged -= ScrollToAdjustments;
+				Hadjustment.Value = XOffset;
+				Vadjustment.Value = YOffset;
+				AdjustmentsChanged += ScrollToAdjustments;
+			}
+		}
+
+		void ScrollBy (double x, double y)
+		{
+			ScrollTo ((int)(XOffset + x), (int)(YOffset + y), true);
+		}
+
+		static int Clamp (int value, int min, int max)
+		{
+			return Math.Min (Math.Max (value, min), max);
+		}
+
+		double ComputeMinZoom (bool upscale)
+		{
+			if (Pixbuf == null)
+				return 0.1;
+
+			double width;
+			double height;
+			if ((int)pixbuf_orientation <= 4 ) { //TopLeft, TopRight, BottomRight, BottomLeft
+				width = Pixbuf.Width;
+				height = Pixbuf.Height;
+			} else {			//LeftTop, RightTop, RightBottom, LeftBottom
+				width = Pixbuf.Height;
+				height = Pixbuf.Width;
+			}
+			if (upscale)
+				return Math.Min ((double)Allocation.Width / width,
+						 (double)Allocation.Height / height);
+			return Math.Min (1.0,
+					 Math.Min ((double)Allocation.Width / width,
+						   (double)Allocation.Height / height));
+		}
+#endregion
+
+
+#region selection
+		bool OnSelectionExposeEvent (EventExpose evnt)
+		{
+			if (selection == Rectangle.Zero)
+				return false;
+
+			Rectangle win_selection = ImageCoordsToWindow (selection);
+			using (var evnt_region = evnt.Region.Copy ()) {
+				using (Region r = new Region ()) {
+					r.UnionWithRect (win_selection);
+					evnt_region.Subtract (r);
+				}
+
+				using (Cairo.Context ctx = CairoHelper.Create (GdkWindow)) {
+					ctx.SetSourceRGBA (.5, .5, .5, .7);
+					CairoHelper.Region (ctx, evnt_region);
+					ctx.Fill ();
+				}
+			}
+			return true;
+		}
+
+		enum DragMode {
+			None,
+			Move,
+			Extend,
+		}
+
+		const int SELECTION_SNAP_DISTANCE = 8;
+		DragMode GetDragMode (int x, int y)
+		{
+			Rectangle win_selection = ImageCoordsToWindow (selection);
+			if (Rectangle.Inflate (win_selection, -SELECTION_SNAP_DISTANCE, -SELECTION_SNAP_DISTANCE).Contains (x, y))
+				return DragMode.Move;
+			if (Rectangle.Inflate (win_selection, SELECTION_SNAP_DISTANCE, SELECTION_SNAP_DISTANCE).Contains (x, y))
+				return DragMode.Extend;
+			return DragMode.None;
+		}
+
+		bool is_dragging_selection = false;
+		bool fixed_height = false;
+		bool fixed_width = false;
+		bool is_moving_selection = false;
+		Point selection_anchor = Point.Zero;
+
+		bool OnSelectionButtonPressEvent (EventButton evnt)
+		{
+			if (evnt.Button != 1)
+				return false;
+
+			if (evnt.Type == EventType.TwoButtonPress) {
+				is_dragging_selection = false;
+				is_moving_selection = false;
+				return false;
+			}
+			
+			Point img = WindowCoordsToImage (new Point ((int)evnt.X, (int)evnt.Y));
+			switch (GetDragMode ((int)evnt.X, (int)evnt.Y)) {
+				case DragMode.None:
+					is_dragging_selection = true;
+					PointerMode = PointerMode.Select;
+					Selection = Rectangle.Zero;
+					selection_anchor = img;
+					break;
+
+				case DragMode.Extend:
+					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
+						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
+						selection_anchor = new Point (Selection.X, Selection.Y + Selection.Height);
+					} else if (Math.Abs (win_sel.X - evnt.X) < SELECTION_SNAP_DISTANCE &&
+						   Math.Abs (win_sel.Y + win_sel.Height - evnt.Y) < SELECTION_SNAP_DISTANCE) {	//BottomLeft
+						selection_anchor = new Point (Selection.X + Selection.Width, Selection.Y);
+					} else if (Math.Abs (win_sel.X + win_sel.Width - evnt.X) < SELECTION_SNAP_DISTANCE &&
+						   Math.Abs (win_sel.Y + win_sel.Height - evnt.Y) < SELECTION_SNAP_DISTANCE) {	//BottomRight
+						selection_anchor = new Point (Selection.X, Selection.Y);
+					} else if (Math.Abs (win_sel.X - evnt.X) < SELECTION_SNAP_DISTANCE) {			//Left
+						selection_anchor = new Point (Selection.X + Selection.Width, Selection.Y);
+						fixed_height = true;
+					} else if (Math.Abs (win_sel.X + win_sel.Width - evnt.X) < SELECTION_SNAP_DISTANCE) {	//Right
+						selection_anchor = new Point (Selection.X, Selection.Y);
+						fixed_height = true;
+					} else if (Math.Abs (win_sel.Y - evnt.Y) < SELECTION_SNAP_DISTANCE) {			//Top
+						selection_anchor = new Point (Selection.X, Selection.Y + Selection.Height);
+						fixed_width = true;
+					} else if (Math.Abs (win_sel.Y + win_sel.Height - evnt.Y) < SELECTION_SNAP_DISTANCE) {	//Bottom
+						selection_anchor = new Point (Selection.X, Selection.Y);
+						fixed_width = true;
+					} else {
+						fixed_width = fixed_height = false;
+						is_dragging_selection = false;
+					}
+					break;
+
+				case DragMode.Move:
+					is_moving_selection = true;
+					selection_anchor = img;
+					SelectionSetPointer ((int)evnt.X, (int)evnt.Y);
+					break;
+			}
+
+			return true;
+		}
+
+		bool OnSelectionButtonReleaseEvent (EventButton evnt)
+		{
+			if (evnt.Button != 1)
+				return false;
+
+			is_dragging_selection = false;
+			is_moving_selection = false;
+			fixed_width = fixed_height = false;
+
+			SelectionSetPointer ((int)evnt.X, (int)evnt.Y);
+			return true;
+		}
+
+		void SelectionSetPointer (int x, int y)
+		{
+			if (is_moving_selection)
+				GdkWindow.Cursor = new Cursor (CursorType.Crosshair);
+			else {
+				switch (GetDragMode (x, y)) {
+				case DragMode.Move:
+					GdkWindow.Cursor = new Cursor (CursorType.Hand1);
+					break;
+				default:
+					GdkWindow.Cursor = null;
+					break;
+				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
+						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
+						GdkWindow.Cursor = new Cursor (CursorType.TopRightCorner);
+					} else if (Math.Abs (win_sel.X - x) < SELECTION_SNAP_DISTANCE &&
+						   Math.Abs (win_sel.Y + win_sel.Height - y) < SELECTION_SNAP_DISTANCE) {	//BottomLeft
+						GdkWindow.Cursor = new Cursor (CursorType.BottomLeftCorner);
+					} else if (Math.Abs (win_sel.X + win_sel.Width - x) < SELECTION_SNAP_DISTANCE &&
+						   Math.Abs (win_sel.Y + win_sel.Height - y) < SELECTION_SNAP_DISTANCE) {	//BottomRight
+						GdkWindow.Cursor = new Cursor (CursorType.BottomRightCorner);
+					} else if (Math.Abs (win_sel.X - x) < SELECTION_SNAP_DISTANCE) {			//Left
+						GdkWindow.Cursor = new Cursor (CursorType.LeftSide);
+					} else if (Math.Abs (win_sel.X + win_sel.Width - x) < SELECTION_SNAP_DISTANCE) {	//Right
+						GdkWindow.Cursor = new Cursor (CursorType.RightSide);
+					} else if (Math.Abs (win_sel.Y - y) < SELECTION_SNAP_DISTANCE) {			//Top
+						GdkWindow.Cursor = new Cursor (CursorType.TopSide);
+					} else if (Math.Abs (win_sel.Y + win_sel.Height - y) < SELECTION_SNAP_DISTANCE) {	//Bottom
+						GdkWindow.Cursor = new Cursor (CursorType.BottomSide);
+					}
+					break;
+				}
+			}
+		}
+
+		const int SELECTION_THRESHOLD = 5;
+		bool OnSelectionMotionNotifyEvent (EventMotion evnt)
+		{
+			int x, y;
+			ModifierType mod;
+
+			if (evnt.IsHint)
+				GdkWindow.GetPointer (out x, out y, out mod);
+			else {
+				x = (int)evnt.X;
+				y = (int)evnt.Y;
+			}
+
+
+			Point img = WindowCoordsToImage (new Point (x, y));
+			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) {
+					SelectionSetPointer (x, y);
+					return true;
+				}
+	
+				
+				if (selection_xy_ratio == 0)
+					Selection = new Rectangle (fixed_width ? Selection.X : Math.Min (selection_anchor.X, img.X),
+								   fixed_height ? Selection.Y : Math.Min (selection_anchor.Y, img.Y),
+								   fixed_width ? Selection.Width : Math.Abs (selection_anchor.X - img.X),
+								   fixed_height ? Selection.Height : Math.Abs (selection_anchor.Y - img.Y));
+
+				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)),
+									fixed_width, fixed_height);
+
+				SelectionSetPointer (x, y);
+				return true;
+			}
+
+			if (is_moving_selection) {
+				Selection = new Rectangle (Clamp (Selection.X + img.X - selection_anchor.X, 0, Pixbuf.Width - Selection.Width),
+							   Clamp (Selection.Y + img.Y - selection_anchor.Y, 0, Pixbuf.Height - Selection.Height),
+							   Selection.Width, Selection.Height);
+				selection_anchor = img;
+				SelectionSetPointer (x, y);
+				return true;
+			}
+
+			SelectionSetPointer (x, y);
+			return true;
+		}
+
+		Rectangle ConstrainSelection (Rectangle sel, bool fixed_width, bool fixed_height)
+		{
+			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)
+				constrain = 1.0 / constrain;
+
+
+			double ratio = (double)sel.Width / (double)sel.Height;
+			int height = sel.Height;
+			int width = sel.Width;
+			if (ratio > constrain) {
+				height = (int)((double)sel.Width / constrain);
+				if (height > Pixbuf.Height) {
+					height = sel.Height;
+					width = (int)(height * constrain);
+				}
+			} else {
+				width = (int)(height * constrain);
+				if (width > Pixbuf.Width) {
+					width = sel.Width;
+					height = (int)((double)width / constrain);
+				}
+			}
+
+			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);
+		}
+#endregion
+
+    }
+}
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Container.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Container.cs
new file mode 100644
index 0000000..475afda
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Container.cs
@@ -0,0 +1,129 @@
+using Gtk;
+using System.Collections.Generic;
+
+namespace FSpot.Widgets
+{
+    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
new file mode 100644
index 0000000..fc5485f
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/ImageView_Panning.cs
@@ -0,0 +1,73 @@
+using Gdk;
+using Gtk;
+
+namespace FSpot.Widgets
+{
+    public partial class ImageView
+    {
+
+        #region Panning
+
+        /// <summary>
+        ///     Whether or not the user is currently performing a pan motion (dragging with the middle mouse button).
+        /// </summary>
+        public bool InPanMotion { get; private set; }
+
+        Point pan_anchor = new Point (0, 0);
+
+        bool OnPanButtonPressEvent (EventButton evnt)
+        {
+            if (evnt.Button != 2) {
+                // Restrict to middle mouse button.
+                return false;
+            }
+            
+            System.Diagnostics.Debug.Assert (!InPanMotion);
+            InPanMotion = true;
+            
+            // Track starting point of panning movement.
+            pan_anchor.X = (int)evnt.X;
+            pan_anchor.Y = (int)evnt.Y;
+            
+            // Set to crosshair pointer
+            GdkWindow.Cursor = new Cursor (CursorType.Fleur);
+            return true;
+        }
+
+        bool OnPanMotionNotifyEvent (EventMotion evnt)
+        {
+            if (!InPanMotion) {
+                return false;
+            }
+            
+            // Calculate the direction of the panning, scroll accordingly.
+            int pan_x = pan_anchor.X - (int)evnt.X;
+            int pan_y = pan_anchor.Y - (int)evnt.Y;
+            ScrollBy (pan_x, pan_y);
+            
+            // Reset starting point.
+            pan_anchor.X = (int)evnt.X;
+            pan_anchor.Y = (int)evnt.Y;
+            return true;
+        }
+
+        bool OnPanButtonReleaseEvent (EventButton evnt)
+        {
+            if (evnt.Button != 2) {
+                // Restrict to middle mouse button.
+                return false;
+            }
+            
+            System.Diagnostics.Debug.Assert (InPanMotion);
+            InPanMotion = false;
+            
+            // Reset cursor
+            GdkWindow.Cursor = null;
+            return true;
+        }
+        
+        #endregion
+        
+    }
+}
+
diff --git a/src/Widgets/Layout.cs b/src/Core/FSpot.Gui/FSpot.Widgets/Layout.cs
similarity index 100%
rename from src/Widgets/Layout.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/Layout.cs
diff --git a/src/Widgets/MenuButton.cs b/src/Core/FSpot.Gui/FSpot.Widgets/MenuButton.cs
similarity index 100%
rename from src/Widgets/MenuButton.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/MenuButton.cs
diff --git a/src/Widgets/OpenWithMenu.cs b/src/Core/FSpot.Gui/FSpot.Widgets/OpenWithMenu.cs
similarity index 100%
rename from src/Widgets/OpenWithMenu.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/OpenWithMenu.cs
diff --git a/src/Widgets/PointerMode.cs b/src/Core/FSpot.Gui/FSpot.Widgets/PointerMode.cs
similarity index 100%
rename from src/Widgets/PointerMode.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/PointerMode.cs
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/Rating.cs b/src/Core/FSpot.Gui/FSpot.Widgets/Rating.cs
new file mode 100644
index 0000000..7698db5
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/Rating.cs
@@ -0,0 +1,365 @@
+/*
+ * Rating.cs
+ *
+ * Author[s]
+ *    Gabriel Burt (original widget in Banshee)
+ *    Cosme Sevestre (original porting to F-Spot)
+ *    Stephane Delcroix
+ *
+ * Copyright (C) 2006 by the respective authors.
+ *
+ * This is free software, see COPYING for details
+ *
+ */
+
+using Gtk;
+using Gdk;
+using System;
+using FSpot.Utils;
+
+namespace FSpot.Widgets
+{
+	public class Rating : Gtk.EventBox
+	{
+		int rating;
+		Pixbuf display_pixbuf;
+		public object RatedObject;
+		bool mouse_over;
+		bool editable;
+
+		protected static int max_rating = 5;
+		static Pixbuf icon_rated;
+		static Pixbuf icon_blank;
+
+		public event EventHandler Changed;
+		
+		public Rating () : this (0, true)
+		{
+		}
+
+		public Rating (bool editable) : this (0, editable)
+		{
+		}
+
+		public Rating (int rating) : this (rating, true)
+		{
+		} 
+
+		public Rating (int rating, bool editable)
+		{
+			this.rating = rating;
+			this.editable = editable;
+			
+			MouseOver = false;
+			EnterNotifyEvent += HandleMouseEnter;
+			LeaveNotifyEvent += HandleMouseLeave;
+			
+			VisibleWindow = false;
+			CanFocus = true;
+			
+			display_pixbuf = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, Width, Height);
+			
+			display_pixbuf.Fill (0xffffff00);
+			DrawRating (DisplayPixbuf, Value);
+			Add (new Gtk.Image (display_pixbuf));
+			
+			ShowAll ();
+		}
+		
+		~Rating ()
+		{
+			display_pixbuf.Dispose ();
+			display_pixbuf = null;
+			
+			icon_rated = null;
+			icon_blank = null;
+		}
+		
+		public Pixbuf DrawRating (int val)
+		{
+			Pixbuf buf = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, Width, Height);
+			DrawRating (buf, val);
+			return buf;
+		}
+		
+		public virtual void DrawRating (Pixbuf pbuf, int val)
+		{
+			// Clean pixbuf
+			pbuf.Fill (0xffffff00);
+			
+			//Stars
+			for (int i = 0; i < MaxRating; i ++)
+				if (i <= val - 1)
+					IconRated.CopyArea (0, 0, IconRated.Width, IconRated.Height, 
+							pbuf, (i + 1) * IconRated.Width, 0);
+				else {
+					IconNotRated.CopyArea (0, 0, IconRated.Width, IconRated.Height, 
+							pbuf, (i + 1) * IconRated.Width, 0);
+				}
+		}
+
+		public void SetValueFromPosition (int x)
+		{
+			Value = RatingFromPosition (x);
+		}
+		
+		public virtual int RatingFromPosition (double x)
+		{
+			int pos = (int) (x / (double) IconRated.Width);
+			
+			return pos;
+		}
+		
+		private void HandleMouseEnter (object sender, EventArgs args)
+		{
+			mouse_over = true;
+			Redraw ();
+		}
+		
+		private void HandleMouseLeave (object sender, EventArgs args)
+		{
+			mouse_over = false;
+			Redraw ();
+		}
+		
+		// Event Handlers
+		[GLib.ConnectBefore]
+		protected override bool OnButtonPressEvent (Gdk.EventButton eb)
+		{
+			if (editable) {
+				if (eb.Button != 1)
+					return false;
+			
+				Value = RatingFromPosition (eb.X);
+			}
+			return true;
+		}
+		
+		public bool HandleKeyPress (Gdk.EventKey ek)
+		{
+			return this.OnKeyPressEvent (ek);
+		}
+		
+		[GLib.ConnectBefore]
+		protected override bool OnKeyPressEvent (Gdk.EventKey ek)
+		{
+			if (editable) {
+				switch (ek.Key) {
+				case Gdk.Key.Up:
+				case Gdk.Key.Right:
+				case Gdk.Key.plus:
+				case Gdk.Key.equal:
+					Value ++;
+					return true;
+					
+				case Gdk.Key.Down:
+				case Gdk.Key.Left:
+				case Gdk.Key.minus:
+					Value --;
+					return true;
+				}
+				
+				if (ek.KeyValue >= (48 + 1) &&
+				       ek.KeyValue <= (48 + MaxRating) &&
+				       ek.KeyValue <= 59) {
+					Value = (int) ek.KeyValue - 48;
+					return true;
+				}
+				
+				return false;
+			} else
+				return true;
+		}
+		
+		[GLib.ConnectBefore]
+		protected override bool OnScrollEvent (EventScroll args)
+		{
+			return HandleScroll (args);
+		}
+
+		public bool HandleScroll (EventScroll args)
+		{
+			if (editable) {
+				switch (args.Direction) {
+				case Gdk.ScrollDirection.Up:
+				case Gdk.ScrollDirection.Right:
+					Value ++;
+					return true;
+					
+				case Gdk.ScrollDirection.Down:
+				case Gdk.ScrollDirection.Left:
+					Value --;
+					return true;
+				}
+				
+				return false;
+			} else
+				return true;
+		}
+		
+		[GLib.ConnectBefore]
+		protected override bool OnMotionNotifyEvent (Gdk.EventMotion evnt)
+		{
+			if (editable) {
+				// TODO draw highlights onmouseover a rating? (and clear on leaveNotify)
+				if (evnt.State != Gdk.ModifierType.Button1Mask)
+					return false;
+			
+				Value = RatingFromPosition (evnt.X);
+			}
+			return true;
+		}
+		
+		[GLib.ConnectBefore]
+		protected override bool OnFocusInEvent (Gdk.EventFocus evnt)
+		{
+			return true;
+		}
+		
+		[GLib.ConnectBefore]
+		protected override bool OnFocused (DirectionType direction)
+		{
+			return true;
+		}
+
+		private void Redraw()
+		{
+			DrawRating (DisplayPixbuf, Value);
+			QueueDraw ();
+		}
+
+		// Event Changed Dispatcher
+		private void OnChanged ()
+		{
+			Redraw();
+			EventHandler changed = Changed;
+			
+			if (changed != null)
+				changed (this, new EventArgs ());
+		}
+		
+		// Properties
+		public int Value {
+			get { return rating; }
+			
+			set {
+				// Same rating
+				if (rating == value)
+					return;
+				// Remove.trash.1-5 rating
+				if (value >= 0 && value <= max_rating) {
+					rating = value;
+					OnChanged ();
+				}
+			}
+		}
+		
+		public Pixbuf DisplayPixbuf {
+			get { return display_pixbuf; }
+		}
+		
+		public bool MouseOver {
+			get { return mouse_over; }
+			set { mouse_over = value; }
+		}
+		
+		public int MaxRating {
+			get { return max_rating; }
+		}
+		
+		public virtual int NumLevels {
+			get { return max_rating + 1; }
+		}
+		
+		public virtual Pixbuf IconRated {
+			get {
+				if (icon_rated == null)
+					icon_rated = GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, "rating-rated", 16, (Gtk.IconLookupFlags)0);
+				
+				return icon_rated;
+			}
+			
+			set { icon_rated = value; }
+		}
+		
+		public virtual Pixbuf IconNotRated {
+			get {
+				if (icon_blank == null)
+					icon_blank = GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, "rating-blank", 16, (Gtk.IconLookupFlags)0);
+				
+				return icon_blank;
+			}
+			
+			set { icon_blank = value; }
+		}
+		
+		public virtual int Width {
+			get { return IconRated.Width * NumLevels; }
+		}
+		
+		public virtual int Height {
+			get { return IconRated.Height; }
+		}
+	}
+
+	public class RatingSmall : Rating
+	{
+		static Pixbuf icon_rated_small;
+		static Pixbuf icon_blank_small;
+		
+		public RatingSmall () : base (0)
+		{
+		}
+
+		public RatingSmall (int rating) : base (rating) 
+		{
+		}
+
+		public RatingSmall (bool editable) : base (editable)
+		{
+		}
+
+		public RatingSmall (int rating, bool editable) : base (rating, editable)
+		{
+		}
+
+		public override void DrawRating (Pixbuf pbuf, int val)
+		{
+			// Clean pixbuf
+			pbuf.Fill (0xffffff00);
+			
+			//Stars
+			for (int i = 0; i < MaxRating; i ++)
+				if (i <= val - 1)
+					IconRated.CopyArea (0, 0, IconRated.Width, IconRated.Height, 
+							pbuf, i * IconRated.Width, 0);
+		}
+		
+		public override Pixbuf IconRated {
+			get {
+				if (icon_rated_small == null)
+					icon_rated_small = GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, "rating-rated", 16, (Gtk.IconLookupFlags)0);
+				
+				return icon_rated_small;
+			}
+		}
+		
+		public override Pixbuf IconNotRated {
+			get {
+				if (icon_blank_small == null)
+					icon_blank_small = GtkUtil.TryLoadIcon (FSpot.Core.Global.IconTheme, "rating-blank", 16, (Gtk.IconLookupFlags)0);
+				
+				return icon_blank_small;
+			}
+		}
+		
+		public override int NumLevels {
+			get { return max_rating; }
+		}
+		
+		public override int RatingFromPosition (double x)
+		{
+			return base.RatingFromPosition (x) + 1;
+		}
+	}
+}
diff --git a/src/Widgets/SaneTreeView.cs b/src/Core/FSpot.Gui/FSpot.Widgets/SaneTreeView.cs
similarity index 100%
rename from src/Widgets/SaneTreeView.cs
rename to src/Core/FSpot.Gui/FSpot.Widgets/SaneTreeView.cs
diff --git a/src/Core/FSpot.Gui/FSpot.Widgets/ScrolledView.cs b/src/Core/FSpot.Gui/FSpot.Widgets/ScrolledView.cs
new file mode 100644
index 0000000..71c38ea
--- /dev/null
+++ b/src/Core/FSpot.Gui/FSpot.Widgets/ScrolledView.cs
@@ -0,0 +1,79 @@
+using System;
+using Gtk;
+using FSpot.Core;
+
+namespace FSpot.Widgets {
+	public class ScrolledView : Fixed {
+		private EventBox ebox;
+		private ScrolledWindow scroll;
+		private Delay hide;
+
+		public ScrolledView (IntPtr raw) : base (raw) {}
+
+		public ScrolledView () : base () {
+			scroll = new ScrolledWindow  (null, null);
+			this.Put (scroll, 0, 0);
+			scroll.Show ();
+			
+			//ebox = new BlendBox ();
+			ebox = new EventBox ();
+			this.Put (ebox, 0, 0);
+			ebox.ShowAll ();
+			
+			hide = new Delay (2000, new GLib.IdleHandler (HideControls));
+			this.Destroyed += HandleDestroyed;
+		}
+
+		public bool HideControls ()
+		{
+			return HideControls (false);
+		}
+
+		public bool HideControls (bool force)
+		{
+			int x, y;
+			Gdk.ModifierType type;
+
+			if (!force && IsRealized) {
+				ebox.GdkWindow.GetPointer (out x, out y, out type);
+				if (x < ebox.Allocation.Width && y < ebox.Allocation.Height) {
+					hide.Start ();
+					return true;
+				}
+			}
+
+			hide.Stop ();
+			ebox.Hide ();
+			return false;
+		}
+		
+		public void ShowControls ()
+		{
+			hide.Stop ();
+			hide.Start ();
+			ebox.Show ();
+		}
+
+		private void HandleDestroyed (object sender, System.EventArgs args)
+		{
+			hide.Stop ();
+		}
+
+		public EventBox ControlBox {
+			get {
+				return ebox;
+			}
+		}
+		public ScrolledWindow ScrolledWindow {
+			get {
+				return scroll;
+			}
+		}
+
+		protected override void OnSizeAllocated (Gdk.Rectangle allocation)
+		{
+			scroll.SetSizeRequest (allocation.Width, allocation.Height);
+			base.OnSizeAllocated (allocation);
+		}
+	}
+}
diff --git a/src/Core/FSpot.Gui/Makefile.am b/src/Core/FSpot.Gui/Makefile.am
new file mode 100644
index 0000000..c464331
--- /dev/null
+++ b/src/Core/FSpot.Gui/Makefile.am
@@ -0,0 +1,36 @@
+ASSEMBLY = FSpot.Gui
+TARGET = library
+LINK = $(REF_FSPOT_GUI)
+
+SOURCES =  \
+	FSpot.Transitions/CairoTransition.cs \
+	FSpot.Transitions/DissolveTransition.cs \
+	FSpot.Transitions/PushTransition.cs \
+	FSpot.Transitions/SlideShowTransition.cs \
+	FSpot.Widgets/ApplicationActivatedEventArgs.cs \
+	FSpot.Widgets/BuilderWindow.cs \
+	FSpot.Widgets/CheckPattern.cs \
+	FSpot.Widgets/ComplexMenuItem.cs \
+	FSpot.Widgets/Curve.cs \
+	FSpot.Widgets/CurveType.cs \
+	FSpot.Widgets/CustomPrintWidget.cs \
+	FSpot.Widgets/DateEdit.cs \
+	FSpot.Widgets/DateEditFlags.cs \
+	FSpot.Widgets/HighlightedBox.cs \
+	FSpot.Widgets/ImageView.cs \
+	FSpot.Widgets/ImageView_Container.cs \
+	FSpot.Widgets/ImageView_Panning.cs \
+	FSpot.Widgets/Layout.cs \
+	FSpot.Widgets/MenuButton.cs \
+	FSpot.Widgets/OpenWithMenu.cs \
+	FSpot.Widgets/PointerMode.cs \
+	FSpot.Widgets/Rating.cs \
+	FSpot.Widgets/SaneTreeView.cs \
+	FSpot.Widgets/ScrolledView.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
+
+EXTRA_DIST += FSpot.Gui.dll.config
+module_SCRIPTS += FSpot.Gui.dll.config
diff --git a/src/Core/FSpot.Gui/Makefile.in b/src/Core/FSpot.Gui/Makefile.in
new file mode 100644
index 0000000..e151f09
--- /dev/null
+++ b/src/Core/FSpot.Gui/Makefile.in
@@ -0,0 +1,832 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/FSpot.Gui.dll.config.in $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Core/FSpot.Gui
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = FSpot.Gui.dll.config
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Gui
+TARGET = library
+LINK = $(REF_FSPOT_GUI) $(am__append_1)
+SOURCES = \
+	FSpot.Transitions/CairoTransition.cs \
+	FSpot.Transitions/DissolveTransition.cs \
+	FSpot.Transitions/PushTransition.cs \
+	FSpot.Transitions/SlideShowTransition.cs \
+	FSpot.Widgets/ApplicationActivatedEventArgs.cs \
+	FSpot.Widgets/BuilderWindow.cs \
+	FSpot.Widgets/CheckPattern.cs \
+	FSpot.Widgets/ComplexMenuItem.cs \
+	FSpot.Widgets/Curve.cs \
+	FSpot.Widgets/CurveType.cs \
+	FSpot.Widgets/CustomPrintWidget.cs \
+	FSpot.Widgets/DateEdit.cs \
+	FSpot.Widgets/DateEditFlags.cs \
+	FSpot.Widgets/HighlightedBox.cs \
+	FSpot.Widgets/ImageView.cs \
+	FSpot.Widgets/ImageView_Container.cs \
+	FSpot.Widgets/ImageView_Panning.cs \
+	FSpot.Widgets/Layout.cs \
+	FSpot.Widgets/MenuButton.cs \
+	FSpot.Widgets/OpenWithMenu.cs \
+	FSpot.Widgets/PointerMode.cs \
+	FSpot.Widgets/Rating.cs \
+	FSpot.Widgets/SaneTreeView.cs \
+	FSpot.Widgets/ScrolledView.cs
+
+RESOURCES = 
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) FSpot.Gui.dll.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+	$(THEME_ICONS_SOURCE) FSpot.Gui.dll.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Core/FSpot.Gui/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Core/FSpot.Gui/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+FSpot.Gui.dll.config: $(top_builddir)/config.status $(srcdir)/FSpot.Gui.dll.config.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/JobScheduler/FSpotCompat.cs b/src/Core/FSpot.JobScheduler/Banshee.Base/FSpotCompat.cs
similarity index 100%
rename from src/JobScheduler/FSpotCompat.cs
rename to src/Core/FSpot.JobScheduler/Banshee.Base/FSpotCompat.cs
diff --git a/src/JobScheduler/IInstanceCriticalJob.cs b/src/Core/FSpot.JobScheduler/Banshee.Kernel/IInstanceCriticalJob.cs
similarity index 100%
rename from src/JobScheduler/IInstanceCriticalJob.cs
rename to src/Core/FSpot.JobScheduler/Banshee.Kernel/IInstanceCriticalJob.cs
diff --git a/src/JobScheduler/IJob.cs b/src/Core/FSpot.JobScheduler/Banshee.Kernel/IJob.cs
similarity index 100%
rename from src/JobScheduler/IJob.cs
rename to src/Core/FSpot.JobScheduler/Banshee.Kernel/IJob.cs
diff --git a/src/JobScheduler/IntervalHeap.cs b/src/Core/FSpot.JobScheduler/Banshee.Kernel/IntervalHeap.cs
similarity index 100%
rename from src/JobScheduler/IntervalHeap.cs
rename to src/Core/FSpot.JobScheduler/Banshee.Kernel/IntervalHeap.cs
diff --git a/src/JobScheduler/JobPriority.cs b/src/Core/FSpot.JobScheduler/Banshee.Kernel/JobPriority.cs
similarity index 100%
rename from src/JobScheduler/JobPriority.cs
rename to src/Core/FSpot.JobScheduler/Banshee.Kernel/JobPriority.cs
diff --git a/src/JobScheduler/Scheduler.cs b/src/Core/FSpot.JobScheduler/Banshee.Kernel/Scheduler.cs
similarity index 100%
rename from src/JobScheduler/Scheduler.cs
rename to src/Core/FSpot.JobScheduler/Banshee.Kernel/Scheduler.cs
diff --git a/src/JobScheduler/JobStatus.cs b/src/Core/FSpot.JobScheduler/FSpot.Jobs/JobStatus.cs
similarity index 100%
rename from src/JobScheduler/JobStatus.cs
rename to src/Core/FSpot.JobScheduler/FSpot.Jobs/JobStatus.cs
diff --git a/src/Core/FSpot.JobScheduler/Makefile.am b/src/Core/FSpot.JobScheduler/Makefile.am
new file mode 100644
index 0000000..d655a40
--- /dev/null
+++ b/src/Core/FSpot.JobScheduler/Makefile.am
@@ -0,0 +1,16 @@
+ASSEMBLY = FSpot.JobScheduler
+TARGET = library
+LINK = $(REF_FSPOT_JOB_SCHEDULER)
+
+SOURCES =  \
+	Banshee.Base/FSpotCompat.cs \
+	Banshee.Kernel/IInstanceCriticalJob.cs \
+	Banshee.Kernel/IJob.cs \
+	Banshee.Kernel/IntervalHeap.cs \
+	Banshee.Kernel/JobPriority.cs \
+	Banshee.Kernel/Scheduler.cs \
+	FSpot.Jobs/JobStatus.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Core/FSpot.JobScheduler/Makefile.in b/src/Core/FSpot.JobScheduler/Makefile.in
new file mode 100644
index 0000000..c801e86
--- /dev/null
+++ b/src/Core/FSpot.JobScheduler/Makefile.in
@@ -0,0 +1,812 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Core/FSpot.JobScheduler
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.JobScheduler
+TARGET = library
+LINK = $(REF_FSPOT_JOB_SCHEDULER) $(am__append_1)
+SOURCES = \
+	Banshee.Base/FSpotCompat.cs \
+	Banshee.Kernel/IInstanceCriticalJob.cs \
+	Banshee.Kernel/IJob.cs \
+	Banshee.Kernel/IntervalHeap.cs \
+	Banshee.Kernel/JobPriority.cs \
+	Banshee.Kernel/Scheduler.cs \
+	FSpot.Jobs/JobStatus.cs
+
+RESOURCES = 
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Core/FSpot.JobScheduler/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Core/FSpot.JobScheduler/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Platform/Gnome/Desktop.cs b/src/Core/FSpot.Platform/FSpot.Platform/Desktop.cs
similarity index 100%
rename from src/Platform/Gnome/Desktop.cs
rename to src/Core/FSpot.Platform/FSpot.Platform/Desktop.cs
diff --git a/src/Core/FSpot.Platform/FSpot.Platform/PreferenceBackend.cs b/src/Core/FSpot.Platform/FSpot.Platform/PreferenceBackend.cs
new file mode 100644
index 0000000..6953509
--- /dev/null
+++ b/src/Core/FSpot.Platform/FSpot.Platform/PreferenceBackend.cs
@@ -0,0 +1,109 @@
+/*
+ * FSpot.Platform.Gnome.PreferenceBackend.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Runtime.Serialization;
+
+
+namespace FSpot
+{
+	public class NotifyEventArgs : System.EventArgs
+	{
+		string key;
+		public string Key {
+			get { return key; }
+		}
+
+		object val;
+		public object Value {
+			get { return val; }
+		}
+
+		public NotifyEventArgs (string key, object val)
+		{
+			this.key = key;
+			this.val = val;
+		}
+	}
+}
+
+namespace FSpot.Platform
+{
+	[Serializable]
+	public class NoSuchKeyException : Exception
+	{
+		public NoSuchKeyException () : base ()
+		{
+		}
+
+		public NoSuchKeyException (string key) : base (key)
+		{
+		}
+
+		public NoSuchKeyException (string key, Exception e) : base (key, e)
+		{
+		}
+
+		protected NoSuchKeyException (SerializationInfo info, StreamingContext context) : base (info, context)
+		{
+		}
+	}
+
+	public class PreferenceBackend
+	{
+		static object sync_handler = new object ();
+
+		private static GConf.Client client;
+		private GConf.Client Client {
+			get {
+				lock (sync_handler) {
+					if (client == null)
+						client = new GConf.Client ();
+					return client;
+				}
+			}
+		}
+
+		public PreferenceBackend ()
+		{
+		}
+
+		public object Get (string key)
+		{
+			try {
+				return Client.Get (key);
+			} catch (GConf.NoSuchKeyException) {
+				throw new NoSuchKeyException (key);
+			}
+		}
+
+		internal T Get<T> (string key)
+		{
+			T value = default(T);
+			try {
+				value = (T) Get (key);
+			} catch (NoSuchKeyException) {
+			} catch (InvalidCastException) {
+			}
+			return value;
+		}
+
+		public void Set (string key, object o)
+		{
+			Client.Set (key, o);
+		}
+
+		public void AddNotify (string key, EventHandler<NotifyEventArgs> handler)
+		{
+			// GConf doesn't like trailing slashes
+			key = key.TrimEnd('/');	
+			Client.AddNotify (key, delegate (object sender, GConf.NotifyEventArgs args) {handler (sender, new NotifyEventArgs (args.Key, args.Value));});
+		}
+	}
+}
diff --git a/src/Platform/Gnome/ScreenSaver.cs b/src/Core/FSpot.Platform/FSpot.Platform/ScreenSaver.cs
similarity index 100%
rename from src/Platform/Gnome/ScreenSaver.cs
rename to src/Core/FSpot.Platform/FSpot.Platform/ScreenSaver.cs
diff --git a/src/Platform/Gnome/WebProxy.cs b/src/Core/FSpot.Platform/FSpot.Platform/WebProxy.cs
similarity index 100%
rename from src/Platform/Gnome/WebProxy.cs
rename to src/Core/FSpot.Platform/FSpot.Platform/WebProxy.cs
diff --git a/src/Core/FSpot.Platform/Makefile.am b/src/Core/FSpot.Platform/Makefile.am
new file mode 100644
index 0000000..3e1b6e5
--- /dev/null
+++ b/src/Core/FSpot.Platform/Makefile.am
@@ -0,0 +1,13 @@
+ASSEMBLY = FSpot.Platform
+TARGET = library
+LINK = $(REF_FSPOT_PLATFORM)
+
+SOURCES =  \
+	FSpot.Platform/Desktop.cs \
+	FSpot.Platform/PreferenceBackend.cs \
+	FSpot.Platform/ScreenSaver.cs \
+	FSpot.Platform/WebProxy.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Core/FSpot.Platform/Makefile.in b/src/Core/FSpot.Platform/Makefile.in
new file mode 100644
index 0000000..6caf839
--- /dev/null
+++ b/src/Core/FSpot.Platform/Makefile.in
@@ -0,0 +1,809 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Core/FSpot.Platform
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Platform
+TARGET = library
+LINK = $(REF_FSPOT_PLATFORM) $(am__append_1)
+SOURCES = \
+	FSpot.Platform/Desktop.cs \
+	FSpot.Platform/PreferenceBackend.cs \
+	FSpot.Platform/ScreenSaver.cs \
+	FSpot.Platform/WebProxy.cs
+
+RESOURCES = 
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Core/FSpot.Platform/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Core/FSpot.Platform/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Query/ConditionWrapper.cs b/src/Core/FSpot.Query/FSpot.Query/ConditionWrapper.cs
similarity index 100%
rename from src/Query/ConditionWrapper.cs
rename to src/Core/FSpot.Query/FSpot.Query/ConditionWrapper.cs
diff --git a/src/Query/DateRange.cs b/src/Core/FSpot.Query/FSpot.Query/DateRange.cs
similarity index 100%
rename from src/Query/DateRange.cs
rename to src/Core/FSpot.Query/FSpot.Query/DateRange.cs
diff --git a/src/Query/FolderSet.cs b/src/Core/FSpot.Query/FSpot.Query/FolderSet.cs
similarity index 100%
rename from src/Query/FolderSet.cs
rename to src/Core/FSpot.Query/FSpot.Query/FolderSet.cs
diff --git a/src/Query/IOrderCondition.cs b/src/Core/FSpot.Query/FSpot.Query/IOrderCondition.cs
similarity index 100%
rename from src/Query/IOrderCondition.cs
rename to src/Core/FSpot.Query/FSpot.Query/IOrderCondition.cs
diff --git a/src/Query/IQueryCondition.cs b/src/Core/FSpot.Query/FSpot.Query/IQueryCondition.cs
similarity index 100%
rename from src/Query/IQueryCondition.cs
rename to src/Core/FSpot.Query/FSpot.Query/IQueryCondition.cs
diff --git a/src/Core/FSpot.Query/FSpot.Query/LogicalTerm.cs b/src/Core/FSpot.Query/FSpot.Query/LogicalTerm.cs
new file mode 100644
index 0000000..e918822
--- /dev/null
+++ b/src/Core/FSpot.Query/FSpot.Query/LogicalTerm.cs
@@ -0,0 +1,202 @@
+/*
+ * FSpot.Query.LogicalTerm
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Collections.Generic;
+using Hyena;
+using FSpot.Core;
+
+namespace FSpot.Query
+{
+	public abstract class LogicalTerm : IQueryCondition
+	{
+		public abstract string SqlClause ();
+	}
+
+	public class TagTerm : LogicalTerm, IDisposable
+	{
+		Tag tag;
+		public Tag Tag {
+			get { return tag; }
+		}
+
+		public TagTerm (Tag tag)
+		{
+			this.tag = tag;
+		}
+
+		public override string SqlClause ()
+		{
+			return SqlClause (this);
+		}
+
+		internal static string SqlClause (params TagTerm [] tags)
+		{
+			List<string> list = new List<string> (tags.Length);
+			foreach (TagTerm tag in tags)
+				list.Add (tag.Tag.Id.ToString ());
+			return SqlClause (list.ToArray ());
+		}
+
+		private static string SqlClause (string [] tagids)
+		{
+			if (tagids.Length == 0)
+				return null;
+			if (tagids.Length == 1)
+				return String.Format (" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0})) ", tagids[0]);
+			else
+				return String.Format (" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN ({0}))) ", String.Join (", ", tagids));
+		}
+
+		public void Dispose ()
+		{
+			if (tag != null)
+				tag.Dispose ();
+			System.GC.SuppressFinalize (this);
+		}
+
+		~TagTerm ()
+		{
+			Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
+			if (tag != null)
+				tag.Dispose ();
+		}
+	}
+
+	public class TextTerm : LogicalTerm
+	{
+		string text;
+		public string Text {
+			get { return text; }
+		}
+
+		string field;
+		public string Field {
+			get { return field;  }
+		}
+
+		public TextTerm (string text, string field)
+		{
+			this.text = text;
+			this.field = field;
+		}
+
+		public static OrTerm SearchMultiple (string text, params string[] fields)
+		{
+			List<TextTerm> terms = new List<TextTerm> (fields.Length);
+			foreach (string field in fields)
+				terms.Add (new TextTerm (text, field));
+			return new OrTerm (terms.ToArray ());
+		}
+
+		public override string SqlClause ()
+		{
+			return String.Format (" {0} LIKE %{1}% ", field, text);
+		}
+	}
+
+	public class NotTerm : LogicalTerm
+	{
+		LogicalTerm term;
+		public LogicalTerm Term {
+			get { return term; }
+		}
+
+		public NotTerm (LogicalTerm term)
+		{
+			this.term = term;
+		}
+
+		public override string SqlClause ()
+		{
+			return String.Format (" NOT ({0}) ", term.SqlClause ());
+		}
+	}
+
+	public abstract class NAryOperator : LogicalTerm
+	{
+		protected List<LogicalTerm> terms;
+		public LogicalTerm[] Terms {
+			get { return terms.ToArray (); }
+		}
+
+		protected string [] ToStringArray ()
+		{
+			List<string> ls = new List<string> (terms.Count);
+			foreach (LogicalTerm term in terms)
+				ls.Add (term.SqlClause ());
+			return ls.ToArray ();
+		}
+
+		public static string SqlClause (string op, string[] items)
+		{
+			if (items.Length == 1)
+				return items [0];
+			else
+				return " (" + String.Join (String.Format (" {0} ", op), items) + ") ";
+		}
+		
+	}
+
+	public class OrTerm : NAryOperator
+	{
+		public OrTerm (params LogicalTerm[] terms)
+		{
+			this.terms = new List<LogicalTerm> (terms.Length);
+			foreach (LogicalTerm term in terms)
+				Add (term);
+		}
+
+		private void Add (LogicalTerm term)
+		{
+			if (term is OrTerm)
+				foreach (LogicalTerm t in (term as OrTerm).terms)
+					Add (t);
+			else
+				terms.Add (term);
+		}
+
+		public override string SqlClause ()
+		{
+			List<TagTerm> tagterms = new List<TagTerm> ();
+			List<string> otherterms = new List<string> ();
+			foreach (LogicalTerm term in terms)
+				if (term is TagTerm)
+					tagterms.Add (term as TagTerm);
+				else
+					otherterms.Add (term.SqlClause ());
+			otherterms.Insert (0, TagTerm.SqlClause (tagterms.ToArray ()));
+			return SqlClause ("OR", otherterms.ToArray ());
+		}
+	}
+
+	public class AndTerm : NAryOperator
+	{
+		public AndTerm (params LogicalTerm[] terms)
+		{
+			this.terms = new List<LogicalTerm> (terms.Length);
+			foreach (LogicalTerm term in terms)
+				Add (term);
+		}
+
+		private void Add (LogicalTerm term)
+		{
+			if (term is AndTerm)
+				foreach (LogicalTerm t in (term as AndTerm).terms)
+					Add (t);
+			else
+				terms.Add (term);
+		}
+
+		public override string SqlClause ()
+		{
+			return SqlClause ("AND", ToStringArray ());
+		}
+	}
+}
diff --git a/src/Query/OrderByTime.cs b/src/Core/FSpot.Query/FSpot.Query/OrderByTime.cs
similarity index 100%
rename from src/Query/OrderByTime.cs
rename to src/Core/FSpot.Query/FSpot.Query/OrderByTime.cs
diff --git a/src/Query/RatingRange.cs b/src/Core/FSpot.Query/FSpot.Query/RatingRange.cs
similarity index 100%
rename from src/Query/RatingRange.cs
rename to src/Core/FSpot.Query/FSpot.Query/RatingRange.cs
diff --git a/src/Core/FSpot.Query/FSpot.Query/RollSet.cs b/src/Core/FSpot.Query/FSpot.Query/RollSet.cs
new file mode 100644
index 0000000..348c741
--- /dev/null
+++ b/src/Core/FSpot.Query/FSpot.Query/RollSet.cs
@@ -0,0 +1,41 @@
+/*
+ * RollSet.cs
+ *
+ * Author(s):
+ * 	Bengt Thuree
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is frees software. See COPYING for details.
+ */
+
+using FSpot.Core;
+
+namespace FSpot.Query
+{
+	public class RollSet : IQueryCondition
+	{
+		private Roll [] rolls;
+
+		public RollSet (Roll [] rolls)
+		{
+			this.rolls = rolls;
+		}
+
+		public RollSet (Roll roll) : this (new Roll[] {roll})
+		{
+		}
+
+		public string SqlClause ()
+		{
+			//Building something like " photos.roll_id IN (3, 4, 7) " 
+			System.Text.StringBuilder sb = new System.Text.StringBuilder (" photos.roll_id IN (");
+			for (int i = 0; i < rolls.Length; i++) {
+				sb.Append (rolls [i].Id);
+				if (i != rolls.Length - 1)
+					sb.Append (", ");
+			}
+			sb.Append (") ");
+			return sb.ToString ();	
+		}
+	}
+}
diff --git a/src/Core/FSpot.Query/FSpot.Query/Tests/LogicalTermTests.cs b/src/Core/FSpot.Query/FSpot.Query/Tests/LogicalTermTests.cs
new file mode 100644
index 0000000..9c909d7
--- /dev/null
+++ b/src/Core/FSpot.Query/FSpot.Query/Tests/LogicalTermTests.cs
@@ -0,0 +1,40 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+using FSpot.Core;
+
+namespace FSpot.Query.Tests
+{
+	[TestFixture]
+	public class LogicalTermTests
+	{
+		[Test]
+		public void SomeTests ()
+		{
+			Tag t1 = new Tag (null, 1, "tag1");
+			Tag t2 = new Tag (null, 2, "tag2");
+			Tag t3 = new Tag (null, 3, "tag3");
+			Tag t4 = new Tag (null, 4, "tag4");
+			Tag t5 = new Tag (null, 5, "tag5");
+
+			TagTerm tt1 = new TagTerm (t1);
+			TagTerm tt2 = new TagTerm (t2);
+			TagTerm tt3 = new TagTerm (t3);
+			TagTerm tt4 = new TagTerm (t4);
+			TagTerm tt5 = new TagTerm (t5);
+
+			object [] tests = {
+				" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id = 1)) ", tt1,
+				" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN (2, 3))) ", new OrTerm (tt2, tt3),
+				" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN (3, 4, 5))) ", new OrTerm (tt3, tt4, tt5),
+				
+			};
+	
+			for (int i=0; i < tests.Length; i+=2) {
+				//System.Console.WriteLine ((tests[i+1] as LogicalTerm).SqlClause ());
+				//System.Console.WriteLine (tests[i]);
+				Assert.AreEqual (tests[i] as string, (tests[i+1] as LogicalTerm).SqlClause ());
+			}
+		}
+	}
+}
+#endif
diff --git a/src/Query/UntaggedCondition.cs b/src/Core/FSpot.Query/FSpot.Query/UntaggedCondition.cs
similarity index 100%
rename from src/Query/UntaggedCondition.cs
rename to src/Core/FSpot.Query/FSpot.Query/UntaggedCondition.cs
diff --git a/src/Core/FSpot.Query/Makefile.am b/src/Core/FSpot.Query/Makefile.am
new file mode 100644
index 0000000..3434c87
--- /dev/null
+++ b/src/Core/FSpot.Query/Makefile.am
@@ -0,0 +1,20 @@
+ASSEMBLY = FSpot.Query
+TARGET = library
+LINK = $(REF_FSPOT_QUERY)
+
+SOURCES =  \
+	FSpot.Query/ConditionWrapper.cs \
+	FSpot.Query/DateRange.cs \
+	FSpot.Query/FolderSet.cs \
+	FSpot.Query/IOrderCondition.cs \
+	FSpot.Query/IQueryCondition.cs \
+	FSpot.Query/LogicalTerm.cs \
+	FSpot.Query/OrderByTime.cs \
+	FSpot.Query/RatingRange.cs \
+	FSpot.Query/RollSet.cs \
+	FSpot.Query/Tests/LogicalTermTests.cs \
+	FSpot.Query/UntaggedCondition.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Core/FSpot.Query/Makefile.in b/src/Core/FSpot.Query/Makefile.in
new file mode 100644
index 0000000..bbd8fc1
--- /dev/null
+++ b/src/Core/FSpot.Query/Makefile.in
@@ -0,0 +1,816 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Core/FSpot.Query
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Query
+TARGET = library
+LINK = $(REF_FSPOT_QUERY) $(am__append_1)
+SOURCES = \
+	FSpot.Query/ConditionWrapper.cs \
+	FSpot.Query/DateRange.cs \
+	FSpot.Query/FolderSet.cs \
+	FSpot.Query/IOrderCondition.cs \
+	FSpot.Query/IQueryCondition.cs \
+	FSpot.Query/LogicalTerm.cs \
+	FSpot.Query/OrderByTime.cs \
+	FSpot.Query/RatingRange.cs \
+	FSpot.Query/RollSet.cs \
+	FSpot.Query/Tests/LogicalTermTests.cs \
+	FSpot.Query/UntaggedCondition.cs
+
+RESOURCES = 
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Core/FSpot.Query/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Core/FSpot.Query/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Utils/FSpot.Utils.dll.config b/src/Core/FSpot.Utils/FSpot.Utils.dll.config
similarity index 100%
rename from src/Utils/FSpot.Utils.dll.config
rename to src/Core/FSpot.Utils/FSpot.Utils.dll.config
diff --git a/src/Utils/Cache.cs b/src/Core/FSpot.Utils/FSpot.Utils/Cache.cs
similarity index 100%
rename from src/Utils/Cache.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/Cache.cs
diff --git a/src/Utils/CairoUtils.cs b/src/Core/FSpot.Utils/FSpot.Utils/CairoUtils.cs
similarity index 100%
rename from src/Utils/CairoUtils.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/CairoUtils.cs
diff --git a/src/Utils/ConsoleCrayon.cs b/src/Core/FSpot.Utils/FSpot.Utils/ConsoleCrayon.cs
similarity index 100%
rename from src/Utils/ConsoleCrayon.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/ConsoleCrayon.cs
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/FileExtensions.cs b/src/Core/FSpot.Utils/FSpot.Utils/FileExtensions.cs
new file mode 100644
index 0000000..9b32cec
--- /dev/null
+++ b/src/Core/FSpot.Utils/FSpot.Utils/FileExtensions.cs
@@ -0,0 +1,66 @@
+/*
+ * FSpot.Utils.FileExtensions.cs
+ *
+ * Author(s)
+ * 	Paul Wellner Bou <paul at purecodes.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.IO;
+using Mono.Unix;
+using GLib;
+using Hyena;
+
+namespace FSpot.Utils
+{
+	public static class FileExtensions
+	{
+		public static bool CopyRecursive (this GLib.File source, GLib.File target, GLib.FileCopyFlags flags, GLib.Cancellable cancellable, GLib.FileProgressCallback callback)
+		{
+			bool result = true;
+			
+			GLib.FileType ft = source.QueryFileType (GLib.FileQueryInfoFlags.None, cancellable);
+			
+			if (ft != GLib.FileType.Directory) {
+				Hyena.Log.DebugFormat ("Copying \"{0}\" to \"{1}\"", source.Path, target.Path);
+				return source.Copy (target, flags, cancellable, callback);
+			}
+			
+			if (!target.Exists) {
+				Hyena.Log.DebugFormat ("Creating directory: \"{0}\"", target.Path);
+				result = result && target.MakeDirectoryWithParents (cancellable);
+			}
+			
+			GLib.FileEnumerator fe = source.EnumerateChildren ("standard::name", GLib.FileQueryInfoFlags.None, cancellable);
+			GLib.FileInfo fi = fe.NextFile ();
+			while (fi != null) {
+				GLib.File source_file = GLib.FileFactory.NewForPath (Path.Combine (source.Path, fi.Name));
+				GLib.File target_file = GLib.FileFactory.NewForPath (Path.Combine (target.Path, fi.Name));
+				result = result && source_file.CopyRecursive(target_file, flags, cancellable, callback);
+				fi = fe.NextFile ();
+			}
+			fe.Close (cancellable);
+			return result;
+		}
+
+		public static void DeleteRecursive (this GLib.File file)
+		{
+			// FIXME: no cancellation support
+
+			var type = file.QueryFileType (FileQueryInfoFlags.None, null);
+			if (type != FileType.Directory) {
+				file.Delete (null);
+				return;
+			}
+
+			var children = file.EnumerateChildren ("standard::name", GLib.FileQueryInfoFlags.None, null);
+			foreach (GLib.FileInfo child in children) {
+				var child_file = FileFactory.NewForPath (Path.Combine (file.Path, child.Name));
+				child_file.DeleteRecursive ();
+			}
+			file.Delete (null);
+		}
+	}
+}
diff --git a/src/Utils/GIOTagLibFileAbstraction.cs b/src/Core/FSpot.Utils/FSpot.Utils/GIOTagLibFileAbstraction.cs
similarity index 100%
rename from src/Utils/GIOTagLibFileAbstraction.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/GIOTagLibFileAbstraction.cs
diff --git a/src/Utils/GdkUtils.cs b/src/Core/FSpot.Utils/FSpot.Utils/GdkUtils.cs
similarity index 100%
rename from src/Utils/GdkUtils.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/GdkUtils.cs
diff --git a/src/Utils/GtkUtil.cs b/src/Core/FSpot.Utils/FSpot.Utils/GtkUtil.cs
similarity index 100%
rename from src/Utils/GtkUtil.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/GtkUtil.cs
diff --git a/src/Utils/HashUtils.cs b/src/Core/FSpot.Utils/FSpot.Utils/HashUtils.cs
similarity index 100%
rename from src/Utils/HashUtils.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/HashUtils.cs
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/Metadata.cs b/src/Core/FSpot.Utils/FSpot.Utils/Metadata.cs
new file mode 100644
index 0000000..8db7ff6
--- /dev/null
+++ b/src/Core/FSpot.Utils/FSpot.Utils/Metadata.cs
@@ -0,0 +1,51 @@
+using Hyena;
+using TagLib;
+using System;
+using GLib;
+
+namespace FSpot.Utils
+{
+    public static class Metadata
+    {
+        public static TagLib.Image.File Parse (SafeUri uri)
+        {
+            // Detect mime-type
+            var gfile = FileFactory.NewForUri (uri);
+            var info = gfile.QueryInfo ("standard::content-type", FileQueryInfoFlags.None, null);
+            var mime = info.ContentType;
+
+            if (mime.StartsWith ("application/x-extension-")) {
+                // Works around broken metadata detection - https://bugzilla.gnome.org/show_bug.cgi?id=624781
+                mime = String.Format ("taglib/{0}", mime.Substring (24));
+            }
+
+            // Parse file
+            var res = new GIOTagLibFileAbstraction () { Uri = uri };
+            var sidecar_uri = uri.ReplaceExtension (".xmp");
+            var sidecar_res = new GIOTagLibFileAbstraction () { Uri = sidecar_uri };
+
+            TagLib.Image.File file = null;
+            try {
+                file = TagLib.File.Create (res, mime, ReadStyle.Average) as TagLib.Image.File;
+            } catch (Exception) {
+                Hyena.Log.DebugFormat ("Loading of metadata failed for file: {0}, trying extension fallback", uri);
+                
+                try {
+                    file = TagLib.File.Create (res, ReadStyle.Average) as TagLib.Image.File;
+                } catch (Exception e) {
+                    Hyena.Log.DebugFormat ("Loading of metadata failed for file: {0}", uri);
+                    Hyena.Log.DebugException (e);
+                    return null;
+                }
+            }
+
+            // Load XMP sidecar
+            var sidecar_file = GLib.FileFactory.NewForUri (sidecar_uri);
+            if (sidecar_file.Exists) {
+                file.ParseXmpSidecar (sidecar_res);
+            }
+
+            return file;
+        }
+    }
+}
diff --git a/src/Utils/PixbufUtils.cs b/src/Core/FSpot.Utils/FSpot.Utils/PixbufUtils.cs
similarity index 100%
rename from src/Utils/PixbufUtils.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/PixbufUtils.cs
diff --git a/src/Utils/RecursiveFileEnumerator.cs b/src/Core/FSpot.Utils/FSpot.Utils/RecursiveFileEnumerator.cs
similarity index 100%
rename from src/Utils/RecursiveFileEnumerator.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/RecursiveFileEnumerator.cs
diff --git a/src/Utils/SafeUriExtensions.cs b/src/Core/FSpot.Utils/FSpot.Utils/SafeUriExtensions.cs
similarity index 100%
rename from src/Utils/SafeUriExtensions.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/SafeUriExtensions.cs
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/SidecarXmpExtensions.cs b/src/Core/FSpot.Utils/FSpot.Utils/SidecarXmpExtensions.cs
new file mode 100644
index 0000000..61a5e3e
--- /dev/null
+++ b/src/Core/FSpot.Utils/FSpot.Utils/SidecarXmpExtensions.cs
@@ -0,0 +1,72 @@
+using System;
+using System.IO;
+using Hyena;
+using TagLib.Image;
+using TagLib.Xmp;
+
+namespace FSpot.Utils
+{
+    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;
+            }
+
+            XmpTag tag = null;
+            try {
+                tag = new XmpTag (xmp);
+            } 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;
+        }
+
+        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 ();
+
+            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;
+        }
+    }
+}
diff --git a/src/Utils/Tests/GIOTagLibFileAbstractionTests.cs b/src/Core/FSpot.Utils/FSpot.Utils/Tests/GIOTagLibFileAbstractionTests.cs
similarity index 100%
rename from src/Utils/Tests/GIOTagLibFileAbstractionTests.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/Tests/GIOTagLibFileAbstractionTests.cs
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/Tests/ImageTestHelper.cs b/src/Core/FSpot.Utils/FSpot.Utils/Tests/ImageTestHelper.cs
new file mode 100644
index 0000000..4bcbc1b
--- /dev/null
+++ b/src/Core/FSpot.Utils/FSpot.Utils/Tests/ImageTestHelper.cs
@@ -0,0 +1,41 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+using System;
+using Hyena;
+using TagLib;
+
+namespace FSpot.Utils.Tests
+{
+	public static class ImageTestHelper
+	{
+        public static SafeUri CreateTempFile (string name)
+        {
+            var uri = new SafeUri (Environment.CurrentDirectory + "/../tests/data/" + name);
+            var file = GLib.FileFactory.NewForUri (uri);
+
+            var tmp = System.IO.Path.GetTempFileName ()+".jpg"; // hack!
+            var uri2 = new SafeUri (tmp);
+            var file2 = GLib.FileFactory.NewForUri (uri2);
+            file.Copy (file2, GLib.FileCopyFlags.Overwrite, null, null);
+            return uri2;
+        }
+
+        public static SafeUri CopySidecarToTest (SafeUri uri, string filename)
+        {
+            var target = uri.ReplaceExtension (".xmp");
+
+            var orig_uri = new SafeUri (Environment.CurrentDirectory + "/../tests/data/" + filename);
+            var file = GLib.FileFactory.NewForUri (orig_uri);
+            var file2 = GLib.FileFactory.NewForUri (target);
+            file.Copy (file2, GLib.FileCopyFlags.Overwrite, null, null);
+            return target;
+        }
+
+        public static void DeleteTempFile (SafeUri uri)
+        {
+            var file = GLib.FileFactory.NewForUri (uri);
+            file.Delete ();
+        }
+	}
+}
+#endif
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/Tests/MetadataTest.cs b/src/Core/FSpot.Utils/FSpot.Utils/Tests/MetadataTest.cs
new file mode 100644
index 0000000..f5ee8ae
--- /dev/null
+++ b/src/Core/FSpot.Utils/FSpot.Utils/Tests/MetadataTest.cs
@@ -0,0 +1,111 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+using System;
+using Hyena;
+using TagLib;
+using TagLib.IFD;
+using TagLib.IFD.Entries;
+using TagLib.IFD.Tags;
+using TagLib.Xmp;
+
+namespace FSpot.Utils.Tests
+{
+    [TestFixture]
+    public class MetadataTest
+    {
+        [SetUp]
+        public void Initialize () {
+            GLib.GType.Init ();
+        }
+
+        [Test]
+        public void ValidateWithoutSidecar ()
+        {
+            // Tests the file in its original state
+            var uri = ImageTestHelper.CreateTempFile ("taglib-sample.jpg");
+
+            var file = Metadata.Parse (uri);
+            Assert.IsNotNull (file);
+
+            XmpTag xmp = file.GetTag (TagTypes.XMP) as XmpTag;
+            // Xmp.MicrosoftPhoto_1_.DateAcquired (XmpText/20) "2009-08-04T20:42:36Z"
+            {
+                var node = xmp.NodeTree;
+                node = node.GetChild (XmpTag.MS_PHOTO_NS, "DateAcquired");
+                Assert.IsNotNull (node);
+                Assert.AreEqual ("2009-08-04T20:42:36Z", node.Value);
+                Assert.AreEqual (XmpNodeType.Simple, node.Type);
+                Assert.AreEqual (0, node.Children.Count);
+            }
+
+            Assert.AreEqual (new string [] { "Kirche Sulzbach" }, file.ImageTag.Keywords);
+
+            ImageTestHelper.DeleteTempFile (uri);
+        }
+
+        [Test]
+        public void ValidateWithSidecar ()
+        {
+            // Tests the file with a sidecar
+            var uri = ImageTestHelper.CreateTempFile ("taglib-sample.jpg");
+            var sidecar_uri = ImageTestHelper.CopySidecarToTest (uri, "taglib-sample.xmp");
+
+            var file = Metadata.Parse (uri);
+            Assert.IsNotNull (file);
+
+            XmpTag xmp = file.GetTag (TagTypes.XMP) as XmpTag;
+            // Xmp.MicrosoftPhoto_1_.DateAcquired (XmpText/20) "2009-08-04T20:42:36Z"
+            {
+                var node = xmp.NodeTree;
+                node = node.GetChild (XmpTag.MS_PHOTO_NS, "DateAcquired");
+                Assert.IsNull (node);
+            }
+
+            Assert.AreEqual (new string [] { "F-Spot", "metadata", "test" }, file.ImageTag.Keywords);
+
+            ImageTestHelper.DeleteTempFile (uri);
+            ImageTestHelper.DeleteTempFile (sidecar_uri);
+        }
+
+        [Test]
+        public void ValidateWithBrokenSidecar ()
+        {
+            // Tests the file with a sidecar
+            var uri = ImageTestHelper.CreateTempFile ("taglib-sample.jpg");
+            var sidecar_uri = ImageTestHelper.CopySidecarToTest (uri, "taglib-sample-broken.xmp");
+
+            var file = Metadata.Parse (uri);
+            Assert.IsNotNull (file);
+
+            XmpTag xmp = file.GetTag (TagTypes.XMP) as XmpTag;
+            // Xmp.MicrosoftPhoto_1_.DateAcquired (XmpText/20) "2009-08-04T20:42:36Z"
+            {
+                var node = xmp.NodeTree;
+                node = node.GetChild (XmpTag.MS_PHOTO_NS, "DateAcquired");
+                Assert.AreEqual ("2009-08-04T20:42:36Z", node.Value);
+                Assert.AreEqual (XmpNodeType.Simple, node.Type);
+                Assert.AreEqual (0, node.Children.Count);
+            }
+
+            Assert.AreEqual (new string [] { "Kirche Sulzbach" }, file.ImageTag.Keywords);
+
+            ImageTestHelper.DeleteTempFile (uri);
+            ImageTestHelper.DeleteTempFile (sidecar_uri);
+        }
+
+        [Test]
+        public void ValidateWithBrokenMetadata ()
+        {
+            // Tests the file with a sidecar
+            var uri = ImageTestHelper.CreateTempFile ("taglib-sample-broken.jpg");
+            var sidecar_uri = ImageTestHelper.CopySidecarToTest (uri, "taglib-sample-broken.xmp");
+
+            var file = Metadata.Parse (uri);
+            Assert.IsNull (file);
+
+            ImageTestHelper.DeleteTempFile (uri);
+            ImageTestHelper.DeleteTempFile (sidecar_uri);
+        }
+    }
+}
+#endif
diff --git a/src/Utils/Tests/SafeUriTests.cs b/src/Core/FSpot.Utils/FSpot.Utils/Tests/SafeUriTests.cs
similarity index 100%
rename from src/Utils/Tests/SafeUriTests.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/Tests/SafeUriTests.cs
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/Tests/SidecarXmpExtensionsTests.cs b/src/Core/FSpot.Utils/FSpot.Utils/Tests/SidecarXmpExtensionsTests.cs
new file mode 100644
index 0000000..ba43dd5
--- /dev/null
+++ b/src/Core/FSpot.Utils/FSpot.Utils/Tests/SidecarXmpExtensionsTests.cs
@@ -0,0 +1,166 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+using System;
+using Hyena;
+using TagLib;
+using TagLib.IFD;
+using TagLib.IFD.Entries;
+using TagLib.IFD.Tags;
+using TagLib.Xmp;
+
+namespace FSpot.Utils.Tests
+{
+    [TestFixture]
+    public class SidecarXmpExtensionsTests
+    {
+        [SetUp]
+        public void Initialize () {
+            GLib.GType.Init ();
+        }
+
+        [Test]
+        public void ValidateWithoutSidecar ()
+        {
+            // Tests the file in its original state
+            var uri = ImageTestHelper.CreateTempFile ("taglib-sample.jpg");
+            var res = new GIOTagLibFileAbstraction () { Uri = uri };
+
+            var file = File.Create (res) as TagLib.Image.File;
+            Assert.IsNotNull (file);
+
+            XmpTag xmp = file.GetTag (TagTypes.XMP) as XmpTag;
+            // Xmp.MicrosoftPhoto_1_.DateAcquired (XmpText/20) "2009-08-04T20:42:36Z"
+            {
+                var node = xmp.NodeTree;
+                node = node.GetChild (XmpTag.MS_PHOTO_NS, "DateAcquired");
+                Assert.IsNotNull (node);
+                Assert.AreEqual ("2009-08-04T20:42:36Z", node.Value);
+                Assert.AreEqual (XmpNodeType.Simple, node.Type);
+                Assert.AreEqual (0, node.Children.Count);
+            }
+
+            Assert.AreEqual (new string [] { "Kirche Sulzbach" }, file.ImageTag.Keywords);
+
+            ImageTestHelper.DeleteTempFile (uri);
+        }
+
+        [Test]
+        public void ValidateWithSidecar ()
+        {
+            // Tests the file with a sidecar
+            var uri = ImageTestHelper.CreateTempFile ("taglib-sample.jpg");
+            var res = new GIOTagLibFileAbstraction () { Uri = uri };
+            var sidecar_uri = ImageTestHelper.CopySidecarToTest (uri, "taglib-sample.xmp");
+            var sidecar_res = new GIOTagLibFileAbstraction () { Uri = sidecar_uri };
+
+            var file = File.Create (res) as TagLib.Image.File;
+            Assert.IsNotNull (file);
+
+            // Override by sidecar file
+            bool success = file.ParseXmpSidecar (sidecar_res);
+            Assert.IsTrue (success);
+
+            XmpTag xmp = file.GetTag (TagTypes.XMP) as XmpTag;
+            // Xmp.MicrosoftPhoto_1_.DateAcquired (XmpText/20) "2009-08-04T20:42:36Z"
+            {
+                var node = xmp.NodeTree;
+                node = node.GetChild (XmpTag.MS_PHOTO_NS, "DateAcquired");
+                Assert.IsNull (node);
+            }
+
+            Assert.AreEqual (new string [] { "F-Spot", "metadata", "test" }, file.ImageTag.Keywords);
+
+            ImageTestHelper.DeleteTempFile (uri);
+            ImageTestHelper.DeleteTempFile (sidecar_uri);
+        }
+
+        [Test]
+        public void ValidateWithBrokenSidecar ()
+        {
+            // Tests the file with a sidecar
+            var uri = ImageTestHelper.CreateTempFile ("taglib-sample.jpg");
+            var res = new GIOTagLibFileAbstraction () { Uri = uri };
+            var sidecar_uri = ImageTestHelper.CopySidecarToTest (uri, "taglib-sample-broken.xmp");
+            var sidecar_res = new GIOTagLibFileAbstraction () { Uri = sidecar_uri };
+
+            var file = File.Create (res) as TagLib.Image.File;
+            Assert.IsNotNull (file);
+
+            // Override by sidecar file should fail
+            bool success = file.ParseXmpSidecar (sidecar_res);
+            Assert.IsFalse (success);
+
+            XmpTag xmp = file.GetTag (TagTypes.XMP) as XmpTag;
+            // Xmp.MicrosoftPhoto_1_.DateAcquired (XmpText/20) "2009-08-04T20:42:36Z"
+            {
+                var node = xmp.NodeTree;
+                node = node.GetChild (XmpTag.MS_PHOTO_NS, "DateAcquired");
+                Assert.AreEqual ("2009-08-04T20:42:36Z", node.Value);
+                Assert.AreEqual (XmpNodeType.Simple, node.Type);
+                Assert.AreEqual (0, node.Children.Count);
+            }
+
+            Assert.AreEqual (new string [] { "Kirche Sulzbach" }, file.ImageTag.Keywords);
+
+            ImageTestHelper.DeleteTempFile (uri);
+            ImageTestHelper.DeleteTempFile (sidecar_uri);
+        }
+
+        [Test]
+        public void TestSidecarWrite ()
+        {
+            var uri = ImageTestHelper.CreateTempFile ("taglib-sample.jpg");
+            var sidecar_uri = uri.ReplaceExtension (".xmp");
+            var res = new GIOTagLibFileAbstraction () { Uri = uri };
+            var sidecar_res = new GIOTagLibFileAbstraction () { Uri = sidecar_uri };
+            Assert.IsTrue (sidecar_uri.ToString ().EndsWith (".xmp"));
+
+            var sidecar_file = GLib.FileFactory.NewForUri (sidecar_uri);
+            Assert.IsFalse (sidecar_file.Exists);
+
+            var file = File.Create (res) as TagLib.Image.File;
+            Assert.IsNotNull (file);
+
+            file.ImageTag.Keywords = new string [] { "Kirche Aarschot" };
+
+            // Validate writing of the sidecar
+            bool success = file.SaveXmpSidecar (sidecar_res);
+            Assert.IsTrue (success);
+            Assert.IsTrue (sidecar_file.Exists);
+
+            var target = "<x:xmpmeta xmlns:x=\"adobe:ns:meta/\"><rdf:RDF xm"
+                + "lns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">"
+                + "<rdf:Description MicrosoftPhoto:DateAcquired=\"2009-08-0"
+                + "4T20:42:36Z\" xmp:creatortool=\"Microsoft Windows Photo "
+                + "Gallery 6.0.6001.18000\" tiff:software=\"Microsoft Windo"
+                + "ws Photo Gallery 6.0.6001.18000\" tiff:Orientation=\"1\""
+                + " MicrosoftPhoto:Rating=\"1\" xmp:Rating=\"1\" xmlns:tiff"
+                + "=\"http://ns.adobe.com/tiff/1.0/\" xmlns:xmp=\"http://ns"
+                + ".adobe.com/xap/1.0/\" xmlns:MicrosoftPhoto=\"http://ns.m"
+                + "icrosoft.com/photo/1.0/\"><MicrosoftPhoto:LastKeywordXMP"
+                + "><rdf:Bag><rdf:li>Kirche Sulzbach</rdf:li></rdf:Bag></Mi"
+                + "crosoftPhoto:LastKeywordXMP><dc:subject xmlns:dc=\"http:"
+                + "//purl.org/dc/elements/1.1/\"><rdf:Bag><rdf:li>Kirche Aa"
+                + "rschot</rdf:li></rdf:Bag></dc:subject></rdf:Description>"
+                + "</rdf:RDF></x:xmpmeta>";
+
+            string written;
+            var read_res = new GIOTagLibFileAbstraction () { Uri = sidecar_uri };
+            using (var stream = read_res.ReadStream) {
+                using (var reader = new System.IO.StreamReader (stream)) {
+                    written = reader.ReadToEnd ();
+                }
+            }
+            Assert.AreEqual (target, written);
+
+            // Check that the file is unchanged
+            file = File.Create (res) as TagLib.Image.File;
+            var keywords = file.ImageTag.Keywords;
+            Assert.AreEqual (new string [] { "Kirche Sulzbach" }, keywords);
+
+            ImageTestHelper.DeleteTempFile (uri);
+            ImageTestHelper.DeleteTempFile (sidecar_uri);
+        }
+    }
+}
+#endif
diff --git a/src/Utils/Tests/XdgThumbnailSpecTests.cs b/src/Core/FSpot.Utils/FSpot.Utils/Tests/XdgThumbnailSpecTests.cs
similarity index 100%
rename from src/Utils/Tests/XdgThumbnailSpecTests.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/Tests/XdgThumbnailSpecTests.cs
diff --git a/src/Utils/UriExtensions.cs b/src/Core/FSpot.Utils/FSpot.Utils/UriExtensions.cs
similarity index 100%
rename from src/Utils/UriExtensions.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/UriExtensions.cs
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/UriList.cs b/src/Core/FSpot.Utils/FSpot.Utils/UriList.cs
new file mode 100644
index 0000000..1befb6c
--- /dev/null
+++ b/src/Core/FSpot.Utils/FSpot.Utils/UriList.cs
@@ -0,0 +1,66 @@
+using System.Collections.Generic;
+using System.Text;
+using System;
+using Hyena;
+
+namespace FSpot.Utils
+{
+    public class UriList : List<SafeUri>
+    {
+        public UriList () : base()
+        {
+        }
+
+        public UriList (string data)
+        {
+            LoadFromStrings (data.Split ('\n'));
+        }
+
+        public UriList (IEnumerable<SafeUri> uris)
+        {
+            foreach (SafeUri uri in uris) {
+                Add (uri);
+            }
+        }
+
+        private void LoadFromStrings (IEnumerable<string> items)
+        {
+            foreach (string i in items) {
+                if (!i.StartsWith ("#")) {
+                    SafeUri uri;
+                    String s = i;
+                    
+                    if (i.EndsWith ("\r")) {
+                        s = i.Substring (0, i.Length - 1);
+                    }
+                    
+                    try {
+                        uri = new SafeUri (s);
+                    } catch {
+                        continue;
+                    }
+                    Add (uri);
+                }
+            }
+        }
+
+        public void AddUnknown (string unknown)
+        {
+            Add (new SafeUri (unknown));
+        }
+
+        public override string ToString ()
+        {
+            StringBuilder list = new StringBuilder ();
+            
+            foreach (SafeUri uri in this) {
+                if (uri == null)
+                    break;
+                
+                list.Append (uri.ToString () + Environment.NewLine);
+            }
+            
+            return list.ToString ();
+        }
+    }
+}
diff --git a/src/Utils/UriUtils.cs b/src/Core/FSpot.Utils/FSpot.Utils/UriUtils.cs
similarity index 100%
rename from src/Utils/UriUtils.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/UriUtils.cs
diff --git a/src/Core/FSpot.Utils/FSpot.Utils/Vector.cs b/src/Core/FSpot.Utils/FSpot.Utils/Vector.cs
new file mode 100644
index 0000000..511f39b
--- /dev/null
+++ b/src/Core/FSpot.Utils/FSpot.Utils/Vector.cs
@@ -0,0 +1,62 @@
+using System;
+
+namespace FSpot.Utils {
+	public class Vector {
+		double X;
+		double Y;
+
+		public Vector (Gdk.Point p)
+		{
+			X = p.X;
+			Y = p.Y;
+		}
+
+		public Vector (double x, double y)
+		{
+			X = x;
+			Y = y;
+		}
+
+		public void Normalize ()
+		{
+			double len = Length;
+			X = X / len;
+			Y = Y / len;
+		}
+
+		public double AngleBetween (Vector v)
+		{
+			return AngleBetween (this, v);
+		}
+
+		public static double AngleBetween (Vector v1, Vector v2)
+		{
+			double val = Dot (v1, v2) / (v1.Length * v2.Length);
+			val = Math.Acos (val);
+			if (!Right (v1, v2))
+				return -val;
+			return val;
+		}
+
+		static bool Right (Vector v1, Vector v2)
+		{
+			return (v1.X * v2.Y - v1.Y * v2.X) > 0;
+		}
+
+		public static double Dot (Vector v1, Vector v2)
+		{
+			return v1.X * v2.X + v1.Y * v2.Y;
+		}
+
+		double Length {
+			get {
+				return Math.Sqrt (X * X + Y * Y);
+			}
+		}
+
+		public override string ToString ()
+		{
+			return String.Format ("v({0},{1}).{2}", X, Y, Length);
+		}
+	}
+}
diff --git a/src/Utils/XdgThumbnailSpec.cs b/src/Core/FSpot.Utils/FSpot.Utils/XdgThumbnailSpec.cs
similarity index 100%
rename from src/Utils/XdgThumbnailSpec.cs
rename to src/Core/FSpot.Utils/FSpot.Utils/XdgThumbnailSpec.cs
diff --git a/src/Core/FSpot.Utils/Makefile.am b/src/Core/FSpot.Utils/Makefile.am
new file mode 100644
index 0000000..9f99a73
--- /dev/null
+++ b/src/Core/FSpot.Utils/Makefile.am
@@ -0,0 +1,36 @@
+ASSEMBLY = FSpot.Utils
+TARGET = library
+LINK = $(REF_FSPOT_UTILS)
+
+SOURCES =  \
+	FSpot.Utils/Cache.cs \
+	FSpot.Utils/CairoUtils.cs \
+	FSpot.Utils/ConsoleCrayon.cs \
+	FSpot.Utils/FileExtensions.cs \
+	FSpot.Utils/GdkUtils.cs \
+	FSpot.Utils/GIOTagLibFileAbstraction.cs \
+	FSpot.Utils/GtkUtil.cs \
+	FSpot.Utils/HashUtils.cs \
+	FSpot.Utils/Metadata.cs \
+	FSpot.Utils/PixbufUtils.cs \
+	FSpot.Utils/RecursiveFileEnumerator.cs \
+	FSpot.Utils/SafeUriExtensions.cs \
+	FSpot.Utils/SidecarXmpExtensions.cs \
+	FSpot.Utils/Tests/GIOTagLibFileAbstractionTests.cs \
+	FSpot.Utils/Tests/ImageTestHelper.cs \
+	FSpot.Utils/Tests/MetadataTest.cs \
+	FSpot.Utils/Tests/SafeUriTests.cs \
+	FSpot.Utils/Tests/SidecarXmpExtensionsTests.cs \
+	FSpot.Utils/Tests/XdgThumbnailSpecTests.cs \
+	FSpot.Utils/UriExtensions.cs \
+	FSpot.Utils/UriList.cs \
+	FSpot.Utils/UriUtils.cs \
+	FSpot.Utils/Vector.cs \
+	FSpot.Utils/XdgThumbnailSpec.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
+
+EXTRA_DIST += FSpot.Utils.dll.config
+module_SCRIPTS += FSpot.Utils.dll.config
diff --git a/src/Core/FSpot.Utils/Makefile.in b/src/Core/FSpot.Utils/Makefile.in
new file mode 100644
index 0000000..538e7f7
--- /dev/null
+++ b/src/Core/FSpot.Utils/Makefile.in
@@ -0,0 +1,830 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Core/FSpot.Utils
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Utils
+TARGET = library
+LINK = $(REF_FSPOT_UTILS) $(am__append_1)
+SOURCES = \
+	FSpot.Utils/Cache.cs \
+	FSpot.Utils/CairoUtils.cs \
+	FSpot.Utils/ConsoleCrayon.cs \
+	FSpot.Utils/FileExtensions.cs \
+	FSpot.Utils/GdkUtils.cs \
+	FSpot.Utils/GIOTagLibFileAbstraction.cs \
+	FSpot.Utils/GtkUtil.cs \
+	FSpot.Utils/HashUtils.cs \
+	FSpot.Utils/Metadata.cs \
+	FSpot.Utils/PixbufUtils.cs \
+	FSpot.Utils/RecursiveFileEnumerator.cs \
+	FSpot.Utils/SafeUriExtensions.cs \
+	FSpot.Utils/SidecarXmpExtensions.cs \
+	FSpot.Utils/Tests/GIOTagLibFileAbstractionTests.cs \
+	FSpot.Utils/Tests/ImageTestHelper.cs \
+	FSpot.Utils/Tests/MetadataTest.cs \
+	FSpot.Utils/Tests/SafeUriTests.cs \
+	FSpot.Utils/Tests/SidecarXmpExtensionsTests.cs \
+	FSpot.Utils/Tests/XdgThumbnailSpecTests.cs \
+	FSpot.Utils/UriExtensions.cs \
+	FSpot.Utils/UriList.cs \
+	FSpot.Utils/UriUtils.cs \
+	FSpot.Utils/Vector.cs \
+	FSpot.Utils/XdgThumbnailSpec.cs
+
+RESOURCES = 
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) FSpot.Utils.dll.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+	$(THEME_ICONS_SOURCE) FSpot.Utils.dll.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Core/FSpot.Utils/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Core/FSpot.Utils/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Core/FileBrowsableItem.cs b/src/Core/FileBrowsableItem.cs
deleted file mode 100644
index c016745..0000000
--- a/src/Core/FileBrowsableItem.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * FileBrowsableItem.cs
- *
- * Author(s):
- *	Larry Ewing  (lewing at novell.com)
- *	Stephane Delcroix  (stephane at delcroix.org)
- *
- * This is free software. See COPYING for details
- */
-
-
-using System;
-using System.IO;
-using System.Collections.Generic;
-using System.Xml;
-
-using Hyena;
-using FSpot.Utils;
-
-using Mono.Unix.Native;
-
-namespace FSpot {
-    public class FileBrowsableItem : IBrowsableItem
-    {
-        bool metadata_parsed = false;
-
-        public FileBrowsableItem (SafeUri uri)
-        {
-            DefaultVersion = new FileBrowsableItemVersion () {
-                Uri = uri
-            };
-        }
-
-        private void EnsureMetadataParsed ()
-        {
-            if (metadata_parsed)
-                return;
-
-            using (var metadata = Metadata.Parse (DefaultVersion.Uri)) {
-                var date = metadata.ImageTag.DateTime;
-                time = date.HasValue ? date.Value : CreateDate;
-                description = metadata.ImageTag.Comment;
-            }
-
-            metadata_parsed = true;
-        }
-
-        private DateTime CreateDate {
-            get {
-                var info = GLib.FileFactory.NewForUri (DefaultVersion.Uri).QueryInfo ("time::changed", GLib.FileQueryInfoFlags.None, null);
-                return NativeConvert.ToDateTime ((long)info.GetAttributeULong ("time::changed"));
-            }
-        }
-
-        public Tag [] Tags {
-            get {
-                return null;
-            }
-        }
-
-        private DateTime time;
-        public DateTime Time {
-            get {
-                EnsureMetadataParsed ();
-                return time;
-            }
-        }
-
-        public IBrowsableItemVersion DefaultVersion { get; private set; }
-
-		public IEnumerable<IBrowsableItemVersion> Versions {
-			get { yield return DefaultVersion; }
-		}
-
-        private string description;
-        public string Description {
-            get {
-                EnsureMetadataParsed ();
-                return description;
-            }
-        }
-
-        public string Name {
-            get {
-                return DefaultVersion.Uri.GetFilename ();
-            }
-        }
-
-        public uint Rating {
-            get {
-                return 0; //FIXME ndMaxxer: correct?
-            }
-        }
-
-        private class FileBrowsableItemVersion : IBrowsableItemVersion {
-            public string Name { get { return String.Empty; } }
-            public bool IsProtected { get { return true; } }
-
-            public SafeUri BaseUri { get { return Uri.GetBaseUri (); } }
-            public string Filename { get { return Uri.GetFilename (); } }
-            public SafeUri Uri { get; set; }
-
-            private string import_md5 = String.Empty;
-            public string ImportMD5 {
-                get {
-                    if (import_md5 == String.Empty)
-                        import_md5 = HashUtils.GenerateMD5 (Uri);
-                    return import_md5;
-                }
-            }
-        }
-    }
-}
diff --git a/src/Core/Global.cs b/src/Core/Global.cs
deleted file mode 100644
index a92e014..0000000
--- a/src/Core/Global.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Global.cs
- *
- * This is free software. See COPYING for details
- *
- */
-using System;
-using Hyena;
-
-namespace FSpot {
-	public static class Global {
-		public static string HomeDirectory {
-			get { return System.IO.Path.Combine (System.Environment.GetEnvironmentVariable ("HOME"), System.String.Empty); }
-		}
-		
-		//$XDG_CONFIG_HOME/f-spot or $HOME/.config/f-spot
-		private static string xdg_config_home = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);
-		private static string base_dir = System.IO.Path.Combine (xdg_config_home, "f-spot");
-		public static string BaseDirectory {
-			get { return base_dir; }
-			set { base_dir = value; }
-		}
-
-		private static SafeUri photo_uri;
-		public static SafeUri PhotoUri {
-			get { return photo_uri; }
-			set { photo_uri = value; }
-		}
-
-		public static string HelpDirectory {
-			get { 
-				// path is relative
-				return "f-spot";
-			}	
-		}
-
-		private static Cms.Profile display_profile;
-		public static Cms.Profile DisplayProfile {
-			set { display_profile = value; }
-			get { return display_profile; }
-		}
-
-		private static Cms.Profile destination_profile;
-		public static Cms.Profile DestinationProfile {
-			set { destination_profile = value; }
-			get { return destination_profile; }
-		}
-
-		private static Gtk.IconTheme icon_theme;
-		public static Gtk.IconTheme IconTheme {
-			get {
-				if (icon_theme == null) {
-					icon_theme = Gtk.IconTheme.Default;
-					icon_theme.AppendSearchPath (System.IO.Path.Combine (Defines.APP_DATA_DIR, "icons"));
-				}
-				return icon_theme;
-			}
-		}
-
-		private static string [] default_rc_files;
-		public static string [] DefaultRcFiles {
-			get {
-				if (default_rc_files == null)
-					default_rc_files = Gtk.Rc.DefaultFiles;
-				return default_rc_files;
-			}
-			set { default_rc_files = value; }
-		}
-
-		private static Gtk.PageSetup page_setup;
-		public static Gtk.PageSetup PageSetup {
-			get { return page_setup; }
-			set { page_setup = value; }
-		}
-	}
-}
diff --git a/src/Core/IBrowsableCollection.cs b/src/Core/IBrowsableCollection.cs
deleted file mode 100644
index c81bc77..0000000
--- a/src/Core/IBrowsableCollection.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * FSpot.IBrowsableCollection.cs
- * 
- * Author(s):
- *	Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- */
-
-namespace FSpot
-{
-	public delegate void IBrowsableCollectionChangedHandler (IBrowsableCollection collection);
-	public delegate void IBrowsableCollectionItemsChangedHandler (IBrowsableCollection collection, BrowsableEventArgs args);
-
-	public interface IBrowsableCollection {
-		// FIXME this should really be ToArray ()
-		IBrowsableItem [] Items {
-			get;
-		}
-		
-		int IndexOf (IBrowsableItem item);
-
-		IBrowsableItem this [int index] {
-			get;
-		}
-
-		int Count {
-			get;
-		}
-
-		bool Contains (IBrowsableItem item);
-
-		// FIXME the Changed event needs to pass along information
-		// about the items that actually changed if possible.  For things like
-		// TrayView everything has to be redrawn when a single
-		// item has been added or removed which adds too much
-		// overhead.
-		event IBrowsableCollectionChangedHandler Changed;
-		event IBrowsableCollectionItemsChangedHandler ItemsChanged;
-
-		void MarkChanged (int index, IBrowsableItemChanges changes);
-	}
-}
-
diff --git a/src/Core/IBrowsableItem.cs b/src/Core/IBrowsableItem.cs
deleted file mode 100644
index 47b09c1..0000000
--- a/src/Core/IBrowsableItem.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * IBrowsableItem.cs
- * 
- * Author(s):
- *  Larry Ewing <lewing at novell.com>
- *  Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- */
-
-using System.Collections.Generic;
-
-using Hyena;
-
-
-namespace FSpot
-{
-
-	public interface IBrowsableItem
-	{
-
-#region Metadata
-
-		/// <summary>
-		///    The time the item was created.
-		/// </summary>
-		System.DateTime Time { get; }
-
-		/// <summary>
-		///    The tags which are dedicated to this item.
-		/// </summary>
-		Tag [] Tags { get; }
-
-		/// <summary>
-		///    The description of the item.
-		/// </summary>
-		string Description { get; }
-
-		/// <summary>
-		///    The name of the item.
-		/// </summary>
-		string Name { get; }
-
-		/// <summary>
-		///    The rating which is dedicted to this item. It should only range from 0 to 5.
-		/// </summary>
-		uint Rating { get; }
-
-#endregion
-
-
-#region Versioning
-
-		/// <summary>
-		///    The default version of this item. Every item must have at least one version and this must not be
-		///    <see langref="null"/>
-		/// </summary>
-		IBrowsableItemVersion DefaultVersion { get; }
-
-		/// <summary>
-		///    All versions of this item. Since every item must have at least the default version, this enumeration
-		///    must not be empty.
-		/// </summary>
-		IEnumerable<IBrowsableItemVersion> Versions { get; }
-
-#endregion
-
-	}
-}
diff --git a/src/Core/IBrowsableItemChanges.cs b/src/Core/IBrowsableItemChanges.cs
deleted file mode 100644
index 4bcc510..0000000
--- a/src/Core/IBrowsableItemChanges.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * FSpot.IBrowsableItemChanges.cs
- *
- * Author(s):
- * 	Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- */
-
-namespace FSpot
-{
-	public interface IBrowsableItemChanges
-	{
-		bool DataChanged {get;}
-		bool MetadataChanged {get;}
-	}
-
-	public class FullInvalidate : IBrowsableItemChanges
-	{
-		static FullInvalidate instance = new FullInvalidate ();
-		public static FullInvalidate Instance {
-			get { return instance; } 
-		}
-
-		public bool DataChanged {
-			get { return true; }
-		}
-		public bool MetadataChanged {
-			get { return true; }
-		}
-	}
-
-	public class InvalidateData : IBrowsableItemChanges
-	{
-		static InvalidateData instance = new InvalidateData ();
-		public static InvalidateData Instance {
-			get { return instance; } 
-		}
-
-		public bool DataChanged { get { return true; } }
-		public bool MetadataChanged { get { return false; } }
-	}
-}
diff --git a/src/Core/IBrowsableItemComparer.cs b/src/Core/IBrowsableItemComparer.cs
deleted file mode 100644
index d68e0f5..0000000
--- a/src/Core/IBrowsableItemComparer.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace FSpot
-{
-	public static class IBrowsableItemComparer {
-		public class CompareDateName : IComparer<IBrowsableItem>
-		{
-			public int Compare (IBrowsableItem p1, IBrowsableItem p2)
-			{
-				int result = p1.CompareDate (p2);
-
-				if (result == 0)
-					result = p1.CompareName (p2);
-
-				return result;
-			}
-		}
-
-		public class RandomSort : IComparer
-		{
-			Random random = new Random ();
-
-			public int Compare (object obj1, object obj2)
-			{
-				return random.Next (-5, 5);
-			}
-		}
-
-		public class CompareDirectory : IComparer<IBrowsableItem>
-		{
-			public int Compare (IBrowsableItem p1, IBrowsableItem p2)
-			{
-				int result = p1.CompareDefaultVersionUri (p2);
-
-				if (result == 0)
-					result = p1.CompareName (p2);
-
-				return result;
-			}
-		}
-	}
-}
diff --git a/src/Core/IBrowsableItemExtensions.cs b/src/Core/IBrowsableItemExtensions.cs
deleted file mode 100644
index 6a1624d..0000000
--- a/src/Core/IBrowsableItemExtensions.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.IO;
-
-namespace FSpot
-{
-	public static class IBrowsableItemExtensions {
-		public static int CompareDate (this IBrowsableItem photo1, IBrowsableItem photo2)
-		{
-			return DateTime.Compare (photo1.Time, photo2.Time);
-		}
-
-		public static int CompareName (this IBrowsableItem photo1, IBrowsableItem photo2)
-		{
-			return string.Compare (photo1.Name, photo2.Name);
-		}
-
-		public static int Compare (this IBrowsableItem photo1, IBrowsableItem photo2)
-		{
-			int result = photo1.CompareDate (photo2);
-
-			if (result == 0)
-				result = CompareDefaultVersionUri (photo1, photo2);
-
-			if (result == 0)
-				result = photo1.CompareName (photo2);
-
-			return result;
-		}
-
-		public static int CompareDefaultVersionUri (this IBrowsableItem photo1, IBrowsableItem photo2)
-		{
-			var photo1_uri = Path.Combine (photo1.DefaultVersion.BaseUri, photo1.DefaultVersion.Filename);
-			var photo2_uri = Path.Combine (photo2.DefaultVersion.BaseUri, photo2.DefaultVersion.Filename);
-			return string.Compare (photo1_uri, photo2_uri);
-		}
-	}
-}
diff --git a/src/Core/IBrowsableItemVersion.cs b/src/Core/IBrowsableItemVersion.cs
deleted file mode 100644
index f0e5e00..0000000
--- a/src/Core/IBrowsableItemVersion.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * IBrowsableItemVersion.cs
- * 
- * Author(s):
- *  Ruben Vermeersch <ruben at savanne.be>
- *  Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- */
-
-using Hyena;
-
-
-namespace FSpot
-{
-
-	public interface IBrowsableItemVersion : ILoadable
-	{
-
-#region Metadata
-
-		/// <summary>
-		///   The name of the version. e.g. "Convert to Black and White"
-		/// </summary>
-		/// <remarks>
-		///   This is not the name of the file.
-		/// </remarks>
-		string Name { get; }
-
-		// TODO: add Comment
-		bool IsProtected { get; }
-
-		// TODO: add more metadata
-		
-#endregion
-
-
-#region File Information
-
-		// TODO: BaseUri and Filename are just in the database scheme. Does it make sense to provide them
-		//       to the outside?
-		
-		/// <summary>
-		///   The base uri of the directory of this version. That is the whole uri without the
-		///   filename.
-		/// </summary>
-		SafeUri BaseUri { get; }
-
-		/// <summary>
-		///    The filename of this version.
-		/// </summary>
-		string Filename { get; }
-
-		// TODO: add Comment
-		// TODO: not every item is also imported. So does it make sense to have that checksum here?
-		//       (If a comment is added, include the easons for having this here!)
-		string ImportMD5 { get; }
-
-#endregion
-
-	}
-}
diff --git a/src/Core/IBrowsableItemVersionable.cs b/src/Core/IBrowsableItemVersionable.cs
deleted file mode 100644
index 03c9cb4..0000000
--- a/src/Core/IBrowsableItemVersionable.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * IBrowsableItemVersion.cs
- * 
- * Author(s):
- *  Ruben Vermeersch <ruben at savanne.be>
- *  Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- */
-
-using System.Collections.Generic;
-
-namespace FSpot
-{
-	/// <summary>
-	///    The interface adds functionality which is related to items where
-	///    versions can be added or removed.
-	/// </summary>
-	public interface IBrowsableItemVersionable : IBrowsableItem{
-
-		/// <summary>
-		///    Sets the default version of a the item.
-		/// </summary>
-		/// <param name="version">
-		///    A <see cref="IBrowsableItemVersion"/> which will be the new
-		///    default version.
-		/// </param>
-		void SetDefaultVersion (IBrowsableItemVersion version);
-	}
-}
diff --git a/src/Core/ILoadable.cs b/src/Core/ILoadable.cs
deleted file mode 100644
index 4a89908..0000000
--- a/src/Core/ILoadable.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Hyena;
-
-namespace FSpot
-{
-	/// <summary>
-	///    This is the contract that needs to be implemented before the image
-	///    data of the object can be loaded.
-	/// </summary>
-	public interface ILoadable
-	{
-		SafeUri Uri { get; set; }
-	}
-}
diff --git a/src/Core/Makefile.am b/src/Core/Makefile.am
index 49b7583..be4c8b0 100644
--- a/src/Core/Makefile.am
+++ b/src/Core/Makefile.am
@@ -1,33 +1,9 @@
-ASSEMBLY = FSpot.Core
-TARGET = library
-LINK = $(REF_FSPOT_CORE)
-
-SOURCES = \
-	BrowsableEventArgs.cs \
-	BrowsablePointer.cs \
-	BrowsablePointerChangedEventArgs.cs \
-	Category.cs \
-	DbItem.cs \
-	Delay.cs \
-	Tag.cs \
-	Global.cs \
-	FileBrowsableItem.cs \
-	IBrowsableItem.cs \
-	IBrowsableItemChanges.cs \
-	IBrowsableItemComparer.cs \
-	IBrowsableItemExtensions.cs \
-	IBrowsableItemVersion.cs \
-	IBrowsableItemVersionable.cs \
-	IBrowsableCollection.cs \
-	ILoadable.cs \
-	PhotoChanges.cs \
-	PhotosChanges.cs \
-	Roll.cs \
-	Defines.cs
-
-RESOURCES =
-
-include $(top_srcdir)/build/build.mk
-
-EXTRA_DIST += FSpot.Core.dll.config
-module_SCRIPTS += FSpot.Core.dll.config
+SUBDIRS = \
+		FSpot.Bling \
+		FSpot.Cms \
+		FSpot.Utils \
+		FSpot.Core \
+		FSpot.JobScheduler \
+		FSpot.Query \
+		FSpot.Gui \
+		FSpot.Platform
diff --git a/src/Core/Makefile.in b/src/Core/Makefile.in
index a264d98..d77c07f 100644
--- a/src/Core/Makefile.in
+++ b/src/Core/Makefile.in
@@ -14,7 +14,6 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
-
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
@@ -34,13 +33,8 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(srcdir)/Defines.cs.in \
-	$(srcdir)/FSpot.Core.dll.config.in $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
 subdir = src/Core
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
@@ -51,39 +45,58 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = Defines.cs FSpot.Core.dll.config
+CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
+SOURCES =
 DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
 ALL_LINGUAS = @ALL_LINGUAS@
@@ -96,6 +109,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -105,9 +122,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -121,6 +135,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -148,6 +163,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -244,14 +260,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -303,248 +317,20 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Core
-TARGET = library
-LINK = $(REF_FSPOT_CORE) $(am__append_1)
-SOURCES = \
-	BrowsableEventArgs.cs \
-	BrowsablePointer.cs \
-	BrowsablePointerChangedEventArgs.cs \
-	Category.cs \
-	DbItem.cs \
-	Delay.cs \
-	Tag.cs \
-	Global.cs \
-	FileBrowsableItem.cs \
-	IBrowsableItem.cs \
-	IBrowsableItemChanges.cs \
-	IBrowsableItemComparer.cs \
-	IBrowsableItemExtensions.cs \
-	IBrowsableItemVersion.cs \
-	IBrowsableItemVersionable.cs \
-	IBrowsableCollection.cs \
-	ILoadable.cs \
-	PhotoChanges.cs \
-	PhotosChanges.cs \
-	Roll.cs \
-	Defines.cs
-
-RESOURCES = 
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES) FSpot.Core.dll.config
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
-	$(THEME_ICONS_SOURCE) FSpot.Core.dll.config
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
+SUBDIRS = \
+		FSpot.Bling \
+		FSpot.Cms \
+		FSpot.Utils \
+		FSpot.Core \
+		FSpot.JobScheduler \
+		FSpot.Query \
+		FSpot.Gui \
+		FSpot.Platform
+
+all: all-recursive
 
 .SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -574,56 +360,147 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
-Defines.cs: $(top_builddir)/config.status $(srcdir)/Defines.cs.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-FSpot.Core.dll.config: $(top_builddir)/config.status $(srcdir)/FSpot.Core.dll.config.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
 
 mostlyclean-libtool:
 	-rm -f *.lo
 
 clean-libtool:
 	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
 tags: TAGS
-TAGS:
 
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
 ctags: CTAGS
-CTAGS:
-
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -655,22 +532,48 @@ distdir: $(DISTFILES)
 	    || exit 1; \
 	  fi; \
 	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
 	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-installcheck: installcheck-am
+installcheck: installcheck-recursive
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
@@ -679,147 +582,97 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
+clean: clean-recursive
 
 clean-am: clean-generic clean-libtool mostlyclean-am
 
-distclean: distclean-am
+distclean: distclean-recursive
 	-rm -f Makefile
-distclean-am: clean-am distclean-generic
+distclean-am: clean-am distclean-generic distclean-tags
 
-dvi: dvi-am
+dvi: dvi-recursive
 
 dvi-am:
 
-html: html-am
+html: html-recursive
 
 html-am:
 
-info: info-am
+info: info-recursive
 
 info-am:
 
-install-data-am: install-data-local install-moduleSCRIPTS
+install-data-am:
 
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
 
 install-dvi-am:
 
 install-exec-am:
 
-install-html: install-html-am
+install-html: install-html-recursive
 
 install-html-am:
 
-install-info: install-info-am
+install-info: install-info-recursive
 
 install-info-am:
 
 install-man:
 
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
 
 install-pdf-am:
 
-install-ps: install-ps-am
+install-ps: install-ps-recursive
 
 install-ps-am:
 
 installcheck-am:
 
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
 
 mostlyclean-am: mostlyclean-generic mostlyclean-libtool
 
-pdf: pdf-am
+pdf: pdf-recursive
 
 pdf-am:
 
-ps: ps-am
+ps: ps-recursive
 
 ps-am:
 
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/Core/Photo.cs b/src/Core/Photo.cs
deleted file mode 100644
index 7b240b7..0000000
--- a/src/Core/Photo.cs
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
- * FSpot.Photo.cs
- *
- * Author(s):
- *	Ettore Perazzoli <ettore at perazzoli.org>
- *	Larry Ewing <lewing at gnome.org>
- *	Stephane Delcroix <stephane at delcroix.org>
- * 
- * This is free software. See COPYING for details.
- */
-
-using Hyena;
-
-using System;
-using System.IO;
-using System.Linq;
-using System.Collections;
-using System.Collections.Generic;
-
-using Mono.Unix;
-
-using FSpot.Utils;
-using FSpot.Platform;
-using FSpot.Imaging;
-
-namespace FSpot
-{
-	public class Photo : DbItem, IComparable, IBrowsableItem, IBrowsableItemVersionable {
-		
-		PhotoChanges changes = new PhotoChanges ();
-		public PhotoChanges Changes {
-			get{ return changes; }
-			set {
-				if (value != null)
-					throw new ArgumentException ("The only valid value is null");
-				changes = new PhotoChanges ();
-			}
-		}
-
-		// The time is always in UTC.
-		private DateTime time;
-		public DateTime Time {
-			get { return time; }
-			set {
-				if (time == value)
-					return;
-				time = value;
-				changes.TimeChanged = true;
-			}
-		}
-	
-		public string Name {
-			get { return Uri.UnescapeDataString (System.IO.Path.GetFileName (VersionUri (OriginalVersionId).AbsolutePath)); }
-		}
-	
-		private ArrayList tags;
-		public Tag [] Tags {
-			get {
-				if (tags == null)
-					return new Tag [0];
-	
-				return (Tag []) tags.ToArray (typeof (Tag));
-			}
-		}
-	
-		private bool loaded = false;
-		public bool Loaded {
-			get { return loaded; }
-			set { 
-				if (value) {
-					if (DefaultVersionId != OriginalVersionId && !versions.ContainsKey (DefaultVersionId)) 
-						DefaultVersionId = OriginalVersionId;	
-				}
-				loaded = value; 
-			}
-		}
-	
-		private string description;
-		public string Description {
-			get { return description; }
-			set {
-				if (description == value)
-					return;
-				description = value;
-				changes.DescriptionChanged = true;
-			}
-		}
-	
-		private uint roll_id = 0;
-		public uint RollId {
-			get { return roll_id; }
-			set {
-				if (roll_id == value)
-					return;
-				roll_id = value;
-				changes.RollIdChanged = true;
-			}
-		}
-	
-		private uint rating;
-		public uint Rating {
-			get { return rating; }
-			set {
-				if (rating == value || value < 0 || value > 5)
-					return;
-				rating = value;
-				changes.RatingChanged = true;
-			}
-		}
-
-		// Version management
-		public const int OriginalVersionId = 1;
-		private uint highest_version_id;
-	
-		private Dictionary<uint, PhotoVersion> versions = new Dictionary<uint, PhotoVersion> ();
-		public IEnumerable<IBrowsableItemVersion> Versions {
-			get {
-				foreach (var version in versions.Values)
-					yield return version;
-			}
-		}
-
-		public uint [] VersionIds {
-			get {
-				if (versions == null)
-					return new uint [0];
-
-				uint [] ids = new uint [versions.Count];
-				versions.Keys.CopyTo (ids, 0);
-				Array.Sort (ids);
-				return ids;
-			}
-		}
-
-		public PhotoVersion GetVersion (uint version_id)
-		{
-			if (versions == null)
-				return null;
-	
-			return versions [version_id];
-		}
-	
-		private uint default_version_id = OriginalVersionId;
-		public uint DefaultVersionId {
-			get { return default_version_id; }
-			set {
-				if (default_version_id == value)
-					return;
-				default_version_id = value;
-				changes.DefaultVersionIdChanged = true;
-			}
-		}
-	
-		// This doesn't check if a version of that name already exists, 
-		// it's supposed to be used only within the Photo and PhotoStore classes.
-		internal void AddVersionUnsafely (uint version_id, SafeUri base_uri, string filename, string import_md5, string name, bool is_protected)
-		{
-			versions [version_id] = new PhotoVersion (this, version_id, base_uri, filename, import_md5, name, is_protected);
-	
-			highest_version_id = Math.Max (version_id, highest_version_id);
-			changes.AddVersion (version_id);
-		}
-	
-		public uint AddVersion (SafeUri base_uri, string filename, string name)
-		{
-			return AddVersion (base_uri, filename, name, false);
-		}
-	
-		public uint AddVersion (SafeUri base_uri, string filename, string name, bool is_protected)
-		{
-			if (VersionNameExists (name))
-				throw new ApplicationException ("A version with that name already exists");
-			highest_version_id ++;
-			string import_md5 = String.Empty; // Modified version
-
-			versions [highest_version_id] = new PhotoVersion (this, highest_version_id, base_uri, filename, import_md5, name, is_protected);
-
-			changes.AddVersion (highest_version_id);
-			return highest_version_id;
-		}
-	
-		//FIXME: store versions next to originals. will crash on ro locations.
-		private string GetFilenameForVersionName (string version_name, string extension)
-		{
-			string name_without_extension = System.IO.Path.GetFileNameWithoutExtension (Name);
-	
-			return name_without_extension + " (" +
-				UriUtils.EscapeString (version_name, true, true, true)
-				+ ")" + extension;
-		}
-	
-		public bool VersionNameExists (string version_name)
-		{
-            return Versions.Where ((v) => v.Name == version_name).Any ();
-		}
-
-		public SafeUri VersionUri (uint version_id)
-		{
-			if (!versions.ContainsKey (version_id))
-				return null;
-	
-			PhotoVersion v = versions [version_id]; 
-			if (v != null)
-				return v.Uri;
-	
-			return null;
-		}
-		
-		public IBrowsableItemVersion DefaultVersion {
-			get {
-				if (!versions.ContainsKey (DefaultVersionId))
-					throw new Exception ("Something is horribly wrong, this should never happen: no default version!");
-				return versions [DefaultVersionId]; 
-			}
-		}
-
-		public void SetDefaultVersion (IBrowsableItemVersion version)
-		{
-			PhotoVersion photo_version = version as PhotoVersion;
-			if (photo_version == null)
-				throw new ArgumentException ("Not a valid version for this photo");
-
-			DefaultVersionId = photo_version.VersionId;
-		}
-
-
-		//FIXME: won't work on non file uris
-		public uint SaveVersion (Gdk.Pixbuf buffer, bool create_version)
-		{
-			uint version = DefaultVersionId;
-			using (var img = ImageFile.Create (DefaultVersion.Uri)) {
-				// Always create a version if the source is not a jpeg for now.
-				create_version = create_version || ImageFile.IsJpeg (DefaultVersion.Uri);
-	
-				if (buffer == null)
-					throw new ApplicationException ("invalid (null) image");
-	
-				if (create_version)
-					version = CreateDefaultModifiedVersion (DefaultVersionId, false);
-	
-				try {
-					var versionUri = VersionUri (version);
-
-					PixbufUtils.CreateDerivedVersion (DefaultVersion.Uri, versionUri, 95, buffer);
-					(GetVersion (version) as PhotoVersion).ImportMD5 = HashUtils.GenerateMD5 (VersionUri (version));
-					DefaultVersionId = version;
-				} catch (System.Exception e) {
-					Log.Exception (e);
-					if (create_version)
-						DeleteVersion (version);
-				
-					throw e;
-				}
-			}
-			
-			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, bool keep_file)
-		{
-			if (version_id == OriginalVersionId && !remove_original)
-				throw new Exception ("Cannot delete original version");
-	
-			SafeUri uri =  VersionUri (version_id);
-	
-			if (!keep_file) {
-				GLib.File file = GLib.FileFactory.NewForUri (uri);
-				if (file.Exists) 
-					try {
-						file.Trash (null);
-					} catch (GLib.GException) {
-						Log.Debug ("Unable to Trash, trying to Delete");
-						file.Delete ();
-					}	
-				try {
-					XdgThumbnailSpec.RemoveThumbnail (uri);
-				} catch {
-					//ignore an error here we don't really care.
-				}
-			}
-			versions.Remove (version_id);
-
-			changes.RemoveVersion (version_id);
-
-			for (version_id = highest_version_id; version_id >= OriginalVersionId; version_id--) {
-				if (versions.ContainsKey (version_id)) {
-					DefaultVersionId = version_id;
-					break;
-				}
-			}
-		}
-
-		public uint CreateVersion (string name, uint base_version_id, bool create)
-		{
-			return CreateVersion (name, null, base_version_id, create, false);
-		}
-
-		public 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 ?? System.IO.Path.GetExtension (VersionUri (base_version_id).AbsolutePath);
-			SafeUri new_base_uri = DefaultVersion.BaseUri;
-			string filename = GetFilenameForVersionName (name, extension);
-			SafeUri original_uri = VersionUri (base_version_id);
-			SafeUri new_uri = new_base_uri.Append (filename);
-			string import_md5 = DefaultVersion.ImportMD5;
-	
-			if (VersionNameExists (name))
-				throw new Exception ("This version name already exists");
-	
-			if (create) {
-				GLib.File destination = GLib.FileFactory.NewForUri (new_uri);
-				if (destination.Exists)
-					throw new Exception (String.Format ("An object at this uri {0} already exists", new_uri));
-	
-		//FIXME. or better, fix the copy api !
-				GLib.File source = GLib.FileFactory.NewForUri (original_uri);
-				source.Copy (destination, GLib.FileCopyFlags.None, null, null);
-			}
-			highest_version_id ++;
-
-			versions [highest_version_id] = new PhotoVersion (this, highest_version_id, new_base_uri, filename, import_md5, name, is_protected);
-
-			changes.AddVersion (highest_version_id);
-	
-			return highest_version_id;
-		}
-	
-		public uint CreateReparentedVersion (PhotoVersion version)
-		{
-			return CreateReparentedVersion (version, false);
-		}
-	
-		public uint CreateReparentedVersion (PhotoVersion version, bool is_protected)
-		{
-			// Try to derive version name from its filename
-			string filename = Uri.UnescapeDataString (Path.GetFileNameWithoutExtension (version.Uri.AbsolutePath));
-			string parent_filename = Path.GetFileNameWithoutExtension (Name);
-			string name = null;
-			if (filename.StartsWith (parent_filename))
-				name = filename.Substring (parent_filename.Length).Replace ("(", "").Replace (")", "").Replace ("_", " "). Trim();
-			
-			if (String.IsNullOrEmpty (name)) {
-				// Note for translators: Reparented is a picture becoming a version of another one
-				string rep = name = Catalog.GetString ("Reparented");
-				for (int num = 1; VersionNameExists (name); num++) 
-					name = String.Format (rep + " ({0})", num);
-			}
-			highest_version_id ++;
-			versions [highest_version_id] = new PhotoVersion (this, highest_version_id, version.BaseUri, version.Filename, version.ImportMD5, name, is_protected);
-
-			changes.AddVersion (highest_version_id);
-
-			return highest_version_id;
-		}
-	
-		public uint CreateDefaultModifiedVersion (uint base_version_id, bool create_file)
-		{
-			int num = 1;
-	
-			while (true) {
-				string name = Catalog.GetPluralString ("Modified", 
-									 "Modified ({0})", 
-									 num);
-				name = String.Format (name, num);
-				//SafeUri uri = GetUriForVersionName (name, System.IO.Path.GetExtension (VersionUri(base_version_id).GetFilename()));
-				string filename = GetFilenameForVersionName (name, System.IO.Path.GetExtension (versions[base_version_id].Filename));
-				SafeUri uri = DefaultVersion.BaseUri.Append (filename);
-				GLib.File file = GLib.FileFactory.NewForUri (uri);
-	
-				if (! VersionNameExists (name) && ! file.Exists)
-					return CreateVersion (name, base_version_id, create_file);
-	
-				num ++;
-			}
-		}
-	
-		public uint CreateNamedVersion (string name, string extension, uint base_version_id, bool create_file)
-		{
-			int num = 1;
-			
-			string final_name;
-			while (true) {
-				final_name = String.Format (
-						(num == 1) ? Catalog.GetString ("Modified in {1}") : Catalog.GetString ("Modified in {1} ({0})"),
-						num, name);
-	
-				string filename = GetFilenameForVersionName (name, System.IO.Path.GetExtension (versions[base_version_id].Filename));
-				SafeUri uri = DefaultVersion.BaseUri.Append (filename);
-				GLib.File file = GLib.FileFactory.NewForUri (uri);
-
-				if (! VersionNameExists (final_name) && ! file.Exists)
-					return CreateVersion (final_name, extension, base_version_id, create_file);
-	
-				num ++;
-			}
-		}
-	
-		public void RenameVersion (uint version_id, string new_name)
-		{
-			if (version_id == OriginalVersionId)
-				throw new Exception ("Cannot rename original version");
-	
-			if (VersionNameExists (new_name))
-				throw new Exception ("This name already exists");
-	
-
-			(GetVersion (version_id) as PhotoVersion).Name = new_name;
-			changes.ChangeVersion (version_id);
-	
-			//TODO: rename file too ???
-	
-	//		if (System.IO.File.Exists (new_path))
-	//			throw new Exception ("File with this name already exists");
-	//
-	//		File.Move (old_path, new_path);
-	//		PhotoStore.MoveThumbnail (old_path, new_path);
-		}
-		
-		public void CopyAttributesFrom (Photo that) 
-		{			
-			Time = that.Time;
-			Description = that.Description;
-			Rating = that.Rating;
-			AddTag (that.Tags);
-		}
-	
-		// Tag management.
-	
-		// This doesn't check if the tag is already there, use with caution.
-		public void AddTagUnsafely (Tag tag)
-		{
-			if (tags == null)
-				tags = new ArrayList ();
-	
-			tags.Add (tag);
-			changes.AddTag (tag);
-		}
-	
-		// This on the other hand does, but is O(n) with n being the number of existing tags.
-		public void AddTag (Tag tag)
-		{
-			if (!HasTag (tag))
-				AddTagUnsafely (tag);
-		}
-	
-		public void AddTag (IEnumerable<Tag> taglist)
-		{
-			/*
-			 * FIXME need a better naming convention here, perhaps just
-			 * plain Add.
-			 */
-			foreach (Tag tag in taglist)
-				AddTag (tag);
-		}	
-	
-		public void RemoveTag (Tag tag)
-		{
-			if (!HasTag (tag))
-				return;
-
-			tags.Remove (tag);
-			changes.RemoveTag (tag);
-		}
-	
-		public void RemoveTag (Tag []taglist)
-		{	
-			foreach (Tag tag in taglist)
-				RemoveTag (tag);
-		}	
-	
-		public void RemoveCategory (IList<Tag> taglist)
-		{
-			foreach (Tag tag in taglist) {
-				Category cat = tag as Category;
-	
-				if (cat != null)
-					RemoveCategory (cat.Children);
-	
-				RemoveTag (tag);
-			}
-		}
-	
-		public bool HasTag (Tag tag)
-		{
-			if (tags == null)
-				return false;
-	
-			return tags.Contains (tag);
-		}
-	
-		private static IDictionary<SafeUri, string> md5_cache = new Dictionary<SafeUri, string> ();
-
-		public static void ResetMD5Cache () {
-			if (md5_cache != null)	
-				md5_cache.Clear (); 
-		}
-
-		// Constructor
-		public Photo (uint id, long unix_time)
-			: base (id)
-		{
-			time = DateTimeUtil.ToDateTime (unix_time);
-	
-			description = String.Empty;
-			rating = 0;
-		}
-
-#region IComparable implementation
-
-		// IComparable 
-		public int CompareTo (object obj) {
-			if (this.GetType () == obj.GetType ()) {
-				return this.Compare((Photo)obj);
-			} else if (obj is DateTime) {
-				return this.time.CompareTo ((DateTime)obj);
-			} else {
-				throw new Exception ("Object must be of type Photo");
-			}
-		}
-
-		public int CompareTo (Photo photo)
-		{
-			int result = Id.CompareTo (photo.Id);
-			
-			if (result == 0)
-				return 0;
-			else 
-				return (this as IBrowsableItem).Compare (photo);
-		}
-
-#endregion
-	}
-}
diff --git a/src/Core/PhotoChanges.cs b/src/Core/PhotoChanges.cs
deleted file mode 100644
index 708fe49..0000000
--- a/src/Core/PhotoChanges.cs
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * FSpot.PhotoChanges.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace FSpot
-{
-	//Track the changes done to a Photo between Commit's
-	public class PhotoChanges : PhotosChanges
-	{
-
-		public override bool VersionsChanged {
-			get { return VersionsAdded == null && VersionsRemoved == null && VersionsModified == null; }
-		}
-
-		public override bool TagsChanged {
-			get { return TagsAdded == null && TagsRemoved == null; }
-		}
-
-		List<Tag> tags_added = null;
-		public Tag [] TagsAdded {
-			get {
-				if (tags_added == null)
-					return null;
-				if (tags_added.Count == 0)
-					return null;
-				return tags_added.ToArray ();
-			}
-			set {
-				foreach (Tag t in value)
-					AddTag (t);
-			}
-		}
-
-		public void AddTag (Tag t)
-		{
-			if (tags_added == null)
-				tags_added = new List<Tag> ();
-			if (tags_removed != null)
-				tags_removed.Remove (t);
-			tags_added.Add (t);
-
-		}
-
-		List<Tag> tags_removed = null;
-		public Tag [] TagsRemoved {
-			get {
-				if (tags_removed == null)
-					return null;
-				if (tags_removed.Count == 0)
-					return null;
-				return tags_removed.ToArray ();
-			}
-			set {
-				foreach (Tag t in value)
-					RemoveTag (t);
-			}
-		}
-
-		public void RemoveTag (Tag t)
-		{
-			if (tags_removed == null)
-				tags_removed = new List<Tag> ();
-			if (tags_added != null)
-				tags_added.Remove (t);
-			tags_removed.Add (t);
-		}
-
-
-		List<uint> versions_added = null;
-		public uint [] VersionsAdded {
-			get {
-				if (versions_added == null)
-					return null;
-				if (versions_added.Count == 0)
-					return null;
-				return versions_added.ToArray ();
-			}
-			set {
-				foreach (uint u in value)
-					AddVersion (u);
-			}
-		}
-
-		public void AddVersion (uint v)
-		{
-			if (versions_added == null)
-				versions_added = new List<uint> ();
-			versions_added.Add (v);
-		}
-
-		List<uint> versions_removed = null;
-		public uint [] VersionsRemoved {
-			get {
-				if (versions_removed == null)
-					return null;
-				if (versions_removed.Count == 0)
-					return null;
-				return versions_removed.ToArray ();
-			}
-			set {
-				foreach (uint u in value)
-					RemoveVersion (u);
-			}
-		}
-
-		public void RemoveVersion (uint v)
-		{
-			if (versions_removed == null)
-				versions_removed= new List<uint> ();
-			if (versions_added != null)
-				versions_added.Remove (v);
-			if (versions_modified != null)
-				versions_modified.Remove (v);
-			versions_removed.Add (v);
-		}
-
-
-		List<uint> versions_modified = null;
-		public uint [] VersionsModified {
-			get {
-				if (versions_modified == null)
-					return null;
-				if (versions_modified.Count == 0)
-					return null;
-				return versions_modified.ToArray ();
-			}
-			set {
-				foreach (uint u in value)
-					ChangeVersion (u);
-			}
-		}
-
-		public void ChangeVersion (uint v)
-		{
-			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/PhotoVersion.cs b/src/Core/PhotoVersion.cs
deleted file mode 100644
index 0725b93..0000000
--- a/src/Core/PhotoVersion.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * PhotoStore.cs
- *
- * Author(s):
- *	Ettore Perazzoli <ettore at perazzoli.org>
- *	Larry Ewing <lewing at gnome.org>
- *	Stephane Delcroix <stephane at delcroix.org>
- *	Thomas Van Machelen <thomas.vanmachelen at gmail.com>
- * 
- * This is free software. See COPYING for details.
- */
-
-using Hyena;
-
-namespace FSpot
-{
-    public class PhotoVersion : IBrowsableItemVersion
-    {
-        public string Name { get; set; }
-        public IBrowsableItem Photo { get; private set; }
-        public SafeUri BaseUri { get; set; }
-        public string Filename { get; set; }
-        public SafeUri Uri {
-            get { return BaseUri.Append (Filename); }
-            set {
-                BaseUri = value.GetBaseUri ();
-                Filename = value.GetFilename ();
-            }
-        }
-        public string ImportMD5 { get; set; }
-        public uint VersionId { get; private set; }
-        public bool IsProtected { get; private set; }
-
-        public PhotoVersion (IBrowsableItem photo, uint version_id, SafeUri base_uri, string filename, string md5_sum, string name, bool is_protected)
-        {
-            Photo = photo;
-            VersionId = version_id;
-            BaseUri = base_uri;
-            Filename = filename;
-            ImportMD5 = md5_sum;
-            Name = name;
-            IsProtected = is_protected;
-        }
-    }
-}
diff --git a/src/Core/PhotosChanges.cs b/src/Core/PhotosChanges.cs
deleted file mode 100644
index ddbd52c..0000000
--- a/src/Core/PhotosChanges.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * FSpot.PhotosChanges.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace FSpot
-{
-	//used to aggregate PhotoChanges and notifying the various ui pieces
-	public class PhotosChanges : IBrowsableItemChanges
-	{
-		[Flags ()]
-		enum Changes {
-			DefaultVersionId 	= 0x1,
-			Time			= 0x2,
-			Uri			= 0x4,
-			Rating			= 0x8,
-			Description		= 0x10,
-			RollId			= 0x20,
-			Data			= 0x40,
-			MD5Sum			= 0x80
-		}
-
-		Changes changes = 0;
-
-		public bool MetadataChanged {
-			get { return (changes & ~Changes.Data) != 0 || TagsChanged || VersionsChanged; }
-		}
-
-		public bool DataChanged {
-			get { return (changes & Changes.Data) == Changes.Data; }
-			set {
-				if (value)
-					changes |= Changes.Data;
-				else
-					changes &= ~Changes.Data;
-			}
-		}
-		public bool DefaultVersionIdChanged {
-			get { return (changes & Changes.DefaultVersionId) == Changes.DefaultVersionId; }
-			set {
-				if (value) {
-					changes |= Changes.DefaultVersionId;
-					DataChanged = true;
-				} else
-					changes &= ~Changes.DefaultVersionId;
-			}
-		}
-		public bool TimeChanged {
-			get { return (changes & Changes.Time) == Changes.Time; }
-			set {
-				if (value)
-					changes |= Changes.Time;
-				else
-					changes &= ~Changes.Time;
-			}
-		}
-		public bool UriChanged {
-			get { return (changes & Changes.Uri) == Changes.Uri; }
-			set {
-				if (value)
-					changes |= Changes.Uri;
-				else
-					changes &= ~Changes.Uri;
-			}
-		}
-		public bool RatingChanged {
-			get { return (changes & Changes.Rating) == Changes.Rating; }
-			set {
-				if (value)
-					changes |= Changes.Rating;
-				else
-					changes &= ~Changes.Rating;
-			}
-		}
-		public bool DescriptionChanged {
-			get { return (changes & Changes.Description) == Changes.Description; }
-			set {
-				if (value)
-					changes |= Changes.Description;
-				else
-					changes &= ~ Changes.Description;
-			}
-		}
-		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 {
-				if (value)
-					changes |= Changes.RollId;
-				else
-					changes &= ~Changes.RollId;
-			}
-		}
-
-		public bool MD5SumChanged {
-			get { return (changes & Changes.MD5Sum) == Changes.MD5Sum ; } 
-			set {
-				if (value)
-				 	changes |= Changes.MD5Sum;
-				else
-				 	changes &= ~Changes.MD5Sum; 
-			}
-		 
-		}
-
-		public static PhotosChanges operator | (PhotosChanges c1, PhotosChanges c2)
-		{
-			if (c1 == null)
-				throw new ArgumentNullException ("c1");
-			if (c2 == null)
-				throw new ArgumentNullException ("c2");
-
-			PhotosChanges changes = new PhotosChanges ();
-			changes.changes = c1.changes | c2.changes;
-			changes.VersionsChanged = c1.VersionsChanged || c2.VersionsChanged;
-			changes.TagsChanged = c1.TagsChanged || c2.TagsChanged;
-			return changes;
-		}
-
-		public PhotosChanges ()
-		{
-		}
-	}
-}
diff --git a/src/Core/Roll.cs b/src/Core/Roll.cs
deleted file mode 100644
index 3cc02b2..0000000
--- a/src/Core/Roll.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * RollStore.cs
- *
- * Author(s)
- *	Bengt Thuree
- *	Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Hyena;
-
-namespace FSpot
-{
-	public class Roll : DbItem
-	{
-		// The time is always in UTC.
-		private DateTime time;
-		public DateTime Time {
-			get { return time; }
-		}
-	
-		public Roll (uint id, long unix_time) : base (id)
-		{
-			time = DateTimeUtil.ToDateTime (unix_time);
-		}
-	}
-}
diff --git a/src/Core/Tag.cs b/src/Core/Tag.cs
deleted file mode 100644
index 7a64a6f..0000000
--- a/src/Core/Tag.cs
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * FSpot.Tag
- * 
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Gdk;
-using FSpot.Utils;
-using Hyena;
-
-namespace FSpot
-{
-	public class Tag : DbItem, IComparable<Tag>, IDisposable {
-		string name;
-		public string Name {
-			get { return name; }
-			set {  name = value;}
-		}
-	
-		Category category;
-		public Category Category {
-			get { return category; }
-			set {
-				if (Category != null)
-					Category.RemoveChild (this);
-	
-				category = value;
-				if (category != null)
-					category.AddChild (this);
-			}
-		}
-	
-		int sort_priority;
-		public int SortPriority {
-			get { return sort_priority; }
-			set { sort_priority = value; }
-		}
-	
-		int popularity = 0;
-		public int Popularity {
-			get { return popularity; }
-			set { popularity = value; }
-		}
-
-		// Icon.  If theme_icon_name is not null, then we save the name of the icon instead
-		// of the actual icon data.	
-		string theme_icon_name;
-		public string ThemeIconName {
-			get { return theme_icon_name; }
-			set { theme_icon_name = value; }
-		}
-	
-		Pixbuf icon;
-		public Pixbuf Icon {
-			get {
-				if (icon == null && theme_icon_name != null) {
-					cached_icon_size = IconSize.Hidden;
-					icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, theme_icon_name, 48, (Gtk.IconLookupFlags)0);
-				}
-				return icon;
-			}
-			set {
-				theme_icon_name = null;
-				if (icon != null)
-					icon.Dispose ();
-				icon = value;
-				cached_icon_size = IconSize.Hidden;
-				IconWasCleared = value == null;
-			}
-		}
-
-		bool icon_was_cleared = false;
-		public bool IconWasCleared {
-			get { return icon_was_cleared; }
-			set { icon_was_cleared = value; }
-		}
-	
-		public enum IconSize {
-			Hidden = 0,
-			Small = 16,
-			Medium = 24,
-			Large = 48
-		};
-	
-		static IconSize tag_icon_size = IconSize.Large;
-		public static IconSize TagIconSize {
-			get { return tag_icon_size; }
-			set { tag_icon_size = value; }
-		}
-	
-		Pixbuf cached_icon;
-		private IconSize cached_icon_size = IconSize.Hidden;
-	
-		// We can use a SizedIcon everywhere we were using an Icon
-		public Pixbuf SizedIcon {
-			get {
-				if (tag_icon_size == IconSize.Hidden) //Hidden
-					return null;
-				if (tag_icon_size == cached_icon_size)
-					return cached_icon;
-				if (theme_icon_name != null) { //Theme icon
-					if (cached_icon != null)
-						cached_icon.Dispose ();
-					cached_icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, theme_icon_name, (int) tag_icon_size, (Gtk.IconLookupFlags)0);
-	
-					if (Math.Max (cached_icon.Width, cached_icon.Height) <= (int) tag_icon_size) 
-						return cached_icon;
-				}
-				if (Icon == null)
-					return null;
-
-				if (Math.Max (Icon.Width, Icon.Height) >= (int) tag_icon_size) { //Don't upscale
-					if (cached_icon != null)
-						cached_icon.Dispose ();
-					cached_icon = Icon.ScaleSimple ((int) tag_icon_size, (int) tag_icon_size, InterpType.Bilinear);
-					cached_icon_size = tag_icon_size;
-					return cached_icon;
-				} else
-					return Icon;
-			}	
-		}
-	
-	
-		// You are not supposed to invoke these constructors outside of the TagStore class.
-		public Tag (Category category, uint id, string name)
-			: base (id)
-		{
-			Category = category;
-			Name = name;
-		}
-	
-	
-		// IComparer.
-		public int CompareTo (Tag tag)
-		{
-			if (tag == null)
-				throw new ArgumentNullException ("tag");
-
-			if (Category == tag.Category) {
-				if (SortPriority == tag.SortPriority)
-					return Name.CompareTo (tag.Name);
-				else
-					return SortPriority - tag.SortPriority;
-			} else {
-				return Category.CompareTo (tag.Category);
-			}
-		}
-		
-		public bool IsAncestorOf (Tag tag)
-		{
-			if (tag == null)
-				throw new ArgumentNullException ("tag");
-
-			for (Category parent = tag.Category; parent != null; parent = parent.Category) {
-				if (parent == this)
-					return true;
-			}
-	
-			return false;
-		}
-
-		public void Dispose ()
-		{
-			if (icon != null)
-				icon.Dispose ();
-			if (cached_icon != null)
-				cached_icon.Dispose ();
-			if (category != null)
-				category.Dispose ();
-			System.GC.SuppressFinalize (this);
-		}
-
-		~Tag ()
-		{
-			Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
-			if (icon != null)
-				icon.Dispose ();
-			if (cached_icon != null)
-				cached_icon.Dispose ();
-			if (category != null)
-				category.Dispose ();
-		}
-	}
-}
diff --git a/src/Db.cs b/src/Db.cs
deleted file mode 100644
index e6097e4..0000000
--- a/src/Db.cs
+++ /dev/null
@@ -1,340 +0,0 @@
-using System.Threading;
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System;
-using Banshee.Database;
-using System.Diagnostics;
-using FSpot;
-using Hyena;
-
-// A Store maps to a SQL table.  We have separate stores (i.e. SQL tables) for tags, photos and imports.
-
-public class DbException : ApplicationException {
-	public DbException(string msg) : base(msg)
-	{
-	}
-}
-
-public abstract class DbStore<T> where T : DbItem {
-	// DbItem cache.
-
-	public event EventHandler<DbItemEventArgs<T>> ItemsAdded;
-	public event EventHandler<DbItemEventArgs<T>> ItemsRemoved;
-	public event EventHandler<DbItemEventArgs<T>> ItemsChanged;
-
-	protected Dictionary<uint, object> item_cache;
-	bool cache_is_immortal;
-
-	protected void AddToCache (T item)
-	{
-		if (item_cache.ContainsKey (item.Id))
-			item_cache.Remove (item.Id);
-
-		if (cache_is_immortal)
-			item_cache.Add (item.Id, item);
-		else
-			item_cache.Add (item.Id, new WeakReference (item));
-	}
-
-	protected T LookupInCache (uint id)
-	{
-		if (!item_cache.ContainsKey(id))
-			return null;
-
-		if (cache_is_immortal)
-			return item_cache [id] as T;
-
-		WeakReference weakref = item_cache [id] as WeakReference;
-		return (T) weakref.Target;
-	}
-
-	protected void RemoveFromCache (T item)
-	{
-		item_cache.Remove (item.Id);
-	}
-
-	protected void EmitAdded (T item)
-	{
-		EmitAdded (new T [] { item });
-	}
-
-	protected void EmitAdded (T [] items)
-	{
-		EmitEvent (ItemsAdded, new DbItemEventArgs<T> (items));
-	}
-
-	protected void EmitChanged (T item)
-	{
-		EmitChanged (new T [] { item });
-	}
-
-	protected void EmitChanged (T [] items)
-	{
-		EmitChanged (items, new DbItemEventArgs<T> (items));
-	}
-
-	protected void EmitChanged (T [] items, DbItemEventArgs<T> args)
-	{
-		EmitEvent (ItemsChanged, args);
-	}
-
-	protected void EmitRemoved (T item)
-	{
-		EmitRemoved (new T [] { item });
-	}
-
-	protected void EmitRemoved (T [] items)
-	{
-		EmitEvent (ItemsRemoved, new DbItemEventArgs<T> (items));
-	}
-
-	private void EmitEvent (EventHandler<DbItemEventArgs<T>> evnt, DbItemEventArgs<T> args)
-	{
-		if (evnt == null) // No subscribers.
-			return;
-
-		ThreadAssist.ProxyToMain (() => {
-			evnt (this, args);
-		});
-	}
-
-	public bool CacheEmpty {
-		get {
-			return item_cache.Count == 0;
-		}
-	}
-
-
-	QueuedSqliteDatabase database;
-	protected QueuedSqliteDatabase Database {
-		get {
-			return database;
-		}
-	}
-
-
-	// Constructor.
-
-	public DbStore (QueuedSqliteDatabase database,
-			bool cache_is_immortal)
-	{
-		this.database = database;
-		this.cache_is_immortal = cache_is_immortal;
-
-		item_cache = new Dictionary<uint, object> ();
-	}
-
-
-	// Abstract methods.
-
-	public abstract T Get (uint id);
-	public abstract void Remove (T item);
-	// If you have made changes to "obj", you have to invoke Commit() to have the changes
-	// saved into the database.
-	public abstract void Commit (T item);
-}
-
-
-// The Database puts the stores together.
-
-public class Db : IDisposable {
-
-	TagStore tag_store;
-	PhotoStore photo_store;
- 	RollStore roll_store;
-	ExportStore export_store;
- 	JobStore job_store;
- 	MetaStore meta_store;
-	bool empty;
-	string path;
-
-	public delegate void ExceptionThrownHandler (Exception e);
-	public event ExceptionThrownHandler ExceptionThrown;
-
-
-	public TagStore Tags {
-		get { return tag_store; }
-	}
-
-	public RollStore Rolls {
-		get { return roll_store; }
-	}
-
-	public ExportStore Exports {
-		get { return export_store; }
-	}
-
-	public JobStore Jobs {
-		get { return job_store; }
-	}
-
-	public PhotoStore Photos {
-		get { return photo_store; }
-	}
-	
-	public MetaStore Meta {
-		get { return meta_store; }
-	}
-
-	// This affects how often the database writes data back to disk, and
-	// therefore how likely corruption is in the event of power loss.
-	public bool Sync {
-		set {
-			string query = "PRAGMA synchronous = " + (value ? "ON" : "OFF");
-			Database.ExecuteNonQuery(query);
-		}
-	}
-
-	QueuedSqliteDatabase database;
-	public QueuedSqliteDatabase Database {
-		get { return database; }
-	}
-
-
-	public string Repair ()
-	{
-		string backup_path = path;
-		int i = 0;
-
-		while (File.Exists (backup_path)) {
-			backup_path = String.Format ("{0}-{1}-{2}{3}",
-						     Path.GetFileNameWithoutExtension (path),
-						     System.DateTime.Now.ToString ("yyyyMMdd"),
-						     i++,
-						     Path.GetExtension (path));
-		}
-		
-		File.Move (path, backup_path);
-		Init (path, true);
-
-		return backup_path;
-	}
-
-	public void Init (string path, bool create_if_missing)
-	{
-		uint timer = Log.DebugTimerStart ();
-		bool new_db = ! File.Exists (path);
-		this.path = path;
-
-		if (new_db && ! create_if_missing)
-			throw new Exception (path + ": File not found");
-
-		database = new QueuedSqliteDatabase(path);
-		database.ExceptionThrown += HandleDbException;
-
-		if (database.GetFileVersion(path) == 2)
-			SqliteUpgrade ();
-
-		// Load or create the meta table
- 		meta_store = new MetaStore (Database, new_db);
-
-		// Update the database schema if necessary
-		FSpot.Database.Updater.Run (Database);
-
-		Database.BeginTransaction ();
-
-		tag_store = new TagStore (Database, new_db);
-		roll_store = new RollStore (Database, new_db);
-		export_store = new ExportStore (Database, new_db);
-		job_store = new JobStore (Database, new_db);
- 		photo_store = new PhotoStore (Database, new_db);
-
-		Database.CommitTransaction ();
-
-		empty = new_db;
-		Log.DebugTimerPrint (timer, "Db Initialization took {0}");
-	}
-
-	void HandleDbException (Exception e)
-	{
-		if (ExceptionThrown != null)
-			ExceptionThrown (e);
-		else
-			throw e;
-	}
-
-	public bool Empty {
-		get {
-			return empty;
-		}
-	}
-
-	public void Dispose ()
-	{
-		Dispose (true);
-		GC.SuppressFinalize (this);
-	}
-
-	bool already_disposed = false;
-	protected virtual void Dispose (bool is_disposing)
-	{
-		if (already_disposed)
-			return;
-		if (is_disposing) {//Free managed resources
-			Database.Dispose ();
-		}
-		//Free eunmanaged resources
-
-		already_disposed = true;
-	}
-
-	~Db ()
-	{
-		Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
-		Dispose (false);
-	}
-
-	public void BeginTransaction()
-	{
-		Database.BeginTransaction ();
-	}
-
-	public void CommitTransaction()
-	{
-		Database.CommitTransaction ();
-	}
-
-	public void RollbackTransaction()
-	{
-		Database.RollbackTransaction ();
-	}
-
-	private void SqliteUpgrade ()
-	{
-		//Close the db
-		database.Dispose();
-
-		string upgrader_path = null;
-		string [] possible_paths = {
-			Path.Combine (Defines.BINDIR, "f-spot-sqlite-upgrade"),
-			"../tools/f-spot-sqlite-upgrade",
-			"/usr/local/bin/f-spot-sqlite-upgrade",
-			"/usr/bin/f-spot-sqlite-upgrade",
-		};
-
-		foreach (string p in possible_paths)
-			if (File.Exists (p)) {
-				upgrader_path = p;
-				break;
-			}
-
-		if (upgrader_path == null)
-			throw new DbException ("Failed to upgrade the f-spot sqlite2 database to sqlite3!\n" + "Unable to find the f-spot-sqlite-upgrade script on your system");
-
-		Log.DebugFormat ("Running {0}...", upgrader_path);
-		ProcessStartInfo updaterInfo = new ProcessStartInfo (upgrader_path);
-		updaterInfo.UseShellExecute = false;
-		updaterInfo.RedirectStandardError = true;
-		Process updater = Process.Start (updaterInfo);
-		string stdError = updater.StandardError.ReadToEnd ();
-		updater.WaitForExit ();
-		if (updater.ExitCode != 0)
-			throw new DbException("Failed to upgrade the f-spot sqlite2 database to sqlite3!\n" + stdError);
-
-		//Re-open the db
-		database = new QueuedSqliteDatabase(path);
-	}
-}
-
-
diff --git a/src/DragDropTargets.cs b/src/DragDropTargets.cs
deleted file mode 100644
index 433f099..0000000
--- a/src/DragDropTargets.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * FSpot.DragDropTargets.cs
- *
- * Author(s)
- * 	Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Gtk;
-
-namespace FSpot
-{	
-	public static class DragDropTargets
-	{
-		enum TargetType : uint {
-			PlainText = 0,
-			UriList,
-			TagList,
-			TagQueryItem,
-			UriQueryItem,
-			PhotoList,
-			RootWindow,
-			CopyFiles,
-		};
-
-		[Obsolete ("better use gtk_target_list_add_text_targets")]
-		public static readonly TargetEntry PlainTextEntry =
-			new TargetEntry ("text/plain", 0, (uint)TargetType.PhotoList);
-		
-		public static readonly TargetEntry PhotoListEntry =
-			new TargetEntry ("application/x-fspot-photos", 0, (uint)TargetType.PhotoList);
-		
-		[Obsolete ("Use gtk_target_list_add_uri_target")]
-		public static readonly TargetEntry UriListEntry =
-			new TargetEntry ("text/uri-list", 0, (uint)TargetType.UriList);
-		
-		public static readonly TargetEntry TagListEntry =
-			new TargetEntry ("application/x-fspot-tags", 0, (uint)TargetType.TagList);
-		
-		/* FIXME: maybe we need just one fspot-query-item */
-		public static readonly TargetEntry UriQueryEntry =
-			new TargetEntry ("application/x-fspot-uri-query-item", 0, (uint)TargetType.UriQueryItem);
-		
-		public static readonly TargetEntry TagQueryEntry =
-			new TargetEntry ("application/x-fspot-tag-query-item", 0, (uint)TargetType.TagQueryItem);
-		
-		public static readonly TargetEntry RootWindowEntry =
-			new TargetEntry ("application/x-root-window-drop", 0, (uint)TargetType.RootWindow);
-
-		public static readonly TargetEntry CopyFilesEntry =
-			new TargetEntry ("x-special/gnome-copied-files", 0, (uint)TargetType.CopyFiles);
-	}
-}
diff --git a/src/Editors/CropEditor.cs b/src/Editors/CropEditor.cs
deleted file mode 100644
index 375e8cc..0000000
--- a/src/Editors/CropEditor.cs
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * CropEditor.cs
- *
- * Author(s)
- * 	Ruben Vermeersch <ruben at savanne.be>
- *
- * This is free software. See COPYING for details.
- */
-
-using FSpot;
-using FSpot.UI.Dialog;
-using FSpot.Utils;
-using Hyena;
-using Gdk;
-using Gtk;
-using Mono.Unix;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Xml.Serialization;
-
-namespace FSpot.Editors {
-	class CropEditor : Editor {
-		private TreeStore constraints_store;
-		private ComboBox constraints_combo;
-
-		public enum ConstraintType {
-			Normal,
-			AddCustom,
-			SameAsPhoto
-		}
-
-		private List<SelectionRatioDialog.SelectionConstraint> custom_constraints;
-
-		private static SelectionRatioDialog.SelectionConstraint [] default_constraints = {
-			new SelectionRatioDialog.SelectionConstraint (Catalog.GetString ("4 x 3 (Book)"), 4.0 / 3.0),
-			new SelectionRatioDialog.SelectionConstraint (Catalog.GetString ("4 x 6 (Postcard)"), 6.0 / 4.0),
-			new SelectionRatioDialog.SelectionConstraint (Catalog.GetString ("5 x 7 (L, 2L)"), 7.0 / 5.0),
-			new SelectionRatioDialog.SelectionConstraint (Catalog.GetString ("8 x 10"), 10.0 / 8.0),
-			new SelectionRatioDialog.SelectionConstraint (Catalog.GetString ("Square"), 1.0)
-		};
-
-		public CropEditor () : base (Catalog.GetString ("Crop"), "crop") {
-			NeedsSelection = true;
-
-			Preferences.SettingChanged += OnPreferencesChanged;
-
-			Initialized += delegate { State.PhotoImageView.PhotoChanged += delegate { UpdateSelectionCombo (); }; };
-		}
-
-		private void OnPreferencesChanged (object sender, NotifyEventArgs args)
-		{
-			LoadPreference (args.Key);
-		}
-
-		private void LoadPreference (String key)
-		{
-			switch (key) {
-			case Preferences.CUSTOM_CROP_RATIOS:
-				custom_constraints = new List<SelectionRatioDialog.SelectionConstraint> ();
-				if (Preferences.Get<string[]> (key) != null) {
-					XmlSerializer serializer = new XmlSerializer (typeof(SelectionRatioDialog.SelectionConstraint));
-					foreach (string xml in Preferences.Get<string[]> (key))
-						custom_constraints.Add ((SelectionRatioDialog.SelectionConstraint)serializer.Deserialize (new StringReader (xml)));
-				}
-				PopulateConstraints ();
-				break;
-			}
-		}
-
-		public override Widget ConfigurationWidget () {
-			VBox vbox = new VBox ();
-
-			Label info = new Label (Catalog.GetString ("Select the area that needs cropping."));
-
-			constraints_combo = new ComboBox ();
-			CellRendererText constraint_name_cell = new CellRendererText ();
-			CellRendererPixbuf constraint_pix_cell = new CellRendererPixbuf ();
-			constraints_combo.PackStart (constraint_name_cell, true);
-			constraints_combo.PackStart (constraint_pix_cell, false);
-			constraints_combo.SetCellDataFunc (constraint_name_cell, new CellLayoutDataFunc (ConstraintNameCellFunc));
-			constraints_combo.SetCellDataFunc (constraint_pix_cell, new CellLayoutDataFunc (ConstraintPixCellFunc));
-			constraints_combo.Changed += HandleConstraintsComboChanged;
-
-			// FIXME: need tooltip Catalog.GetString ("Constrain the aspect ratio of the selection")
-
-			LoadPreference (Preferences.CUSTOM_CROP_RATIOS);
-
-			vbox.Add (info);
-			vbox.Add (constraints_combo);
-
-			return vbox;
-		}
-
-		private void PopulateConstraints()
-		{
-			constraints_store = new TreeStore (typeof (string), typeof (string), typeof (double), typeof (ConstraintType));
-			constraints_combo.Model = constraints_store;
-			constraints_store.AppendValues (null, Catalog.GetString ("No Constraint"), 0.0, ConstraintType.Normal);
-			constraints_store.AppendValues (null, Catalog.GetString ("Same as photo"), 0.0, ConstraintType.SameAsPhoto);
-			foreach (SelectionRatioDialog.SelectionConstraint constraint in custom_constraints)
-				constraints_store.AppendValues (null, constraint.Label, constraint.XyRatio, ConstraintType.Normal);
-			foreach (SelectionRatioDialog.SelectionConstraint constraint in default_constraints)
-				constraints_store.AppendValues (null, constraint.Label, constraint.XyRatio, ConstraintType.Normal);
-			constraints_store.AppendValues (Stock.Edit, Catalog.GetString ("Custom Ratios..."), 0.0, ConstraintType.AddCustom);
-			constraints_combo.Active = 0;
-		}
-
-		public void UpdateSelectionCombo ()
-		{
-			if (!StateInitialized || constraints_combo == null)
-				// Don't bomb out on instant-apply.
-				return;
-
-			//constraints_combo.Active = 0;
-			TreeIter iter;
-			if (constraints_combo.GetActiveIter (out iter)) {
-				if (((ConstraintType)constraints_store.GetValue (iter, 3)) == ConstraintType.SameAsPhoto)
-					constraints_combo.Active = 0;
-			}
-		}
-
-		private void HandleConstraintsComboChanged (object o, EventArgs e)
-		{
-			if (State.PhotoImageView == null) {
-				Log.Debug ("PhotoImageView is null");
-				return;
-			}
-
-			TreeIter iter;
-			if (constraints_combo.GetActiveIter (out iter)) {
-				double ratio = ((double)constraints_store.GetValue (iter, 2));
-				ConstraintType type = ((ConstraintType)constraints_store.GetValue (iter, 3));
-				switch (type) {
-				case ConstraintType.Normal:
-					State.PhotoImageView.SelectionXyRatio = ratio;
-					break;
-				case ConstraintType.AddCustom:
-					SelectionRatioDialog dialog = new SelectionRatioDialog ();
-					dialog.Dialog.Run ();
-					break;
-				case ConstraintType.SameAsPhoto:
-					try {
-						Pixbuf pb = State.PhotoImageView.CompletePixbuf ();
-						State.PhotoImageView.SelectionXyRatio = (double)pb.Width / (double)pb.Height;
-					} catch (System.Exception ex) {
-						Log.WarningFormat ("Exception in selection ratio's: {0}", ex);
-						State.PhotoImageView.SelectionXyRatio = 0;
-					}
-					break;
-				default:
-					State.PhotoImageView.SelectionXyRatio = 0;
-					break;
-				}
-			}
-		}
-
-		void ConstraintNameCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
-		{
-			string name = (string)tree_model.GetValue (iter, 1);
-			(cell as CellRendererText).Text = name;
-		}
-
-		void ConstraintPixCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
-		{
-			string stockname = (string)tree_model.GetValue (iter, 0);
-			if (stockname != null)
-				(cell as CellRendererPixbuf).Pixbuf = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, stockname, 16, (Gtk.IconLookupFlags)0);
-			else
-				(cell as CellRendererPixbuf).Pixbuf = null;
-		}
-
-		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
-			Rectangle selection = FSpot.Utils.PixbufUtils.TransformOrientation ((int)State.PhotoImageView.PixbufOrientation <= 4 ? input.Width : input.Height,
-											    (int)State.PhotoImageView.PixbufOrientation <= 4 ? input.Height : input.Width,
-											    State.Selection, State.PhotoImageView.PixbufOrientation);
-			Pixbuf edited = new Pixbuf (input.Colorspace,
-						 input.HasAlpha, input.BitsPerSample,
-						 selection.Width, selection.Height);
-
-			input.CopyArea (selection.X, selection.Y,
-					selection.Width, selection.Height, edited, 0, 0);
-			return edited;
-		}
-	}
-}
diff --git a/src/Editors/Editor.cs b/src/Editors/Editor.cs
deleted file mode 100644
index a84a5e9..0000000
--- a/src/Editors/Editor.cs
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Editor.cs
- *
- * Author(s)
- * 	Ruben Vermeersch <ruben at savanne.be>
- *
- * This is free software. See COPYING for details.
- */
-
-using Hyena;
-
-using FSpot.Widgets;
-using FSpot.Imaging;
-
-using Gdk;
-using Gtk;
-
-using Mono.Addins;
-using Mono.Unix;
-
-using System;
-
-namespace FSpot.Editors {
-	[ExtensionNode ("Editor")]
-	public class EditorNode : ExtensionNode {
-		[NodeAttribute (Required=true)]
-		protected string editor_type;
-
-		public Editor GetEditor () {
-			return (Editor) Addin.CreateInstance (editor_type);
-		}
-	}
-
-	public class EditorState {
-		// The area selected by the user.
-		public Rectangle Selection;
-
-		// The images selected by the user.
-		public IBrowsableItem [] Items;
-
-		// The view, into which images are shown (null if we are in the browse view).
-		public PhotoImageView PhotoImageView;
-
-		// Has a portion of the image been selected?
-		public bool HasSelection {
-			get { return Selection != Rectangle.Zero; }
-		}
-
-		// Is the user in browse mode?
-		public bool InBrowseMode {
-			get { return PhotoImageView == null; }
-		}
-	}
-
-	// This is the base class from which all editors inherit.
-	public abstract class Editor {
-		public delegate void ProcessingStartedHandler (string name, int count);
-		public delegate void ProcessingStepHandler (int done);
-		public delegate void ProcessingFinishedHandler ();
-
-		public event ProcessingStartedHandler ProcessingStarted;
-		public event ProcessingStepHandler ProcessingStep;
-		public event ProcessingFinishedHandler ProcessingFinished;
-
-		// Contains the current selection, the items being edited, ...
-		private EditorState state;
-		public EditorState State {
-			get {
-				if (!StateInitialized)
-					throw new ApplicationException ("Editor has not been initialized yet!");
-
-				return state;
-			}
-			private set { state = value; }
-		}
-
-		public bool StateInitialized {
-			get { return state != null; }
-		}
-
-
-		// Whether the user needs to select a part of the image before it can be applied.
-		public bool NeedsSelection = false;
-
-		// A tool can be applied if it doesn't need a selection, or if it has one.
-		public bool CanBeApplied {
-			get {
-				Log.DebugFormat ("{0} can be applied? {1}", this, !NeedsSelection || (NeedsSelection && State.HasSelection));
-				return !NeedsSelection || (NeedsSelection && State.HasSelection);
-			}
-		}
-
-		private bool can_handle_multiple = false;
-		public bool CanHandleMultiple {
-			get { return can_handle_multiple; }
-			protected set { can_handle_multiple = value; }
-		}
-
-
-		protected void LoadPhoto (Photo photo, out Pixbuf photo_pixbuf, out Cms.Profile photo_profile) {
-			// FIXME: We might get this value from the PhotoImageView.
-			using (var img = ImageFile.Create (photo.DefaultVersion.Uri)) {
-				photo_pixbuf = img.Load ();
-				photo_profile = img.GetProfile ();
-			}
-		}
-
-		// The human readable name for this action.
-		public readonly string Label;
-
-		// The label on the apply button (usually shorter than the label).
-		private string apply_label = "";
-		public string ApplyLabel {
-			get { return apply_label == "" ? Label : apply_label; }
-			protected set { apply_label = value; }
-		}
-
-
-		// The icon name for this action (will be loaded from the theme).
-		public readonly string IconName;
-
-		public Editor (string label, string icon_name) {
-			Label = label;
-			IconName = icon_name;
-		}
-
-		// Apply the editor's action to a photo.
-		public void Apply () {
-			try {
-				if (ProcessingStarted != null) {
-					ProcessingStarted (Label, State.Items.Length);
-				}
-				TryApply ();
-			} finally {
-				if (ProcessingFinished != null) {
-					ProcessingFinished ();
-				}
-			}
-		}
-
-		private void TryApply () {
-			if (NeedsSelection && !State.HasSelection) {
-				throw new Exception ("Cannot apply without selection!");
-			}
-
-			int done = 0;
-			foreach (Photo photo in State.Items) {
-				Pixbuf input;
-				Cms.Profile input_profile;
-				LoadPhoto (photo, out input, out input_profile);
-
-				Pixbuf edited = Process (input, input_profile);
-				input.Dispose ();
-
-				bool create_version = photo.DefaultVersion.IsProtected;
-				photo.SaveVersion (edited, create_version);
-				photo.Changes.DataChanged = true;
-				App.Instance.Database.Photos.Commit (photo);
-
-				done++;
-				if (ProcessingStep != null) {
-					ProcessingStep (done);
-				}
-			}
-
-			Reset ();
-		}
-
-		protected abstract Pixbuf Process (Pixbuf input, Cms.Profile input_profile);
-
-		protected virtual Pixbuf ProcessFast (Pixbuf input, Cms.Profile input_profile) {
-			return Process (input, input_profile);
-		}
-
-		private bool has_settings;
-		public bool HasSettings {
-			get { return has_settings; }
-			protected set { has_settings = value; }
-		}
-
-		private Pixbuf original;
-		private Pixbuf preview;
-		protected void UpdatePreview () {
-			if (State.InBrowseMode) {
-				throw new Exception ("Previews cannot be made in browse mode!");
-			}
-
-			if (State.Items.Length > 1) {
-				throw new Exception ("We should have one item selected when this happened, otherwise something is terribly wrong.");
-			}
-
-			if (original == null) {
-				original = State.PhotoImageView.Pixbuf;
-			}
-
-			Pixbuf old_preview = null;
-			if (preview == null) {
-				int width, height;
-				CalcPreviewSize (original, out width, out height);
-				preview = original.ScaleSimple (width, height, InterpType.Nearest);
-			} else {
-				// We're updating a previous preview
-				old_preview = State.PhotoImageView.Pixbuf;
-			}
-
-			Pixbuf previewed = ProcessFast (preview, null);
-			State.PhotoImageView.Pixbuf = previewed;
-			State.PhotoImageView.ZoomFit (false);
-			App.Instance.Organizer.InfoBox.UpdateHistogram (previewed);
-
-			if (old_preview != null) {
-				old_preview.Dispose ();
-			}
-		}
-
-		private void CalcPreviewSize (Pixbuf input, out int width, out int height) {
-			int awidth = State.PhotoImageView.Allocation.Width;
-			int aheight = State.PhotoImageView.Allocation.Height;
-			int iwidth = input.Width;
-			int iheight = input.Height;
-
-			if (iwidth <= awidth && iheight <= aheight) {
-				// Do not upscale
-				width = iwidth;
-				height = iheight;
-			} else {
-				double wratio = (double) iwidth / awidth;
-				double hratio = (double) iheight / aheight;
-
-				double ratio = Math.Max (wratio, hratio);
-				width = (int) (iwidth / ratio);
-				height = (int) (iheight / ratio);
-			}
-			//Log.Debug ("Preview size: Allocation: {0}x{1}, Input: {2}x{3}, Result: {4}x{5}", awidth, aheight, iwidth, iheight, width, height);
-		}
-
-		public void Restore () {
-			if (original != null && State.PhotoImageView != null) {
-				State.PhotoImageView.Pixbuf = original;
-				State.PhotoImageView.ZoomFit (false);
-
-				App.Instance.Organizer.InfoBox.UpdateHistogram (null);
-			}
-
-			Reset ();
-		}
-
-		private void Reset () {
-			if (preview != null) {
-				preview.Dispose ();
-			}
-
-			preview = null;
-			original = null;
-			State = null;
-		}
-
-		// Can be overriden to provide a specific configuration widget.
-		// Returning null means no configuration widget.
-		public virtual Widget ConfigurationWidget () {
-			return null;
-		}
-
-
-		public virtual EditorState CreateState () {
-			return new EditorState ();
-		}
-
-		public delegate void InitializedHandler ();
-		public event InitializedHandler Initialized;
-
-		public void Initialize (EditorState state) {
-			State = state;
-
-			if (Initialized != null)
-				Initialized ();
-		}
-	}
-}
diff --git a/src/Editors/SoftFocusEditor.cs b/src/Editors/SoftFocusEditor.cs
deleted file mode 100644
index 8f63796..0000000
--- a/src/Editors/SoftFocusEditor.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * SoftFocusEditor.cs
- *
- * Author(s)
- * 	Ruben Vermeersch <ruben at savanne.be>
- *	Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2009 Stephane Delcroix
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using Mono.Unix;
-using Cairo;
-using Gdk;
-using Gtk;
-
-using FSpot.Widgets;
-
-
-
-
-namespace FSpot.Editors
-{
-	// TODO: This had a keybinding e. Maybe we should add it back, but did people even knew it?
-	class SoftFocusEditor : Editor
-	{
-		double radius;
-		Scale scale;
-
-		public SoftFocusEditor () : base (Catalog.GetString ("Soft Focus"), "filter-soft-focus")
-		{
-			// FIXME: need tooltip Catalog.GetString ("Create a soft focus visual effect")
-			HasSettings = true;
-		}
-
-		public override Widget ConfigurationWidget ()
-		{
-			scale = new HScale (0, 1, .01);
-			scale.Value = 0.5;
-			scale.ValueChanged += HandleValueChanged;
-			return scale;
-		}
-
-
-		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
-			return ProcessImpl (input, input_profile, false);
-		}
-
-		protected override Pixbuf ProcessFast (Pixbuf input, Cms.Profile input_profile)
-		{
-			return ProcessImpl (input, input_profile, true);
-		}
-
-
-		private Pixbuf ProcessImpl (Pixbuf input, Cms.Profile input_profile, bool fast) {
-			Pixbuf result;
-			using (ImageInfo info = new ImageInfo (input)) {
-				using (Widgets.SoftFocus soft = new Widgets.SoftFocus (info)) {
-					soft.Radius = radius;
-	
-					using (MemorySurface surface = new MemorySurface (Format.Argb32,
-										   input.Width,
-										   input.Height)) {
-	
-						using (Context ctx = new Context (surface)) {
-							soft.Apply (ctx, info.Bounds);
-						}
-
-						result = MemorySurface.CreatePixbuf (surface);
-						surface.Flush ();
-					}
-				}
-			}
-			return result;
-		}
-
-		private void HandleValueChanged (object sender, System.EventArgs args)
-		{
-			radius = scale.Value;
-			UpdatePreview ();
-		}
-	}
-}
diff --git a/src/Editors/TiltEditor.cs b/src/Editors/TiltEditor.cs
deleted file mode 100644
index 593e87e..0000000
--- a/src/Editors/TiltEditor.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * FSpot.Editors.TiltEditor.cs
- *
- * Author(s)
- * 	Ruben Vermeersch <ruben at savanne.be>
- *	Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2009 Stephane Delcroix
- * 
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Mono.Unix;
-
-using Gdk;
-using Gtk;
-using Cairo;
-
-using FSpot.Widgets;
-
-namespace FSpot.Editors
-{
-	// TODO: there were keybindings (left/right) to adjust tilt, maybe they should be added back.
-	class TiltEditor : Editor
-	{
-		double angle;
-		Scale scale;
-
-		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 ()
-		{
-			scale = new HScale (-45, 45, 1);
-			scale.Value = 0.0;
-			scale.ValueChanged += HandleValueChanged;
-			return scale;
-		}
-
-
-		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile) {
-			return ProcessImpl (input, input_profile, false);
-		}
-
-		protected override Pixbuf ProcessFast (Pixbuf input, Cms.Profile input_profile)
-		{
-			return ProcessImpl (input, input_profile, true);
-		}
-
-
-		private Pixbuf ProcessImpl (Pixbuf input, Cms.Profile input_profile, bool fast) {
-			Pixbuf result;
-			using (ImageInfo info = new ImageInfo (input)) {
-				using (MemorySurface surface = new MemorySurface (Format.Argb32,
-									   input.Width,
-									   input.Height)) {
-					using (Context ctx = new Context (surface)) {
-						ctx.Matrix = info.Fill (info.Bounds, angle);
-						using (SurfacePattern p = new SurfacePattern (info.Surface)) {
-							if (fast) 
-								p.Filter =  Filter.Fast;
-							ctx.Source = p;
-							ctx.Paint ();
-						}
-						result = MemorySurface.CreatePixbuf (surface);
-						surface.Flush ();
-					}
-				}
-			}
-			return result;
-		}
-
-		private void HandleValueChanged (object sender, System.EventArgs args)
-		{
-			angle = scale.Value * Math.PI / -180;
-			UpdatePreview ();
-		}
-	}
-}
diff --git a/src/ExportStore.cs b/src/ExportStore.cs
deleted file mode 100644
index c2b56db..0000000
--- a/src/ExportStore.cs
+++ /dev/null
@@ -1,146 +0,0 @@
-using Gdk;
-using Gtk;
-using Mono.Data.SqliteClient;
-using System.Collections;
-using System.IO;
-using System;
-using Banshee.Database;
-using FSpot;
-
-public class ExportItem : DbItem {
-
-    private uint image_id;
-    public uint ImageId {
-        get { return image_id; }
-        set { image_id = value; }
-    }
-
-    private uint image_version_id;
-    public uint ImageVersionId {
-        get { return image_version_id; }
-        set { image_version_id = value; }
-    }
-
-    private string export_type;
-    public string ExportType {
-        get { return export_type; }
-        set { export_type = value; }
-    }
-
-    private string export_token;
-    public string ExportToken {
-        get { return export_token; }
-        set { export_token = value; }
-    }
-
-    public ExportItem (uint id, uint image_id, uint image_version_id, string export_type, string export_token) : base (id)
-    {
-        this.image_id = image_id;
-        this.image_version_id = image_version_id;
-        this.export_type = export_type;
-        this.export_token = export_token;
-    }
-}
-
-public class ExportStore : DbStore<ExportItem> {
-	
-	public const string FlickrExportType = "fspot:Flickr";
-	public const string OldFolderExportType = "fspot:Folder"; //This is obsolete and meant to be remove once db reach rev4
-	public const string FolderExportType = "fspot:FolderUri";
-	public const string PicasaExportType = "fspot:Picasa";
-	public const string SmugMugExportType = "fspot:SmugMug";
-	public const string Gallery2ExportType = "fspot:Gallery2";
-
-	private void CreateTable ()
-	{
- 		Database.ExecuteNonQuery (
-			"CREATE TABLE exports (\n" +
-			"	id			INTEGER PRIMARY KEY NOT NULL, \n" +
-			"	image_id		INTEGER NOT NULL, \n" +
-			"	image_version_id	INTEGER NOT NULL, \n" +
-			"	export_type		TEXT NOT NULL, \n" +
-			"	export_token		TEXT NOT NULL\n" +
-			")");
-	}
-
-	private ExportItem LoadItem (SqliteDataReader 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 ());
-	}
-	
-	private void LoadAllItems ()
-	{
-		SqliteDataReader reader = Database.Query("SELECT id, image_id, image_version_id, export_type, export_token FROM exports");
-
-		while (reader.Read ()) {
-                    AddToCache (LoadItem (reader));
-		}
-
-		reader.Close ();
-	}
-
-	public ExportItem Create (uint image_id, uint image_version_id, string export_type, string export_token)
-	{
-		int id = Database.Execute(new DbCommand("INSERT INTO exports (image_id, image_version_id, export_type, export_token) VALUES (:image_id, :image_version_id, :export_type, :export_token)",
-		"image_id", image_id, "image_version_id", image_version_id, "export_type", export_type, "export_token", export_token));
-		
-		ExportItem item = new ExportItem ((uint)id, image_id, image_version_id, export_type, export_token);
-
-		AddToCache (item);
-		EmitAdded (item);
-
-		return item;
-	}
-	
-	public override void Commit (ExportItem item)
-	{
-		Database.ExecuteNonQuery(new DbCommand("UPDATE exports SET image_id = :image_id, image_version_id = :image_version_id, export_type = :export_type SET export_token = :export_token WHERE id = :item_id", 
-                    "item_id", item.Id, "image_id", item.ImageId, "image_version_id", item.ImageVersionId, "export_type", item.ExportType, "export_token", item.ExportToken));
-		
-		EmitChanged (item);
-	}
-	
-	public override ExportItem Get (uint id)
-	{
-            // we never use this
-            return null;
-	}
-
-	public ArrayList GetByImageId (uint image_id, uint image_version_id)
-	{
-        
-		SqliteDataReader reader = Database.Query(new DbCommand("SELECT id, image_id, image_version_id, export_type, export_token FROM exports WHERE image_id = :image_id AND image_version_id = :image_version_id", 
-                    "image_id", image_id, "image_version_id", image_version_id));
-		ArrayList list = new ArrayList ();
-		while (reader.Read ()) {
-			list.Add (LoadItem (reader));
-		}
-		reader.Close ();
-
-		return list;
-	}
-	
-	public override void Remove (ExportItem item)
-	{
-		RemoveFromCache (item);
-
-		Database.ExecuteNonQuery(new DbCommand("DELETE FROM exports WHERE id = :item_id", "item_id", item.Id));
-
-		EmitRemoved (item);
-	}
-
-	// Constructor
-
-	public ExportStore (QueuedSqliteDatabase database, bool is_new)
-		: base (database, true)
-	{
-		if (is_new || !Database.TableExists ("exports"))
-			CreateTable ();
-		else
-			LoadAllItems ();
-	}
-}
diff --git a/src/Extensions/ComplexMenuItemNode.cs b/src/Extensions/ComplexMenuItemNode.cs
deleted file mode 100644
index 84ea3a5..0000000
--- a/src/Extensions/ComplexMenuItemNode.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * FSpot.Extensions.ComplexMenuItemNode
- *
- * Author(s)
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using Mono.Addins;
-using FSpot.Widgets;
-using System;
-
-namespace FSpot.Extensions
-{
-	[ExtensionNode ("ComplexMenuItem")]
-	public class ComplexMenuItemNode : MenuNode
-	{
-		[NodeAttribute]
-		protected string widget_type;
-
-		[NodeAttribute]
-		protected string command_type;
-
-		ICommand cmd;
-
-		public override Gtk.MenuItem GetMenuItem (object parent)
-		{
-			ComplexMenuItem item = System.Activator.CreateInstance (Type.GetType (widget_type), parent) as ComplexMenuItem;
-			cmd = (ICommand) Addin.CreateInstance (command_type);
-			
-			if (item != null)
-				item.Changed += OnChanged;
-			return item;
-		}
-
-		private void OnChanged (object o, EventArgs e)
-		{
-			if (cmd != null)
-				cmd.Run (o, e);
-		}
-	}
-
-}
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
new file mode 100644
index 0000000..27f44d2
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.BW/FSpot.Addins.Editors/BWEditor.cs
@@ -0,0 +1,127 @@
+/*
+ * BWEditor.cs
+ *
+ * Author(s)
+ * 	Stephane Delcroix  (stephane at delcroix.org)
+ *
+ * Copyright (c) 2009 Novell, Inc.
+ *
+ * This is open source software. See COPYING for details.
+ */
+
+using System;
+using FSpot;
+using FSpot.Editors;
+using Gtk;
+using Gdk;
+using Mono.Unix;
+using Mono.Simd;
+using Hyena;
+
+namespace FSpot.Addins.Editors {
+	class BWEditor : Editor {
+		public BWEditor () : base (Catalog.GetString ("Convert to B/W"), null) {
+			CanHandleMultiple = false;
+			HasSettings = true;
+			ApplyLabel = Catalog.GetString ("Apply");
+		}
+
+/*		static bool enhanced_support = EnhancedSimdSupport ();
+		static bool EnhancedSimdSupport () { //require sse3
+			return SimdRuntime.IsMethodAccelerated (typeof (VectorOperations), "HorizontalAdd", new Type[] {typeof (Vector4f), typeof (Vector4f)})
+			       && SimdRuntime.IsMethodAccelerated (typeof (Vector4f), "op_Multiply");
+		}*/
+
+		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile)
+		{
+			uint timer = Log.DebugTimerStart ();
+			if (input.BitsPerSample != 8) {
+				Log.Warning ("unsupported pixbuf format");
+				return (Pixbuf)input.Clone ();
+			}
+			Pixbuf output = new Pixbuf (input.Colorspace, input.HasAlpha, input.BitsPerSample, input.Width, input.Height);
+			Vector4f multiply = new Vector4f ((float)(r.Value/100.0), (float)(g.Value/100.0), (float)(b.Value/100.0), 0);
+			Normalize (ref multiply);
+
+			bool has_alpha = input.HasAlpha;
+			int chan = input.NChannels;
+			int rowstride_in = input.Rowstride;
+			int rowstride_out = output.Rowstride;
+			Vector4f v_in;
+			Vector4f v_out = new Vector4f (0);
+			float[] fcurve = new float [256];
+			c.GetVector (fcurve.Length, fcurve);
+			byte[] curve = new byte [fcurve.Length];
+			for (int i = 0; i < fcurve.Length; i++)
+				curve[i] = (byte)fcurve[i];
+			unsafe {
+				byte *pix_in = (byte *)input.Pixels;
+				byte *pix_out = (byte *)output.Pixels;
+				for (int i=0; i < input.Height; i++)
+					for (int j=0; j<input.Width; j++) {
+						v_in = new Vector4f (pix_in[i*rowstride_in + j*chan],
+								     pix_in[i*rowstride_in + j*chan + 1],
+								     pix_in[i*rowstride_in + j*chan + 2],
+								     0);
+						Desaturate (ref v_in, ref multiply, ref v_out);
+						pix_out[i*rowstride_out + j*chan] = curve [unchecked ((byte)v_out.X)];
+						pix_out[i*rowstride_out + j*chan + 1] = curve [unchecked ((byte)v_out.Y)];
+						pix_out[i*rowstride_out + j*chan + 2] = curve [unchecked ((byte)v_out.Z)];
+						if (has_alpha)
+							pix_out[i*rowstride_out + j*chan + 3] = pix_in[i*rowstride_in + j*chan + 3];
+					}
+			}
+			Log.DebugTimerPrint (timer, "Processing took {0}");
+			return output;
+		}
+
+		static void Desaturate (ref Vector4f input, ref Vector4f chan_multiplier, ref Vector4f output)
+		{
+			Vector4f temp = input * chan_multiplier;	//(r1,g1,b1,0) = (r,g,b,a) * (rx, gx, bx, 0)
+			temp = temp.HorizontalAdd (temp);		//(r1+g1, b1+0, r1+g1, b1+0)
+			output = temp.HorizontalAdd (temp);		//(r1+g1+b1+0, r1+g1+b1+0, ..., ...)
+		}
+
+		static void Normalize (ref Vector4f v)
+		{
+			float sum = v.X + v.Y + v.Z;
+			v /= new Vector4f (sum);
+		}
+
+		HScale r, g, b;
+		Curve c;
+
+		public override Widget ConfigurationWidget ()
+		{
+			VBox h = new VBox ();
+			r = new HScale (0, 100, 1);
+			r.ModifyBg (StateType.Selected, new Color (0xff, 0, 0));
+			r.Value = 80;
+			r.ValueChanged += SettingsChanged;
+			h.Add (r);
+			g = new HScale (0, 100, 1);
+			g.ModifyBg (StateType.Selected, new Color (0, 0xff, 0));
+			g.Value = 10;
+			g.ValueChanged += SettingsChanged;
+			h.Add (g);
+			b = new HScale (0, 100, 1);
+			b.ModifyBg (StateType.Selected, new Color (0, 0, 0xff));
+			b.Value = 10;
+			b.ValueChanged += SettingsChanged;
+			h.Add (b);
+			c = new Curve ();
+			c.CurveType = CurveType.Spline;
+			c.SetRange (0, 255, 0, 255);
+			h.Add (c);
+			Button btn = new Button (Gtk.Stock.Refresh);
+			btn.Clicked += delegate {UpdatePreview ();};
+			h.Add (btn);
+			return h;
+		}
+
+		void SettingsChanged (object sender, EventArgs e)
+		{
+			UpdatePreview ();
+		}
+	}
+}
diff --git a/src/Extensions/Editors/FSpot.Editors.BW/Makefile.am b/src/Extensions/Editors/FSpot.Editors.BW/Makefile.am
new file mode 100644
index 0000000..10e5b5f
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.BW/Makefile.am
@@ -0,0 +1,11 @@
+ASSEMBLY = FSpot.Editors.BWEditor
+ASSEMBLY_BUILD_FLAGS = -unsafe
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_BWEDITOR)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Addins.Editors/BWEditor.cs
+
+RESOURCES = Resources/BWEditor.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Editors/FSpot.Editors.BW/Makefile.in b/src/Extensions/Editors/FSpot.Editors.BW/Makefile.in
new file mode 100644
index 0000000..edb64f2
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.BW/Makefile.in
@@ -0,0 +1,806 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Editors/FSpot.Editors.BW
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Editors.BWEditor
+ASSEMBLY_BUILD_FLAGS = -unsafe
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_BWEDITOR) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Addins.Editors/BWEditor.cs
+RESOURCES = Resources/BWEditor.addin.xml
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Editors/FSpot.Editors.BW/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Editors/FSpot.Editors.BW/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Editors/FSpot.Editors.BW/Resources/BWEditor.addin.xml b/src/Extensions/Editors/FSpot.Editors.BW/Resources/BWEditor.addin.xml
new file mode 100644
index 0000000..365c16c
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.BW/Resources/BWEditor.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	id="BWEditor"
+	version="0.8"
+	compatVersion="0.8"
+	name="BWEditor"
+	description="Convert to B/W with control. Require Mono 2.2."
+	author="Stephane Delcroix"
+	url="http://f-spot.org/Extensions"
+	category="Editors"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Editors">
+		<Editor editor_type = "FSpot.Addins.Editors.BWEditor"/>
+	</Extension>
+</Addin>
diff --git a/extensions/Editors/BlackoutEditor/BlackoutEditor.cs b/src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs
similarity index 100%
rename from extensions/Editors/BlackoutEditor/BlackoutEditor.cs
rename to src/Extensions/Editors/FSpot.Editors.Blackout/FSpot.Addins.Editors/BlackoutEditor.cs
diff --git a/src/Extensions/Editors/FSpot.Editors.Blackout/Makefile.am b/src/Extensions/Editors/FSpot.Editors.Blackout/Makefile.am
new file mode 100644
index 0000000..db67478
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Blackout/Makefile.am
@@ -0,0 +1,10 @@
+ASSEMBLY = FSpot.Editors.BlackoutEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_BLACKOUTEDITOR)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Addins.Editors/BlackoutEditor.cs
+
+RESOURCES = Resources/BlackoutEditor.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Editors/FSpot.Editors.Blackout/Makefile.in b/src/Extensions/Editors/FSpot.Editors.Blackout/Makefile.in
new file mode 100644
index 0000000..d7a2f56
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Blackout/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Editors/FSpot.Editors.Blackout
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Editors.BlackoutEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_BLACKOUTEDITOR) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Addins.Editors/BlackoutEditor.cs
+RESOURCES = Resources/BlackoutEditor.addin.xml
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Editors/FSpot.Editors.Blackout/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Editors/FSpot.Editors.Blackout/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Editors/FSpot.Editors.Blackout/Resources/BlackoutEditor.addin.xml b/src/Extensions/Editors/FSpot.Editors.Blackout/Resources/BlackoutEditor.addin.xml
new file mode 100644
index 0000000..97a3ed8
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Blackout/Resources/BlackoutEditor.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	id="BlackoutEditor"
+	version="0.8"
+	compatVersion="0.8"
+	name="BlackoutEditor"
+	description="Blacks out an area of the image."
+	author="Brian J. Murrell"
+	url="http://f-spot.org/Extensions"
+	category="Editors"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Editors">
+		<Editor editor_type = "FSpot.Addins.Editors.BlackoutEditor"/>
+	</Extension>
+</Addin>
diff --git a/extensions/Editors/FlipEditor/FlipEditor.cs b/src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Addins.Editors/FlipEditor.cs
similarity index 100%
rename from extensions/Editors/FlipEditor/FlipEditor.cs
rename to src/Extensions/Editors/FSpot.Editors.Flip/FSpot.Addins.Editors/FlipEditor.cs
diff --git a/src/Extensions/Editors/FSpot.Editors.Flip/Makefile.am b/src/Extensions/Editors/FSpot.Editors.Flip/Makefile.am
new file mode 100644
index 0000000..a5cbd51
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Flip/Makefile.am
@@ -0,0 +1,10 @@
+ASSEMBLY = FSpot.Editors.FlipEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FLIPEDITOR)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Addins.Editors/FlipEditor.cs
+
+RESOURCES = Resources/FlipEditor.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Editors/FSpot.Editors.Flip/Makefile.in b/src/Extensions/Editors/FSpot.Editors.Flip/Makefile.in
new file mode 100644
index 0000000..d006036
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Flip/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Editors/FSpot.Editors.Flip
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Editors.FlipEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FLIPEDITOR) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Addins.Editors/FlipEditor.cs
+RESOURCES = Resources/FlipEditor.addin.xml
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Editors/FSpot.Editors.Flip/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Editors/FSpot.Editors.Flip/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Editors/FSpot.Editors.Flip/Resources/FlipEditor.addin.xml b/src/Extensions/Editors/FSpot.Editors.Flip/Resources/FlipEditor.addin.xml
new file mode 100644
index 0000000..8accf5b
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Flip/Resources/FlipEditor.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	id="FlipEditor"
+	version="0.8"
+	compatVersion="0.8"
+	name="FlipEditor"
+	description="Flips the image horizontally."
+	author="Ruben Vermeersch"
+	url="http://f-spot.org/Extensions"
+	category="Editors"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Editors">
+		<Editor editor_type = "FSpot.Addins.Editors.FlipEditor"/>
+	</Extension>
+</Addin>
diff --git a/extensions/Editors/PixelateEditor/PixelateEditor.cs b/src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs
similarity index 100%
rename from extensions/Editors/PixelateEditor/PixelateEditor.cs
rename to src/Extensions/Editors/FSpot.Editors.Pixelate/FSpot.Addins.Editors/PixelateEditor.cs
diff --git a/src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile.am b/src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile.am
new file mode 100644
index 0000000..d66d724
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile.am
@@ -0,0 +1,10 @@
+ASSEMBLY = FSpot.Editors.PixelateEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_PIXELATEEDITOR)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Addins.Editors/PixelateEditor.cs
+
+RESOURCES = Resources/PixelateEditor.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile.in b/src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile.in
new file mode 100644
index 0000000..ed196e5
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Editors/FSpot.Editors.Pixelate
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Editors.PixelateEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_PIXELATEEDITOR) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Addins.Editors/PixelateEditor.cs
+RESOURCES = Resources/PixelateEditor.addin.xml
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Editors/FSpot.Editors.Pixelate/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Editors/FSpot.Editors.Pixelate/Resources/PixelateEditor.addin.xml b/src/Extensions/Editors/FSpot.Editors.Pixelate/Resources/PixelateEditor.addin.xml
new file mode 100644
index 0000000..e45741c
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Pixelate/Resources/PixelateEditor.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	id="PixelateEditor"
+	version="0.8"
+	compatVersion="0.8"
+	name="PixelateEditor"
+	description="Pixelates an area of the image."
+	author="Brian J. Murrell"
+	url="http://f-spot.org/Extensions"
+	category="Editors"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Editors">
+		<Editor editor_type = "FSpot.Addins.Editors.PixelateEditor"/>
+	</Extension>
+</Addin>
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
new file mode 100644
index 0000000..d9b6785
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Resize/FSpot.Addins.Editors/ResizeEditor.cs
@@ -0,0 +1,46 @@
+/*
+ * ResizeEditor.cs
+ *
+ * Author(s)
+ * 	Stephane Delcroix  (stephane at delcroix.org)
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using FSpot;
+using FSpot.Editors;
+using FSpot.Imaging;
+using Gtk;
+using Gdk;
+using Mono.Unix;
+
+namespace FSpot.Addins.Editors {
+	class ResizeEditor : Editor {
+		SpinButton size;
+
+		public ResizeEditor () : base (Catalog.GetString ("Resize"), null) {
+			CanHandleMultiple = false;
+			HasSettings = true;
+		}
+
+		protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile)
+		{
+			Pixbuf output = (Pixbuf) input.Clone ();
+			double ratio = (double)size.Value / Math.Max (output.Width, output.Height);
+			return output.ScaleSimple ((int)(output.Width * ratio), (int)(output.Height * ratio), InterpType.Bilinear);
+		}
+
+		public override Widget ConfigurationWidget ()
+		{
+			int max;
+			using (var img = ImageFile.Create (State.Items[0].DefaultVersion.Uri))
+				using (Pixbuf p = img.Load ())
+					max = Math.Max (p.Width, p.Height);
+
+			size = new SpinButton (128, max, 10);
+			size.Value = max;
+			return size;
+		}
+	}
+}
diff --git a/src/Extensions/Editors/FSpot.Editors.Resize/Makefile.am b/src/Extensions/Editors/FSpot.Editors.Resize/Makefile.am
new file mode 100644
index 0000000..bf14989
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Resize/Makefile.am
@@ -0,0 +1,10 @@
+ASSEMBLY = FSpot.Editors.ResizeEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RESIZEEDITOR)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Addins.Editors/ResizeEditor.cs
+
+RESOURCES = Resources/ResizeEditor.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Editors/FSpot.Editors.Resize/Makefile.in b/src/Extensions/Editors/FSpot.Editors.Resize/Makefile.in
new file mode 100644
index 0000000..038aa33
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Resize/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Editors/FSpot.Editors.Resize
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Editors.ResizeEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RESIZEEDITOR) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Addins.Editors/ResizeEditor.cs
+RESOURCES = Resources/ResizeEditor.addin.xml
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Editors/FSpot.Editors.Resize/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Editors/FSpot.Editors.Resize/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Editors/FSpot.Editors.Resize/Resources/ResizeEditor.addin.xml b/src/Extensions/Editors/FSpot.Editors.Resize/Resources/ResizeEditor.addin.xml
new file mode 100644
index 0000000..77ee52c
--- /dev/null
+++ b/src/Extensions/Editors/FSpot.Editors.Resize/Resources/ResizeEditor.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	id="ResizeEditor"
+	version="0.8"
+	compatVersion="0.8"
+	name="ResizeEditor"
+	description="Resize the image"
+	author="Stephane Delcroix"
+	url="http://f-spot.org/Extensions"
+	category="Editors"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Editors">
+		<Editor editor_type = "FSpot.Addins.Editors.ResizeEditor"/>
+	</Extension>
+</Addin>
diff --git a/src/Extensions/Editors/Makefile.am b/src/Extensions/Editors/Makefile.am
new file mode 100644
index 0000000..88421ec
--- /dev/null
+++ b/src/Extensions/Editors/Makefile.am
@@ -0,0 +1,6 @@
+SUBDIRS = \
+	FSpot.Editors.Blackout \
+	FSpot.Editors.BW \
+	FSpot.Editors.Flip \
+	FSpot.Editors.Pixelate \
+	FSpot.Editors.Resize
diff --git a/src/Extensions/Editors/Makefile.in b/src/Extensions/Editors/Makefile.in
new file mode 100644
index 0000000..345cd9c
--- /dev/null
+++ b/src/Extensions/Editors/Makefile.in
@@ -0,0 +1,676 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/Extensions/Editors
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+	FSpot.Editors.Blackout \
+	FSpot.Editors.BW \
+	FSpot.Editors.Flip \
+	FSpot.Editors.Pixelate \
+	FSpot.Editors.Resize
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Editors/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Editors/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
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
new file mode 100644
index 0000000..2827305
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExport.cs
@@ -0,0 +1,165 @@
+/*
+ * CDExport.cs
+ *
+ * Authors:
+ *   Larry Ewing <lewing at novell.com>
+ *   Lorenzo Milesi <maxxer at yetopen.it>
+ *
+ * Copyright (c) 2007-2009 Novell, Inc.
+ *
+ * This is free software. See COPYING for details.
+ */
+
+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;
+
+namespace FSpot.Exporters.CD {
+	public class CDExport : FSpot.Extensions.IExporter {
+		IBrowsableCollection selection;
+
+		System.Uri dest = new System.Uri ("burn:///");
+
+		int photo_index;
+		bool clean;
+
+		CDExportDialog dialog;
+		ThreadProgressDialog progress_dialog;
+		System.Threading.Thread command_thread;
+
+		public CDExport ()
+		{
+		}
+
+		public void Run (IBrowsableCollection selection)
+		{
+			this.selection = selection;
+			dialog = new CDExportDialog (selection, dest);
+			//LoadHistory ();
+
+			if (dialog.Run () != (int)ResponseType.Ok) {
+				dialog.Destroy ();
+				return;
+			}
+
+			clean = dialog.Clean;
+
+			command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (Transfer));
+			command_thread.Name = Catalog.GetString ("Transferring Pictures");
+
+			progress_dialog = new ThreadProgressDialog (command_thread, selection.Count);
+			progress_dialog.Start ();
+
+			dialog.Destroy ();
+		}
+
+		[DllImport ("libc")]
+		extern static int system (string program);
+
+//		//FIXME: rewrite this as a Filter
+	        public static GLib.File UniqueName (System.Uri path, string shortname)
+	        {
+	                int i = 1;
+			GLib.File dest = FileFactory.NewForUri (new System.Uri (path, shortname));
+	                while (dest.Exists) {
+	                        string numbered_name = System.String.Format ("{0}-{1}{2}",
+	                                                              System.IO.Path.GetFileNameWithoutExtension (shortname),
+	                                                              i++,
+	                                                              System.IO.Path.GetExtension (shortname));
+
+				dest = FileFactory.NewForUri (new System.Uri (path, numbered_name));
+	                }
+
+	                return dest;
+	        }
+
+		void Clean (System.Uri path)
+		{
+			GLib.File source = FileFactory.NewForUri (path);
+			foreach (GLib.FileInfo info in source.EnumerateChildren ("*", FileQueryInfoFlags.None, null)) {
+				if (info.FileType == FileType.Directory)
+					Clean (new System.Uri(path, info.Name + "/"));
+				FileFactory.NewForUri (new System.Uri (path, info.Name)).Delete ();
+			}
+		}
+
+		public void Transfer () {
+			try {
+				bool result = true;
+
+				if (clean)
+					Clean (dest);
+
+				foreach (IBrowsableItem photo in selection.Items) {
+
+				//FIXME need to implement the uniquename as a filter
+					using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
+						GLib.File source = FileFactory.NewForUri (request.Current.ToString ());
+						GLib.File target = UniqueName (dest, photo.Name);
+						FileProgressCallback cb = Progress;
+
+						progress_dialog.Message = System.String.Format (Catalog.GetString ("Transferring picture \"{0}\" To CD"), photo.Name);
+						progress_dialog.Fraction = photo_index / (double) selection.Count;
+						progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of {1}"),
+											     photo_index, selection.Count);
+
+						result &= source.Copy (target,
+									FileCopyFlags.None,
+									null,
+									cb);
+					}
+					photo_index++;
+				}
+
+				// FIXME the error dialog here is ugly and needs improvement when strings are not frozen.
+				if (result) {
+					progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
+					progress_dialog.Fraction = 1.0;
+					progress_dialog.ProgressText = Catalog.GetString ("Transfer Complete");
+					progress_dialog.ButtonLabel = Gtk.Stock.Ok;
+					progress_dialog.Hide ();
+					system ("brasero -n");
+				} else {
+					throw new System.Exception (System.String.Format ("{0}{3}{1}{3}{2}",
+											  progress_dialog.Message,
+											  Catalog.GetString ("Error While Transferring"),
+											  result.ToString (),
+											  System.Environment.NewLine));
+				}
+
+			} catch (System.Exception e) {
+				Hyena.Log.DebugException (e);
+				progress_dialog.Message = e.ToString ();
+				progress_dialog.ProgressText = Catalog.GetString ("Error Transferring");
+				return;
+			}
+			ThreadAssist.ProxyToMain (() => {
+				progress_dialog.Destroy ();
+			});
+		}
+
+		private void Progress (long current_num_bytes, long total_num_bytes)
+		{
+			progress_dialog.ProgressText = Catalog.GetString ("copying...");
+
+			if (total_num_bytes > 0)
+				progress_dialog.Fraction = current_num_bytes / (double)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
new file mode 100644
index 0000000..6295798
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.CD/FSpot.Exporters.CD/CDExportDialog.cs
@@ -0,0 +1,109 @@
+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;
+
+namespace FSpot.Exporters.CD
+{
+	class CDExportDialog : BuilderDialog {
+		Gtk.Window listwindow;
+		System.Uri dest;
+
+        [GtkBeans.Builder.Object] Button browse_button;
+		[GtkBeans.Builder.Object] ScrolledWindow thumb_scrolledwindow;
+		[GtkBeans.Builder.Object] CheckButton remove_check;
+		[GtkBeans.Builder.Object] Label size_label;
+		[GtkBeans.Builder.Object] Frame previous_frame;
+
+		public bool Clean {
+			get { return remove_check.Active; }
+		}
+
+		public CDExportDialog (IBrowsableCollection selection, System.Uri dest) : base (Assembly.GetExecutingAssembly (), "CDExport.ui", "cd_export_dialog")
+		{
+			this.dest = dest;
+
+			// Calculate the total size
+			long total_size = 0;
+			string path;
+			System.IO.FileInfo file_info;
+
+			foreach (IBrowsableItem item in selection.Items) {
+				path = item.DefaultVersion.Uri.LocalPath;
+				if (System.IO.File.Exists (path)) {
+					file_info = new System.IO.FileInfo (path);
+					total_size += file_info.Length;
+				}
+			}
+
+			FSpot.Widgets.IconView view = new FSpot.Widgets.IconView (selection);
+			view.DisplayDates = false;
+			view.DisplayTags = false;
+			view.DisplayRatings = false;
+
+			this.Modal = false;
+			this.TransientFor = null;
+
+			size_label.Text = Format.SizeForDisplay (total_size);
+
+			thumb_scrolledwindow.Add (view);
+			this.ShowAll ();
+
+			previous_frame.Visible = IsEmpty (dest);
+
+            browse_button.Clicked += HandleBrowseExisting;
+
+		}
+
+		bool IsEmpty (System.Uri path)
+		{
+			foreach (GLib.FileEnumerator f in FileFactory.NewForUri (path).EnumerateChildren ("*", FileQueryInfoFlags.None, null))
+				return true;
+			return false;
+		}
+
+		void HandleBrowseExisting (object sender, System.EventArgs args)
+		{
+			if (listwindow == null) {
+				listwindow = new Gtk.Window ("Pending files to write");
+				listwindow.SetDefaultSize (400, 200);
+				listwindow.DeleteEvent += delegate (object o, Gtk.DeleteEventArgs e) {(o as Gtk.Window).Destroy (); listwindow = null;};
+				Gtk.TextView view = new Gtk.TextView ();
+				Gtk.ScrolledWindow sw = new Gtk.ScrolledWindow ();
+				sw.Add (view);
+				listwindow.Add (sw);
+			} else {
+				((listwindow.Child as Gtk.ScrolledWindow).Child as Gtk.TextView).Buffer.Text = "";
+			}
+			ListAll (((listwindow.Child as Gtk.ScrolledWindow).Child as Gtk.TextView).Buffer, dest);
+			listwindow.ShowAll ();
+		}
+
+		void ListAll (Gtk.TextBuffer t, System.Uri path)
+		{
+			GLib.File f = FileFactory.NewForUri (path);
+			foreach (GLib.FileInfo info in f.EnumerateChildren ("*", FileQueryInfoFlags.None, null)) {
+				t.Text += new System.Uri (path, info.Name).ToString () + Environment.NewLine;
+				if (info.FileType == FileType.Directory)
+					ListAll (t, new System.Uri (path, info.Name + "/"));
+			}
+		}
+		
+		~CDExportDialog ()
+		{
+			if (listwindow != null)
+				listwindow.Destroy ();
+		}
+
+	}
+}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.CD/Makefile.am b/src/Extensions/Exporters/FSpot.Exporters.CD/Makefile.am
new file mode 100644
index 0000000..08aba01
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.CD/Makefile.am
@@ -0,0 +1,14 @@
+ASSEMBLY = FSpot.Exporters.CD
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_CDEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	FSpot.Exporters.CD/CDExport.cs \
+	FSpot.Exporters.CD/CDExportDialog.cs
+
+RESOURCES =  \
+	Resources/CDExport.addin.xml \
+	Resources/CDExport.ui
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Exporters/FSpot.Exporters.CD/Makefile.in b/src/Extensions/Exporters/FSpot.Exporters.CD/Makefile.in
new file mode 100644
index 0000000..a1d2cac
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.CD/Makefile.in
@@ -0,0 +1,811 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Exporters/FSpot.Exporters.CD
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.CD
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_CDEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	FSpot.Exporters.CD/CDExport.cs \
+	FSpot.Exporters.CD/CDExportDialog.cs
+
+RESOURCES = \
+	Resources/CDExport.addin.xml \
+	Resources/CDExport.ui
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.CD/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.CD/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.addin.xml b/src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.addin.xml
new file mode 100644
index 0000000..8aa7661
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.addin.xml
@@ -0,0 +1,18 @@
+<Addin namespace="FSpot"
+	version="0.8"
+	compatVersion="0.8"
+	name="CD Export"
+	description="This extension allows you to burn your photos to CD."
+	author="F-Spot team"
+	url="http://f-spot.org"
+	defaultEnabled="true"
+	category="Export">
+
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+
+	<Extension path = "/FSpot/Menus/Exports">
+		<ExportMenuItem id="CD" _label = "_CD..." class = "FSpot.Exporters.CD.CDExport" />
+	</Extension>
+</Addin>
diff --git a/src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui b/src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui
new file mode 100644
index 0000000..b3468ed
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.CD/Resources/CDExport.ui
@@ -0,0 +1,210 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.12 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkDialog" id="cd_export_dialog">
+    <property name="visible">True</property>
+    <property name="title" translatable="yes">Create CD</property>
+    <property name="type_hint">dialog</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox13">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkVBox" id="vbox42">
+            <property name="visible">True</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <object class="GtkFrame" id="frame33">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment37">
+                    <property name="visible">True</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkVBox" id="vbox43">
+                        <property name="visible">True</property>
+                        <property name="orientation">vertical</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <object class="GtkScrolledWindow" id="thumb_scrolledwindow">
+                            <property name="width_request">512</property>
+                            <property name="height_request">350</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hscrollbar_policy">automatic</property>
+                            <property name="vscrollbar_policy">automatic</property>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkFrame" id="previous_frame">
+                            <property name="visible">True</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">none</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment1">
+                                <property name="visible">True</property>
+                                <property name="left_padding">12</property>
+                                <child>
+                                  <object class="GtkHBox" id="hbox1">
+                                    <property name="visible">True</property>
+                                    <property name="spacing">12</property>
+                                    <child>
+                                      <object class="GtkCheckButton" id="remove_check">
+                                        <property name="label" translatable="yes">_Write only these photos to CD</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="draw_indicator">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="browse_button">
+                                        <property name="label" translatable="yes">_Browse Previously Scheduled Files</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label1">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes"><b><i>There are some previously scheduled items to write</i></b></property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkHBox" id="hbox85">
+                            <property name="visible">True</property>
+                            <child>
+                              <object class="GtkLabel" id="label210">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Size of the exported selection:</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="size_label">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Size</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label98">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes"><b>Photos to Burn</b></property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area13">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="cancelbutton6">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="export_button">
+                <property name="label" translatable="yes">_Export</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">cancelbutton6</action-widget>
+      <action-widget response="-5">export_button</action-widget>
+    </action-widgets>
+  </object>
+</interface>
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
new file mode 100644
index 0000000..c16e66f
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExport.cs
@@ -0,0 +1,389 @@
+/*
+ * FacebookExport.cs
+ *
+ * Authors:
+ *   George Talusan <george at convolve.ca>
+ *   Stephane Delcroix <stephane at delcroix.org>
+ *   Jim Ramsay <i.am at jimramsay.com>
+ *
+ * Copyright (C) 2007 George Talusan
+ * Copyright (c) 2008-2009 Novell, Inc.
+ * Copyright (c) 2009 Jim Rasay
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Net;
+using System.IO;
+using System.Text;
+using System.Threading;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Web;
+using Mono.Unix;
+using Gtk;
+using Gnome.Keyring;
+using GtkBeans;
+
+using FSpot;
+using FSpot.Core;
+using Hyena;
+using Hyena.Widgets;
+using FSpot.UI.Dialog;
+using FSpot.Extensions;
+using FSpot.Filters;
+using FSpot.Platform;
+
+using Mono.Facebook;
+
+namespace FSpot.Exporters.Facebook
+{
+	internal class FacebookAccount
+	{
+		static string keyring_item_name = "Facebook Account";
+
+		static string api_key = "c23d1683e87313fa046954ea253a240e";
+
+		/* INSECURE! According to:
+		 *
+		 * http://wiki.developers.facebook.com/index.php/Desktop_App_Auth_Process
+		 *
+		 * We should *NOT* put our secret code here, but do an external
+		 * authorization using our own PHP page somewhere.
+		 */
+		static string secret = "743e9a2e6a1c35ce961321bceea7b514";
+
+		FacebookSession facebookSession;
+		bool connected = false;
+
+		public FacebookAccount ()
+		{
+			SessionInfo info = ReadSessionInfo ();
+			if (info != null) {
+				facebookSession = new FacebookSession (api_key, info);
+				try {
+					/* This basically functions like a ping to ensure the
+					 * session is still valid:
+					 */
+					facebookSession.HasAppPermission("offline_access");
+					connected = true;
+				} catch (FacebookException) {
+					connected = false;
+				}
+			}
+		}
+
+		public Uri GetLoginUri ()
+		{
+			FacebookSession session = new FacebookSession (api_key, secret);
+			Uri uri = session.CreateToken();
+			facebookSession = session;
+			connected = false;
+			return uri;
+		}
+
+		public bool RevokePermission (string permission)
+		{
+			return facebookSession.RevokeAppPermission(permission);
+		}
+
+		public bool GrantPermission (string permission, Window parent)
+		{
+			if (facebookSession.HasAppPermission(permission))
+				return true;
+
+			Uri uri = facebookSession.GetGrantUri (permission);
+			GtkBeans.Global.ShowUri (parent.Screen, uri.ToString ());
+
+			HigMessageDialog mbox = new HigMessageDialog (parent, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
+					Gtk.MessageType.Info, Gtk.ButtonsType.Ok, Catalog.GetString ("Waiting for authorization"),
+					Catalog.GetString ("F-Spot will now launch your browser so that you can enable the permission you just selected.\n\nOnce you are directed by Facebook to return to this application, click \"Ok\" below." ));
+
+			mbox.Run ();
+			mbox.Destroy ();
+
+			return facebookSession.HasAppPermission(permission);
+		}
+
+		public bool HasPermission(string permission)
+		{
+			return facebookSession.HasAppPermission(permission);
+		}
+
+		public FacebookSession Facebook
+		{
+			get { return facebookSession; }
+		}
+
+		public bool Authenticated
+		{
+			get { return connected; }
+		}
+
+		bool SaveSessionInfo (SessionInfo info)
+		{
+			string keyring;
+			try {
+				keyring = Ring.GetDefaultKeyring();
+			} catch (KeyringException e) {
+				Log.DebugException (e);
+				return false;
+			}
+
+			Hashtable attribs = new Hashtable();
+			attribs["name"] = keyring_item_name;
+			attribs["uid"] = info.uid.ToString ();
+			attribs["session_key"] = info.session_key;
+			try {
+				Ring.CreateItem (keyring, ItemType.GenericSecret, keyring_item_name, attribs, info.secret, true);
+			} catch (KeyringException e) {
+				Log.DebugException (e);
+				return false;
+			}
+
+			return true;
+		}
+
+		SessionInfo ReadSessionInfo ()
+		{
+			SessionInfo info = null;
+
+			Hashtable request_attributes = new Hashtable ();
+			request_attributes["name"] = keyring_item_name;
+			try {
+				foreach (ItemData result in Ring.Find (ItemType.GenericSecret, request_attributes)) {
+					if (!result.Attributes.ContainsKey ("name") ||
+						!result.Attributes.ContainsKey ("uid") ||
+						!result.Attributes.ContainsKey ("session_key") ||
+						(result.Attributes["name"] as string) != keyring_item_name)
+							continue;
+
+					string session_key = (string)result.Attributes["session_key"];
+					long uid = Int64.Parse((string)result.Attributes["uid"]);
+					string secret = result.Secret;
+					info = new SessionInfo (session_key, uid, secret);
+					break;
+				}
+			} catch (KeyringException e) {
+				Log.DebugException (e);
+			}
+
+			return info;
+		}
+
+		bool ForgetSessionInfo()
+		{
+			string keyring;
+			bool success = false;
+
+			try {
+				keyring = Ring.GetDefaultKeyring();
+			} catch (KeyringException e) {
+				Log.DebugException (e);
+				return false;
+			}
+
+			Hashtable request_attributes = new Hashtable ();
+			request_attributes["name"] = keyring_item_name;
+			try {
+				foreach (ItemData result in Ring.Find (ItemType.GenericSecret, request_attributes)) {
+					Ring.DeleteItem(keyring, result.ItemID);
+					success = true;
+				}
+			} catch (KeyringException e) {
+				Log.DebugException (e);
+			}
+
+			return success;
+		}
+
+		public bool Authenticate ()
+		{
+			if (connected)
+				return true;
+			try {
+				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) {
+				connected = false;
+				Log.DebugException (e);
+			} catch (FacebookException fe) {
+				connected = false;
+				Log.DebugException (fe);
+			}
+			return connected;
+		}
+
+		public void Deauthenticate ()
+		{
+			connected = false;
+			ForgetSessionInfo ();
+		}
+	}
+
+	internal class TagStore : ListStore
+	{
+		private List<Mono.Facebook.Tag> _tags;
+
+		private Dictionary<long, User> _friends;
+
+		public TagStore (FacebookSession session, List<Mono.Facebook.Tag> tags, Dictionary<long, User> friends) : base (typeof (string))
+		{
+			_tags = tags;
+			_friends = friends;
+
+			foreach (Mono.Facebook.Tag tag in Tags) {
+				long subject = tag.Subject;
+				User info = _friends [subject];
+				if (info == null ) {
+					try {
+						info = session.GetUserInfo (new long[] { subject }, new string[] { "first_name", "last_name" }) [0];
+					}
+					catch (FacebookException) {
+						continue;
+					}
+				}
+				AppendValues (String.Format ("{0} {1}", info.first_name ?? "", info.last_name ?? ""));
+			}
+		}
+
+		public List<Mono.Facebook.Tag> Tags
+		{
+			get { return _tags ?? new List<Mono.Facebook.Tag> (); }
+		}
+	}
+
+	public class FacebookExport : IExporter
+	{
+		private int size = 720;
+		private int max_photos_per_album = 200;
+		FacebookExportDialog dialog;
+		ThreadProgressDialog progress_dialog;
+		System.Threading.Thread command_thread;
+		Album album = null;
+
+		public FacebookExport ()
+		{
+		}
+
+		public void Run (IBrowsableCollection selection)
+		{
+
+			dialog = new FacebookExportDialog (selection);
+
+			if (selection.Items.Length > max_photos_per_album) {
+				HigMessageDialog mbox = new HigMessageDialog (dialog,
+						Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal, Gtk.MessageType.Error,
+						Gtk.ButtonsType.Ok, Catalog.GetString ("Too many images to export"),
+						String.Format (Catalog.GetString ("Facebook only permits {0} photographs per album.  Please refine your selection and try again."), max_photos_per_album));
+				mbox.Run ();
+				mbox.Destroy ();
+				return;
+			}
+
+			if (dialog.Run () != (int)ResponseType.Ok) {
+				dialog.Destroy ();
+				return;
+			}
+
+			if (dialog.CreateAlbum) {
+				string name = dialog.AlbumName;
+				if (String.IsNullOrEmpty (name)) {
+					HigMessageDialog mbox = new HigMessageDialog (dialog, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
+							Gtk.MessageType.Error, Gtk.ButtonsType.Ok, Catalog.GetString ("Album must have a name"),
+							Catalog.GetString ("Please name your album or choose an existing album."));
+					mbox.Run ();
+					mbox.Destroy ();
+					return;
+				}
+
+				string description = dialog.AlbumDescription;
+				string location = dialog.AlbumLocation;
+
+				try {
+					album = dialog.Account.Facebook.CreateAlbum (name, description, location);
+				}
+				catch (FacebookException fe) {
+					HigMessageDialog mbox = new HigMessageDialog (dialog, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
+							Gtk.MessageType.Error, Gtk.ButtonsType.Ok, Catalog.GetString ("Creating a new album failed"),
+							String.Format (Catalog.GetString ("An error occurred creating a new album.\n\n{0}"), fe.Message));
+					mbox.Run ();
+					mbox.Destroy ();
+					return;
+				}
+			} else {
+				album = dialog.ActiveAlbum;
+			}
+
+			if (dialog.Account != null) {
+				dialog.Hide ();
+
+				command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (Upload));
+				command_thread.Name = Mono.Unix.Catalog.GetString ("Uploading Pictures");
+
+				progress_dialog = new ThreadProgressDialog (command_thread, selection.Items.Length);
+				progress_dialog.Start ();
+			}
+
+			dialog.Destroy ();
+		}
+
+		void Upload ()
+		{
+			IBrowsableItem [] items = dialog.Items;
+			string [] captions = dialog.Captions;
+			dialog.StoreCaption ();
+
+			long sent_bytes = 0;
+
+			FilterSet filters = new FilterSet ();
+			filters.Add (new JpegFilter ());
+			filters.Add (new ResizeFilter ((uint) size));
+
+			for (int i = 0; i < items.Length; i++) {
+				try {
+					IBrowsableItem item = items [i];
+
+					FileInfo file_info;
+					Log.DebugFormat ("uploading {0}", i);
+
+					progress_dialog.Message = String.Format (Catalog.GetString ("Uploading picture \"{0}\" ({1} of {2})"), item.Name, i + 1, items.Length);
+					progress_dialog.ProgressText = string.Empty;
+					progress_dialog.Fraction = i / (double) items.Length;
+
+					FilterRequest request = new FilterRequest (item.DefaultVersion.Uri);
+					filters.Convert (request);
+
+					file_info = new FileInfo (request.Current.LocalPath);
+
+					album.Upload (captions [i] ?? "", request.Current.LocalPath);
+
+					sent_bytes += file_info.Length;
+				}
+				catch (Exception e) {
+					progress_dialog.Message = String.Format (Catalog.GetString ("Error Uploading To Facebook: {0}"), e.Message);
+					progress_dialog.ProgressText = Catalog.GetString ("Error");
+					Log.DebugException (e);
+
+					if (progress_dialog.PerformRetrySkip ())
+						i--;
+				}
+			}
+
+			progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
+			progress_dialog.Fraction = 1.0;
+			progress_dialog.ProgressText = Catalog.GetString ("Upload Complete");
+			progress_dialog.ButtonLabel = Gtk.Stock.Ok;
+
+			var li = new LinkButton ("http://www.facebook.com/group.php?gid=158960179844&ref=mf", Catalog.GetString ("Visit F-Spot group on Facebook"));
+			progress_dialog.VBoxPackEnd (li);
+			li.ShowAll ();
+		}
+	}
+}
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
new file mode 100644
index 0000000..046b7cd
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookExportDialog.cs
@@ -0,0 +1,447 @@
+/*
+ * FacebookExportDialog.cs
+ *
+ * Authors:
+ *   George Talusan <george at convolve.ca>
+ *   Stephane Delcroix <stephane at delcroix.org>
+ *   Jim Ramsay <i.am at jimramsay.com>
+ *
+ * Copyright (C) 2007 George Talusan
+ * Copyright (c) 2008-2009 Novell, Inc.
+ * Later changes (2009) by Jim Ramsay
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.Reflection;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+
+using Gtk;
+using GtkBeans;
+
+using Hyena;
+using Hyena.Widgets;
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Platform;
+using FSpot.UI.Dialog;
+
+using Mono.Facebook;
+using Mono.Unix;
+
+namespace FSpot.Exporters.Facebook
+{
+	internal class FacebookExportDialog : BuilderDialog
+	{
+		[GtkBeans.Builder.Object] VBox album_info_vbox;
+		[GtkBeans.Builder.Object] VBox picture_info_vbox;
+		[GtkBeans.Builder.Object] HBox log_buttons_hbox;
+		[GtkBeans.Builder.Object] HButtonBox dialog_action_area;
+		[GtkBeans.Builder.Object] Button login_button;
+		[GtkBeans.Builder.Object] Button logout_button;
+		[GtkBeans.Builder.Object] ProgressBar login_progress;
+		[GtkBeans.Builder.Object] RadioButton existing_album_radiobutton;
+		[GtkBeans.Builder.Object] RadioButton create_album_radiobutton;
+		[GtkBeans.Builder.Object] ComboBox existing_album_combobox;
+		[GtkBeans.Builder.Object] Table new_album_info_table;
+		[GtkBeans.Builder.Object] Entry album_name_entry;
+		[GtkBeans.Builder.Object] Entry album_location_entry;
+		[GtkBeans.Builder.Object] Entry album_description_entry;
+		[GtkBeans.Builder.Object] Gtk.ScrolledWindow thumbnails_scrolled_window;
+		[GtkBeans.Builder.Object] TextView caption_textview;
+		[GtkBeans.Builder.Object] TreeView tag_treeview;
+		[GtkBeans.Builder.Object] EventBox tag_image_eventbox;
+		[GtkBeans.Builder.Object] HBox permissions_hbox;
+		[GtkBeans.Builder.Object] CheckButton offline_perm_check;
+		[GtkBeans.Builder.Object] CheckButton photo_perm_check;
+
+		Gtk.Image tag_image;
+		int tag_image_height;
+		int tag_image_width;
+
+		FSpot.Widgets.IconView thumbnail_iconview;
+		Dictionary<long, User> friends;
+
+		private class DateComparer : IComparer
+		{
+			public int Compare (object left,
+			                    object right)
+			{
+				return DateTime.Compare ((left as IBrowsableItem).Time,
+					(right as IBrowsableItem).Time);
+			}
+		}
+
+		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 ());
+			current_item = -1;
+
+			captions = new string [selection.Items.Length];
+			tags = new List<Mono.Facebook.Tag> [selection.Items.Length];
+
+			thumbnail_iconview = new FSpot.Widgets.IconView (selection);
+			thumbnail_iconview.DisplayDates = false;
+			thumbnail_iconview.DisplayTags = false;
+			thumbnail_iconview.DisplayRatings = false;
+			thumbnail_iconview.ButtonPressEvent += HandleThumbnailIconViewButtonPressEvent;
+			thumbnail_iconview.KeyPressEvent += delegate (object sender, KeyPressEventArgs e) {(sender as FSpot.Widgets.IconView).Selection.Clear(); };
+			thumbnails_scrolled_window.Add (thumbnail_iconview);
+			thumbnail_iconview.Show ();
+
+			login_button.Clicked += HandleLoginClicked;
+			logout_button.Clicked += HandleLogoutClicked;
+			offline_perm_check.Toggled += HandlePermissionToggled;
+			photo_perm_check.Toggled += HandlePermissionToggled;
+
+			create_album_radiobutton.Toggled += HandleCreateAlbumToggled;
+			create_album_radiobutton.Active = true;
+
+			existing_album_radiobutton.Toggled += HandleExistingAlbumToggled;
+
+			CellRendererText cell = new CellRendererText ();
+			existing_album_combobox.PackStart (cell, true);
+			existing_album_combobox.SetAttributes (cell, "text", 0);
+
+			tag_image_eventbox.ButtonPressEvent += HandleTagImageButtonPressEvent;
+
+			tag_treeview.Sensitive = false;
+			caption_textview.Sensitive = false;
+
+			DoLogout ();
+
+			account = new FacebookAccount();
+			if (account.Authenticated)
+				DoLogin ();
+		}
+
+		FacebookAccount account;
+		public FacebookAccount Account {
+			get { return account; }
+		}
+
+		string[] captions;
+		public string [] Captions {
+			get {return captions; } 
+		}
+
+		List<Mono.Facebook.Tag>[] tags;
+		int current_item;
+		IBrowsableItem[] items;
+		public IBrowsableItem[] Items {
+			get {return items; }
+		}
+
+		public bool CreateAlbum {
+			get { return create_album_radiobutton.Active; }
+		}
+
+		public string AlbumName {
+			get { return album_name_entry.Text; }
+		}
+
+		public string AlbumLocation {
+			get { return album_location_entry.Text; }
+		}
+
+		public string AlbumDescription {
+			get { return album_description_entry.Text; }
+		}
+		
+		public Album ActiveAlbum {
+			get { return ((AlbumStore) existing_album_combobox.Model).Albums [existing_album_combobox.Active]; }
+		}
+
+		public void StoreCaption ()
+		{
+			// Check for empty text box
+			if (current_item == -1)
+				return;
+			
+			// Store the caption
+			captions [current_item] = caption_textview.Buffer.Text;
+		}
+
+		void HandleThumbnailIconViewButtonPressEvent (object sender, Gtk.ButtonPressEventArgs args)
+		{
+			// Store caption before switching
+			StoreCaption ();
+			
+			int old_item = current_item;
+			current_item = thumbnail_iconview.CellAtPosition ((int) args.Event.X, (int) args.Event.Y, false, false);
+
+			if (current_item < 0 || current_item >=  items.Length) {
+				current_item = old_item;
+				return;
+			}
+
+			string caption = captions [current_item];
+			if (caption == null)
+				captions [current_item] = caption = "";
+			caption_textview.Buffer.Text = caption;
+			caption_textview.Sensitive = true;
+
+			tag_treeview.Model = new TagStore (account.Facebook, tags [current_item], friends);
+
+			IBrowsableItem item = items [current_item];
+
+			if (tag_image_eventbox.Children.Length > 0) {
+				tag_image_eventbox.Remove (tag_image);
+				tag_image.Destroy ();
+			}
+
+			using (Gdk.Pixbuf data = XdgThumbnailSpec.LoadThumbnail (item.DefaultVersion.Uri, ThumbnailSize.Large)) {
+				tag_image_height = data.Height;
+				tag_image_width = data.Width;
+				tag_image = new Gtk.Image (data);
+				tag_image_eventbox.Add (tag_image);
+				tag_image_eventbox.ShowAll ();
+			}
+		}
+
+		public void HandleLoginClicked (object sender, EventArgs args)
+		{
+			if (!account.Authenticated) {
+				Uri uri = account.GetLoginUri ();
+				GtkBeans.Global.ShowUri (Screen, uri.ToString ());
+
+				HigMessageDialog mbox = new HigMessageDialog (this, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
+						Gtk.MessageType.Info, Gtk.ButtonsType.Ok, Catalog.GetString ("Waiting for authentication"),
+						Catalog.GetString ("F-Spot will now launch your browser so that you can log into Facebook.\n\nOnce 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." ));
+
+				mbox.Run ();
+				mbox.Destroy ();
+
+				LoginProgress (0.0, Catalog.GetString ("Authenticating..."));
+				account.Authenticate ();
+			}
+			DoLogin ();
+		}
+
+		void DoLogin ()
+		{
+			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."));
+				error.Run ();
+				error.Destroy ();
+
+				DoLogout ();
+			}
+			else {
+				log_buttons_hbox.Sensitive = false;
+				dialog_action_area.Sensitive = false;
+				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");
+
+						ThreadAssist.ProxyToMain (() => {
+							offline_perm_check.Active = perm_offline;
+							photo_perm_check.Active = perm_upload;
+							LoginProgress (0.2, Catalog.GetString ("Session established, fetching user info..."));
+						});
+	
+						User me = account.Facebook.GetLoggedInUser ().GetUserInfo ();
+	
+						ThreadAssist.ProxyToMain (() => {
+							LoginProgress (0.4, Catalog.GetString ("Session established, fetching friend list..."));
+						});
+
+						Friend[] friend_list = account.Facebook.GetFriends ();
+						long[] uids = new long [friend_list.Length];
+	
+						for (int i = 0; i < friend_list.Length; i++)
+							uids [i] = friend_list [i].UId;
+	
+						ThreadAssist.ProxyToMain (() => {
+							LoginProgress (0.6, Catalog.GetString ("Session established, fetching friend details..."));
+						});
+
+						if (uids.Length > 0) {
+							User[] infos = account.Facebook.GetUserInfo (uids, new string[] { "first_name", "last_name" });
+							friends = new Dictionary<long, User> ();
+
+							foreach (User user in infos)
+								friends.Add (user.uid, user);
+						}
+
+						ThreadAssist.ProxyToMain (() => {
+							LoginProgress (0.8, Catalog.GetString ("Session established, fetching photo albums..."));
+						});
+						Album[] albums = account.Facebook.GetAlbums ();
+						ThreadAssist.ProxyToMain (() => {
+							album_info_vbox.Sensitive = true;
+							picture_info_vbox.Sensitive = true;
+							permissions_hbox.Sensitive = true;
+							login_button.Visible = false;
+							logout_button.Visible = true;
+							// Note for translators: {0} and {1} are respectively firstname and surname of the user
+							LoginProgress (1.0, String.Format (Catalog.GetString ("{0} {1} is logged into Facebook"), me.first_name, me.last_name));
+
+							existing_album_combobox.Model = new AlbumStore (albums);
+							existing_album_combobox.Active = 0;
+						});
+					} catch (Exception e) {
+						Log.DebugException (e);
+						ThreadAssist.ProxyToMain (() => {
+							HigMessageDialog error = new HigMessageDialog (this, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
+									Gtk.MessageType.Error, Gtk.ButtonsType.Ok, Catalog.GetString ("Facebook Connection Error"),
+									String.Format (Catalog.GetString ("There was an error when downloading your information from Facebook.\n\nFacebook said: {0}"), e.Message));
+							error.Run ();
+							error.Destroy ();
+						});
+	
+						account.Deauthenticate ();
+						DoLogout ();
+					} finally {
+						ThreadAssist.ProxyToMain (() => {
+							log_buttons_hbox.Sensitive = true;
+							dialog_action_area.Sensitive = true;
+						});
+					}
+				});
+			}
+		}
+
+		void HandleLogoutClicked (object sender, EventArgs args)
+		{
+			account.Deauthenticate ();
+			DoLogout ();
+		}
+
+		void DoLogout ()
+		{
+			login_button.Visible = true;
+			logout_button.Visible = false;
+
+			login_progress.Fraction = 0;
+			login_progress.Text = Catalog.GetString ("You are not logged in.");
+
+
+			album_info_vbox.Sensitive = false;
+			picture_info_vbox.Sensitive = false;
+			offline_perm_check.Toggled -= HandlePermissionToggled;
+			photo_perm_check.Toggled -= HandlePermissionToggled;
+			offline_perm_check.Active = false;
+			photo_perm_check.Active = false;
+			offline_perm_check.Toggled += HandlePermissionToggled;
+			photo_perm_check.Toggled += HandlePermissionToggled;
+			permissions_hbox.Sensitive = false;
+		}
+
+		public void HandlePermissionToggled (object sender, EventArgs args)
+		{
+			string permission;
+			if (sender == offline_perm_check) {
+				permission = "offline_access";
+			} else if (sender == photo_perm_check) {
+				permission = "photo_upload";
+			} else {
+				throw new Exception ("Unknown Source object");
+			}
+			CheckButton origin = (CheckButton)sender;
+			bool desired = origin.Active;
+			bool actual = account.HasPermission (permission);
+			if (desired != actual) {
+				if (desired) {
+					Log.DebugFormat ("Granting {0}", permission);
+					account.GrantPermission (permission, this);
+				} else {
+					Log.DebugFormat ("Revoking {0}", permission);
+					account.RevokePermission (permission);
+				}
+				/* Double-check that things work... */
+				actual = account.HasPermission (permission);
+				if (actual != desired) {
+					Log.Warning("Failed to alter permissions");
+				}
+				origin.Active = account.HasPermission (permission);
+			}
+		}
+
+		void HandleCreateAlbumToggled (object sender, EventArgs args)
+		{
+			if (create_album_radiobutton.Active == false)
+				return;
+
+			new_album_info_table.Sensitive = true;
+			existing_album_combobox.Sensitive = false;
+		}
+
+		void HandleExistingAlbumToggled (object sender, EventArgs args)
+		{
+			if (existing_album_radiobutton.Active == false)
+				return;
+
+			new_album_info_table.Sensitive = false;
+			existing_album_combobox.Sensitive = true;
+		}
+
+		void HandleTagImageButtonPressEvent (object sender, Gtk.ButtonPressEventArgs args)
+		{
+			double x = args.Event.X;
+			double y = args.Event.Y;
+
+			// translate the centered image to top left corner
+			double tag_image_center_x = tag_image_width / 2;
+			double tag_image_center_y = tag_image_height / 2;
+
+			double allocation_center_x = tag_image_eventbox.Allocation.Width / 2;
+			double allocation_center_y = tag_image_eventbox.Allocation.Height / 2;
+
+			double dx = allocation_center_x - tag_image_center_x;
+			double dy = allocation_center_y - tag_image_center_y;
+
+			if (dx < 0)
+				dx = 0;
+			if (dy < 0)
+				dy = 0;
+
+			x -= dx;
+			y -= dy;
+
+			// bail if we're in the eventbox but not the image
+			if (x < 0 || x > tag_image_width)
+				return;
+			if (y < 0 || y > tag_image_height)
+				return;
+
+			//FacebookTagPopup popup = new FacebookTagPopup (friends);
+		}
+
+		void LoginProgress (double percentage, string message)
+		{
+			login_progress.Fraction = percentage;
+			login_progress.Text = message;
+			Log.Debug (message);
+		}
+	}
+
+	internal class AlbumStore : ListStore
+	{
+		private Album[] _albums;
+
+		public AlbumStore (Album[] albums) : base (typeof (string))
+		{
+			_albums = albums;
+
+			foreach (Album album in Albums) {
+				AppendValues (album.name);
+			}
+		}
+
+		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
new file mode 100644
index 0000000..71019c4
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FSpot.Exporters.Facebook/FacebookTagPopup.cs
@@ -0,0 +1,36 @@
+/*
+ * FacebookTagPopup.cs
+ *
+ * Authors:
+ *   George Talusan <george at convolve.ca>
+ *   Stephane Delcroix <stephane at delcroix.org>
+ *
+ * Copyright (C) 2007 George Talusan
+ * Copyright (c) 2008-2009 Novell, Inc.
+ *
+ * This is free software. See COPYING for details.
+ */
+
+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 { return _friends; }
+			set { _friends = value; }
+		}
+	}
+}
diff --git a/extensions/Exporters/FacebookExport/FindNullableClashes.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/FindNullableClashes.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/FindNullableClashes.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/FindNullableClashes.cs
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile.am b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile.am
new file mode 100644
index 0000000..2286149
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile.am
@@ -0,0 +1,37 @@
+ASSEMBLY = FSpot.Exporters.Facebook
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FACEBOOKEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	FindNullableClashes.cs \
+	FSpot.Exporters.Facebook/FacebookExport.cs \
+	FSpot.Exporters.Facebook/FacebookExportDialog.cs \
+	FSpot.Exporters.Facebook/FacebookTagPopup.cs \
+	Mono.Facebook/Album.cs \
+	Mono.Facebook/Error.cs \
+	Mono.Facebook/Event.cs \
+	Mono.Facebook/facebook.cs \
+	Mono.Facebook/FacebookException.cs \
+	Mono.Facebook/FacebookParam.cs \
+	Mono.Facebook/FacebookSession.cs \
+	Mono.Facebook/Friend.cs \
+	Mono.Facebook/FriendInfo.cs \
+	Mono.Facebook/Group.cs \
+	Mono.Facebook/Location.cs \
+	Mono.Facebook/Notification.cs \
+	Mono.Facebook/PeopleList.cs \
+	Mono.Facebook/Photo.cs \
+	Mono.Facebook/Responses.cs \
+	Mono.Facebook/SessionInfo.cs \
+	Mono.Facebook/SessionWrapper.cs \
+	Mono.Facebook/Tag.cs \
+	Mono.Facebook/User.cs \
+	Mono.Facebook/Util.cs
+RESOURCES =  \
+	Resources/FacebookExport.addin.xml \
+	Resources/FacebookExport.ui
+
+ASSEMBLY_INFO_SOURCE = Mono.Facebook/AssemblyInfo.cs
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile.in b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile.in
new file mode 100644
index 0000000..da041d3
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile.in
@@ -0,0 +1,834 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Exporters/FSpot.Exporters.Facebook
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.Facebook
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FACEBOOKEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	FindNullableClashes.cs \
+	FSpot.Exporters.Facebook/FacebookExport.cs \
+	FSpot.Exporters.Facebook/FacebookExportDialog.cs \
+	FSpot.Exporters.Facebook/FacebookTagPopup.cs \
+	Mono.Facebook/Album.cs \
+	Mono.Facebook/Error.cs \
+	Mono.Facebook/Event.cs \
+	Mono.Facebook/facebook.cs \
+	Mono.Facebook/FacebookException.cs \
+	Mono.Facebook/FacebookParam.cs \
+	Mono.Facebook/FacebookSession.cs \
+	Mono.Facebook/Friend.cs \
+	Mono.Facebook/FriendInfo.cs \
+	Mono.Facebook/Group.cs \
+	Mono.Facebook/Location.cs \
+	Mono.Facebook/Notification.cs \
+	Mono.Facebook/PeopleList.cs \
+	Mono.Facebook/Photo.cs \
+	Mono.Facebook/Responses.cs \
+	Mono.Facebook/SessionInfo.cs \
+	Mono.Facebook/SessionWrapper.cs \
+	Mono.Facebook/Tag.cs \
+	Mono.Facebook/User.cs \
+	Mono.Facebook/Util.cs
+
+RESOURCES = \
+	Resources/FacebookExport.addin.xml \
+	Resources/FacebookExport.ui
+
+ASSEMBLY_INFO_SOURCE = Mono.Facebook/AssemblyInfo.cs
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Facebook/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Album.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Album.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Album.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Album.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/AssemblyInfo.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/AssemblyInfo.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/AssemblyInfo.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/AssemblyInfo.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Error.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Error.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Error.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Error.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Event.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Event.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Event.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Event.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/FacebookException.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookException.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/FacebookException.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookException.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/FacebookParam.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookParam.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/FacebookParam.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookParam.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/FacebookSession.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookSession.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/FacebookSession.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FacebookSession.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Friend.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Friend.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Friend.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Friend.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/FriendInfo.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FriendInfo.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/FriendInfo.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/FriendInfo.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Group.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Group.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Group.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Group.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Location.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Location.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Location.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Location.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Notification.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Notification.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Notification.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Notification.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/PeopleList.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/PeopleList.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/PeopleList.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/PeopleList.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Photo.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Photo.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Photo.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Photo.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Responses.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Responses.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Responses.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Responses.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/SessionInfo.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionInfo.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/SessionInfo.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionInfo.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/SessionWrapper.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionWrapper.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/SessionWrapper.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/SessionWrapper.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Tag.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Tag.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Tag.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Tag.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/User.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/User.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/User.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/User.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Util.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Util.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/Util.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/Util.cs
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/facebook.cs b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/facebook.cs
similarity index 100%
rename from extensions/Exporters/FacebookExport/Mono.Facebook/facebook.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Mono.Facebook/facebook.cs
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.addin.xml b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.addin.xml
new file mode 100644
index 0000000..54550ad
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.addin.xml
@@ -0,0 +1,17 @@
+<Addin 	namespace="FSpot"
+	id="FacebookExport"
+	version="0.8"
+	compatVersion="0.8"
+	name="FacebookExport"
+	description="Export pictures to facebook"
+	author="George Talusan, Jim Ramsay, Stephane Delcroix"
+	url="http://f-spot.org/Extensions"
+	category="Export"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Menus/Exports">
+		<ExportMenuItem id="Facebook" _label = "F_acebook..." class = "FSpot.Exporters.Facebook.FacebookExport" />
+	</Extension>
+</Addin>
diff --git a/extensions/Exporters/FacebookExport/FacebookExport.ui b/src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui
similarity index 100%
rename from extensions/Exporters/FacebookExport/FacebookExport.ui
rename to src/Extensions/Exporters/FSpot.Exporters.Facebook/Resources/FacebookExport.ui
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
new file mode 100644
index 0000000..c5cc549
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrExport.cs
@@ -0,0 +1,572 @@
+using FlickrNet;
+using System;
+using System.Collections;
+using System.IO;
+using System.Threading;
+using Mono.Unix;
+
+using FSpot;
+using FSpot.Core;
+using FSpot.Filters;
+using FSpot.Widgets;
+using FSpot.Utils;
+using FSpot.UI.Dialog;
+using Hyena;
+using Hyena.Widgets;
+
+namespace FSpot.Exporters.Flickr {
+	public class TwentyThreeHQExport : FlickrExport
+	{
+		public override void Run (IBrowsableCollection selection)
+		{
+			Run (SupportedService.TwentyThreeHQ, selection, false);
+		}
+	}
+
+	public class ZooomrExport : FlickrExport
+	{
+		public override void Run (IBrowsableCollection selection)
+		{
+			Run (SupportedService.Zooomr, selection, false);
+		}
+	}
+
+	public class FlickrExport : FSpot.Extensions.IExporter {
+		IBrowsableCollection selection;
+
+		[Glade.Widget] Gtk.Dialog	  dialog;
+		[Glade.Widget] Gtk.CheckButton    scale_check;
+		[Glade.Widget] Gtk.CheckButton    tag_check;
+		[Glade.Widget] Gtk.CheckButton    hierarchy_check;
+		[Glade.Widget] Gtk.CheckButton    ignore_top_level_check;
+		[Glade.Widget] Gtk.CheckButton    open_check;
+		[Glade.Widget] Gtk.SpinButton     size_spin;
+		[Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
+		[Glade.Widget] Gtk.Button         auth_flickr;
+		[Glade.Widget] Gtk.ProgressBar    used_bandwidth;
+		[Glade.Widget] Gtk.Button         do_export_flickr;
+		[Glade.Widget] Gtk.Label          auth_label;
+		[Glade.Widget] Gtk.RadioButton    public_radio;
+		[Glade.Widget] Gtk.CheckButton    family_check;
+		[Glade.Widget] Gtk.CheckButton    friend_check;
+
+		private Glade.XML xml;
+		private string dialog_name = "flickr_export_dialog";
+		System.Threading.Thread command_thread;
+		ThreadProgressDialog progress_dialog;
+		ProgressItem progress_item;
+
+		public const string EXPORT_SERVICE = "flickr/";
+		public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
+		public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
+		public const string BROWSER_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
+		public const string TAGS_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "tags";
+		public const string PUBLIC_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "public";
+		public const string FAMILY_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "family";
+		public const string FRIENDS_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "friends";
+		public const string TAG_HIERARCHY_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "tag_hierarchy";
+		public const string IGNORE_TOP_LEVEL_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "ignore_top_level";
+
+		bool open;
+		bool scale;
+
+		bool is_public;
+		bool is_friend;
+		bool is_family;
+
+		string token;
+
+		int photo_index;
+		int size;
+		Auth auth;
+
+		FlickrRemote fr;
+		private FlickrRemote.Service current_service;
+
+		string auth_text;
+		private State state;
+
+		private enum State {
+			Disconnected,
+			Connected,
+			InAuth,
+			Authorized
+		}
+
+		private State CurrentState {
+			get { return state; }
+			set {
+				switch (value) {
+				case State.Disconnected:
+					auth_label.Text = auth_text;
+					auth_flickr.Sensitive = true;
+					do_export_flickr.Sensitive = false;
+					auth_flickr.Label = Catalog.GetString ("Authorize");
+					used_bandwidth.Visible = false;
+					break;
+				case State.Connected:
+					auth_flickr.Sensitive = true;
+					do_export_flickr.Sensitive = false;
+					auth_label.Text = string.Format (Catalog.GetString ("Return to this window after you have finished the authorization process on {0} and click the \"Complete Authorization\" button below"), current_service.Name);
+					auth_flickr.Label = Catalog.GetString ("Complete Authorization");
+					used_bandwidth.Visible = false;
+					break;
+				case State.InAuth:
+					auth_flickr.Sensitive = false;
+					auth_label.Text = string.Format (Catalog.GetString ("Logging into {0}"), current_service.Name);
+					auth_flickr.Label = Catalog.GetString ("Checking credentials...");
+					do_export_flickr.Sensitive = false;
+					used_bandwidth.Visible = false;
+					break;
+				case State.Authorized:
+					do_export_flickr.Sensitive = true;
+					auth_flickr.Sensitive = true;
+					auth_label.Text = System.String.Format (Catalog.GetString ("Welcome {0} you are connected to {1}"),
+										auth.User.Username,
+										current_service.Name);
+					auth_flickr.Label = String.Format (Catalog.GetString ("Sign in as a different user"), auth.User.Username);
+					used_bandwidth.Visible = !fr.Connection.PeopleGetUploadStatus().IsPro &&
+									fr.Connection.PeopleGetUploadStatus().BandwidthMax > 0;
+					if (used_bandwidth.Visible) {
+						used_bandwidth.Fraction = fr.Connection.PeopleGetUploadStatus().PercentageUsed;
+						used_bandwidth.Text = string.Format (Catalog.GetString("Used {0} of your allowed {1} monthly quota"),
+									GLib.Format.SizeForDisplay (fr.Connection.PeopleGetUploadStatus().BandwidthUsed),
+									GLib.Format.SizeForDisplay (fr.Connection.PeopleGetUploadStatus().BandwidthMax));
+					}
+					break;
+				}
+				state = value;
+			}
+		}
+
+		public FlickrExport (IBrowsableCollection selection, bool display_tags) :
+			this (SupportedService.Flickr, selection, display_tags)
+		{ }
+
+
+		public FlickrExport (SupportedService service, IBrowsableCollection selection, bool display_tags) : this ()
+		{
+			Run (service, selection, display_tags);
+		}
+
+		public FlickrExport ()
+		{
+
+		}
+
+		public virtual void Run (IBrowsableCollection selection)
+		{
+			Run (SupportedService.Flickr, selection, false);
+		}
+
+		public void Run (SupportedService service, IBrowsableCollection selection, bool display_tags)
+		{
+			this.selection = selection;
+			this.current_service = FlickrRemote.Service.FromSupported (service);
+
+			IconView view = new IconView (selection);
+			view.DisplayTags = display_tags;
+			view.DisplayDates = false;
+
+			xml = new Glade.XML (null, "FlickrExport.glade", dialog_name, "f-spot");
+			xml.Autoconnect (this);
+
+			Dialog.Modal = false;
+			Dialog.TransientFor = null;
+
+			thumb_scrolledwindow.Add (view);
+			HandleSizeActive (null, null);
+
+			public_radio.Toggled += HandlePublicChanged;
+			tag_check.Toggled += HandleTagChanged;
+			hierarchy_check.Toggled += HandleHierarchyChanged;
+			HandleTagChanged (null, null);
+			HandleHierarchyChanged (null, null);
+
+			Dialog.ShowAll ();
+			Dialog.Response += HandleResponse;
+			auth_flickr.Clicked += HandleClicked;
+			auth_text = string.Format (auth_label.Text, current_service.Name);
+			auth_label.Text = auth_text;
+			used_bandwidth.Visible = false;
+
+			LoadPreference (SCALE_KEY);
+			LoadPreference (SIZE_KEY);
+			LoadPreference (BROWSER_KEY);
+			LoadPreference (TAGS_KEY);
+			LoadPreference (TAG_HIERARCHY_KEY);
+			LoadPreference (IGNORE_TOP_LEVEL_KEY);
+			LoadPreference (PUBLIC_KEY);
+			LoadPreference (FAMILY_KEY);
+			LoadPreference (FRIENDS_KEY);
+			LoadPreference (current_service.PreferencePath);
+
+			do_export_flickr.Sensitive = false;
+			fr = new FlickrRemote (token, current_service);
+			if (token != null && token.Length > 0) {
+				StartAuth ();
+			}
+		}
+
+		public bool StartAuth ()
+		{
+			CurrentState = State.InAuth;
+			if (command_thread == null || ! command_thread.IsAlive) {
+				command_thread = new Thread (new ThreadStart (CheckAuthorization));
+				command_thread.Start ();
+			}
+			return true;
+		}
+
+		public void CheckAuthorization ()
+		{
+			AuthorizationEventArgs args = new AuthorizationEventArgs ();
+
+			try {
+				args.Auth = fr.CheckLogin ();
+			} catch (FlickrException e) {
+				args.Exception = e;
+			} 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);
+
+				md.Run ();
+				md.Destroy ();
+				return;
+			}
+
+			ThreadAssist.ProxyToMain (() => {
+				do_export_flickr.Sensitive = args.Auth != null;
+				if (args.Auth != null) {
+					token = args.Auth.Token;
+					auth = args.Auth;
+					CurrentState = State.Authorized;
+					Preferences.Set (current_service.PreferencePath, token);
+				} else {
+					CurrentState = State.Disconnected;
+				}
+			});
+		}
+
+		private class AuthorizationEventArgs : System.EventArgs {
+			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)
+		{
+			size_spin.Sensitive = scale_check.Active;
+		}
+
+		private void Logout ()
+		{
+			token = null;
+			auth = null;
+			fr = new FlickrRemote (token, current_service);
+			Preferences.Set (current_service.PreferencePath, String.Empty);
+			CurrentState = State.Disconnected;
+		}
+
+		private void Login ()
+		{
+			try {
+				fr = new FlickrRemote (token, current_service);
+				fr.TryWebLogin();
+				CurrentState = State.Connected;
+			} catch (Exception e) {
+				if (e is FlickrApiException && (e as FlickrApiException).Code == 98) {
+					Logout ();
+					Login ();
+				} 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);
+
+					md.Run ();
+					md.Destroy ();
+					CurrentState = State.Disconnected;
+				}
+			}
+		}
+
+		private void HandleProgressChanged (ProgressItem item)
+		{
+			//System.Console.WriteLine ("Changed value = {0}", item.Value);
+			progress_dialog.Fraction = (photo_index - 1.0 + item.Value) / (double) selection.Count;
+		}
+
+		FileInfo info;
+		private void HandleFlickrProgress (object sender, UploadProgressEventArgs args)
+		{
+			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);
+			}
+			progress_dialog.Fraction = (photo_index - 1.0 + (args.Bytes / (double) info.Length)) / (double) selection.Count;
+		}
+
+		private class DateComparer : IComparer
+		{
+			public int Compare (object left, object right)
+			{
+				return DateTime.Compare ((left as IBrowsableItem).Time, (right as IBrowsableItem).Time);
+			}
+		}
+
+		private void Upload () {
+			progress_item = new ProgressItem ();
+			progress_item.Changed += HandleProgressChanged;
+			fr.Connection.OnUploadProgress += HandleFlickrProgress;
+
+			System.Collections.ArrayList ids = new System.Collections.ArrayList ();
+			IBrowsableItem [] photos = selection.Items;
+			Array.Sort (photos, new DateComparer ());
+
+			for (int index = 0; index < photos.Length; index++) {
+				try {
+					IBrowsableItem photo = photos [index];
+					progress_dialog.Message = System.String.Format (
+                                                Catalog.GetString ("Uploading picture \"{0}\""), photo.Name);
+
+					progress_dialog.Fraction = photo_index / (double)selection.Count;
+					photo_index++;
+					progress_dialog.ProgressText = System.String.Format (
+						Catalog.GetString ("{0} of {1}"), photo_index,
+						selection.Count);
+
+					info = new FileInfo (photo.DefaultVersion.Uri.LocalPath);
+					FilterSet stack = new FilterSet ();
+					if (scale)
+						stack.Add (new ResizeFilter ((uint)size));
+
+					string id = fr.Upload (photo, stack, is_public, is_family, is_friend);
+					ids.Add (id);
+
+					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);
+
+				} catch (System.Exception e) {
+					progress_dialog.Message = String.Format (Catalog.GetString ("Error Uploading To {0}: {1}"),
+										 current_service.Name,
+										 e.Message);
+					progress_dialog.ProgressText = Catalog.GetString ("Error");
+					Log.Exception (e);
+
+					if (progress_dialog.PerformRetrySkip ()) {
+						index--;
+						photo_index--;
+					}
+				}
+			}
+			progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
+			progress_dialog.Fraction = 1.0;
+			progress_dialog.ProgressText = Catalog.GetString ("Upload Complete");
+			progress_dialog.ButtonLabel = Gtk.Stock.Ok;
+
+			if (open && ids.Count != 0) {
+				string view_url;
+				if (current_service.Name == "Zooomr.com")
+					view_url = string.Format ("http://www.{0}/photos/{1}/", current_service.Name, auth.User.Username);
+				else {
+					view_url = string.Format ("http://www.{0}/tools/uploader_edit.gne?ids", current_service.Name);
+					bool first = true;
+
+					foreach (string id in ids) {
+						view_url = view_url + (first ? "=" : ",") + id;
+						first = false;
+					}
+				}
+
+				GtkBeans.Global.ShowUri (Dialog.Screen, view_url);
+			}
+		}
+
+		private void HandleClicked (object sender, System.EventArgs args)
+		{
+			switch (CurrentState) {
+			case State.Disconnected:
+				Login ();
+				break;
+			case State.Connected:
+				StartAuth ();
+				break;
+			case State.InAuth:
+				break;
+			case State.Authorized:
+				Logout ();
+				Login ();
+				break;
+			}
+		}
+
+		private void HandlePublicChanged (object sender, EventArgs args)
+		{
+			bool sensitive = ! public_radio.Active;
+			friend_check.Sensitive = sensitive;
+			family_check.Sensitive = sensitive;
+		}
+
+		private void HandleTagChanged (object sender, EventArgs args)
+		{
+			hierarchy_check.Sensitive = tag_check.Active;
+		}
+
+		private void HandleHierarchyChanged (object sender, EventArgs args)
+		{
+			ignore_top_level_check.Sensitive = hierarchy_check.Active;
+		}
+
+		private void HandleResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId != Gtk.ResponseType.Ok) {
+				if (command_thread != null && command_thread.IsAlive)
+					command_thread.Abort ();
+
+				Dialog.Destroy ();
+				return;
+			}
+
+			if (fr.CheckLogin() == null) {
+				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));
+				md.Run ();
+				md.Destroy ();
+				return;
+			}
+
+			fr.ExportTags = tag_check.Active;
+			fr.ExportTagHierarchy = hierarchy_check.Active;
+			fr.ExportIgnoreTopLevel = ignore_top_level_check.Active;
+			open = open_check.Active;
+			scale = scale_check.Active;
+			is_public = public_radio.Active;
+			is_family = family_check.Active;
+			is_friend = friend_check.Active;
+			if (scale)
+				size = size_spin.ValueAsInt;
+
+			command_thread = new Thread (new ThreadStart (Upload));
+			command_thread.Name = Catalog.GetString ("Uploading Pictures");
+
+			Dialog.Destroy ();
+			progress_dialog = new ThreadProgressDialog (command_thread, selection.Count);
+			progress_dialog.Start ();
+
+			// Save these settings for next time
+			Preferences.Set (SCALE_KEY, scale);
+			Preferences.Set (SIZE_KEY, size);
+			Preferences.Set (BROWSER_KEY, open);
+			Preferences.Set (TAGS_KEY, tag_check.Active);
+			Preferences.Set (PUBLIC_KEY, public_radio.Active);
+			Preferences.Set (FAMILY_KEY, family_check.Active);
+			Preferences.Set (FRIENDS_KEY, friend_check.Active);
+			Preferences.Set (TAG_HIERARCHY_KEY, hierarchy_check.Active);
+			Preferences.Set (IGNORE_TOP_LEVEL_KEY, ignore_top_level_check.Active);
+			Preferences.Set (current_service.PreferencePath, fr.Token);
+		}
+
+		void LoadPreference (string key)
+		{
+			switch (key) {
+			case SCALE_KEY:
+				if (scale_check.Active != Preferences.Get<bool> (key))
+					scale_check.Active = Preferences.Get<bool> (key);
+				break;
+				
+			case SIZE_KEY:
+				size_spin.Value = (double) Preferences.Get<int> (key);
+				break;
+				
+			case BROWSER_KEY:
+				if (open_check.Active != Preferences.Get<bool> (key))
+					open_check.Active = Preferences.Get<bool> (key);
+				break;
+				
+			case TAGS_KEY:
+				if (tag_check.Active != Preferences.Get<bool> (key))
+					tag_check.Active = Preferences.Get<bool> (key);
+				break;
+				
+			case TAG_HIERARCHY_KEY:
+				if (hierarchy_check.Active != Preferences.Get<bool> (key))
+					hierarchy_check.Active = Preferences.Get<bool> (key);
+				break;
+				
+			case IGNORE_TOP_LEVEL_KEY:
+				if (ignore_top_level_check.Active != Preferences.Get<bool> (key))
+					ignore_top_level_check.Active = Preferences.Get<bool> (key);
+				break;
+
+			case FlickrRemote.TOKEN_FLICKR:
+			case FlickrRemote.TOKEN_23HQ:
+			case FlickrRemote.TOKEN_ZOOOMR:
+				token = Preferences.Get<string> (key);
+				break;
+				
+			case PUBLIC_KEY:
+				if (public_radio.Active != Preferences.Get<bool> (key))
+					public_radio.Active = Preferences.Get<bool> (key);
+				break;
+				
+			case FAMILY_KEY:
+				if (family_check.Active != Preferences.Get<bool> (key))
+					family_check.Active = Preferences.Get<bool> (key);
+				break;
+				
+			case FRIENDS_KEY:
+				if (friend_check.Active != Preferences.Get<bool> (key))
+					friend_check.Active = Preferences.Get<bool> (key);
+				break;
+				/*
+			case Preferences.EXPORT_FLICKR_EMAIL:
+
+				/*
+			case Preferences.EXPORT_FLICKR_EMAIL:
+				email_entry.Text = (string) val;
+				break;
+				*/
+			}
+		}
+
+		private Gtk.Dialog Dialog {
+			get {
+				if (dialog == null)
+					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+				return dialog;
+			}
+		}
+	}
+}
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
new file mode 100644
index 0000000..388661d
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Flickr/FSpot.Exporters.Flickr/FlickrRemote.cs
@@ -0,0 +1,242 @@
+/*
+ * Simple upload based on the api at
+ * http://www.flickr.com/services/api/upload.api.html
+ *
+ * Modified by acs in order to use Flickr.Net
+ *
+ * Modified in order to use the new Auth API
+ *
+ * We use now the search API also
+ *
+ */
+using System;
+using System.IO;
+using System.Text;
+using System.Collections;
+using FlickrNet;
+using FSpot;
+using FSpot.Core;
+using FSpot.Utils;
+using FSpot.Filters;
+using Hyena;
+
+namespace FSpot.Exporters.Flickr {
+public class FlickrRemote {
+	public static Licenses    licenses;
+	private string            frob;
+	private string            token;
+	private Auth              auth;
+	private FlickrNet.Flickr            flickr;
+
+	public bool               ExportTags;
+	public bool               ExportTagHierarchy;
+	public bool               ExportIgnoreTopLevel;
+	public FSpot.ProgressItem Progress;
+
+	public const string TOKEN_FLICKR = Preferences.APP_FSPOT_EXPORT_TOKENS + "flickr";
+	public const string TOKEN_23HQ = Preferences.APP_FSPOT_EXPORT_TOKENS + "23hq";
+	public const string TOKEN_ZOOOMR = Preferences.APP_FSPOT_EXPORT_TOKENS + "zooomr";
+
+	public FlickrRemote (string token, Service service)
+	{
+		if (token == null || token.Length == 0) {
+			this.flickr = new FlickrNet.Flickr (service.ApiKey, service.Secret);
+			this.token = null;
+		} else {
+			this.flickr = new FlickrNet.Flickr (service.ApiKey, service.Secret, token);
+			this.token = token;
+		}
+
+		this.flickr.CurrentService = service.Id;
+	}
+
+	public string Token {
+		get { return token; }
+		set {
+			token = value;
+			flickr.AuthToken = value;
+		}
+	}
+
+	public FlickrNet.Flickr Connection {
+		get { return flickr; }
+	}
+
+	public License[] GetLicenses ()
+	{
+		// Licenses won't change normally in a user session
+		if (licenses == null) {
+			try {
+				licenses = flickr.PhotosLicensesGetInfo();
+			} catch (FlickrNet.FlickrApiException e ) {
+				Log.Error (e.Code + ": " + e.Verbose );
+				return null;
+			}
+		}
+		return licenses.LicenseCollection;
+	}
+
+	public ArrayList Search (string[] tags, int licenseId)
+	{
+		ArrayList photos_url = new ArrayList ();
+		// Photos photos = flickr.PhotosSearchText (tags, licenseId);
+		Photos photos = flickr.PhotosSearch (tags);
+
+		if (photos != null) {
+			foreach (FlickrNet.Photo photo in photos.PhotoCollection) {
+				photos_url.Add (photo.ThumbnailUrl);
+			}
+		}
+
+		return photos_url;
+	}
+
+	public ArrayList Search (string tags, int licenseId)
+	{
+		ArrayList photos_url = new ArrayList ();
+		Photos photos = flickr.PhotosSearchText (tags, licenseId);
+
+		if (photos != null) {
+			foreach (FlickrNet.Photo photo in photos.PhotoCollection) {
+				photos_url.Add (photo.ThumbnailUrl);
+			}
+		}
+		return photos_url;
+	}
+
+	public Auth CheckLogin ()
+	{
+		try {
+			if (frob == null) {
+				frob = flickr.AuthGetFrob ();
+				if (frob ==  null) {
+					Log.Error ("ERROR: Problems login in Flickr. Don't have a frob");
+					return null;
+				}
+			}
+		} catch (Exception e) {
+			Log.Error ("Error logging in: {0}", e.Message);
+		}
+
+		if (token == null) {
+			try {
+				auth = flickr.AuthGetToken(frob);
+				token = auth.Token;
+				flickr.AuthToken = token;
+
+				return auth;
+			} catch (FlickrNet.FlickrApiException ex) {
+				Log.Error ("Problems logging in to Flickr - " + ex.Verbose);
+				return null;
+			}
+		}
+
+		auth = flickr.AuthCheckToken ("token");
+		return auth;
+	}
+
+	public string Upload (IBrowsableItem photo, IFilter filter, bool is_public, bool is_family, bool is_friend)
+	{
+		if (token == null) {
+			throw new Exception ("Must Login First");
+		}
+		// FIXME flickr needs rotation
+		string  error_verbose;
+
+		using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
+
+			try {
+				string tags = null;
+
+				filter.Convert (request);
+				string path = request.Current.LocalPath;
+
+				if (ExportTags && photo.Tags != null) {
+					StringBuilder taglist = new StringBuilder ();
+					FSpot.Core.Tag [] t = photo.Tags;
+					FSpot.Core.Tag tag_iter = null;
+
+					for (int i = 0; i < t.Length; i++) {
+						if (i > 0)
+							taglist.Append (",");
+
+						taglist.Append (String.Format ("\"{0}\"", t[i].Name));
+
+						// Go through the tag parents
+						if (ExportTagHierarchy) {
+							tag_iter = t[i].Category;
+							while (tag_iter != App.Instance.Database.Tags.RootCategory && tag_iter != null) {
+								// Skip top level tags because they have no meaning in a linear tag database
+								if (ExportIgnoreTopLevel && tag_iter.Category == App.Instance.Database.Tags.RootCategory) {
+									break;
+								}
+
+								// FIXME Look if the tag is already there!
+								taglist.Append (",");
+								taglist.Append (String.Format ("\"{0}\"", tag_iter.Name));
+								tag_iter = tag_iter.Category;
+							}
+						}
+
+					}
+
+					tags = taglist.ToString ();
+				}
+				try {
+					string photoid =
+						flickr.UploadPicture (path, photo.Name, photo.Description, tags, is_public, is_family, is_friend);
+					return photoid;
+				} catch (FlickrNet.FlickrException ex) {
+					Log.Error ("Problems uploading picture: " + ex.ToString());
+					error_verbose = ex.ToString();
+				}
+			} catch (Exception e) {
+				// FIXME we need to distinguish between file IO errors and xml errors here
+				throw new System.Exception ("Error while uploading", e);
+			}
+		}
+
+		throw new System.Exception (error_verbose);
+	}
+
+	public void TryWebLogin () {
+		frob = flickr.AuthGetFrob ();
+		string login_url = flickr.AuthCalcUrl (frob, FlickrNet.AuthLevel.Write);
+
+		GtkBeans.Global.ShowUri (null, login_url);
+	}
+
+	public class Service {
+		public string ApiKey;
+		public string Secret;
+		public SupportedService Id;
+		public string Name;
+		public string PreferencePath;
+
+		public static Service [] Supported = {
+			new Service (SupportedService.Flickr, "Flickr.com", "c6b39ee183385d9ce4ea188f85945016", "0a951ac44a423a04", TOKEN_FLICKR),
+			new Service (SupportedService.TwentyThreeHQ, "23hq.com", "c6b39ee183385d9ce4ea188f85945016", "0a951ac44a423a04", TOKEN_23HQ),
+			new Service (SupportedService.Zooomr, "Zooomr.com", "a2075d8ff1b7b059df761649835562e4", "6c66738681", TOKEN_ZOOOMR)
+		};
+
+		public Service (SupportedService id, string name, string api_key, string secret, string pref)
+		{
+			Id = id;
+			ApiKey = api_key;
+			Secret = secret;
+			Name = name;
+			PreferencePath = pref;
+		}
+
+		public static Service FromSupported (SupportedService id)
+		{
+			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.Flickr/Makefile.am b/src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile.am
new file mode 100644
index 0000000..f0a34fb
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile.am
@@ -0,0 +1,14 @@
+ASSEMBLY = FSpot.Exporters.Flickr
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FLICKREXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	FSpot.Exporters.Flickr/FlickrExport.cs \
+	FSpot.Exporters.Flickr/FlickrRemote.cs
+
+RESOURCES =  \
+	Resources/FlickrExport.addin.xml \
+	Resources/FlickrExport.glade
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile.in b/src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile.in
new file mode 100644
index 0000000..25e1dc7
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile.in
@@ -0,0 +1,811 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Exporters/FSpot.Exporters.Flickr
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.Flickr
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FLICKREXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	FSpot.Exporters.Flickr/FlickrExport.cs \
+	FSpot.Exporters.Flickr/FlickrRemote.cs
+
+RESOURCES = \
+	Resources/FlickrExport.addin.xml \
+	Resources/FlickrExport.glade
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Flickr/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/FlickrExport.addin.xml b/src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/FlickrExport.addin.xml
new file mode 100644
index 0000000..acde6a8
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/FlickrExport.addin.xml
@@ -0,0 +1,20 @@
+<Addin namespace="FSpot"
+	version="0.8"
+	compatVersion="0.8"
+	name="Flickr Export"
+	description="This extension allows you to export your photos to Flickr and 23hq."
+	author="F-Spot team"
+	url="http://f-spot.org"
+	defaultEnabled="true"
+	category="Export">
+
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+
+	<Extension path = "/FSpot/Menus/Exports">
+		<ExportMenuItem id="Flickr" _label = "_Flickr..." class = "FSpot.Exporters.Flickr.FlickrExport" />
+		<ExportMenuItem id="23hq" _label = "_23hq..." class = "FSpot.Exporters.Flickr.TwentyThreeHQExport" />
+		<ExportMenuItem id="zooomr" _label = "_Zooomr..." class = "FSpot.Exporters.Flickr.ZooomrExport" />
+	</Extension>
+</Addin>
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/FlickrExport.glade b/src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/FlickrExport.glade
new file mode 100644
index 0000000..133f423
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Flickr/Resources/FlickrExport.glade
@@ -0,0 +1,491 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+  <requires lib="canvas"/>
+  <requires lib="gnome"/>
+  <widget class="GtkDialog" id="flickr_export_dialog">
+    <property name="title" translatable="yes">Export</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="vbox33">
+        <property name="visible">True</property>
+        <child>
+          <widget class="GtkHBox" id="hbox35">
+            <property name="visible">True</property>
+            <property name="border_width">6</property>
+            <child>
+              <widget class="GtkFrame" id="frame26">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">GTK_SHADOW_NONE</property>
+                <child>
+                  <widget class="GtkAlignment" id="alignment30">
+                    <property name="visible">True</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <widget class="GtkScrolledWindow" id="thumb_scrolledwindow">
+                        <property name="width_request">180</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                        <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                        <property name="shadow_type">GTK_SHADOW_IN</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="GtkLabel" id="label85">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes"><b>Photos</b></property>
+                    <property name="use_markup">True</property>
+                  </widget>
+                  <packing>
+                    <property name="type">label_item</property>
+                  </packing>
+                </child>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkVBox" id="vbox36">
+                <property name="visible">True</property>
+                <property name="spacing">6</property>
+                <child>
+                  <widget class="GtkFrame" id="frame28">
+                    <property name="visible">True</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">GTK_SHADOW_NONE</property>
+                    <child>
+                      <widget class="GtkAlignment" id="alignment32">
+                        <property name="visible">True</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <widget class="GtkVBox" id="vbox37">
+                            <property name="visible">True</property>
+                            <property name="spacing">6</property>
+                            <child>
+                              <widget class="GtkLabel" id="auth_label">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">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. </property>
+                                <property name="wrap">True</property>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkButton" id="auth_flickr">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="response_id">0</property>
+                                <child>
+                                  <widget class="GtkAlignment" id="alignment59">
+                                    <property name="visible">True</property>
+                                    <property name="xscale">0</property>
+                                    <property name="yscale">0</property>
+                                    <child>
+                                      <widget class="GtkHBox" id="hbox82">
+                                        <property name="visible">True</property>
+                                        <property name="spacing">2</property>
+                                        <child>
+                                          <widget class="GtkImage" id="image40">
+                                            <property name="visible">True</property>
+                                            <property name="stock">gtk-yes</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                            <property name="fill">False</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkLabel" id="label206">
+                                            <property name="visible">True</property>
+                                            <property name="label" translatable="yes">Authorize</property>
+                                            <property name="use_underline">True</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                            <property name="fill">False</property>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                      </widget>
+                                    </child>
+                                  </widget>
+                                </child>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkProgressBar" id="used_bandwidth">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="text" translatable="yes"></property>
+                              </widget>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkCheckButton" id="open_check">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="label" translatable="yes">_View photos in browser when done uploading</property>
+                                <property name="use_underline">True</property>
+                                <property name="response_id">0</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkLabel" id="staus_label">
+                                <property name="visible">True</property>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">4</property>
+                              </packing>
+                            </child>
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="label92">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes"><b>Account</b></property>
+                        <property name="use_markup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="type">label_item</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="GtkFrame" id="frame45">
+                    <property name="visible">True</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">GTK_SHADOW_NONE</property>
+                    <child>
+                      <widget class="GtkAlignment" id="alignment60">
+                        <property name="visible">True</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <widget class="GtkVBox" id="vbox80">
+                            <property name="visible">True</property>
+                            <property name="spacing">6</property>
+                            <child>
+                              <widget class="GtkRadioButton" id="private_radio">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="label" translatable="yes">Private</property>
+                                <property name="use_underline">True</property>
+                                <property name="response_id">0</property>
+                                <property name="draw_indicator">True</property>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkAlignment" id="alignment61">
+                                <property name="visible">True</property>
+                                <property name="left_padding">24</property>
+                                <child>
+                                  <widget class="GtkVBox" id="vbox81">
+                                    <property name="visible">True</property>
+                                    <property name="spacing">6</property>
+                                    <child>
+                                      <widget class="GtkCheckButton" id="friend_check">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="label" translatable="yes">Visible to Friends</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="response_id">0</property>
+                                        <property name="draw_indicator">True</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkCheckButton" id="family_check">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="label" translatable="yes">Visible to Family</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="response_id">0</property>
+                                        <property name="draw_indicator">True</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                  </widget>
+                                </child>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkRadioButton" id="public_radio">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="label" translatable="yes">Public</property>
+                                <property name="use_underline">True</property>
+                                <property name="response_id">0</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <property name="group">private_radio</property>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="priv_label">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes"><b>Viewing permissions</b></property>
+                        <property name="use_markup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="type">label_item</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="GtkFrame" id="frame29">
+                    <property name="visible">True</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">GTK_SHADOW_NONE</property>
+                    <child>
+                      <widget class="GtkAlignment" id="alignment33">
+                        <property name="visible">True</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <widget class="GtkVBox" id="vbox38">
+                            <property name="visible">True</property>
+                            <property name="spacing">6</property>
+                            <child>
+                              <widget class="GtkHBox" id="hbox45">
+                                <property name="visible">True</property>
+                                <child>
+                                  <widget class="GtkCheckButton" id="scale_check">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="label" translatable="yes">_Resize to: </property>
+                                    <property name="use_underline">True</property>
+                                    <property name="response_id">0</property>
+                                    <property name="draw_indicator">True</property>
+                                    <signal name="toggled" handler="HandleSizeActive"/>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkSpinButton" id="size_spin">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="adjustment">400 0 10000 1 10 10</property>
+                                    <property name="climb_rate">1</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkLabel" id="label136">
+                                    <property name="visible">True</property>
+                                    <property name="label" translatable="yes">pixels</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">2</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                              </widget>
+                            </child>
+                            <child>
+                              <widget class="GtkVBox" id="vbox39">
+                                <property name="visible">True</property>
+                                <property name="spacing">6</property>
+                                <child>
+                                  <widget class="GtkHBox" id="hbox7">
+                                    <property name="visible">True</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <child>
+                                      <widget class="GtkCheckButton" id="tag_check">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="label" translatable="yes">_Export tags</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="response_id">0</property>
+                                        <property name="draw_indicator">True</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkCheckButton" id="hierarchy_check">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="label" translatable="yes">Export tag _hierarchy</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="response_id">0</property>
+                                        <property name="draw_indicator">True</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkCheckButton" id="ignore_top_level_check">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="label" translatable="yes">Ignore _top level tags</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="response_id">0</property>
+                                        <property name="draw_indicator">True</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">2</property>
+                                      </packing>
+                                    </child>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="label94">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes"><b>Style</b></property>
+                        <property name="use_markup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="type">label_item</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <widget class="GtkHButtonBox" id="hbuttonbox6">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <widget class="GtkButton" id="button13">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">-6</property>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkButton" id="do_export_flickr">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label" translatable="yes">_Export</property>
+                <property name="use_underline">True</property>
+                <property name="response_id">-5</property>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</glade-interface>
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
new file mode 100644
index 0000000..8cef453
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Folder/FSpot.Exporters.Folder/FolderExport.cs
@@ -0,0 +1,1407 @@
+/*
+ * Copyright (C) 2005 Alessandro Gervaso <gervystar at gervystar.net>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * 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.
+ */
+
+//This should be used to export the selected pics to an original gallery
+//located on a GIO location.
+using System;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Collections;
+
+using Hyena;
+
+using Mono.Unix;
+
+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 {
+		IBrowsableCollection selection;
+
+		[Glade.Widget] Gtk.Dialog dialog;
+		[Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
+		[Glade.Widget] Gtk.Entry name_entry;
+		[Glade.Widget] Gtk.Entry description_entry;
+
+		//[Glade.Widget] Gtk.CheckButton meta_check;
+		[Glade.Widget] Gtk.CheckButton scale_check;
+		[Glade.Widget] Gtk.CheckButton export_tags_check;
+		[Glade.Widget] Gtk.CheckButton export_tag_icons_check;
+		[Glade.Widget] Gtk.CheckButton open_check;
+
+		[Glade.Widget] Gtk.RadioButton static_radio;
+		[Glade.Widget] Gtk.RadioButton original_radio;
+		[Glade.Widget] Gtk.RadioButton plain_radio;
+
+		[Glade.Widget] Gtk.SpinButton size_spin;
+
+		[Glade.Widget] Gtk.HBox chooser_hbox;
+
+		public const string EXPORT_SERVICE = "folder/";
+		public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
+		public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
+		public const string OPEN_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
+		public const string EXPORT_TAGS_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "export_tags";
+		public const string EXPORT_TAG_ICONS_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "export_tag_icons";
+		public const string METHOD_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "method";
+		public const string URI_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "uri";
+		public const string SHARPEN_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "sharpen";
+		public const string INCLUDE_TARBALLS_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "include_tarballs";
+
+		private Glade.XML xml;
+		private string dialog_name = "folder_export_dialog";
+		GLib.File dest;
+		Gtk.FileChooserButton uri_chooser;
+
+		bool open;
+		bool scale;
+		bool exportTags;
+		bool exportTagIcons;
+		int size;
+
+		string description;
+		string gallery_name = "Gallery";
+		// FIXME this needs to be a real temp directory
+		string gallery_path = Path.Combine (Path.GetTempPath (), "f-spot-original-" + System.DateTime.Now.Ticks.ToString ());
+
+		ThreadProgressDialog progress_dialog;
+		System.Threading.Thread command_thread;
+
+		public FolderExport ()
+		{}
+		public void Run (IBrowsableCollection selection)
+		{
+			this.selection = selection;
+
+			IconView view = (IconView) new IconView (selection);
+			view.DisplayDates = false;
+			view.DisplayTags = false;
+
+			xml = new Glade.XML (null, "FolderExport.glade", dialog_name, "f-spot");
+			xml.Autoconnect (this);
+			Dialog.Modal = false;
+			Dialog.TransientFor = null;
+
+			thumb_scrolledwindow.Add (view);
+			HandleSizeActive (null, null);
+			name_entry.Text = gallery_name;
+
+			string uri_path = System.IO.Path.Combine (FSpot.Core.Global.HomeDirectory, "Desktop");
+			if (!System.IO.Directory.Exists (uri_path))
+			        uri_path = FSpot.Core.Global.HomeDirectory;
+
+			uri_chooser = new Gtk.FileChooserButton (Catalog.GetString ("Select Export Folder"),
+								 Gtk.FileChooserAction.SelectFolder);
+
+			uri_chooser.LocalOnly = false;
+
+			if (!String.IsNullOrEmpty (Preferences.Get<string> (URI_KEY)))
+				uri_chooser.SetCurrentFolderUri (Preferences.Get<string> (URI_KEY));
+			else
+				uri_chooser.SetFilename (uri_path);
+
+			chooser_hbox.PackStart (uri_chooser);
+
+			Dialog.ShowAll ();
+			Dialog.Response += HandleResponse;
+
+			LoadPreference (SCALE_KEY);
+			LoadPreference (SIZE_KEY);
+			LoadPreference (OPEN_KEY);
+			LoadPreference (EXPORT_TAGS_KEY);
+			LoadPreference (EXPORT_TAG_ICONS_KEY);
+			LoadPreference (METHOD_KEY);
+		}
+
+		public void HandleSizeActive (object sender, System.EventArgs args)
+		{
+			size_spin.Sensitive = scale_check.Active;
+		}
+
+		public void HandleStandaloneActive (object sender, System.EventArgs args)
+		{
+			export_tags_check.Sensitive = static_radio.Active;
+			HandleExportTagsActive (sender, args);
+		}
+
+		public void HandleExportTagsActive (object sender, System.EventArgs args)
+		{
+			export_tag_icons_check.Sensitive = export_tags_check.Active && static_radio.Active;
+		}
+
+		public void Upload ()
+		{
+			// FIXME use mkstemp
+
+			try {
+				ThreadAssist.ProxyToMain (Dialog.Hide);
+
+				GLib.File source = GLib.FileFactory.NewForPath (Path.Combine (gallery_path, gallery_name));
+				GLib.File target = GLib.FileFactory.NewForPath (Path.Combine (dest.Path, source.Basename));
+
+				if (dest.IsNative)
+					gallery_path = dest.Path;
+
+				progress_dialog.Message = Catalog.GetString ("Building Gallery");
+				progress_dialog.Fraction = 0.0;
+
+				FolderGallery gallery;
+				if (static_radio.Active) {
+					gallery = new HtmlGallery (selection, gallery_path, gallery_name);
+				} else if (original_radio.Active) {
+					gallery = new OriginalGallery (selection, gallery_path, gallery_name);
+				} else {
+					gallery = new FolderGallery (selection, gallery_path, gallery_name);
+				}
+
+				if (scale) {
+					Log.DebugFormat ("Resize Photos to {0}.", size);
+					gallery.SetScale (size);
+				} else {
+					Log.Debug ("Exporting full size.");
+				}
+
+				if (exportTags)
+					gallery.SetExportTags ();
+
+				if (exportTagIcons)
+					gallery.SetExportTagIcons ();
+
+				gallery.Description = description;
+				gallery.GenerateLayout ();
+				
+				FilterSet filter_set = new FilterSet ();
+				if (scale)
+					filter_set.Add (new ResizeFilter ((uint) size));
+				filter_set.Add (new ChmodFilter ());
+				filter_set.Add (new UniqueNameFilter (new SafeUri (gallery_path)));
+
+				for (int photo_index = 0; photo_index < selection.Count; photo_index++)
+				{
+					try {
+						progress_dialog.Message = System.String.Format (Catalog.GetString ("Exporting \"{0}\"..."), selection[photo_index].Name);
+						progress_dialog.Fraction = photo_index / (double) selection.Count;
+						gallery.ProcessImage (photo_index, filter_set);
+						progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of {1}"), (photo_index + 1), selection.Count);
+					}
+					catch (Exception e) {
+						Log.Error (e.ToString ());
+						progress_dialog.Message = String.Format (Catalog.GetString ("Error Copying \"{0}\" to Gallery:{2}{1}"),
+							selection[photo_index].Name, e.Message, Environment.NewLine);
+						progress_dialog.ProgressText = Catalog.GetString ("Error");
+
+						if (progress_dialog.PerformRetrySkip ())
+							photo_index--;
+					}
+				}
+
+				// create the zip tarballs for original
+				if (gallery is OriginalGallery) {
+					bool include_tarballs;
+					try {
+						include_tarballs = Preferences.Get<bool> (INCLUDE_TARBALLS_KEY);
+					} catch (NullReferenceException){
+						include_tarballs = true;
+						Preferences.Set (INCLUDE_TARBALLS_KEY, true);
+					}
+					if (include_tarballs)
+						(gallery as OriginalGallery).CreateZip ();
+				}
+
+				// we've created the structure, now if the destination was local (native) we are done
+				// otherwise we xfer
+				if (!dest.IsNative) {
+					Log.DebugFormat ("Transferring \"{0}\" to \"{1}\"", source.Path, target.Path);
+					progress_dialog.Message = String.Format (Catalog.GetString ("Transferring to \"{0}\""), target.Path);
+					progress_dialog.ProgressText = Catalog.GetString ("Transferring...");
+					source.CopyRecursive (target, GLib.FileCopyFlags.Overwrite, new GLib.Cancellable (), Progress);
+				}
+				
+				// No need to check result here as if result is not true, an Exception will be thrown before
+				progress_dialog.Message = Catalog.GetString ("Export Complete.");
+				progress_dialog.Fraction = 1.0;
+				progress_dialog.ProgressText = Catalog.GetString ("Exporting Photos Completed.");
+				progress_dialog.ButtonLabel = Gtk.Stock.Ok;
+
+				if (open) {
+					Log.DebugFormat (String.Format ("Open URI \"{0}\"", target.Uri.ToString ()));
+					ThreadAssist.ProxyToMain (() => { GtkBeans.Global.ShowUri (Dialog.Screen, target.Uri.ToString () ); });
+				}
+
+				// Save these settings for next time
+				Preferences.Set (SCALE_KEY, scale);
+				Preferences.Set (SIZE_KEY, size);
+				Preferences.Set (OPEN_KEY, open);
+				Preferences.Set (EXPORT_TAGS_KEY, exportTags);
+				Preferences.Set (EXPORT_TAG_ICONS_KEY, exportTagIcons);
+				Preferences.Set (METHOD_KEY, static_radio.Active ? "static" : original_radio.Active ? "original" : "folder" );
+				Preferences.Set (URI_KEY, uri_chooser.Uri);
+			} catch (System.Exception e) {
+				Log.Error (e.ToString ());
+				progress_dialog.Message = e.ToString ();
+				progress_dialog.ProgressText = Catalog.GetString ("Error Transferring");
+			} finally {
+				// if the destination isn't local then we want to remove the temp directory we
+				// created.
+				if (!dest.IsNative)
+					System.IO.Directory.Delete (gallery_path, true);
+
+				ThreadAssist.ProxyToMain (() => { Dialog.Destroy(); });
+			}
+		}
+
+		private void Progress (long current_num_bytes, long total_num_bytes)
+		{
+			if (total_num_bytes > 0) {
+				progress_dialog.Fraction = current_num_bytes / (double)total_num_bytes;
+			}
+		}
+
+		private void HandleResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId != Gtk.ResponseType.Ok) {
+				// FIXME this is to work around a bug in gtk+ where
+				// the filesystem events are still listened to when
+				// a FileChooserButton is destroyed but not finalized
+				// and an event comes in that wants to update the child widgets.
+				Dialog.Destroy ();
+				uri_chooser.Dispose ();
+				uri_chooser = null;
+				return;
+			}
+
+			dest = GLib.FileFactory.NewForUri (uri_chooser.Uri);
+			open = open_check.Active;
+			scale = scale_check.Active;
+			exportTags = export_tags_check.Active;
+			exportTagIcons = export_tag_icons_check.Active;
+
+			gallery_name = name_entry.Text;
+
+			if (description_entry != null)
+				description = description_entry.Text;
+
+			if (scale)
+				size = size_spin.ValueAsInt;
+
+			command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (Upload));
+			command_thread.Name = Catalog.GetString ("Exporting Photos");
+
+			progress_dialog = new ThreadProgressDialog (command_thread, 1);
+			progress_dialog.Start ();
+		}
+
+		void LoadPreference (string key)
+		{
+			switch (key) {
+			case SCALE_KEY:
+				if (scale_check.Active != Preferences.Get<bool> (key))
+					scale_check.Active = Preferences.Get<bool> (key);
+				break;
+
+			case SIZE_KEY:
+				int size;
+				if (Preferences.TryGet<int> (key, out size))
+					size_spin.Value = (double) size;
+				else
+					size_spin.Value = 400;
+				break;
+
+			case OPEN_KEY:
+				if (open_check.Active != Preferences.Get<bool> (key))
+					open_check.Active = Preferences.Get<bool> (key);
+				break;
+
+			case EXPORT_TAGS_KEY:
+				if (export_tags_check.Active != Preferences.Get<bool> (key))
+					export_tags_check.Active = Preferences.Get<bool> (key);
+				break;
+
+			case EXPORT_TAG_ICONS_KEY:
+				if (export_tag_icons_check.Active != Preferences.Get<bool> (key))
+					export_tag_icons_check.Active = Preferences.Get<bool> (key);
+				break;
+
+			case METHOD_KEY:
+				static_radio.Active = (Preferences.Get<string> (key) == "static");
+				original_radio.Active = (Preferences.Get<string> (key) == "original");
+				plain_radio.Active = (Preferences.Get<string> (key) == "folder");
+				break;
+			}
+		}
+
+		private Gtk.Dialog Dialog {
+			get {
+				if (dialog == null)
+					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+				return dialog;
+			}
+		}
+	}
+
+	internal class FolderGallery
+	{
+		protected IBrowsableCollection collection;
+		protected string gallery_name;
+		protected string gallery_path;
+		protected bool scale;
+		protected int size;
+		protected bool exportTags;
+		protected bool exportTagIcons;
+		protected string description;
+		protected string language;
+		protected System.Uri destination;
+
+		protected ScaleRequest [] requests;
+
+		protected string [] pixbuf_keys = { "quality", null };
+		protected string [] pixbuf_values = { "95", null };
+
+		protected struct ScaleRequest {
+			public string Name;
+			public int Width;
+			public int Height;
+			public bool Skip;
+			public bool CopyExif;
+
+			public ScaleRequest (string name, int width, int height, bool skip) : this (name, width, height, skip, false) {}
+
+			public ScaleRequest (string name, int width, int height, bool skip, bool exif)
+			{
+				this.Name = name != null ? name : String.Empty;
+				this.Width = width;
+				this.Height = height;
+				this.Skip = skip;
+				this.CopyExif = exif;
+			}
+
+			public static ScaleRequest Default = new ScaleRequest (String.Empty, 0, 0, false);
+
+			public bool AvoidScale (int size) {
+				return (size < this.Width && size < this.Height && this.Skip);
+			}
+		}
+
+		internal FolderGallery (IBrowsableCollection selection, string path, string gallery_name)
+		{
+			this.collection = selection;
+			this.gallery_name = gallery_name;
+			this.gallery_path = Path.Combine (path, gallery_name);
+			this.requests = new ScaleRequest [] { ScaleRequest.Default };
+		}
+
+		public virtual void GenerateLayout ()
+		{
+			MakeDir (gallery_path);
+
+		}
+
+		protected virtual string ImageName (int image_num)
+		{
+            var uri = collection [image_num].DefaultVersion.Uri;
+            var dest_uri = new SafeUri (gallery_path);
+
+            // Find an unused name
+            int i = 1;
+            var dest = dest_uri.Append (uri.GetFilename ());
+            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.GetFilename ();
+		}
+
+		public void ProcessImage (int image_num, FilterSet filter_set)
+		{
+			IBrowsableItem photo = collection [image_num];
+			string path;
+			ScaleRequest req;
+
+			req = requests [0];
+
+			MakeDir (SubdirPath (req.Name));
+			path = SubdirPath (req.Name, ImageName (image_num));
+
+			using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
+				filter_set.Convert (request);
+				if (request.Current.LocalPath == path)
+					request.Preserve(request.Current);
+				else
+					System.IO.File.Copy (request.Current.LocalPath, path, true);
+
+				if (photo != null && photo is Photo && App.Instance.Database != null) {
+					App.Instance.Database.Exports.Create ((photo as Photo).Id, (photo as Photo).DefaultVersionId,
+								      ExportStore.FolderExportType,
+								      // FIXME this is wrong, the final path is the one
+								      // after the Xfer.
+								      new SafeUri (path).ToString ());
+				}
+
+				for (int i = 1; i < requests.Length; i++) {
+
+					req = requests [i];
+					if (scale && req.AvoidScale (size))
+						continue;
+
+					FilterSet req_set = new FilterSet ();
+					req_set.Add (new ResizeFilter ((uint)Math.Max (req.Width, req.Height)));
+
+					bool sharpen;
+					try {
+						sharpen = Preferences.Get<bool> (FolderExport.SHARPEN_KEY);
+					} catch (NullReferenceException) {
+						sharpen = true;
+						Preferences.Set (FolderExport.SHARPEN_KEY, true);
+					}
+
+					if (sharpen) {
+						if (req.Name == "lq")
+							req_set.Add (new SharpFilter (0.1, 2, 4));
+						if (req.Name == "thumbs")
+							req_set.Add (new SharpFilter (0.1, 2, 5));
+					}
+					using (FilterRequest tmp_req = new FilterRequest (photo.DefaultVersion.Uri)) {
+						req_set.Convert (tmp_req);
+						MakeDir (SubdirPath (req.Name));
+						path = SubdirPath (req.Name, ImageName (image_num));
+						System.IO.File.Copy (tmp_req.Current.LocalPath, path, true);
+					}
+				}
+			}
+		}
+
+		protected string MakeDir (string path)
+		{
+			try {
+				Directory.CreateDirectory (path);
+			} catch {
+				Log.ErrorFormat ("Error in creating directory \"{0}\"", path);
+			}
+			return path;
+		}
+
+		protected string SubdirPath (string subdir)
+		{
+			return SubdirPath (subdir, null);
+		}
+
+		protected string SubdirPath (string subdir, string file)
+		{
+			string path = Path.Combine (gallery_path, subdir);
+			if (file != null)
+				path = Path.Combine (path, file);
+
+			return path;
+		}
+
+		public string GalleryPath {
+			get {
+				return gallery_path;
+			}
+		}
+
+		public string Description {
+			get {
+				return description;
+			}
+			set {
+				description = value;
+			}
+		}
+
+		public string Language {
+			get {
+				if (language == null)
+					language=GetLanguage();
+				return language;
+			}
+		}
+
+		public Uri Destination {
+			get {
+				return destination;
+			}
+			set {
+				this.destination = value;
+			}
+		}
+
+		public void SetScale (int size) {
+			this.scale = true;
+			this.size = size;
+			requests [0].Width = size;
+			requests [0].Height = size;
+		}
+
+		public void SetExportTags () {
+			this.exportTags = true;
+		}
+
+		public void SetExportTagIcons () {
+			this.exportTagIcons = true;
+		}
+
+		private string GetLanguage()
+		{
+			string language;
+
+			if ((language = Environment.GetEnvironmentVariable ("LC_ALL")) == null)
+				if ((language = Environment.GetEnvironmentVariable ("LC_MESSAGES")) == null)
+					if ((language = Environment.GetEnvironmentVariable ("LANG")) == null)
+						language = "en";
+
+			if (language.IndexOf('.') >= 0)
+				language = language.Substring(0,language.IndexOf('.'));
+			if (language.IndexOf('@') >= 0)
+				language = language.Substring(0,language.IndexOf('@'));
+			language = language.Replace('_','-');
+
+			return language;
+		}
+	}
+
+	class OriginalGallery : FolderGallery
+	{
+		public OriginalGallery (IBrowsableCollection selection, string path, string name) : base (selection, path, name)
+		{
+			requests = new ScaleRequest [] { new ScaleRequest ("hq", 0, 0, false),
+							 new ScaleRequest ("mq", 800, 600, true),
+							 new ScaleRequest ("lq", 640, 480, false, true),
+							 new ScaleRequest ("thumbs", 120, 120, false) };
+		}
+
+		public override void GenerateLayout ()
+		{
+			base.GenerateLayout ();
+			MakeDir (SubdirPath ("comments"));
+			CreateHtaccess();
+			CreateInfo();
+			SetTime ();
+		}
+
+		protected override string ImageName (int photo_index)
+		{
+			return String.Format ("img-{0}.jpg", photo_index + 1);
+		}
+
+		private void SetTime ()
+		{
+			try {
+				for (int i = 0; i < collection.Count; i++)
+					CreateComments (collection [i].DefaultVersion.Uri.LocalPath, i);
+
+				Directory.SetLastWriteTimeUtc(gallery_path, collection [0].Time);
+			} catch (System.Exception e) {
+				Log.Error (e.ToString ());
+			}
+		}
+
+		internal void CreateZip ()
+		{
+			MakeDir (SubdirPath ("zip"));
+			try {
+				if (System.IO.Directory.Exists (SubdirPath ("mq")))
+				    CreateZipFile("mq");
+
+				if (System.IO.Directory.Exists (SubdirPath ("hq")))
+				    CreateZipFile("hq");
+
+			} catch (System.Exception e) {
+				Log.Error (e.ToString ());
+			}
+		}
+
+		private void CreateComments(string photo_path, int photo_index)
+		{
+			StreamWriter comment = File.CreateText(SubdirPath  ("comments", photo_index + 1 + ".txt"));
+			comment.Write("<span>photo " + (photo_index + 1) + "</span> ");
+			comment.Write (collection [photo_index].Description + Environment.NewLine);
+			comment.Close();
+		}
+
+		private void CreateZipFile(string img_quality)
+		{
+			string[] filenames = Directory.GetFiles(SubdirPath (img_quality));
+			Crc32 crc = new Crc32();
+			ZipOutputStream s = new ZipOutputStream(File.Create(SubdirPath ("zip", img_quality + ".zip")));
+
+			s.SetLevel(0);
+			foreach (string file in filenames) {
+				FileStream fs = File.OpenRead(file);
+
+				byte[] buffer = new byte[fs.Length];
+				fs.Read(buffer, 0, buffer.Length);
+				ZipEntry entry = new ZipEntry(Path.GetFileName(file));
+
+				entry.DateTime = DateTime.Now;
+
+				// set Size and the crc, because the information
+				// about the size and crc should be stored in the header
+				// if it is not set it is automatically written in the footer.
+				// (in this case size == crc == -1 in the header)
+				// Some ZIP programs have problems with zip files that don't store
+				// the size and crc in the header.
+				entry.Size = fs.Length;
+				fs.Close();
+
+				crc.Reset();
+				crc.Update(buffer);
+
+				entry.Crc  = crc.Value;
+
+				s.PutNextEntry(entry);
+
+				s.Write(buffer, 0, buffer.Length);
+
+			}
+
+			s.Finish();
+			s.Close();
+		}
+
+		private void CreateHtaccess()
+		{
+			StreamWriter htaccess = File.CreateText(Path.Combine (gallery_path,".htaccess"));
+			htaccess.Write("<Files info.txt>" + Environment.NewLine + "\tdeny from all" + Environment.NewLine+ "</Files>" + Environment.NewLine);
+			htaccess.Close();
+		}
+
+		private void CreateInfo()
+		{
+			StreamWriter info = File.CreateText(Path.Combine (gallery_path, "info.txt"));
+			info.WriteLine("name|" + gallery_name);
+			info.WriteLine("date|" + collection [0].Time.Date.ToString ("dd.MM.yyyy"));
+			info.WriteLine("description|" + description);
+			info.Close();
+		}
+	}
+
+	class HtmlGallery : FolderGallery
+	{
+		int perpage = 16;
+		string stylesheet = "f-spot-simple.css";
+		string altstylesheet = "f-spot-simple-white.css";
+		string javascript = "f-spot.js";
+
+		//Note for translators: light as clear, opposite as dark
+		static string light = Catalog.GetString("Light");
+		static string dark = Catalog.GetString("Dark");
+
+		ArrayList allTagNames = new ArrayList ();
+		Hashtable allTags = new Hashtable ();
+		Hashtable tagSets = new Hashtable ();
+
+		public HtmlGallery (IBrowsableCollection selection, string path, string name) : base (selection, path, name)
+		{
+			requests = new ScaleRequest [] { new ScaleRequest ("hq", 0, 0, false),
+							 new ScaleRequest ("mq", 480, 320, false),
+							 new ScaleRequest ("thumbs", 120, 90, false) };
+		}
+
+		protected override string ImageName (int photo_index)
+		{
+			return String.Format ("img-{0}.jpg", photo_index + 1);
+		}
+
+		public override void GenerateLayout ()
+		{
+			if (collection.Count == 0)
+				return;
+
+			base.GenerateLayout ();
+
+			IBrowsableItem [] photos = collection.Items;
+
+			int i;
+			for (i = 0; i < photos.Length; i++)
+				SavePhotoHtmlIndex (i);
+
+			for (i = 0; i < PageCount; i++)
+				SaveHtmlIndex (i);
+
+			if (exportTags) {
+				// identify tags present in these photos
+				i = 0;
+				foreach (IBrowsableItem photo in photos) {
+					foreach (var tag in photo.Tags) {
+						if (!tagSets.ContainsKey (tag.Name)) {
+							tagSets.Add (tag.Name, new ArrayList ());
+							allTags.Add (tag.Name, tag);
+						}
+						((ArrayList) tagSets [tag.Name]).Add (i);
+					}
+					i++;
+				}
+				allTagNames = new ArrayList (tagSets.Keys);
+				allTagNames.Sort ();
+
+				// create tag pages
+				SaveTagsPage ();
+				foreach (string tag in allTagNames) {
+					for (i = 0; i < TagPageCount (tag); i++)
+						SaveTagIndex (tag, i);
+				}
+			}
+
+			if (exportTags && exportTagIcons) {
+				SaveTagIcons ();
+			}
+
+			MakeDir (SubdirPath ("style"));
+			System.Reflection.Assembly assembly = System.Reflection.Assembly.GetCallingAssembly ();
+			using (Stream s = assembly.GetManifestResourceStream (stylesheet)) {
+				using (Stream fs = System.IO.File.Open (SubdirPath ("style", stylesheet), System.IO.FileMode.Create)) {
+
+					byte [] buffer = new byte [8192];
+					int n;
+					while ((n = s.Read (buffer, 0, buffer.Length)) != 0)
+						fs.Write (buffer, 0,  n);
+
+				}
+			}
+			/* quick and stupid solution
+			   this should have been iterated over an array of stylesheets, really
+			*/
+			using (Stream s = assembly.GetManifestResourceStream (altstylesheet)) {
+				using (Stream fs = System.IO.File.Open (SubdirPath ("style", altstylesheet), System.IO.FileMode.Create)) {
+
+					byte [] buffer = new byte [8192];
+					int n = 0;
+					while ((n = s.Read (buffer, 0, buffer.Length)) != 0)
+						fs.Write (buffer, 0,  n);
+
+				}
+			}
+
+			/* Javascript for persistant style change */
+			MakeDir (SubdirPath ("script"));
+			using (Stream s = assembly.GetManifestResourceStream (javascript)) {
+				using (Stream fs = System.IO.File.Open (SubdirPath ("script", javascript), System.IO.FileMode.Create)) {
+
+					byte [] buffer = new byte [8192];
+					int n = 0;
+					while ((n = s.Read (buffer, 0, buffer.Length)) != 0)
+						fs.Write (buffer, 0,  n);
+
+				}
+			}
+		}
+
+		public int PageCount {
+			get {
+				return 	(int) System.Math.Ceiling (collection.Items.Length / (double)perpage);
+			}
+		}
+
+		public int TagPageCount (string tag)
+		{
+			return (int) System.Math.Ceiling (((ArrayList) tagSets [tag]).Count / (double)perpage);
+		}
+
+		public string PhotoThumbPath (int item)
+		{
+			return System.IO.Path.Combine (requests [2].Name, ImageName (item));
+		}
+
+		public string PhotoWebPath (int item)
+		{
+			return System.IO.Path.Combine (requests [1].Name, ImageName (item));
+		}
+
+		public string PhotoOriginalPath (int item)
+		{
+			return System.IO.Path.Combine (requests [0].Name, ImageName (item));
+		}
+
+		public string PhotoIndexPath (int item)
+		{
+			return (System.IO.Path.GetFileNameWithoutExtension (ImageName (item)) + ".html");
+		}
+
+		public static void WritePageNav (System.Web.UI.HtmlTextWriter writer, string id, string url, string name)
+		{
+			writer.AddAttribute ("id", id);
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("href", url);
+			writer.RenderBeginTag ("a");
+			writer.Write (name);
+			writer.RenderEndTag ();
+
+			writer.RenderEndTag ();
+		}
+
+		public void SavePhotoHtmlIndex (int i)
+		{
+			System.IO.StreamWriter stream = System.IO.File.CreateText (SubdirPath (PhotoIndexPath (i)));
+			System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter (stream);
+
+			//writer.Indent = 4;
+
+			//writer.Write ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
+			writer.WriteLine ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
+			writer.AddAttribute ("xmlns", "http://www.w3.org/1999/xhtml");
+			writer.AddAttribute ("xml:lang", this.Language);
+			writer.RenderBeginTag ("html");
+
+			WriteHeader (writer);
+
+			writer.AddAttribute ("onload", "checkForTheme()");
+			writer.RenderBeginTag ("body");
+
+			writer.AddAttribute ("class", "container1");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("class", "header");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("id", "title");
+			writer.RenderBeginTag ("div");
+			writer.Write (gallery_name);
+			writer.RenderEndTag ();
+
+			writer.AddAttribute ("class", "navi");
+			writer.RenderBeginTag ("div");
+
+			if (i > 0)
+				// Abbreviation of previous
+				WritePageNav (writer, "prev", PhotoIndexPath (i - 1), Catalog.GetString("Prev"));
+
+			WritePageNav (writer, "index", IndexPath (i / perpage), Catalog.GetString("Index"));
+
+			if (exportTags)
+				WritePageNav (writer, "tagpage", TagsIndexPath (), Catalog.GetString ("Tags"));
+
+			if (i < collection.Count -1)
+				WritePageNav (writer, "next", PhotoIndexPath (i + 1), Catalog.GetString("Next"));
+
+			writer.RenderEndTag (); //navi
+
+			writer.RenderEndTag (); //header
+
+			writer.AddAttribute ("class", "photo");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("href", PhotoOriginalPath (i));
+			writer.RenderBeginTag ("a");
+
+			writer.AddAttribute ("src", PhotoWebPath (i));
+			writer.AddAttribute ("alt", "#");
+			writer.AddAttribute ("class", "picture");
+			writer.RenderBeginTag ("img");
+			writer.RenderEndTag (); //img
+			writer.RenderEndTag (); //a
+
+			writer.AddAttribute ("id", "description");
+			writer.RenderBeginTag ("div");
+			writer.Write (collection [i].Description);
+			writer.RenderEndTag (); //div#description
+
+			writer.RenderEndTag (); //div.photo
+
+			WriteTagsLinks (writer, collection [i].Tags);
+
+			WriteStyleSelectionBox (writer);
+
+			writer.RenderEndTag (); //container1
+
+			WriteFooter (writer);
+
+			writer.RenderEndTag (); //body
+			writer.RenderEndTag (); // html
+
+			writer.Close ();
+			stream.Close ();
+		}
+
+		public static string IndexPath (int page_num)
+		{
+			if (page_num == 0)
+				return "index.html";
+			else
+				return String.Format ("index{0}.html", page_num);
+		}
+
+		public static string TagsIndexPath ()
+		{
+			return "tags.html";
+		}
+
+		public static string TagIndexPath (string tag, int page_num)
+		{
+			string name = "tag_"+tag;
+			name = name.Replace ("/", "_").Replace (" ","_");
+			if (page_num == 0)
+				return name + ".html";
+			else
+				return name + String.Format ("_{0}.html", page_num);
+		}
+
+		static string IndexTitle (int page)
+		{
+			return String.Format ("{0}", page + 1);
+		}
+
+		public void WriteHeader (System.Web.UI.HtmlTextWriter writer)
+		{
+			WriteHeader (writer, "");
+		}
+
+		public void WriteHeader (System.Web.UI.HtmlTextWriter writer, string titleExtension)
+		{
+			writer.RenderBeginTag ("head");
+			/* It seems HtmlTextWriter always uses UTF-8, unless told otherwise */
+			writer.Write ("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
+			writer.WriteLine ();
+			writer.RenderBeginTag ("title");
+			writer.Write (gallery_name + titleExtension);
+			writer.RenderEndTag ();
+
+			writer.Write ("<link type=\"text/css\" rel=\"stylesheet\" href=\"");
+			writer.Write (String.Format ("{0}", "style/" + stylesheet));
+			writer.Write ("\" title=\"" + dark + "\" media=\"screen\" />" + Environment.NewLine);
+
+			writer.Write ("<link type=\"text/css\" rel=\"prefetch ") ;
+			writer.Write ("alternate stylesheet\" href=\"");
+			writer.Write (String.Format ("{0}", "style/" + altstylesheet));
+			writer.Write ("\" title=\"" + light + "\" media=\"screen\" />" + Environment.NewLine);
+
+			writer.Write ("<script src=\"script/" + javascript + "\"");
+			writer.Write (" type=\"text/javascript\"></script>" + Environment.NewLine);
+
+			writer.RenderEndTag ();
+		}
+
+		public static void WriteFooter (System.Web.UI.HtmlTextWriter writer)
+		{
+			writer.AddAttribute ("class", "footer");
+			writer.RenderBeginTag ("div");
+
+			writer.Write (Catalog.GetString ("Gallery generated by") + " ");
+
+			writer.AddAttribute ("href", "http://f-spot.org");
+			writer.RenderBeginTag ("a");
+			writer.Write (String.Format ("{0} {1}", FSpot.Core.Defines.PACKAGE, FSpot.Core.Defines.VERSION));
+			writer.RenderEndTag ();
+
+			writer.RenderEndTag ();
+		}
+
+		public static void WriteStyleSelectionBox (System.Web.UI.HtmlTextWriter writer)
+		{
+			//Style Selection Box
+			writer.AddAttribute ("id", "styleboxcontainer");
+			writer.RenderBeginTag ("div");
+			writer.AddAttribute ("id", "stylebox");
+			writer.AddAttribute ("style", "display: none;");
+			writer.RenderBeginTag ("div");
+			writer.RenderBeginTag ("ul");
+			writer.RenderBeginTag ("li");
+			writer.AddAttribute ("href", "#");
+			writer.AddAttribute ("title", dark);
+			writer.AddAttribute ("onclick", "setActiveStyleSheet('" + dark + "')");
+			writer.RenderBeginTag ("a");
+			writer.Write (dark);
+			writer.RenderEndTag (); //a
+			writer.RenderEndTag (); //li
+			writer.RenderBeginTag ("li");
+			writer.AddAttribute ("href", "#");
+			writer.AddAttribute ("title", light);
+			writer.AddAttribute ("onclick", "setActiveStyleSheet('" + light + "')");
+			writer.RenderBeginTag ("a");
+			writer.Write (light);
+			writer.RenderEndTag (); //a
+			writer.RenderEndTag (); //li
+			writer.RenderEndTag (); //ul
+			writer.RenderEndTag (); //div stylebox
+			writer.RenderBeginTag ("div");
+			writer.Write ("<span class=\"style_toggle\">");
+			writer.Write ("<a href=\"javascript:toggle_stylebox()\">");
+			writer.Write ("<span id=\"showlink\">" + Catalog.GetString("Show Styles") + "</span><span id=\"hidelink\" ");
+			writer.Write ("style=\"display:none;\">" + Catalog.GetString("Hide Styles") + "</span></a></span>" + Environment.NewLine);
+			writer.RenderEndTag (); //div toggle
+			writer.RenderEndTag (); //div styleboxcontainer
+		}
+
+		public void WriteTagsLinks (System.Web.UI.HtmlTextWriter writer, Tag[] tags)
+		{
+			ArrayList tagsList = new ArrayList (tags.Length);
+			foreach (var tag in tags) {
+				tagsList.Add (tag);
+			}
+			WriteTagsLinks (writer, tagsList);
+		}
+
+		public void WriteTagsLinks (System.Web.UI.HtmlTextWriter writer, System.Collections.ICollection tags)
+		{
+
+			// check if we should write tags
+			if (!exportTags && tags.Count>0)
+				return;
+
+			writer.AddAttribute ("id", "tagbox");
+			writer.RenderBeginTag ("div");
+			writer.RenderBeginTag ("h1");
+			writer.Write (Catalog.GetString ("Tags"));
+			writer.RenderEndTag (); //h1
+			writer.AddAttribute ("id", "innertagbox");
+			writer.RenderBeginTag ("ul");
+			foreach (Tag tag in tags) {
+				writer.AddAttribute ("class", "tag");
+				writer.RenderBeginTag ("li");
+				writer.AddAttribute ("href", TagIndexPath (tag.Name, 0));
+				writer.RenderBeginTag ("a");
+				if (exportTagIcons) {
+					writer.AddAttribute ("alt", tag.Name);
+					writer.AddAttribute ("longdesc", Catalog.GetString ("Tags: ")+tag.Name);
+					writer.AddAttribute ("title", Catalog.GetString ("Tags: ")+tag.Name);
+					writer.AddAttribute ("src", TagPath (tag));
+					writer.RenderBeginTag ("img");
+					writer.RenderEndTag ();
+				}
+				writer.Write(" ");
+				if (exportTagIcons)
+					writer.AddAttribute ("class", "tagtext-icon");
+				else
+					writer.AddAttribute ("class", "tagtext-noicon");
+				writer.RenderBeginTag ("span");
+				writer.Write (tag.Name);
+				writer.RenderEndTag (); //span.tagtext
+				writer.RenderEndTag (); //a href
+				writer.RenderEndTag (); //div.tag
+			}
+			writer.RenderEndTag (); //div#tagbox
+		}
+
+		public void SaveTagsPage ()
+		{
+			System.IO.StreamWriter stream = System.IO.File.CreateText (SubdirPath (TagsIndexPath ()));
+			System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter (stream);
+
+			writer.WriteLine ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
+			writer.AddAttribute ("xmlns", "http://www.w3.org/1999/xhtml");
+			writer.AddAttribute ("xml:lang", this.Language);
+			writer.RenderBeginTag ("html");
+			string titleExtension = " " + Catalog.GetString ("Tags");
+			WriteHeader (writer, titleExtension);
+
+			writer.AddAttribute ("onload", "checkForTheme()");
+			writer.AddAttribute ("id", "tagpage");
+			writer.RenderBeginTag ("body");
+
+			writer.AddAttribute ("class", "container1");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("class", "header");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("id", "title");
+			writer.RenderBeginTag ("div");
+			writer.Write (gallery_name + titleExtension);
+			writer.RenderEndTag (); //title div
+
+			writer.AddAttribute ("class", "navi");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("class", "navipage");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("href", IndexPath (0));
+			writer.RenderBeginTag ("a");
+			writer.Write (Catalog.GetString ("Index"));
+			writer.RenderEndTag (); //a
+
+			writer.RenderEndTag (); //navipage
+			writer.RenderEndTag (); //navi
+			writer.RenderEndTag (); //header
+
+			WriteTagsLinks (writer, allTags.Values);
+
+			WriteStyleSelectionBox (writer);
+
+			writer.RenderEndTag (); //container1
+
+			WriteFooter (writer);
+
+			writer.RenderEndTag (); //body
+			writer.RenderEndTag (); //html
+
+			writer.Close ();
+			stream.Close ();
+		}
+
+		public void SaveTagIndex (string tag, int page_num)
+		{
+			System.IO.StreamWriter stream = System.IO.File.CreateText (SubdirPath (TagIndexPath (tag, page_num)));
+			System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter (stream);
+
+			writer.WriteLine ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
+			writer.AddAttribute ("xmlns", "http://www.w3.org/1999/xhtml");
+			writer.AddAttribute ("xml:lang", this.Language);
+			writer.RenderBeginTag ("html");
+			string titleExtension = ": " + tag;
+			WriteHeader (writer, titleExtension);
+
+			writer.AddAttribute ("onload", "checkForTheme()");
+			writer.RenderBeginTag ("body");
+
+			writer.AddAttribute ("class", "container1");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("class", "header");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("id", "title");
+			writer.RenderBeginTag ("div");
+			writer.Write (gallery_name + titleExtension);
+			writer.RenderEndTag (); //title div
+
+			writer.AddAttribute ("class", "navi");
+			writer.RenderBeginTag ("div");
+
+			// link to all photos
+			writer.AddAttribute ("class", "navipage");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("href", IndexPath (0));
+			writer.RenderBeginTag ("a");
+			writer.Write ("Index");
+			writer.RenderEndTag (); //a
+
+			writer.RenderEndTag (); //navipage
+			// end link to all photos
+
+			// link to all tags
+			writer.AddAttribute ("class", "navipage");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("href", TagsIndexPath ());
+			writer.RenderBeginTag ("a");
+			writer.Write ("Tags");
+			writer.RenderEndTag (); //a
+
+			writer.RenderEndTag (); //navipage
+			// end link to all tags
+
+			writer.AddAttribute ("class", "navilabel");
+			writer.RenderBeginTag ("div");
+			writer.Write (Catalog.GetString ("Page:"));
+			writer.RenderEndTag (); //pages div
+
+			int i;
+			for (i = 0; i < TagPageCount (tag); i++) {
+				writer.AddAttribute ("class", i == page_num ? "navipage-current" : "navipage");
+				writer.RenderBeginTag ("div");
+
+				writer.AddAttribute ("href", TagIndexPath (tag, i));
+				writer.RenderBeginTag ("a");
+				writer.Write (IndexTitle (i));
+				writer.RenderEndTag (); //a
+
+				writer.RenderEndTag (); //navipage
+			}
+			writer.RenderEndTag (); //navi
+			writer.RenderEndTag (); //header
+
+			writer.AddAttribute ("class", "thumbs");
+			writer.RenderBeginTag ("div");
+
+			int start = page_num * perpage;
+			ArrayList tagSet = (ArrayList) tagSets [tag];
+			int end = Math.Min (start + perpage, tagSet.Count);
+			for (i = start; i < end; i++) {
+				writer.AddAttribute ("href", PhotoIndexPath ((int) tagSet [i]));
+				writer.RenderBeginTag ("a");
+
+				writer.AddAttribute  ("src", PhotoThumbPath ((int) tagSet [i]));
+				writer.AddAttribute  ("alt", "#");
+				writer.RenderBeginTag ("img");
+				writer.RenderEndTag ();
+
+				writer.RenderEndTag (); //a
+			}
+
+			writer.RenderEndTag (); //thumbs
+
+			writer.AddAttribute ("id", "gallery_description");
+			writer.RenderBeginTag ("div");
+			writer.Write (description);
+			writer.RenderEndTag (); //description
+
+			WriteStyleSelectionBox (writer);
+
+			writer.RenderEndTag (); //container1
+
+			WriteFooter (writer);
+
+			writer.RenderEndTag (); //body
+			writer.RenderEndTag (); //html
+
+			writer.Close ();
+			stream.Close ();
+		}
+
+		public void SaveTagIcons ()
+		{
+			MakeDir (SubdirPath ("tags"));
+			foreach (Tag tag in allTags.Values)
+				SaveTagIcon (tag);
+		}
+
+		public void SaveTagIcon (Tag tag) {
+			Gdk.Pixbuf icon = tag.Icon;
+			Gdk.Pixbuf scaled = null;
+			if (icon.Height != 52 || icon.Width != 52) {
+				scaled=icon.ScaleSimple(52,52,Gdk.InterpType.Bilinear);
+			} else
+				scaled=icon.Copy ();
+			scaled.Save (SubdirPath("tags",TagName(tag)), "png");
+			scaled.Dispose ();
+		}
+
+		public string TagPath (Tag tag)
+		{
+			return System.IO.Path.Combine("tags",TagName(tag));
+		}
+
+		public string TagName (Tag tag)
+		{
+			return "tag_"+ ((DbItem)tag).Id+".png";
+		}
+
+		public void SaveHtmlIndex (int page_num)
+		{
+			System.IO.StreamWriter stream = System.IO.File.CreateText (SubdirPath (IndexPath (page_num)));
+			System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter (stream);
+
+			//writer.Indent = 4;
+
+			//writer.Write ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
+			writer.WriteLine ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
+			writer.AddAttribute ("xmlns", "http://www.w3.org/1999/xhtml");
+			writer.AddAttribute ("xml:lang", this.Language);
+			writer.RenderBeginTag ("html");
+			WriteHeader (writer);
+
+			writer.AddAttribute ("onload", "checkForTheme()");
+			writer.RenderBeginTag ("body");
+
+
+
+			writer.AddAttribute ("class", "container1");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("class", "header");
+			writer.RenderBeginTag ("div");
+
+			writer.AddAttribute ("id", "title");
+			writer.RenderBeginTag ("div");
+			writer.Write (gallery_name);
+			writer.RenderEndTag (); //title div
+
+			writer.AddAttribute ("class", "navi");
+			writer.RenderBeginTag ("div");
+
+			if (exportTags) {
+				// link to all tags
+				writer.AddAttribute ("class", "navipage");
+				writer.RenderBeginTag ("div");
+
+				writer.AddAttribute ("href", TagsIndexPath ());
+				writer.RenderBeginTag ("a");
+				writer.Write ("Tags");
+				writer.RenderEndTag (); //a
+
+				writer.RenderEndTag (); //navipage
+				// end link to all tags
+			}
+
+			writer.AddAttribute ("class", "navilabel");
+			writer.RenderBeginTag ("div");
+			writer.Write (Catalog.GetString ("Page:"));
+			writer.RenderEndTag (); //pages div
+
+			int i;
+			for (i = 0; i < PageCount; i++) {
+				writer.AddAttribute ("class", i == page_num ? "navipage-current" : "navipage");
+				writer.RenderBeginTag ("div");
+
+				writer.AddAttribute ("href", IndexPath (i));
+				writer.RenderBeginTag ("a");
+				writer.Write (IndexTitle (i));
+				writer.RenderEndTag (); //a
+
+				writer.RenderEndTag (); //navipage
+			}
+			writer.RenderEndTag (); //navi
+			writer.RenderEndTag (); //header
+
+			writer.AddAttribute ("class", "thumbs");
+			writer.RenderBeginTag ("div");
+
+			int start = page_num * perpage;
+			int end = Math.Min (start + perpage, collection.Count);
+			for (i = start; i < end; i++) {
+				writer.AddAttribute ("href", PhotoIndexPath (i));
+				writer.RenderBeginTag ("a");
+
+				writer.AddAttribute  ("src", PhotoThumbPath (i));
+				writer.AddAttribute  ("alt", "#");
+				writer.RenderBeginTag ("img");
+				writer.RenderEndTag ();
+
+				writer.RenderEndTag (); //a
+			}
+
+			writer.RenderEndTag (); //thumbs
+
+			writer.AddAttribute ("id", "gallery_description");
+			writer.RenderBeginTag ("div");
+			writer.Write (description);
+			writer.RenderEndTag (); //description
+
+			WriteStyleSelectionBox (writer);
+
+			writer.RenderEndTag (); //container1
+
+			WriteFooter (writer);
+
+			writer.RenderEndTag (); //body
+			writer.RenderEndTag (); //html
+
+			writer.Close ();
+			stream.Close ();
+		}
+
+	}
+}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile.am b/src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile.am
new file mode 100644
index 0000000..115d01f
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile.am
@@ -0,0 +1,15 @@
+ASSEMBLY = FSpot.Exporters.Folder
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FOLDEREXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Exporters.Folder/FolderExport.cs
+
+RESOURCES =  \
+	Resources/FolderExport.addin.xml \
+	Resources/FolderExport.glade \
+	Resources/f-spot.js \
+	Resources/f-spot-simple.css \
+	Resources/f-spot-simple-white.css
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile.in b/src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile.in
new file mode 100644
index 0000000..4634d5d
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile.in
@@ -0,0 +1,811 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Exporters/FSpot.Exporters.Folder
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.Folder
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FOLDEREXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Exporters.Folder/FolderExport.cs
+RESOURCES = \
+	Resources/FolderExport.addin.xml \
+	Resources/FolderExport.glade \
+	Resources/f-spot.js \
+	Resources/f-spot-simple.css \
+	Resources/f-spot-simple-white.css
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Folder/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/FolderExport.addin.xml b/src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/FolderExport.addin.xml
new file mode 100644
index 0000000..10184be
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/FolderExport.addin.xml
@@ -0,0 +1,18 @@
+<Addin namespace="FSpot"
+	version="0.8"
+	compatVersion="0.8"
+	name="Folder Export"
+	description="This extension allows you to export your photos to HTML galleries, Original galleries or just to a folder."
+	author="F-Spot team"
+	url="http://f-spot.org"
+	defaultEnabled="true"
+	category="Export">
+
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+
+	<Extension path = "/FSpot/Menus/Exports">
+		<ExportMenuItem id="Folder" _label = "F_older..." class = "FSpot.Exporters.Folder.FolderExport" />
+	</Extension>
+</Addin>
diff --git a/extensions/Exporters/FolderExport/FolderExport.glade b/src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/FolderExport.glade
similarity index 100%
rename from extensions/Exporters/FolderExport/FolderExport.glade
rename to src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/FolderExport.glade
diff --git a/extensions/Exporters/FolderExport/f-spot-simple-white.css b/src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/f-spot-simple-white.css
similarity index 100%
rename from extensions/Exporters/FolderExport/f-spot-simple-white.css
rename to src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/f-spot-simple-white.css
diff --git a/extensions/Exporters/FolderExport/f-spot-simple.css b/src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/f-spot-simple.css
similarity index 100%
rename from extensions/Exporters/FolderExport/f-spot-simple.css
rename to src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/f-spot-simple.css
diff --git a/extensions/Exporters/FolderExport/f-spot.js b/src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/f-spot.js
similarity index 100%
rename from extensions/Exporters/FolderExport/f-spot.js
rename to src/Extensions/Exporters/FSpot.Exporters.Folder/Resources/f-spot.js
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
new file mode 100644
index 0000000..6820ca6
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/FormClient.cs
@@ -0,0 +1,301 @@
+using System;
+using System.Net;
+using System.IO;
+using System.Text;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Web;
+using Hyena;
+using FSpot.Core;
+
+namespace FSpot.Exporters.Gallery {
+	public class FormClient {
+		private struct FormItem {
+			public string Name;
+			public object Value;
+	
+			public FormItem (string name, object value) {
+				Name = name;
+				Value = value;
+			}
+		}
+	
+		private StreamWriter stream_writer;
+		private ArrayList Items;
+	
+		private string boundary;
+		private string start_boundary;
+		private string end_boundary;
+	
+		private bool multipart = false;
+		public bool Multipart {
+			set { multipart = value; }
+		}
+	
+		private bool first_item;
+	
+		public bool Buffer = false;
+		public bool SuppressCookiePath = false;
+	
+		public bool expect_continue = true;
+	
+		public HttpWebRequest Request;
+		public CookieContainer Cookies;
+	
+		public FSpot.ProgressItem Progress;
+	
+		public FormClient (CookieContainer cookies) 
+		{
+			this.Cookies = cookies;
+			this.Items = new ArrayList ();
+		}
+		
+		public FormClient ()
+		{
+			this.Items = new ArrayList ();
+			this.Cookies = new CookieContainer ();
+		}
+		
+		private void GenerateBoundary () 
+		{
+			Guid guid = Guid.NewGuid ();
+			boundary = "--------" + guid.ToString () + "-----";
+			start_boundary = "--" + boundary; 
+			end_boundary = start_boundary + "--";
+		}
+		
+		public void Add (string name, string value)
+		{
+			Items.Add (new FormItem (name, value));
+		}
+		
+		public void Add (string name, FileInfo fileinfo)
+		{
+			multipart = true;
+			Items.Add (new FormItem (name, fileinfo));
+		}
+	
+		private void Write (FormItem item) {
+			// The types we check here need to match the
+			// types we allow in .Add
+	
+			if (item.Value == null) {
+				Write (item.Name, (string)String.Empty);
+			} else if (item.Value is FileInfo) {
+				Write (item.Name, (FileInfo)item.Value);
+			} else if (item.Value is string) {
+				Write (item.Name, (string)item.Value);
+			} else {
+				throw new Exception ("Unknown value type");
+			}
+		}
+	
+		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);
+			} else if (item.Value is FileInfo) {
+				return MultipartLength (item.Name, (FileInfo)item.Value);
+			} else if (item.Value is string) {
+				return MultipartLength (item.Name, (string)item.Value);
+			} else {
+				throw new Exception ("Unknown value type");
+			}
+		}
+	
+		private string MultipartHeader (string name, string value)
+		{
+			return string.Format ("{0}\r\n" + 
+					      "Content-Disposition: form-data; name=\"{1}\"\r\n" +
+					      "\r\n", start_boundary, name);
+		}
+	
+		private long MultipartLength (string name, string value)
+		{
+			long length = MultipartHeader (name, value).Length;
+			length += value.Length + 2;
+			return length;
+		}
+	
+		private void Write (string name, string value) 
+		{
+			string cmd;
+			
+			if (multipart) {
+				cmd = String.Format ("{0}"
+						     + "{1}\r\n",
+						     MultipartHeader (name, value), value);
+			} else {
+				name = HttpUtility.UrlEncode (name.Replace(" ", "+"));
+				value = HttpUtility.UrlEncode (value.Replace(" ", "+"));
+				if (first_item) {
+					cmd = string.Format ("{0}={1}", name, value);
+					first_item = false;
+				} else {
+					cmd = string.Format ("&{0}={1}", name, value);
+				}
+			}
+			//Console.WriteLine (cmd);
+			stream_writer.Write  (cmd);
+		}
+	
+		private string MultipartHeader (string name, FileInfo file)
+		{
+			string cmd = string.Format ("{0}\r\n"
+						    + "Content-Disposition: form-data; name=\"{1}\"; filename=\"{2}\"\r\n"
+						    + "Content-Type: image/jpeg\r\n"
+						    + "\r\n", 
+						    start_boundary, name, file.Name);
+			return cmd;
+		}
+	
+		private long MultipartLength (string name, FileInfo file)
+		{
+			long length = MultipartHeader (name, file).Length;
+			length += file.Length + 2;
+			return length;
+		}
+	
+	       	private void Write (string name, FileInfo file)
+		{
+			if (multipart) {
+				stream_writer.Write (MultipartHeader (name, file));
+				stream_writer.Flush ();
+				Stream stream = stream_writer.BaseStream;
+				byte [] data = new byte [32768];
+				FileStream fs = file.OpenRead ();
+				long total = file.Length;
+				long total_read = 0;
+	
+				int count;			
+				while ((count = fs.Read (data, 0, data.Length)) > 0) {
+					stream.Write (data, 0, count);
+					total_read += count;
+					if (Progress != null)
+						Progress.Value = total_read / (double)total;
+	
+				}
+				fs.Close ();
+	
+				stream_writer.Write ("\r\n");
+			} else {
+				throw new Exception ("Can't write files in url-encoded submissions");
+			}
+		}
+	
+	
+		public void Clear () 
+		{
+			Items.Clear ();
+			multipart = false;
+		}
+	
+		public HttpWebResponse Submit (string url)
+		{
+			return Submit (url, null);
+		}
+	
+		public HttpWebResponse Submit (string url, FSpot.ProgressItem item)
+		{
+			return Submit (new Uri (url), item);
+		}
+		
+		public HttpWebResponse Submit (Uri uri)
+		{
+			return Submit (uri, null);
+		}
+	
+		public HttpWebResponse Submit (Uri uri, FSpot.ProgressItem progress_item) 
+		{
+			this.Progress = progress_item;
+			Request = (HttpWebRequest) WebRequest.Create (uri);
+			CookieCollection cookie_collection = Cookies.GetCookies (uri);
+	
+			if (uri.UserInfo != null && uri.UserInfo != String.Empty) {
+				NetworkCredential cred = new NetworkCredential ();
+				cred.GetCredential (uri, "basic");
+				CredentialCache credcache = new CredentialCache();
+				credcache.Add(uri, "basic", cred);
+				
+				Request.PreAuthenticate = true;
+				Request.Credentials = credcache;	
+			}
+	
+			Request.ServicePoint.Expect100Continue = expect_continue;
+	
+			Request.CookieContainer = new CookieContainer ();
+			foreach (Cookie c in cookie_collection) {
+				if (SuppressCookiePath) 
+					Request.CookieContainer.Add (new Cookie (c.Name, c.Value));
+				else
+					Request.CookieContainer.Add (c);
+			}
+	
+			Request.Method = "POST";
+			Request.Headers["Accept-Charset"] = "utf-8;";
+			Request.UserAgent = String.Format("F-Spot {0} (http://www.f-spot.org)", Defines.VERSION);
+	
+			if (multipart) {
+				GenerateBoundary ();
+				Request.ContentType = "multipart/form-data; boundary=" + boundary;
+				Request.Timeout = Request.Timeout * 3;
+	
+				long length = 0;
+				for (int i = 0; i < Items.Count; i++) {
+					FormItem item = (FormItem)Items[i];
+					
+					length += MultipartLength (item);
+				}
+				length += end_boundary.Length + 2;
+				
+				//Request.Headers["My-Content-Length"] = length.ToString ();
+				if (Buffer == false) {
+					Request.ContentLength = length;	
+					Request.AllowWriteStreamBuffering = false;
+				}
+			} else {
+				Request.ContentType = "application/x-www-form-urlencoded";
+			}
+			
+			stream_writer = new StreamWriter (Request.GetRequestStream ());
+			
+			first_item = true;
+			for (int i = 0; i < Items.Count; i++) {
+				FormItem item = (FormItem)Items[i];
+				
+				Write (item);
+			}
+			
+			if (multipart)
+				stream_writer.Write (end_boundary + "\r\n");
+			
+			stream_writer.Flush ();
+			stream_writer.Close ();
+	
+			HttpWebResponse response; 
+	
+			try {
+				response = (HttpWebResponse) Request.GetResponse ();
+				
+				//Console.WriteLine ("found {0} cookies", response.Cookies.Count);
+				
+				foreach (Cookie c in response.Cookies) {
+					Cookies.Add (c);
+				}
+			} catch (WebException e) {
+				if (e.Status == WebExceptionStatus.ProtocolError 
+				    && ((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.ExpectationFailed && expect_continue) {
+					e.Response.Close ();
+					expect_continue = false;
+					return Submit (uri, progress_item);
+				}
+				
+				throw new WebException (Mono.Unix.Catalog.GetString ("Unhandled exception"), e);
+			}
+	
+			return response;
+		}
+	}
+}
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
new file mode 100644
index 0000000..785a4b2
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryExport.cs
@@ -0,0 +1,990 @@
+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 FSpot;
+using FSpot.Core;
+using FSpot.Filters;
+using FSpot.Widgets;
+using FSpot.Utils;
+using FSpot.UI.Dialog;
+using FSpot.Extensions;
+
+using Hyena;
+using Hyena.Widgets;
+
+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)
+		{
+			this.name = name;
+			this.username = username;
+			this.password = password;
+			this.Url = url;
+
+			if (version != GalleryVersion.VersionUnknown) {
+				this.version = version;
+			} else {
+				this.version = Gallery.DetectGalleryVersion(Url);
+			}
+		}
+
+		public const string EXPORT_SERVICE = "gallery/";
+		public const string LIGHTTPD_WORKAROUND_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "lighttpd_workaround";
+
+		public Gallery Connect ()
+		{
+			//System.Console.WriteLine ("GalleryAccount.Connect()");
+			Gallery gal = null;
+
+			if (version == GalleryVersion.VersionUnknown)
+				this.version = Gallery.DetectGalleryVersion(Url);
+
+			if (version == GalleryVersion.Version1) {
+				gal = new Gallery1 (url, url);
+			} else if (version == GalleryVersion.Version2) {
+				gal = new Gallery2 (url, url);
+			} else {
+				throw new GalleryException (Catalog.GetString("Cannot connect to a Gallery for which the version is unknown.\nPlease check that you have Remote plugin 1.0.8 or later"));
+			}
+
+			Log.Debug ("Gallery created: " + gal);
+
+			gal.Login (username, password);
+
+			gallery = gal;
+			connected = true;
+
+			gallery.expect_continue = Preferences.Get<bool> (LIGHTTPD_WORKAROUND_KEY);
+
+			return gallery;
+		}
+
+		GalleryVersion version;
+		public GalleryVersion Version{
+			get {
+				return version;
+			}
+		}
+
+		private bool connected;
+		public bool Connected {
+			get {
+				bool retVal = false;
+				if(gallery != null) {
+					retVal = gallery.IsConnected ();
+				}
+				if (connected != retVal) {
+					Log.Warning ("Connected and retVal for IsConnected() don't agree");
+				}
+				return retVal;
+			}
+		}
+
+		public void MarkChanged ()
+		{
+			connected = false;
+			gallery = null;
+		}
+
+		Gallery gallery;
+		public Gallery Gallery {
+			get {
+				return gallery;
+			}
+		}
+
+		string name;
+		public string Name {
+			get {
+				return name;
+			}
+			set {
+				name = value;
+			}
+		}
+
+		string url;
+		public string Url {
+			get {
+				return url;
+			}
+			set {
+				if (url != value) {
+					url = value;
+					MarkChanged ();
+				}
+			}
+		}
+
+		string username;
+		public string Username {
+			get {
+				return username;
+			}
+			set {
+				if (username != value) {
+					username = value;
+					MarkChanged ();
+				}
+			}
+		}
+
+		string password;
+		public string Password {
+			get {
+				return password;
+			}
+			set {
+				if (password != value) {
+					password = value;
+					MarkChanged ();
+				}
+			}
+		}
+	}
+
+
+	public class GalleryAccountManager
+	{
+		private static GalleryAccountManager instance;
+		string xml_path;
+		ArrayList accounts;
+
+		public delegate void AccountListChangedHandler (GalleryAccountManager manager, GalleryAccount changed_account);
+		public event AccountListChangedHandler AccountListChanged;
+
+		public static GalleryAccountManager GetInstance ()
+		{
+			if (instance == null) {
+				instance = new GalleryAccountManager ();
+			}
+
+			return instance;
+		}
+
+		private GalleryAccountManager ()
+		{
+			// FIXME this xml file path should be be retrieved from a central location not hard coded there
+			this.xml_path = System.IO.Path.Combine (FSpot.Core.Global.BaseDirectory, "Accounts.xml");
+
+			accounts = new ArrayList ();
+			ReadAccounts ();
+		}
+
+		public void MarkChanged ()
+		{
+			MarkChanged (true, null);
+		}
+
+		public void MarkChanged (bool write, GalleryAccount changed_account)
+		{
+			if (write)
+				WriteAccounts ();
+
+			if (AccountListChanged != null)
+				AccountListChanged (this, changed_account);
+		}
+
+		public ArrayList GetAccounts ()
+		{
+			return accounts;
+		}
+
+		public void AddAccount (GalleryAccount account)
+		{
+			AddAccount (account, true);
+		}
+
+		public void AddAccount (GalleryAccount account, bool write)
+		{
+			accounts.Add (account);
+			MarkChanged (write, account);
+		}
+
+		public void RemoveAccount (GalleryAccount account)
+		{
+			accounts.Remove (account);
+			MarkChanged ();
+		}
+
+		public void WriteAccounts ()
+		{
+			System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter (xml_path, System.Text.Encoding.Default);
+
+			writer.Formatting = System.Xml.Formatting.Indented;
+			writer.Indentation = 2;
+			writer.IndentChar = ' ';
+
+			writer.WriteStartDocument (true);
+
+			writer.WriteStartElement ("GalleryRemote");
+			foreach (GalleryAccount account in accounts) {
+				writer.WriteStartElement ("Account");
+				writer.WriteElementString ("Name", account.Name);
+
+				writer.WriteElementString ("Url", account.Url);
+				writer.WriteElementString ("Username", account.Username);
+				writer.WriteElementString ("Password", account.Password);
+				writer.WriteElementString ("Version", account.Version.ToString());
+				writer.WriteEndElement (); //Account
+			}
+			writer.WriteEndElement ();
+			writer.WriteEndDocument ();
+			writer.Close ();
+		}
+
+		private GalleryAccount ParseAccount (System.Xml.XmlNode node)
+		{
+			if (node.Name != "Account")
+
+				return null;
+
+			string name = null;
+			string url = null;
+			string username = null;
+			string password = null;
+			GalleryVersion version = GalleryVersion.VersionUnknown;
+
+			foreach (System.Xml.XmlNode child in node.ChildNodes) {
+				if (child.Name == "Name") {
+					name = child.ChildNodes [0].Value;
+
+				} else if (child.Name == "Url") {
+					url = child.ChildNodes [0].Value;
+				} else if (child.Name == "Password") {
+					password = child.ChildNodes [0].Value;
+				} else if (child.Name == "Username") {
+					username = child.ChildNodes [0].Value;
+				} else if (child.Name == "Version") {
+					string versionString = child.ChildNodes [0].Value;
+					if (versionString == "Version1")
+						version = GalleryVersion.Version1;
+					else if (versionString == "Version2")
+						version = GalleryVersion.Version2;
+					else
+						Log.Error ("Unexpected versions string: " + versionString);
+				}
+			}
+			return new GalleryAccount (name, url, username, password, version);
+		}
+
+		private void ReadAccounts ()
+		{
+
+			if (! File.Exists (xml_path)) {
+				MarkChanged ();
+				return;
+			}
+
+			try {
+				string query = "//GalleryRemote/Account";
+				System.Xml.XmlDocument doc = new System.Xml.XmlDocument ();
+
+				//System.Console.WriteLine ("xml_path: " + xml_path);
+				doc.Load (xml_path);
+				System.Xml.XmlNodeList nodes = doc.SelectNodes (query);
+
+				//System.Console.WriteLine ("selected {0} nodes match {1}", nodes.Count, query);
+				foreach (System.Xml.XmlNode node in nodes) {
+					GalleryAccount account = ParseAccount (node);
+					if (account != null)
+						AddAccount (account, false);
+
+				}
+			} catch (System.Exception e) {
+				// FIXME do something
+				Log.Exception ("Exception loading gallery accounts", e);
+			}
+
+			MarkChanged ();
+		}
+	}
+
+	public class AccountDialog {
+		public AccountDialog (Gtk.Window parent) : this (parent, null, false) {
+			add_dialog.Response += HandleAddResponse;
+			add_button.Sensitive = false;
+		}
+
+		public AccountDialog (Gtk.Window parent, GalleryAccount account, bool show_error)
+		{
+			Glade.XML xml = new Glade.XML (null, "GalleryExport.glade", "gallery_add_dialog", "f-spot");
+			xml.Autoconnect (this);
+			add_dialog = (Gtk.Dialog) xml.GetWidget ("gallery_add_dialog");
+			add_dialog.Modal = false;
+			add_dialog.TransientFor = parent;
+			add_dialog.DefaultResponse = Gtk.ResponseType.Ok;
+
+			this.account = account;
+
+			status_area.Visible = show_error;
+
+			if (account != null) {
+				gallery_entry.Text = account.Name;
+				url_entry.Text = account.Url;
+				password_entry.Text = account.Password;
+				username_entry.Text = account.Username;
+				add_button.Label = Gtk.Stock.Ok;
+				add_dialog.Response += HandleEditResponse;
+			}
+
+			if (remove_button != null)
+				remove_button.Visible = account != null;
+
+			add_dialog.Show ();
+
+			gallery_entry.Changed += HandleChanged;
+			url_entry.Changed += HandleChanged;
+			password_entry.Changed += HandleChanged;
+			username_entry.Changed += HandleChanged;
+			HandleChanged (null, null);
+		}
+
+		private void HandleChanged (object sender, System.EventArgs args)
+		{
+			name = gallery_entry.Text;
+			url = url_entry.Text;
+			password = password_entry.Text;
+			username = username_entry.Text;
+
+			if (name == String.Empty || url == String.Empty || password == String.Empty || username == String.Empty)
+				add_button.Sensitive = false;
+			else
+				add_button.Sensitive = true;
+
+		}
+
+		[GLib.ConnectBefore]
+		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId == Gtk.ResponseType.Ok) {
+				try {
+					Uri uri = new Uri (url);
+					if (uri.Scheme != Uri.UriSchemeHttp &&
+					    uri.Scheme != Uri.UriSchemeHttps)
+						throw new System.UriFormatException ();
+
+					//Check for name uniqueness
+					foreach (GalleryAccount acc in GalleryAccountManager.GetInstance ().GetAccounts ())
+						if (acc.Name == name)
+							throw new ArgumentException ("name");
+					GalleryAccount created = new GalleryAccount (name,
+										     url,
+										     username,
+										     password);
+
+					created.Connect ();
+					GalleryAccountManager.GetInstance ().AddAccount (created);
+					account = created;
+				} catch (System.UriFormatException) {
+					HigMessageDialog md =
+						new HigMessageDialog (add_dialog,
+								      Gtk.DialogFlags.Modal |
+								      Gtk.DialogFlags.DestroyWithParent,
+								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+								      Catalog.GetString ("Invalid URL"),
+								      Catalog.GetString ("The gallery URL entry does not appear to be a valid URL"));
+					md.Run ();
+					md.Destroy ();
+					return;
+				} catch (GalleryException e) {
+					HigMessageDialog md =
+						new HigMessageDialog (add_dialog,
+								      Gtk.DialogFlags.Modal |
+								      Gtk.DialogFlags.DestroyWithParent,
+								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+								      Catalog.GetString ("Error while connecting to Gallery"),
+								      String.Format (Catalog.GetString ("The following error was encountered while attempting to log in: {0}"), e.Message));
+					if (e.ResponseText != null) {
+						Log.Debug (e.Message);
+						Log.Debug (e.ResponseText);
+					}
+					md.Run ();
+					md.Destroy ();
+					return;
+				} catch (ArgumentException ae) {
+					HigMessageDialog md =
+						new HigMessageDialog (add_dialog,
+								      Gtk.DialogFlags.Modal |
+								      Gtk.DialogFlags.DestroyWithParent,
+								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+								      Catalog.GetString ("A Gallery with this name already exists"),
+								      String.Format (Catalog.GetString ("There is already a Gallery with the same name in your registered Galleries. Please choose a unique name.")));
+					Log.Exception (ae);
+					md.Run ();
+					md.Destroy ();
+					return;
+				} catch (System.Net.WebException we) {
+					HigMessageDialog md =
+						new HigMessageDialog (add_dialog,
+								      Gtk.DialogFlags.Modal |
+								      Gtk.DialogFlags.DestroyWithParent,
+								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+								      Catalog.GetString ("Error while connecting to Gallery"),
+								      String.Format (Catalog.GetString ("The following error was encountered while attempting to log in: {0}"), we.Message));
+					md.Run ();
+					md.Destroy ();
+					return;
+				} catch (System.Exception se) {
+					HigMessageDialog md =
+						new HigMessageDialog (add_dialog,
+								      Gtk.DialogFlags.Modal |
+								      Gtk.DialogFlags.DestroyWithParent,
+								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+								      Catalog.GetString ("Error while connecting to Gallery"),
+								      String.Format (Catalog.GetString ("The following error was encountered while attempting to log in: {0}"), se.Message));
+					Log.Exception (se);
+					md.Run ();
+					md.Destroy ();
+					return;
+				}
+			}
+			add_dialog.Destroy ();
+		}
+
+		protected void HandleEditResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId == Gtk.ResponseType.Ok) {
+				account.Name = name;
+				account.Url = url;
+				account.Username = username;
+				account.Password = password;
+				GalleryAccountManager.GetInstance ().MarkChanged (true, account);
+			} else if (args.ResponseId == Gtk.ResponseType.Reject) {
+				// NOTE we are using Reject to signal the remove action.
+				GalleryAccountManager.GetInstance ().RemoveAccount (account);
+			}
+			add_dialog.Destroy ();
+		}
+
+		private GalleryAccount account;
+		private string name;
+		private string url;
+		private string password;
+		private string username;
+
+		// widgets
+		[Glade.Widget] Gtk.Dialog add_dialog;
+
+		[Glade.Widget] Gtk.Entry url_entry;
+		[Glade.Widget] Gtk.Entry password_entry;
+		[Glade.Widget] Gtk.Entry gallery_entry;
+		[Glade.Widget] Gtk.Entry username_entry;
+
+		[Glade.Widget] Gtk.Button add_button;
+		[Glade.Widget] Gtk.Button remove_button;
+		[Glade.Widget] Gtk.Button cancel_button;
+
+		[Glade.Widget] Gtk.HBox status_area;
+	}
+
+	public class GalleryAddAlbum
+	{
+		[Glade.Widget] Gtk.Dialog add_album_dialog;
+		[Glade.Widget] Gtk.OptionMenu album_optionmenu;
+
+		[Glade.Widget] Gtk.Entry name_entry;
+		[Glade.Widget] Gtk.Entry description_entry;
+		[Glade.Widget] Gtk.Entry title_entry;
+
+		[Glade.Widget] Gtk.Button add_button;
+		[Glade.Widget] Gtk.Button cancel_button;
+
+		private GalleryExport export;
+		private Gallery gallery;
+		private string parent;
+		private string name;
+		private string description;
+		private string title;
+
+		public GalleryAddAlbum (GalleryExport export, Gallery gallery)
+		{
+			Glade.XML xml = new Glade.XML (null, "GalleryExport.glade", "gallery_add_album_dialog", "f-spot");
+			xml.Autoconnect (this);
+			add_album_dialog = (Gtk.Dialog) xml.GetWidget ("gallery_add_album_dialog");
+			add_album_dialog.Modal = true;
+			this.export = export;
+			this.gallery = gallery;
+			PopulateAlbums ();
+
+			add_album_dialog.Response += HandleAddResponse;
+
+			name_entry.Changed += HandleChanged;
+			description_entry.Changed += HandleChanged;
+			title_entry.Changed += HandleChanged;
+			HandleChanged (null, null);
+		}
+
+		private void PopulateAlbums ()
+		{
+			Gtk.Menu menu = new Gtk.Menu ();
+			if (gallery.Version == GalleryVersion.Version1) {
+				Gtk.MenuItem top_item = new Gtk.MenuItem (Catalog.GetString ("(TopLevel)"));
+				menu.Append (top_item);
+			}
+
+			foreach (Album album in gallery.Albums) {
+				System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
+
+				for (int i=0; i < album.Parents.Count; i++) {
+					label_builder.Append ("  ");
+				}
+				label_builder.Append (album.Title);
+
+				Gtk.MenuItem item = new Gtk.MenuItem (label_builder.ToString ());
+				((Gtk.Label)item.Child).UseUnderline = false;
+				menu.Append (item);
+
+				AlbumPermission create_sub = album.Perms & AlbumPermission.CreateSubAlbum;
+
+				if (create_sub == 0)
+					item.Sensitive = false;
+			}
+
+			album_optionmenu.Sensitive = true;
+			menu.ShowAll ();
+			album_optionmenu.Menu = menu;
+		}
+
+		private void HandleChanged (object sender, EventArgs args)
+		{
+			if (gallery.Version == GalleryVersion.Version1) {
+				if (gallery.Albums.Count == 0 || album_optionmenu.History <= 0) {
+					parent = String.Empty;
+				} else {
+					parent = ((Album) gallery.Albums [album_optionmenu.History-1]).Name;
+				}
+			} else {
+				if (gallery.Albums.Count == 0 || album_optionmenu.History < 0) {
+					parent = String.Empty;
+				} else {
+					parent = ((Album) gallery.Albums [album_optionmenu.History]).Name;
+				}
+			}
+			name = name_entry.Text;
+			description = description_entry.Text;
+			title = title_entry.Text;
+
+			if (name == String.Empty || title == String.Empty)
+				add_button.Sensitive = false;
+			else
+				add_button.Sensitive = true;
+		}
+
+		[GLib.ConnectBefore]
+		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId == Gtk.ResponseType.Ok) {
+				if (!System.Text.RegularExpressions.Regex.IsMatch (name, "^[A-Za-z0-9_-]+$")) {
+					HigMessageDialog md =
+						new HigMessageDialog (add_album_dialog,
+								      Gtk.DialogFlags.Modal |
+								      Gtk.DialogFlags.DestroyWithParent,
+								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+								      Catalog.GetString ("Invalid Gallery name"),
+								      Catalog.GetString ("The gallery name contains invalid characters.\nOnly letters, numbers, - and _ are allowed"));
+					md.Run ();
+					md.Destroy ();
+					return;
+				}
+				try {
+					gallery.NewAlbum (parent, name, title, description);
+					export.HandleAlbumAdded (title);
+				} catch (GalleryCommandException e) {
+					gallery.PopupException(e, add_album_dialog);
+					return;
+				}
+			}
+			add_album_dialog.Destroy ();
+		}
+	}
+
+
+	public class GalleryExport : IExporter {
+		public GalleryExport ()
+		{
+		}
+
+		public void Run (IBrowsableCollection selection)
+		{
+			Glade.XML xml = new Glade.XML (null, "GalleryExport.glade", "gallery_export_dialog", "f-spot");
+			xml.Autoconnect (this);
+			export_dialog = (Gtk.Dialog) xml.GetWidget ("gallery_export_dialog");
+
+			this.items = selection.Items;
+			Array.Sort<IBrowsableItem> (this.items, new IBrowsableItemComparer.CompareDateName());
+			album_button.Sensitive = false;
+			IconView view = new IconView (selection);
+			view.DisplayDates = false;
+			view.DisplayTags = false;
+
+			export_dialog.Modal = false;
+			export_dialog.TransientFor = null;
+
+			thumb_scrolledwindow.Add (view);
+			view.Show ();
+			export_dialog.Show ();
+
+			GalleryAccountManager manager = GalleryAccountManager.GetInstance ();
+			manager.AccountListChanged += PopulateGalleryOptionMenu;
+			PopulateGalleryOptionMenu (manager, null);
+
+			if (edit_button != null)
+				edit_button.Clicked += HandleEditGallery;
+
+			export_dialog.Response += HandleResponse;
+			connect = true;
+			HandleSizeActive (null, null);
+			Connect ();
+
+			LoadPreference (SCALE_KEY);
+			LoadPreference (SIZE_KEY);
+			LoadPreference (BROWSER_KEY);
+			LoadPreference (META_KEY);
+		}
+
+		public const string EXPORT_SERVICE = "gallery/";
+		public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
+		public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
+		public const string BROWSER_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
+		public const string META_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "meta";
+		public const string LIGHTTPD_WORKAROUND_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "lighttpd_workaround";
+
+		private bool scale;
+		private int size;
+		private bool browser;
+		private bool meta;
+		private bool connect = false;
+
+		IBrowsableItem[] items;
+		int photo_index;
+		ThreadProgressDialog progress_dialog;
+
+		ArrayList accounts;
+		private GalleryAccount account;
+		private Album album;
+
+		private string xml_path;
+
+		// Widgets
+		[Glade.Widget] Gtk.Dialog export_dialog;
+		[Glade.Widget] Gtk.OptionMenu gallery_optionmenu;
+		[Glade.Widget] Gtk.OptionMenu album_optionmenu;
+
+		[Glade.Widget] Gtk.Entry width_entry;
+		[Glade.Widget] Gtk.Entry height_entry;
+
+		[Glade.Widget] Gtk.CheckButton browser_check;
+		[Glade.Widget] Gtk.CheckButton scale_check;
+		[Glade.Widget] Gtk.CheckButton meta_check;
+
+		[Glade.Widget] Gtk.SpinButton size_spin;
+
+		[Glade.Widget] Gtk.Button album_button;
+		[Glade.Widget] Gtk.Button add_button;
+		[Glade.Widget] Gtk.Button edit_button;
+
+		[Glade.Widget] Gtk.Button export_button;
+		[Glade.Widget] Gtk.Button cancel_button;
+
+		[Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
+
+		System.Threading.Thread command_thread;
+
+
+		private void HandleResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId != Gtk.ResponseType.Ok) {
+				export_dialog.Destroy ();
+				return;
+			}
+
+			if (scale_check != null) {
+				scale = scale_check.Active;
+				size = size_spin.ValueAsInt;
+			} else
+				scale = false;
+
+			browser = browser_check.Active;
+			meta = meta_check.Active;
+
+			if (account != null) {
+				//System.Console.WriteLine ("history = {0}", album_optionmenu.History);
+				album = (Album) account.Gallery.Albums [Math.Max (0, album_optionmenu.History)];
+				photo_index = 0;
+
+				export_dialog.Destroy ();
+
+				command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (this.Upload));
+				command_thread.Name = Catalog.GetString ("Uploading Pictures");
+
+				progress_dialog = new ThreadProgressDialog (command_thread, items.Length);
+				progress_dialog.Start ();
+
+				// Save these settings for next time
+				Preferences.Set (SCALE_KEY, scale);
+				Preferences.Set (SIZE_KEY, size);
+				Preferences.Set (BROWSER_KEY, browser);
+				Preferences.Set (META_KEY, meta);
+			}
+		}
+
+		private void HandleProgressChanged (ProgressItem item)
+		{
+			//System.Console.WriteLine ("Changed value = {0}", item.Value);
+			progress_dialog.Fraction = (photo_index - 1.0 + item.Value) / (double) items.Length;
+		}
+
+		public void HandleSizeActive (object sender, EventArgs args)
+		{
+			size_spin.Sensitive = scale_check.Active;
+		}
+
+
+		private void Upload ()
+		{
+				account.Gallery.Progress = new ProgressItem ();
+				account.Gallery.Progress.Changed += HandleProgressChanged;
+
+				Log.Debug ("Starting upload");
+
+				FilterSet filters = new FilterSet ();
+				if (account.Version == GalleryVersion.Version1)
+					filters.Add (new WhiteListFilter (new string []{".jpg", ".jpeg", ".png", ".gif"}));
+				if (scale)
+					filters.Add (new ResizeFilter ((uint) size));
+
+				while (photo_index < items.Length) {
+					IBrowsableItem item = items [photo_index];
+
+					Log.DebugFormat ("uploading {0}", photo_index);
+
+					progress_dialog.Message = System.String.Format (Catalog.GetString ("Uploading picture \"{0}\""), item.Name);
+					progress_dialog.Fraction = photo_index / (double) items.Length;
+					photo_index++;
+
+					progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of {1}"), photo_index, items.Length);
+
+
+					FilterRequest req = new FilterRequest (item.DefaultVersion.Uri);
+
+					filters.Convert (req);
+					try {
+						int id = album.Add (item, req.Current.LocalPath);
+
+						if (item != null && item is Photo && App.Instance.Database != null && id != 0) {
+							App.Instance.Database.Exports.Create ((item as Photo).Id, (item as Photo).DefaultVersionId,
+										      ExportStore.Gallery2ExportType,
+										      String.Format("{0}:{1}",album.Gallery.Uri.ToString (), id.ToString ()));
+						}
+					} catch (System.Exception e) {
+						progress_dialog.Message = String.Format (Catalog.GetString ("Error uploading picture \"{0}\" to Gallery: {1}"), item.Name, e.Message);
+						progress_dialog.ProgressText = Catalog.GetString ("Error");
+						Log.Exception (e);
+
+						if (progress_dialog.PerformRetrySkip ()) {
+							photo_index--;
+						}
+					}
+			}
+
+			progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
+			progress_dialog.Fraction = 1.0;
+			progress_dialog.ProgressText = Catalog.GetString ("Upload Complete");
+			progress_dialog.ButtonLabel = Gtk.Stock.Ok;
+
+			if (browser) {
+				GtkBeans.Global.ShowUri (export_dialog.Screen, album.GetUrl());
+			}
+		}
+
+		private void PopulateGalleryOptionMenu (GalleryAccountManager manager, GalleryAccount changed_account)
+		{
+			Gtk.Menu menu = new Gtk.Menu ();
+			this.account = changed_account;
+			int pos = -1;
+
+			accounts = manager.GetAccounts ();
+			if (accounts == null || accounts.Count == 0) {
+				Gtk.MenuItem item = new Gtk.MenuItem (Catalog.GetString ("(No Gallery)"));
+				menu.Append (item);
+				gallery_optionmenu.Sensitive = false;
+				edit_button.Sensitive = false;
+			} else {
+				int i = 0;
+				foreach (GalleryAccount account in accounts) {
+					if (account == changed_account)
+						pos = i;
+
+					Gtk.MenuItem item = new Gtk.MenuItem (account.Name);
+					menu.Append (item);
+					i++;
+				}
+				gallery_optionmenu.Sensitive = true;
+				edit_button.Sensitive = true;
+			}
+
+			menu.ShowAll ();
+			gallery_optionmenu.Menu = menu;
+			gallery_optionmenu.SetHistory ((uint)pos);
+		}
+
+		private void Connect ()
+		{
+			Connect (null);
+		}
+
+		private void Connect (GalleryAccount selected)
+		{
+			try {
+				if (accounts.Count != 0 && connect) {
+					if (selected == null)
+						account = (GalleryAccount) accounts [gallery_optionmenu.History];
+					else
+						account = selected;
+
+					if (!account.Connected)
+						account.Connect ();
+
+					PopulateAlbumOptionMenu (account.Gallery);
+					album_button.Sensitive = true;
+				}
+			} catch (System.Exception ex) {
+				if (selected != null)
+					account = selected;
+
+				Log.Exception (ex);
+				PopulateAlbumOptionMenu (account.Gallery);
+				album_button.Sensitive = false;
+
+				new AccountDialog (export_dialog, account, true);
+			}
+		}
+
+		private void HandleAccountSelected (object sender, System.EventArgs args)
+		{
+			Connect ();
+		}
+
+		public void HandleAlbumAdded (string title) {
+			GalleryAccount account = (GalleryAccount) accounts [gallery_optionmenu.History];
+			PopulateAlbumOptionMenu (account.Gallery);
+
+			// make the newly created album selected
+			ArrayList albums = account.Gallery.Albums;
+			for (int i=0; i < albums.Count; i++) {
+				if (((Album)albums[i]).Title == title) {
+					album_optionmenu.SetHistory((uint)i);
+				}
+			}
+		}
+
+		private void PopulateAlbumOptionMenu (Gallery gallery)
+		{
+			System.Collections.ArrayList albums = null;
+			if (gallery != null) {
+				//gallery.FetchAlbumsPrune ();
+				try {
+					gallery.FetchAlbums ();
+					albums = gallery.Albums;
+				} catch (GalleryCommandException e) {
+					gallery.PopupException (e, export_dialog);
+					return;
+				}
+			}
+
+			Gtk.Menu menu = new Gtk.Menu ();
+
+			bool disconnected = gallery == null || !account.Connected || albums == null;
+
+			if (disconnected || albums.Count == 0) {
+				string msg = disconnected ? Catalog.GetString ("(Not Connected)")
+					: Catalog.GetString ("(No Albums)");
+
+				Gtk.MenuItem item = new Gtk.MenuItem (msg);
+				menu.Append (item);
+
+				export_button.Sensitive = false;
+				album_optionmenu.Sensitive = false;
+				album_button.Sensitive = false;
+
+				if (disconnected)
+					album_button.Sensitive = false;
+			} else {
+				foreach (Album album in albums) {
+					System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
+
+					for (int i=0; i < album.Parents.Count; i++) {
+						label_builder.Append ("  ");
+					}
+					label_builder.Append (album.Title);
+
+					Gtk.MenuItem item = new Gtk.MenuItem (label_builder.ToString ());
+					((Gtk.Label)item.Child).UseUnderline = false;
+					menu.Append (item);
+
+				        AlbumPermission add_permission = album.Perms & AlbumPermission.Add;
+
+					if (add_permission == 0)
+						item.Sensitive = false;
+				}
+
+				export_button.Sensitive = items.Length > 0;
+				album_optionmenu.Sensitive = true;
+				album_button.Sensitive = true;
+			}
+
+			menu.ShowAll ();
+			album_optionmenu.Menu = menu;
+		}
+
+		public void HandleAddGallery (object sender, System.EventArgs args)
+		{
+			new AccountDialog (export_dialog);
+		}
+
+		public void HandleEditGallery (object sender, System.EventArgs args)
+		{
+			new AccountDialog (export_dialog, account, false);
+		}
+
+		public void HandleAddAlbum (object sender, System.EventArgs args)
+		{
+			if (account == null)
+				throw new GalleryException (Catalog.GetString ("No account selected"));
+
+			new GalleryAddAlbum (this, account.Gallery);
+		}
+
+		void LoadPreference (string key)
+		{
+			switch (key) {
+			case SCALE_KEY:
+				if (scale_check.Active != Preferences.Get<bool> (key))
+					scale_check.Active = Preferences.Get<bool> (key);
+				break;
+
+			case SIZE_KEY:
+				size_spin.Value = (double) Preferences.Get<int> (key);
+				break;
+
+			case BROWSER_KEY:
+				if (browser_check.Active != Preferences.Get<bool> (key))
+					browser_check.Active = Preferences.Get<bool> (key);
+				break;
+
+			case META_KEY:
+				if (meta_check.Active != Preferences.Get<bool> (key))
+					meta_check.Active = Preferences.Get<bool> (key);
+				break;
+			}
+		}
+	}
+}
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
new file mode 100644
index 0000000..87abf34
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/FSpot.Exporters.Gallery/GalleryRemote.cs
@@ -0,0 +1,1173 @@
+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 FSpot;
+using FSpot.Core;
+using FSpot.UI.Dialog;
+using Hyena;
+using Hyena.Widgets;
+
+/* These classes are based off the documentation at
+ *
+ * http://codex.gallery2.org/index.php/Gallery_Remote:Protocol
+ */
+
+namespace FSpot.Exporters.Gallery {
+	public enum AlbumPermission : byte
+	{
+		None = 0,
+		Add = 1,
+		Write = 2,
+		Delete = 4,
+		DeleteAlbum = 8,
+		CreateSubAlbum = 16
+	}
+
+	public class Album : IComparable {
+		public int RefNum;
+		public string Name = null;
+		public string Title = null;
+		public string Summary = null;
+		public int ParentRefNum;
+		public int ResizeSize;
+		public int ThumbSize;
+		public ArrayList Images = null;
+		public string BaseURL;
+
+		Gallery gallery;
+
+		public AlbumPermission Perms = AlbumPermission.None;
+
+		public Album Parent {
+			get {
+				if (ParentRefNum != 0)
+					return gallery.LookupAlbum (ParentRefNum);
+				else
+					return null;
+			}
+		}
+
+		protected ArrayList parents = null;
+		public ArrayList Parents {
+			get {
+				if (parents != null)
+					return parents;
+
+				if (Parent == null) {
+				       parents = new ArrayList ();
+				} else {
+					parents = Parent.Parents.Clone () as ArrayList;
+					parents.Add (Parent.RefNum);
+				}
+
+				return parents;
+			}
+		}
+
+		public Gallery Gallery {
+			get { return gallery; }
+		}
+
+		public Album (Gallery gallery, string name, int ref_num)
+		{
+			Name = name;
+			this.gallery = gallery;
+			this.RefNum = ref_num;
+			Images = new ArrayList ();
+		}
+
+		public void Rename (string name)
+		{
+			gallery.MoveAlbum (this, name);
+		}
+
+		public void Add (IBrowsableItem item)
+		{
+			Add (item, item.DefaultVersion.Uri.LocalPath);
+		}
+
+		public int Add (IBrowsableItem item, string path)
+		{
+			if (item == null)
+				Log.Warning ("NO PHOTO");
+
+			return gallery.AddItem (this,
+					 path,
+					 Path.GetFileName (item.DefaultVersion.Uri.LocalPath),
+					 item.Name,
+					 item.Description,
+					 true);
+		}
+
+		public string GetUrl ()
+		{
+			return gallery.GetAlbumUrl(this);
+		}
+
+		public int CompareTo (Object obj)
+		{
+			Album other = obj as Album;
+
+			int numThis = this.Parents.Count;
+			int numOther = other.Parents.Count;
+			int thisVal = -1, otherVal = -1;
+
+			//find where they first differ
+			int maxIters = Math.Min (numThis, numOther);
+			int i = 0;
+			while (i < maxIters) {
+				thisVal = (int)this.Parents[i];
+				otherVal = (int)other.Parents[i];
+				if (thisVal != otherVal) {
+					break;
+				}
+				i++;
+			}
+
+			int retVal;
+			if (i < numThis && i < numOther) {
+				//Parentage differed
+				retVal = thisVal.CompareTo (otherVal);
+
+			} else if (i < numThis) {
+				//other shorter
+				thisVal = (int)this.Parents[i];
+				retVal = thisVal.CompareTo (other.RefNum);
+
+				//if equal, we want to make the shorter one come first
+				if (retVal == 0)
+					retVal = 1;
+
+			} else if (i < numOther) {
+				//this shorter
+				otherVal = (int)other.Parents[i];
+				retVal = this.RefNum.CompareTo (otherVal);
+
+				//if equal, we want to make the shorter one come first
+				if (retVal == 0)
+					retVal = -1;
+
+			} else {
+				//children of the same parent
+				retVal = this.RefNum.CompareTo (other.RefNum);
+			}
+
+			return retVal;
+		}
+	}
+
+	public class Image {
+		public string Name;
+		public int RawWidth;
+		public int RawHeight;
+		public string ResizedName;
+		public int ResizedWidth;
+		public int ResizedHeight;
+		public string ThumbName;
+		public int ThumbWidth;
+		public int ThumbHeight;
+		public int RawFilesize;
+
+		public string Caption;
+		public string Description;
+		public int Clicks;
+
+		public Album Owner;
+
+		public string Url;
+
+		public Image (Album album, string name) {
+			Name = name;
+			Owner = album;
+		}
+	}
+
+	public enum ResultCode {
+		Success = 0,
+		MajorVersionInvalid = 101,
+		MajorMinorVersionInvalid = 102,
+		VersionFormatInvalid = 103,
+		VersionMissing = 104,
+		PasswordWrong = 201,
+		LoginMissing = 202,
+		UnknownComand = 301,
+		NoAddPermission = 401,
+		NoFilename = 402,
+		UploadPhotoFailed = 403,
+		NoWritePermission = 404,
+		NoCreateAlbumPermission = 501,
+		CreateAlbumFailed = 502,
+		// This result is specific to this implementation
+		UnknownResponse = 1000
+	}
+
+	public class GalleryException : System.Exception {
+		string response_text;
+
+		public string ResponseText {
+			get { return response_text; }
+		}
+
+		public GalleryException (string text) : base (text)
+		{
+		}
+
+		public GalleryException (string text, string full_response) : base (text)
+		{
+			response_text = full_response;
+		}
+	}
+
+	public class GalleryCommandException : GalleryException {
+		ResultCode status;
+
+		public GalleryCommandException (string status_text, ResultCode result) : base (status_text) {
+			status = result;
+		}
+
+		public ResultCode Status {
+			get {
+				return status;
+			}
+		}
+	}
+
+	public abstract class Gallery
+	{
+		protected Uri uri;
+		public Uri Uri{
+			get {
+				return uri;
+			}
+		}
+
+
+		protected string name;
+		public string Name {
+			get {
+				return name;
+			}
+			set {
+				name = value;
+			}
+		}
+
+		string auth_token;
+		public string AuthToken {
+			get {
+				return auth_token;
+			}
+			set {
+				auth_token = value;
+			}
+		}
+
+		protected GalleryVersion version;
+
+		public GalleryVersion Version {
+			get {
+				return version;
+			}
+		}
+
+		protected ArrayList albums;
+		public ArrayList Albums{
+			get {
+				return albums;
+			}
+		}
+
+		public bool expect_continue = true;
+
+		protected CookieContainer cookies = null;
+		public FSpot.ProgressItem Progress = null;
+
+		public abstract void Login (string username, string passwd);
+		public abstract ArrayList FetchAlbums ();
+		public abstract ArrayList FetchAlbumsPrune ();
+		public abstract bool MoveAlbum (Album album, string end_name);
+		public abstract int AddItem (Album album, string path, string filename, string caption, string description, bool autorotate);
+		//public abstract Album AlbumProperties (string album);
+		public abstract bool NewAlbum (string parent_name, string name, string title, string description);
+		public abstract ArrayList FetchAlbumImages (Album album, bool include_ablums);
+
+		public abstract string GetAlbumUrl (Album album);
+
+		public Gallery (string name)
+		{
+			this.name = name;
+			cookies = new CookieContainer ();
+			albums = new ArrayList ();
+		}
+
+		public static GalleryVersion DetectGalleryVersion (string url)
+		{
+			//Figure out if the url is for G1 or G2
+			Log.Debug ("Detecting Gallery version");
+
+			GalleryVersion version;
+
+			if (url.EndsWith (Gallery1.script_name)) {
+				version = GalleryVersion.Version1;
+			} else if (url.EndsWith (Gallery2.script_name)) {
+				version = GalleryVersion.Version2;
+			} else {
+				//check what script is available on the server
+
+				FormClient client = new FormClient ();
+
+				try {
+					client.Submit (new Uri (Gallery.FixUrl (url, Gallery1.script_name)));
+					version =  GalleryVersion.Version1;
+
+				} catch (System.Net.WebException) {
+					try {
+						client.Submit (new Uri (Gallery.FixUrl (url, Gallery2.script_name)));
+						version =  GalleryVersion.Version2;
+
+					} catch (System.Net.WebException) {
+						//Uh oh, neither version detected
+						version = GalleryVersion.VersionUnknown;
+					}
+				}
+			}
+
+			Log.Debug ("Detected: " + version.ToString());
+			return version;
+		}
+
+
+		public bool IsConnected ()
+		{
+
+			bool retVal = true;
+			//Console.WriteLine ("^^^^^^^Checking IsConnected");
+			foreach (Cookie cookie in cookies.GetCookies(Uri)) {
+				bool isExpired = cookie.Expired;
+				//Console.WriteLine (cookie.Name + " " + (isExpired ? "expired" : "valid"));
+				if (isExpired)
+					retVal = false;
+			}
+			//return cookies.GetCookies(Uri).Count > 0;
+			return retVal;
+		}
+		//Reads until it finds the start of the response
+		protected StreamReader findResponse (HttpWebResponse response)
+		{
+			StreamReader reader = new StreamReader (response.GetResponseStream (), Encoding.UTF8);
+			if (reader == null)
+				throw new GalleryException (Catalog.GetString ("Error reading server response"));
+
+			string line;
+			string full_response = null;
+			while ((line = reader.ReadLine ()) != null) {
+				full_response += line;
+				if (line.IndexOf ("#__GR2PROTO__", 0) > -1)
+					break;
+			}
+
+			if (line == null) {
+				// failed to find the response
+				throw new GalleryException (Catalog.GetString ("Server returned response without Gallery content"), full_response);
+			}
+
+			return reader;
+
+		}
+
+		protected string [] GetNextLine (StreamReader reader)
+		{
+			char [] value_split = new char [1] {'='};
+			bool haveLine = false;
+			string[] array = null;
+			while(!haveLine) {
+				string line = reader.ReadLine ();
+				//Console.WriteLine ("READING: " + line);
+				if (line != null) {
+					array = line.Split (value_split, 2);
+					haveLine = !LineIgnored (array);
+				}
+				else {
+					//end of input
+					return null;
+				}
+			}
+
+			return array;
+		}
+
+		private bool LineIgnored (string[] line)
+		{
+			if (line[0].StartsWith ("debug")) {
+				return true;
+			} else if (line[0].StartsWith ("can_create_root")) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+
+		protected bool ParseLogin (HttpWebResponse response)
+		{
+			string [] data;
+			StreamReader reader = null;
+			ResultCode status = ResultCode.UnknownResponse;
+			string status_text = "Error: Unable to parse server response";
+			try {
+
+				reader = findResponse (response);
+				while ((data = GetNextLine (reader)) != null) {
+					if (data[0] == "status") {
+						status = (ResultCode) int.Parse (data [1]);
+					} else if (data[0].StartsWith ("status_text")) {
+						status_text = data[1];
+						Log.DebugFormat ("StatusText : {0}", data[1]);
+					} else if (data[0].StartsWith ("server_version")) {
+						//FIXME we should use the to determine what capabilities the server has
+					} else if (data[0].StartsWith ("auth_token")) {
+						AuthToken = data[1];
+					} else {
+						Log.DebugFormat ("Unparsed Line in ParseLogin(): {0}={1}", data[0], data[1]);
+					}
+				}
+				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
+				if (status != ResultCode.Success) {
+					Log.Debug (status_text);
+					throw new GalleryCommandException (status_text, status);
+				}
+
+				return true;
+			} finally {
+				if (reader != null)
+					reader.Close ();
+
+				response.Close ();
+			}
+		}
+
+		public ArrayList ParseFetchAlbums (HttpWebResponse response)
+		{
+			//Console.WriteLine ("in ParseFetchAlbums()");
+			string [] data;
+			StreamReader reader = null;
+			ResultCode status = ResultCode.UnknownResponse;
+			string status_text = "Error: Unable to parse server response";
+			albums = new ArrayList ();
+			try {
+
+				Album current_album = null;
+				reader = findResponse (response);
+				while ((data = GetNextLine (reader)) != null) {
+					//Console.WriteLine ("Parsing Line: {0}={1}", data[0], data[1]);
+					if (data[0] == "status") {
+						status = (ResultCode) int.Parse (data [1]);
+					} else if (data[0].StartsWith ("status_text")) {
+						status_text = data[1];
+						Log.DebugFormat ("StatusText : {0}", data[1]);
+					} else if (data[0].StartsWith ("album.name")) {
+						//this is the URL name
+						int ref_num = -1;
+						if (this.Version == GalleryVersion.Version1) {
+							string [] segments = data[0].Split (new char[1]{'.'});
+							ref_num = int.Parse (segments[segments.Length -1]);
+						} else {
+							ref_num = int.Parse (data[1]);
+						}
+						current_album = new Album (this, data[1], ref_num);
+						albums.Add (current_album);
+						//Console.WriteLine ("current_album: " + data[1]);
+					} else if (data[0].StartsWith ("album.title")) {
+						//this is the display name
+						current_album.Title = data[1];
+					} else if (data[0].StartsWith ("album.summary")) {
+						current_album.Summary = data[1];
+					} else if (data[0].StartsWith ("album.parent")) {
+						//FetchAlbums and G2 FetchAlbumsPrune return ints
+						//G1 FetchAlbumsPrune returns album names (and 0 for root albums)
+						try {
+							current_album.ParentRefNum = int.Parse (data[1]);
+						} catch (System.FormatException) {
+							current_album.ParentRefNum = LookupAlbum (data[1]).RefNum;
+						}
+						//Console.WriteLine ("album.parent data[1]: " + data[1]);
+					} else if (data[0].StartsWith ("album.resize_size")) {
+						current_album.ResizeSize = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("album.thumb_size")) {
+						current_album.ThumbSize = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("album.info.extrafields")) {
+						//ignore, this is the album description
+					} else if (data[0].StartsWith ("album.perms.add")) {
+						if (data[1] == "true")
+							current_album.Perms |= AlbumPermission.Add;
+					} else if (data[0].StartsWith ("album.perms.write")) {
+						if (data[1] == "true")
+							current_album.Perms |= AlbumPermission.Write;
+					} else if (data[0].StartsWith ("album.perms.del_item")) {
+						if (data[1] == "true")
+							current_album.Perms |= AlbumPermission.Delete;
+					} else if (data[0].StartsWith ("album.perms.del_alb")) {
+						if (data[1] == "true")
+							current_album.Perms |= AlbumPermission.DeleteAlbum;
+					} else if (data[0].StartsWith ("album.perms.create_sub")) {
+						if (data[1] == "true")
+							current_album.Perms |= AlbumPermission.CreateSubAlbum;
+					} else if (data[0].StartsWith ("album_count")) {
+						if (Albums.Count != int.Parse (data[1]))
+							Log.Warning ("Parsed album count does not match album_count.  Something is amiss");
+					} else if (data[0].StartsWith ("auth_token")) {
+						AuthToken = data [1];
+					} else {
+						Log.DebugFormat ("Unparsed Line in ParseFetchAlbums(): {0}={1}", data[0], data[1]);
+					}
+				}
+				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
+				if (status != ResultCode.Success) {
+					Log.Debug (status_text);
+					throw new GalleryCommandException (status_text, status);
+				}
+
+				//Console.WriteLine (After parse albums.Count + " albums parsed");
+				return albums;
+			} finally {
+				if (reader != null)
+					reader.Close ();
+
+				response.Close ();
+			}
+		}
+
+		public int ParseAddItem (HttpWebResponse response)
+		{
+			string [] data;
+			StreamReader reader = null;
+			ResultCode status = ResultCode.UnknownResponse;
+			string status_text = "Error: Unable to parse server response";
+			int item_id = 0;
+			try {
+
+				reader = findResponse (response);
+				while ((data = GetNextLine (reader)) != null) {
+					if (data[0] == "status") {
+						status = (ResultCode) int.Parse (data [1]);
+					} else if (data[0].StartsWith ("status_text")) {
+						status_text = data[1];
+						Log.DebugFormat ("StatusText : {0}", data[1]);
+					} else if (data[0].StartsWith ("auth_token")) {
+						AuthToken = data[1];
+					} else if (data[0].StartsWith ("item_name")) {
+						item_id = int.Parse (data [1]);
+					} else {
+						Log.DebugFormat ("Unparsed Line in ParseAddItem(): {0}={1}", data[0], data[1]);
+					}
+				}
+				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
+				if (status != ResultCode.Success) {
+					Log.Debug (status_text);
+					throw new GalleryCommandException (status_text, status);
+				}
+
+				return item_id;
+			} finally {
+				if (reader != null)
+					reader.Close ();
+
+				response.Close ();
+			}
+		}
+
+		public bool ParseNewAlbum (HttpWebResponse response)
+		{
+			return ParseBasic (response);
+		}
+
+		public bool ParseMoveAlbum (HttpWebResponse response)
+		{
+			return ParseBasic (response);
+		}
+		/*
+		public Album ParseAlbumProperties (HttpWebResponse response)
+		{
+			string [] data;
+			StreamReader reader = null;
+			ResultCode status = ResultCode.UnknownResponse;
+			string status_text = "Error: Unable to parse server response";
+			try {
+
+				reader = findResponse (response);
+				while ((data = GetNextLine (reader)) != null) {
+					if (data[0] == "status") {
+						status = (ResultCode) int.Parse (data [1]);
+					} else if (data[0].StartsWith ("status_text")) {
+						status_text = data[1];
+						Log.Debug ("StatusText : {0}", data[1]);
+					} else if (data[0].StartsWith ("auto-resize")) {
+						//ignore
+					} else {
+						Log.Debug ("Unparsed Line in ParseBasic(): {0}={1}", data[0], data[1]);
+					}
+				}
+				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
+				if (status != ResultCode.Success) {
+					Log.Debug (status_text);
+					throw new GalleryCommandException (status_text, status);
+				}
+
+				return true;
+			} finally {
+				if (reader != null)
+					reader.Close ();
+
+				response.Close ();
+			}
+		}
+		*/
+
+		private bool ParseBasic (HttpWebResponse response)
+		{
+			string [] data;
+			StreamReader reader = null;
+			ResultCode status = ResultCode.UnknownResponse;
+			string status_text = "Error: Unable to parse server response";
+			try {
+
+				reader = findResponse (response);
+				while ((data = GetNextLine (reader)) != null) {
+					if (data[0] == "status") {
+						status = (ResultCode) int.Parse (data [1]);
+					} else if (data[0].StartsWith ("status_text")) {
+						status_text = data[1];
+						Log.DebugFormat ("StatusText : {0}", data[1]);
+					} else if (data[0].StartsWith ("auth_token")) {
+						AuthToken = data[1];
+					} else {
+						Log.DebugFormat ("Unparsed Line in ParseBasic(): {0}={1}", data[0], data[1]);
+					}
+				}
+				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
+				if (status != ResultCode.Success) {
+					Log.Debug (status_text + " Status: " + status);
+					throw new GalleryCommandException (status_text, status);
+				}
+
+				return true;
+			} finally {
+				if (reader != null)
+					reader.Close ();
+
+				response.Close ();
+			}
+		}
+
+		public Album LookupAlbum (string name)
+		{
+			Album match = null;
+
+			foreach (Album album in albums) {
+				if (album.Name == name) {
+					match = album;
+					break;
+				}
+			}
+			return match;
+		}
+
+		public Album LookupAlbum (int ref_num)
+		{
+			// FIXME this is really not the best way to do this
+			Album match = null;
+
+			foreach (Album album in albums) {
+				if (album.RefNum == ref_num) {
+					match = album;
+					break;
+				}
+			}
+			return match;
+		}
+
+		public static string FixUrl(string url, string end)
+		{
+			string fixedUrl = url;
+			if (!url.EndsWith (end)) {
+				if (!url.EndsWith ("/"))
+					fixedUrl = url + "/";
+				fixedUrl = fixedUrl + end;
+			}
+			return fixedUrl;
+
+		}
+
+		public void PopupException (GalleryCommandException e, Gtk.Dialog d)
+		{
+			Log.DebugFormat ("{0} : {1} ({2})", e.Message, e.ResponseText, e.Status);
+			HigMessageDialog md =
+				new HigMessageDialog (d,
+						      Gtk.DialogFlags.Modal |
+						      Gtk.DialogFlags.DestroyWithParent,
+						      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+						      Catalog.GetString ("Error while creating new album"),
+						      String.Format (Catalog.GetString ("The following error was encountered while attempting to perform the requested operation:\n{0} ({1})"), e.Message, e.Status));
+			md.Run ();
+			md.Destroy ();
+		}
+
+	}
+
+	public class Gallery1 : Gallery
+	{
+		public const string script_name = "gallery_remote2.php";
+		public Gallery1 (string url) : this (url, url) {}
+		public Gallery1 (string name, string url) : base (name)
+		{
+			this.uri = new Uri (FixUrl (url, script_name));
+			version = GalleryVersion.Version1;
+		}
+
+		public override void Login (string username, string passwd)
+		{
+			//Console.WriteLine ("Gallery1: Attempting to login");
+			FormClient client = new FormClient (cookies);
+
+			client.Add ("cmd", "login");
+			client.Add ("protocol_version", "2.3");
+			client.Add ("uname", username);
+			client.Add ("password", passwd);
+
+			ParseLogin (client.Submit (uri));
+		}
+
+		public override ArrayList FetchAlbums ()
+		{
+			FormClient client = new FormClient (cookies);
+
+			client.Add ("cmd", "fetch-albums");
+			client.Add ("protocol_version", "2.3");
+
+			return ParseFetchAlbums (client.Submit (uri));
+		}
+
+
+		public override bool MoveAlbum (Album album, string end_name)
+		{
+			FormClient client = new FormClient (cookies);
+
+			client.Add ("cmd", "move-album");
+			client.Add ("protocol_version", "2.7");
+			client.Add ("set_albumName", album.Name);
+			client.Add ("set_destalbumName", end_name);
+
+			return ParseMoveAlbum (client.Submit (uri));
+		}
+
+		public override int AddItem (Album album,
+				     string path,
+				     string filename,
+				     string caption,
+				     string description,
+				     bool autorotate)
+		{
+			FormClient client = new FormClient (cookies);
+
+			client.Add ("cmd", "add-item");
+			client.Add ("protocol_version", "2.9");
+			client.Add ("set_albumName", album.Name);
+			client.Add ("caption", caption);
+			client.Add ("userfile_name", filename);
+			client.Add ("force_filename", filename);
+			client.Add ("auto_rotate", autorotate ? "yes" : "no");
+			client.Add ("userfile", new FileInfo (path));
+			client.Add ("extrafield.Description", description);
+			client.expect_continue = expect_continue;
+
+			return ParseAddItem (client.Submit (uri, Progress));
+		}
+
+		/*
+		public override Album AlbumProperties (string album)
+		{
+			FormClient client = new FormClient (cookies);
+			client.Add ("cmd", "album-properties");
+			client.Add ("protocol_version", "2.3");
+			client.Add ("set_albumName", album);
+
+			return ParseAlbumProperties (client.Submit (uri));
+		}
+		*/
+
+		public override bool NewAlbum (string parent_name,
+				      string name,
+				      string title,
+				      string description)
+		{
+			FormClient client = new FormClient (cookies);
+			client.Multipart = true;
+			client.Add ("cmd", "new-album");
+			client.Add ("protocol_version", "2.8");
+			client.Add ("set_albumName", parent_name);
+			client.Add ("newAlbumName", name);
+			client.Add ("newAlbumTitle", title);
+			client.Add ("newAlbumDesc", description);
+
+			return ParseNewAlbum (client.Submit (uri));
+		}
+
+		public override ArrayList FetchAlbumImages (Album album, bool include_ablums)
+		{
+			FormClient client = new FormClient (cookies);
+			client.Add ("cmd", "fetch-album-images");
+			client.Add ("protocol_version","2.3");
+			client.Add ("set_albumName", album.Name);
+			client.Add ("albums_too", include_ablums ? "yes" : "no");
+
+			album.Images = ParseFetchAlbumImages (client.Submit (uri), album);
+			return album.Images;
+		}
+
+		public override ArrayList FetchAlbumsPrune ()
+		{
+			FormClient client = new FormClient (cookies);
+			client.Add ("cmd", "fetch-albums-prune");
+			client.Add ("protocol_version", "2.3");
+			client.Add ("check_writable", "no");
+			ArrayList a = ParseFetchAlbums (client.Submit (uri));
+			a.Sort();
+			return a;
+		}
+
+		public ArrayList ParseFetchAlbumImages (HttpWebResponse response, Album album)
+		{
+			string [] data;
+			StreamReader reader = null;
+			ResultCode status = ResultCode.UnknownResponse;
+			string status_text = "Error: Unable to parse server response";
+			try {
+				Image current_image = null;
+				reader = findResponse (response);
+				while ((data = GetNextLine (reader)) != null) {
+					if (data[0] == "status") {
+						status = (ResultCode) int.Parse (data [1]);
+					} else if (data[0].StartsWith ("status_text")) {
+						status_text = data[1];
+						Log.DebugFormat ("StatusText : {0}", data[1]);
+					} else if (data[0].StartsWith ("image.name")) {
+						current_image = new Image (album, data[1]);
+						album.Images.Add (current_image);
+					} else if (data[0].StartsWith ("image.raw_width")) {
+						current_image.RawWidth = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.raw_height")) {
+						current_image.RawHeight = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.raw_height")) {
+						current_image.RawHeight = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.raw_filesize")) {
+					} else if (data[0].StartsWith ("image.capturedate.year")) {
+					} else if (data[0].StartsWith ("image.capturedate.mon")) {
+					} else if (data[0].StartsWith ("image.capturedate.mday")) {
+					} else if (data[0].StartsWith ("image.capturedate.hours")) {
+					} else if (data[0].StartsWith ("image.capturedate.minutes")) {
+					} else if (data[0].StartsWith ("image.capturedate.seconds")) {
+					} else if (data[0].StartsWith ("image.hidden")) {
+					} else if (data[0].StartsWith ("image.resizedName")) {
+						current_image.ResizedName = data[1];
+					} else if (data[0].StartsWith ("image.resized_width")) {
+						current_image.ResizedWidth = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.resized_height")) {
+						current_image.ResizedHeight = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.thumbName")) {
+						current_image.ThumbName = data[1];
+					} else if (data[0].StartsWith ("image.thumb_width")) {
+						current_image.ThumbWidth = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.thumb_height")) {
+						current_image.ThumbHeight = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.caption")) {
+						current_image.Caption = data[1];
+					} else if (data[0].StartsWith ("image.extrafield.Description")) {
+						current_image.Description = data[1];
+					} else if (data[0].StartsWith ("image.clicks")) {
+						try {
+							current_image.Clicks = int.Parse (data[1]);
+						} catch (System.FormatException) {
+							current_image.Clicks = 0;
+						}
+					} else if (data[0].StartsWith ("baseurl")) {
+						album.BaseURL = data[1];
+					} else if (data[0].StartsWith ("image_count")) {
+						if (album.Images.Count != int.Parse (data[1]))
+							Log.Warning ("Parsed image count for " + album.Name + "(" + album.Images.Count + ") does not match image_count (" + data[1] + ").  Something is amiss");
+					} else {
+						Log.DebugFormat ("Unparsed Line in ParseFetchAlbumImages(): {0}={1}", data[0], data[1]);
+					}
+				}
+				//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
+				if (status != ResultCode.Success) {
+					Log.Debug (status_text);
+					throw new GalleryCommandException (status_text, status);
+				}
+
+
+				//Set the Urls for downloading the images.
+				string baseUrl = album.BaseURL + "/";
+				foreach (Image image in album.Images) {
+					image.Url = baseUrl + image.Name;
+				}
+
+				return album.Images;
+			} finally {
+				if (reader != null)
+					reader.Close ();
+
+				response.Close ();
+			}
+		}
+
+		public override string GetAlbumUrl (Album album)
+		{
+			string url = Uri.ToString();
+			url = url.Remove (url.Length - script_name.Length, script_name.Length);
+
+			string path = album.Name;
+
+			url = url + path;
+			url = url.Replace (" ", "+");
+			return url;
+		}
+
+
+	}
+	public class Gallery2 : Gallery
+	{
+		public const string script_name = "main.php";
+
+		public Gallery2 (string url) : this (url, url) {}
+		public Gallery2 (string name, string url) : base (name)
+		{
+			this.uri = new Uri (FixUrl (url, script_name));
+			version = GalleryVersion.Version2;
+		}
+
+		public override void Login (string username, string passwd)
+		{
+			Log.Debug ("Gallery2: Attempting to login");
+			FormClient client = new FormClient (cookies);
+
+			client.Add ("g2_form[cmd]", "login");
+			client.Add ("g2_form[protocol_version]", "2.10");
+			client.Add ("g2_form[uname]", username);
+			client.Add ("g2_form[password]", passwd);
+			AddG2Specific (client);
+
+			ParseLogin (client.Submit (uri));
+		}
+
+		public override ArrayList FetchAlbums ()
+		{
+			//FetchAlbums doesn't exist for G2, we have to use FetchAlbumsPrune()
+			return FetchAlbumsPrune ();
+		}
+
+
+		public override bool MoveAlbum (Album album, string end_name)
+		{
+			FormClient client = new FormClient (cookies);
+
+			client.Add ("g2_form[cmd]", "move-album");
+			client.Add ("g2_form[protocol_version]", "2.10");
+			client.Add ("g2_form[set_albumName]", album.Name);
+			client.Add ("g2_form[set_destalbumName]", end_name);
+			AddG2Specific (client);
+
+			return ParseMoveAlbum (client.Submit (uri));
+		}
+
+		public override int AddItem (Album album,
+				     string path,
+				     string filename,
+				     string caption,
+				     string description,
+				     bool autorotate)
+		{
+			FormClient client = new FormClient (cookies);
+
+			client.Add ("g2_form[cmd]", "add-item");
+			client.Add ("g2_form[protocol_version]", "2.10");
+			client.Add ("g2_form[set_albumName]", album.Name);
+			client.Add ("g2_form[caption]", caption);
+			client.Add ("g2_form[userfile_name]", filename);
+			client.Add ("g2_form[force_filename]", filename);
+			client.Add ("g2_form[auto_rotate]", autorotate ? "yes" : "no");
+			client.Add ("g2_form[extrafield.Description]", description);
+			client.Add ("g2_userfile", new FileInfo (path));
+			client.expect_continue = expect_continue;
+			AddG2Specific (client);
+
+			return ParseAddItem (client.Submit (uri, Progress));
+		}
+
+		/*
+		public override Album AlbumProperties (string album)
+		{
+			FormClient client = new FormClient (cookies);
+			client.Add ("cmd", "album-properties");
+			client.Add ("protocol_version", "2.3");
+			client.Add ("set_albumName", album);
+
+			return ParseAlbumProperties (client.Submit (uri));
+		}
+		*/
+
+		public override bool NewAlbum (string parent_name,
+				      string name,
+				      string title,
+				      string description)
+		{
+			FormClient client = new FormClient (cookies);
+			client.Multipart = true;
+			client.Add ("g2_form[cmd]", "new-album");
+			client.Add ("g2_form[protocol_version]", "2.10");
+			client.Add ("g2_form[set_albumName]", parent_name);
+			client.Add ("g2_form[newAlbumName]", name);
+			client.Add ("g2_form[newAlbumTitle]", title);
+			client.Add ("g2_form[newAlbumDesc]", description);
+			AddG2Specific (client);
+
+			return ParseNewAlbum (client.Submit (uri));
+		}
+
+		public override ArrayList FetchAlbumImages (Album album, bool include_ablums)
+		{
+			FormClient client = new FormClient (cookies);
+			client.Add ("g2_form[cmd]", "fetch-album-images");
+			client.Add ("g2_form[protocol_version]","2.10");
+			client.Add ("g2_form[set_albumName]", album.Name);
+			client.Add ("g2_form[albums_too]", include_ablums ? "yes" : "no");
+			AddG2Specific (client);
+
+			album.Images = ParseFetchAlbumImages (client.Submit (uri), album);
+			return album.Images;
+		}
+
+		public override ArrayList FetchAlbumsPrune ()
+		{
+			FormClient client = new FormClient (cookies);
+			client.Add ("g2_form[cmd]", "fetch-albums-prune");
+			client.Add ("g2_form[protocol_version]", "2.10");
+			client.Add ("g2_form[check_writable]", "no");
+			AddG2Specific (client);
+
+			ArrayList a = ParseFetchAlbums (client.Submit (uri));
+			a.Sort();
+			return a;
+		}
+
+		private void AddG2Specific (FormClient client)
+		{
+			if (AuthToken != null && AuthToken != String.Empty)
+				client.Add("g2_authToken", AuthToken);
+			client.Add("g2_controller", "remote.GalleryRemote");
+		}
+
+		public ArrayList ParseFetchAlbumImages (HttpWebResponse response, Album album)
+		{
+			string [] data;
+			StreamReader reader = null;
+			ResultCode status = ResultCode.UnknownResponse;
+			string status_text = "Error: Unable to parse server response";
+			try {
+				Image current_image = null;
+				string baseUrl = Uri.ToString() + "?g2_view=core.DownloadItem&g2_itemId=";
+				reader = findResponse (response);
+				while ((data = GetNextLine (reader)) != null) {
+					if (data[0] == "status") {
+						status = (ResultCode) int.Parse (data [1]);
+					} else if (data[0].StartsWith ("status_text")) {
+						status_text = data[1];
+						Log.DebugFormat ("StatusText : {0}", data[1]);
+					} else if (data[0].StartsWith ("image.name")) {
+						//for G2 this is the number used to download the image.
+						current_image = new Image (album, "awaiting 'title'");
+						album.Images.Add (current_image);
+						current_image.Url = baseUrl + data[1];
+					} else if (data[0].StartsWith ("image.title")) {
+						//for G2 the "title" is the name"
+						current_image.Name = data[1];
+					} else if (data[0].StartsWith ("image.raw_width")) {
+						current_image.RawWidth = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.raw_height")) {
+						current_image.RawHeight = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.raw_height")) {
+						current_image.RawHeight = int.Parse (data[1]);
+					//ignore these for now
+					} else if (data[0].StartsWith ("image.raw_filesize")) {
+					} else if (data[0].StartsWith ("image.forceExtension")) {
+					} else if (data[0].StartsWith ("image.capturedate.year")) {
+					} else if (data[0].StartsWith ("image.capturedate.mon")) {
+					} else if (data[0].StartsWith ("image.capturedate.mday")) {
+					} else if (data[0].StartsWith ("image.capturedate.hours")) {
+					} else if (data[0].StartsWith ("image.capturedate.minutes")) {
+					} else if (data[0].StartsWith ("image.capturedate.seconds")) {
+					} else if (data[0].StartsWith ("image.hidden")) {
+					} else if (data[0].StartsWith ("image.resizedName")) {
+						current_image.ResizedName = data[1];
+					} else if (data[0].StartsWith ("image.resized_width")) {
+						current_image.ResizedWidth = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.resized_height")) {
+						current_image.ResizedHeight = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.thumbName")) {
+						current_image.ThumbName = data[1];
+					} else if (data[0].StartsWith ("image.thumb_width")) {
+						current_image.ThumbWidth = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.thumb_height")) {
+						current_image.ThumbHeight = int.Parse (data[1]);
+					} else if (data[0].StartsWith ("image.caption")) {
+						current_image.Caption = data[1];
+					} else if (data[0].StartsWith ("image.extrafield.Description")) {
+						current_image.Description = data[1];
+					} else if (data[0].StartsWith ("image.clicks")) {
+						try {
+							current_image.Clicks = int.Parse (data[1]);
+						} catch (System.FormatException) {
+							current_image.Clicks = 0;
+						}
+					} else if (data[0].StartsWith ("baseurl")) {
+						album.BaseURL = data[1];
+					} else if (data[0].StartsWith ("image_count")) {
+						if (album.Images.Count != int.Parse (data[1]))
+							Log.Warning ("Parsed image count for " + album.Name + "(" + album.Images.Count + ") does not match image_count (" + data[1] + ").  Something is amiss");
+					} else {
+						Log.DebugFormat ("Unparsed Line in ParseFetchAlbumImages(): {0}={1}", data[0], data[1]);
+					}
+				}
+				Log.DebugFormat ("Found: {0} cookies", response.Cookies.Count);
+				if (status != ResultCode.Success) {
+					Log.Debug (status_text);
+					throw new GalleryCommandException (status_text, status);
+				}
+
+				return album.Images;
+
+			} finally {
+				if (reader != null)
+					reader.Close ();
+
+				response.Close ();
+			}
+		}
+
+		public override string GetAlbumUrl (Album album)
+		{
+			return Uri.ToString() + "?g2_view=core.ShowItem&g2_itemId=" + album.Name;
+		}
+
+	}
+
+	public enum GalleryVersion : byte
+	{
+		VersionUnknown = 0,
+		Version1 = 1,
+		Version2 = 2
+	}
+}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile.am b/src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile.am
new file mode 100644
index 0000000..436b5ef
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile.am
@@ -0,0 +1,15 @@
+ASSEMBLY = FSpot.Exporters.Gallery
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_GALLERYEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	FSpot.Exporters.Gallery/FormClient.cs \
+	FSpot.Exporters.Gallery/GalleryExport.cs \
+	FSpot.Exporters.Gallery/GalleryRemote.cs
+
+RESOURCES =  \
+	Resources/GalleryExport.addin.xml \
+	Resources/GalleryExport.glade
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile.in b/src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile.in
new file mode 100644
index 0000000..cb78b4b
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile.in
@@ -0,0 +1,812 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Exporters/FSpot.Exporters.Gallery
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.Gallery
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_GALLERYEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	FSpot.Exporters.Gallery/FormClient.cs \
+	FSpot.Exporters.Gallery/GalleryExport.cs \
+	FSpot.Exporters.Gallery/GalleryRemote.cs
+
+RESOURCES = \
+	Resources/GalleryExport.addin.xml \
+	Resources/GalleryExport.glade
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Gallery/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/GalleryExport.addin.xml b/src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/GalleryExport.addin.xml
new file mode 100644
index 0000000..7c350ea
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/GalleryExport.addin.xml
@@ -0,0 +1,18 @@
+<Addin namespace="FSpot"
+	version="0.8"
+	compatVersion="0.8"
+	name="Gallery Export"
+	description="This extension allows you to export your photos to PHP Gallery (http://gallery.menalto.com)."
+	author="F-Spot team"
+	url="http://f-spot.org"
+	defaultEnabled="true"
+	category="Export">
+
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+
+	<Extension path = "/FSpot/Menus/Exports">
+		<ExportMenuItem id="Gallery" _label = "Web _Gallery..." class = "FSpot.Exporters.Gallery.GalleryExport" />
+	</Extension>
+</Addin>
diff --git a/extensions/Exporters/GalleryExport/GalleryExport.glade b/src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/GalleryExport.glade
similarity index 100%
rename from extensions/Exporters/GalleryExport/GalleryExport.glade
rename to src/Extensions/Exporters/FSpot.Exporters.Gallery/Resources/GalleryExport.glade
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
new file mode 100644
index 0000000..033e9cf
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/FSpot.Exporters.PicasaWeb/PicasaWebExport.cs
@@ -0,0 +1,941 @@
+/*
+ * PicasaWebExport.cs
+ *
+ * Authors:
+ *   Stephane Delcroix <stephane at delcroix.org>
+ *
+ * Copyright (C) 2006 Stephane Delcroix
+ */
+
+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 Mono.Google;
+using Mono.Google.Picasa;
+
+namespace FSpot.Exporters.PicasaWeb {
+	public class GoogleAccount {
+
+		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)
+		{
+			this.username = username;
+			this.password = password;
+		}
+
+		public GoogleAccount (string username, string password, string token, string unlock_captcha)
+		{
+			this.username = username;
+			this.password = password;
+			this.token = token;
+			this.unlock_captcha = unlock_captcha;
+		}
+
+		public Mono.Google.Picasa.PicasaWeb Connect ()
+		{
+			Log.Debug ("GoogleAccount.Connect()");
+			GoogleConnection conn = new GoogleConnection (GoogleService.Picasa);
+			ServicePointManager.CertificatePolicy = new NoCheckCertificatePolicy ();
+			if (unlock_captcha == null || token == null)
+				conn.Authenticate(username, password);
+			else {
+				conn.Authenticate(username, password, token, unlock_captcha);
+				token = null;
+				unlock_captcha = null;
+			}
+			connection = conn;
+			var picasa = new Mono.Google.Picasa.PicasaWeb(conn);
+			this.picasa = picasa;
+			return picasa;
+		}
+
+		private void MarkChanged()
+		{
+			connection = null;
+		}
+
+		public bool Connected {
+			get {
+				return (connection != null);
+			}
+		}
+
+		public string Username {
+			get {
+				return username;
+			}
+			set {
+				if (username != value) {
+					username = value;
+					MarkChanged ();
+				}
+			}
+		}
+
+		public string Password {
+			get {
+				return password;
+			}
+			set {
+				if (password != value) {
+					password = value;
+					MarkChanged ();
+				}
+			}
+		}
+
+		public string Token {
+			get {
+				return token;
+			}
+			set {
+				token = value;
+			}
+		}
+
+		public string UnlockCaptcha {
+			get {
+				return unlock_captcha;
+			}
+			set {
+				unlock_captcha = value;
+			}
+		}
+
+		public Mono.Google.Picasa.PicasaWeb Picasa {
+			get {
+				return picasa;
+			}
+		}
+	}
+
+
+	public class GoogleAccountManager
+	{
+		private static GoogleAccountManager instance;
+		private const string keyring_item_name = "Google Account";
+		ArrayList accounts;
+
+		public delegate void AccountListChangedHandler (GoogleAccountManager manager, GoogleAccount changed_account);
+		public event AccountListChangedHandler AccountListChanged;
+
+		public static GoogleAccountManager GetInstance ()
+		{
+			if (instance == null) {
+				instance = new GoogleAccountManager ();
+			}
+
+			return instance;
+		}
+
+		private GoogleAccountManager ()
+		{
+			accounts = new ArrayList ();
+			ReadAccounts ();
+		}
+
+		public void MarkChanged ()
+		{
+			MarkChanged (true, null);
+		}
+
+		public void MarkChanged (bool write, GoogleAccount changed_account)
+		{
+			if (write)
+				WriteAccounts ();
+
+			if (AccountListChanged != null)
+				AccountListChanged (this, changed_account);
+		}
+
+		public ArrayList GetAccounts ()
+		{
+			return accounts;
+		}
+
+		public void AddAccount (GoogleAccount account)
+		{
+			AddAccount (account, true);
+		}
+
+		public void AddAccount (GoogleAccount account, bool write)
+		{
+			accounts.Add (account);
+			MarkChanged (write, account);
+		}
+
+		public void RemoveAccount (GoogleAccount account)
+		{
+			string keyring;
+			try {
+				keyring = Ring.GetDefaultKeyring();
+			} catch {
+				return;
+			}
+			Hashtable request_attributes = new Hashtable();
+			request_attributes["name"] = keyring_item_name;
+			request_attributes["username"] = account.Username;
+			try {
+				foreach(ItemData result in Ring.Find(ItemType.GenericSecret, request_attributes)) {
+					Ring.DeleteItem(keyring, result.ItemID);
+				}
+			} catch (Exception e) {
+				Log.DebugException (e);
+			}
+			accounts.Remove (account);
+			MarkChanged ();
+		}
+
+		public void WriteAccounts ()
+		{
+			string keyring;
+			try {
+				keyring = Ring.GetDefaultKeyring();
+			} catch {
+				return;
+			}
+			foreach (GoogleAccount account in accounts) {
+				Hashtable update_request_attributes = new Hashtable();
+				update_request_attributes["name"] = keyring_item_name;
+				update_request_attributes["username"] = account.Username;
+
+				try {
+					Ring.CreateItem(keyring, ItemType.GenericSecret, keyring_item_name, update_request_attributes, account.Password, true);
+				} catch {
+					continue;
+				}
+			}
+		}
+
+		private void ReadAccounts ()
+		{
+
+			Hashtable request_attributes = new Hashtable();
+			request_attributes["name"] = keyring_item_name;
+			try {
+				foreach(ItemData result in Ring.Find(ItemType.GenericSecret, request_attributes)) {
+					if(!result.Attributes.ContainsKey("name") || !result.Attributes.ContainsKey("username") ||
+						(result.Attributes["name"] as string) != keyring_item_name)
+						continue;
+
+					string username = (string)result.Attributes["username"];
+					string password = result.Secret;
+
+					if (username == null || username == String.Empty || password == null || password == String.Empty)
+						throw new ApplicationException ("Invalid username/password in keyring");
+
+					GoogleAccount account = new GoogleAccount(username, password);
+					if (account != null)
+						AddAccount (account, false);
+
+				}
+			} catch (Exception e) {
+				Log.DebugException (e);
+			}
+
+			MarkChanged ();
+		}
+	}
+
+	public class GoogleAccountDialog {
+		public GoogleAccountDialog (Gtk.Window parent) : this (parent, null, false, null) {
+			Dialog.Response += HandleAddResponse;
+			add_button.Sensitive = false;
+		}
+
+		public GoogleAccountDialog (Gtk.Window parent, GoogleAccount account, bool show_error, CaptchaException captcha_exception)
+		{
+			xml = new Glade.XML (null, "PicasaWebExport.glade", dialog_name, "f-spot");
+			xml.Autoconnect (this);
+			Dialog.Modal = false;
+			Dialog.TransientFor = parent;
+			Dialog.DefaultResponse = Gtk.ResponseType.Ok;
+
+			this.account = account;
+
+			bool show_captcha = (captcha_exception != null);
+			status_area.Visible = show_error;
+			locked_area.Visible = show_captcha;
+			captcha_label.Visible = show_captcha;
+			captcha_entry.Visible = show_captcha;
+			captcha_image.Visible = show_captcha;
+
+			password_entry.ActivatesDefault = true;
+			username_entry.ActivatesDefault = true;
+
+			if (show_captcha) {
+				try {
+					using  (var img = ImageFile.Create(new SafeUri(captcha_exception.CaptchaUrl, true))) {
+						captcha_image.Pixbuf = img.Load();
+						token = captcha_exception.Token;
+					}
+				} catch (Exception) {}
+			}
+
+			if (account != null) {
+				password_entry.Text = account.Password;
+				username_entry.Text = account.Username;
+				add_button.Label = Gtk.Stock.Ok;
+				Dialog.Response += HandleEditResponse;
+			}
+
+			if (remove_button != null)
+				remove_button.Visible = account != null;
+
+			this.Dialog.Show ();
+
+			password_entry.Changed += HandleChanged;
+			username_entry.Changed += HandleChanged;
+			HandleChanged (null, null);
+		}
+
+		private void HandleChanged (object sender, System.EventArgs args)
+		{
+			password = password_entry.Text;
+			username = username_entry.Text;
+
+			add_button.Sensitive = !(password == String.Empty || username == String.Empty);
+		}
+
+		[GLib.ConnectBefore]
+		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId == Gtk.ResponseType.Ok) {
+				GoogleAccount account = new GoogleAccount (username, password);
+				GoogleAccountManager.GetInstance ().AddAccount (account);
+			}
+			Dialog.Destroy ();
+		}
+
+		protected void HandleEditResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId == Gtk.ResponseType.Ok) {
+				account.Username = username;
+				account.Password = password;
+				account.Token = token;
+				account.UnlockCaptcha = captcha_entry.Text;
+				GoogleAccountManager.GetInstance ().MarkChanged (true, account);
+			} else if (args.ResponseId == Gtk.ResponseType.Reject) {
+				// NOTE we are using Reject to signal the remove action.
+				GoogleAccountManager.GetInstance ().RemoveAccount (account);
+			}
+			Dialog.Destroy ();
+		}
+
+		private Gtk.Dialog Dialog {
+			get {
+				if (dialog == null)
+					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+				return dialog;
+			}
+		}
+
+		private GoogleAccount account;
+		private string password;
+		private string username;
+		private string token;
+
+		private Glade.XML xml;
+		private string dialog_name = "google_add_dialog";
+
+		// widgets
+		[Glade.Widget] Gtk.Dialog dialog;
+		[Glade.Widget] Gtk.Entry password_entry;
+		[Glade.Widget] Gtk.Entry username_entry;
+		[Glade.Widget] Gtk.Entry captcha_entry;
+
+		[Glade.Widget] Gtk.Button add_button;
+		[Glade.Widget] Gtk.Button remove_button;
+		[Glade.Widget] Gtk.Button cancel_button;
+
+		[Glade.Widget] Gtk.HBox status_area;
+		[Glade.Widget] Gtk.HBox locked_area;
+
+		[Glade.Widget] Gtk.Image captcha_image;
+		[Glade.Widget] Gtk.Label captcha_label;
+
+	}
+
+	public class GoogleAddAlbum {
+		[Glade.Widget] Gtk.Dialog dialog;
+		[Glade.Widget] Gtk.OptionMenu album_optionmenu;
+
+		[Glade.Widget] Gtk.Entry title_entry;
+		[Glade.Widget] Gtk.Entry description_entry;
+		[Glade.Widget] Gtk.CheckButton public_check;
+
+		[Glade.Widget] Gtk.Button add_button;
+		[Glade.Widget] Gtk.Button cancel_button;
+
+		private Glade.XML xml;
+		private string dialog_name = "google_add_album_dialog";
+
+		private GoogleExport export;
+		private Mono.Google.Picasa.PicasaWeb picasa;
+		private string description;
+		private string title;
+		private bool public_album;
+
+		public GoogleAddAlbum (GoogleExport export, Mono.Google.Picasa.PicasaWeb picasa)
+		{
+			xml = new Glade.XML (null, "PicasaWebExport.glade", dialog_name, "f-spot");
+			xml.Autoconnect (this);
+
+			this.export = export;
+			this.picasa = picasa;
+
+			Dialog.Response += HandleAddResponse;
+
+			description_entry.Changed += HandleChanged;
+			title_entry.Changed += HandleChanged;
+			HandleChanged (null, null);
+		}
+
+		private void HandleChanged (object sender, EventArgs args)
+		{
+			description = description_entry.Text;
+			title = title_entry.Text;
+			public_album = public_check.Active;
+
+			if (title == String.Empty)
+				add_button.Sensitive = false;
+			else
+				add_button.Sensitive = true;
+		}
+
+		[GLib.ConnectBefore]
+		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId == Gtk.ResponseType.Ok) {
+				public_album = public_check.Active;
+
+				try {
+					picasa.CreateAlbum (System.Web.HttpUtility.HtmlEncode (title), description, public_album ? AlbumAccess.Public : AlbumAccess.Private);
+				} catch (System.Exception e) {
+					HigMessageDialog md =
+					new HigMessageDialog (Dialog,
+							      Gtk.DialogFlags.Modal |
+							      Gtk.DialogFlags.DestroyWithParent,
+								      Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
+							      Catalog.GetString ("Error while creating Album"),
+							      String.Format (Catalog.GetString ("The following error was encountered while attempting to create an album: {0}"), e.Message));
+					md.Run ();
+					md.Destroy ();
+					return;
+				}
+				export.HandleAlbumAdded (title);
+			}
+			Dialog.Destroy ();
+		}
+
+		private Gtk.Dialog Dialog {
+			get {
+				if (dialog == null)
+					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+				return dialog;
+			}
+		}
+	}
+
+
+	public class GoogleExport : FSpot.Extensions.IExporter {
+		public GoogleExport ()
+		{
+		}
+
+		public void Run (IBrowsableCollection selection)
+		{
+			xml = new Glade.XML (null, "PicasaWebExport.glade", dialog_name, "f-spot");
+			xml.Autoconnect (this);
+
+			this.items = selection.Items;
+			album_button.Sensitive = false;
+			IconView view = new IconView (selection);
+			view.DisplayDates = false;
+			view.DisplayTags = false;
+
+			Dialog.Modal = false;
+			Dialog.TransientFor = null;
+
+			thumb_scrolledwindow.Add (view);
+			view.Show ();
+			Dialog.Show ();
+
+
+			GoogleAccountManager manager = GoogleAccountManager.GetInstance ();
+			manager.AccountListChanged += PopulateGoogleOptionMenu;
+			PopulateGoogleOptionMenu (manager, null);
+			album_optionmenu.Changed += HandleAlbumOptionMenuChanged;
+
+			if (edit_button != null)
+				edit_button.Clicked += HandleEditGallery;
+
+			Dialog.Response += HandleResponse;
+			connect = true;
+			HandleSizeActive (null, null);
+			Connect ();
+
+			LoadPreference (SCALE_KEY);
+			LoadPreference (SIZE_KEY);
+			LoadPreference (BROWSER_KEY);
+//			LoadPreference (Preferences.EXPORT_PICASAWEB_META);
+			LoadPreference (TAG_KEY);
+		}
+
+		private bool scale;
+		private int size;
+		private bool browser;
+//		private bool meta;
+		private bool export_tag;
+		private bool connect = false;
+
+		private long approx_size = 0;
+		private long sent_bytes = 0;
+
+		IBrowsableItem [] items;
+		int photo_index;
+		ThreadProgressDialog progress_dialog;
+
+		ArrayList accounts;
+		private GoogleAccount account;
+		private PicasaAlbum album;
+		private PicasaAlbumCollection albums = null;
+
+		private string xml_path;
+
+		private Glade.XML xml;
+		private string dialog_name = "google_export_dialog";
+
+		public const string EXPORT_SERVICE = "picasaweb/";
+		public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
+		public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
+		public const string BROWSER_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
+		public const string TAG_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "tag";
+
+		// widgets
+		[Glade.Widget] Gtk.Dialog dialog;
+		[Glade.Widget] Gtk.OptionMenu gallery_optionmenu;
+		[Glade.Widget] Gtk.OptionMenu album_optionmenu;
+
+		[Glade.Widget] Gtk.Entry width_entry;
+		[Glade.Widget] Gtk.Entry height_entry;
+
+		[Glade.Widget] Gtk.Label status_label;
+		[Glade.Widget] Gtk.Label album_status_label;
+
+		[Glade.Widget] Gtk.CheckButton browser_check;
+		[Glade.Widget] Gtk.CheckButton scale_check;
+//		[Glade.Widget] Gtk.CheckButton meta_check;
+		[Glade.Widget] Gtk.CheckButton tag_check;
+
+		[Glade.Widget] Gtk.SpinButton size_spin;
+
+		[Glade.Widget] Gtk.Button album_button;
+		[Glade.Widget] Gtk.Button add_button;
+		[Glade.Widget] Gtk.Button edit_button;
+
+		[Glade.Widget] Gtk.Button export_button;
+		[Glade.Widget] Gtk.Button cancel_button;
+
+		[Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
+
+		System.Threading.Thread command_thread;
+
+		private void HandleResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId != Gtk.ResponseType.Ok) {
+				Dialog.Destroy ();
+				return;
+			}
+
+			if (scale_check != null) {
+				scale = scale_check.Active;
+				size = size_spin.ValueAsInt;
+			} else
+				scale = false;
+
+			browser = browser_check.Active;
+//			meta = meta_check.Active;
+			export_tag = tag_check.Active;
+
+			if (account != null) {
+				album = (PicasaAlbum) account.Picasa.GetAlbums() [Math.Max (0, album_optionmenu.History)];
+				photo_index = 0;
+
+				Dialog.Destroy ();
+
+				command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (this.Upload));
+				command_thread.Name = Catalog.GetString ("Uploading Pictures");
+
+				progress_dialog = new ThreadProgressDialog (command_thread, items.Length);
+				progress_dialog.Start ();
+
+				// Save these settings for next time
+				Preferences.Set (SCALE_KEY, scale);
+				Preferences.Set (SIZE_KEY, size);
+				Preferences.Set (BROWSER_KEY, browser);
+//				Preferences.Set (Preferences.EXPORT_GALLERY_META, meta);
+				Preferences.Set (TAG_KEY, export_tag);
+			}
+		}
+
+		public void HandleSizeActive (object sender, EventArgs args)
+		{
+			size_spin.Sensitive = scale_check.Active;
+		}
+
+		private void HandleUploadProgress(object o, UploadProgressEventArgs args)
+		{
+				if (approx_size == 0)
+					progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} Sent"), GLib.Format.SizeForDisplay (args.BytesSent));
+				else
+					progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of approx. {1}"), GLib.Format.SizeForDisplay (sent_bytes + args.BytesSent), GLib.Format.SizeForDisplay (approx_size));
+				progress_dialog.Fraction = ((photo_index - 1) / (double) items.Length) + (args.BytesSent / (args.BytesTotal * (double) items.Length));
+		}
+
+		private class DateComparer : IComparer
+		{
+			public int Compare (object left, object right)
+			{
+				return DateTime.Compare ((left as IBrowsableItem).Time, (right as IBrowsableItem).Time);
+			}
+		}
+
+		private void Upload ()
+		{
+			album.UploadProgress += HandleUploadProgress;
+			sent_bytes = 0;
+			approx_size = 0;
+
+			Log.Debug ("Starting Upload to Picasa");
+
+			FilterSet filters = new FilterSet ();
+			filters.Add (new JpegFilter ());
+
+			if (scale)
+				filters.Add (new ResizeFilter ((uint)size));
+
+			Array.Sort (items, new DateComparer ());
+
+			while (photo_index < items.Length) {
+				try {
+					IBrowsableItem item = items[photo_index];
+
+					FileInfo file_info;
+					Log.Debug ("Picasa uploading " + photo_index);
+
+					progress_dialog.Message = String.Format (Catalog.GetString ("Uploading picture \"{0}\" ({1} of {2})"),
+										 item.Name, photo_index+1, items.Length);
+					photo_index++;
+
+					PicasaPicture picture;
+					using (FilterRequest request = new FilterRequest (item.DefaultVersion.Uri)) {
+						filters.Convert (request);
+						file_info = new FileInfo (request.Current.LocalPath);
+
+						if (approx_size == 0) //first image
+							approx_size = file_info.Length * items.Length;
+						else
+							approx_size = sent_bytes * items.Length / (photo_index - 1);
+
+						picture = album.UploadPicture (request.Current.LocalPath, Path.ChangeExtension (item.Name, "jpg"), item.Description);
+						sent_bytes += file_info.Length;
+					}
+					if (App.Instance.Database != null && item is Photo)
+						App.Instance.Database.Exports.Create ((item as Photo).Id,
+									      (item as Photo).DefaultVersionId,
+									      ExportStore.PicasaExportType,
+									      picture.Link);
+
+					//tagging
+					if (item.Tags != null && export_tag)
+						foreach (Tag tag in item.Tags)
+							picture.AddTag (tag.Name);
+				} catch (System.Threading.ThreadAbortException te) {
+					Log.Exception (te);
+					System.Threading.Thread.ResetAbort ();
+				} catch (System.Exception e) {
+					progress_dialog.Message = String.Format (Catalog.GetString ("Error Uploading To Gallery: {0}"),
+										 e.Message);
+					progress_dialog.ProgressText = Catalog.GetString ("Error");
+					Log.DebugException (e);
+
+					if (progress_dialog.PerformRetrySkip ()) {
+						photo_index--;
+						if (photo_index == 0)
+							approx_size = 0;
+					}
+				}
+			}
+
+			progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
+			progress_dialog.Fraction = 1.0;
+			progress_dialog.ProgressText = Catalog.GetString ("Upload Complete");
+			progress_dialog.ButtonLabel = Gtk.Stock.Ok;
+
+			if (browser) {
+				GtkBeans.Global.ShowUri (Dialog.Screen, album.Link);
+			}
+		}
+
+		private void PopulateGoogleOptionMenu (GoogleAccountManager manager, GoogleAccount changed_account)
+		{
+			Gtk.Menu menu = new Gtk.Menu ();
+			this.account = changed_account;
+			int pos = -1;
+
+			accounts = manager.GetAccounts ();
+			if (accounts == null || accounts.Count == 0) {
+				Gtk.MenuItem item = new Gtk.MenuItem (Catalog.GetString ("(No Gallery)"));
+				menu.Append (item);
+				gallery_optionmenu.Sensitive = false;
+				edit_button.Sensitive = false;
+			} else {
+				int i = 0;
+				foreach (GoogleAccount account in accounts) {
+					if (account == changed_account)
+						pos = i;
+
+					Gtk.MenuItem item = new Gtk.MenuItem (account.Username);
+					menu.Append (item);
+					i++;
+				}
+				gallery_optionmenu.Sensitive = true;
+				edit_button.Sensitive = true;
+			}
+
+			menu.ShowAll ();
+			gallery_optionmenu.Menu = menu;
+			gallery_optionmenu.SetHistory ((uint)pos);
+		}
+
+		private void Connect ()
+		{
+			Connect (null);
+		}
+
+		private void Connect (GoogleAccount selected)
+		{
+			Connect (selected, null, null);
+		}
+
+		private void Connect (GoogleAccount selected, string token, string text)
+		{
+			try {
+				if (accounts.Count != 0 && connect) {
+					if (selected == null)
+						account = (GoogleAccount) accounts [gallery_optionmenu.History];
+					else
+						account = selected;
+
+					if (!account.Connected)
+						account.Connect ();
+
+					PopulateAlbumOptionMenu (account.Picasa);
+
+					long qu = account.Picasa.QuotaUsed;
+					long ql = account.Picasa.QuotaLimit;
+
+					StringBuilder sb = new StringBuilder("<small>");
+					sb.Append(String.Format (Catalog.GetString ("Available space: {0}, {1}% used out of {2}"),
+								GLib.Format.SizeForDisplay(ql - qu),
+								(100 * qu / ql),
+								GLib.Format.SizeForDisplay (ql)));
+					sb.Append("</small>");
+					status_label.Text = sb.ToString();
+					status_label.UseMarkup = true;
+
+					album_button.Sensitive = true;
+				}
+			} catch (CaptchaException exc){
+				Log.Debug ("Your Google account is locked");
+				if (selected != null)
+					account = selected;
+
+				PopulateAlbumOptionMenu (account.Picasa);
+				album_button.Sensitive = false;
+
+				new GoogleAccountDialog (this.Dialog, account, false, exc);
+
+				Log.Warning ("Your Google account is locked, you can unlock it by visiting: {0}", CaptchaException.UnlockCaptchaURL);
+
+			} catch (System.Exception) {
+				Log.Warning ("Can not connect to Picasa. Bad username? password? network connection?");
+				if (selected != null)
+					account = selected;
+
+				PopulateAlbumOptionMenu (account.Picasa);
+
+				status_label.Text = String.Empty;
+				album_button.Sensitive = false;
+
+				new GoogleAccountDialog (this.Dialog, account, true, null);
+			}
+		}
+
+		private void HandleAccountSelected (object sender, System.EventArgs args)
+		{
+			Connect ();
+		}
+
+		public void HandleAlbumAdded (string title) {
+			GoogleAccount account = (GoogleAccount) accounts [gallery_optionmenu.History];
+			PopulateAlbumOptionMenu (account.Picasa);
+
+			// make the newly created album selected
+//			PicasaAlbumCollection albums = account.Picasa.GetAlbums();
+			for (int i=0; i < albums.Count; i++) {
+				if (((PicasaAlbum)albums[i]).Title == title) {
+					album_optionmenu.SetHistory((uint)i);
+				}
+			}
+		}
+
+		private void PopulateAlbumOptionMenu (Mono.Google.Picasa.PicasaWeb picasa)
+		{
+			if (picasa != null) {
+				try {
+					albums = picasa.GetAlbums();
+				} catch {
+					Log.Warning ("Picasa: can't get the albums");
+					albums = null;
+					picasa = null;
+				}
+			}
+
+			Gtk.Menu menu = new Gtk.Menu ();
+
+			bool disconnected = picasa == null || !account.Connected || albums == null;
+
+			if (disconnected || albums.Count == 0) {
+				string msg = disconnected ? Catalog.GetString ("(Not Connected)")
+					: Catalog.GetString ("(No Albums)");
+
+				Gtk.MenuItem item = new Gtk.MenuItem (msg);
+				menu.Append (item);
+
+				export_button.Sensitive = false;
+				album_optionmenu.Sensitive = false;
+				album_button.Sensitive = false;
+
+				if (disconnected)
+					album_button.Sensitive = false;
+			} else {
+				foreach (PicasaAlbum album in albums.AllValues) {
+					System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
+
+					label_builder.Append (album.Title);
+					label_builder.Append (" (" + album.PicturesCount + ")");
+
+					Gtk.MenuItem item = new Gtk.MenuItem (label_builder.ToString ());
+					((Gtk.Label)item.Child).UseUnderline = false;
+					menu.Append (item);
+				}
+
+				export_button.Sensitive = items.Length > 0;
+				album_optionmenu.Sensitive = true;
+				album_button.Sensitive = true;
+			}
+
+			menu.ShowAll ();
+			album_optionmenu.Menu = menu;
+		}
+
+		public void HandleAlbumOptionMenuChanged (object sender, System.EventArgs args)
+		{
+			if (albums == null || albums.Count == 0)
+				return;
+
+			PicasaAlbum a = albums [album_optionmenu.History];
+			export_button.Sensitive = a.PicturesRemaining >= items.Length;
+			if (album_status_label.Visible = !export_button.Sensitive) {
+				StringBuilder sb = new StringBuilder("<small>");
+				sb.Append(String.Format (Catalog.GetString ("The selected album has a limit of {0} pictures,\n" +
+								"which would be passed with the current selection of {1} images"),
+								a.PicturesCount + a.PicturesRemaining, items.Length));
+				sb.Append("</small>");
+				album_status_label.Text = String.Format (sb.ToString());
+				album_status_label.UseMarkup = true;
+			} else {
+				album_status_label.Text = String.Empty;
+			}
+		}
+
+		public void HandleAddGallery (object sender, System.EventArgs args)
+		{
+			new GoogleAccountDialog (this.Dialog);
+		}
+
+		public void HandleEditGallery (object sender, System.EventArgs args)
+		{
+			new GoogleAccountDialog (this.Dialog, account, false, null);
+		}
+
+		public void HandleAddAlbum (object sender, System.EventArgs args)
+		{
+			if (account == null)
+				throw new Exception (Catalog.GetString ("No account selected"));
+
+			new GoogleAddAlbum (this, account.Picasa);
+		}
+
+		void LoadPreference (string key)
+		{
+			switch (key) {
+			case SCALE_KEY:
+				if (scale_check.Active != Preferences.Get<bool> (key)) {
+					scale_check.Active = Preferences.Get<bool> (key);
+				}
+				break;
+
+			case SIZE_KEY:
+				size_spin.Value = (double) Preferences.Get<int> (key);
+				break;
+
+			case BROWSER_KEY:
+				if (browser_check.Active != Preferences.Get<bool> (key))
+					browser_check.Active = Preferences.Get<bool> (key);
+				break;
+
+			case TAG_KEY:
+				if (tag_check.Active != Preferences.Get<bool> (key))
+					tag_check.Active = Preferences.Get<bool> (key);
+				break;
+			}
+		}
+
+		private Gtk.Dialog Dialog {
+			get {
+				if (dialog == null)
+					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+				return dialog;
+			}
+		}
+	}
+}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile.am b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile.am
new file mode 100644
index 0000000..8b53c91
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile.am
@@ -0,0 +1,12 @@
+ASSEMBLY = FSpot.Exporters.PicasaWeb
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_PICASAWEBEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Exporters.PicasaWeb/PicasaWebExport.cs
+
+RESOURCES =  \
+	Resources/PicasaWebExport.addin.xml \
+	Resources/PicasaWebExport.glade
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile.in b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile.in
new file mode 100644
index 0000000..9d4313f
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile.in
@@ -0,0 +1,808 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Exporters/FSpot.Exporters.PicasaWeb
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.PicasaWeb
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_PICASAWEBEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Exporters.PicasaWeb/PicasaWebExport.cs
+RESOURCES = \
+	Resources/PicasaWebExport.addin.xml \
+	Resources/PicasaWebExport.glade
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/PicasaWebExport.addin.xml b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/PicasaWebExport.addin.xml
new file mode 100644
index 0000000..9aaa9ae
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/PicasaWebExport.addin.xml
@@ -0,0 +1,18 @@
+<Addin namespace="FSpot"
+	version="0.8"
+	compatVersion="0.8"
+	name="PicasaWeb Export"
+	description="This extension allows you to export your photos to PicasaWeb."
+	author="F-Spot team"
+	url="http://f-spot.org"
+	defaultEnabled="true"
+	category="Export">
+
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+
+	<Extension path = "/FSpot/Menus/Exports">
+		<ExportMenuItem id="PicasaWeb" _label = "_PicasaWeb..." class = "FSpot.Exporters.PicasaWeb.GoogleExport" />
+	</Extension>
+</Addin>
diff --git a/extensions/Exporters/PicasaWebExport/PicasaWebExport.glade b/src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/PicasaWebExport.glade
similarity index 100%
rename from extensions/Exporters/PicasaWebExport/PicasaWebExport.glade
rename to src/Extensions/Exporters/FSpot.Exporters.PicasaWeb/Resources/PicasaWebExport.glade
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
new file mode 100644
index 0000000..16e29d0
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/FSpot.Exporters.SmugMug/SmugMugExport.cs
@@ -0,0 +1,792 @@
+/*
+ * SmugMugExport.cs
+ *
+ * Authors:
+ *   Thomas Van Machelen <thomas.vanmachelen at gmail.com>
+ *
+ * Based on PicasaWebExport code from Stephane Delcroix.
+ *
+ * Copyright (C) 2006 Thomas Van Machelen
+ */
+
+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 {
+	public class SmugMugAccount {
+		private string username;
+		private string password;
+		private SmugMugApi smugmug_proxy;
+
+		public SmugMugAccount (string username, string password)
+		{
+			this.username = username;
+			this.password = password;
+		}
+
+		public SmugMugApi Connect ()
+		{
+			Log.Debug ("SmugMug.Connect() " + username);
+			SmugMugApi proxy = new SmugMugApi (username, password);
+			ServicePointManager.CertificatePolicy = new NoCheckCertificatePolicy ();
+			proxy.Login ();
+
+			this.smugmug_proxy = proxy;
+			return proxy;
+		}
+
+		private void MarkChanged()
+		{
+			smugmug_proxy = null;
+		}
+
+		public bool Connected {
+			get {
+				return (smugmug_proxy != null && smugmug_proxy.Connected);
+			}
+		}
+
+		public string Username {
+			get {
+				return username;
+			}
+			set {
+				if (username != value) {
+					username = value;
+					MarkChanged ();
+				}
+			}
+		}
+
+		public string Password {
+			get {
+				return password;
+			}
+			set {
+				if (password != value) {
+					password = value;
+					MarkChanged ();
+				}
+			}
+		}
+
+		public SmugMugApi SmugMug {
+			get {
+				return smugmug_proxy;
+			}
+		}
+	}
+
+
+	public class SmugMugAccountManager
+	{
+		private static SmugMugAccountManager instance;
+		private const string keyring_item_name = "SmugMug Account";
+		ArrayList accounts;
+
+		public delegate void AccountListChangedHandler (SmugMugAccountManager manager, SmugMugAccount changed_account);
+		public event AccountListChangedHandler AccountListChanged;
+
+		public static SmugMugAccountManager GetInstance ()
+		{
+			if (instance == null) {
+				instance = new SmugMugAccountManager ();
+			}
+
+			return instance;
+		}
+
+		private SmugMugAccountManager ()
+		{
+			accounts = new ArrayList ();
+			ReadAccounts ();
+		}
+
+		public void MarkChanged ()
+		{
+			MarkChanged (true, null);
+		}
+
+		public void MarkChanged (bool write, SmugMugAccount changed_account)
+		{
+			if (write)
+				WriteAccounts ();
+
+			if (AccountListChanged != null)
+				AccountListChanged (this, changed_account);
+		}
+
+		public ArrayList GetAccounts ()
+		{
+			return accounts;
+		}
+
+		public void AddAccount (SmugMugAccount account)
+		{
+			AddAccount (account, true);
+		}
+
+		public void AddAccount (SmugMugAccount account, bool write)
+		{
+			accounts.Add (account);
+			MarkChanged (write, account);
+		}
+
+		public void RemoveAccount (SmugMugAccount account)
+		{
+			string keyring = Ring.GetDefaultKeyring();
+			Hashtable request_attributes = new Hashtable();
+			request_attributes["name"] = keyring_item_name;
+			request_attributes["username"] = account.Username;
+			try {
+				foreach(ItemData result in Ring.Find(ItemType.GenericSecret, request_attributes)) {
+					Ring.DeleteItem(keyring, result.ItemID);
+				}
+			} catch (Exception e) {
+				Log.Exception (e);
+			}
+			accounts.Remove (account);
+			MarkChanged ();
+		}
+
+		public void WriteAccounts ()
+		{
+			string keyring = Ring.GetDefaultKeyring();
+			foreach (SmugMugAccount account in accounts) {
+				Hashtable update_request_attributes = new Hashtable();
+				update_request_attributes["name"] = keyring_item_name;
+				update_request_attributes["username"] = account.Username;
+
+				Ring.CreateItem(keyring, ItemType.GenericSecret, keyring_item_name, update_request_attributes, account.Password, true);
+			}
+		}
+
+		private void ReadAccounts ()
+		{
+
+			Hashtable request_attributes = new Hashtable();
+			request_attributes["name"] = keyring_item_name;
+			try {
+				foreach(ItemData result in Ring.Find(ItemType.GenericSecret, request_attributes)) {
+					if(!result.Attributes.ContainsKey("name") || !result.Attributes.ContainsKey("username") ||
+						(result.Attributes["name"] as string) != keyring_item_name)
+						continue;
+
+					string username = (string)result.Attributes["username"];
+					string password = result.Secret;
+
+					if (username == null || username == String.Empty || password == null || password == String.Empty)
+						throw new ApplicationException ("Invalid username/password in keyring");
+
+					SmugMugAccount account = new SmugMugAccount(username, password);
+					if (account != null)
+						AddAccount (account, false);
+
+				}
+			} catch (Exception e) {
+				Log.Exception (e);
+			}
+
+			MarkChanged ();
+		}
+	}
+
+	public class SmugMugAccountDialog {
+		public SmugMugAccountDialog (Gtk.Window parent) : this (parent, null) {
+			Dialog.Response += HandleAddResponse;
+			add_button.Sensitive = false;
+		}
+
+		public SmugMugAccountDialog (Gtk.Window parent, SmugMugAccount account)
+		{
+			xml = new Glade.XML (null, "SmugMugExport.glade", dialog_name, "f-spot");
+			xml.Autoconnect (this);
+
+			Dialog.Modal = false;
+			Dialog.TransientFor = parent;
+			Dialog.DefaultResponse = Gtk.ResponseType.Ok;
+
+			this.account = account;
+
+			password_entry.ActivatesDefault = true;
+			username_entry.ActivatesDefault = true;
+
+			if (account != null) {
+				password_entry.Text = account.Password;
+				username_entry.Text = account.Username;
+				add_button.Label = Gtk.Stock.Ok;
+				Dialog.Response += HandleEditResponse;
+			}
+
+			if (remove_button != null)
+				remove_button.Visible = account != null;
+
+			this.Dialog.Show ();
+
+			password_entry.Changed += HandleChanged;
+			username_entry.Changed += HandleChanged;
+			HandleChanged (null, null);
+		}
+
+		private void HandleChanged (object sender, System.EventArgs args)
+		{
+			password = password_entry.Text;
+			username = username_entry.Text;
+
+			add_button.Sensitive = !(password == String.Empty || username == String.Empty);
+		}
+
+		[GLib.ConnectBefore]
+		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId == Gtk.ResponseType.Ok) {
+				SmugMugAccount account = new SmugMugAccount (username, password);
+				SmugMugAccountManager.GetInstance ().AddAccount (account);
+			}
+			Dialog.Destroy ();
+		}
+
+		protected void HandleEditResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId == Gtk.ResponseType.Ok) {
+				account.Username = username;
+				account.Password = password;
+				SmugMugAccountManager.GetInstance ().MarkChanged (true, account);
+			} else if (args.ResponseId == Gtk.ResponseType.Reject) {
+				// NOTE we are using Reject to signal the remove action.
+				SmugMugAccountManager.GetInstance ().RemoveAccount (account);
+			}
+			Dialog.Destroy ();
+		}
+
+		private Gtk.Dialog Dialog {
+			get {
+				if (dialog == null)
+					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+				return dialog;
+			}
+		}
+
+		private SmugMugAccount account;
+		private string password;
+		private string username;
+		private string dialog_name = "smugmug_add_dialog";
+		private Glade.XML xml;
+
+		// widgets
+		[Glade.Widget] Gtk.Dialog dialog;
+		[Glade.Widget] Gtk.Entry password_entry;
+		[Glade.Widget] Gtk.Entry username_entry;
+
+		[Glade.Widget] Gtk.Button add_button;
+		[Glade.Widget] Gtk.Button remove_button;
+	}
+
+	public class SmugMugAddAlbum {
+		//[Glade.Widget] Gtk.OptionMenu album_optionmenu;
+
+		[Glade.Widget] Gtk.Dialog dialog;
+		[Glade.Widget] Gtk.Entry title_entry;
+		[Glade.Widget] Gtk.CheckButton public_check;
+		[Glade.Widget] Gtk.ComboBox category_combo;
+
+		[Glade.Widget] Gtk.Button add_button;
+
+		private string dialog_name = "smugmug_add_album_dialog";
+		private Glade.XML xml;
+		private SmugMugExport export;
+		private SmugMugApi smugmug;
+		private string title;
+		private ListStore category_store;
+
+		public SmugMugAddAlbum (SmugMugExport export, SmugMugApi smugmug)
+		{
+			xml = new Glade.XML (null, "SmugMugExport.glade", dialog_name, "f-spot");
+			xml.Autoconnect (this);
+
+			this.export = export;
+			this.smugmug = smugmug;
+
+			this.category_store = new ListStore (typeof(int), typeof(string));
+			CellRendererText display_cell = new CellRendererText();
+			category_combo.PackStart (display_cell, true);
+			category_combo.SetCellDataFunc (display_cell, new CellLayoutDataFunc (CategoryDataFunc));
+			this.category_combo.Model = category_store;
+			PopulateCategoryCombo ();
+
+			Dialog.Response += HandleAddResponse;
+
+			title_entry.Changed += HandleChanged;
+			HandleChanged (null, null);
+		}
+
+		private void HandleChanged (object sender, EventArgs args)
+		{
+			title = title_entry.Text;
+
+			if (title == String.Empty)
+				add_button.Sensitive = false;
+			else
+				add_button.Sensitive = true;
+		}
+
+		[GLib.ConnectBefore]
+		protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId == Gtk.ResponseType.Ok) {
+				smugmug.CreateAlbum (title, CurrentCategoryId, public_check.Active);
+				export.HandleAlbumAdded (title);
+			}
+			Dialog.Destroy ();
+		}
+
+		void CategoryDataFunc (CellLayout layout, CellRenderer renderer, TreeModel model, TreeIter iter)
+		{
+			string name = (string)model.GetValue (iter, 1);
+			(renderer as CellRendererText).Text = name;
+		}
+
+		protected void PopulateCategoryCombo ()
+		{
+			SmugMugNet.Category[] categories = smugmug.GetCategories ();
+
+			foreach (SmugMugNet.Category category in categories) {
+				category_store.AppendValues (category.CategoryID, category.Title);
+			}
+
+			category_combo.Active = 0;
+
+			category_combo.ShowAll ();
+		}
+
+		protected int CurrentCategoryId
+		{
+			get {
+				TreeIter current;
+				category_combo.GetActiveIter (out current);
+				return (int)category_combo.Model.GetValue (current, 0);
+			}
+		}
+
+		private Gtk.Dialog Dialog {
+			get {
+				if (dialog == null)
+					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+				return dialog;
+			}
+		}
+	}
+
+
+	public class SmugMugExport : FSpot.Extensions.IExporter {
+		public SmugMugExport ()
+		{
+		}
+		public void Run (IBrowsableCollection selection)
+		{
+			xml = new Glade.XML (null, "SmugMugExport.glade", dialog_name, "f-spot");
+			xml.Autoconnect (this);
+
+			this.items = selection.Items;
+			album_button.Sensitive = false;
+			FSpot.Widgets.IconView view = new FSpot.Widgets.IconView (selection);
+			view.DisplayDates = false;
+			view.DisplayTags = false;
+
+			Dialog.Modal = false;
+			Dialog.TransientFor = null;
+			Dialog.Close += HandleCloseEvent;
+
+			thumb_scrolledwindow.Add (view);
+			view.Show ();
+			Dialog.Show ();
+
+			SmugMugAccountManager manager = SmugMugAccountManager.GetInstance ();
+			manager.AccountListChanged += PopulateSmugMugOptionMenu;
+			PopulateSmugMugOptionMenu (manager, null);
+
+			if (edit_button != null)
+				edit_button.Clicked += HandleEditGallery;
+
+			rh = new Gtk.ResponseHandler (HandleResponse);
+			Dialog.Response += HandleResponse;
+			connect = true;
+			HandleSizeActive (null, null);
+			Connect ();
+
+			LoadPreference (SCALE_KEY);
+			LoadPreference (SIZE_KEY);
+			LoadPreference (BROWSER_KEY);
+		}
+
+		Gtk.ResponseHandler rh;
+
+		private bool scale;
+		private int size;
+		private bool browser;
+//		private bool meta;
+		private bool connect = false;
+
+		private long approx_size = 0;
+		private long sent_bytes = 0;
+
+		IBrowsableItem [] items;
+		int photo_index;
+		ThreadProgressDialog progress_dialog;
+
+		ArrayList accounts;
+		private SmugMugAccount account;
+		private Album album;
+
+		private string dialog_name = "smugmug_export_dialog";
+		private Glade.XML xml;
+
+		// Dialogs
+		private SmugMugAccountDialog gallery_add;
+		private SmugMugAddAlbum album_add;
+
+		// Widgets
+		[Glade.Widget] Gtk.Dialog dialog;
+		[Glade.Widget] Gtk.OptionMenu gallery_optionmenu;
+		[Glade.Widget] Gtk.OptionMenu album_optionmenu;
+
+		[Glade.Widget] Gtk.CheckButton browser_check;
+		[Glade.Widget] Gtk.CheckButton scale_check;
+
+		[Glade.Widget] Gtk.SpinButton size_spin;
+
+		[Glade.Widget] Gtk.Button album_button;
+		[Glade.Widget] Gtk.Button edit_button;
+
+		[Glade.Widget] Gtk.Button export_button;
+
+		[Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
+
+		System.Threading.Thread command_thread;
+
+		public const string EXPORT_SERVICE = "smugmug/";
+		public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
+		public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
+		public const string BROWSER_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
+
+		private void HandleResponse (object sender, Gtk.ResponseArgs args)
+		{
+			if (args.ResponseId != Gtk.ResponseType.Ok) {
+				Dialog.Destroy ();
+				return;
+			}
+
+			if (scale_check != null) {
+				scale = scale_check.Active;
+				size = size_spin.ValueAsInt;
+			} else
+				scale = false;
+
+			browser = browser_check.Active;
+//			meta = meta_check.Active;
+
+			if (account != null) {
+				//System.Console.WriteLine ("history = {0}", album_optionmenu.History);
+				album = (Album) account.SmugMug.GetAlbums() [Math.Max (0, album_optionmenu.History)];
+				photo_index = 0;
+
+				Dialog.Destroy ();
+
+				command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (this.Upload));
+				command_thread.Name = Mono.Unix.Catalog.GetString ("Uploading Pictures");
+
+				progress_dialog = new ThreadProgressDialog (command_thread, items.Length);
+				progress_dialog.Start ();
+
+				// Save these settings for next time
+				Preferences.Set (SCALE_KEY, scale);
+				Preferences.Set (SIZE_KEY, size);
+				Preferences.Set (BROWSER_KEY, browser);
+			}
+		}
+
+		public void HandleSizeActive (object sender, EventArgs args)
+		{
+			size_spin.Sensitive = scale_check.Active;
+		}
+
+		private void Upload ()
+		{
+			sent_bytes = 0;
+			approx_size = 0;
+
+			System.Uri album_uri = null;
+
+			Log.Debug ("Starting Upload to Smugmug, album " + album.Title + " - " + album.AlbumID);
+
+			FilterSet filters = new FilterSet ();
+			filters.Add (new JpegFilter ());
+
+			if (scale)
+				filters.Add (new ResizeFilter ((uint)size));
+
+			while (photo_index < items.Length) {
+				try {
+					IBrowsableItem item = items[photo_index];
+
+					FileInfo file_info;
+					Log.Debug ("uploading " + photo_index);
+
+					progress_dialog.Message = String.Format (Catalog.GetString ("Uploading picture \"{0}\" ({1} of {2})"),
+										 item.Name, photo_index+1, items.Length);
+					progress_dialog.ProgressText = string.Empty;
+					progress_dialog.Fraction = ((photo_index) / (double) items.Length);
+					photo_index++;
+
+					FilterRequest request = new FilterRequest (item.DefaultVersion.Uri);
+
+					filters.Convert (request);
+
+					file_info = new FileInfo (request.Current.LocalPath);
+
+					if (approx_size == 0) //first image
+						approx_size = file_info.Length * items.Length;
+					else
+						approx_size = sent_bytes * items.Length / (photo_index - 1);
+
+					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 ());
+
+					sent_bytes += file_info.Length;
+
+					if (album_uri == null)
+						album_uri = account.SmugMug.GetAlbumUrl (image_id);
+				} catch (System.Exception e) {
+					progress_dialog.Message = String.Format (Mono.Unix.Catalog.GetString ("Error Uploading To Gallery: {0}"),
+										 e.Message);
+					progress_dialog.ProgressText = Mono.Unix.Catalog.GetString ("Error");
+					Log.DebugException (e);
+
+					if (progress_dialog.PerformRetrySkip ()) {
+						photo_index--;
+						if (photo_index == 0)
+							approx_size = 0;
+					}
+				}
+			}
+
+			progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
+			progress_dialog.Fraction = 1.0;
+			progress_dialog.ProgressText = Mono.Unix.Catalog.GetString ("Upload Complete");
+			progress_dialog.ButtonLabel = Gtk.Stock.Ok;
+
+			if (browser && album_uri != null) {
+				GtkBeans.Global.ShowUri (Dialog.Screen, album_uri.ToString ());
+			}
+		}
+
+		private void PopulateSmugMugOptionMenu (SmugMugAccountManager manager, SmugMugAccount changed_account)
+		{
+			Gtk.Menu menu = new Gtk.Menu ();
+			this.account = changed_account;
+			int pos = -1;
+
+			accounts = manager.GetAccounts ();
+			if (accounts == null || accounts.Count == 0) {
+				Gtk.MenuItem item = new Gtk.MenuItem (Mono.Unix.Catalog.GetString ("(No Gallery)"));
+				menu.Append (item);
+				gallery_optionmenu.Sensitive = false;
+				edit_button.Sensitive = false;
+			} else {
+				int i = 0;
+				foreach (SmugMugAccount account in accounts) {
+					if (account == changed_account)
+						pos = i;
+
+					Gtk.MenuItem item = new Gtk.MenuItem (account.Username);
+					menu.Append (item);
+					i++;
+				}
+				gallery_optionmenu.Sensitive = true;
+				edit_button.Sensitive = true;
+			}
+
+			menu.ShowAll ();
+			gallery_optionmenu.Menu = menu;
+			gallery_optionmenu.SetHistory ((uint)pos);
+		}
+
+		private void Connect ()
+		{
+			Connect (null);
+		}
+
+		private void Connect (SmugMugAccount selected)
+		{
+			Connect (selected, null);
+		}
+
+		private void Connect (SmugMugAccount selected, string text)
+		{
+			try {
+				if (accounts.Count != 0 && connect) {
+					if (selected == null)
+						account = (SmugMugAccount) accounts [gallery_optionmenu.History];
+					else
+						account = selected;
+
+					if (!account.Connected)
+						account.Connect ();
+
+					PopulateAlbumOptionMenu (account.SmugMug);
+				}
+			} catch (System.Exception) {
+				Log.Warning ("Can not connect to SmugMug. Bad username? Password? Network connection?");
+				//System.Console.WriteLine ("{0}",ex);
+				if (selected != null)
+					account = selected;
+
+				PopulateAlbumOptionMenu (account.SmugMug);
+
+				album_button.Sensitive = false;
+
+				new SmugMugAccountDialog (this.Dialog, account);
+			}
+		}
+
+		private void HandleAccountSelected (object sender, System.EventArgs args)
+		{
+			Connect ();
+		}
+
+		public void HandleAlbumAdded (string title) {
+			SmugMugAccount account = (SmugMugAccount) accounts [gallery_optionmenu.History];
+			PopulateAlbumOptionMenu (account.SmugMug);
+
+			// make the newly created album selected
+			Album[] albums = account.SmugMug.GetAlbums();
+			for (int i=0; i < albums.Length; i++) {
+				if (((Album)albums[i]).Title == title) {
+					album_optionmenu.SetHistory((uint)i);
+				}
+			}
+		}
+
+		private void PopulateAlbumOptionMenu (SmugMugApi smugmug)
+		{
+			Album[] albums = null;
+			if (smugmug != null) {
+				try {
+					albums = smugmug.GetAlbums();
+				} catch (Exception) {
+					Log.Debug ("Can't get the albums");
+					smugmug = null;
+				}
+			}
+
+			Gtk.Menu menu = new Gtk.Menu ();
+
+			bool disconnected = smugmug == null || !account.Connected || albums == null;
+
+			if (disconnected || albums.Length == 0) {
+				string msg = disconnected ? Mono.Unix.Catalog.GetString ("(Not Connected)")
+					: Mono.Unix.Catalog.GetString ("(No Albums)");
+
+				Gtk.MenuItem item = new Gtk.MenuItem (msg);
+				menu.Append (item);
+
+				export_button.Sensitive = false;
+				album_optionmenu.Sensitive = false;
+				album_button.Sensitive = false;
+			} else {
+				foreach (Album album in albums) {
+					System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
+
+					label_builder.Append (album.Title);
+
+					Gtk.MenuItem item = new Gtk.MenuItem (label_builder.ToString ());
+					((Gtk.Label)item.Child).UseUnderline = false;
+					menu.Append (item);
+				}
+
+				export_button.Sensitive = items.Length > 0;
+				album_optionmenu.Sensitive = true;
+				album_button.Sensitive = true;
+			}
+
+			menu.ShowAll ();
+			album_optionmenu.Menu = menu;
+		}
+
+		public void HandleAddGallery (object sender, System.EventArgs args)
+		{
+			gallery_add = new SmugMugAccountDialog (this.Dialog);
+		}
+
+		public void HandleEditGallery (object sender, System.EventArgs args)
+		{
+			gallery_add = new SmugMugAccountDialog (this.Dialog, account);
+		}
+
+		public void HandleAddAlbum (object sender, System.EventArgs args)
+		{
+			if (account == null)
+				throw new Exception (Catalog.GetString ("No account selected"));
+
+			album_add = new SmugMugAddAlbum (this, account.SmugMug);
+		}
+
+		void LoadPreference (string key)
+		{
+			switch (key) {
+			case SCALE_KEY:
+				if (scale_check.Active != Preferences.Get<bool> (key)) {
+					scale_check.Active = Preferences.Get<bool> (key);
+				}
+				break;
+
+			case SIZE_KEY:
+				size_spin.Value = (double) Preferences.Get<int> (key);
+				break;
+
+			case BROWSER_KEY:
+				if (browser_check.Active != Preferences.Get<bool> (key))
+					browser_check.Active = Preferences.Get<bool> (key);
+				break;
+			}
+		}
+
+		protected void HandleCloseEvent (object sender, System.EventArgs args)
+		{
+			account.SmugMug.Logout ();
+		}
+
+		private Gtk.Dialog Dialog {
+			get {
+				if (dialog == null)
+					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+				return dialog;
+			}
+		}
+	}
+}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile.am b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile.am
new file mode 100644
index 0000000..1b0ddb5
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile.am
@@ -0,0 +1,12 @@
+ASSEMBLY = FSpot.Exporters.SmugMug
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_SMUGMUGEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Exporters.SmugMug/SmugMugExport.cs
+
+RESOURCES =  \
+	Resources/SmugMugExport.addin.xml \
+	Resources/SmugMugExport.glade
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile.in b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile.in
new file mode 100644
index 0000000..9cf5c52
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile.in
@@ -0,0 +1,808 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Exporters/FSpot.Exporters.SmugMug
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.SmugMug
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_SMUGMUGEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Exporters.SmugMug/SmugMugExport.cs
+RESOURCES = \
+	Resources/SmugMugExport.addin.xml \
+	Resources/SmugMugExport.glade
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.SmugMug/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/SmugMugExport.addin.xml b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/SmugMugExport.addin.xml
new file mode 100644
index 0000000..f464a0c
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/SmugMugExport.addin.xml
@@ -0,0 +1,18 @@
+<Addin namespace="FSpot"
+	version="0.8"
+	compatVersion="0.8"
+	name="SmugMug Export"
+	description="This extension allows you to export your photos to SmugMug."
+	author="F-Spot team"
+	url="http://f-spot.org"
+	defaultEnabled="true"
+	category="Export">
+
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+
+	<Extension path = "/FSpot/Menus/Exports">
+		<ExportMenuItem id="SmugMug" _label = "_SmugMug..." class = "FSpot.Exporters.SmugMug.SmugMugExport" />
+	</Extension>
+</Addin>
diff --git a/extensions/Exporters/SmugMugExport/SmugMugExport.glade b/src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/SmugMugExport.glade
similarity index 100%
rename from extensions/Exporters/SmugMugExport/SmugMugExport.glade
rename to src/Extensions/Exporters/FSpot.Exporters.SmugMug/Resources/SmugMugExport.glade
diff --git a/extensions/Exporters/TabbloExport/AssemblyInfo.cs b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/AssemblyInfo.cs
similarity index 100%
rename from extensions/Exporters/TabbloExport/AssemblyInfo.cs
rename to src/Extensions/Exporters/FSpot.Exporters.Tabblo/AssemblyInfo.cs
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
new file mode 100644
index 0000000..059114e
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/ApplicationCentricCertificatePolicy.cs
@@ -0,0 +1,167 @@
+//
+// FSpotTabbloExport.ApplicationCentricCertificatePolicy
+//
+// Authors:
+//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
+//
+// (C) Copyright 2009 Wojciech Dzierzanowski
+//
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.IO.IsolatedStorage;
+using System.Net;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Security.Cryptography.X509Certificates;
+
+using Hyena;
+
+namespace FSpot.Exporters.Tabblo {
+
+	class ApplicationCentricCertificatePolicy : ICertificatePolicy {
+
+		protected enum Decision {
+			DontTrust,
+			TrustOnce,
+			TrustAlways
+		};
+
+		private Dictionary<string, int> cert_hashes;
+
+		private static readonly IsolatedStorageFile isolated_store =
+				IsolatedStorageFile.GetUserStoreForAssembly ();
+
+		private const string StoreName = "cert_hashes";
+
+
+		public bool CheckValidationResult (ServicePoint service_point,
+		                                   X509Certificate certificate,
+		                                   WebRequest request,
+						   int problem)
+		{
+			Log.DebugFormat ("Checking validation result for {0}: "
+					+ "problem={1}",
+					request.RequestUri, problem);
+
+			if (0 == problem) {
+				return true;
+			}
+
+			// Only try to deal with the problem if it is a trust
+			// failure.
+			if (-2146762486 != problem) {
+				return false;
+			}
+
+			LoadCertificates ();
+
+			string hash = certificate.GetCertHashString ();
+			Log.Debug ("Certificate hash: " + hash);
+
+			int stored_problem = 0;
+			if (cert_hashes.TryGetValue (hash, out stored_problem)
+					&& problem == stored_problem) {
+				Log.Debug ("We already trust this site");
+				return true;
+			}
+
+			Decision decision = GetDecision (certificate, request);
+			Log.Debug ("Decision: " + decision);
+
+			switch (decision) {
+			case Decision.DontTrust:
+				return false;
+			case Decision.TrustOnce:
+				return true;
+			case Decision.TrustAlways:
+				SaveCertificate (hash, problem);
+				return true;
+			default:
+				Debug.Assert (false, "Unknown decision");
+				return false;
+			}
+		}
+
+
+		protected virtual Decision GetDecision (
+				X509Certificate certificate,
+				WebRequest request)
+		{
+			Decision decision = Decision.DontTrust;
+			Log.Debug ("Making the default decision: " + decision);
+			return decision;
+		}
+
+
+		private void LoadCertificates ()
+		{
+			using (IsolatedStorageFileStream isol_stream =
+					new IsolatedStorageFileStream (
+							StoreName,
+							FileMode.OpenOrCreate,
+							FileAccess.Read,
+			                                isolated_store)) {
+				try {
+					BinaryFormatter formatter =
+							new BinaryFormatter ();
+					cert_hashes = (Dictionary<string, int>)
+							formatter.Deserialize (
+								isol_stream);
+				} catch (SerializationException e) {
+					// FIXME: handle
+					Log.Exception (e);
+				}
+			}
+
+			if (null == cert_hashes) {
+				cert_hashes = new Dictionary<string,int> ();
+			}
+		}
+
+
+		private void SaveCertificate (string hash, int problem)
+		{
+			cert_hashes.Add (hash, problem);
+
+			using (IsolatedStorageFileStream isolated_stream =
+					new IsolatedStorageFileStream (
+							StoreName,
+							FileMode.OpenOrCreate,
+							FileAccess.Write,
+			                                isolated_store)) {
+				try {
+					BinaryFormatter formatter =
+							new BinaryFormatter ();
+					formatter.Serialize (isolated_stream,
+							cert_hashes);
+				} catch (SerializationException e) {
+					// FIXME: handle
+					Log.Exception (e);
+				}
+			}
+		}
+	}
+}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/BlindTrustCertificatePolicy.cs b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/BlindTrustCertificatePolicy.cs
new file mode 100644
index 0000000..90b700d
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/BlindTrustCertificatePolicy.cs
@@ -0,0 +1,46 @@
+//
+// FSpotTabbloExport.BlindTrustCertificatePolicy
+//
+// Authors:
+//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
+//
+// (C) Copyright 2009 Wojciech Dzierzanowski
+//
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Net;
+using System.Security.Cryptography.X509Certificates;
+
+using Hyena;
+
+namespace FSpot.Exporters.Tabblo {
+	class BlindTrustCertificatePolicy : ICertificatePolicy {
+		public bool CheckValidationResult (ServicePoint service_point,
+		                                   X509Certificate certificate,
+		                                   WebRequest request,
+						   int problem)
+		{
+			Log.Warning ("Blindly trusting " + request.RequestUri);
+			return true;
+		}
+	}
+}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/FSpotTraceListener.cs b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/FSpotTraceListener.cs
new file mode 100644
index 0000000..5c8caf9
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/FSpotTraceListener.cs
@@ -0,0 +1,46 @@
+//
+// FSpotTabbloExport.FSpotTraceListener
+//
+// Authors:
+//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
+//
+// (C) Copyright 2009 Wojciech Dzierzanowski
+//
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using Hyena;
+
+namespace FSpot.Exporters.Tabblo {
+
+	class FSpotTraceListener : System.Diagnostics.TraceListener {
+
+		public override void Write (string message)
+		{
+			Log.Debug ("Mono.Tabblo", message);
+		}
+
+		public override void WriteLine (string message)
+		{
+			Write (message);
+		}
+	}
+}
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
new file mode 100644
index 0000000..8b0b1f6
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/FSpotUploadProgress.cs
@@ -0,0 +1,66 @@
+//
+// FSpotTabbloExport.FSpotUploadProgress
+//
+// Authors:
+//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
+//
+// (C) Copyright 2008 Wojciech Dzierzanowski
+//
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using Mono.Tabblo;
+using Mono.Unix;
+using System;
+using FSpot.UI.Dialog;
+using FSpot.Utils;
+
+namespace FSpot.Exporters.Tabblo {
+
+	class FSpotUploadProgress : TotalUploadProgress	{
+
+		private ThreadProgressDialog progress_dialog;
+
+
+		internal FSpotUploadProgress (
+				Picture [] pictures,
+				ThreadProgressDialog progress_dialog)
+			: base (pictures)
+		{
+			this.progress_dialog = progress_dialog;
+		}
+
+
+		protected override void ShowProgress (string title,
+		                                      long bytes_sent)
+		{
+			progress_dialog.Message = title;
+			progress_dialog.ProgressText = String.Format (
+					Catalog.GetString (
+							"{0} of approx. {1}"),
+					GLib.Format.SizeForDisplay (bytes_sent),
+					GLib.Format.SizeForDisplay (
+							(long) TotalFileSize));
+			progress_dialog.Fraction =
+					(double) bytes_sent / TotalFileSize;
+		}
+	}
+}
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
new file mode 100644
index 0000000..a70fda3
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExport.cs
@@ -0,0 +1,412 @@
+//
+// FSpotTabbloExport.TabbloExport
+//
+// Authors:
+//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
+//
+// (C) Copyright 2009 Wojciech Dzierzanowski
+//
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using 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;
+
+namespace FSpot.Exporters.Tabblo {
+
+	public class TabbloExport : FSpot.Extensions.IExporter {
+
+		private readonly TabbloExportModel model;
+
+		private TabbloExportView main_dialog;
+		private ThreadProgressDialog progress_dialog;
+
+		private readonly Uploader uploader;
+		private TraceListener debug_listener;
+		private TotalUploadProgress upload_progress;
+
+
+		//
+		// Initialization
+		//
+
+		public TabbloExport ()
+		{
+			model = new TabbloExportModel ();
+			uploader = new Uploader (model);
+		}
+
+
+		public void Run (IBrowsableCollection photos)
+		{
+			if (null == photos || null == photos.Items) {
+				throw new ArgumentNullException ("photos");
+			}
+
+			main_dialog = new TabbloExportView (photos);
+
+			InitBindings ();
+
+			model.Deserialize ();
+			model.PhotoCollection = photos;
+
+			// Model deserialization triggers the various event
+			// handlers, which can cause the default widget to lose
+			// focus (it can be invalid, and hence disabled, for a
+			// moment).
+			main_dialog.ResetFocus ();
+
+			main_dialog.Show ();
+		}
+
+
+		private void InitBindings ()
+		{
+			Debug.Assert (null != model);
+			Debug.Assert (null != main_dialog);
+
+			main_dialog.Response += HandleResponse;
+
+			// Account data
+			model.UsernameChanged += HandleUsernameChanged;
+			main_dialog.username_entry.Changed +=
+					HandleUsernameChanged;
+
+			model.PasswordChanged += HandlePasswordChanged;
+			main_dialog.password_entry.Changed +=
+					HandlePasswordChanged;
+
+			// Tags
+			model.AttachTagsChanged += HandleAttachTagsToggled;
+			main_dialog.attach_tags_button.Toggled +=
+					HandleAttachTagsToggled;
+
+			model.AttachedTagsChanged += HandleAttachedTagsChanged;
+
+			main_dialog.attached_tags_select_button.Clicked +=
+					HandleSelectAttachedTagsClicked;
+
+			model.RemoveTagsChanged += HandleRemoveTagsToggled;
+			main_dialog.remove_tags_button.Toggled +=
+					HandleRemoveTagsToggled;
+
+			model.RemovedTagsChanged += HandleRemovedTagsChanged;
+
+			main_dialog.removed_tags_select_button.Clicked +=
+					HandleSelectRemovedTagsClicked;
+		}
+
+
+		//
+		// Event handlers
+		//
+
+		private void HandleUsernameChanged (object sender,
+		                                    EventArgs args)
+		{
+			if (model == sender) {
+				main_dialog.username_entry.Text = model.Username;
+				OnAccountDataChanged ();
+			} else {
+				model.Username = main_dialog.username_entry.Text;
+			}
+		}
+
+		private void HandlePasswordChanged (object sender,
+		                                    EventArgs args)
+		{
+			if (model == sender) {
+				main_dialog.password_entry.Text = model.Password;
+				OnAccountDataChanged ();
+			} else {
+				model.Password = main_dialog.password_entry.Text;
+			}
+		}
+
+		private void OnAccountDataChanged ()
+		{
+			main_dialog.Validated =
+					model.Username.Length > 0
+					&& model.Password.Length > 0;
+		}
+
+
+		private void HandleAttachTagsToggled (object sender,
+		                                      EventArgs args)
+		{
+			if (model == sender) {
+				if (model.AttachTags && 0 == model
+							.AttachedTags.Length) {
+					model.AttachedTags = SelectTags ();
+					model.AttachTags =
+						0 < model.AttachedTags.Length;
+				}
+
+				main_dialog.attach_tags_button.Active =
+						model.AttachTags;
+				main_dialog.attached_tags_select_button
+						.Sensitive = model.AttachTags;
+
+			} else {
+				model.AttachTags =
+					main_dialog.attach_tags_button.Active;
+			}
+		}
+
+		private void HandleRemoveTagsToggled (object sender,
+		                                      EventArgs args)
+		{
+			if (model == sender) {
+				if (model.RemoveTags && 0 == model
+							.RemovedTags.Length) {
+					model.RemovedTags = SelectTags ();
+					model.RemoveTags =
+						0 < model.RemovedTags.Length;
+				}
+
+				main_dialog.remove_tags_button.Active =
+						model.RemoveTags;
+				main_dialog.removed_tags_select_button
+						.Sensitive = model.RemoveTags;
+			} else {
+				model.RemoveTags =
+					main_dialog.remove_tags_button.Active;
+			}
+		}
+
+
+		private void HandleSelectAttachedTagsClicked (object sender,
+		                                              EventArgs args)
+		{
+			Debug.Assert (model != sender);
+
+			FSpot.Core.Tag [] tags = SelectTags ();
+			if (null != tags) {
+				model.AttachedTags = tags;
+			}
+		}
+
+		private void HandleSelectRemovedTagsClicked (object sender,
+		                                             EventArgs args)
+		{
+			Debug.Assert (model != sender);
+
+			FSpot.Core.Tag [] tags = SelectTags ();
+			if (null != tags) {
+				model.RemovedTags = tags;
+			}
+		}
+
+
+		private void HandleAttachedTagsChanged (object sender,
+		                                        EventArgs args)
+		{
+			Debug.Assert (model == sender);
+
+			main_dialog.attached_tags_view.Tags =
+					model.AttachedTags;
+			main_dialog.attach_tags_button.Active =
+					model.AttachTags
+					&& model.AttachedTags.Length > 0;
+		}
+
+		private void HandleRemovedTagsChanged (object sender,
+		                                       EventArgs args)
+		{
+			Debug.Assert (model == sender);
+
+			main_dialog.removed_tags_view.Tags =
+					model.RemovedTags;
+			main_dialog.remove_tags_button.Active =
+					model.RemoveTags
+					&& model.RemovedTags.Length > 0;
+		}
+
+
+		private FSpot.Core.Tag [] SelectTags ()
+		{
+			TagStore tag_store = FSpot.App.Instance.Database.Tags;
+			TagSelectionDialog tagDialog =
+					new TagSelectionDialog (tag_store);
+			FSpot.Core.Tag [] tags = tagDialog.Run ();
+
+			tagDialog.Hide ();
+
+			return tags;
+		}
+
+
+		private void HandleResponse (object sender,
+		                             Gtk.ResponseArgs args)
+		{
+			main_dialog.Destroy ();
+
+			if (Gtk.ResponseType.Ok != args.ResponseId) {
+				Log.Information ("Tabblo export was canceled.");
+				return;
+			}
+			
+			model.Serialize ();
+			
+			Log.Information ("Starting Tabblo export");
+			
+			Thread upload_thread =
+					new Thread (new ThreadStart (Upload));
+			progress_dialog = new ThreadProgressDialog (
+					upload_thread, model.Photos.Length);
+			progress_dialog.Start ();
+		}
+		
+		
+		//
+		// Upload logic
+		// 
+
+		private void Upload ()
+		{
+			Debug.Assert (null != uploader);
+			
+			Picture [] pictures = GetPicturesForUpload (); 
+			Debug.Assert (pictures.Length == model.Photos.Length);
+
+			OnUploadStarted (pictures);
+				
+			try {
+				for (int i = 0; i < pictures.Length; ++i) {
+					uploader.Upload (pictures [i]);
+					OnPhotoUploaded (model.Photos [i]);
+				}
+				
+				progress_dialog.Message = Catalog.GetString (
+						"Done sending photos");
+				progress_dialog.ProgressText = Catalog
+						.GetString ("Upload complete");
+				progress_dialog.Fraction = 1;
+				progress_dialog.ButtonLabel = Gtk.Stock.Ok;
+				
+			} catch (TabbloException e) {
+				progress_dialog.Message = Catalog.GetString (
+						"Error uploading to Tabblo: ")
+						+ e.Message;
+				progress_dialog.ProgressText =
+						Catalog.GetString ("Error");
+				// FIXME:  Retry logic? 
+//				  progressDialog.PerformRetrySkip ();
+				Log.Exception (e);
+			} finally {
+				OnUploadFinished ();
+			}
+		}
+		
+
+		private void OnUploadStarted (Picture [] pictures)
+		{
+			Debug.Assert (null != pictures);
+			Debug.Assert (null != uploader);
+			Debug.Assert (null != progress_dialog);
+
+			// Initialize the debug output listener.
+			// `Mono.Tabblo' uses the standard
+			// `System.Diagnostics.Debug' facilities for debug
+			// output only.
+			debug_listener = new FSpotTraceListener ();
+			Debug.Listeners.Add (debug_listener);
+
+			// Initialize the progress handler.
+			upload_progress = new FSpotUploadProgress (
+					pictures, progress_dialog);
+			uploader.ProgressChanged +=
+					upload_progress.HandleProgress;
+			
+			// Set up the certificate policy.
+			ServicePointManager.CertificatePolicy =
+					new UserDecisionCertificatePolicy ();
+		}
+
+		private void OnUploadFinished ()
+		{
+			Debug.Assert (null != uploader);
+			Debug.Assert (null != debug_listener);
+			Debug.Assert (null != upload_progress);
+
+			uploader.ProgressChanged -=
+					upload_progress.HandleProgress;
+
+			Debug.Listeners.Remove (debug_listener);
+		}
+
+		
+		private void OnPhotoUploaded (IBrowsableItem item)
+		{
+			Debug.Assert (null != item);
+
+			if (!model.AttachTags && !model.RemoveTags) {
+				return;
+			}
+
+			PhotoStore photo_store = FSpot.App.Instance.Database.Photos;
+			FSpot.Photo photo = photo_store.GetByUri (
+					item.DefaultVersion.Uri);
+			Debug.Assert (null != photo);
+			if (null == photo) {
+				return;
+			}
+
+			if (model.AttachTags) {
+				photo.AddTag (model.AttachedTags);
+			}
+			if (model.RemoveTags) {
+				photo.RemoveTag (model.RemovedTags);
+			}
+			photo_store.Commit (photo);
+		}
+
+		
+		private Picture [] GetPicturesForUpload ()
+		{
+			Picture [] pictures = new Picture [model.Photos.Length];
+			IBrowsableItem [] items = model.Photos;
+
+			for (int i = 0; i < pictures.Length; ++i) {
+				string mime_type = GLib.FileFactory.NewForUri (items [i].DefaultVersion.Uri).
+							QueryInfo ("standard::content-type", GLib.FileQueryInfoFlags.None, null).ContentType;
+
+				pictures [i] = new Picture (items [i].Name,
+						new Uri (items [i].DefaultVersion.Uri.AbsoluteUri),
+						mime_type,
+						model.Privacy);
+			}
+
+			return pictures;
+		}
+	}
+}
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
new file mode 100644
index 0000000..811a64c
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExportModel.cs
@@ -0,0 +1,392 @@
+//
+// FSpotTabbloExport.TabbloExportModel
+//
+// Authors:
+//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
+//
+// (C) Copyright 2009 Wojciech Dzierzanowski
+//
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using Hyena;
+
+using Mono.Tabblo;
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+
+using FSpot.Core;
+
+namespace FSpot.Exporters.Tabblo {
+
+	class TabbloExportModel : Mono.Tabblo.IPreferences {
+
+		private IBrowsableCollection photo_collection;
+
+		private string username;
+		private string password;
+
+		private bool attach_tags = false;
+		private FSpot.Core.Tag [] attached_tags;
+		private bool remove_tags = false;
+		private FSpot.Core.Tag [] removed_tags;
+
+		private static readonly FSpot.Core.Tag [] no_tags = new FSpot.Core.Tag [0];
+
+
+		// `FSpot.Preferences' constants.
+		private const string PrefPrefix =
+				FSpot.Preferences.APP_FSPOT_EXPORT + "tabblo/";
+		private const string PrefAttachTags =
+				PrefPrefix + "attach_tags";
+		private const string PrefAttachedTags =
+				PrefPrefix + "attached_tags";
+		private const string PrefRemoveTags =
+				PrefPrefix + "remove_tags";
+		private const string PrefRemovedTags =
+				PrefPrefix + "removed_tags";
+
+		// Keyring constants.
+		private const string KeyringItemName = "Tabblo Account";
+		private const string KeyringItemApp = "FSpotTabbloExport";
+		private const string KeyringItemNameAttr = "name";
+		private const string KeyringItemUsernameAttr = "username";
+		private const string KeyringItemAppAttr = "application";
+
+
+		// The photos.
+
+		internal IBrowsableCollection PhotoCollection {
+			get {
+				return photo_collection;
+			}
+			set {
+				photo_collection = value;
+			}
+		}
+
+		internal IBrowsableItem [] Photos {
+			get {
+				return photo_collection.Items;
+			}
+		}
+
+
+		// `Mono.Tabblo.IPreferences' implementation.
+
+		internal event EventHandler UsernameChanged;
+		public string Username {
+			get {
+				return null != username
+						? username : string.Empty;
+			}
+			internal set {
+				string old_value = username;
+				username = value;
+				OnMaybePropertyChanged (old_value, username,
+						UsernameChanged);
+			}
+		}
+
+		internal event EventHandler PasswordChanged;
+		public string Password {
+			get {
+				return null != password
+						? password : string.Empty;
+			}
+			internal set {
+				string old_value = password;
+				password = value;
+				OnMaybePropertyChanged (old_value, password,
+						PasswordChanged);
+			}
+		}
+
+		// FIXME:  Hopefully, we'll have a use for this one day.  Then
+		//         we'll have to actually implement the property.
+		public string Privacy {
+			get {
+				return "circle";
+			}
+		}
+
+
+		// The tags.
+
+		internal event EventHandler AttachTagsChanged;
+		internal bool AttachTags {
+			get {
+				return attach_tags;
+			}
+			set {
+				bool old_value = attach_tags;
+				attach_tags = value;
+				OnMaybePropertyChanged (old_value, attach_tags,
+						AttachTagsChanged);
+			}
+		}
+
+		internal event EventHandler AttachedTagsChanged;
+		internal FSpot.Core.Tag [] AttachedTags {
+			get {
+				return null != attached_tags
+						? attached_tags	: no_tags;
+			}
+			set {
+				FSpot.Core.Tag [] old_value = attached_tags;
+				attached_tags = value;
+				OnMaybePropertyChanged (old_value, attached_tags,
+						AttachedTagsChanged);
+			}
+		}
+
+		internal event EventHandler RemoveTagsChanged;
+		internal bool RemoveTags {
+			get {
+				return remove_tags;
+			}
+			set {
+				bool old_value = remove_tags;
+				remove_tags = value;
+				OnMaybePropertyChanged (old_value, remove_tags,
+						RemoveTagsChanged);
+			}
+		}
+
+		internal event EventHandler RemovedTagsChanged;
+		internal FSpot.Core.Tag [] RemovedTags {
+			get {
+				return null != removed_tags
+						? removed_tags : no_tags;
+			}
+			set {
+				FSpot.Core.Tag [] old_value = removed_tags;
+				removed_tags = value;
+				OnMaybePropertyChanged (old_value, removed_tags,
+						RemovedTagsChanged);
+			}
+		}
+
+
+		private void OnMaybePropertyChanged (object old_value,
+				object new_value, EventHandler handler)
+		{
+			if (!object.Equals (old_value, new_value)
+					&& null != handler) {
+				handler (this, EventArgs.Empty);
+			}
+
+		}
+
+
+
+		internal void Serialize ()
+		{
+			WriteAccountData ();
+			WriteTagPreferences ();
+		}
+
+		internal void Deserialize ()
+		{
+			ReadTagPreferences ();
+			ReadAccountData ();
+		}
+
+
+		private void WriteAccountData ()
+		{
+			try {
+				string keyring = Gnome.Keyring
+						.Ring.GetDefaultKeyring ();
+				
+				Hashtable attrs = new Hashtable ();
+				attrs [KeyringItemNameAttr] = KeyringItemName;
+				attrs [KeyringItemAppAttr] = KeyringItemApp;
+
+				Gnome.Keyring.ItemType type = Gnome.Keyring
+						.ItemType.GenericSecret;
+
+				try {
+					Gnome.Keyring.ItemData [] items = Gnome
+							.Keyring.Ring.Find (
+									type,
+									attrs);
+							
+					foreach (Gnome.Keyring.ItemData item
+							in items) {
+						Gnome.Keyring.Ring.DeleteItem (
+								keyring,
+								item.ItemID);
+					}
+				} catch (Gnome.Keyring.KeyringException e) {
+					Log.Exception ("Error deleting old "
+							+ "account data", e);
+				}
+				
+				attrs [KeyringItemUsernameAttr] = Username;
+
+				Gnome.Keyring.Ring.CreateItem (keyring, type,
+						KeyringItemName, attrs,
+						Password, true);
+				
+			} catch (Gnome.Keyring.KeyringException e) {
+				Log.Exception ("Error writing account data", e);
+			}
+		}
+
+		private void ReadAccountData ()
+		{
+			string new_username = string.Empty;
+			string new_password = string.Empty;
+
+			Hashtable attrs = new Hashtable ();
+			attrs [KeyringItemNameAttr] = KeyringItemName;
+			attrs [KeyringItemAppAttr] = KeyringItemApp;
+			
+			try {
+				Gnome.Keyring.ItemType type = Gnome.Keyring
+						.ItemType.GenericSecret;
+				Gnome.Keyring.ItemData [] items =
+						Gnome.Keyring.Ring.Find (
+								type, attrs);
+				if (1 < items.Length) {
+					Log.WarningFormat ("More than one {0} "
+							+ " found in keyring",
+							KeyringItemName);
+				}
+			
+				if (1 <= items.Length) {
+					Log.DebugFormat ("{0} data found in "
+							+ "keyring",
+							KeyringItemName);
+					attrs =	items [0].Attributes;
+					new_username = (string) attrs [
+						KeyringItemUsernameAttr];
+					new_password = items [0].Secret;
+				}
+				
+			} catch (Gnome.Keyring.KeyringException e) {
+				Log.Exception ("Error reading account data", e);
+			}
+
+			Username = new_username;
+			Password = new_password;
+		}
+
+
+		private void WriteTagPreferences ()
+		{
+			Debug.Assert (!AttachTags
+					|| (null != AttachedTags
+						&& AttachedTags.Length > 0));
+			FSpot.Preferences.Set (PrefAttachedTags,
+					ToIds (AttachedTags));
+			FSpot.Preferences.Set (PrefAttachTags, AttachTags);
+
+			Debug.Assert (!RemoveTags
+					|| (null != RemovedTags
+						&& RemovedTags.Length > 0));
+			FSpot.Preferences.Set (PrefRemovedTags,
+					ToIds (RemovedTags));
+			FSpot.Preferences.Set (PrefRemoveTags, RemoveTags);
+		}
+
+		private void ReadTagPreferences ()
+		{
+			int [] attached_tags_pref = null;
+			if (FSpot.Preferences.TryGet (PrefAttachedTags,
+						out attached_tags_pref)) {
+				AttachedTags = ToTags (attached_tags_pref);
+			}
+			// FIXME:  How do you `java.util.Arrays.toString(int[])'
+			//         in C#?
+			Log.Debug ("Read from prefs: attached_tags = "
+					+ AttachedTags);
+
+			bool attach_tags_pref = false;
+			if (FSpot.Preferences.TryGet (PrefAttachTags,
+						out attach_tags_pref)) {
+				AttachTags = attach_tags_pref
+						&& AttachedTags.Length > 0;
+			}
+			Log.Debug ("Read from prefs: attach_tags_pref = "
+					+ attach_tags_pref);
+
+			int [] removed_tags_pref = null;
+			if (FSpot.Preferences.TryGet (PrefRemovedTags,
+						out removed_tags_pref)) {
+				RemovedTags = ToTags (removed_tags_pref);
+			}
+			// FIXME:  How do you `java.util.Arrays.toString(int[])'
+			//         in C#?
+			Log.Debug ("Read from prefs: removed_tags_pref = "
+					+ removed_tags_pref);
+
+			bool remove_tags_pref = false;
+			if (FSpot.Preferences.TryGet (PrefRemoveTags,
+						out remove_tags_pref)) {
+				RemoveTags = remove_tags_pref
+						&& RemovedTags.Length > 0;
+			}
+			Log.Debug ("Read from prefs: remove_tags_pref = "
+					+ remove_tags_pref);
+		}
+		
+		
+		private static FSpot.Core.Tag [] ToTags (int [] ids)
+		{
+			if (null == ids) {
+				return null;
+			}
+
+			List <FSpot.Core.Tag> tags =
+					new List <FSpot.Core.Tag> (ids.Length);
+			foreach (int id in ids) {
+				FSpot.Core.Tag tag = FSpot.App.Instance.Database.Tags
+						.GetTagById (id);
+				if (null != tag) {
+					tags.Add (tag);
+				} else {
+					Log.Warning ("No such tag ID in DB: "
+							+ id);
+				}
+			}
+			return tags.ToArray ();
+		}
+
+		private static int [] ToIds (FSpot.Core.Tag [] tags)
+		{
+			if (null == tags) {
+				return null;
+			}
+
+			int [] ids = new int [tags.Length];
+			for (int i = 0; i < ids.Length; ++i) {
+				ids [i] = (int) tags [i].Id;
+			}
+			return ids;
+		}
+
+	}
+}
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
new file mode 100644
index 0000000..341cacd
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/TabbloExportView.cs
@@ -0,0 +1,114 @@
+//
+// FSpotTabbloExport.TabbloExportView
+//
+// Authors:
+//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
+//
+// (C) Copyright 2009 Wojciech Dzierzanowski
+//
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Diagnostics;
+using System.Reflection;
+
+using FSpot.Core;
+
+namespace FSpot.Exporters.Tabblo {
+
+
+	class TabbloExportView : FSpot.UI.Dialog.BuilderDialog {
+
+		private const string DialogName = "tabblo_export_dialog";
+
+		[GtkBeans.Builder.Object]
+		private Gtk.ScrolledWindow thumb_scrolled_window;
+
+		[GtkBeans.Builder.Object]
+		internal Gtk.Entry username_entry;
+
+		[GtkBeans.Builder.Object]
+		internal Gtk.Entry password_entry;
+
+		[GtkBeans.Builder.Object]
+		internal Gtk.CheckButton attach_tags_button;
+
+		[GtkBeans.Builder.Object]
+		private Gtk.Alignment attached_tags_alignment;
+
+		internal FSpot.Widgets.TagView attached_tags_view; 
+
+		[GtkBeans.Builder.Object]
+		internal Gtk.Button attached_tags_select_button;
+
+		[GtkBeans.Builder.Object]
+		internal Gtk.CheckButton remove_tags_button;
+
+		[GtkBeans.Builder.Object]
+		private Gtk.Alignment removed_tags_alignment;
+
+		internal FSpot.Widgets.TagView removed_tags_view; 
+
+		[GtkBeans.Builder.Object]
+		internal Gtk.Button removed_tags_select_button;
+
+		[GtkBeans.Builder.Object]
+		private Gtk.Button export_button;
+
+
+		internal TabbloExportView (IBrowsableCollection photos)
+			: base (Assembly.GetExecutingAssembly (),
+					"TabbloExport.ui", DialogName)
+		{
+			// Thumbnails
+			FSpot.Widgets.IconView icon_view =
+					new FSpot.Widgets.IconView (photos);
+			icon_view.DisplayDates = false;
+			icon_view.DisplayTags = false;
+
+			thumb_scrolled_window.Add (icon_view);
+			icon_view.Show ();
+
+			// Tags
+			attached_tags_view = new FSpot.Widgets.TagView ();
+			attached_tags_alignment.Add (attached_tags_view);
+			attached_tags_view.Show ();
+
+			removed_tags_view = new FSpot.Widgets.TagView ();
+			removed_tags_alignment.Add (removed_tags_view);
+			removed_tags_view.Show ();
+		}
+
+
+		internal void ResetFocus ()
+		{
+			export_button.HasFocus = true;
+		}
+
+
+		internal bool Validated {
+			set {
+				export_button.Sensitive = value;
+			}
+		}
+	}
+}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/UserDecisionCertificatePolicy.cs b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/UserDecisionCertificatePolicy.cs
new file mode 100644
index 0000000..ede6243
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/FSpot.Exporters.Tabblo/UserDecisionCertificatePolicy.cs
@@ -0,0 +1,110 @@
+//
+// FSpotTabbloExport.UserDecisionCertificatePolicy
+//
+// Authors:
+//	Wojciech Dzierzanowski (wojciech.dzierzanowski at gmail.com)
+//
+// (C) Copyright 2008 Wojciech Dzierzanowski
+//
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Diagnostics;
+using System.Net;
+using System.Reflection;
+using System.Security.Cryptography.X509Certificates;
+using System.Threading;
+
+using Hyena;
+
+namespace FSpot.Exporters.Tabblo {
+
+	class UserDecisionCertificatePolicy
+			: ApplicationCentricCertificatePolicy {
+
+		private const string DialogName = "trust_error_dialog";
+		[GtkBeans.Builder.Object] Gtk.Dialog dialog;
+		[GtkBeans.Builder.Object] Gtk.Label url_label;
+		[GtkBeans.Builder.Object] Gtk.RadioButton abort_radiobutton;
+		[GtkBeans.Builder.Object] Gtk.RadioButton once_radiobutton;
+		[GtkBeans.Builder.Object] Gtk.RadioButton always_radiobutton;
+
+		private WebRequest request;
+		private Decision decision;
+
+		private Object decision_lock = new Object ();
+		private ManualResetEvent decision_event;
+
+
+		protected override Decision GetDecision (
+				X509Certificate certificate,
+				WebRequest request)
+		{
+			this.request = request;
+
+			lock (decision_lock) {
+				GLib.Idle.Add (this.DoGetDecision);
+				decision_event = new ManualResetEvent (false);
+				decision_event.WaitOne ();
+			}
+
+			return decision;
+		}
+
+		private bool DoGetDecision ()
+		{
+			GtkBeans.Builder builder = new GtkBeans.Builder (
+					Assembly.GetExecutingAssembly (),
+					"TrustError.ui", null);
+			builder.Autoconnect (this);
+			dialog = (Gtk.Dialog) builder.GetObject (DialogName);
+
+			url_label.Markup = String.Format (
+					url_label.Text, String.Format (
+							"<b>{0}</b>",
+							request.RequestUri));
+
+			Gtk.ResponseType response =
+					(Gtk.ResponseType) dialog.Run ();
+			Log.Debug ("Decision dialog response: " + response);
+
+			dialog.Destroy ();
+
+			decision = Decision.DontTrust;
+			if (0 == response) {
+				if (abort_radiobutton.Active) {
+					decision = Decision.DontTrust;
+				} else if (once_radiobutton.Active) {
+					decision = Decision.TrustOnce;
+				} else if (always_radiobutton.Active) {
+					decision = Decision.TrustAlways;
+				} else {
+					Debug.Assert (false,
+							"Unhandled decision");
+				}
+			}
+
+			decision_event.Set ();
+			return false;
+		}
+	}
+}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile.am b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile.am
new file mode 100644
index 0000000..5616a66
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile.am
@@ -0,0 +1,23 @@
+ASSEMBLY = FSpot.Exporters.Tabblo
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_TABBLOEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	FSpot.Exporters.Tabblo/ApplicationCentricCertificatePolicy.cs \
+	FSpot.Exporters.Tabblo/BlindTrustCertificatePolicy.cs \
+	FSpot.Exporters.Tabblo/FSpotTraceListener.cs \
+	FSpot.Exporters.Tabblo/FSpotUploadProgress.cs \
+	FSpot.Exporters.Tabblo/TabbloExport.cs \
+	FSpot.Exporters.Tabblo/TabbloExportModel.cs \
+	FSpot.Exporters.Tabblo/TabbloExportView.cs \
+	FSpot.Exporters.Tabblo/UserDecisionCertificatePolicy.cs
+
+RESOURCES =  \
+	Resources/TabbloExport.addin.xml \
+	Resources/ui/TabbloExport.ui \
+	Resources/ui/TrustError.ui
+
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile.in b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile.in
new file mode 100644
index 0000000..c01b617
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile.in
@@ -0,0 +1,819 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Exporters/FSpot.Exporters.Tabblo
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.Tabblo
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_TABBLOEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	FSpot.Exporters.Tabblo/ApplicationCentricCertificatePolicy.cs \
+	FSpot.Exporters.Tabblo/BlindTrustCertificatePolicy.cs \
+	FSpot.Exporters.Tabblo/FSpotTraceListener.cs \
+	FSpot.Exporters.Tabblo/FSpotUploadProgress.cs \
+	FSpot.Exporters.Tabblo/TabbloExport.cs \
+	FSpot.Exporters.Tabblo/TabbloExportModel.cs \
+	FSpot.Exporters.Tabblo/TabbloExportView.cs \
+	FSpot.Exporters.Tabblo/UserDecisionCertificatePolicy.cs
+
+RESOURCES = \
+	Resources/TabbloExport.addin.xml \
+	Resources/ui/TabbloExport.ui \
+	Resources/ui/TrustError.ui
+
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Tabblo/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/TabbloExport.addin.xml b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/TabbloExport.addin.xml
new file mode 100644
index 0000000..91746a3
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/TabbloExport.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	version="0.8"
+	compatVersion="0.8"
+	name="Tabblo Export"
+	description="This extension allows you to export your photos to Tabblo."
+ 	author="Wojciech Dzierżanowski"
+	defaultEnabled="false"
+	category="Export">
+
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+
+	<Extension path = "/FSpot/Menus/Exports">
+		<ExportMenuItem id="Tabblo" _label = "_Tabblo..." class = "FSpot.Exporters.Tabblo.TabbloExport" />
+	</Extension>
+</Addin>
diff --git a/extensions/Exporters/TabbloExport/ui/TabbloExport.ui b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui
similarity index 100%
rename from extensions/Exporters/TabbloExport/ui/TabbloExport.ui
rename to src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TabbloExport.ui
diff --git a/extensions/Exporters/TabbloExport/ui/TrustError.ui b/src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui
similarity index 100%
rename from extensions/Exporters/TabbloExport/ui/TrustError.ui
rename to src/Extensions/Exporters/FSpot.Exporters.Tabblo/Resources/ui/TrustError.ui
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
new file mode 100644
index 0000000..50ca683
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Zip/FSpot.Exporters.Zip/ZipExport.cs
@@ -0,0 +1,161 @@
+/*
+ * ZipExport.cs
+ * Simple zip exporter. Creates a zip file with unmodified pictures.
+ *
+ * Author(s)
+ * 	Lorenzo Milesi <maxxer at yetopen.it>
+ *
+ * Many thanks to Stephane for his help and patience. :)
+ *
+ * This is free software. See COPYING for details
+ * (c) YetOpen S.r.l.
+ */
+
+
+using FSpot;
+using FSpot.UI.Dialog;
+using FSpot.Core;
+using FSpot.Extensions;
+using FSpot.Filters;
+using Hyena;
+using Hyena.Widgets;
+using System;
+using System.IO;
+using System.Collections;
+using Mono.Unix;
+using Gtk;
+using ICSharpCode.SharpZipLib.Checksums;
+using ICSharpCode.SharpZipLib.Zip;
+using ICSharpCode.SharpZipLib.GZip;
+
+namespace FSpot.Exporters.Zip {
+	public class Zip : IExporter {
+
+		[Glade.Widget] Gtk.Dialog zipdiag;
+		[Glade.Widget] Gtk.HBox dirchooser_hbox;
+		[Glade.Widget] Gtk.CheckButton scale_check;
+		[Glade.Widget] Gtk.Entry filename;
+		[Glade.Widget] Gtk.SpinButton scale_size;
+		[Glade.Widget] Gtk.Button create_button;
+
+		IBrowsableItem [] photos;
+		Gtk.FileChooserButton uri_chooser;
+
+		public void Run (IBrowsableCollection p) {
+			Log.Information ("Executing ZipExport extension");
+			if (p.Count == 0) {
+				HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window, DialogFlags.DestroyWithParent,
+							  Gtk.MessageType.Error, ButtonsType.Ok,
+							  Catalog.GetString ("No selection available"),
+							  Catalog.GetString ("This tool requires an active selection. Please select one or more pictures and try again"));
+
+				md.Run ();
+				md.Destroy ();
+				return;
+			}
+			photos = p.Items;
+			ShowDialog ();
+		}
+
+		public void ShowDialog () {
+			Glade.XML xml = new Glade.XML (null, "ZipExport.glade", "zipdiag", "f-spot");
+			xml.Autoconnect (this);
+			zipdiag.Modal = false;
+			zipdiag.TransientFor = null;
+
+			uri_chooser = new Gtk.FileChooserButton (Catalog.GetString ("Select export folder"),
+								 Gtk.FileChooserAction.SelectFolder);
+			uri_chooser.LocalOnly = true;
+			uri_chooser.SetFilename (System.IO.Path.Combine (FSpot.Core.Global.HomeDirectory, "Desktop"));
+			dirchooser_hbox.PackStart (uri_chooser, false, false, 2);
+			filename.Text = "f-spot_export.zip";
+
+			zipdiag.Response += on_dialog_response;
+			filename.Changed += on_filename_change;
+			scale_check.Toggled += on_scalecheck_change;
+			on_scalecheck_change (null, null);
+
+			zipdiag.ShowAll ();
+		}
+
+		private void on_dialog_response (object sender, ResponseArgs args) {
+			if (args.ResponseId != Gtk.ResponseType.Ok) {
+				// FIXME this is to work around a bug in gtk+ where
+				// the filesystem events are still listened to when
+				// a FileChooserButton is destroyed but not finalized
+				// and an event comes in that wants to update the child widgets.
+				uri_chooser.Dispose ();
+				uri_chooser = null;
+			} else if (args.ResponseId == Gtk.ResponseType.Ok) {
+				zip ();
+			}
+			zipdiag.Destroy ();
+		}
+
+		void zip () {
+			System.Uri dest = new System.Uri (uri_chooser.Uri);
+			Crc32 crc = new Crc32 ();
+			string filedest = dest.LocalPath + "/" + filename.Text;
+			Log.DebugFormat ("Creating zip file {0}", filedest);
+			ZipOutputStream s = new ZipOutputStream (File.Create(filedest));
+			if (scale_check.Active)
+				Log.DebugFormat ("Scaling to {0}", scale_size.ValueAsInt);
+
+			ProgressDialog progress_dialog = new ProgressDialog (Catalog.GetString ("Exporting files"),
+							      ProgressDialog.CancelButtonType.Stop,
+							      photos.Length, zipdiag);
+
+			//Pack up
+			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;
+				}
+				string f = null;
+				// FIXME: embed in a try/catch
+				if (scale_check.Active) {
+					FilterSet filters = new FilterSet ();
+					filters.Add (new JpegFilter ());
+					filters.Add (new ResizeFilter ((uint) scale_size.ValueAsInt));
+					FilterRequest freq = new FilterRequest (photos [i].DefaultVersion.Uri);
+					filters.Convert (freq);
+					f = freq.Current.LocalPath;
+				} else {
+					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 (photos [i].DefaultVersion.Uri.LocalPath));
+
+				entry.DateTime = DateTime.Now;
+
+				entry.Size = fs.Length;
+				fs.Close ();
+
+				crc.Reset ();
+				crc.Update (buffer);
+
+				entry.Crc = crc.Value;
+
+				s.PutNextEntry (entry);
+
+				s.Write (buffer, 0, buffer.Length);
+			}
+			s.Finish ();
+			s.Close ();
+			if (progress_dialog != null)
+				progress_dialog.Destroy ();
+
+		}
+
+		private void on_filename_change (object sender, System.EventArgs args) {
+			create_button.Sensitive = System.Text.RegularExpressions.Regex.IsMatch (filename.Text, "[.]zip$");
+		}
+
+		private void on_scalecheck_change (object sender, System.EventArgs args) {
+			scale_size.Sensitive = scale_check.Active;
+		}
+	}
+}
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile.am b/src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile.am
new file mode 100644
index 0000000..7773b66
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile.am
@@ -0,0 +1,12 @@
+ASSEMBLY = FSpot.Exporters.Zip
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_ZIPEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Exporters.Zip/ZipExport.cs
+
+RESOURCES =  \
+	Resources/ZipExport.addin.xml \
+	Resources/ZipExport.glade
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile.in b/src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile.in
new file mode 100644
index 0000000..131f1e0
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile.in
@@ -0,0 +1,808 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Exporters/FSpot.Exporters.Zip
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.Zip
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_ZIPEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Exporters.Zip/ZipExport.cs
+RESOURCES = \
+	Resources/ZipExport.addin.xml \
+	Resources/ZipExport.glade
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Exporters/FSpot.Exporters.Zip/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/ZipExport.addin.xml b/src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/ZipExport.addin.xml
new file mode 100644
index 0000000..2361987
--- /dev/null
+++ b/src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/ZipExport.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	id="ZipExport"
+	version="0.8"
+	compatVersion="0.8"
+	name="Zip export"
+	description="Simple export to Zip file"
+	author="Lorenzo Milesi"
+	url="http://f-spot.org/Extensions"
+	category="Export"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Menus/Exports">
+		<ExportMenuItem id="ZipExport" _label = "Compressed fil_e..." class = "FSpot.Exporters.Zip.Zip" />
+	</Extension>
+</Addin>
diff --git a/extensions/Exporters/ZipExport/ZipExport.glade b/src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/ZipExport.glade
similarity index 100%
rename from extensions/Exporters/ZipExport/ZipExport.glade
rename to src/Extensions/Exporters/FSpot.Exporters.Zip/Resources/ZipExport.glade
diff --git a/src/Extensions/Exporters/Makefile.am b/src/Extensions/Exporters/Makefile.am
new file mode 100644
index 0000000..b8933bc
--- /dev/null
+++ b/src/Extensions/Exporters/Makefile.am
@@ -0,0 +1,10 @@
+SUBDIRS = 			\
+	FSpot.Exporters.CD		  \
+	FSpot.Exporters.Facebook  \
+	FSpot.Exporters.Flickr    \
+	FSpot.Exporters.Folder    \
+	FSpot.Exporters.Gallery   \
+	FSpot.Exporters.PicasaWeb \
+	FSpot.Exporters.SmugMug   \
+	FSpot.Exporters.Tabblo    \
+	FSpot.Exporters.Zip
diff --git a/src/Extensions/Exporters/Makefile.in b/src/Extensions/Exporters/Makefile.in
new file mode 100644
index 0000000..fe436c6
--- /dev/null
+++ b/src/Extensions/Exporters/Makefile.in
@@ -0,0 +1,680 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/Extensions/Exporters
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+	FSpot.Exporters.CD		  \
+	FSpot.Exporters.Facebook  \
+	FSpot.Exporters.Flickr    \
+	FSpot.Exporters.Folder    \
+	FSpot.Exporters.Gallery   \
+	FSpot.Exporters.PicasaWeb \
+	FSpot.Exporters.SmugMug   \
+	FSpot.Exporters.Tabblo    \
+	FSpot.Exporters.Zip
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Exporters/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Exporters/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/IExporter.cs b/src/Extensions/IExporter.cs
deleted file mode 100644
index 5086e80..0000000
--- a/src/Extensions/IExporter.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * IExporter.cs
- *
- * Author(s)
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using Mono.Addins;
-using System;
-
-namespace FSpot.Extensions
-{
-	public interface IExporter
-	{
-		void Run (IBrowsableCollection selection);
-	}
-}
diff --git a/src/Extensions/Makefile.am b/src/Extensions/Makefile.am
new file mode 100644
index 0000000..5c6087c
--- /dev/null
+++ b/src/Extensions/Makefile.am
@@ -0,0 +1,5 @@
+SUBDIRS = 			\
+	Editors		\
+	Exporters		\
+	Tools			\
+	Transitions
diff --git a/src/Extensions/Makefile.in b/src/Extensions/Makefile.in
new file mode 100644
index 0000000..29b58c3
--- /dev/null
+++ b/src/Extensions/Makefile.in
@@ -0,0 +1,675 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/Extensions
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+	Editors		\
+	Exporters		\
+	Tools			\
+	Transitions
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/MenuNode.cs b/src/Extensions/MenuNode.cs
deleted file mode 100644
index 1d13923..0000000
--- a/src/Extensions/MenuNode.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * MenuNode.cs
- *
- * Author(s):
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- *
- */
-
-using System;
-using Mono.Addins;
-using Mono.Unix;
-
-namespace FSpot.Extensions
-{
-	[ExtensionNode ("Menu")]
-	[ExtensionNodeChild (typeof (MenuItemNode))]
-	[ExtensionNodeChild (typeof (ExportMenuItemNode))]
-	[ExtensionNodeChild (typeof (CommandMenuItemNode))]
-	[ExtensionNodeChild (typeof (MenuSeparatorNode))]
-	[ExtensionNodeChild (typeof (SubmenuNode))]
-	[ExtensionNodeChild (typeof (MenuGeneratorNode))]
-	[ExtensionNodeChild (typeof (ComplexMenuItemNode))]
-	public class SubmenuNode : MenuNode
-	{
-		public override Gtk.MenuItem GetMenuItem (object parent)
-		{
-			Gtk.MenuItem item = base.GetMenuItem (parent);
-
-			Gtk.Menu submenu = GetSubmenu (parent);
-
-			if (item.Submenu != null)
-				item.Submenu.Dispose ();	
-			
-			item.Submenu = submenu;
-			return item;
-		}
-
-		public Gtk.Menu GetSubmenu ()
-		{
-			return GetSubmenu (null);
-		}
-
-		public Gtk.Menu GetSubmenu (object parent)
-		{
-			Gtk.Menu submenu = new Gtk.Menu ();
-
-			foreach (MenuNode node in ChildNodes)
-				submenu.Insert (node.GetMenuItem (parent), -1);
-
-			return submenu;				
-		}
-	}
-
-	[ExtensionNode ("MenuGenerator")]
-	public class MenuGeneratorNode : MenuNode
-	{
-		[NodeAttribute ("generator_type", true)]
-		protected string command_type;
-
-		private IMenuGenerator menu_generator;
-
-		public override Gtk.MenuItem GetMenuItem (object parent)
-		{
-			Gtk.MenuItem item = base.GetMenuItem (parent);
-			menu_generator = (IMenuGenerator) Addin.CreateInstance (command_type); 
-			item.Submenu = menu_generator.GetMenu ();
-			item.Activated += menu_generator.OnActivated;
-			return item;
-		}
-	}
-
-	[ExtensionNode ("MenuItem")]
-	public class MenuItemNode : MenuNode
-	{
-		public override Gtk.MenuItem GetMenuItem (object parent)
-		{
-			Gtk.MenuItem item = base.GetMenuItem (parent);
-			item.Activated += OnActivated;
-			return item;
-		}
-
-		protected virtual void OnActivated (object o, EventArgs e)
-		{
-		}
-	}
-
-	[ExtensionNode ("MenuSeparator")]
-	public class MenuSeparatorNode : MenuNode
-	{
-		public override Gtk.MenuItem GetMenuItem (object parent)
-		{
-			return new Gtk.SeparatorMenuItem ();
-		}
-	}
-
-	public abstract class MenuNode : ExtensionNode
-	{
-		[NodeAttribute (Localizable=true)]
-		protected string _label;
-
-		[NodeAttribute]
-		protected string icon;
-
-		public virtual Gtk.MenuItem GetMenuItem (object parent)
-		{
-			Gtk.MenuItem item;
-			if (icon == null)
-				item = new Gtk.MenuItem (_label != null ? Catalog.GetString (_label) : Id);
-			else {
-				item = new Gtk.ImageMenuItem (_label != null ? Catalog.GetString (_label) : Id);
-				(item as Gtk.ImageMenuItem).Image = Gtk.Image.NewFromIconName (icon, Gtk.IconSize.Menu);
-			}
-			return item;
-		}
-	}
-}
diff --git a/src/Extensions/PhotoSelectionCondition.cs b/src/Extensions/PhotoSelectionCondition.cs
deleted file mode 100644
index 9649f78..0000000
--- a/src/Extensions/PhotoSelectionCondition.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * FSpot.Extensions.PhotoSelectionCondition.cs
- *
- * Author(s)
- * 	Ruben Vermeersch  <ruben at savanne.be>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using Mono.Addins;
-
-namespace FSpot.Extensions
-{
-	// Defines a selection condition, which determines the number of photos 
-	// selected.
-	//
-	// There are two valid values for the "selection" attribute, which 
-	// should be added to the Condition tag.
-	//   - single: One photo is selected
-	//   - multiple: Multiple photos are selected
-	public class PhotoSelectionCondition : ConditionType
-	{
-		public PhotoSelectionCondition()
-		{
-			App.Instance.Organizer.Selection.Changed += delegate { NotifyChanged ();};
-		}
-
-		public override bool Evaluate (NodeElement conditionNode)
-		{
-			int count = App.Instance.Organizer.Selection.Count;
-			string val = conditionNode.GetAttribute ("selection");
-			if (val.Length > 0) {
-				foreach (string selection in val.Split(',')) {
-					if (selection == "multiple" && count > 1) {
-						return true;
-					} else if (selection == "single" && count == 1) {
-						return true;
-					}
-				}
-			}
-			return false;
-		}
-	}
-}
diff --git a/src/Extensions/PopupCommands.cs b/src/Extensions/PopupCommands.cs
deleted file mode 100644
index 95f00d7..0000000
--- a/src/Extensions/PopupCommands.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * FSpot.Extensions.PopupCommands
- *
- * Author(s)
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using System;
-using GLib;
-using FSpot.Widgets;
-
-namespace FSpot.Extensions 
-{
-	public class Copy : ICommand
-	{
-		public void Run (object o, EventArgs e)
-		{
-			App.Instance.Organizer.HandleCopy (o, e);
-		}		
-	}
-
-	public class Rotate270 : ICommand
-	{
-		public void Run (object o, EventArgs e)
-		{
-			App.Instance.Organizer.HandleRotate270Command (o, e);
-		}
-	}
-
-	public class Rotate90 : ICommand
-	{
-		public void Run (object o, EventArgs e)
-		{
-			App.Instance.Organizer.HandleRotate90Command (o, e);
-		}
-	}
-
-	public class Remove : ICommand
-	{
-		public void Run (object o, EventArgs e)
-		{
-			App.Instance.Organizer.HandleRemoveCommand (o, e);
-		}
-	}
-
-	public class Delete : ICommand
-	{
-		public void Run (object o, EventArgs e)
-		{
-			App.Instance.Organizer.HandleDeleteCommand (o, e);
-		}
-	}
-
-	public class OpenWith : IMenuGenerator
-	{
-		private Widgets.OpenWithMenu owm;
-
-		public Gtk.Menu GetMenu ()
-		{
-			owm = new Widgets.OpenWithMenu (App.Instance.Organizer.SelectedMimeTypes, "f-spot");
-			owm.ApplicationActivated += App.Instance.Organizer.HandleOpenWith;
-			return (Gtk.Menu) owm;
-		}
-
-		public void OnActivated (object o, EventArgs e)
-		{
-			if (owm != null)
-				owm.Populate (o, e);
-		}
-	}
-
-	public class RemoveTag : IMenuGenerator
-	{
-		public Gtk.Menu GetMenu ()
-		{
-			PhotoTagMenu tag_menu = new PhotoTagMenu ();
-			tag_menu.TagSelected += App.Instance.Organizer.HandleRemoveTagMenuSelected;
-			return (Gtk.Menu) tag_menu;
-		}
-
-		public void OnActivated (object o, EventArgs e)
-		{
-			App.Instance.Organizer.HandleTagMenuActivate (o, e);
-		}
-	}
-
-	public class Rate : ICommand
-	{
-		public void Run (object o, EventArgs e)
-		{
-			App.Instance.Organizer.HandleRatingMenuSelected ((o as Widgets.Rating).Value);
-		}
-	}
-}
diff --git a/src/Extensions/ServiceNode.cs b/src/Extensions/ServiceNode.cs
deleted file mode 100644
index 32e8952..0000000
--- a/src/Extensions/ServiceNode.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * FSpot.Extensions.ServiceNode.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using System;
-using Mono.Addins;
-
-namespace FSpot.Extensions
-{
-	public class ServiceNode : ExtensionNode
-	{	
-		[NodeAttribute ("class", true)]
-		protected string class_name;
-
-		IService service = null;
-
-		public void Initialize ()
-		{
-			service = Addin.CreateInstance (class_name) as IService;
-		}
-
-		public bool Start ()
-		{
-			if (service == null)
-				throw new Exception ("Service not initialized. Call Initialize () prior to Start() or Stop()");
-			return service.Start ();
-		}
-
-		public bool Stop ()
-		{
-			if (service == null)
-				throw new Exception ("Service not initialized. Call Initialize () prior to Start() or Stop()");
-			return service.Stop ();
-		}
-	}
-}
diff --git a/src/Extensions/SidebarPage.cs b/src/Extensions/SidebarPage.cs
deleted file mode 100644
index a8eecdb..0000000
--- a/src/Extensions/SidebarPage.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Widgets.SidebarPage.cs
- *
- * Author(s)
- * 	Mike Gemuende <mike at gemuende.de>
- *	Stephane Delcroix <stephane at delcroix.org>
- *	Ruben Vermeersch <ruben at savanne.be>
- *
- * This is free software. See COPYING for details.
- */
-
-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.
-		private readonly Widget widget;
-		public Widget SidebarWidget {
-			get { return widget; }
-		}
-
-		// Whether this page can be selected
-		private bool can_select;
-		public bool CanSelect {
-			protected set { 
-				can_select = value;
-				if (CanSelectChanged != null)
-					CanSelectChanged (this, null);
-			}
-			get { return can_select; }
-		}
-
-		public event EventHandler CanSelectChanged;
-
-		// The label of the sidebar page.
-		private readonly string label;
-		public string Label {
-			get { return label; }
-		}
-
-		// The icon name, used for the selector
-		private readonly string icon_name;
-		public string IconName {
-			get { return icon_name; }
-		}
-
-		// The sidebar onto which this page is attached
-		private Gtk.Widget sidebar;
-		public Gtk.Widget Sidebar {
-			get { return sidebar; }
-			set { 
-				sidebar = value; 
-				AddedToSidebar ();
-			}
-		}
-
-		// Can be overriden to get notified as soon as we're added to a sidebar.
-		protected virtual void AddedToSidebar () { }
-
-//		// Whether this page is currently visible
-//		public bool IsActive {
-//			get { return Sidebar.IsActive (this); }
-//		}
-
-		public SidebarPage (Widget widget, string label, string icon_name) {
-			this.widget = widget;
-			this.label = label;
-			this.icon_name = icon_name;
-		}
-	}
-}
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
new file mode 100644
index 0000000..4497b10
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/ChangePhotoPathController.cs
@@ -0,0 +1,311 @@
+//
+// ChangePhotoPath.IChangePhotoPathController.cs: The logic to change the photo path in photos.db
+//
+// Author:
+//   Bengt Thuree (bengt at thuree.com)
+//
+// Copyright (C) 2007
+//
+
+
+using FSpot;
+using FSpot.Core;
+using FSpot.Query;
+using System;
+using System.IO;
+using System.Collections;
+using System.Collections.Specialized;
+using Hyena;
+
+/*
+	Need to
+		1) Find old base path, assuming starting /YYYY/MM/DD so look for /YY (/19 or /20)
+		2) Confirm old base path and display new base path
+		3) For each Photo, check each version, and change every instance of old base path to new path
+
+Consider!!!
+photo_store.Commit(photo) is using db.ExecuteNonQuery, which is not waiting for the command to finish. On my test set of 20.000 photos,
+it took SQLite another 1 hour or so to commit all rows after this extension had finished its execution.
+
+Consider 2!!!
+A bit of mixture between URI and path. Old and New base path are in String path. Rest in URI.
+
+*/
+
+namespace FSpot.Tools.ChangePhotoPath
+{
+
+	public enum ProcessResult {
+		Ok, Cancelled, Error, SamePath, NoPhotosFound, Processing
+	}
+
+	public class ChangePathController
+	{
+		PhotoStore photo_store = FSpot.App.Instance.Database.Photos;
+		ArrayList photo_id_array, version_id_array;
+		StringCollection old_path_array, new_path_array;
+		int total_photos;
+		string orig_base_path;
+
+		private const string BASE2000 = "/20";
+		private const string BASE1900 = "/19";
+		private const string BASE1800 = "/18";
+
+		private IChangePhotoPathGui gui_controller;
+
+
+		private bool user_cancelled;
+		public bool UserCancelled {
+		  get {return user_cancelled;}
+		  set {user_cancelled = value;}
+		}
+
+		public ChangePathController (IChangePhotoPathGui gui)
+		{
+			gui_controller = gui;
+			total_photos = photo_store.TotalPhotos;
+			orig_base_path = EnsureEndsWithOneDirectorySeparator (FindOrigBasePath());			// NOT URI
+			string new_base_path = EnsureEndsWithOneDirectorySeparator (FSpot.Core.Global.PhotoUri.LocalPath);	// NOT URI
+			gui_controller.DisplayDefaultPaths (orig_base_path, new_base_path);
+			user_cancelled = false;
+		}
+
+		private string EnsureEndsWithOneDirectorySeparator (string 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);
+			return String.Format ("{0}{1}", tmp_str, Path.DirectorySeparatorChar);
+		}
+
+
+		// Should always return TRUE, since path always ends with "/"
+		public bool CanWeRun ()
+		{
+			return (orig_base_path != null);
+		}
+
+		private string IsThisPhotoOnOrigBasePath (string check_this_path)
+		{
+			int i;
+			i = check_this_path.IndexOf(BASE2000);
+			if (i > 0)
+				return (check_this_path.Substring(0, i));
+			i = check_this_path.IndexOf(BASE1900);
+			if (i > 0)
+				return (check_this_path.Substring(0, i));
+			i = check_this_path.IndexOf(BASE1800);
+			if (i > 0)
+				return (check_this_path.Substring(0, i));
+			return null;
+		}
+
+		private string FindOrigBasePath()
+		{
+			string res_path = null;
+
+			foreach ( IBrowsableItem photo in photo_store.Query ( "SELECT * FROM photos " ) ) {
+				string tmp_path = (photo as Photo).DefaultVersion.Uri.AbsolutePath;
+				res_path = IsThisPhotoOnOrigBasePath (tmp_path);
+				if (res_path != null)
+					break;
+			}
+			return res_path;
+		}
+
+		private void InitializeArrays()
+		{
+			photo_id_array = new ArrayList();
+			version_id_array = new ArrayList();
+			old_path_array = new StringCollection();
+			new_path_array = new StringCollection();
+		}
+
+		private void AddVersionToArrays ( uint photo_id, uint version_id, string old_path, string new_path)
+		{
+			photo_id_array.Add (photo_id);
+			version_id_array.Add (version_id);
+			old_path_array.Add (old_path);
+			new_path_array.Add (new_path);
+		}
+
+		private string CreateNewPath (string old_base, string new_base, PhotoVersion version)
+		{
+			return string.Format ("{0}{1}", new_base, version.Uri.AbsolutePath.Substring(old_base.Length));
+		}
+
+		private bool ChangeThisVersionUri (PhotoVersion version, string old_base, string new_base)
+		{
+			// Change to path from URI, since easier to compare with old_base which is not in URI format.
+			string tmp_path = System.IO.Path.GetDirectoryName (version.Uri.AbsolutePath);
+			return ( tmp_path.StartsWith (old_base) );
+		}
+
+		private void SearchVersionUriToChange (Photo photo, string old_base, string new_base)
+		{
+				foreach (uint version_id in photo.VersionIds) {
+
+					PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
+					if ( ChangeThisVersionUri (version, old_base, new_base) )
+						AddVersionToArrays (	photo.Id,
+									version_id,
+									version.Uri.AbsolutePath,
+									CreateNewPath (old_base, new_base, version));
+//					else
+//						System.Console.WriteLine ("L : {0}", version.Uri.AbsolutePath);
+				}
+		}
+
+		public bool SearchUrisToChange (string old_base, string new_base)
+		{
+			int count = 0;
+
+			foreach ( IBrowsableItem ibrows in photo_store.Query ( "SELECT * FROM photos " ) ) {
+				count++;
+				if (gui_controller.UpdateProgressBar ("Scanning through database", "Checking photo", total_photos))
+				    return false;
+				SearchVersionUriToChange ((ibrows as Photo), old_base, new_base);
+			}
+			return true;
+		}
+
+		public bool StillOnSamePhotoId (int old_index, int current_index, ArrayList array)
+		{
+			try {
+				return (array[old_index] == array[current_index]);
+			} catch {
+				return true; // return true if out of index.
+			}
+		}
+
+		public void UpdateThisUri (int index, string path, ref Photo photo)
+		{
+			if (photo == null)
+				photo = photo_store.Get ( (uint) photo_id_array[index]) as Photo;
+			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 ( (uint) version_id_array[index] );
+		}
+
+/// FIXME Refactor, try to use one common method....
+		public void RevertAllUris (int last_index)
+		{
+			gui_controller.remove_progress_dialog();
+			Photo photo = null;
+			for (int k = last_index; k >= 0; k--) {
+				if (gui_controller.UpdateProgressBar ("Reverting changes to database", "Reverting photo", last_index))
+					{} // do nothing, ignore trying to abort the revert...
+				if ( (photo != null) && !StillOnSamePhotoId (k+1, k, photo_id_array) ) {
+					photo_store.Commit (photo);
+					photo = null;
+				}
+
+				UpdateThisUri (k, old_path_array[k], ref photo);
+				Log.DebugFormat ("R : {0} - {1}", k, old_path_array[k]);
+			}
+			if (photo != null)
+				photo_store.Commit (photo);
+			Log.Debug ("Changing path failed due to above error. Have reverted any modification that took place.");
+		}
+
+		public ProcessResult ChangeAllUris ( ref int  last_index)
+		{
+			gui_controller.remove_progress_dialog();
+			Photo photo = null;
+			last_index = 0;
+			try {
+				photo = null;
+				for (last_index = 0; last_index < photo_id_array.Count; last_index++) {
+
+					if (gui_controller.UpdateProgressBar ("Changing photos base path", "Changing photo", photo_id_array.Count)) {
+						Log.Debug("User aborted the change of paths...");
+						return ProcessResult.Cancelled;
+					}
+
+					if ( (photo != null) && !StillOnSamePhotoId (last_index-1, last_index, photo_id_array) ) {
+						photo_store.Commit (photo);
+						photo = null;
+					}
+
+					UpdateThisUri (last_index, new_path_array[last_index], ref photo);
+					Log.DebugFormat ("U : {0} - {1}", last_index, new_path_array[last_index]);
+
+					// DEBUG ONLY
+					// Cause an TEST exception on 6'th URI to be changed.
+					// float apa = last_index / (last_index-6);
+				}
+				if (photo != null)
+					photo_store.Commit (photo);
+			} catch (Exception e) {
+				Log.Exception(e);
+				return ProcessResult.Error;
+			}
+			return ProcessResult.Ok;
+		}
+
+
+		public ProcessResult ProcessArrays()
+		{
+			int last_index = 0;
+			ProcessResult tmp_res;
+			tmp_res = ChangeAllUris(ref last_index);
+			if (!(tmp_res == ProcessResult.Ok))
+				RevertAllUris(last_index);
+			return tmp_res;
+		}
+
+/*
+		public void CheckIfUpdated (int test_index, StringCollection path_array)
+		{
+			Photo photo = photo_store.Get ( (uint) photo_id_array[test_index]) as Photo;
+			PhotoVersion version = photo.GetVersion ( (uint) version_id_array[test_index]) as PhotoVersion;
+			if (version.Uri.AbsolutePath.ToString() == path_array[ test_index ])
+				Log.DebugFormat ("Test URI ({0}) matches --- Should be finished", test_index);
+			else
+				Log.DebugFormat ("Test URI ({0}) DO NOT match --- Should NOT BE finished", test_index);
+		}
+*/
+
+/*
+Check paths are different
+If (Scan all photos) // user might cancel
+	If (Check there are photos on old path)
+		ChangePathsOnPhotos
+*/
+
+		public bool NewOldPathSame (ref string newpath, ref string oldpath)
+		{
+			string p1 = EnsureEndsWithOneDirectorySeparator(newpath);
+			string p2 = EnsureEndsWithOneDirectorySeparator(oldpath);
+			return (p1 == p2);
+		}
+
+		public ProcessResult ChangePathOnPhotos (string old_base, string new_base)
+		{
+			ProcessResult tmp_res = ProcessResult.Processing;
+			InitializeArrays();
+
+			if (NewOldPathSame (ref new_base, ref old_base))
+				tmp_res = ProcessResult.SamePath;
+
+			if ( (tmp_res == ProcessResult.Processing) && (!SearchUrisToChange (old_base, new_base)) )
+				tmp_res = ProcessResult.Cancelled;
+
+			if ( (tmp_res == ProcessResult.Processing) && (photo_id_array.Count == 0) )
+				tmp_res = ProcessResult.NoPhotosFound;
+
+			if (tmp_res == ProcessResult.Processing)
+				tmp_res = ProcessArrays();
+
+//			if (res)
+//				CheckIfUpdated (photo_id_array.Count-1, new_path_array);
+//			else
+//				CheckIfUpdated (0, old_path_array);
+
+			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
new file mode 100644
index 0000000..a977276
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/ChangePhotoPathGui.cs
@@ -0,0 +1,206 @@
+//
+// ChangePhotoPath.IChangePhotoPathGui.cs: The Gui to change the photo path in photos.db
+//
+// Author:
+//   Bengt Thuree (bengt at thuree.com)
+//
+// Copyright (C) 2007
+//
+
+using FSpot.Extensions;
+using FSpot.UI.Dialog;
+using System;
+//using Gnome.Vfs;
+using Gtk;
+using Hyena;
+using Hyena.Widgets;
+
+namespace FSpot.Tools.ChangePhotoPath
+{
+
+	public class Dump : Gtk.Dialog, ICommand, IChangePhotoPathGui
+	{
+		private string dialog_name = "ChangePhotoPath";
+		private Glade.XML xml;
+		private Gtk.Dialog dialog;
+		private ChangePathController contr;
+
+		private ProgressDialog progress_dialog;
+		private int progress_dialog_total = 0;
+
+		[Glade.Widget] Gtk.Entry old_common_uri;
+		[Glade.Widget] Gtk.Label new_common_uri;
+//		[Glade.Widget] Gtk.ProgressBar progress_bar;
+
+		private bool LaunchController()
+		{
+			try {
+				contr = new ChangePathController ( this );
+			} catch (Exception e) {
+				Log.Exception(e);
+				return false;
+			}
+			return true;
+		}
+
+		public void create_progress_dialog(string txt, int total)
+		{
+			progress_dialog = new ProgressDialog (txt,
+							      ProgressDialog.CancelButtonType.Stop,
+							      total,
+							      dialog);
+		}
+
+
+		public void LaunchDialog()
+		{
+			CreateDialog();
+			Dialog.Modal = false;
+			Dialog.TransientFor = null;
+			if (LaunchController() && contr.CanWeRun())
+			{
+				DisplayDoNotStopFSpotMsg();
+				Dialog.ShowAll();
+				Dialog.Response += HandleResponse;
+			} else {
+				DisplayOrigBasePathNotFoundMsg();
+				Dialog.Destroy();
+			}
+		}
+
+		private void CreateDialog()
+		{
+			xml = new Glade.XML (null, "ChangePhotoPath.glade", dialog_name, "f-spot");
+			xml.Autoconnect (this);
+		}
+
+		private Gtk.Dialog Dialog {
+			get {
+				if (dialog == null)
+					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+				return dialog;
+			}
+		}
+
+		private void DisplayMsg(Gtk.MessageType MessageType, string msg)
+		{
+
+			HigMessageDialog.RunHigMessageDialog (	null,
+								Gtk.DialogFlags.Modal | Gtk.DialogFlags.DestroyWithParent,
+								MessageType,
+								Gtk.ButtonsType.Ok,
+								msg,
+								null);
+		}
+
+		private void DisplayDoNotStopFSpotMsg()
+		{
+			DisplayMsg (Gtk.MessageType.Info, "It will take a long time for SqLite to update the database if you have many photos." +
+							  "\nWe recommend you to let F-Spot be running during the night to ensure everything is written to disk."+
+							  "\nChanging path on 23000 photos took 2 hours until sqlite had updated all photos in the database.");
+		}
+
+		private void DisplayOrigBasePathNotFoundMsg()
+		{
+			DisplayMsg (Gtk.MessageType.Error, "Could not find an old base path. /YYYY/MM/DD need to start with /20, /19 or /18.");
+		}
+
+		private void DisplayCancelledMsg()
+		{
+			DisplayMsg (Gtk.MessageType.Warning, "Operation aborted. Database has not been modified.");
+		}
+
+		private void DisplaySamePathMsg()
+		{
+			DisplayMsg (Gtk.MessageType.Warning, "New and Old base path are the same.");
+		}
+
+		private void DisplayNoPhotosFoundMsg()
+		{
+			DisplayMsg (Gtk.MessageType.Warning, "Did not find any photos with the old base path.");
+		}
+
+		private void DisplayExecutionOkMsg()
+		{
+			DisplayMsg (Gtk.MessageType.Info, "Completed successfully. Please ensure you wait 1-2 hour before you exit f-spot. This to ensure the database cache is written to disk.");
+		}
+
+		private void DisplayExecutionNotOkMsg()
+		{
+			DisplayMsg (Gtk.MessageType.Error, "An error occured. Reverted all changes to the database.");
+		}
+
+
+		private void HandleResponse (object sender, Gtk.ResponseArgs args)
+		{
+			bool destroy_dialog = false;
+			ChangePhotoPath.ProcessResult tmp_res;
+			if (args.ResponseId == Gtk.ResponseType.Ok) {
+
+				tmp_res = contr.ChangePathOnPhotos (old_common_uri.Text, new_common_uri.Text);
+				switch (tmp_res) {
+				case ProcessResult.Ok 			: 	DisplayExecutionOkMsg();
+										destroy_dialog=true;
+										break;
+				case ProcessResult.Cancelled 		: 	DisplayCancelledMsg();
+										break;
+				case ProcessResult.Error 		: 	DisplayExecutionNotOkMsg();
+										break;
+				case ProcessResult.SamePath 		: 	DisplaySamePathMsg();
+										break;
+				case ProcessResult.NoPhotosFound 	: 	DisplayNoPhotosFoundMsg();
+										break;
+				case ProcessResult.Processing 		: 	Log.Debug ("processing");
+										break;
+				}
+			} else
+				destroy_dialog = true;
+
+			remove_progress_dialog();
+			if (destroy_dialog)
+				Dialog.Destroy();
+
+			return;
+		}
+
+		public void DisplayDefaultPaths (string oldpath, string newpath)
+		{
+			old_common_uri.Text = oldpath;
+			new_common_uri.Text = newpath;
+		}
+
+		public void remove_progress_dialog ()
+		{
+			if (progress_dialog != null) {
+				progress_dialog.Destroy();
+				progress_dialog = null;
+			}
+		}
+
+		public void check_if_remove_progress_dialog (int total)
+		{
+			if (total != progress_dialog_total)
+				remove_progress_dialog();
+		}
+
+
+		public bool UpdateProgressBar (string hdr_txt, string txt, int total)
+		{
+			if (progress_dialog != null)
+				check_if_remove_progress_dialog(total);
+			if (progress_dialog == null)
+				create_progress_dialog(hdr_txt, total);
+			progress_dialog_total = total;
+			return progress_dialog.Update (String.Format ("{0} ", txt));
+		}
+
+		public void Run (object sender, EventArgs args)
+		{
+			try {
+				LaunchDialog( );
+			} catch (Exception e) {
+				Log.Exception(e);
+			}
+		}
+	}
+}
diff --git a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/IChangePhotoPathGui.cs b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/IChangePhotoPathGui.cs
new file mode 100644
index 0000000..55c0ce9
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/FSpot.Tools.ChangePhotoPath/IChangePhotoPathGui.cs
@@ -0,0 +1,18 @@
+//
+// ChangePhotoPath.IChangePhotoPathGui.cs: Interfaces to ChangePhotoPathGui
+//
+// Author:
+//   Bengt Thuree (bengt at thuree.com)
+//
+// Copyright (C) 2007
+//
+
+namespace FSpot.Tools.ChangePhotoPath
+{
+	public interface IChangePhotoPathGui
+	{
+		void remove_progress_dialog();
+		bool UpdateProgressBar (string hdr_txt, string text, int total_photos);
+		void DisplayDefaultPaths (string oldpath, string newpath);
+	}
+}
diff --git a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile.am b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile.am
new file mode 100755
index 0000000..31fe9f7
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile.am
@@ -0,0 +1,15 @@
+ASSEMBLY = FSpot.Tools.ChangePhotoPath
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_CHANGEPHOTOPATH)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	FSpot.Tools.ChangePhotoPath/ChangePhotoPathController.cs \
+	FSpot.Tools.ChangePhotoPath/ChangePhotoPathGui.cs \
+	FSpot.Tools.ChangePhotoPath/IChangePhotoPathGui.cs
+
+RESOURCES =  \
+	Resources/ChangePhotoPath.addin.xml \
+	Resources/ChangePhotoPath.glade
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile.in b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile.in
new file mode 100644
index 0000000..2bc99fc
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile.in
@@ -0,0 +1,812 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Tools/FSpot.Tools.ChangePhotoPath
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Tools.ChangePhotoPath
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_CHANGEPHOTOPATH) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	FSpot.Tools.ChangePhotoPath/ChangePhotoPathController.cs \
+	FSpot.Tools.ChangePhotoPath/ChangePhotoPathGui.cs \
+	FSpot.Tools.ChangePhotoPath/IChangePhotoPathGui.cs
+
+RESOURCES = \
+	Resources/ChangePhotoPath.addin.xml \
+	Resources/ChangePhotoPath.glade
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.addin.xml b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.addin.xml
new file mode 100644
index 0000000..af5563e
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+        id="ChangePath"
+        version="0.8"
+		compatVersion="0.8"
+        name="ChangePath"
+        description="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."
+        author="Bengt Thuree"
+        url="http://f-spot.org/Extensions"
+        category="Tools"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Menus/Tools">
+		<Command id="FileList" _label = "Change path to photos" command_type = "FSpot.Tools.ChangePhotoPath.Dump" />
+	</Extension>
+</Addin>
diff --git a/extensions/Tools/ChangePhotoPath/ChangePhotoPath.glade b/src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.glade
similarity index 100%
rename from extensions/Tools/ChangePhotoPath/ChangePhotoPath.glade
rename to src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Resources/ChangePhotoPath.glade
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
new file mode 100644
index 0000000..af2fe6c
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/AbstractDevelopInUFRaw.cs
@@ -0,0 +1,148 @@
+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
+{
+    // Abstract version, contains shared functionality
+	public abstract class AbstractDevelopInUFRaw : ICommand
+	{
+		// The executable used for developing RAWs
+		private string executable;
+
+		public const string APP_FSPOT_EXTENSION = Preferences.APP_FSPOT + "extension/";
+		public const string EXTENSION_DEVELOPINUFRAW = "developinufraw/";
+		public const string UFRAW_JPEG_QUALITY_KEY = APP_FSPOT_EXTENSION + EXTENSION_DEVELOPINUFRAW + "ufraw_jpeg_quality";
+		public const string UFRAW_ARGUMENTS_KEY = APP_FSPOT_EXTENSION + EXTENSION_DEVELOPINUFRAW + "ufraw_arguments";
+		public const string UFRAW_BATCH_ARGUMENTS_KEY = APP_FSPOT_EXTENSION + EXTENSION_DEVELOPINUFRAW + "ufraw_batch_arguments";
+
+		int ufraw_jpeg_quality;
+		string ufraw_args;
+		string ufraw_batch_args;
+
+		public AbstractDevelopInUFRaw(string executable)
+		{
+			this.executable = executable;
+		}
+
+		public abstract void Run (object o, EventArgs e);
+
+		protected void DevelopPhoto (Photo p)
+		{
+			LoadPreference (UFRAW_JPEG_QUALITY_KEY);
+			LoadPreference (UFRAW_ARGUMENTS_KEY);
+			LoadPreference (UFRAW_BATCH_ARGUMENTS_KEY);
+
+			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;
+			}
+
+			string name = GetVersionName (p);
+			System.Uri developed = GetUriForVersionName (p, name);
+			string idfile = "";
+
+
+			if (ufraw_jpeg_quality < 1 || ufraw_jpeg_quality > 100) {
+				Log.Debug ("Invalid JPEG quality specified, defaulting to quality 98");
+				ufraw_jpeg_quality = 98;
+			}
+
+			string args = "";
+			switch (executable) {
+				case "ufraw":
+					args += ufraw_args;
+					if (GLib.FileFactory.NewForUri (Path.ChangeExtension (raw.Uri.ToString (), ".ufraw")).Exists) {
+						// We found an ID file, use that instead of the raw file
+						idfile = "--conf=" + GLib.Shell.Quote (Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw"));
+					}
+					break;
+				case "ufraw-batch":
+					args += ufraw_batch_args;
+					if (GLib.FileFactory.NewForUri (Path.Combine (Global.BaseDirectory, "batch.ufraw")).Exists) {
+						// We found an ID file, use that instead of the raw file
+						idfile = "--conf=" + GLib.Shell.Quote (Path.Combine (Global.BaseDirectory, "batch.ufraw"));
+					}
+					break;
+			}
+
+			args += String.Format(" --overwrite --create-id=also --compression={0} --out-type=jpeg {1} --output={2} {3}",
+				ufraw_jpeg_quality,
+				idfile,
+				GLib.Shell.Quote (developed.LocalPath),
+				GLib.Shell.Quote (raw.Uri.LocalPath));
+			Log.Debug (executable + " " + args);
+
+			System.Diagnostics.Process ufraw = System.Diagnostics.Process.Start (executable, args);
+			ufraw.WaitForExit ();
+			if (!(GLib.FileFactory.NewForUri (developed.ToString ())).Exists) {
+				Log.Warning ("UFRaw quit with an error. Check that you have UFRaw 0.13 or newer. Or did you simply clicked on Cancel?");
+				return;
+			}
+
+			if (GLib.FileFactory.NewForUri (Path.ChangeExtension (developed.ToString (), ".ufraw")).Exists) {
+				// We save our own copy of the last ufraw settings, as ufraw can overwrite it's own last used settings outside f-spot
+				File.Delete (Path.Combine (Global.BaseDirectory, "batch.ufraw"));
+				File.Copy (Path.ChangeExtension (developed.LocalPath, ".ufraw"), Path.Combine (Global.BaseDirectory, "batch.ufraw"));
+
+				// Rename the ufraw file to match the original RAW filename, instead of the (Developed In UFRaw) filename
+				File.Delete (Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw"));
+				File.Move (Path.ChangeExtension (developed.LocalPath, ".ufraw"), Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw"));
+			}
+
+			p.DefaultVersionId = p.AddVersion (new SafeUri (developed).GetBaseUri (),new SafeUri (developed).GetFilename (), name, true);
+			p.Changes.DataChanged = true;
+			App.Instance.Database.Photos.Commit (p);
+		}
+
+		private static string GetVersionName (Photo p)
+		{
+			return GetVersionName (p, 1);
+		}
+
+		private static string GetVersionName (Photo p, int i)
+		{
+			string name = Catalog.GetPluralString ("Developed in UFRaw", "Developed in UFRaw ({0})", i);
+			name = String.Format (name, i);
+			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"));
+		}
+
+		private static string DirectoryPath (Photo p)
+		{
+			return p.VersionUri (Photo.OriginalVersionId).GetBaseUri ();
+		}
+
+		void LoadPreference (string key)
+		{
+			switch (key) {
+				case UFRAW_JPEG_QUALITY_KEY:
+					ufraw_jpeg_quality = Preferences.Get<int> (key);
+					break;
+				case UFRAW_ARGUMENTS_KEY:
+					ufraw_args = Preferences.Get<string> (key);
+					break;
+				case UFRAW_BATCH_ARGUMENTS_KEY:
+					ufraw_batch_args = Preferences.Get<string> (key);
+					break;
+			}
+		}
+
+	}
+}
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
new file mode 100644
index 0000000..17a5cd5
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRaw.cs
@@ -0,0 +1,40 @@
+/*
+ * DevelopInUFraw.cs
+ *
+ * Author(s)
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ */
+
+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
+{
+	// GUI Version
+	public class DevelopInUFRaw : AbstractDevelopInUFRaw {
+		public DevelopInUFRaw() : base("ufraw")
+		{
+		}
+
+		public override void Run (object o, EventArgs e)
+		{
+			Log.Information ("Executing DevelopInUFRaw extension");
+
+			foreach (Photo p in App.Instance.Organizer.SelectedPhotos ()) {
+				DevelopPhoto (p);
+			}
+		}
+	}
+}
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
new file mode 100644
index 0000000..06f9914
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs
@@ -0,0 +1,39 @@
+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
+{
+    // Batch Version
+	public class DevelopInUFRawBatch : AbstractDevelopInUFRaw {
+		public DevelopInUFRawBatch() : base("ufraw-batch")
+		{
+		}
+
+		public override void Run (object o, EventArgs e)
+		{
+			ProgressDialog pdialog = new ProgressDialog(Catalog.GetString ("Developing photos"),
+														ProgressDialog.CancelButtonType.Cancel,
+														App.Instance.Organizer.SelectedPhotos ().Length,
+														App.Instance.Organizer.Window);
+			Log.Information ("Executing DevelopInUFRaw extension in batch mode");
+
+			foreach (Photo p in App.Instance.Organizer.SelectedPhotos ()) {
+				bool cancelled = pdialog.Update(String.Format(Catalog.GetString ("Developing {0}"), p.Name));
+				if (cancelled) {
+					break;
+				}
+
+				DevelopPhoto (p);
+			}
+			pdialog.Destroy();
+		}
+	}
+}
diff --git a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile.am b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile.am
new file mode 100644
index 0000000..6e2f998
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile.am
@@ -0,0 +1,13 @@
+ASSEMBLY = FSpot.Tools.DevelopInUFRaw
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_DEVELOPINUFRAW)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	FSpot.Tools.DevelopInUFraw/AbstractDevelopInUFRaw.cs \
+	FSpot.Tools.DevelopInUFraw/DevelopInUFRaw.cs \
+	FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs
+
+RESOURCES = Resources/DevelopInUFRaw.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile.in b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile.in
new file mode 100644
index 0000000..c09df1a
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile.in
@@ -0,0 +1,809 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Tools/FSpot.Tools.DevelopInUFraw
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Tools.DevelopInUFRaw
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_DEVELOPINUFRAW) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	FSpot.Tools.DevelopInUFraw/AbstractDevelopInUFRaw.cs \
+	FSpot.Tools.DevelopInUFraw/DevelopInUFRaw.cs \
+	FSpot.Tools.DevelopInUFraw/DevelopInUFRawBatch.cs
+
+RESOURCES = Resources/DevelopInUFRaw.addin.xml
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Resources/DevelopInUFRaw.addin.xml b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Resources/DevelopInUFRaw.addin.xml
new file mode 100644
index 0000000..679f0dc
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.DevelopInUFraw/Resources/DevelopInUFRaw.addin.xml
@@ -0,0 +1,20 @@
+<Addin namespace="FSpot"
+	id="DevelopInUFraw"
+	version="0.8"
+	compatVersion="0.8"
+	name="DevelopInUFRaw"
+	description="Develop the image in UFRaw, saves the result as a new version\n\nNote: Require ufraw 0.13 or CVS version newer than 2007-09-06 !!!"
+	author="Stephane Delcroix"
+	url="http://f-spot.org/Extensions"
+	category="Tools"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Menus/PhotoPopup">
+		<Command id = "DevelopInUFRaw" _label = "Develop in UFRaw" command_type = "FSpot.Tools.DevelopInUFraw.DevelopInUFRaw" insertbefore="OpenWith"/>
+		<Condition id="PhotoSelection" selection="multiple">
+			<Command id = "DevelopInUFRawBatch" _label = "Batch Develop" command_type = "FSpot.Tools.DevelopInUFraw.DevelopInUFRawBatch" insertbefore="OpenWith"/>
+		</Condition>
+	</Extension>
+</Addin>
diff --git a/src/Extensions/Tools/FSpot.Tools.HashJob/FSpot.Tools.HashJob/HashJob.cs b/src/Extensions/Tools/FSpot.Tools.HashJob/FSpot.Tools.HashJob/HashJob.cs
new file mode 100644
index 0000000..5e5f9c2
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.HashJob/FSpot.Tools.HashJob/HashJob.cs
@@ -0,0 +1,114 @@
+/*
+ * HashJob.cs
+ *
+ * Author(s)
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+
+using Mono.Unix;
+
+using Gtk;
+
+using FSpot;
+using FSpot.Extensions;
+using FSpot.Jobs;
+
+namespace FSpot.Tools.HashJob {
+
+	public class HashJob : ICommand {
+		public void Run (object o, EventArgs e) {
+			HashJobDialog dialog = new HashJobDialog ();  
+			dialog.ShowDialog ();
+
+		}
+	}
+
+	public class HashJobDialog : Dialog 
+	{
+		private Gtk.Label status_label;
+
+		public void ShowDialog ()
+		{ 			
+			// This query is not very fast, but it's a 'one-time' so don't care much...
+			IDataReader reader = FSpot.App.Instance.Database.Database.Query (
+				"SELECT COUNT(*) FROM photos p WHERE EXISTS " +
+					"(SELECT * FROM photo_versions pv WHERE p.id=pv.photo_id AND " +
+					"(pv.import_md5 IS NULL OR pv.import_md5 = ''))");
+			reader.Read ();
+			uint missing_md5 = Convert.ToUInt32 (reader[0]);
+			reader.Close ();
+
+			reader = FSpot.App.Instance.Database.Database.Query (String.Format (
+				"SELECT COUNT(*) FROM jobs WHERE job_type = '{0}' ", typeof(FSpot.Jobs.CalculateHashJob).ToString ()));
+			reader.Read ();
+			uint active_jobs = Convert.ToUInt32 (reader[0]);
+			reader.Close ();
+
+			VBox.Spacing = 6;
+			Label l = new Label (Catalog.GetString ("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."));
+			l.LineWrap = true;
+			VBox.PackStart (l);
+
+			Label l2 = new Label (String.Format (Catalog.GetString ("You currently have {0} photos needing md5 calculation, and {1} pending jobs"),
+				missing_md5, active_jobs));
+			l2.LineWrap = true;
+			VBox.PackStart (l2);
+
+			Button execute = new Button (Stock.Execute);
+			execute.Clicked += HandleExecuteClicked;
+			VBox.PackStart (execute);
+
+			Button stop = new Button (Stock.Stop);
+			stop.Clicked += HandleStopClicked;
+			VBox.PackStart (stop);
+
+			status_label = new Label ();
+			VBox.PackStart (status_label);
+
+			this.AddButton (Catalog.GetString ("_Close"), ResponseType.Close);
+			this.Response += HandleResponse;
+
+			ShowAll ();
+		}
+
+		void HandleResponse (object obj, ResponseArgs args)
+	        {
+			switch(args.ResponseId)
+			{
+				case ResponseType.Close:
+					this.Destroy ();
+					break;
+			}
+	        }
+
+		void HandleExecuteClicked (object o, EventArgs e)
+		{
+			IDataReader reader = FSpot.App.Instance.Database.Database.Query (
+				"SELECT id FROM photos p WHERE EXISTS " +
+					"(SELECT * FROM photo_versions pv WHERE p.id=pv.photo_id AND " +
+					"(pv.import_md5 IS NULL OR pv.import_md5 = '') )");
+			FSpot.App.Instance.Database.Database.BeginTransaction ();
+			while (reader.Read ())
+				FSpot.Jobs.CalculateHashJob.Create (FSpot.App.Instance.Database.Jobs, Convert.ToUInt32 (reader[0]));
+			reader.Close ();
+			FSpot.App.Instance.Database.Database.CommitTransaction ();
+			status_label.Text = Catalog.GetString ("Processing images...");
+		}
+
+		void HandleStopClicked (object o, EventArgs e)
+		{
+			FSpot.App.Instance.Database.Database.Execute (String.Format ("DELETE FROM jobs WHERE job_type = '{0}'", typeof(FSpot.Jobs.CalculateHashJob).ToString ()));
+			status_label.Text = Catalog.GetString ("Stopped");
+		}
+
+	}
+
+}
diff --git a/src/Extensions/Tools/FSpot.Tools.HashJob/Makefile.am b/src/Extensions/Tools/FSpot.Tools.HashJob/Makefile.am
new file mode 100644
index 0000000..72e441d
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.HashJob/Makefile.am
@@ -0,0 +1,9 @@
+ASSEMBLY = FSpot.Tools.HashJob
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_HASHJOB)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Tools.HashJob/HashJob.cs
+RESOURCES = Resources/HashJob.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Tools/FSpot.Tools.HashJob/Makefile.in b/src/Extensions/Tools/FSpot.Tools.HashJob/Makefile.in
new file mode 100644
index 0000000..9c509d5
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.HashJob/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Tools/FSpot.Tools.HashJob
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Tools.HashJob
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_HASHJOB) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Tools.HashJob/HashJob.cs
+RESOURCES = Resources/HashJob.addin.xml
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.HashJob/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.HashJob/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Tools/FSpot.Tools.HashJob/Resources/HashJob.addin.xml b/src/Extensions/Tools/FSpot.Tools.HashJob/Resources/HashJob.addin.xml
new file mode 100644
index 0000000..559cf9c
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.HashJob/Resources/HashJob.addin.xml
@@ -0,0 +1,16 @@
+<Addin namespace="FSpot"
+	id="HashJob"
+	version="0.8"
+	compatVersion="0.8"
+	description="Process your photo collection for duplicate detection"
+	author="Stephane Delcroix"
+	url="http://f-spot.org/Extensions"
+	name="Check for Duplicates"
+	category="Tools">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Menus/Tools">
+		<Command id = "HashDupes" _label = "Check for Duplicates..." command_type = "FSpot.Tools.HashJob.HashJob" />
+	</Extension>
+</Addin>
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
new file mode 100644
index 0000000..77928a8
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs
@@ -0,0 +1,228 @@
+/*
+ * LiveWebGalleryExtension.GalleryRequestHandler.cs
+ *
+ * Author(s):
+ *	Anton Keks  <anton at azib.net>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using System.IO;
+using System.Text;
+using System.Reflection;
+
+using FSpot;
+using FSpot.Core;
+using Mono.Unix;
+
+namespace FSpot.Tools.LiveWebGallery	
+{	
+	public abstract class PhotoAwareRequestHandler : RequestHandler
+	{
+		protected string TagsToString (Photo photo) 
+		{
+			string tags = "";
+			foreach (Tag tag in photo.Tags) {
+				tags += ", " + tag.Name;
+			}
+			return tags.Length > 1 ? tags.Substring (2) : tags;
+		}
+
+	}
+	
+	public abstract class TemplateRequestHandler : PhotoAwareRequestHandler
+	{
+		protected string template;
+		
+		public TemplateRequestHandler (string name)
+		{
+			template = LoadTemplate (name);
+		}
+
+		protected string GetSubTemplate (StringBuilder s, string begin, string end) 
+		{
+			int start_pos = template.IndexOf (begin);
+			string sub = template.Substring (start_pos, template.IndexOf (end, start_pos) - start_pos - 1);
+			s.Replace (sub, "");
+			return sub.Substring (begin.Length, sub.Length - begin.Length);
+		}
+		
+		protected string LoadTemplate (string name)
+		{
+			using (TextReader s = new StreamReader (Assembly.GetCallingAssembly ().GetManifestResourceStream (name))) {
+				return s.ReadToEnd ();
+			}
+		}
+		
+		protected string Escape (string s) {
+			// javascript-proof
+			return s.Replace ("\"", "\\\"");
+		}
+	}
+	
+	public class GalleryRequestHandler : TemplateRequestHandler, ILiveWebGalleryOptions
+	{			
+		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; }
+		}
+
+		private bool limit_max_photos = true;
+		public bool LimitMaxPhotos {
+			get { return limit_max_photos; }
+			set { limit_max_photos = value; }
+		}
+
+		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; }
+		}
+
+		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") 
+		{
+			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"));
+		}
+		
+		public override void Handle (string requested, Stream stream)
+		{
+			Photo[] photos = GetChosenPhotos ();
+			
+			StringBuilder s = new StringBuilder (4096);
+			s.Append (template);
+			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", tagging_allowed ? Escape (editable_tag.Name) : "");
+			
+			string photo_template = GetSubTemplate (s, "BEGIN_PHOTO", "END_PHOTO");
+			StringBuilder photos_s = new StringBuilder (4096);
+			
+			num_photos = 0;
+			foreach (Photo photo in photos) {
+				photos_s.Append (PreparePhoto (photo_template, photo));
+				
+				if (++num_photos >= max_photos && limit_max_photos)
+					break;
+			}
+			s.Replace ("END_PHOTO", photos_s.ToString ());
+			
+			SendHeadersAndStartContent(stream, "Content-Type: text/html; charset=UTF-8");
+			SendLine (stream, s.ToString ());
+			
+			stats.BytesSent += s.Length;
+			stats.GalleryViews++;
+		}
+		
+		private Photo[] GetChosenPhotos () 
+		{
+			switch (query_type) {
+			case QueryType.ByTag:
+				return App.Instance.Database.Photos.Query (new Tag[] {query_tag});
+			case QueryType.CurrentView:
+				return App.Instance.Organizer.Query.Photos;
+			case QueryType.Selected:
+			default:
+				return App.Instance.Organizer.SelectedPhotos ();
+			}
+		}
+		
+		private string QueryTypeToString ()
+		{
+			switch (query_type) {
+			case QueryType.ByTag:
+				return query_tag.Name;
+			case QueryType.CurrentView:
+				return Catalog.GetString ("Current View");
+			case QueryType.Selected:
+			default:
+				return Catalog.GetString ("Selected");
+			}
+		}
+				
+		private string PreparePhoto (string template, Photo photo) 
+		{
+			string photo_s = template.Replace ("PHOTO_ID", photo.Id.ToString ())
+									 .Replace ("PHOTO_NAME", Escape (photo.Name))
+									 .Replace ("PHOTO_DESCRIPTION", Escape (photo.Description))
+									 .Replace ("VERSION_NAME", Escape (photo.DefaultVersion.Name));
+			string tags = TagsToString(photo);
+			photo_s = photo_s.Replace ("PHOTO_TAGS", Escape (tags));
+			
+			return photo_s;
+		}
+	}
+	
+	public class PingRequestHandler : RequestHandler
+	{
+		public override void Handle (string requested, Stream stream)
+		{
+			SendHeadersAndStartContent (stream);
+		}	
+	}
+	
+	public class TagAddRemoveRequestHandler : PhotoAwareRequestHandler
+	{
+		private ILiveWebGalleryOptions options;	
+		
+		public TagAddRemoveRequestHandler (ILiveWebGalleryOptions options) 
+		{
+			this.options = options;
+		}
+		
+		public override void Handle (string requested, Stream stream)
+		{
+			bool addTag = requested.StartsWith ("add");
+			if (!addTag && !requested.StartsWith ("remove")) {
+				SendError (stream, "400 Bad request " + requested);
+				return;
+			}
+			int slash_pos = requested.IndexOf ('/');
+			requested = requested.Substring (slash_pos + 1);
+			slash_pos = requested.IndexOf ('/');
+			uint photo_id = uint.Parse (requested.Substring (0, slash_pos));
+			string tag_name = requested.Substring (slash_pos + 1);
+			
+			if (!options.TaggingAllowed || !options.EditableTag.Name.Equals (tag_name)) {
+				SendError (stream, "403 Forbidden to change tag " + tag_name);
+				return;
+			}
+			
+			Photo photo = App.Instance.Database.Photos.Get (photo_id);
+			if (addTag)
+				photo.AddTag (options.EditableTag);
+			else
+				photo.RemoveTag (options.EditableTag);
+			App.Instance.Database.Photos.Commit (photo);
+			
+			SendHeadersAndStartContent (stream, "Content-type: text/plain;charset=UTF-8");
+			SendLine (stream, TagsToString (photo));
+		}		
+	}
+}
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
new file mode 100644
index 0000000..45efb15
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGallery.cs
@@ -0,0 +1,108 @@
+/*
+ * LiveWebGalleryExtension.LiveWebGallery.cs
+ *
+ * Author(s):
+ *	Anton Keks  <anton at azib.net>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using System.IO;
+using System.Net;
+using System.Collections.Generic;
+
+using Gtk;
+
+using FSpot;
+using FSpot.Core;
+using FSpot.Extensions;
+using FSpot.Utils;
+using FSpot.Query;
+using FSpot.UI.Dialog;
+using Mono.Unix;
+
+namespace FSpot.Tools.LiveWebGallery
+{
+	public class LiveWebGallery : ICommand
+	{
+		private static SimpleWebServer web_server;
+		private static ILiveWebGalleryOptions options;
+		private static LiveWebGalleryStats stats;
+		private LiveWebGalleryDialog dialog;
+		
+		public LiveWebGallery () 
+		{
+		}
+
+		public void Run (object o, EventArgs e)
+		{
+			if (web_server == null) {
+				stats = new LiveWebGalleryStats ();
+				RequestHandler gallery = new GalleryRequestHandler (stats);
+				options = gallery as ILiveWebGalleryOptions;
+				
+				web_server = new SimpleWebServer ();
+				web_server.Stats = stats;
+				web_server.RegisterHandler ("", gallery);
+				web_server.RegisterHandler ("gallery", gallery);
+				web_server.RegisterHandler ("ui", new ResourceRequestHandler ());
+				web_server.RegisterHandler ("ping", new PingRequestHandler ());
+				web_server.RegisterHandler ("photo", new PhotoRequestHandler (stats));
+				web_server.RegisterHandler ("thumb", new ThumbnailRequestHandler (stats));
+				web_server.RegisterHandler ("tag", new TagAddRemoveRequestHandler (options));
+			}
+
+			dialog = new LiveWebGalleryDialog (web_server, options, stats);
+			dialog.Response += HandleResponse;
+			dialog.ShowAll ();
+		}
+
+		void HandleResponse (object obj, ResponseArgs args) 
+		{
+			dialog.Destroy ();
+		}
+	}
+	
+	public enum QueryType {ByTag, CurrentView, Selected}
+
+	public interface ILiveWebGalleryOptions
+	{
+		QueryType QueryType {get; set;}
+		Tag QueryTag {get; set;}
+		bool LimitMaxPhotos {get; set;}
+		int MaxPhotos {get; set;}
+		bool TaggingAllowed {get; set;}
+		Tag EditableTag {get; set;}
+	}
+	
+	public class LiveWebGalleryStats : IWebStats
+	{
+		public event EventHandler StatsChanged;
+		
+		private int gallery_views;
+		public int GalleryViews {
+			get { return gallery_views; }
+			set { gallery_views = value; StatsChanged(this, null); }
+		}
+		
+		private int photo_views;
+		public int PhotoViews {
+			get { return photo_views; }
+			set { photo_views = value; StatsChanged(this, null); }
+		}
+		
+		private IPAddress last_ip;
+		public IPAddress LastIP {
+			get { return last_ip; }
+			set { last_ip = value; StatsChanged(this, null); }
+		}
+		
+		public int BytesSent;
+
+		public void IncomingRequest (IPAddress ip)
+		{
+			LastIP = ip;
+		}
+	}
+}
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
new file mode 100644
index 0000000..2508982
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs
@@ -0,0 +1,203 @@
+/*
+ * LiveWebGalleryExtension.LiveWebGalleryDialog.cs
+ *
+ * Author(s):
+ *	Anton Keks  <anton at azib.net>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using System.Net;
+using System.Reflection;
+using FSpot;
+using FSpot.Core;
+using FSpot.Extensions;
+using FSpot.Query;
+using Gtk;
+using Mono.Unix;
+using Hyena;
+
+namespace FSpot.Tools.LiveWebGallery
+{
+	internal class LiveWebGalleryDialog : FSpot.UI.Dialog.BuilderDialog
+	{
+		[GtkBeans.Builder.Object] Gtk.LinkButton url_button;
+		[GtkBeans.Builder.Object] Gtk.ToggleButton activate_button;
+		[GtkBeans.Builder.Object] Gtk.Button copy_button;
+		[GtkBeans.Builder.Object] Gtk.Label stats_label;
+		[GtkBeans.Builder.Object] Gtk.RadioButton current_view_radio;
+		[GtkBeans.Builder.Object] Gtk.RadioButton tagged_radio;
+		[GtkBeans.Builder.Object] Gtk.RadioButton selected_radio;
+		[GtkBeans.Builder.Object] Gtk.Button tag_button;
+		[GtkBeans.Builder.Object] Gtk.CheckButton limit_checkbox;
+		[GtkBeans.Builder.Object] Gtk.SpinButton limit_spin;
+		[GtkBeans.Builder.Object] Gtk.CheckButton allow_tagging_checkbox;
+		[GtkBeans.Builder.Object] Gtk.Button tag_edit_button;
+
+		private SimpleWebServer server;
+		private ILiveWebGalleryOptions options;
+		private LiveWebGalleryStats stats;
+		private IPAddress last_ip;
+		private string last_client;
+		
+		public LiveWebGalleryDialog (SimpleWebServer server, ILiveWebGalleryOptions options, LiveWebGalleryStats stats)
+			: base (Assembly.GetExecutingAssembly (), "LiveWebGallery.ui", "live_web_gallery_dialog")
+		{
+			this.server = server;
+			this.options = options;
+			this.stats = stats;
+			Modal = false;
+
+			activate_button.Active = server.Active;
+			UpdateGalleryURL ();
+			limit_checkbox.Active = options.LimitMaxPhotos;
+			limit_spin.Sensitive = options.LimitMaxPhotos;
+			limit_spin.Value = options.MaxPhotos;
+			UpdateQueryRadios ();
+			HandleQueryTagSelected (options.QueryTag != null ? options.QueryTag : App.Instance.Database.Tags.GetTagById(1));
+			allow_tagging_checkbox.Active = options.TaggingAllowed;
+			tag_edit_button.Sensitive = options.TaggingAllowed;			
+			HandleEditableTagSelected (options.EditableTag != null ? options.EditableTag : App.Instance.Database.Tags.GetTagById(3));
+			HandleStatsChanged (null, null);
+						
+			activate_button.Toggled += HandleActivated;
+			copy_button.Clicked +=HandleCopyClicked; 
+			current_view_radio.Toggled += HandleRadioChanged;
+			tagged_radio.Toggled += HandleRadioChanged;
+			selected_radio.Toggled += HandleRadioChanged;
+			tag_button.Clicked += HandleQueryTagClicked;
+			limit_checkbox.Toggled += HandleLimitToggled; 
+			limit_spin.ValueChanged += HandleLimitValueChanged;
+			allow_tagging_checkbox.Toggled += HandleAllowTaggingToggled;
+			tag_edit_button.Clicked += HandleTagForEditClicked;
+			stats.StatsChanged += HandleStatsChanged;
+		}
+
+		void HandleCopyClicked(object sender, EventArgs e)
+		{
+			Clipboard.Get(Gdk.Atom.Intern("CLIPBOARD", true)).Text = url_button.Uri;
+		}
+		
+		void HandleStatsChanged (object sender, EventArgs e)
+		{
+			ThreadAssist.ProxyToMain (() => {
+				if (last_ip == null || !last_ip.Equals (stats.LastIP)) {
+					last_ip = stats.LastIP;
+					try {
+						last_client = Dns.GetHostEntry (last_ip).HostName;
+					}
+					catch (Exception) {
+						last_client = last_ip != null ? last_ip.ToString () : Catalog.GetString ("none");
+					}
+				}
+				stats_label.Text = string.Format(Catalog.GetString (" Gallery: {0},  Photos: {1},  Last client: {3}"), 
+				                                 stats.GalleryViews, stats.PhotoViews, stats.BytesSent / 1024, last_client);
+			});
+		}
+
+		void HandleLimitToggled (object sender, EventArgs e)
+		{
+			options.LimitMaxPhotos = limit_checkbox.Active;
+			limit_spin.Sensitive = limit_checkbox.Active;
+			HandleLimitValueChanged (sender, e);
+		}
+
+		void HandleLimitValueChanged (object sender, EventArgs e)
+		{
+			options.MaxPhotos = limit_spin.ValueAsInt;
+		}
+
+		void HandleRadioChanged (object o, EventArgs e)
+		{
+			tag_button.Sensitive = tagged_radio.Active;
+			if (tagged_radio.Active)
+				options.QueryType = QueryType.ByTag;
+			else if (current_view_radio.Active)
+				options.QueryType = QueryType.CurrentView;
+			else
+				options.QueryType = QueryType.Selected;
+		}
+		
+		void UpdateQueryRadios () 
+		{
+			switch (options.QueryType)
+			{
+			case QueryType.ByTag:
+				tagged_radio.Active = true;
+				break;
+			case QueryType.CurrentView:
+				current_view_radio.Active = true;
+				break;
+			case QueryType.Selected:
+			default:
+				selected_radio.Active = true;
+				break;
+			}
+			HandleRadioChanged (null, null);
+		}
+		
+		void HandleActivated (object o, EventArgs e)
+		{
+			if (activate_button.Active)
+				server.Start ();
+			else
+				server.Stop ();
+			
+			UpdateGalleryURL ();
+		}
+		
+		void UpdateGalleryURL () 
+		{
+			url_button.Sensitive = server.Active;
+			copy_button.Sensitive = server.Active;
+			if (server.Active) {
+				url_button.Uri = "http://" + server.HostPort;
+				url_button.Label = url_button.Uri;
+			} else {
+				url_button.Label = Catalog.GetString ("Gallery is inactive");
+			}
+		}
+		
+		void ShowTagMenuFor (Widget widget, TagMenu.TagSelectedHandler handler) 
+		{
+			TagMenu tag_menu = new TagMenu (null, App.Instance.Database.Tags);
+			tag_menu.TagSelected += handler;
+			tag_menu.Populate ();
+			int x, y;
+			GetPosition (out x, out y);
+			x += widget.Allocation.X; y += widget.Allocation.Y;
+			tag_menu.Popup (null, null, delegate (Menu menu, out int x_, out int y_, out bool push_in) {x_ = x; y_ = y; push_in = true;}, 0, 0);
+		}
+				
+		void HandleQueryTagClicked (object sender, EventArgs e)
+		{
+			ShowTagMenuFor (tag_button, HandleQueryTagSelected);
+		}
+
+		void HandleQueryTagSelected (Tag tag)
+		{
+			options.QueryTag = tag;
+			tag_button.Label = tag.Name;
+			tag_button.Image = tag.Icon != null ? new Gtk.Image (PixbufUtils.ScaleDown (tag.Icon, 16, 16)) : null;
+		}
+		
+		void HandleAllowTaggingToggled (object sender, EventArgs e)
+		{
+			tag_edit_button.Sensitive = allow_tagging_checkbox.Active;
+			options.TaggingAllowed = allow_tagging_checkbox.Active;
+		}
+		
+		void HandleTagForEditClicked (object sender, EventArgs e)
+		{
+			ShowTagMenuFor (tag_edit_button, HandleEditableTagSelected);
+		}
+		
+		void HandleEditableTagSelected (Tag tag)
+		{
+			options.EditableTag = tag;
+			tag_edit_button.Label = tag.Name;
+			tag_edit_button.Image = tag.Icon != null ? new Gtk.Image (PixbufUtils.ScaleDown (tag.Icon, 16, 16)) : null;
+		}
+	}
+}
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
new file mode 100644
index 0000000..6d50f08
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/PhotoRequestHandler.cs
@@ -0,0 +1,93 @@
+/*
+ * LiveWebGalleryExtension.PhotoRequestHandler.cs
+ *
+ * Author(s):
+ *	Anton Keks  <anton at azib.net>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using System.IO;
+using System.Text;
+
+using FSpot;
+using FSpot.Filters;
+using FSpot.Utils;
+using Hyena;
+
+namespace FSpot.Tools.LiveWebGallery
+{	
+	public class PhotoRequestHandler : RequestHandler
+	{	
+		private LiveWebGalleryStats stats;
+		
+		public PhotoRequestHandler (LiveWebGalleryStats stats)
+		{
+			this.stats = stats;
+		}
+		
+		public override void Handle (string requested, Stream stream)
+		{
+			uint photo_id = uint.Parse (requested);
+			Photo photo = App.Instance.Database.Photos.Get (photo_id);
+			
+			SendImage (photo, stream);
+					}
+		
+		protected virtual void SendImage (Photo photo, Stream stream) 
+		{
+			string path = photo.DefaultVersion.Uri.LocalPath;
+			FileInfo file_info = new FileInfo(path);
+			if (!file_info.Exists) {
+				SendError (stream, "404 The file is not on the disk");
+				return;
+			}
+
+			FilterSet filters = new FilterSet ();
+			filters.Add (new JpegFilter ());
+			filters.Add (new ResizeFilter (1600));
+
+			using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
+				filters.Convert (request);
+				file_info = new FileInfo (request.Current.LocalPath);
+				SendFile (file_info, photo, stream);
+			}
+
+			if (stats != null)
+				stats.PhotoViews++;
+		}
+		
+		protected void SendFile (FileInfo file, Photo photo, Stream dest)
+		{
+			stats.BytesSent += (int)file.Length;			
+			Log.DebugFormat ("Sending {0}, {1} kb", file.FullName, file.Length / 1024);
+			SendHeadersAndStartContent(dest, "Content-Type: " + MimeTypeForExt (file.Extension),
+											 "Content-Length: " + file.Length,
+								 "Last-Modified: " + photo.Time.ToString ("r"));
+			using (Stream src = file.OpenRead ()) {
+				byte[] buf = new byte[10240];
+				int read;
+				while((read = src.Read(buf, 0, buf.Length)) != 0) {
+					dest.Write (buf, 0, read);
+				}
+			}
+		}
+	}
+	
+	public class ThumbnailRequestHandler : PhotoRequestHandler
+	{	
+		public ThumbnailRequestHandler (LiveWebGalleryStats stats) 
+			: base (stats) {}
+		
+		protected override void SendImage (Photo photo, Stream dest) 
+		{
+			Gdk.Pixbuf thumb = XdgThumbnailSpec.LoadThumbnail (photo.DefaultVersion.Uri, ThumbnailSize.Large);
+			byte[] buf = thumb.SaveToBuffer ("png");
+			SendHeadersAndStartContent(dest, "Content-Type: " + MimeTypeForExt (".png"),
+											 "Content-Length: " + buf.Length,
+								 "Last-Modified: " + photo.Time.ToString ("r"));
+			dest.Write (buf, 0, buf.Length);
+		}
+	}
+}
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
new file mode 100644
index 0000000..499115b
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/ResourceRequestHandler.cs
@@ -0,0 +1,36 @@
+/*
+ * LiveWebGalleryExtension.ResourceRequestHandler.cs
+ *
+ * Author(s):
+ *	Anton Keks  <anton at azib.net>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using System.IO;
+using System.Text;
+using System.Reflection;
+
+using FSpot;
+
+namespace FSpot.Tools.LiveWebGallery
+{	
+	public class ResourceRequestHandler : RequestHandler
+	{	
+		public override void Handle (string requested, Stream stream)
+		{
+			string resource = requested;
+			using (Stream source = Assembly.GetCallingAssembly ().GetManifestResourceStream (resource)) {
+				string ext = Path.GetExtension (resource);				
+				SendHeadersAndStartContent(stream, "Content-Type: " + MimeTypeForExt (ext),
+									   "Last-Modified: Fri, 21 Oct 2005 04:58:08 GMT");	// for caching
+				byte[] buf = new byte[10240];
+				int read;
+				while((read = source.Read(buf, 0, buf.Length)) != 0) {
+					stream.Write (buf, 0, read);
+				}
+			}
+		}
+	}	
+}
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
new file mode 100644
index 0000000..81c4b1b
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/FSpot.Tools.LiveWebGallery/SimpleWebServer.cs
@@ -0,0 +1,220 @@
+/*
+ * LiveWebGalleryExtension.SimpleWebServer.cs
+ *
+ * Author(s):
+ *	Anton Keks  <anton at azib.net>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+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
+{		
+	public class SimpleWebServer : IService
+	{
+		private Thread server_thread;
+		private TcpListener listener;
+		private Dictionary<string, RequestHandler> handlers = new Dictionary<string, RequestHandler> ();
+		
+		private IWebStats stats;
+		public IWebStats Stats {
+			set { stats = value; }
+		}
+
+		public bool Active {
+			get { return server_thread != null && server_thread.IsAlive; }
+		}
+		
+		public string HostPort {
+			get {
+				string host = Dns.GetHostName ();
+				// TODO: add support for .local hostnames
+				foreach (IPAddress addr in Dns.GetHostAddresses(host)) {
+					if (!IPAddress.IsLoopback (addr)) {
+						host = addr.ToString ();
+					}
+				}
+				return host + ":" + (listener.LocalEndpoint as IPEndPoint).Port;
+			}
+		}
+		
+		public void RegisterHandler (string request_prefix, RequestHandler handler) {
+			handlers.Add (request_prefix, handler);
+		}
+
+		public bool Start () {
+			try {
+				listener = new TcpListener (IPAddress.Any, 8080);
+				listener.Start ();
+			}			
+			catch (SocketException) {
+				// address already in use? choose a random port then
+				listener = new TcpListener (IPAddress.Any, 0);
+				listener.Start ();
+			}
+			server_thread = new Thread (new ThreadStart(ServerLoop));
+			server_thread.Start ();
+			return true;
+		}
+		
+		public bool Stop () {
+			server_thread.Abort ();
+			server_thread.Join ();
+			listener.Stop ();
+			return true;
+		}
+
+		public void ServerLoop () 
+		{
+			Log.Information ("Listening on " + listener.LocalEndpoint);
+			
+			while (true) {
+				TcpClient client = listener.AcceptTcpClient ();
+				if (client.Connected) {
+					if (stats != null)
+						stats.IncomingRequest ((client.Client.RemoteEndPoint as IPEndPoint).Address);
+
+					RequestProcessor parser = new RequestProcessor (client, handlers);
+					new Thread (new ThreadStart (parser.Process)).Start ();
+				}
+			}
+		}		
+	
+		class RequestProcessor
+		{
+			private TcpClient client;
+			private Dictionary<string, RequestHandler> handlers;
+			
+			public RequestProcessor (TcpClient client, Dictionary<string, RequestHandler> handlers) {
+				this.client = client;						
+				this.handlers = handlers;
+			}
+			
+			public void Process () {			
+				using (client)  {
+					NetworkStream stream = client.GetStream ();
+					TextReader reader = new StreamReader (stream, Encoding.UTF8);
+					
+					string line = reader.ReadLine ();
+					if (line == null)
+						return;
+					
+					Log.Debug ("Incoming request from " + (client.Client.RemoteEndPoint as IPEndPoint).Address + ": " + line);
+
+					string request_method = null, request_string = null;
+					int space_pos = line.IndexOf (' ');
+					if (space_pos > 0) {
+						request_method = line.Substring (0, space_pos);
+						request_string = line.Substring (space_pos + 1, line.LastIndexOf (' ') - space_pos - 1);				
+					}
+					while (!string.IsNullOrEmpty(line = reader.ReadLine ())) {
+						// process other request headers here if needed
+					}
+					
+					using (stream) {						
+						if (!"GET".Equals (request_method)) { 
+							RequestHandler.SendError (stream, "400 Bad Request");
+							return;
+						}
+						
+						if (request_string.StartsWith ("/"))
+							request_string = request_string.Substring (1);
+						
+						string request_prefix = request_string;
+						int slash_pos = request_string.IndexOf ("/");
+						if (slash_pos >= 0) 
+							request_prefix = request_string.Substring (0, slash_pos);						
+					
+						if (!handlers.ContainsKey (request_prefix)) {
+							RequestHandler.SendError (stream, "404 No handler for \"" + request_string + "\"");
+							return;
+						}
+
+						try {
+							handlers[request_prefix].Handle (request_string.Substring (slash_pos+1), stream);
+						}
+						catch (Exception e) {
+							Log.Exception (e);
+							try {
+								RequestHandler.SendError (stream, "500 " + e.Message);
+							}
+							catch (IOException) {
+								// ignore already closed connections
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	public abstract class RequestHandler
+	{		
+		public abstract void Handle (string requested, Stream stream);
+
+		public static void SendLine (Stream stream, string header) {
+			byte[] buf = Encoding.UTF8.GetBytes (header + "\r\n");
+			stream.Write (buf, 0, buf.Length);				
+		}
+		
+		public static void SendStatus (Stream stream, string status) {
+			SendLine (stream, "HTTP/1.0 " + status + "\r\nServer: F-Spot");
+		}
+
+		public static void SendError (Stream stream, string error) {
+			SendStatus (stream, error);
+			StartContent (stream);
+			SendLine (stream, error);  
+		}
+
+		public static void StartContent (Stream stream) {
+			// sends the last empty newline after headers
+			SendLine (stream, "");
+		}
+		
+		public static void SendHeadersAndStartContent (Stream stream, params string[] headers) {
+			SendStatus (stream, "200 OK");
+			foreach (string header in headers) {
+				SendLine (stream, header);
+			}
+			StartContent (stream);
+		}
+		
+		public string MimeTypeForExt (string ext)
+		{
+			switch (ext.ToLower ()) {
+			case ".jpg":
+			case ".jpeg":
+				return "image/jpeg";
+			case ".png":
+				return "image/png";
+			case ".gif":
+				return "image/gif";
+			case ".js":
+				return "text/javascript";
+			case ".css":
+				return "text/css";
+			default:
+				throw new Exception ("Unknown file type: " + ext);
+			}
+		}
+
+	}
+	
+	public interface IWebStats
+	{
+		void IncomingRequest (IPAddress addr);
+	}
+}
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile.am b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile.am
new file mode 100644
index 0000000..769cf80
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile.am
@@ -0,0 +1,22 @@
+ASSEMBLY = FSpot.Tools.LiveWebGallery
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_LIVEWEBGALLERY)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs \
+	FSpot.Tools.LiveWebGallery/LiveWebGallery.cs \
+	FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs \
+	FSpot.Tools.LiveWebGallery/PhotoRequestHandler.cs \
+	FSpot.Tools.LiveWebGallery/ResourceRequestHandler.cs \
+	FSpot.Tools.LiveWebGallery/SimpleWebServer.cs
+
+RESOURCES =  \
+	Resources/LiveWebGallery.addin.xml \
+	Resources/ui/empty.png \
+	Resources/ui/f-spot.css \
+	Resources/ui/f-spot.js \
+	Resources/ui/gallery.html \
+	Resources/ui/LiveWebGallery.ui
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile.in b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile.in
new file mode 100644
index 0000000..cb6e102
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile.in
@@ -0,0 +1,819 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Tools/FSpot.Tools.LiveWebGallery
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Tools.LiveWebGallery
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_LIVEWEBGALLERY) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	FSpot.Tools.LiveWebGallery/GalleryRequestHandler.cs \
+	FSpot.Tools.LiveWebGallery/LiveWebGallery.cs \
+	FSpot.Tools.LiveWebGallery/LiveWebGalleryDialog.cs \
+	FSpot.Tools.LiveWebGallery/PhotoRequestHandler.cs \
+	FSpot.Tools.LiveWebGallery/ResourceRequestHandler.cs \
+	FSpot.Tools.LiveWebGallery/SimpleWebServer.cs
+
+RESOURCES = \
+	Resources/LiveWebGallery.addin.xml \
+	Resources/ui/empty.png \
+	Resources/ui/f-spot.css \
+	Resources/ui/f-spot.js \
+	Resources/ui/gallery.html \
+	Resources/ui/LiveWebGallery.ui
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/LiveWebGallery.addin.xml b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/LiveWebGallery.addin.xml
new file mode 100644
index 0000000..54c617a
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/LiveWebGallery.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	id="LiveWebGallery"
+	name="LiveWebGallery"
+	version="0.8"
+	compatVersion="0.8"
+	description="Share photos with other people on the same network via Web Browser"
+	author="Anton Keks"
+	url="http://blog.azib.net/2009/08/announcing-f-spot-live-web-gallery.html"
+	category="Tools"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Menus/Tools">
+		<Command id = "LiveWebGallery" _label = "Live Web Gallery" command_type = "FSpot.Tools.LiveWebGallery.LiveWebGallery" />
+	</Extension>
+</Addin>
diff --git a/extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui
similarity index 100%
rename from extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui
rename to src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/LiveWebGallery.ui
diff --git a/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/empty.png b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/empty.png
new file mode 100644
index 0000000..49b383b
Binary files /dev/null and b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/empty.png differ
diff --git a/extensions/Tools/LiveWebGallery/ui/f-spot.css b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/f-spot.css
similarity index 100%
rename from extensions/Tools/LiveWebGallery/ui/f-spot.css
rename to src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/f-spot.css
diff --git a/extensions/Tools/LiveWebGallery/ui/f-spot.js b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/f-spot.js
similarity index 100%
rename from extensions/Tools/LiveWebGallery/ui/f-spot.js
rename to src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/f-spot.js
diff --git a/extensions/Tools/LiveWebGallery/ui/gallery.html b/src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/gallery.html
similarity index 100%
rename from extensions/Tools/LiveWebGallery/ui/gallery.html
rename to src/Extensions/Tools/FSpot.Tools.LiveWebGallery/Resources/ui/gallery.html
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
new file mode 100644
index 0000000..660f8b9
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDb.cs
@@ -0,0 +1,323 @@
+/*
+ * FSpot.MergeDb.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+
+using Gtk;
+
+using FSpot;
+using FSpot.Core;
+using FSpot.Database;
+using FSpot.Extensions;
+using FSpot.Query;
+using FSpot.UI.Dialog;
+using Mono.Unix;
+using Hyena;
+using Hyena.Widgets;
+
+namespace FSpot.Tools.MergeDb
+{
+	public class MergeDb : ICommand
+	{
+
+		Db from_db;
+		Db to_db;
+		Roll [] new_rolls;
+		MergeDbDialog mdd;
+
+		Dictionary<uint, Tag> tag_map; //Key is a TagId from from_db, Value is a Tag from to_db
+		Dictionary<uint, uint> roll_map;
+
+		public void Run (object o, EventArgs e)
+		{
+			from_db = new Db ();
+			to_db = App.Instance.Database;
+
+			//ShowDialog ();
+			mdd = new MergeDbDialog (this);
+			mdd.FileChooser.FileSet += HandleFileSet;
+			mdd.Dialog.Response += HandleResponse;
+			mdd.ShowAll ();
+		}
+
+		internal Db FromDb {
+			get { return from_db; }
+		}
+
+		void HandleFileSet (object o, EventArgs e)
+		{
+			try {
+				string tempfilename = System.IO.Path.GetTempFileName ();
+				System.IO.File.Copy (mdd.FileChooser.Filename, tempfilename, true);
+
+				from_db.Init (tempfilename, true);
+
+				FillRolls ();
+				mdd.Rolls = new_rolls;
+
+				mdd.SetSensitive ();
+
+			} catch (Exception ex) {
+				string msg = Catalog.GetString ("Error opening the selected file");
+				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);
+				md.Run ();
+				md.Destroy ();
+
+				Log.Exception (ex);
+			}
+		}
+
+		void FillRolls ()
+		{
+			List<Roll> from_rolls = new List<Roll> (from_db.Rolls.GetRolls ());
+			Roll [] to_rolls = to_db.Rolls.GetRolls ();
+			foreach (Roll tr in to_rolls)
+				foreach (Roll fr in from_rolls.ToArray ())
+					if (tr.Time == fr.Time)
+						from_rolls.Remove (fr);
+			new_rolls = from_rolls.ToArray ();
+
+		}
+
+		void HandleResponse (object obj, ResponseArgs args) {
+			if (args.ResponseId == ResponseType.Accept) {
+				PhotoQuery query = new PhotoQuery (from_db.Photos);
+				query.RollSet = mdd.ActiveRolls == null ? null : new RollSet (mdd.ActiveRolls);
+				DoMerge (query, mdd.ActiveRolls, mdd.Copy);
+			}
+			mdd.Dialog.Destroy ();
+		}
+
+
+		public static void Merge (string path, Db to_db)
+		{
+			Log.WarningFormat ("Will merge db {0} into main f-spot db {1}", path, FSpot.Core.Global.BaseDirectory + "/photos.db" );
+			Db from_db = new Db ();
+			from_db.Init (path, true);
+			//MergeDb mdb = new MergeDb (from_db, to_db);
+
+		}
+
+		void DoMerge (PhotoQuery query, Roll [] rolls, bool copy)
+		{
+			tag_map = new Dictionary<uint, Tag> ();
+			roll_map = new Dictionary<uint, uint> ();
+
+			Log.Warning ("Merging tags");
+			MergeTags (from_db.Tags.RootCategory);
+
+			Log.Warning ("Creating the rolls");
+			CreateRolls (rolls);
+
+			Log.Warning ("Importing photos");
+			ImportPhotos (query, copy);
+
+		}
+
+		void MergeTags (Tag tag_to_merge)
+		{
+			TagStore from_store = from_db.Tags;
+			TagStore to_store = to_db.Tags;
+
+			if (tag_to_merge != from_store.RootCategory) { //Do not merge RootCategory
+				Tag dest_tag = to_store.GetTagByName (tag_to_merge.Name);
+				if (dest_tag == null) {
+					Category parent = (tag_to_merge.Category == from_store.RootCategory) ?
+							to_store.RootCategory :
+							to_store.GetTagByName (tag_to_merge.Category.Name) as Category;
+					dest_tag = to_store.CreateTag (parent, tag_to_merge.Name, false);
+					//FIXME: copy the tag icon and commit
+				}
+				tag_map [tag_to_merge.Id] = dest_tag;
+			}
+
+			if (!(tag_to_merge is Category))
+				return;
+
+			foreach (Tag t in (tag_to_merge as Category).Children)
+				MergeTags (t);
+		}
+
+		void CreateRolls (Roll [] rolls)
+		{
+			if (rolls == null)
+				rolls = from_db.Rolls.GetRolls ();
+			RollStore from_store = from_db.Rolls;
+			RollStore to_store = to_db.Rolls;
+
+			foreach (Roll roll in rolls) {
+				if (from_store.PhotosInRoll (roll) == 0)
+					continue;
+				roll_map [roll.Id] = (to_store.Create (roll.Time).Id);
+			}
+		}
+
+		void ImportPhotos (PhotoQuery query, bool copy)
+		{
+			foreach (Photo p in query.Photos)
+				ImportPhoto (p, copy);
+		}
+
+		Dictionary<string, string> path_map = null;
+		Dictionary<string, string> PathMap {
+			get {
+				if (path_map == null)
+					path_map = new Dictionary<string, string> ();
+				return path_map;
+			}
+		}
+
+		void ImportPhoto (Photo photo, bool copy)
+		{
+			Log.WarningFormat ("Importing {0}", photo.Name);
+			PhotoStore to_store = to_db.Photos;
+
+			string photo_path = photo.VersionUri (Photo.OriginalVersionId).AbsolutePath;
+
+			while (!System.IO.File.Exists (photo_path)) {
+				Log.Debug ("Not found, trying the mappings...");
+				foreach (string key in PathMap.Keys) {
+					string path = photo_path;
+					path = path.Replace (key, PathMap [key]);
+					Log.DebugFormat ("Replaced path {0}", path);
+					if (System.IO.File.Exists (path)) {
+						photo_path = path;
+						break;;
+					}
+				}
+
+				if (System.IO.File.Exists (photo_path)) {
+					Log.Debug ("Exists!!!");
+					continue;
+				}
+
+				string [] parts = photo_path.Split (new char[] {'/'});
+				if (parts.Length > 6) {
+					string folder = String.Join ("/", parts, 0, parts.Length - 4);
+					PickFolderDialog pfd = new PickFolderDialog (mdd.Dialog, folder);
+					string new_folder = pfd.Run ();
+					pfd.Dialog.Destroy ();
+					if (new_folder == null) //Skip
+						return;
+					Log.DebugFormat ("{0} maps to {1}", folder, new_folder);
+
+					PathMap[folder] = new_folder;
+
+				} else
+					Log.Debug ("point me to the file");
+				Log.DebugFormat ("FNF: {0}", photo_path);
+
+			}
+
+			string destination;
+			Photo newp;
+
+			if (copy)
+				destination = FindImportDestination (new SafeUri (photo_path), photo.Time).AbsolutePath;
+			else
+				destination = photo_path;
+			var dest_uri = new SafeUri (photo_path);
+
+			photo.DefaultVersionId = 1;
+			photo.DefaultVersion.Uri = dest_uri;
+
+			if (photo.DefaultVersion.ImportMD5 == String.Empty) {
+				(photo.DefaultVersion as PhotoVersion).ImportMD5 = HashUtils.GenerateMD5 (photo.DefaultVersion.Uri);
+			}
+
+			if (photo_path != destination) {
+				System.IO.File.Copy (photo_path, destination);
+
+				try {
+					File.SetAttributes (destination, File.GetAttributes (destination) & ~FileAttributes.ReadOnly);
+					DateTime create = File.GetCreationTime (photo_path);
+					File.SetCreationTime (destination, create);
+					DateTime mod = File.GetLastWriteTime (photo_path);
+					File.SetLastWriteTime (destination, mod);
+				} catch (IOException) {
+					// we don't want an exception here to be fatal.
+				}
+			}
+
+			newp = to_store.CreateFrom (photo, roll_map [photo.RollId]);
+
+			if (newp == null)
+				return;
+
+			foreach (Tag t in photo.Tags) {
+				Log.WarningFormat ("Tagging with {0}", t.Name);
+				newp.AddTag (tag_map [t.Id]);
+			}
+
+			foreach (uint version_id in photo.VersionIds)
+				if (version_id != Photo.OriginalVersionId) {
+					PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
+					uint newv = newp.AddVersion (version.BaseUri, version.Filename, version.Name, version.IsProtected);
+					if (version_id == photo.DefaultVersionId)
+						newp.DefaultVersionId = newv;
+				}
+
+			//FIXME Import extra info (time, description, rating)
+			newp.Time = photo.Time;
+			newp.Description = photo.Description;
+			newp.Rating = photo.Rating;
+
+			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);
+            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
new file mode 100644
index 0000000..eb61907
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/MergeDbDialog.cs
@@ -0,0 +1,113 @@
+/*
+ * FSpot.MergeDbDialog.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using FSpot;
+using FSpot.Core;
+using FSpot.Query;
+
+namespace FSpot.Tools.MergeDb
+{
+	internal class MergeDbDialog
+	{
+		[Glade.Widget] Gtk.Dialog mergedb_dialog;
+		[Glade.Widget] Gtk.Button apply_button;
+		[Glade.Widget] Gtk.FileChooserButton db_filechooser;
+		[Glade.Widget] Gtk.RadioButton newrolls_radio;
+		[Glade.Widget] Gtk.RadioButton allrolls_radio;
+		[Glade.Widget] Gtk.RadioButton singleroll_radio;
+		[Glade.Widget] Gtk.ComboBox rolls_combo;
+		[Glade.Widget] Gtk.RadioButton copy_radio;
+		[Glade.Widget] Gtk.RadioButton keep_radio;
+
+		MergeDb parent;
+
+		public event EventHandler FileSet;
+
+		public MergeDbDialog (MergeDb parent) {
+			this.parent = parent;
+
+			Glade.XML xml = new Glade.XML (null, "MergeDb.glade", "mergedb_dialog", "f-spot");
+			xml.Autoconnect (this);
+			mergedb_dialog.Modal = false;
+			mergedb_dialog.TransientFor = null;
+
+			db_filechooser.LocalOnly = false;
+			db_filechooser.FileSet += OnFileSet;
+
+			newrolls_radio.Toggled += HandleRollsChanged;
+			allrolls_radio.Toggled += HandleRollsChanged;
+			singleroll_radio.Toggled += HandleRollsChanged;
+		}
+
+		void HandleRollsChanged (object o, EventArgs e)
+		{
+			rolls_combo.Sensitive = singleroll_radio.Active;
+		}
+
+		public Gtk.FileChooserButton FileChooser {
+			get { return db_filechooser; }
+		}
+
+		Roll [] rolls;
+		public Roll [] Rolls {
+			get { return rolls; }
+			set {
+				rolls = value;
+				foreach (Roll r in rolls) {
+					uint numphotos = parent.FromDb.Rolls.PhotosInRoll (r);
+					// Roll time is in UTC always
+					DateTime date = r.Time.ToLocalTime ();
+					rolls_combo.AppendText (String.Format ("{0} ({1})", date.ToString("%dd %MMM, %HH:%mm"), numphotos));
+					rolls_combo.Active = 0;
+				}
+			}
+		}
+
+		public Roll [] ActiveRolls {
+			get {
+				if (allrolls_radio.Active)
+					return null;
+				if (newrolls_radio.Active)
+					return rolls;
+				else
+					return new Roll [] {rolls [rolls_combo.Active]};
+			}
+		}
+
+		public bool Copy {
+			get { return copy_radio.Active; }
+		}
+
+		public void OnFileSet (object o, EventArgs e)
+		{
+			if (FileSet != null)
+				FileSet (o, e);
+		}
+
+		public void SetSensitive ()
+		{
+			newrolls_radio.Sensitive = true;
+			allrolls_radio.Sensitive = true;
+			singleroll_radio.Sensitive = true;
+			apply_button.Sensitive = true;
+			copy_radio.Sensitive = true;
+			keep_radio.Sensitive = true;
+		}
+
+		public Gtk.Dialog Dialog {
+			get { return mergedb_dialog; }
+		}
+
+		public void ShowAll ()
+		{
+			mergedb_dialog.ShowAll ();
+		}
+	}
+}
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
new file mode 100644
index 0000000..e1b1e94
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.MergeDb/FSpot.Tools.MergeDb/PickFolderDialog.cs
@@ -0,0 +1,52 @@
+/*
+ * FSpot.PickFolderDialog.cs
+ *
+ * Author(s):
+ *	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using FSpot;
+using FSpot.Query;
+using Mono.Unix;
+using Hyena;
+
+namespace FSpot.Tools.MergeDb
+{
+	internal class PickFolderDialog
+	{
+		[Glade.Widget] Gtk.Dialog pickfolder_dialog;
+		[Glade.Widget] Gtk.FileChooserWidget pickfolder_chooser;
+		[Glade.Widget] Gtk.Label pickfolder_label;
+
+		public PickFolderDialog (Gtk.Dialog parent, string folder)
+		{
+			Glade.XML xml = new Glade.XML (null, "MergeDb.glade", "pickfolder_dialog", "f-spot");
+			xml.Autoconnect (this);
+			Log.Debug ("new pickfolder");
+			pickfolder_dialog.Modal = false;
+			pickfolder_dialog.TransientFor = parent;
+
+			pickfolder_chooser.LocalOnly = false;
+
+			pickfolder_label.Text = String.Format (Catalog.GetString ("<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>"), folder);
+			pickfolder_label.UseMarkup = true;
+		}
+
+		public string Run ()
+		{
+			pickfolder_dialog.ShowAll ();
+			if (pickfolder_dialog.Run () == -6)
+				return pickfolder_chooser.Filename;
+			else
+				return null;
+		}
+
+		public Gtk.Dialog Dialog {
+			get { return pickfolder_dialog; }
+		}
+
+	}
+}
diff --git a/src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile.am b/src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile.am
new file mode 100644
index 0000000..5c77e6b
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile.am
@@ -0,0 +1,15 @@
+ASSEMBLY = FSpot.Tools.MergeDb
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_MERGEDB)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	FSpot.Tools.MergeDb/MergeDb.cs \
+	FSpot.Tools.MergeDb/MergeDbDialog.cs \
+	FSpot.Tools.MergeDb/PickFolderDialog.cs
+
+RESOURCES =  \
+	Resources/MergeDb.addin.xml \
+	Resources/MergeDb.glade
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile.in b/src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile.in
new file mode 100644
index 0000000..ab91bf7
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile.in
@@ -0,0 +1,812 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Tools/FSpot.Tools.MergeDb
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Tools.MergeDb
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_MERGEDB) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+	FSpot.Tools.MergeDb/MergeDb.cs \
+	FSpot.Tools.MergeDb/MergeDbDialog.cs \
+	FSpot.Tools.MergeDb/PickFolderDialog.cs
+
+RESOURCES = \
+	Resources/MergeDb.addin.xml \
+	Resources/MergeDb.glade
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.MergeDb/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/MergeDb.addin.xml b/src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/MergeDb.addin.xml
new file mode 100644
index 0000000..28660a4
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/MergeDb.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	id="MergeDb"
+	name="MergeDb"
+	version="0.8"
+	compatVersion="0.8"
+	description="Merge another db back to the main one"
+	author="Stephane Delcroix"
+	url="http://f-spot.org/Extensions"
+	category="Tools"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Menus/Tools">
+		<Command id = "MergeDb" _label = "Merge Db" command_type = "FSpot.Tools.MergeDb.MergeDb" />
+	</Extension>
+</Addin>
diff --git a/extensions/Tools/MergeDb/MergeDb.glade b/src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/MergeDb.glade
similarity index 100%
rename from extensions/Tools/MergeDb/MergeDb.glade
rename to src/Extensions/Tools/FSpot.Tools.MergeDb/Resources/MergeDb.glade
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
new file mode 100644
index 0000000..fd4253c
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/FSpot.Tools.RawPlusJpeg/RawPlusJpeg.cs
@@ -0,0 +1,127 @@
+/*
+ * RawPlusJpeg.cs
+ *
+ * Author(s)
+ * 	Stephane Delcroix  <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details
+ */
+
+using System;
+using System.Collections.Generic;
+
+using Gtk;
+
+using FSpot;
+using FSpot.Core;
+using FSpot.UI.Dialog;
+using FSpot.Extensions;
+using FSpot.Imaging;
+
+using Hyena;
+using Hyena.Widgets;
+
+namespace FSpot.Tools.RawPlusJpeg
+{
+	public class RawPlusJpeg : ICommand
+	{
+		public void Run (object o, EventArgs e)
+		{
+			Log.Debug ("EXECUTING RAW PLUS JPEG EXTENSION");
+
+			if (ResponseType.Ok != HigMessageDialog.RunHigConfirmation (
+				App.Instance.Organizer.Window,
+				DialogFlags.DestroyWithParent,
+				MessageType.Warning,
+				"Merge Raw+Jpegs",
+				"This operation will merge Raw and Jpegs versions of the same image as one unique image. The Raw image will be the Original version, the jpeg will be named 'Jpeg' and all subsequent versions will keep their original names (if possible).\n\nNote: only enabled for some formats right now.",
+				"Do it now"))
+				return;
+
+			Photo [] photos = App.Instance.Database.Photos.Query ((Tag [])null, null, null, null);
+			Array.Sort (photos, new IBrowsableItemComparer.CompareDirectory ());
+
+			Photo raw = null;
+			Photo jpeg = null;
+
+			IList<MergeRequest> merge_requests = new List<MergeRequest> ();
+
+			for (int i = 0; i < photos.Length; i++) {
+				Photo p = photos [i];
+
+				if (!ImageFile.IsRaw (p.DefaultVersion.Uri) && !ImageFile.IsJpeg (p.DefaultVersion.Uri))
+					continue;
+
+				if (ImageFile.IsJpeg (p.DefaultVersion.Uri))
+					jpeg = p;
+				if (ImageFile.IsRaw (p.DefaultVersion.Uri))
+					raw = p;
+
+				if (raw != null && jpeg != null && SamePlaceAndName (raw, jpeg))
+					merge_requests.Add (new MergeRequest (raw, jpeg));
+			}
+
+			if (merge_requests.Count == 0)
+				return;
+
+			foreach (MergeRequest mr in merge_requests)
+				mr.Merge ();
+
+			App.Instance.Organizer.UpdateQuery ();
+		}
+
+		private static bool SamePlaceAndName (Photo p1, Photo p2)
+		{
+			return DirectoryPath (p1) == DirectoryPath (p2) &&
+				System.IO.Path.GetFileNameWithoutExtension (p1.Name) == System.IO.Path.GetFileNameWithoutExtension (p2.Name);
+		}
+
+
+		private static string DirectoryPath (Photo p)
+		{
+			return p.VersionUri (Photo.OriginalVersionId).GetBaseUri ();
+		}
+
+		class MergeRequest
+		{
+			Photo raw;
+			Photo jpeg;
+
+			public MergeRequest (Photo raw, Photo jpeg)
+			{
+				this.raw = raw;
+				this.jpeg = jpeg;
+			}
+
+			public void Merge ()
+			{
+				Log.DebugFormat ("Merging {0} and {1}", raw.VersionUri (Photo.OriginalVersionId), jpeg.VersionUri (Photo.OriginalVersionId));
+				foreach (uint version_id in jpeg.VersionIds) {
+					string name = jpeg.GetVersion (version_id).Name;
+					try {
+						raw.DefaultVersionId = raw.CreateReparentedVersion (jpeg.GetVersion (version_id) as PhotoVersion, version_id == Photo.OriginalVersionId);
+						if (version_id == Photo.OriginalVersionId)
+							raw.RenameVersion (raw.DefaultVersionId, "Jpeg");
+						else
+							raw.RenameVersion (raw.DefaultVersionId, name);
+					} catch (Exception e) {
+						Log.Exception (e);
+					}
+				}
+				raw.AddTag (jpeg.Tags);
+				uint [] version_ids = jpeg.VersionIds;
+				Array.Reverse (version_ids);
+				foreach (uint version_id in version_ids) {
+					try {
+						jpeg.DeleteVersion (version_id, true, true);
+					} catch (Exception e) {
+						Log.Exception (e);
+					}
+				}
+				raw.Changes.DataChanged = true;
+				App.Instance.Database.Photos.Commit (raw);
+				App.Instance.Database.Photos.Remove (jpeg);
+			}
+		}
+	}
+}
diff --git a/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile.am b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile.am
new file mode 100644
index 0000000..402115e
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile.am
@@ -0,0 +1,10 @@
+ASSEMBLY = FSpot.Tools.RawPlusJpeg
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RAWPLUSJPEG)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Tools.RawPlusJpeg/RawPlusJpeg.cs
+
+RESOURCES = Resources/RawPlusJpeg.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile.in b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile.in
new file mode 100644
index 0000000..c26e52c
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Tools/FSpot.Tools.RawPlusJpeg
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Tools.RawPlusJpeg
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RAWPLUSJPEG) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Tools.RawPlusJpeg/RawPlusJpeg.cs
+RESOURCES = Resources/RawPlusJpeg.addin.xml
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Resources/RawPlusJpeg.addin.xml b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Resources/RawPlusJpeg.addin.xml
new file mode 100644
index 0000000..406088a
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Resources/RawPlusJpeg.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	id="RawPlusJpeg"
+	name="RawPlusJpeg"
+	version="0.8"
+	compatVersion="0.8"
+	description="Merge RAW+Jpeg as multiple versions of the same photo"
+	author="Stephane Delcroix"
+	url="http://f-spot.org/Extensions"
+	category="Tools"
+	defaultEnabled="false">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Menus/Tools">
+		<Command id = "MergeRawJpeg" _label = "Merge Raw" command_type = "FSpot.Tools.RawPlusJpeg.RawPlusJpeg" />
+	</Extension>
+</Addin>
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
new file mode 100644
index 0000000..d8d5e9d
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/FSpot.Tools.RetroactiveRoll/RetroactiveRoll.cs
@@ -0,0 +1,48 @@
+/*
+ * RetroactiveRoll.cs
+ *
+ * Author(s)
+ * 	Andy Wingo  <wingo at pobox.com>
+ *
+ * This is free software. See COPYING for details
+ */
+
+
+using FSpot;
+using FSpot.Core;
+using FSpot.Extensions;
+using System;
+using Hyena;
+
+using Hyena.Data.Sqlite;
+
+namespace FSpot.Tools.RetroactiveRoll
+{
+	public class RetroactiveRoll: ICommand
+	{
+		public void Run (object o, EventArgs e)
+		{
+			Photo[] photos = App.Instance.Organizer.SelectedPhotos ();
+
+			if (photos.Length == 0) {
+				Log.Debug ("no photos selected, returning");
+				return;
+			}
+
+			DateTime import_time = photos[0].Time;
+			foreach (Photo p in photos)
+				if (p.Time > import_time)
+					import_time = p.Time;
+
+			RollStore rolls = App.Instance.Database.Rolls;
+			Roll roll = rolls.Create(import_time);
+			foreach (Photo p in photos) {
+				HyenaSqliteCommand cmd = new HyenaSqliteCommand ("UPDATE photos SET roll_id = ? " +
+							       "WHERE id = ? ", roll.Id, p.Id);
+				App.Instance.Database.Database.Execute (cmd);
+				p.RollId = roll.Id;
+			}
+			Log.Debug ("RetroactiveRoll done: " + photos.Length + " photos in roll " + roll.Id);
+		}
+	}
+}
diff --git a/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile.am b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile.am
new file mode 100644
index 0000000..2a707a9
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile.am
@@ -0,0 +1,10 @@
+ASSEMBLY = FSpot.Tools.RetroactiveRoll
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RETROACTIVEROLL)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Tools.RetroactiveRoll/RetroactiveRoll.cs
+
+RESOURCES = Resources/RetroactiveRoll.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile.in b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile.in
new file mode 100644
index 0000000..93d60c2
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Tools/FSpot.Tools.RetroactiveRoll
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Tools.RetroactiveRoll
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RETROACTIVEROLL) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Tools.RetroactiveRoll/RetroactiveRoll.cs
+RESOURCES = Resources/RetroactiveRoll.addin.xml
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Resources/RetroactiveRoll.addin.xml b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Resources/RetroactiveRoll.addin.xml
new file mode 100644
index 0000000..5235f64
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.RetroactiveRoll/Resources/RetroactiveRoll.addin.xml
@@ -0,0 +1,16 @@
+<Addin namespace="FSpot"
+	id="RetroactiveRoll"
+	name="RetroactiveRoll"
+	version="0.8"
+	compatVersion="0.8"
+	description="Retroactively assign old photos to import rolls"
+	author="Andy Wingo"
+	url="http://f-spot.org/Extensions"
+	category="Tools">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Menus/PhotoPopup">
+		<Command id = "RetroactiveRoll" _label = "Reassign to new import roll" command_type = "FSpot.Tools.RetroactiveRoll.RetroactiveRoll"/>
+	</Extension>
+</Addin>
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
new file mode 100644
index 0000000..1265abc
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/FSpot.Tools.ScreensaverConfig/ScreensaverConfig.cs
@@ -0,0 +1,131 @@
+//
+// ScreensaverConfig.ScreensaverConfig.cs
+//
+// Author(s):
+//	Stephane Delcroix  <stephane at delcroix.org>
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// This is open source software. See COPYING for details.
+//
+
+using System;
+using System.Reflection;
+
+using Gtk;
+
+using FSpot;
+using FSpot.Core;
+using FSpot.UI.Dialog;
+using FSpot.Extensions;
+using FSpot.Widgets;
+
+namespace FSpot.Tools.ScreensaverConfig
+{
+	public class ScreensaverConfig : ICommand
+	{
+		const string SaverCommand = "screensavers-f-spot-screensaver";
+		const string SaverMode = "single";
+		const string GNOME_SCREENSAVER_THEME = "/apps/gnome-screensaver/themes";
+		const string GNOME_SCREENSAVER_MODE = "/apps/gnome-screensaver/mode";
+		const string SCREENSAVER_TAG = Preferences.SCREENSAVER_TAG;
+		const string SCREENSAVER_DELAY = Preferences.SCREENSAVER_DELAY;
+		const double default_delay = 2.0;
+
+		public void Run (object o, EventArgs e)
+		{
+			var d = new ScreensaverConfigDialog ();
+			d.Run ();
+			d.Destroy ();
+		}
+
+		class ScreensaverConfigDialog : BuilderDialog
+		{
+			[GtkBeans.Builder.Object] Range delay_scale;
+			[GtkBeans.Builder.Object] Table table;
+			[GtkBeans.Builder.Object] RadioButton all_radio;
+			[GtkBeans.Builder.Object] RadioButton tagged_radio;
+			[GtkBeans.Builder.Object] Button do_button;
+			Adjustment delay_adjustment;
+			MenuButton tag_button;
+
+			public ScreensaverConfigDialog () : base (Assembly.GetExecutingAssembly (), "ScreensaverConfigDialog.ui", "screensaver-config-dialog")
+			{
+				delay_adjustment = new Adjustment (default_delay, 1.0, 20.0, .5, 5, 0);
+				LoadPreference (SCREENSAVER_DELAY);
+				delay_scale.Adjustment = delay_adjustment;
+				delay_adjustment.ValueChanged += HandleDelayChanged;
+				
+				tag_button = new MenuButton ();
+				tag_button.SizeRequested += delegate (object sender, SizeRequestedArgs args) {
+					var req = args.Requisition;
+					req.Width += 100;
+					args.Requisition = req;
+				};
+				TagMenu menu = new TagMenu (null, App.Instance.Database.Tags);
+				menu.Populate (false);
+				menu.TagSelected += HandleTagSelected;
+				tag_button.Menu = menu;
+				tag_button.ShowAll ();
+				table.Attach (tag_button, 2, 3, 1, 2);
+				LoadPreference (SCREENSAVER_TAG);
+				all_radio.Toggled += HandleTagRadioToggled;
+
+				do_button.Clicked += HandleUseFSpot;
+			}
+
+			void LoadPreference (string key)
+			{
+				switch (key) {
+				case SCREENSAVER_DELAY:
+					var delay = Preferences.Get<double> (key);
+					if (delay == 0.0)
+						delay = default_delay;
+					if (delay < delay_adjustment.Lower)
+						delay = delay_adjustment.Lower;
+					if (delay > delay_adjustment.Upper)
+						delay = delay_adjustment.Upper;
+					delay_adjustment.Value = delay;
+					break;
+				case SCREENSAVER_TAG:
+					var screensaver_tag = Preferences.Get<int> (key);
+					Tag t = App.Instance.Database.Tags.GetTagById (screensaver_tag);
+					if (screensaver_tag == 0 || t == null) {
+						all_radio.Active = true;
+						tag_button.Sensitive = false;
+					} else {
+						tagged_radio.Active = true;
+						tag_button.Label = t.Name;
+					}
+					break;
+				}
+			}
+
+			void HandleDelayChanged (object sender, EventArgs e)
+			{
+				Preferences.Set (SCREENSAVER_DELAY, delay_adjustment.Value);
+			}
+
+			void HandleTagRadioToggled (object sender, EventArgs e)
+			{
+				tag_button.Sensitive = tagged_radio.Active;
+				if (all_radio.Active)
+					Preferences.Set (SCREENSAVER_TAG, 0);
+				else
+					HandleTagSelected (((tag_button.Menu as Menu).Active as TagMenu.TagMenuItem).Value);
+			}
+
+			void HandleTagSelected (Tag t)
+			{
+				tag_button.Label = t.Name;
+				Preferences.Set (SCREENSAVER_TAG, (int) t.Id);
+			}
+
+			void HandleUseFSpot (object sender, EventArgs e)
+			{
+				Preferences.Set (GNOME_SCREENSAVER_MODE, SaverMode);
+				Preferences.Set (GNOME_SCREENSAVER_THEME, new string [] { SaverCommand });
+			}
+		}
+	}
+}
diff --git a/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile.am b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile.am
new file mode 100644
index 0000000..bed90cd
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile.am
@@ -0,0 +1,12 @@
+ASSEMBLY = FSpot.Tools.ScreensaverConfig
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_SCREENSAVERCONFIG)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Tools.ScreensaverConfig/ScreensaverConfig.cs
+
+RESOURCES =  \
+	Resources/ScreensaverConfig.addin.xml \
+	Resources/ScreensaverConfigDialog.ui
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile.in b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile.in
new file mode 100644
index 0000000..b0d6bc7
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile.in
@@ -0,0 +1,808 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Tools/FSpot.Tools.ScreensaverConfig
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Tools.ScreensaverConfig
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_SCREENSAVERCONFIG) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Tools.ScreensaverConfig/ScreensaverConfig.cs
+RESOURCES = \
+	Resources/ScreensaverConfig.addin.xml \
+	Resources/ScreensaverConfigDialog.ui
+
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfig.addin.xml b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfig.addin.xml
new file mode 100644
index 0000000..96acef9
--- /dev/null
+++ b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfig.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+	id="ScreensaverConfig"
+	name="Screensaver Configuration"
+	version="0.8"
+	compatVersion="0.8"
+	description="Screensaver options"
+	author="Stephane Delcroix"
+	url="http://f-spot.org/Extensions"
+	category="Tools"
+	defaultEnabled="true">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/Menus/Tools">
+		<Command id = "ScreensaverConfig" _label = "Configure Screensaver" command_type = "FSpot.Tools.ScreensaverConfig.ScreensaverConfig" />
+	</Extension>
+</Addin>
diff --git a/extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui b/src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui
similarity index 100%
rename from extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui
rename to src/Extensions/Tools/FSpot.Tools.ScreensaverConfig/Resources/ScreensaverConfigDialog.ui
diff --git a/src/Extensions/Tools/Makefile.am b/src/Extensions/Tools/Makefile.am
new file mode 100644
index 0000000..be7972d
--- /dev/null
+++ b/src/Extensions/Tools/Makefile.am
@@ -0,0 +1,9 @@
+SUBDIRS = 			\
+	FSpot.Tools.ChangePhotoPath		\
+	FSpot.Tools.DevelopInUFraw		\
+	FSpot.Tools.HashJob			\
+	FSpot.Tools.LiveWebGallery		\
+	FSpot.Tools.MergeDb			\
+	FSpot.Tools.RawPlusJpeg		\
+	FSpot.Tools.RetroactiveRoll		\
+	FSpot.Tools.ScreensaverConfig
diff --git a/src/Extensions/Tools/Makefile.in b/src/Extensions/Tools/Makefile.in
new file mode 100644
index 0000000..ee2130e
--- /dev/null
+++ b/src/Extensions/Tools/Makefile.in
@@ -0,0 +1,679 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/Extensions/Tools
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+	FSpot.Tools.ChangePhotoPath		\
+	FSpot.Tools.DevelopInUFraw		\
+	FSpot.Tools.HashJob			\
+	FSpot.Tools.LiveWebGallery		\
+	FSpot.Tools.MergeDb			\
+	FSpot.Tools.RawPlusJpeg		\
+	FSpot.Tools.RetroactiveRoll		\
+	FSpot.Tools.ScreensaverConfig
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Tools/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Tools/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/TransitionNode.cs b/src/Extensions/TransitionNode.cs
deleted file mode 100644
index 1738125..0000000
--- a/src/Extensions/TransitionNode.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * FSpot.Extensions.TransitionNode.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * Copyright (c) 2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- *
- */
-
-using System;
-using Mono.Addins;
-using Gdk;
-using FSpot.Widgets;
-
-namespace FSpot.Extensions
-{
-	public class TransitionNode : ExtensionNode
-	{	
-		[NodeAttribute ("transition_type", true)]
-		protected string class_name;
-
-		SlideShowTransition transition = null;
-		public SlideShowTransition Transition {
-			get {
-				if (transition == null)
-					transition = Addin.CreateInstance (class_name) as SlideShowTransition;
-				return transition;
-			}
-		}
-	}
-}
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
new file mode 100644
index 0000000..cd0729e
--- /dev/null
+++ b/src/Extensions/Transitions/FSpot.Transitions.Cover/FSpot.Addins.Transitions/Cover.cs
@@ -0,0 +1,59 @@
+//
+// FSpot.Widgets.CoverTransition.cs
+//
+// Author(s):
+//	Stephane Delcroix  <stephane at delcroix.org>
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// This is open source software. See COPYING for details.
+//
+
+using System;
+
+using Cairo;
+using Gdk;
+
+using FSpot.Utils;
+using FSpot.Transitions;
+
+using Color = Cairo.Color;
+
+namespace FSpot.Addins.Transitions
+{
+	public class Cover : CairoTransition
+	{
+		public Cover () : base ("Cover")
+		{
+		}
+
+		protected override void Draw (Context cr, Pixbuf prev, Pixbuf next, int width, int height, double progress)
+		{
+			cr.Color = new Color (0, 0, 0);
+			if (next != null) {
+				double scale = Math.Min ((double)width/(double)next.Width, (double)height/(double)next.Height);
+				cr.Save ();
+
+				cr.Translate (width * (1.0 - progress), 0);
+
+				cr.Rectangle (0, 0, width, .5 * (height - scale*next.Height));
+				cr.Fill ();
+
+				cr.Rectangle (0, height - .5 * (height - scale*next.Height), width, .5 * (height - scale*next.Height));
+				cr.Fill ();
+
+				cr.Rectangle (0, 0, .5 * (width - scale*next.Width), height);
+				cr.Fill ();
+
+				cr.Rectangle (width - .5 * (width - scale*next.Width), 0, .5 * (width - scale*next.Width), height);
+				cr.Fill ();
+
+				cr.Rectangle (0, 0, width, height);
+				cr.Scale (scale, scale);
+				CairoHelper.SetSourcePixbuf (cr, next, .5 * ((double)width/scale - next.Width), .5 * ((double)height/scale - next.Height));
+				cr.Paint ();
+				cr.Restore ();
+			}
+		}
+	}
+}
diff --git a/src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile.am b/src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile.am
new file mode 100644
index 0000000..f13a71b
--- /dev/null
+++ b/src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile.am
@@ -0,0 +1,10 @@
+ASSEMBLY = FSpot.Exporters.CoverTransition
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_COVERTRANSITION)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FSpot.Addins.Transitions/Cover.cs
+
+RESOURCES = Resources/CoverTransition.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile.in b/src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile.in
new file mode 100644
index 0000000..0c75954
--- /dev/null
+++ b/src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build/build.environment.mk \
+	$(top_srcdir)/build/build.mk \
+	$(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Extensions/Transitions/FSpot.Transitions.Cover
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.CoverTransition
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_COVERTRANSITION) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FSpot.Addins.Transitions/Cover.cs
+RESOURCES = Resources/CoverTransition.addin.xml
+
+# Initializers
+MONO_BASE_PATH = 
+MONO_ADDINS_PATH = 
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_TAGLIB = $(top_builddir)/lib/TagLib
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO = 
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE = 
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# TagLib
+REF_TAGLIB = 
+LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
+LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
+            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty := 
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+	then \
+		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+	else \
+		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+	fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+	$(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+	-resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+	$(ASSEMBLY_FILE) \
+	$(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Transitions/FSpot.Transitions.Cover/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-moduleSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(moduledir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-local \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-moduleSCRIPTS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local uninstall-moduleSCRIPTS
+
+
+all-local: theme-icons
+
+run: 
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+#	@pushd $(top_builddir)/tests; \
+#	make $(ASSEMBLY); \
+#	popd;
+
+build-debug:
+	@echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+	@mkdir -p $(top_builddir)/bin
+	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+	fi;
+	$(MCS) \
+		$(GMCS_FLAGS) \
+		$(ASSEMBLY_BUILD_FLAGS) \
+		-nowarn:0278 -nowarn:0078 $$warn \
+		-define:HAVE_GTK_2_10 -define:NET_2_0 \
+		-debug -target:$(TARGET) -out:$@ \
+		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+	fi;
+	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+	fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/Transitions/FSpot.Transitions.Cover/Resources/CoverTransition.addin.xml b/src/Extensions/Transitions/FSpot.Transitions.Cover/Resources/CoverTransition.addin.xml
new file mode 100644
index 0000000..2786ba7
--- /dev/null
+++ b/src/Extensions/Transitions/FSpot.Transitions.Cover/Resources/CoverTransition.addin.xml
@@ -0,0 +1,16 @@
+<Addin namespace="FSpot"
+	id="CoverTransition"
+	version="0.8"
+	compatVersion="0.8"
+	name="Cover Transition"
+	description="A Slideshow transition that covers images"
+	author="Stephane Delcroix"
+	url="http://f-spot.org/Extensions"
+	category="Transitions">
+	<Dependencies>
+		<Addin id="Core" version="0.8"/>
+	</Dependencies>
+	<Extension path = "/FSpot/SlideShow">
+		<Transition transition_type="FSpot.Addins.Transitions.Cover"/>
+	</Extension>
+</Addin>
diff --git a/src/Extensions/Transitions/Makefile.am b/src/Extensions/Transitions/Makefile.am
new file mode 100644
index 0000000..5a41c0e
--- /dev/null
+++ b/src/Extensions/Transitions/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = 			\
+	FSpot.Transitions.Cover
diff --git a/src/Extensions/Transitions/Makefile.in b/src/Extensions/Transitions/Makefile.in
new file mode 100644
index 0000000..cca3b32
--- /dev/null
+++ b/src/Extensions/Transitions/Makefile.in
@@ -0,0 +1,672 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/Extensions/Transitions
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+	$(top_srcdir)/build/m4/shamrock/mono.m4 \
+	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
+	$(top_srcdir)/build/m4/shamrock/programs.m4 \
+	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
+	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+	FSpot.Transitions.Cover
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Extensions/Transitions/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Extensions/Transitions/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/Extensions/ViewModeCondition.cs b/src/Extensions/ViewModeCondition.cs
deleted file mode 100644
index acd18ae..0000000
--- a/src/Extensions/ViewModeCondition.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * FSpot.Extensions.ViewModeCondition.cs
- *
- * Author(s)
- * 	Ruben Vermeersch  <ruben at savanne.be>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using Mono.Addins;
-
-namespace FSpot.Extensions
-{
-	public enum ViewMode {
-		Unknown,
-		Single,
-		Library
-	}
-
-	// Defines a view mode condition, which determines which view mode is used.
-	//
-	// There are two valid values for the "mode" attribute, which 
-	// should be added to the Condition tag.
-	//   - single: Single view mode.
-	//   - library: Full F-Spot mode.
-	//
-	// 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.
-	public class ViewModeCondition : ConditionType
-	{
-		private delegate void ViewModeChangedHandler ();
-		private static event ViewModeChangedHandler ViewModeChanged;
-
-		private static ViewMode mode = ViewMode.Unknown;
-		public static ViewMode Mode {
-			get { return mode; }
-			set {
-				mode = value;
-
-				if (ViewModeChanged != null)
-					ViewModeChanged ();
-			}
-		}
-
-		public ViewModeCondition ()
-		{
-			ViewModeChanged += delegate { NotifyChanged (); };
-		}
-
-		public override bool Evaluate (NodeElement conditionNode)
-		{
-			string val = conditionNode.GetAttribute ("mode");
-			if (val.Length > 0) {
-				foreach (string mode in val.Split(',')) {
-					if (mode == "single" && Mode == ViewMode.Single) {
-						return true;
-					} else if (mode == "library" && Mode == ViewMode.Library) {
-						return true;
-					}
-				}
-			}
-			return false;
-		}
-	}
-}
diff --git a/src/FSpot.addin.xml b/src/FSpot.addin.xml
deleted file mode 100644
index 79b0e7b..0000000
--- a/src/FSpot.addin.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<Addin namespace = "FSpot" 
-       id = "Core" 
-       version = "0.7.0.0"
-       compatVersion = "0.7"
-       isroot="true">
-
-	<Runtime>
-		<Import assembly="f-spot.exe" />
-		<Import assembly="FSpot.Widgets.dll" />
-	</Runtime>
-
-	<ExtensionPoint path = "/FSpot/Editors">
-		<ExtensionNode type="FSpot.Editors.EditorNode"/>
-	</ExtensionPoint>
-
-	<ExtensionPoint path = "/FSpot/Menus">
-		<ExtensionNode type="FSpot.Extensions.SubmenuNode"/>
-	</ExtensionPoint>
-
-	<ExtensionPoint path = "/FSpot/Sidebar">
-		<ExtensionNode name="SidebarPage" type="FSpot.Extensions.SidebarPageNode"/>
-	</ExtensionPoint>
-
-	<ExtensionPoint path = "/FSpot/Services">
-		<ExtensionNode name="Service" type="FSpot.Extensions.ServiceNode"/>
-	</ExtensionPoint>
-
-	<ExtensionPoint path = "/FSpot/SlideShow">
-		<ExtensionNode name="Transition" type="FSpot.Extensions.TransitionNode"/>
-	</ExtensionPoint>
-
-	<Extension path = "/FSpot/Menus">
-		<Menu id="Exports" _label="Export to" />
-	</Extension>
-
-	<Extension path = "/FSpot/Menus">
-		<Menu id="Tools" _label="Tools" />
-	</Extension>
-
-	<Extension path = "/FSpot/Menus">
-		<Menu id = "PhotoPopup" />
-	</Extension>
-
-	<ConditionType id="PhotoSelection" type="FSpot.Extensions.PhotoSelectionCondition" />
-	<ConditionType id="ViewMode" type="FSpot.Extensions.ViewModeCondition" />
-
-	<Extension path = "/FSpot/Menus/PhotoPopup">
-		<Command id = "Copy" _label = "Copy Photo" command_type = "FSpot.Extensions.Copy" />
-		<MenuSeparator id = "Separator1" />
-		<Command id = "RLeft" _label = "Rotate _Left" icon = "object-rotate-left" command_type = "FSpot.Extensions.Rotate270" />
-		<Command id = "RRight" _label = "Rotate _Right" icon = "object-rotate-right" command_type = "FSpot.Extensions.Rotate90" />
-		<MenuSeparator id = "Separator2" />
-		<MenuGenerator id = "OpenWith" _label = "Open _With" icon = "gtk-open" generator_type = "FSpot.Extensions.OpenWith" />
-		<Command id = "Remove" _label = "_Remove From Catalog" command_type = "FSpot.Extensions.Remove" />
-		<Command id = "Delete" _label = "_Delete From Drive" command_type = "FSpot.Extensions.Delete" />
-		<MenuSeparator id = "Separator3" />
-		<MenuGenerator id = "RemoveTag" _label = "Rem_ove Tag" icon = "gtk-remove" generator_type = "FSpot.Extensions.RemoveTag" />
-		<ComplexMenuItem id = "Rate" widget_type = "FSpot.Widgets.RatingMenuItem"  command_type = "FSpot.Extensions.Rate"/>
-	</Extension>	
-
-	<Extension path = "/FSpot/Sidebar">
-<!-- FIXME: Disabled until ported		<SidebarPage sidebar_page_type = "FSpot.Widgets.MetadataDisplayPage" /> -->
-		<Condition id="ViewMode" mode="library">
-			<SidebarPage sidebar_page_type = "FSpot.Widgets.EditorPage" />
-			<SidebarPage sidebar_page_type = "FSpot.Widgets.FolderTreePage" />
-		</Condition>
-	</Extension>
-
-	<Extension path = "/FSpot/Editors">
-		<Editor editor_type = "FSpot.Editors.CropEditor"/>
-		<Editor editor_type = "FSpot.Editors.RedEyeEditor"/>
-		<Editor editor_type = "FSpot.Editors.DesaturateEditor"/>
-		<Editor editor_type = "FSpot.Editors.SepiaEditor"/>
-		<Editor editor_type = "FSpot.Editors.TiltEditor"/>
-		<Editor editor_type = "FSpot.Editors.SoftFocusEditor"/>
-		<Editor editor_type = "FSpot.Editors.AutoStretchEditor"/>
-		<Editor editor_type = "FSpot.Editors.ColorEditor"/>
-	</Extension>
-
-	<Extension path = "/FSpot/SlideShow">
-		<Transition transition_type = "FSpot.Widgets.DissolveTransition"/>
-		<Transition transition_type = "FSpot.Widgets.PushTransition"/>
-	</Extension>
-</Addin>
diff --git a/src/Fader.cs b/src/Fader.cs
deleted file mode 100644
index 6aeb22f..0000000
--- a/src/Fader.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Fader.cs
- *
- * Copyright 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- * See COPYING for license information.
- *
- */
-using System;
-using Gtk;
-using FSpot.Widgets;
-using FSpot.Bling;
-
-namespace FSpot {
-	public class Fader {
-		bool composited;
-		Gtk.Window win;
-		DoubleAnimation fadin;
-
-		public Fader (Gtk.Window win, double target, double msec)
-		{
-			this.win = win;
-			win.Mapped += HandleMapped;
-			win.Unmapped += HandleUnmapped;
-			fadin = new DoubleAnimation (0.0, target, TimeSpan.FromMilliseconds(msec), delegate (double opacity) {
-				CompositeUtils.SetWinOpacity (win, opacity);
-			});	
-		}
-		
-		[GLib.ConnectBefore]
-		public void HandleMapped (object sender, EventArgs args)
-		{
-			composited = CompositeUtils.SupportsHint (win.Screen, "_NET_WM_WINDOW_OPACITY");
-			if (!composited)
-				return;
-			
-			CompositeUtils.SetWinOpacity (win, 0.0);
-			fadin.Start ();
-		}
-		
-		public void HandleUnmapped (object sender, EventArgs args)
-		{
-			fadin.Stop ();
-		}
-	}
-}
diff --git a/src/Filters/ChmodFilter.cs b/src/Filters/ChmodFilter.cs
deleted file mode 100644
index 622bb5b..0000000
--- a/src/Filters/ChmodFilter.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Filters/ChmodFilter
- *
- * Author(s)
- *   Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- *
- */
-using Mono.Unix.Native;
-
-namespace FSpot.Filters {
-	public class ChmodFilter : IFilter 
-	{	
-		
-		FilePermissions mode;
-
-		public ChmodFilter () : this (FilePermissions.S_IRUSR |
-					      FilePermissions.S_IWUSR |
-					      FilePermissions.S_IRGRP |
-					      FilePermissions.S_IROTH)
-		{
-		}
-
-		public ChmodFilter (FilePermissions mode)
-		{
-			this.mode = mode;
-		}
-
-		public bool Convert (FilterRequest req)
-		{
-			if (req.Current == req.Source) {
-				var uri = req.TempUri ();
-				System.IO.File.Copy (req.Current.LocalPath, uri.LocalPath, true);
-				req.Current = uri;
-			}
-
-			Syscall.chmod (req.Current.LocalPath, mode);
-
-			return true;
-		}
-	}
-}
diff --git a/src/Filters/FilterRequest.cs b/src/Filters/FilterRequest.cs
deleted file mode 100644
index c0ad7a7..0000000
--- a/src/Filters/FilterRequest.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Filters/FilterRequest.cs
- *
- * Author(s)
- *   Stephane Delcroix <stephane at delcroix.org>
- *   Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details
- *
- */
-
-using System;
-using System.Collections;
-
-using Hyena;
-using FSpot.Utils;
-
-namespace FSpot.Filters {
-
-	public class FilterRequest : IDisposable
-	{
-		SafeUri source;
-		SafeUri current;
-
-		ArrayList temp_uris;
-
-		public FilterRequest (SafeUri source)
-		{
-			this.source = source;
-			this.current = source;
-			temp_uris = new ArrayList ();
-		}
-
-		~FilterRequest ()
-		{
-			Close ();
-		}
-
-		public SafeUri Source {
-			get { return source; }
-		}
-
-		public SafeUri Current {
-			get { return current; }
-			set { 
-				if (!value.Equals (source) && !temp_uris.Contains (value))
-					temp_uris.Add (value);
-				current = value; 
-			}
-		}
-
-		public virtual void Close ()
-		{
-			foreach (SafeUri uri in temp_uris) {
-				try {
-					System.IO.File.Delete (uri.LocalPath);
-				} catch (System.IO.IOException e) {
-					Log.Exception (e);
-				}
-			}
-			temp_uris.Clear ();
-		}
-
-		public void Dispose ()
-		{
-			Close ();
-			System.GC.SuppressFinalize (this);
-		}
-		
-		public SafeUri TempUri ()
-		{
-			return TempUri (null);
-		}
-		
-		public SafeUri TempUri (string extension)
-		{
-			string imgtemp;
-			if (extension != null) {
-				string temp = System.IO.Path.GetTempFileName ();
-				imgtemp = temp + "." + extension;
-				System.IO.File.Move (temp, imgtemp);
-			} else
-				imgtemp = System.IO.Path.GetTempFileName ();
-
-			SafeUri uri = new SafeUri (imgtemp);
-			if (!temp_uris.Contains (uri))
-				temp_uris.Add (uri);
-			return uri;
-		}
-
-		public void Preserve (SafeUri uri)
-		{
-			temp_uris.Remove (uri);
-		}
-	}
-}
diff --git a/src/Filters/FilterSet.cs b/src/Filters/FilterSet.cs
deleted file mode 100644
index 124fb13..0000000
--- a/src/Filters/FilterSet.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-/* 
- * Filters/FilterSet.cs
- *
- * Authors: 
- *   Larry Ewing <lewing at novell.com>
- *   Stephane Delcroix <stephane at delcroix.org>
- * 
- * I don't like per file copyright notices.
- */
-
-using System.Collections;
-
-namespace FSpot.Filters {
-	public class FilterSet : IFilter {
-		public ArrayList list;
-	
-		public FilterSet () {
-			list = new ArrayList ();
-		}
-		
-		public void Add (IFilter filter)
-		{
-			list.Add (filter);
-		}
-		
-		public bool Convert (FilterRequest req)
-		{
-			bool changed = false;
-			foreach (IFilter filter in list) {
-				changed |= filter.Convert (req);
-			}
-			return changed;
-		}
-	}
-}
diff --git a/src/Filters/UniqueNameFilter.cs b/src/Filters/UniqueNameFilter.cs
deleted file mode 100644
index 01261c1..0000000
--- a/src/Filters/UniqueNameFilter.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Filters/UniqueNameFilter.cs
- *
- * Author(s)
- *   Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- *
- */
-
-using System;
-using FSpot.Utils;
-using Hyena;
-
-namespace FSpot.Filters {
-	public class UniqueNameFilter : IFilter
-	{
-		SafeUri destination;
-
-		public UniqueNameFilter (SafeUri destination)
-		{
-			this.destination = destination;
-		}
-
-		public bool Convert (FilterRequest request)
-		{
-			//FIXME: make it works for uri (and use it in CDExport)
-			int i = 1;
-			string path = destination.LocalPath;
-			string filename = System.IO.Path.GetFileName (request.Source.LocalPath);
-			string dest = System.IO.Path.Combine (path, filename);
-			while (System.IO.File.Exists (dest)) {
-				string numbered_name = String.Format ("{0}-{1}{2}",
-						System.IO.Path.GetFileNameWithoutExtension (filename),
-						i++,
-						System.IO.Path.GetExtension (filename));
-				dest = System.IO.Path.Combine (path, numbered_name);
-			}
-			
-			System.IO.File.Copy (request.Current.LocalPath, dest);
-			request.Current = new SafeUri (dest);
-			return true;
-		}
-	}
-}
diff --git a/src/Filters/WhiteListFilter.cs b/src/Filters/WhiteListFilter.cs
deleted file mode 100644
index 968f1da..0000000
--- a/src/Filters/WhiteListFilter.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Filters/WhiteListFilter
- *
- * Author(s)
- *   Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-namespace FSpot.Filters {
-	public class WhiteListFilter : IFilter 
-	{	
-		System.Collections.ArrayList valid_extensions;
-
-		public WhiteListFilter (string [] valid_extensions)
-		{
-			this.valid_extensions = new System.Collections.ArrayList ();
-			foreach (string extension in valid_extensions)
-				this.valid_extensions.Add (extension.ToLower ());
-		}
-
-		public bool Convert (FilterRequest req)
-		{
-			if ( valid_extensions.Contains (System.IO.Path.GetExtension(req.Current.LocalPath).ToLower ()) )
-				return false;
-
-			if ( !valid_extensions.Contains (".jpg") && !valid_extensions.Contains (".jpeg"))
-				throw new System.NotImplementedException ("can only save jpeg :(");
-
-			return (new JpegFilter ()).Convert (req);
-		}
-	}
-}
diff --git a/src/FolderQueryWidget.cs b/src/FolderQueryWidget.cs
deleted file mode 100644
index b08f50f..0000000
--- a/src/FolderQueryWidget.cs
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * FSpot.FolderQueryWidget.cs
- *
- * Author(s)
- * 	Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- */
-
-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
-{
-	public class FolderQueryWidget : HBox
-	{
-		PhotoQuery query;
-		FolderSet folder_set;
-		
-		public FolderQueryWidget (PhotoQuery query) : base ()
-		{
-			folder_set = new FolderSet ();
-			this.query = query;
-			
-			query.SetCondition (folder_set);
-			
-			Drag.DestSet (this, DestDefaults.All,
-			              folder_query_widget_source_table,
-			              Gdk.DragAction.Copy | Gdk.DragAction.Move);
-		}
-		
-		void UpdateGui ()
-		{
-			while (Children.Length != 0)
-				Remove (Children[0]);
-			
-			int length = folder_set.Folders.Count ();
-			
-			if (length == 0) {
-				Hide ();
-				return;
-			}
-			
-			if (length < 4) {
-				
-				foreach (var uri in folder_set.Folders) {
-					Image image = new Image ("gtk-directory", IconSize.Button);
-					image.TooltipText = uri.ToString ();
-					PackStart (image);
-				}
-				
-				TooltipText = String.Empty;
-				
-			} else {
-				
-				Label label = new Label (String.Format ("<i>{0}x</i>", length));
-				label.UseMarkup = true;
-				PackStart (label);
-				
-				Image image = new Image ("gtk-directory", IconSize.Button);
-				PackStart (image);
-				
-				StringBuilder builder = new StringBuilder ();
-				foreach (var uri in folder_set.Folders) {
-					if (builder.Length > 0)
-						builder.AppendLine ();
-					
-					builder.Append (uri.ToString ());
-				}
-				
-				TooltipText = builder.ToString ();
-			}
-			
-			ShowAll ();
-		}
-		
-		public void SetFolders (IEnumerable<SafeUri> uris)
-		{
-			folder_set.Folders = uris;
-			
-			UpdateGui ();
-		}
-		
-		public void Clear ()
-		{
-			folder_set.Folders = null;
-		}
-		
-		public bool Empty {
-			get { return folder_set.Folders == null || folder_set.Folders.Count () == 0; }
-		}
-		
-		private static TargetEntry [] folder_query_widget_source_table =
-			new TargetEntry [] {
-				DragDropTargets.UriQueryEntry
-		};
-		
-		protected override void OnDragDataReceived (Gdk.DragContext context, int x, int y, Gtk.SelectionData selection_data, uint info, uint time_)
-		{
-			base.OnDragDataReceived (context, x, y, selection_data, info, time_);
-			
-			SetFolders (selection_data.GetUriListData ());
-			query.RequestReload ();
-		}
-	}
-}
diff --git a/src/FullScreenView.cs b/src/FullScreenView.cs
deleted file mode 100644
index e21b9fd..0000000
--- a/src/FullScreenView.cs
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * FSpot.FullScreenView
- *
- * Author(s):
- * 	Larry Ewing  <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Gtk;
-using Gdk;
-using FSpot.Widgets;
-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;
-		private ToolButton play_pause_button;
-		private ToggleToolButton info_button;
-		private Delay hide_cursor_delay;
-
-		ActionGroup actions;
-		const string ExitFullScreen = "ExitFullScreen";
-		const string HideToolbar = "HideToolbar";
-		const string SlideShow = "SlideShow";
-		const string Info = "Info";
-		
-		public FullScreenView (IBrowsableCollection collection, Gtk.Window parent) : base ("Full Screen Mode")
-		{
-			//going fullscreen on the same screen the parent window
-			Gdk.Screen screen = Screen;
-			int monitor = screen.GetMonitorAtWindow (parent.GdkWindow);
-			Gdk.Rectangle bounds = screen.GetMonitorGeometry (monitor);
-			Move (bounds.X, bounds.Y);
-
-			string style = "style \"test\" {\n" +
-				"GtkToolbar::shadow_type = GTK_SHADOW_NONE\n" +
-				"}\n" +
-				"class \"GtkToolbar\" style \"test\"";
-
-			Gtk.Rc.ParseString (style);
-
-			Name = "FullscreenContainer";
-			try {
-				//scroll = new Gtk.ScrolledWindow (null, null);
-				actions = new ActionGroup ("joe");
-				
-				actions.Add (new ActionEntry [] {
-					new ActionEntry (HideToolbar, Stock.Close, 
-							 Catalog.GetString ("Hide"), 
-							 null, 
-							 Catalog.GetString ("Hide toolbar"), 
-							 HideToolbarAction)});
-
-				actions.Add (new ToggleActionEntry [] {
-					new ToggleActionEntry (Info,
-							       Stock.Info,
-							       Catalog.GetString ("Info"),
-							       null,
-							       Catalog.GetString ("Image information"),
-							       InfoAction,
-							       false)});
-
-				Gtk.Action exit_full_screen = new Gtk.Action (ExitFullScreen, 
-					Catalog.GetString ("Exit fullscreen"),
-					null,
-					null);
-				exit_full_screen.IconName = "view-restore";
-				exit_full_screen.Activated += ExitAction;
-				actions.Add (exit_full_screen);
-
-				Gtk.Action slide_show = new Gtk.Action (SlideShow,
-					Catalog.GetString ("Slideshow"),
-					Catalog.GetString ("Start slideshow"),
-					null);
-				slide_show.IconName = "media-playback-start";
-				slide_show.Activated += SlideShowAction;
-				actions.Add (slide_show);
-
-				new Fader (this, 1.0, 600);
-				notebook = new Notebook ();
-				notebook.ShowBorder = false;
-				notebook.ShowTabs = false;
-				notebook.Show ();
-
-				scroll = new ScrolledView ();
-				scroll.ScrolledWindow.SetPolicy (PolicyType.Never, PolicyType.Never);
-				view = new PhotoImageView (collection);
-				// FIXME this should be handled by the new style setting code
-				view.ModifyBg (Gtk.StateType.Normal, this.Style.Black);
-				this.Add (notebook);
-				view.Show ();
-				view.MotionNotifyEvent += HandleViewMotion;
-				view.PointerMode = PointerMode.Scroll;
-				
-				scroll.ScrolledWindow.Add (view);
-
-				Toolbar tbar = new Toolbar ();
-				tbar.ToolbarStyle = Gtk.ToolbarStyle.BothHoriz;
-
-				tbar.ShowArrow = false;
-				tbar.BorderWidth = 15;
-
-				ToolItem t_item = (actions [ExitFullScreen]).CreateToolItem () as ToolItem;
-				t_item.IsImportant = true;
-				tbar.Insert (t_item, -1);
-
-				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);
-				actions.Add (action);
-				tbar.Insert (action.CreateToolItem () as ToolItem, -1);
-
-				t_item = new ToolItem ();
-				t_item.Child = new Label (Catalog.GetString ("Slide transition:"));
-				tbar.Insert (t_item, -1);
-
-				display = new SlideShow (view.Item);
-				display.AddEvents ((int) (Gdk.EventMask.PointerMotionMask));
-				display.ModifyBg (Gtk.StateType.Normal, this.Style.Black);
-				display.MotionNotifyEvent += HandleViewMotion;
-				display.Show ();
-
-				t_item = new ToolItem ();
-				ComboBox combo = ComboBox.NewText ();
-				foreach (var transition in display.Transitions)
-					combo.AppendText (transition.Name);
-				combo.Active = 0;
-				combo.Changed += HandleTransitionChanged;
-				t_item.Child = combo;
-				tbar.Insert (t_item, -1);
-
-				action = new RotateLeftAction (view.Item);
-				actions.Add (action);
-				tbar.Insert (action.CreateToolItem () as ToolItem, -1);
-
-				action = new RotateRightAction (view.Item);
-				actions.Add (action);
-				tbar.Insert (action.CreateToolItem () as ToolItem, -1);
-
-				info_button = (ToggleToolButton) ((actions [Info]).CreateToolItem () as ToolItem);
-				tbar.Insert (info_button, -1);
-
-				tbar.Insert ((actions [HideToolbar]).CreateToolItem () as ToolItem, -1);
-
-				notebook.AppendPage (scroll, null);
-				notebook.AppendPage (display, null);
-
-				tbar.ShowAll ();
-				
-				scroll.Show ();
-				this.Decorated = false;
-				this.Fullscreen ();
-				this.ButtonPressEvent += HandleButtonPressEvent;
-				
-				view.Item.Changed += HandleItemChanged;
-				view.GrabFocus ();
-
-				hide_cursor_delay = new Delay (3000, new GLib.IdleHandler (HideCursor));
-				hide_cursor_delay.Start ();
-				
-				controls = new ControlOverlay (this);
-				controls.Add (tbar);
-				controls.Dismiss ();
-
-				notebook.CurrentPage = 0;
-			} catch (System.Exception e) {
-				Log.Exception (e);
-			}	
-		}
-
-		private Gdk.Cursor empty_cursor;
-		private bool HideCursor ()
-		{
-			if (view.Panning) {
-				return false;
-			}
-
-			if (empty_cursor == null) 
-				empty_cursor = GdkUtils.CreateEmptyCursor (GdkWindow.Display);
-			
-			this.GdkWindow.Cursor = empty_cursor;
-			view.GdkWindow.Cursor = empty_cursor;
-			return false;
-		}
-		
-		private void ShowCursor () 
-		{
-			view.PointerMode = PointerMode.Scroll;
-			this.GdkWindow.Cursor = null;
-		}
-		
-		private void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs args)
-		{
-			if (scroll.ControlBox.Visible)
-				scroll.ShowControls ();
-		}
-
-		void HandleTransitionChanged (object sender, EventArgs e)
-		{
-			ComboBox combo = sender as ComboBox;
-			if (combo == null)
-				return;
-			TreeIter iter;
-			if (combo.GetActiveIter (out iter)) {
-				string name = combo.Model.GetValue (iter, 0) as string;
-				foreach (var transition in display.Transitions)
-					if (transition.Name == name)
-						display.Transition = transition;
-			}
-
-
-		}
-
-		protected override bool OnExposeEvent (Gdk.EventExpose args)
-		{
-			bool ret = base.OnExposeEvent (args);
-
-			HideCursor ();
-			return ret;
-		}
-		
-		private void ExitAction (object sender, System.EventArgs args)
-		{
-			Quit ();
-		}
-
-		private void HideToolbarAction (object sender, System.EventArgs args)
-		{
-			scroll.HideControls (true);
-			controls.Dismiss ();
-		}
-
-		private void SlideShowAction (object sender, System.EventArgs args)
-		{
-			PlayPause ();
-		}
-
-		InfoOverlay info;
-		private void InfoAction (object sender, System.EventArgs args)
-		{
-			bool active = false;
-			if (sender is ToggleToolButton) {
-				(sender as ToggleToolButton).Active = ! (sender as ToggleToolButton).Active;
-				active = (sender as ToggleToolButton).Active;
-			} else 
-				active = (sender as ToggleAction).Active;
-
-			if (info == null) {
-				info = new InfoOverlay (this, view.Item);
-			}
-
-			info.Visibility = active ? 
-				ControlOverlay.VisibilityType.Partial : 
-				ControlOverlay.VisibilityType.None;
-		}
-
-		[GLib.ConnectBefore]
-		private void HandleViewMotion (object sender, Gtk.MotionNotifyEventArgs args)
-		{
-			ShowCursor ();
-			hide_cursor_delay.Restart ();
-			
-			int x, y;
-			Gdk.ModifierType type;
-			((Gtk.Widget)sender).GdkWindow.GetPointer (out x, out y, out type);
-
-			if (y > (Allocation.Height * 0.75)) {
-				controls.Visibility = ControlOverlay.VisibilityType.Partial;
-				scroll.ShowControls ();
-			}
-		}
-
-		public PhotoImageView View {
-			get {
-				return view;
-			}
-		}
-
-		private void HandleButtonPressEvent (object sender, Gtk.ButtonPressEventArgs args)
-		{
-			if (args.Event.Type == Gdk.EventType.ButtonPress
-			    && args.Event.Button == 3) {
-				PhotoPopup popup = new PhotoPopup (this);
-				popup.Activate (this.Toplevel, args.Event);
-			}
-		}
-
-		public bool PlayPause ()
-		{
-			if (notebook.CurrentPage == 0) {
-				FSpot.Platform.ScreenSaver.Inhibit ("Running slideshow mode");
-				notebook.CurrentPage = 1;
-				play_pause_button.IconName = "media-playback-pause";
-				display.Start ();
-			} else {
-				FSpot.Platform.ScreenSaver.UnInhibit ();
-				notebook.CurrentPage = 0;
-				play_pause_button.IconName = "media-playback-start";
-				display.Stop ();
-			}
-			return true;
-		}
-
-		public void Quit ()
-		{
-			hide_cursor_delay.Stop ();
-			FSpot.Platform.ScreenSaver.UnInhibit ();
-
-			this.Destroy ();
-		}
-
-		protected override bool OnKeyPressEvent (Gdk.EventKey key)
-		{
-			switch (key.Key) {
-			// quit only on certain keys
-			case Gdk.Key.F:
-			case Gdk.Key.f:
-			case Gdk.Key.Q:
-			case Gdk.Key.q:
-			case Gdk.Key.F11:
-			case Gdk.Key.Escape:
-				Quit ();
-				return true;
-			// display infobox for 'i' key
-			case Gdk.Key.i:
-			case Gdk.Key.I:
-				InfoAction (info_button, null);
-				return true;
-			case Gdk.Key.bracketleft:
-				new RotateLeftAction (view.Item).Activate ();
-				return true;
-			case Gdk.Key.bracketright:
-				new RotateRightAction (view.Item).Activate ();
-				return true;
-			}
-
-			return base.OnKeyPressEvent (key);
-		}
-	}
-}
diff --git a/src/GroupAdaptor.cs b/src/GroupAdaptor.cs
deleted file mode 100644
index 75d65dd..0000000
--- a/src/GroupAdaptor.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using FSpot.Utils;
-
-namespace FSpot {
-	public interface ILimitable {
-		void SetLimits (int min, int max);
-	}
-	
-	public abstract class GroupAdaptor {
-		protected PhotoQuery query;
-		public PhotoQuery Query {
-			get {
-				return query;
-			}
-		}
-
-		protected bool order_ascending = false;
-		public bool OrderAscending {
-			get {
-				return order_ascending;
-			}
-			set {
-				if (order_ascending != value) {
-					order_ascending = value;
-					Reload();
-				}
-			}
-		}
-		
-		public abstract int Value (int item) ;
-		public abstract int Count ();
-		public abstract string TickLabel (int item);
-		public abstract string GlassLabel (int item);
-
-		protected abstract void Reload ();
-
-		public abstract void SetGlass (int item);
-		public abstract int IndexFromPhoto (FSpot.IBrowsableItem photo);
-		public abstract FSpot.IBrowsableItem PhotoFromIndex (int item);
-
-		public delegate void GlassSetHandler (GroupAdaptor adaptor, int index);
-		public virtual event GlassSetHandler GlassSet;
-
-		public delegate void ChangedHandler (GroupAdaptor adaptor);
-		public virtual event ChangedHandler Changed;
-
-		protected void HandleQueryChanged (IBrowsableCollection sender)
-		{
-			Reload ();
-		}
-
-		public void Dispose ()
-		{
-			this.query.Changed -= HandleQueryChanged;
-		}
-
-		protected GroupAdaptor (PhotoQuery query, bool order_ascending)
-		{
-			this.order_ascending = order_ascending;
-			this.query = query;
-			this.query.Changed += HandleQueryChanged;
-
-			Reload (); 
-		}
-	}
-}
diff --git a/src/GroupSelector.cs b/src/GroupSelector.cs
deleted file mode 100644
index 6bd0d62..0000000
--- a/src/GroupSelector.cs
+++ /dev/null
@@ -1,1250 +0,0 @@
-using System;
-using Mono.Unix;
-using Gtk;
-using Gdk;
-using GLib;
-using FSpot.Utils;
-
-namespace FSpot {
-	public class GroupSelector : Fixed {
-		internal static GType groupSelectorGType;
-
-		int border = 6;
-		int box_spacing = 2;
-		int box_top_padding = 6;
-		public static int MIN_BOX_WIDTH = 20;
-
-		private Glass glass;
-		private Limit min_limit;
-		private Limit max_limit;
-
-		private Gtk.Button left;
-		private Gtk.Button right;
-		private Delay left_delay;
-		private Delay right_delay;
-
-		private Gdk.Window event_window;
-
-		public Gdk.Rectangle background;
-		public Gdk.Rectangle legend;
-		public Gdk.Rectangle action;
-
-		Pango.Layout [] tick_layouts;
-		int [] box_counts = new int [0];
-		int box_count_max;
-		int min_filled;
-		int max_filled;
-		bool has_limits;
-		
-		protected FSpot.GroupAdaptor adaptor;
-		public FSpot.GroupAdaptor Adaptor {
-			set {
-				if (adaptor != null) {
-					adaptor.Changed -= HandleAdaptorChanged;
-					adaptor.Dispose ();
-				}
-
-				adaptor = value;
-				HandleAdaptorChanged (adaptor);
-				has_limits = adaptor is FSpot.ILimitable;
-
-				if (has_limits) {
-				    min_limit.SetPosition (0, false);
-				    max_limit.SetPosition (adaptor.Count () - 1, false);
-				}
-			
-				if (adaptor is TimeAdaptor) {
-					left.TooltipText = Catalog.GetString ("More dates");
-					right.TooltipText = Catalog.GetString ("More dates");
-				} else {
-					left.TooltipText = Catalog.GetString ("More");
-					right.TooltipText = Catalog.GetString ("More");
-				}
-				
-				adaptor.Changed += HandleAdaptorChanged;
-			}
-			get {
-				return adaptor;
-			}
-		}
-
-		public bool GlassUpdating {
-			get {
-				return glass.GlassUpdating;
-			}
-			set {
-				glass.GlassUpdating = value;
-			}
-		}
-
-		public int GlassPosition {
-			get {
-				return glass.Position;
-			}
-		}
-
-		private void HandleAdaptorChanged (GroupAdaptor adaptor)
-		{
-			bool size_changed = box_counts.Length != adaptor.Count ();
-			int [] box_values = new int [adaptor.Count ()];
-			
-			if (tick_layouts != null) {
-				foreach (Pango.Layout l in tick_layouts) {
-					if (l != null)
-						l.Dispose ();
-				}
-			}
-			tick_layouts = new Pango.Layout [adaptor.Count ()];
-			
-			int i = 0;
-			while (i < adaptor.Count ()) {
-				box_values [i] = adaptor.Value (i);
-				string label = adaptor.TickLabel (i);
-				if (label != null) {
-					tick_layouts [i] = CreatePangoLayout (label);
-				}
-				i++;
-			}
-			
-			if (glass.Position >= adaptor.Count())
-				glass.SetPosition (adaptor.Count() - 1);
-			
-			Counts = box_values;
-			
-			if (has_limits && size_changed) {
-				min_limit.SetPosition (0, false);
-				max_limit.SetPosition (adaptor.Count () - 1, false);
-			}
-			
-			for (i = min_limit.Position; i < box_counts.Length; i++)
-				if (box_counts [i] > 0)
-						break;
-			
-			SetPosition (i < box_counts.Length ? i : min_limit.Position);
-			ScrollTo (min_limit.Position);
-
-			this.QueueDraw ();
-		}
-		
-		private int [] Counts {
-			set {
-				bool min_found = false;
-				box_count_max = 0;
-				min_filled = 0;
-				max_filled = 0;
-
-				if (value != null)
-					box_counts = value;
-				else
-					value = new int [0];
-
-				for (int i = 0; i < box_counts.Length; i++){
-					int count = box_counts [i];
-					box_count_max = Math.Max (count, box_count_max);
-
-					if (count > 0) { 
-						if (!min_found) {
-							min_filled = i;
-							min_found = true;
-						}
-						max_filled = i;
-					}
-				}
-			}
-		}
-
-		public enum RangeType {
-			All,
-			Fixed,
-			Min
-		}
-			
-		private RangeType mode = RangeType.Min;
-		public RangeType Mode {
-			get {
-				return mode;
-			}
-			set {
-				mode = value;
-				if (Visible)
-					GdkWindow.InvalidateRect (Allocation, false);
-			}
-		}
-
-		private void ScrollTo (int position)
-		{
-			if (position ==  min_filled)
-				position = 0;
-			else if (position == max_filled)
-				position = box_counts.Length - 1;
-			
-			Gdk.Rectangle box = new Box (this, position).Bounds;
-
-			// Only scroll to position if we are not dragging
-			if (!glass.Dragging)
-			{
-				if (box.Right > background.Right)
-			        	Offset -= box.X + box.Width - (background.X + background.Width);
-				else if (box.X < background.X)
-					Offset += background.X - box.X;
-			}
-		}
-
-		private int scroll_offset;
-		public int Offset {
-			get {
-				return scroll_offset;
-			}
-			set {
-				scroll_offset = value;
-				
-				int total_width = (int)(box_counts.Length * BoxWidth);
-
-				if (total_width + scroll_offset < background.Width)
-					scroll_offset = background.Width - total_width;
-				
-				if (total_width <= background.Width)
-					scroll_offset = 0;
-
-				UpdateButtons ();
-
-				if (Visible)
-					GdkWindow.InvalidateRect (Allocation, false);
-			}
-		}
-		
-		private void UpdateButtons () 
-		{
-			left.Sensitive = (scroll_offset < 0);
-			right.Sensitive = (box_counts.Length * BoxWidth > background.Width - scroll_offset);
-
-			if (!left.Sensitive && left_delay.IsPending) 
-				left_delay.Stop ();
-
-			if (!right.Sensitive && right_delay.IsPending)
-				right_delay.Stop ();
-		}
-
-		private void BoxXHitFilled (double x, out int out_position)
-		{
-			x -= BoxX (0);
-			double position = (x / BoxWidth);
-			position = System.Math.Max (0, position);
-			position = System.Math.Min (position, box_counts.Length - 1);
-			
-			if (box_counts [(int)position] > 0) {
-				out_position = (int)position;
-			} else {
-				int upper = (int)position;
-				while (upper < box_counts.Length && box_counts [upper] == 0)
-					upper++;
-				
-				int lower = (int)position;
-				while (lower >= 0 && box_counts [lower] == 0)
-					lower--;
-				
-				if (lower == -1 && upper == box_counts.Length) {
-					out_position = (int)position;
-				} else if (lower == -1 && upper < box_counts.Length) {
-					out_position = upper;
-				} else if (upper == box_counts.Length && lower > -1){
-					out_position = lower;
-				} else if (upper + 1 - position > position - lower) {
-					out_position = lower;
-				} else {
-					out_position = upper;
-				}
-			}
-		}
-
-		private bool BoxXHit (double x, out int position)
-		{
-			x -= BoxX (0);
-			position = (int) (x / BoxWidth);
-			if (position < 0) { 
-				position = 0;
-				return false;
-			} else if (position >= box_counts.Length) {
-				position = box_counts.Length -1;
-				return false;
-			}
-			return true;
-		}
-
-		private bool BoxHit (double x, double y, out int position) 
-		{
-			if (BoxXHit (x, out position)) {
-				Box box = new Box (this, position);
-
-				if (box.Bounds.Contains ((int) x, (int) y))
-					return true;
-
-				position++;
-			}
-			return false;
-		}
-
-		public void SetPosition (int group)
-		{
-			if (!glass.Dragging)
-				glass.SetPosition(group);
-		}
-
-		protected override bool OnButtonPressEvent (Gdk.EventButton args)
-		{
-			if (args.Button == 3)
-				return DrawOrderMenu (args); 
-
-			double x = args.X + action.X;
-			double y = args.Y + action.Y;
-
-			if (glass.Contains (x, y)) {
-				glass.StartDrag (x, y, args.Time);
-			} else if (has_limits && min_limit.Contains (x, y)) {
-				min_limit.StartDrag (x, y, args.Time);
-			} else if (has_limits && max_limit.Contains (x, y)) {
-				max_limit.StartDrag (x, y, args.Time);
-			} else {
-				int position;
-				if (BoxHit (x, y, out position)) {
-					BoxXHitFilled (x, out position);
-					glass.UpdateGlass = true;
-					glass.SetPosition (position);
-					glass.UpdateGlass = false;
-					return true;
-				}
-			}
-			
-			return base.OnButtonPressEvent (args);
-		}
-		
-		protected override bool OnButtonReleaseEvent (Gdk.EventButton args) 
-		{
-			double x = args.X + action.X;
-			double y = args.Y + action.Y;
-
-			if (glass.Dragging) {
-				glass.EndDrag (x, y);
-			} else if (min_limit.Dragging) {
-				min_limit.EndDrag (x, y);
-			} else if (max_limit.Dragging) {
-				max_limit.EndDrag (x, y);
-			}
-			return base.OnButtonReleaseEvent (args);
-		}
-
-		public void UpdateLimits () 
-		{
-			if (adaptor != null && has_limits && min_limit != null && max_limit != null)
-				((ILimitable)adaptor).SetLimits (min_limit.Position, max_limit.Position);
-		}
-
-		protected override bool OnMotionNotifyEvent (Gdk.EventMotion args) 
-		{
-			double x = args.X + action.X;
-			double y = args.Y + action.Y;
-
-			//Rectangle box = glass.Bounds ();
-			//Console.WriteLine ("please {0} and {1} in box {2}", x, y, box);
-
-			if (glass == null)
-				return base.OnMotionNotifyEvent (args);
-
-			if (glass.Dragging) {
-				glass.UpdateDrag (x, y);
-			} else if (min_limit.Dragging) {
-				min_limit.UpdateDrag (x, y);
-			} else if (max_limit.Dragging) {
-				max_limit.UpdateDrag (x, y);
-			} else {
-				glass.State = glass.Contains (x, y) ? StateType.Prelight : StateType.Normal;
-				min_limit.State = min_limit.Contains (x, y) ? StateType.Prelight : StateType.Normal;
-				max_limit.State = max_limit.Contains (x, y) ? StateType.Prelight : StateType.Normal;
-			}
-
-			return base.OnMotionNotifyEvent (args);
-		}
-
-		protected override void OnRealized ()
-		{
-			SetFlag (WidgetFlags.Realized);
-			GdkWindow = ParentWindow;
-
-			base.OnRealized ();
-			
-			WindowAttr attr = WindowAttr.Zero;
-			attr.WindowType = Gdk.WindowType.Child;
-			
-			
-
-			attr.X = action.X;
-			attr.Y = action.Y;
-			attr.Width = action.Width;
-			attr.Height = action.Height;
-			attr.Wclass = WindowClass.InputOnly;
-			attr.EventMask = (int) Events;
-			attr.EventMask |= (int) (EventMask.ButtonPressMask | 
-						 EventMask.KeyPressMask |
-						 EventMask.KeyReleaseMask |
-						 EventMask.ButtonReleaseMask | 
-						 EventMask.PointerMotionMask);
-				
-			event_window = new Gdk.Window (GdkWindow, attr, (int) (WindowAttributesType.X | WindowAttributesType.Y));
-			event_window.UserData = this.Handle;
-		}
-
-		protected override void OnUnrealized () 
-		{
-			event_window.Dispose ();
-			event_window = null;
-			base.OnUnrealized ();
-		}
-		
-		private Double BoxWidth {
-			get {
-				switch (mode) {
-				case RangeType.All:
-					return Math.Max (1.0, background.Width / (double) box_counts.Length);
-				case RangeType.Fixed:
-					return background.Width / (double) 12;
-				case RangeType.Min:
-					return Math.Max (MIN_BOX_WIDTH, background.Width / (double) box_counts.Length);
-				default:
-					return (double) MIN_BOX_WIDTH;
-				}
-			}
-		}
-
-		private int BoxX (int item) 
-		{
-			 return scroll_offset + background.X + (int) Math.Round (BoxWidth * item);
-		}
-
-		private struct Box {
-			Gdk.Rectangle bounds;
-			Gdk.Rectangle bar;
-			
-			public Box (GroupSelector selector, int item)
-			{
-				bounds.Height = selector.background.Height;
-				bounds.Y = selector.background.Y;
-				bounds.X = selector.BoxX (item);
-				bounds.Width = Math.Max (selector.BoxX (item + 1) - bounds.X, 1);
-
-				if (item < 0 || item > selector.box_counts.Length - 1)
-					return;
-
-				double percent = selector.box_counts [item] / (double) Math.Max (selector.box_count_max, 1);
-				bar = bounds;
-				bar.Height = (int) Math.Ceiling ((bounds.Height - selector.box_top_padding) * percent);
-				bar.Y += bounds.Height - bar.Height - 1;
-				
-				bar.Inflate (- selector.box_spacing, 0);
-			}
-			
-			public Gdk.Rectangle Bounds {
-				get {
-					return bounds;
-				}
-			}
-
-			public Gdk.Rectangle Bar {
-				get {
-					return bar;
-				}
-			}
-
-		}
-
-		private void DrawBox (Rectangle area, int item) 
-		{
-			Box box = new Box (this, item);
-			Rectangle bar = box.Bar;
-			
-			if (bar.Intersect (area, out area)) {
-				if (item < min_limit.Position || item > max_limit.Position) {
-#if false
-					bar.Height += 1;
-
-					//GdkWindow.DrawRectangle (Style.ForegroundGC (StateType.Normal), false, box);
-					Style.PaintShadow (this.Style, GdkWindow, State, ShadowType.In, area, 
-							   this, null, bar.X, bar.Y, 
-							   bar.Width, bar.Height);
-#else
-					GdkWindow.DrawRectangle (Style.BackgroundGC (StateType.Active), true, area);
-#endif
-				} else {
-					GdkWindow.DrawRectangle (Style.BaseGC (StateType.Selected), true, area);
-				}
-			}
-		}
-		
-		public Rectangle TickBounds (int item)
-		{
-			Rectangle bounds = Rectangle.Zero;
-			bounds.X = BoxX (item);
-			bounds.Y = legend.Y + 3;
-			bounds.Width = 1;
-			bounds.Height = 6;
-			
-			return bounds;
-		}
-		
-		public void DrawTick (Rectangle area, int item)
-		{
-			Rectangle tick = TickBounds (item);
-			Pango.Layout layout = null; 
-
-			if (item < tick_layouts.Length) {
-				layout = tick_layouts [item];
-
-				if (layout != null) {
-					int width, height;
-					layout.GetPixelSize (out width, out height);
-					
-					Style.PaintLayout (Style, GdkWindow, State, true, area, this,
-						   "GroupSelector:Tick", tick.X + 3, tick.Y + tick.Height, layout); 
-				}
-			}
-
-			if (layout == null)
-				tick.Height /= 2;
-
-			if (tick.Intersect (area, out area)) {
-				GdkWindow.DrawRectangle (Style.ForegroundGC (State), true, area);
-			}
-		}
-		
-		protected override bool OnPopupMenu ()
-		{
-			DrawOrderMenu (null);
-			return true;
-		}
-
-		private bool DrawOrderMenu (Gdk.EventButton args)
-		{
-			Gtk.Menu order_menu = new Gtk.Menu();
-			
-			order_menu.Append (App.Instance.Organizer.ReverseOrderAction.CreateMenuItem ());
-
-			GtkUtil.MakeMenuItem (order_menu, Catalog.GetString ("_Clear Date Range"), 
-						App.Instance.Organizer.HandleClearDateRange);
-			
-			if (args != null)
-				order_menu.Popup (null, null, null, args.Button, args.Time);
-			else
-				order_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
-			
-			return true;
-		}
-
-		public abstract class Manipulator {
-			protected GroupSelector selector;
-			protected Delay timer;
-			public bool Dragging;
-			public bool UpdateGlass;
-			public bool GlassUpdating;
-			public Point DragStart;
-
-			public Manipulator (GroupSelector selector) 
-			{
-				this.selector = selector;
-				timer = new Delay (50, new GLib.IdleHandler (DragTimeout)); 
-			}
-			
-			protected int drag_offset;
-			public int DragOffset {
-				set {
-					Rectangle then = Bounds ();
-					drag_offset = value;
-					Rectangle now = Bounds ();
-					
-					if (selector.Visible) {
-						selector.GdkWindow.InvalidateRect (then, false);
-						selector.GdkWindow.InvalidateRect (now, false);
-					}
-				}
-				get {
-					if (Dragging)
-						return drag_offset;
-					else
-						return 0;
-				}
-			}
-
-			public virtual void StartDrag (double x, double y, uint time) 
-			{
-				State = StateType.Active;
-				//timer.Start ();
-				Dragging = true;
-				DragStart.X = (int)x;
-				DragStart.Y = (int)y;
-			}
-
-			private bool DragTimeout ()
-			{
-				int x, y;
-				selector.GetPointer (out x, out y);
-				x += selector.Allocation.X;
-				y += selector.Allocation.Y;
-				UpdateDrag ((double) x, (double) y);
-
-				return true;
-			}
-			
-			protected bool PositionValid (int position)
-			{
-				if (position < 0 || position > selector.box_counts.Length - 1)
-					return false;
-
-				return true;
-			}
-
-			public virtual void UpdateDrag (double x, double y)
-			{
-				Rectangle bounds = Bounds ();
-				double drag_lower_limit = (selector.background.Left) - (bounds.Width/2);
-				double drag_upper_limit = (selector.background.Right) - (bounds.Width/2);
-				double calX = DragStart.X + (x - DragStart.X);
-				
-				if (calX >= drag_lower_limit && calX <= drag_upper_limit) {
-					if (selector.right_delay.IsPending)
-						selector.right_delay.Stop();
-
-					if (selector.left_delay.IsPending)
-						selector.left_delay.Stop();
-
-					DragOffset = (int)x - DragStart.X;
-				} else if (calX >= drag_upper_limit && selector.right.Sensitive && !selector.right_delay.IsPending) {
-					// Ensure selector is at the limit
-					if (bounds.Left != drag_upper_limit)
-						DragOffset = (int)drag_upper_limit - DragStart.X;
-					selector.Offset -= 10;
-					selector.right_delay.Start();
-				} else if (calX <= drag_lower_limit && selector.left.Sensitive && !selector.left_delay.IsPending) {
-					// Ensure selector is at the limit
-					if (bounds.Left != drag_lower_limit)
-						DragOffset = (int)drag_lower_limit - DragStart.X;
-					selector.Offset += 10;
-					selector.left_delay.Start();
-				}
-			}
-
-			public virtual void EndDrag (double x, double y)
-			{
-				timer.Stop ();
-
-				Rectangle box = Bounds ();
-				double middle = box.X + (box.Width / 2.0);
-
-				int position;
-				DragOffset = 0;
-				Dragging = false;
-				if (selector.BoxXHit (middle, out position)) {
-					this.SetPosition (position);
-					State = StateType.Prelight;
-				} else {
-					State = selector.State;
-				}
-			}
-
-			private StateType state;
-			public StateType State {
-				get {
-					return state;
-				}
-				set {
-					if (state != value) {
-						selector.GdkWindow.InvalidateRect (Bounds (), false);
-					}
-					state = value;
-				}
-			}
-
-			public void SetPosition (int position)
-			{
-				SetPosition (position, true);
-			}
-
-			public void SetPosition (int position, bool update)
-			{
-				if (! PositionValid (position))
-					return;
-				    
-				Rectangle then = Bounds ();
-				this.position = position;
-				Rectangle now = Bounds ();
-				
-				if (selector.Visible) {
-					then = now.Union (then);
-					selector.GdkWindow.InvalidateRect (then, false);
-					//selector.GdkWindow.InvalidateRect (now, false);
-				}
-
-				if (update)
-					PositionChanged ();
-			}
-
-			private int position;
-			public int Position {
-				get {
-					return position;
-				}
-			}
-
-			public abstract void Draw (Rectangle area);
-			
-			public abstract void PositionChanged ();
-
-			public abstract Rectangle Bounds ();
-
-			public virtual bool Contains (double x, double y)
-			{
-				return Bounds ().Contains ((int)x, (int)y);
-			}
-		}
-		
-		private class Glass : Manipulator {
-			Gtk.Window popup_window;
-			Gtk.Label popup_label;
-			int drag_position;
-
-			public Glass (GroupSelector selector) : base (selector) 
-			{
-				popup_window = new TipWindow ();
-				popup_label = new Gtk.Label (String.Empty);
-				popup_label.Show ();
-				popup_window.Add (popup_label);
-			}
-
-			public int handle_height = 15;
-			private int border {
-				get {
-					return selector.box_spacing * 2;
-				}
-			}
-			
-			private void UpdatePopupPosition ()
-			{
-				int x = 0, y = 0;
-				Rectangle bounds = Bounds ();
-				Requisition requisition = popup_window.SizeRequest ();
-				popup_window.Resize  (requisition.Width, requisition.Height);
-				selector.GdkWindow.GetOrigin (out x, out y);
-				x += bounds.X + (bounds.Width - requisition.Width) / 2;
-				y += bounds.Y - requisition.Height;
-				x = Math.Max (x, 0);
-				x = Math.Min (x, selector.Screen.Width - requisition.Width);
-				popup_window.Move (x, y);
-			}
-
-			public void MaintainPosition()
-			{
-				Rectangle box = Bounds ();
-				double middle = box.X + (box.Width / 2.0);
-				int current_position;
-
-				if (selector.BoxXHit (middle, out current_position)) {
-					if (current_position != drag_position)
-						popup_label.Text = selector.Adaptor.GlassLabel (current_position);
-					drag_position = current_position;
-				}
-				UpdatePopupPosition ();
-				selector.ScrollTo (drag_position);
-			}
-
-			public override void StartDrag (double x, double y, uint time)
-			{
-				if (!PositionValid (Position))
-					return;
-
-				base.StartDrag (x, y, time);
-				popup_label.Text = selector.Adaptor.GlassLabel (this.Position);
-				popup_window.Show ();
-				UpdatePopupPosition ();
-				drag_position = this.Position;
-			}
-			
-			public override void UpdateDrag (double x, double y)
-			{
-				Rectangle box = Bounds ();
-				double middle = box.X + (box.Width / 2.0);
-				int current_position;
-				
-				base.UpdateDrag (x, y);
-				MaintainPosition();
-			}
-
-			public override void EndDrag (double x, double y)
-			{
-				timer.Stop ();
-
-				Rectangle box = Bounds ();
-				double middle = box.X + (box.Width / 2.0);
-
-				int position;
-				DragOffset = 0;
-				Dragging = false;
-
-				selector.BoxXHitFilled (middle, out position);
-				UpdateGlass = true;
-				this.SetPosition (position);
-				UpdateGlass = false;
-				State = StateType.Prelight;
-				popup_window.Hide ();
-			}
-
-			private Rectangle InnerBounds ()
-			{
-				Rectangle box = new Box (selector, Position).Bounds;
-				if (Dragging) {
-					box.X = DragStart.X + DragOffset;
-				} else {
-					box.X += DragOffset;
-				}
-				return box;
-			}
-			
-			public override Rectangle Bounds () 
-			{
-				Rectangle box = InnerBounds ();
-
-				box.Inflate  (border, border);
-				box.Height += handle_height;
-				
-				return box;
-			}
-
-			public override void Draw (Rectangle area)
-			{
-				if (! PositionValid (Position))
-					return;
-
-				Rectangle inner = InnerBounds ();
-				Rectangle bounds = Bounds ();
-				
-				if (! bounds.Intersect (area, out area))
-				    return;
-				    
-				int i = 0;
-				
-				Rectangle box = inner;
-				box.Width -= 1;
-				box.Height -= 1;
-				while (i < border) {
-					box.Inflate (1, 1);
-					
-					selector.Style.BackgroundGC (State).ClipRectangle = area;
-					selector.GdkWindow.DrawRectangle (selector.Style.BackgroundGC (State), 
-									  false, box);
-					i++;
-				}
-				
-				
-				Style.PaintFlatBox (selector.Style, selector.GdkWindow, State, ShadowType.In, 
-						    area, selector, "glass", bounds.X, inner.Y + inner.Height + border, 
-						    bounds.Width, handle_height);
-				
-				Style.PaintHandle (selector.Style, selector.GdkWindow, State, ShadowType.In, 
-						   area, selector, "glass", bounds.X, inner.Y + inner.Height + border, 
-						   bounds.Width, handle_height, Orientation.Horizontal);
-				
-				Style.PaintShadow (selector.Style, selector.GdkWindow, State, ShadowType.Out, 
-						   area, selector, null, bounds.X, bounds.Y, bounds.Width, bounds.Height);
-				
-				Style.PaintShadow (selector.Style, selector.GdkWindow, State, ShadowType.In, 
-						   area, selector, null, inner.X, inner.Y, inner.Width, inner.Height);
-				
-			}
-			
-			public override void PositionChanged ()
-			{
-				GlassUpdating = true;
-				if (Dragging || UpdateGlass)
-					selector.adaptor.SetGlass (Position);
-				selector.ScrollTo (Position);
-				GlassUpdating = false;
-			}
-			
-
-		}
-
-		public class Limit : Manipulator {
-			int width = 10;
-			int handle_height = 10;
-
-			public enum LimitType {
-				Min,
-				Max
-			}
-
-			private LimitType limit_type;
-			
-			public override Rectangle Bounds () 
-			{
-				int limit_offset = limit_type == LimitType.Max ? 1 : 0;
-
-				Rectangle bounds = new Rectangle (0, 0, width, selector.background.Height + handle_height);
-				
-				if (Dragging) {
-					bounds.X = DragStart.X + DragOffset;
-				} else {
-					bounds.X = DragOffset + selector.BoxX (Position + limit_offset) - bounds.Width /2;
-				}
-				bounds.Y = selector.background.Y - handle_height/2;
-				return bounds;
-			}
-
-			public override void Draw (Rectangle area) 
-			{
-				Rectangle bounds = Bounds ();
-				Rectangle top = new Rectangle (bounds.X,
-							       bounds.Y,
-							       bounds.Width,
-							       handle_height);
-
-				Rectangle bottom = new Rectangle (bounds.X,
-								  bounds.Y + bounds.Height - handle_height,
-								  bounds.Width,
-								  handle_height);
-#if false
-
-				Gdk.Point [] top_points = { new Gdk.Point (top.X, top.Y),
-							    new Gdk.Point (top.X, top.Y + top.Height),
-							    new Gdk.Point ((int)(top.X + top.Width/2), (int)(top.Y + top.Height * 1.5)),
-							    new Gdk.Point (top.X + top.Width, top.Y + top.Height),
-							    new Gdk.Point (top.X + top.Width, top.Y),
-							    new Gdk.Point (top.X, top.Y) };
-				Style.PaintPolygon (selector.Style, selector.GdkWindow, State, ShadowType.In, area,
-						    selector, "IconView:Selector", top_points, true);
-
-				Gdk.Point [] bottom_points = { new Gdk.Point (bottom.X, bottom.Y + bottom.Height),
-							       new Gdk.Point (bottom.X, bottom.Y),
-							       new Gdk.Point ((int)(bottom.X + bottom.Width/2), (int)(bottom.Y - bottom.Height/2)),
-							       new Gdk.Point (bottom.X + bottom.Width, bottom.Y),
-							       new Gdk.Point (bottom.X + bottom.Width, bottom.Y + bottom.Height),
-							       new Gdk.Point (bottom.X, bottom.Y + bottom.Height) };
-				Style.PaintPolygon (selector.Style, selector.GdkWindow, State, ShadowType.In, area,
-						    selector, "IconView:Selector", bottom_points, true);
-#else
-				Style.PaintBox (selector.Style, selector.GdkWindow, State, ShadowType.Out, area,
-						selector, null, top.X, top.Y, top.Width, top.Height);
-
-				Style.PaintBox (selector.Style, selector.GdkWindow, State, ShadowType.Out, area,
-						selector, null, bottom.X, bottom.Y, bottom.Width, bottom.Height);
-#endif
-			}
-
-			public Limit (GroupSelector selector, LimitType type) : base (selector) 
-			{
-				limit_type = type;
-			}
-
-			public override void PositionChanged ()
-			{
-				selector.UpdateLimits ();
-			}
-		}
-		
-		protected override void OnMapped ()
-		{
-			base.OnMapped ();
-			if (event_window != null)
-				event_window.Show ();
-		}
-
-		protected override void OnUnmapped ()
-		{
-			base.OnUnmapped ();
-			if (event_window != null)
-				event_window.Hide ();
-			
-		}
-		
-		protected override bool OnExposeEvent (Gdk.EventExpose args)
-		{
-			Rectangle area; 
-			//Console.WriteLine ("expose {0}", args.Area);
-			foreach (Rectangle sub in args.Region.GetRectangles ()) {
-				if (sub.Intersect (background, out area)) {
-					Rectangle active = background;
-					int min_x = BoxX (min_limit.Position);
-					int max_x = BoxX (max_limit.Position + 1);
-					active.X = min_x;
-					active.Width = max_x - min_x;
-					
-					if (active.Intersect (area, out active))
-						GdkWindow.DrawRectangle (Style.BaseGC (State), true, active);
-					
-					int i;
-					BoxXHit (area.X, out i);
-					int end;
-					BoxXHit (area.X + area.Width, out end);
-					while (i <= end)
-						DrawBox (area, i++);
-				}
-				
-				Style.PaintShadow (this.Style, GdkWindow, State, ShadowType.In, area, 
-						   this, null, background.X, background.Y, 
-						   background.Width, background.Height);
-				
-				if (sub.Intersect (legend, out area)) {
-					int i = 0;
-					
-					while (i < box_counts.Length)
-						DrawTick (area, i++);
-				}
-				
-				if (has_limits) {
-					if (min_limit != null) {
-						min_limit.Draw (sub);
-					}
-					
-					if (max_limit != null) {
-						max_limit.Draw (sub);
-					}
-				}
-				
-				if (glass != null) {
-					glass.Draw (sub);
-				}
-			}
-			return base.OnExposeEvent (args);
-		}
-			
-		protected override void OnSizeRequested (ref Requisition requisition)
-		{
-			left.SizeRequest ();
-			right.SizeRequest ();
-			requisition.Width = 500;
-			requisition.Height = (int) (LegendHeight () + glass.handle_height + 3 * border);
-		}
-
-		// FIXME I can't find a c# wrapper for the C PANGO_PIXELS () macro
-		// So this Function is for that.
-		public static int PangoPixels (int val)
-		{
-			return val >= 0 ? (val + 1024 / 2) / 1024 :
-				(val - 1024 / 2) / 1024;
-		}
-
-		private int LegendHeight ()
-		{
-			int max_height = 0;
-
-			Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription, 
-										  Pango.Language.FromString ("en_US"));
-			max_height += PangoPixels (metrics.Ascent + metrics.Descent);
-
-			foreach (Pango.Layout l in tick_layouts) {
-				if (l != null) {
-					int width, height;
-					
-					l.GetPixelSize (out width, out height);
-					max_height = Math.Max (height, max_height);
-				}
-			}
-			
-			return (int) (max_height * 1.5);
-		}
-
-		private bool HandleScrollRight ()
-		{
-			if (glass.Dragging)
-				glass.MaintainPosition ();
-
-			Offset -= 10;
-			return true;
-		}
-
-		private bool HandleScrollLeft ()
-		{
-			if (glass.Dragging)
-				glass.MaintainPosition ();
-
-			Offset += 10;
-			return true;
-		}
-		
-		private void HandleLeftPressed (object sender, System.EventArgs ars)
-		{
-			HandleScrollLeft ();
-			left_delay.Start ();
-		}
-
-		private void HandleRightPressed (object sender, System.EventArgs ars)
-		{
-			HandleScrollRight ();
-			right_delay.Start ();
-		}
-
-		[GLib.ConnectBefore]
-		private void HandleScrollReleaseEvent (object sender, ButtonReleaseEventArgs args)
-		{
-			right_delay.Stop ();
-			left_delay.Stop ();
-		}
-
-		protected override void OnSizeAllocated (Gdk.Rectangle alloc)
-		{
-			base.OnSizeAllocated (alloc);
-			int legend_height = LegendHeight ();
-	
-			Gdk.Rectangle bar = new Rectangle (alloc.X + border, alloc.Y + border,
-							   alloc.Width - 2 *  border,
-							   alloc.Height - 2 * border - glass.handle_height);
-							   
-		
-			if (left.Allocation.Y != bar.Y || left.Allocation.X != bar.X) {
-				left.SetSizeRequest (-1, bar.Height);
-				this.Move (left, bar.X - Allocation.X, bar.Y - Allocation.Y);
-			}
-			
-			if (right.Allocation.Y != bar.Y || right.Allocation.X != bar.X + bar.Width - right.Allocation.Width) {
-				right.SetSizeRequest (-1, bar.Height);
-				this.Move (right,  bar.X - Allocation.X + bar.Width - right.Allocation.Width, 
-					   bar.Y - Allocation.Y);
-			}
-
-			background = new Rectangle (bar.X + left.Allocation.Width, bar.Y, 
-						    bar.Width - left.Allocation.Width - right.Allocation.Width, 
-						    bar.Height);
-			
-			legend = new Rectangle (background.X, background.Y,
-						background.Width, legend_height);
-
-			action = background.Union (glass.Bounds ());
-
-			if (event_window != null)
-				event_window.MoveResize (action.X, action.Y, action.Width, action.Height);
-			
-			this.Offset = this.Offset;
-
-			UpdateButtons ();
-		}
-
-		public void ResetLimits ()
-		{
-			min_limit.SetPosition(0,false);
-			max_limit.SetPosition(adaptor.Count () - 1, false);
-		}
-
-		public void SetLimitsToDates(DateTime start, DateTime stop)
-		{
-			if (((TimeAdaptor)adaptor).OrderAscending) {
-				min_limit.SetPosition(((TimeAdaptor)adaptor).IndexFromDate(start),false);
-				max_limit.SetPosition(((TimeAdaptor)adaptor).IndexFromDate(stop),false);
-			} else {
-				min_limit.SetPosition(((TimeAdaptor)adaptor).IndexFromDate(stop),false);
-				max_limit.SetPosition(((TimeAdaptor)adaptor).IndexFromDate(start),false);
-			}
-		}
-
-		public GroupSelector () : base () 
-		{
-			SetFlag (WidgetFlags.NoWindow);
-
-			background = Rectangle.Zero;
-			glass = new Glass (this);
-			min_limit = new Limit (this, Limit.LimitType.Min);
-			max_limit = new Limit (this, Limit.LimitType.Max);
-
-			left = new Gtk.Button ();
-			//left.Add (new Gtk.Image (Gtk.Stock.GoBack, Gtk.IconSize.Button));
-			left.Add (new Gtk.Arrow (Gtk.ArrowType.Left, Gtk.ShadowType.None));
-			left.Relief = Gtk.ReliefStyle.None;
-			//left.Clicked += HandleScrollLeft;
-			left.Pressed += HandleLeftPressed;
-			left.ButtonReleaseEvent += HandleScrollReleaseEvent;
-			left_delay = new Delay (50, new GLib.IdleHandler (HandleScrollLeft));
-
-			right = new Gtk.Button ();
-			//right.Add (new Gtk.Image (Gtk.Stock.GoForward, Gtk.IconSize.Button));
-			right.Add (new Gtk.Arrow (Gtk.ArrowType.Right, Gtk.ShadowType.None));
-			right.Relief = Gtk.ReliefStyle.None;
-			right.Pressed += HandleRightPressed;
-			right.ButtonReleaseEvent += HandleScrollReleaseEvent;
-			right_delay = new Delay (50, new GLib.IdleHandler (HandleScrollRight));
-			//right.Clicked += HandleScrollRight;
-            
-			this.Put (left, 0, 0);
-			this.Put (right, 100, 0);
-			left.Show ();
-			right.Show ();
-
-			CanFocus = true;
-			
-			Mode = RangeType.Min;
-			UpdateButtons ();
-		}
-
-		public GroupSelector (IntPtr raw) : base (raw) {}
-
-#if TEST_MAIN
-		private void HandleKeyPressEvent (object sender, KeyPressEventArgs args)
-		{		
-			switch (args.Event.Key) {
-			case Gdk.Key.Left:
-				if (glass.Position > 0)
-					this.glass.Position--;
-				else 
-					glass.Position = box_counts.Length - 1;
-
-				break;
-			case Gdk.Key.Right:
-				if (glass.Position < box_counts.Length - 1)
-					glass.Position++;
-				else
-					glass.Position = 0;
-
-				break;
-			case Gdk.Key.Down:
-				if (Mode > 0)
-					Mode--;
-				else 
-					Mode = 2;
-
-				break;
-			case Gdk.Key.Up:
-				if (mode < 2)
-					Mode++;
-				else 
-					Mode = 0;
-				break;
-			case Gdk.Key.Home:
-				Offset += 10;
-				break;
-			case Gdk.Key.End:
-				Offset -= 10;
-				break;
-			}
-		}
-
-		public static int Main (string [] args) {
-			
-			Application.Init ();
-			Gtk.Window win = new Gtk.Window ("testing");
-
-			VBox vbox = new VBox (false, 10);
-			GroupSelector gs = new GroupSelector ();
-			gs.Counts = new int [] {20, 100, 123, 10, 5, 2, 3, 50, 8, 10, 22, 0, 55, 129, 120, 30, 14, 200, 21, 55};
-			gs.Mode = RangeType.Fixed;
-			vbox.PackStart (gs);
-
-			gs = new GroupSelector ();
-			gs.Counts = new int [] {20, 100, 123, 10, 5, 2, 3, 50, 8, 10, 22, 0, 55, 129, 120, 30, 14, 200, 21, 55};
-			gs.Mode = RangeType.Fixed;
-			vbox.PackStart (gs);
-
-			win.Add (vbox);
-			win.ShowAll ();
-			win.AddEvents ((int) EventMask.KeyPressMask);
-			win.KeyPressEvent += gs.HandleKeyPressEvent;
-
-			Application.Run ();
-			return 0;
-		}
-#endif
-	}
-
-}
diff --git a/src/Histogram.cs b/src/Histogram.cs
deleted file mode 100644
index 66e4a2e..0000000
--- a/src/Histogram.cs
+++ /dev/null
@@ -1,204 +0,0 @@
-/* 
- * FSpot.Histogram.cs
- *
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- *	Ruben Vermeersch  <ruben at savanne.be>
- *
- * This is free software, See COPYING for details.
- */
-
-using System;
-
-namespace FSpot {
-	public class Histogram {
-#region Color hints
-		private byte [] colors = new byte [] {0x00, 0x00, 0x00, 0xff};
-
-		public byte RedColorHint {
-			set { colors [0] = value; }
-		}
-
-		public byte GreenColorHint {
-			set { colors [1] = value; }
-		}
-
-		public byte BlueColorHint {
-			set { colors [2] = value; }
-		}
-
-		public byte BackgroundColorHint {
-			set { colors [3] = value; }
-		}
-
-		private int [,] values = new int [256, 3];
-#endregion
-
-		public Histogram (Gdk.Pixbuf src)
-		{
-		        FillValues (src);
-		}
-		
-		public Histogram () {}
-
-		private void FillValues (Gdk.Pixbuf src)
-		{
-			values = new int [256, 3];
-
-			if (src.BitsPerSample != 8)
-				throw new System.Exception ("Invalid bits per sample");
-						
-			unsafe {
-				byte * srcb = (byte *)src.Pixels;
-				byte * pixels = srcb;
-				bool alpha = src.HasAlpha;
-				int rowstride = src.Rowstride;
-				int width = src.Width;
-				int height = src.Height;
-
-				// FIXME array bounds checks slow this down a lot
-				// so we use a pointer.  It is sad but I want fastness
-				fixed (int * v = &values [0,0]) {
-					for (int j = 0; j < height; j++) {
-						for (int i = 0; i < width; i++) {
-							v [*(srcb++) * 3 + 0]++;
-							v [*(srcb++) * 3 + 1]++;
-							v [*(srcb++) * 3 + 2]++;
-							
-							if (alpha)
-								srcb++;
-							
-						}
-						srcb =  ((byte *) pixels) + j * rowstride;
-					}
-				}
-			}
-		}
-		
-		private int ChannelSum (int channel)
-		{
-			int sum = 0;
-			for (int i = 0; i < values.GetLength (0); i++) {
-				sum += values [i, channel];
-			}
-
-			return sum;
-		}
-
-		public void GetHighLow (int channel, out int high, out int low)
-		{
-			double total = ChannelSum (channel);
-			double current = 0.0;
-			double percentage;
-			double next_percentage;
-			
-			low = 0;
-			high = 0;
-			
-			for (int i = 0; i < values.GetLength (0) - 1; i++) {
-				current += values [i, channel];
-				percentage = current / total;
-				next_percentage = (current + values [i + 1, channel]) / total;
-				if (Math.Abs (percentage - 0.006) < Math.Abs (next_percentage - 0.006)) {
-					low = i + 1;
-					break;
-				}
-			}
-
-			for (int i = values.GetLength (0) - 1; i > 0; i--) {
-				current += values [i, channel];
-				percentage = current / total;
-				next_percentage = (current + values [i - 1, channel]) / total;
-				if (Math.Abs (percentage - 0.006) < Math.Abs (next_percentage - 0.006)) {
-					high = i - 1;
-					break;
-				}
-			}
-		}
-
-		private void Draw (Gdk.Pixbuf image) 
-		{
-			int max = 0;
-			for (int i = 0; i < values.GetLength (0); i++) {
-				for (int j = 0; j < values.GetLength (1); j++) {
-					max = System.Math.Max (max, values [i, j]);
-				}
-			}
-			unsafe {
-				int height = image.Height;
-				int rowstride = image.Rowstride;
-				int r = 0;
-				int b = 0;
-				int g = 0;
-				
-				for (int i = 0; i < image.Width; i++) {
-					byte * pixels = (byte *)image.Pixels + i * 4;
-					
-					if (max > 0) {
-						r = values [i, 0] * height / max;
-						g = values [i, 1] * height / max;
-						b = values [i, 2] * height / max;
-					} else 
-						r = g = b = 0;
-
-					int top = Math.Max (r, Math.Max (g, b));
-
-					int j = 0;
-					for (; j < height - top; j++) {
-						pixels [0] = colors [0];
-						pixels [1] = colors [1];
-						pixels [2] = colors [2];
-						pixels [3] = colors [3];
-						pixels += rowstride;
-					}
-					for (; j < height; j++) {
-						pixels [0] = (byte) ((j >= height - r) ? 0xff : 0x00);
-						pixels [1] = (byte) ((j >= height - g) ? 0xff : 0x00);
-						pixels [2] = (byte) ((j >= height - b) ? 0xff : 0x00);
-						pixels [3] = 0xff;
-						pixels += rowstride;
-					}
-
-				}
-			}
-		}	
-
-		public Gdk.Pixbuf Generate (Gdk.Pixbuf input, int max_width)
-		{
-			Gdk.Pixbuf scaled;
-			using (Gdk.Pixbuf pixbuf = Generate (input))
-				scaled = PixbufUtils.ScaleToMaxSize (pixbuf, max_width, 128);
-			return scaled;
-		}
-
-		public Gdk.Pixbuf Generate (Gdk.Pixbuf input)
-		{
-			FillValues (input);
-			int height = 128;
-			Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, values.GetLength (0), height);
-			Draw (pixbuf);
-			return pixbuf;
-		}
-						     
-		
-#if FSPOT_HISTOGRAM_MAIN
-		public static void Main (string [] args) 
-		{
-			Gtk.Application.Init ();
-			Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (args [0]);
-			Log.DebugFormat ("loaded {0}", args [0]);
-			Histogram hist = new Histogram ();
-			Log.DebugFormat ("loaded histgram", args [0]);
-			
-			Gtk.Window win = new Gtk.Window ("display");
-			Gtk.Image image = new Gtk.Image ();
-			Gdk.Pixbuf img = hist.Generate (pixbuf);
-			image.Pixbuf = img;
-			win.Add (image);
-			win.ShowAll ();
-			Gtk.Application.Run ();
-
-		}
-#endif
-	}
-}
diff --git a/src/ImageLoaderThread.cs b/src/ImageLoaderThread.cs
deleted file mode 100644
index 4e30cd6..0000000
--- a/src/ImageLoaderThread.cs
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * ImageLoaderThread.cs
- *
- * Author(s):
- *	Ettore Perazzoli <ettore at perazzoli.org>
- *	Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details
- */
-using Gdk;
-using Gtk;
-using System.Collections;
-using System.Collections.Generic;
-using System.Threading;
-using System;
-
-using Hyena;
-
-using FSpot.Utils;
-using FSpot.Imaging;
-
-public class ImageLoaderThread {
-
-	// Types.
-
-	public class RequestItem {
-		/* The uri to the image.  */
-		public SafeUri Uri { get; set; }
-
-		/* Order value; requests with a lower value get performed first.  */
-		public int Order { get; set; }
-
-		/* The pixbuf obtained from the operation.  */
-        private Pixbuf result;
-		public Pixbuf Result {
-            get {
-				if (result == null) return null;
-				return result.ShallowCopy ();
-			}
-            set { result = value; }
-        }
-
-		/* the maximium size both must be greater than zero if either is */
-		public int Width { get; set; }
-		public int Height { get; set; }
-
-		public RequestItem (SafeUri uri, int order, int width, int height) {
-			this.Uri = uri;
-			this.Order = order;
-			this.Width = width;
-			this.Height = height;
-			if ((width <= 0 && height > 0) || (height <= 0 && width > 0))
-				throw new System.Exception ("Invalid arguments");
-		}
-
-        ~RequestItem () {
-            if (result != null)
-                result.Dispose ();
-            result = null;
-        }
-	}
-
-
-	// Private members.
-    static List<ImageLoaderThread> instances = new List<ImageLoaderThread> ();
-
-	/* The thread used to handle the requests.  */
-	private Thread worker_thread;
-
-	/* The request queue; it's shared between the threads so it
-	   needs to be locked prior to access.  */
-	private ArrayList queue;
-
-	/* A dict of all the requests; note that the current request
-	   isn't in the dict.  */
-	Dictionary<SafeUri, RequestItem> requests_by_uri;
-
-	/* Current request.  Request currently being handled by the
-	   auxiliary thread.  Should be modified only by the auxiliary
-	   thread (the GTK thread can only read it).  */
-	private RequestItem current_request;
-
-	/* The queue of processed requests.  */
-	private Queue processed_requests;
-
-	/* This is used by the helper thread to notify the main GLib
-	   thread that there are pending items in the
-	   `processed_requests' queue.  */
-	ThreadNotify pending_notify;
-
-	/* Whether a notification is pending on `pending_notify'
-	   already or not.  */
-	private bool pending_notify_notified;
-
-	volatile bool should_cancel = false;
-
-	// Public API.
-
-	public delegate void PixbufLoadedHandler (ImageLoaderThread loader, RequestItem result);
-	public event PixbufLoadedHandler OnPixbufLoaded;
-
-	public ImageLoaderThread ()
-	{
-		queue = new ArrayList ();
-		requests_by_uri = new Dictionary<SafeUri, RequestItem> ();
-//		requests_by_path = Hashtable.Synchronized (new Hashtable ());
-		processed_requests = new Queue ();
-		
-		pending_notify = new ThreadNotify (new Gtk.ReadyEvent (HandleProcessedRequests));
-
-        instances.Add (this);
-	}
-
-    void StartWorker ()
-    {
-        if (worker_thread != null)
-            return;
-
-		should_cancel = false;
-		worker_thread = new Thread (new ThreadStart (WorkerThread));
-		worker_thread.Start ();
-    }
-
-	int block_count;
-	public void PushBlock ()
-	{
-		System.Threading.Interlocked.Increment (ref block_count);
-	}
-
-	public void PopBlock ()
-	{
-		if (System.Threading.Interlocked.Decrement (ref block_count) == 0) {
-			lock (queue) { 
-				Monitor.Pulse (queue); 
-			}
-		}
-	}
-
-	public void Cleanup ()
-	{
-		should_cancel = true;
-		if (worker_thread != null) {
-			lock (queue) { 
-				Monitor.Pulse (queue); 
-			}
-			worker_thread.Join ();
-		}
-		worker_thread = null;
-	}
-
-    public static void CleanAll ()
-    {
-        foreach (var thread in instances)
-            thread.Cleanup ();
-    }
-
-	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))
-				Monitor.Pulse (queue);
-		}
-	}
-
-	public void Cancel (SafeUri uri)
-	{
-		lock (queue) {
-			RequestItem r = requests_by_uri [uri];
-			if (r != null) {
-				requests_by_uri.Remove (uri);
-				queue.Remove (r);
-			}
-		}
-	}
-
-	// Private utility methods.
-
-	protected virtual void ProcessRequest (RequestItem request)
-	{
-		Pixbuf orig_image;
-		try {
-			using (var img = ImageFile.Create (request.Uri)) {
-				if (request.Width > 0) {
-					orig_image = img.Load (request.Width, request.Height);
-				} else {
-					orig_image = img.Load ();
-				}
-			}
-		} catch (GLib.GException e){
-			Log.Exception (e);
-			return;		
-		}
-		
-		if (orig_image == null)
-			return;
-		
-		request.Result = orig_image;
-	}
-
-	/* Insert the request in the queue, return TRUE if the queue actually grew.
-	   NOTE: Lock the queue before calling.  */
-
-	private bool InsertRequest (SafeUri uri, int order, int width, int height)
-	{
-        StartWorker ();
-
-		/* Check if this is the same as the request currently being processed.  */
-		lock(processed_requests) {
-			if (current_request != null && current_request.Uri == uri)
-				return false;
-		}
-		/* Check if a request for this path has already been queued.  */
-		RequestItem existing_request;
-		if (requests_by_uri.TryGetValue (uri, out existing_request)) {
-			/* FIXME: At least for now, this shouldn't happen.  */
-			if (existing_request.Order != order)
-				Log.WarningFormat ("BUG: Filing another request of order {0} (previously {1}) for `{2}'",
-						   order, existing_request.Order, uri);
-
-			queue.Remove (existing_request);
-			queue.Add (existing_request);
-			return false;
-		}
-
-		/* New request, just put it on the queue with the right order.  */
-		RequestItem new_request = new RequestItem (uri, order, width, height);
-
-		queue.Add (new_request);
-
-		lock (queue) {
-			requests_by_uri.Add (uri, new_request);
-		}
-		return true;
-	}
-
-	/* The worker thread's main function.  */
-	private void WorkerThread ()
-	{
-        Log.Debug (this.ToString (), "Worker starting");
-		try {
-			while (!should_cancel) {
-				lock (processed_requests) {
-					if (current_request != null) {
-						processed_requests.Enqueue (current_request);
-						
-						if (! pending_notify_notified) {
-							pending_notify.WakeupMain ();
-							pending_notify_notified = true;
-						}
-						
-						current_request = null;
-					}
-				}
-	
-				lock (queue) {
-					
-					while ((queue.Count == 0 || block_count > 0) && !should_cancel)
-						Monitor.Wait (queue);
-
-					if (should_cancel)
-						return;
-					
-					int pos = queue.Count - 1;
-	
-					current_request = queue [pos] as RequestItem;
-					queue.RemoveAt (pos);
-					requests_by_uri.Remove (current_request.Uri);
-				}
-				
-				ProcessRequest (current_request);
-			}
-		} catch (ThreadAbortException) {
-			//Aborting
-		}
-	}
-	
-	protected virtual void EmitLoaded (Queue results)
-	{
-		if (OnPixbufLoaded != null) {
-			foreach (RequestItem r in results)
-				OnPixbufLoaded (this, r);
-		}
-	}
-
-	private void HandleProcessedRequests ()
-	{
-		Queue results;
-		
-		
-		lock (processed_requests) {
-			/* Copy the queued items out of the shared queue so we hold the lock for
-			   as little time as possible.  */
-			results = processed_requests.Clone() as Queue;
-			processed_requests.Clear ();
-
-			pending_notify_notified = false;
-		}
-
-		EmitLoaded (results);
-	}
-}
diff --git a/src/Imaging/Ciff.cs b/src/Imaging/Ciff.cs
deleted file mode 100644
index d60c7d3..0000000
--- a/src/Imaging/Ciff.cs
+++ /dev/null
@@ -1,173 +0,0 @@
-using System;
-using FSpot.Utils;
-using Hyena;
-using TagLib.Image;
-
-namespace FSpot.Imaging.Ciff {
-	internal enum Tag {
-		JpgFromRaw = 0x2007,
-	}
-
-	public enum EntryType : ushort {
-		Byte = 0x0000,
-		Ascii = 0x0800,
-		Short = 0x1000,
-		Int = 0x1800,
-		Struct = 0x2000,
-		Directory1 = 0x2800,
-		Directory2 = 0x2800,
-	}
-	
-	public enum Mask {
-		Type = 0x3800,
-	}
-
-	/* See http://www.sno.phy.queensu.ca/~phil/exiftool/canon_raw.html */
-	internal struct Entry {
-		internal Tag Tag;
-		internal uint Size;
-		internal uint Offset;
-
-		public Entry (byte [] data, int pos, bool little)
-		{
-			Tag = (Tag) BitConverter.ToUInt16 (data, pos, little);
-			Size = BitConverter.ToUInt32 (data, pos + 2, little);
-			Offset = BitConverter.ToUInt32 (data, pos + 6, little);
-		}	
-	}
-
-	class ImageDirectory {
-		System.Collections.ArrayList entry_list;
-		uint Count;
-		bool little;
-		uint start;
-		long DirPosition; 
-		System.IO.Stream stream;
-
-		public ImageDirectory (System.IO.Stream stream, uint start, long end, bool little)
-		{
-			this.start = start;
-			this.little = little;
-			this.stream = stream;
-
-			entry_list = new System.Collections.ArrayList ();
-			
-			stream.Position = end - 4;
-			byte [] buf = new byte [10];
-			stream.Read (buf, 0, 4);
-			uint directory_pos  = BitConverter.ToUInt32 (buf, 0, little);
-			DirPosition = start + directory_pos;
-
-			stream.Position = DirPosition;
-			stream.Read (buf, 0, 2);
-
-			Count = BitConverter.ToUInt16 (buf, 0, little);
-			
-			for (int i = 0; i < Count; i++)
-			{
-				stream.Read (buf, 0, 10);
-				Log.DebugFormat ("reading {0} {1}", i, stream.Position);
-				Entry entry = new Entry (buf, 0, little);
-				entry_list.Add (entry);
-			}
-		}			
-
-		public ImageDirectory ReadDirectory (Tag tag)
-		{
-			foreach (Entry e in entry_list) {
-				if (e.Tag == tag) {
-					uint subdir_start = this.start + e.Offset;
-					ImageDirectory subdir = new ImageDirectory (stream, subdir_start, subdir_start + e.Size, little);
-					return subdir;
-				}
-			}
-			return null;
-		}
-		
-		public byte [] ReadEntry (int pos)
-		{
-			Entry e = (Entry) entry_list [pos];
-
-			stream.Position = this.start + e.Offset;			
-
-			byte [] data = new byte [e.Size];
-			stream.Read (data, 0, data.Length);
-
-			return data;
-		}
-		
-		public byte [] ReadEntry (Tag tag) 
-		{
-			int pos = 0;
-			foreach (Entry e in entry_list) {
-				if (e.Tag == tag)
-					return ReadEntry (pos);
-				pos++;
-			}
-			return null;
-		}
-	}
-	
-	public class CiffFile : BaseImageFile {
-		ImageDirectory root;
-		bool little;
-		System.IO.Stream stream;
-		
-		ImageDirectory Root {
-			get {
-				if (root == null) {
-					stream = PixbufStream ();
-					root = Load (stream);
-				}
-				
-			        return root;
-			}
-		}
-
-		public CiffFile (SafeUri uri) : base (uri)
-		{
-		}
-
-		private ImageDirectory Load (System.IO.Stream stream)
-		{
-			byte [] header = new byte [26];  // the spec reserves the first 26 bytes as the header block
-			stream.Read (header, 0, header.Length);
-
-			uint start;
-			
-			little = (header [0] == 'I' && header [1] == 'I');
-			
-			start = BitConverter.ToUInt32 (header, 2, little);
-			
-			// HEAP is the type CCDR is the subtype
-			if (System.Text.Encoding.ASCII.GetString (header, 6, 8) != "HEAPCCDR") 
-				throw new ImageFormatException ("Invalid Ciff Header Block");
-			
-			long end = stream.Length;
-			return new ImageDirectory (stream, start, end, little);
-		}
-
-		public override System.IO.Stream PixbufStream ()
-		{
-			byte [] data = GetEmbeddedJpeg ();
-			
-			if (data != null)
-				return new System.IO.MemoryStream (data);
-			else	
-				return DCRawFile.RawPixbufStream (Uri);
-		}
-
-		private byte [] GetEmbeddedJpeg ()
-		{
-			return Root.ReadEntry (Tag.JpgFromRaw);
-		}
-
-		protected override void Close ()
-		{
-			if (stream != null) {
-				stream.Close ();
-				stream = null;
-			}
-		}
-	}
-}
diff --git a/src/Imaging/DCRawFile.cs b/src/Imaging/DCRawFile.cs
deleted file mode 100644
index f9d68b4..0000000
--- a/src/Imaging/DCRawFile.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.Diagnostics;
-using System.IO;
-using System;
-using Hyena;
-
-namespace FSpot.Imaging {
-	public class DCRawFile : BaseImageFile {
-		const string dcraw_command = "dcraw";
-
-		public DCRawFile (SafeUri uri) : base (uri)
-		{
-		}
-
-		public override System.IO.Stream PixbufStream ()
-		{
-			return RawPixbufStream (Uri);
-		}
-
-		internal static System.IO.Stream RawPixbufStream (SafeUri location)
-		{
-			string path = location.LocalPath;
-			string [] args = new string [] { dcraw_command, "-h", "-w", "-c", "-t", "0", path };
-			
-			InternalProcess proc = new InternalProcess (System.IO.Path.GetDirectoryName (path), args);
-			proc.StandardInput.Close ();
-			return proc.StandardOutput;
-		}
-	}
-}
diff --git a/src/Imaging/ImageFile.cs b/src/Imaging/ImageFile.cs
deleted file mode 100644
index 57a1282..0000000
--- a/src/Imaging/ImageFile.cs
+++ /dev/null
@@ -1,252 +0,0 @@
-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;
-
-namespace FSpot.Imaging {
-	public class ImageFormatException : ApplicationException {
-		public ImageFormatException (string msg) : base (msg)
-		{
-		}
-	}
-
-	public static class ImageFile {
-
-#region Factory functionality
-
-		static Dictionary<string, Type> name_table;
-		internal static Dictionary<string, Type> NameTable { get { return name_table; } }
-
-        static ImageFile ()
-        {
-            var base_type = typeof (BaseImageFile);
-            var raw_type = typeof (DCRawFile);
-            var nef_type = typeof (FSpot.Imaging.Tiff.NefFile);
-
-            name_table = new Dictionary<string, Type> ();
-
-            // Plain image files
-            name_table ["image/gif"] = name_table [".gif"] = base_type;
-            name_table ["image/x-pcx"] = name_table [".pcx"] = base_type;
-            name_table ["image/x-portable-anymap"] = name_table [".pnm"] = base_type;
-            name_table ["image/x-portable-bitmap"] = name_table [".pbm"] = base_type;
-            name_table ["image/x-portable-graymap"] = name_table [".pgm"] = base_type;
-            name_table ["image/x-portable-pixmap"] = name_table [".ppm"] = base_type;
-            name_table ["image/x-bmp"] = name_table ["image/x-MS-bmp"] = name_table [".bmp"] = base_type;
-            name_table ["image/jpeg"] = name_table [".jfi"] = name_table [".jfif"] = name_table [".jif"] = name_table [".jpe"] = name_table [".jpeg"] = name_table [".jpg"] = base_type;
-            name_table ["image/png"] = name_table [".png"] = base_type;
-            name_table ["image/tiff"] = name_table [".tif"] = name_table [".tiff"] = base_type;
-            name_table ["image/svg+xml"] = name_table [".svg"] = name_table [".svgz"] = base_type;
-
-            // RAW files
-            name_table ["image/arw"] = name_table ["image/x-sony-arw"] = name_table [".arw"] = nef_type;
-            name_table ["image/cr2"] = name_table ["image/x-canon-cr"] = name_table [".cr2"] = typeof (FSpot.Imaging.Tiff.Cr2File);
-            name_table ["image/dng"] = name_table ["image/x-adobe-dng"] = name_table [".dng"] = typeof (FSpot.Imaging.Tiff.DngFile);
-            name_table ["image/nef"] = name_table ["image/x-nikon-nef"] = name_table [".nef"] = nef_type;
-            name_table ["image/rw2"] = name_table ["image/x-raw"] = name_table [".rw2"] = raw_type;
-
-            // Other types (FIXME: Currently unsupported by Taglib#, this list should shrink).
-            name_table [".pef"] = nef_type;
-            name_table [".raw"] = typeof (FSpot.Imaging.Tiff.NefFile);
-            name_table [".kdc"] = typeof (FSpot.Imaging.Tiff.NefFile);
-            name_table [".rw2"] = typeof (FSpot.Imaging.DCRawFile);
-            name_table [".orf"] =  typeof (FSpot.Imaging.Tiff.NefFile);
-            name_table [".srf"] = typeof (FSpot.Imaging.Tiff.NefFile);
-            name_table [".crw"] = typeof (FSpot.Imaging.Ciff.CiffFile);
-            name_table [".mrw"] = typeof (FSpot.Imaging.DCRawFile);
-            name_table [".raf"] = typeof (FSpot.Imaging.Raf.RafFile);
-            name_table [".x3f"] = typeof (FSpot.Imaging.DCRawFile);
-            name_table ["image/x-dcraw"] = name_table [".raw"];
-            name_table ["image/x-ciff"]  = name_table [".crw"];
-            name_table ["image/x-mrw"]   = name_table [".mrw"];
-            name_table ["image/x-x3f"]   = name_table [".x3f"];
-            name_table ["image/x-orf"]   = name_table [".orf"];
-            name_table ["image/x-raf"]   = name_table [".raf"];
-
-            // as xcf pixbufloader is not part of gdk-pixbuf, check if it's there,
-            // and enable it if needed.
-            foreach (Gdk.PixbufFormat format in Gdk.Pixbuf.Formats)
-                if (format.Name == "xcf") {
-                    if (format.IsDisabled)
-                        format.SetDisabled (false);
-                    name_table [".xcf"] = base_type;
-                }
-        }
-
-        public static bool HasLoader (SafeUri uri)
-        {
-            return GetLoaderType (uri) != null;
-        }
-
-        static Type GetLoaderType (SafeUri uri)
-        {
-            // check if GIO can find the file, which is not the case
-            // with filenames with invalid encoding
-            var file = GLib.FileFactory.NewForUri (uri);
-            if (!file.Exists) {
-                return null;
-            }
-
-            var extension = uri.GetExtension ().ToLower ();
-            if (extension == ".thm") {
-                // Ignore video thumbnails.
-                return null;
-            }
-
-            // Detect mime-type
-            var info = file.QueryInfo ("standard::content-type", FileQueryInfoFlags.None, null);
-            var mime = info.ContentType;
-
-            Type t = null;
-
-            if (name_table.TryGetValue (mime, out t)) {
-                return t;
-            } else if (name_table.TryGetValue (extension, out t)) {
-                return t;
-            }
-            return null;
-        }
-
-        public static IImageFile Create (SafeUri uri)
-        {
-            var t = GetLoaderType (uri);
-            if (t == null)
-                throw new Exception (String.Format ("Unsupported image: {0}", uri));
-
-            try {
-                return (IImageFile) System.Activator.CreateInstance (t, new object[] { uri });
-            } catch (Exception e) {
-                Hyena.Log.DebugException (e);
-                throw e;
-            }
-        }
-
-		public static bool IsRaw (SafeUri uri)
-		{
-			string [] raw_extensions = {
-				".arw",
-				".crw",
-				".cr2",
-				".dng",
-				".mrw",
-				".nef",
-				".orf", 
-				".pef", 
-				".raw",
-				".raf",
-				".rw2",
-			};
-			var extension = uri.GetExtension ().ToLower ();
-			foreach (string ext in raw_extensions)
-				if (ext == extension)
-					return true;
-			return false;
-		}
-
-		public static bool IsJpeg (SafeUri uri)
-		{
-			string [] jpg_extensions = {".jpg", ".jpeg"};
-			var extension = uri.GetExtension ().ToLower ();
-			foreach (string ext in jpg_extensions)
-				if (ext == extension)
-					return true;
-			return false;
-		}
-
-#endregion
-	}
-
-    public interface IImageFile : IDisposable {
-        SafeUri Uri { get; }
-        Gdk.Pixbuf Load ();
-        Cms.Profile GetProfile ();
-        Gdk.Pixbuf Load (int max_width, int max_height);
-        Stream PixbufStream ();
-        ImageOrientation Orientation { get; }
-    }
-
-    public class BaseImageFile : IImageFile {
-        public SafeUri Uri { get; private set; }
-        public ImageOrientation Orientation { get; private set; }
-
-        public BaseImageFile (SafeUri uri)
-        {
-            Uri = uri;
-            Orientation = ImageOrientation.TopLeft;
-
-            using (var metadata_file = Metadata.Parse (uri)) {
-                Orientation = metadata_file.ImageTag.Orientation;
-                ExtractMetadata (metadata_file);
-            }
-        }
-
-        protected virtual void ExtractMetadata (TagLib.Image.File metadata) {
-        }
-
-		~BaseImageFile ()
-		{
-			Dispose ();
-		}
-
-		public virtual Stream PixbufStream ()
-		{
-			Hyena.Log.DebugFormat ("open uri = {0}", Uri.ToString ());
-			return new GLib.GioStream (GLib.FileFactory.NewForUri (Uri).Read (null));
-		}
-
-		protected Gdk.Pixbuf TransformAndDispose (Gdk.Pixbuf orig)
-		{
-			if (orig == null)
-				return null;
-
-			Gdk.Pixbuf rotated = FSpot.Utils.PixbufUtils.TransformOrientation (orig, this.Orientation);
-
-			orig.Dispose ();
-
-			return rotated;
-		}
-
-		public Gdk.Pixbuf Load ()
-		{
-			using (Stream stream = PixbufStream ()) {
-				Gdk.Pixbuf orig = new Gdk.Pixbuf (stream);
-				return TransformAndDispose (orig);
-			}
-		}
-
-		public Gdk.Pixbuf Load (int max_width, int max_height)
-		{
-			Gdk.Pixbuf full = this.Load ();
-			Gdk.Pixbuf scaled  = PixbufUtils.ScaleToMaxSize (full, max_width, max_height);
-			full.Dispose ();
-			return scaled;
-		}
-
-		// FIXME this need to have an intent just like the loading stuff.
-		public virtual Cms.Profile GetProfile ()
-		{
-			return null;
-		}
-
-		public void Dispose ()
-		{
-			Close ();
-			System.GC.SuppressFinalize (this);
-		}
-
-		protected virtual void Close ()
-		{
-		}
-    }
-}
diff --git a/src/Imaging/RafFile.cs b/src/Imaging/RafFile.cs
deleted file mode 100644
index ee6f315..0000000
--- a/src/Imaging/RafFile.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using FSpot.Utils;
-using Hyena;
-using TagLib.Image;
-
-namespace FSpot.Imaging.Raf {
-	// This is reverse engineered from looking at the sample files I have
-	// from what I can tell the file is always BigEndian, although the embedded jpeg may not be
-	// and there is a start long offset at 0x54 (or possibly 0x56 if it is a short) that points to
-	// the start of the embedded jpeg and followed by a long length that gives the length of the jpeg
-	// data.   
-	//
-	// Following that there seem to be more offsets and lengths (probably for the raw data) that I haven't
-	// completely figured out yet.  More to follow.
-
-	// ALL the sample files I have begin with "FUJIFILMCCD-RAW "
-	
-	public class RafFile : BaseImageFile {
-
-		public RafFile (SafeUri uri) : base (uri)
-		{
-		}
-
-		public override System.IO.Stream PixbufStream ()
-		{
-			byte [] data = GetEmbeddedJpeg ();
-			
-			if (data != null)
-				return new System.IO.MemoryStream (data);
-			else
-				return DCRawFile.RawPixbufStream (Uri);
-		}
-
-		private byte [] GetEmbeddedJpeg ()
-		{
-			using (System.IO.Stream stream = base.PixbufStream ()) {
-				stream.Position = 0x54;
-				byte [] data = new byte [24];
-				stream.Read (data, 0, data.Length);
-				uint jpeg_offset = BitConverter.ToUInt32 (data, 0, false);
-				uint jpeg_length = BitConverter.ToUInt32 (data, 4, false);
-
-				// FIXME implement wb parsing
-				//uint wb_offset = BitConverter.ToUInt32 (data, 8, false);
-				//uint wb_length = BitConverter.ToUInt32 (data, 12, false);
-				
-				// FIXME implement decoding
-				//uint raw_offset = BitConverter.ToUInt32 (data, 16, false);
-				//uint raw_length = BitConverter.ToUInt32 (data, 20, false);
-
-				byte [] image = new byte [jpeg_length];
-				stream.Position = jpeg_offset;
-				stream.Read (image, 0, image.Length);
-				return image;
-			}
-		}
-	}
-}
diff --git a/src/Imaging/Tiff.cs b/src/Imaging/Tiff.cs
deleted file mode 100644
index 6958820..0000000
--- a/src/Imaging/Tiff.cs
+++ /dev/null
@@ -1,199 +0,0 @@
-using FSpot;
-using FSpot.Utils;
-using System;
-using System.IO;
-using System.Collections.Generic;
-using Hyena;
-using TagLib;
-using TagLib.Image;
-using TagLib.IFD;
-using TagLib.IFD.Entries;
-using TagLib.IFD.Tags;
-
-namespace FSpot.Imaging.Tiff {
-	/*
-		public Cms.Profile GetProfile ()
-		{
-			Cms.ColorCIExyY whitepoint = new Cms.ColorCIExyY (0, 0, 0);
-			Cms.ColorCIExyYTriple primaries = new Cms.ColorCIExyYTriple (whitepoint, whitepoint, whitepoint);
-			Cms.GammaTable [] transfer = null;
-			int bits_per_sample = 8;
-			double gamma = 2.2;
-			
-			foreach (DirectoryEntry e in entries) {
-				switch (e.Id) {
-				case TagId.InterColorProfile:
-					try {
-						return new Cms.Profile (e.RawData);
-					} catch (System.Exception ex) {
-						Log.Exception (ex);
-					}
-					break;
-				case TagId.ColorSpace:
-					switch ((ColorSpace)e.ValueAsLong [0]) {
-					case ColorSpace.StandardRGB:
-						return Cms.Profile.CreateStandardRgb ();
-					case ColorSpace.AdobeRGB:
-						return Cms.Profile.CreateAlternateRgb ();
-					case ColorSpace.Uncalibrated:
-						Log.Debug ("Uncalibrated colorspace");
-						break;
-					}
-					break;
-				case TagId.WhitePoint:
-					Rational [] white = e.RationalValue;
-					whitepoint.x = white [0].Value;
-					whitepoint.y = white [1].Value;
-					whitepoint.Y = 1.0;
-					break;
-				case TagId.PrimaryChromaticities:
-					Rational [] colors = e.RationalValue;
-					primaries.Red.x = colors [0].Value;
-					primaries.Red.y = colors [1].Value;
-					primaries.Red.Y = 1.0;
-
-					primaries.Green.x = colors [2].Value;
-					primaries.Green.y = colors [3].Value;
-					primaries.Green.Y = 1.0;
-
-					primaries.Blue.x = colors [4].Value;
-					primaries.Blue.y = colors [5].Value;
-					primaries.Blue.Y = 1.0;
-					break;
-				case TagId.TransferFunction:
-					ushort [] trns = e.ShortValue;
-					ushort gamma_count = (ushort) (1 << bits_per_sample);
-					Cms.GammaTable [] tables = new Cms.GammaTable [3];
-					Log.DebugFormat ("Parsing transfer function: count = {0}", trns.Length);
-
-					// FIXME we should use the TransferRange here
-					// FIXME we should use bits per sample here
-					for (int c = 0; c < 3; c++) {
-						tables [c] = new Cms.GammaTable (trns, c * gamma_count, gamma_count);
-					}
-
-					transfer = tables;
-					break;
-				case TagId.ExifIfdPointer:
-					SubdirectoryEntry exif = (SubdirectoryEntry) e;
-					DirectoryEntry ee = exif.Directory [0].Lookup ((int)TagId.Gamma);
-					
-					if (ee == null)
-						break;
-
-					Rational rgamma = ee.RationalValue [0];
-					gamma = rgamma.Value;
-					break;
-				}
-			}
-
-			if (transfer == null) {
-				Cms.GammaTable basic = new Cms.GammaTable (1 << bits_per_sample, gamma);
-				transfer = new Cms.GammaTable [] { basic, basic, basic };
-			}
-
-			// if we didn't get a white point or primaries, give up
-			if (whitepoint.Y != 1.0 || primaries.Red.Y != 1.0)
-				return null;
-				
-			return new Cms.Profile (whitepoint, primaries, transfer);
-		}
-	}*/
-
-	public class DngFile : BaseImageFile {
-		uint offset;
-
-		public DngFile (SafeUri uri) : base (uri)
-		{
-		}
-
-		protected override void ExtractMetadata (TagLib.Image.File metadata)
-		{
-			try {
-				var tag = metadata.GetTag (TagTypes.TiffIFD) as IFDTag;
-				var structure = tag.Structure;
-				var sub_entries = (structure.GetEntry (0, (ushort) IFDEntryTag.SubIFDs) as SubIFDArrayEntry).Entries;
-				var subimage_structure = sub_entries [sub_entries.Length - 1];
-				var entry = subimage_structure.GetEntry (0, (ushort) IFDEntryTag.StripOffsets);
-				offset = (entry as StripOffsetsIFDEntry).Values [0];
-			} catch (Exception e) {
-				Log.DebugException (e);
-			}
-			base.ExtractMetadata (metadata);
-		}
-
-		public override System.IO.Stream PixbufStream ()
-		{
-			try {
-				System.IO.Stream file = base.PixbufStream ();
-				file.Position = offset;
-				return file;
-			} catch {
-				return DCRawFile.RawPixbufStream (Uri);
-			}
-		}
-	}	
-	
-	public class NefFile : BaseImageFile {
-		byte [] jpeg_data;
-
-		public NefFile (SafeUri uri) : base (uri)
-		{
-		}
-
-		protected override void ExtractMetadata (TagLib.Image.File metadata)
-		{
-			try {
-				var tag = metadata.GetTag (TagTypes.TiffIFD) as IFDTag;
-				var structure = tag.Structure;
-				var SubImage1_structure = (structure.GetEntry (0, (ushort) IFDEntryTag.SubIFDs) as SubIFDArrayEntry).Entries [0];
-				var entry = SubImage1_structure.GetEntry (0, (ushort) IFDEntryTag.JPEGInterchangeFormat);
-				jpeg_data = (entry as ThumbnailDataIFDEntry).Data.Data;
-			} catch (Exception e) {
-				Log.DebugException (e);
-				jpeg_data = null;
-			}
-			base.ExtractMetadata (metadata);
-		}
-
-		public override System.IO.Stream PixbufStream ()
-		{
-			if (jpeg_data != null) {
-				return new MemoryStream (jpeg_data);
-			} else {
-				return DCRawFile.RawPixbufStream (Uri);
-			}
-		}
-	}
-		
-
-	public class Cr2File : BaseImageFile {
-		uint offset;
-
-		public Cr2File (SafeUri uri) : base (uri)
-		{
-		}
-
-		protected override void ExtractMetadata (TagLib.Image.File metadata)
-		{
-			try {
-				var tag = metadata.GetTag (TagTypes.TiffIFD) as IFDTag;
-				var structure = tag.Structure;
-				var entry = structure.GetEntry (0, (ushort) IFDEntryTag.StripOffsets);
-				offset = (entry as StripOffsetsIFDEntry).Values [0];
-			} catch (Exception e) {
-				Log.DebugException (e);
-			}
-			base.ExtractMetadata (metadata);
-		}
-
-		public override System.IO.Stream PixbufStream ()
-		{
-			System.IO.Stream file = base.PixbufStream ();
-			file.Position = offset;
-			return file;
-		}
-	}
-
-}
-
diff --git a/src/Import/FileImportSource.cs b/src/Import/FileImportSource.cs
deleted file mode 100644
index 2be73b7..0000000
--- a/src/Import/FileImportSource.cs
+++ /dev/null
@@ -1,153 +0,0 @@
-using Hyena;
-using System;
-using System.Threading;
-using System.Collections.Generic;
-using FSpot.Utils;
-using FSpot.Imaging;
-using Gtk;
-using Mono.Unix.Native;
-
-namespace FSpot.Import
-{
-    internal class FileImportSource : ImportSource {
-        public string Name { get; set; }
-        public string IconName { get; set; }
-        public SafeUri Root { get; set; }
-
-        public Thread PhotoScanner;
-        bool run_photoscanner = false;
-
-        public FileImportSource (SafeUri root, string name, string icon_name)
-        {
-            Root = root;
-            Name = name;
-
-            if (root != null) {
-                if (IsIPodPhoto) {
-                    IconName = "multimedia-player";
-                } else if (IsCamera) {
-                    IconName = "media-flash";
-                } else {
-                    IconName = icon_name;
-                }
-            }
-        }
-
-        public void StartPhotoScan (ImportController controller)
-        {
-            if (PhotoScanner != null) {
-                run_photoscanner = false;
-                PhotoScanner.Join ();
-            }
-
-            run_photoscanner = true;
-            PhotoScanner = ThreadAssist.Spawn (() => ScanPhotos (controller));
-        }
-
-        protected virtual void ScanPhotos (ImportController controller)
-        {
-            ScanPhotoDirectory (controller, Root);
-            ThreadAssist.ProxyToMain (() => controller.PhotoScanFinished ());
-        }
-
-        protected void ScanPhotoDirectory (ImportController controller, SafeUri uri)
-        {
-            var enumerator = new RecursiveFileEnumerator (uri) {
-                Recurse = controller.RecurseSubdirectories,
-                CatchErrors = true,
-                IgnoreSymlinks = true
-            };
-            var infos = new List<FileImportInfo> ();
-            foreach (var file in enumerator) {
-                if (ImageFile.HasLoader (new SafeUri (file.Uri, true))) {
-                    infos.Add (new FileImportInfo (new SafeUri(file.Uri, true)));
-                }
-
-                if (infos.Count % 10 == 0 || infos.Count < 10) {
-                    var to_add = infos; // prevents race condition
-                    ThreadAssist.ProxyToMain (() => controller.Photos.Add (to_add.ToArray ()));
-                    infos = new List<FileImportInfo> ();
-                }
-
-                if (!run_photoscanner)
-                    return;
-            }
-
-            if (infos.Count > 0) {
-                var to_add = infos; // prevents race condition
-                ThreadAssist.ProxyToMain (() => controller.Photos.Add (to_add.ToArray ()));
-            }
-        }
-
-        public void Deactivate ()
-        {
-            if (PhotoScanner != null) {
-                run_photoscanner = false;
-                PhotoScanner.Join ();
-
-                // Make sure all photos are added. This is needed to prevent
-                // a race condition where a source is deactivated, yet photos
-                // are still added to the collection because they are
-                // queued on the mainloop.
-                while (Application.EventsPending ())
-                    Application.RunIteration (false);
-
-                PhotoScanner = null;
-            }
-        }
-
-        private bool IsCamera {
-            get {
-                try {
-                    var file = GLib.FileFactory.NewForUri (Root.Append ("DCIM"));
-                    return file.Exists;
-                } catch {
-                    return false;
-                }
-            }
-        }
-
-        private bool IsIPodPhoto {
-            get {
-                try {
-                    var file = GLib.FileFactory.NewForUri (Root.Append ("Photos"));
-                    var file2 = GLib.FileFactory.NewForUri (Root.Append ("iPod_Control"));
-                    return file.Exists && file2.Exists;
-                } catch {
-                    return false;
-                }
-            }
-        }
-    }
-
-    // Multi root version for drag and drop import.
-    internal class MultiFileImportSource : FileImportSource {
-        private IEnumerable<SafeUri> uris;
-
-        public MultiFileImportSource (IEnumerable<SafeUri> uris)
-            : base (null, String.Empty, String.Empty)
-        {
-            this.uris = uris;
-        }
-
-        protected override void ScanPhotos (ImportController controller)
-        {
-            foreach (var uri in uris) {
-                Log.Debug ("Scanning "+uri);
-                ScanPhotoDirectory (controller, uri);
-            }
-            ThreadAssist.ProxyToMain (() => controller.PhotoScanFinished ());
-        }
-    }
-
-    internal class FileImportInfo : FileBrowsableItem {
-        public FileImportInfo (SafeUri original) : base (original)
-        {
-        }
-
-
-        public SafeUri DestinationUri { get; set; }
-
-        internal uint PhotoId { get; set; }
-    }
-}
diff --git a/src/Import/ImportController.cs b/src/Import/ImportController.cs
deleted file mode 100644
index b39dc98..0000000
--- a/src/Import/ImportController.cs
+++ /dev/null
@@ -1,461 +0,0 @@
-using Hyena;
-using FSpot.Utils;
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using Mono.Unix;
-
-namespace FSpot.Import
-{
-    public enum ImportEvent {
-        SourceChanged,
-        PhotoScanStarted,
-        PhotoScanFinished,
-        ImportStarted,
-        ImportFinished,
-        ImportError
-    }
-
-    public class ImportController
-    {
-        public PhotoList Photos { get; private set; }
-
-        public ImportController ()
-        {
-            Photos = new PhotoList ();
-            LoadPreferences ();
-        }
-
-        ~ImportController ()
-        {
-            DeactivateSource (ActiveSource);
-        }
-
-#region Import Preferences
-
-        private bool copy_files;
-        private bool remove_originals;
-        private bool recurse_subdirectories;
-        private bool duplicate_detect;
-
-        public bool CopyFiles {
-            get { return copy_files; }
-            set { copy_files = value; SavePreferences (); }
-        }
-
-        public bool RemoveOriginals {
-            get { return remove_originals; }
-            set { remove_originals = value; SavePreferences (); }
-        }
-
-        public bool RecurseSubdirectories {
-            get { return recurse_subdirectories; }
-            set { recurse_subdirectories = value; SavePreferences (); RescanPhotos (); }
-        }
-
-        public bool DuplicateDetect {
-            get { return duplicate_detect; }
-            set { duplicate_detect = value; SavePreferences (); }
-        }
-
-        void LoadPreferences ()
-        {
-            copy_files = Preferences.Get<bool> (Preferences.IMPORT_COPY_FILES);
-            recurse_subdirectories = Preferences.Get<bool> (Preferences.IMPORT_INCLUDE_SUBFOLDERS);
-            duplicate_detect = Preferences.Get<bool> (Preferences.IMPORT_CHECK_DUPLICATES);
-            remove_originals = Preferences.Get<bool> (Preferences.IMPORT_REMOVE_ORIGINALS);
-        }
-
-        void SavePreferences ()
-        {
-            Preferences.Set(Preferences.IMPORT_COPY_FILES, copy_files);
-            Preferences.Set(Preferences.IMPORT_INCLUDE_SUBFOLDERS, recurse_subdirectories);
-            Preferences.Set(Preferences.IMPORT_CHECK_DUPLICATES, duplicate_detect);
-            Preferences.Set(Preferences.IMPORT_REMOVE_ORIGINALS, remove_originals);
-        }
-
-#endregion
-
-#region Source Scanning
-
-        private List<ImportSource> sources;
-        public List<ImportSource> Sources {
-            get {
-                if (sources == null)
-                    sources = ScanSources ();
-                return sources;
-            }
-        }
-
-        List<ImportSource> ScanSources ()
-        {
-            var monitor = GLib.VolumeMonitor.Default;
-            var sources = new List<ImportSource> ();
-            foreach (var mount in monitor.Mounts) {
-                var root = new SafeUri (mount.Root.Uri, true);
-
-                var themed_icon = (mount.Icon as GLib.ThemedIcon);
-                if (themed_icon != null && themed_icon.Names.Length > 0) {
-                    sources.Add (new FileImportSource (root, mount.Name, themed_icon.Names [0]));
-                } else {
-                    sources.Add (new FileImportSource (root, mount.Name, null));
-                }
-            }
-            return sources;
-        }
-
-#endregion
-
-#region Status Reporting
-
-        public delegate void ImportProgressHandler (int current, int total);
-        public event ImportProgressHandler ProgressUpdated;
-
-        public delegate void ImportEventHandler (ImportEvent evnt);
-        public event ImportEventHandler StatusEvent;
-
-        void FireEvent (ImportEvent evnt)
-        {
-            ThreadAssist.ProxyToMain (() => {
-                var h = StatusEvent;
-                if (h != null)
-                    h (evnt);
-            });
-        }
-
-        void ReportProgress (int current, int total)
-        {
-            var h = ProgressUpdated;
-            if (h != null)
-                h (current, total);
-        }
-
-        public int PhotosImported { get; private set; }
-        public Roll CreatedRoll { get; private set; }
-
-#endregion
-
-#region Source Switching
-
-        private ImportSource active_source;
-        public ImportSource ActiveSource {
-            set {
-                if (value == active_source)
-                    return;
-                var old_source = active_source;
-                active_source = value;
-                FireEvent (ImportEvent.SourceChanged);
-                RescanPhotos ();
-                DeactivateSource (old_source);
-            }
-            get {
-                return active_source;
-            }
-        }
-
-        void DeactivateSource (ImportSource source)
-        {
-            if (source == null)
-                return;
-            source.Deactivate ();
-        }
-
-        void RescanPhotos ()
-        {
-            Photos.Clear ();
-            if (ActiveSource == null)
-                return;
-
-            photo_scan_running = true;
-            ActiveSource.StartPhotoScan (this);
-            FireEvent (ImportEvent.PhotoScanStarted);
-        }
-
-#endregion
-
-#region Source Progress Signalling
-
-        // These are callbacks that should be called by the sources.
-
-        public void PhotoScanFinished ()
-        {
-            photo_scan_running = false;
-            FireEvent (ImportEvent.PhotoScanFinished);
-        }
-
-#endregion
-
-#region Importing
-
-        Thread ImportThread;
-
-        public void StartImport ()
-        {
-            if (ImportThread != null)
-                throw new Exception ("Import already running!");
-
-            ImportThread = ThreadAssist.Spawn (() => DoImport ());
-        }
-
-        public void CancelImport ()
-        {
-            import_cancelled = true;
-            if (ImportThread != null)
-                ImportThread.Join ();
-            Cleanup ();
-        }
-
-        Stack<SafeUri> created_directories;
-        List<uint> imported_photos;
-        List<SafeUri> copied_files;
-        List<SafeUri> original_files;
-        PhotoStore store = App.Instance.Database.Photos;
-        RollStore rolls = App.Instance.Database.Rolls;
-        volatile bool photo_scan_running;
-        MetadataImporter metadata_importer;
-        volatile bool import_cancelled = false;
-
-        void DoImport ()
-        {
-            while (photo_scan_running) {
-                Thread.Sleep (1000); // FIXME: we can do this with a better primitive!
-            }
-
-            FireEvent (ImportEvent.ImportStarted);
-            App.Instance.Database.Sync = false;
-            created_directories = new Stack<SafeUri> ();
-            imported_photos = new List<uint> ();
-            copied_files = new List<SafeUri> ();
-            original_files = new List<SafeUri> ();
-            metadata_importer = new MetadataImporter ();
-            CreatedRoll = rolls.Create ();
-
-            EnsureDirectory (Global.PhotoUri);
-
-            try {
-                int i = 0;
-                int total = Photos.Count;
-                foreach (var info in Photos.Items) {
-                    if (import_cancelled) {
-                        RollbackImport ();
-                        return;
-                    }
-
-                    ThreadAssist.ProxyToMain (() => ReportProgress (i++, total));
-                    ImportPhoto (info, CreatedRoll);
-                }
-
-                PhotosImported = imported_photos.Count;
-                FinishImport ();
-            } catch (Exception e) {
-                RollbackImport ();
-                throw e;
-            } finally {
-                Cleanup ();
-            }
-        }
-
-        void Cleanup ()
-        {
-            if (imported_photos != null && imported_photos.Count == 0)
-                rolls.Remove (CreatedRoll);
-            imported_photos = null;
-            created_directories = null;
-            Photo.ResetMD5Cache ();
-            DeactivateSource (ActiveSource);
-            Photos.Clear ();
-            System.GC.Collect ();
-            App.Instance.Database.Sync = true;
-        }
-
-        void FinishImport ()
-        {
-            if (RemoveOriginals) {
-                foreach (var uri in original_files) {
-                    try {
-                        var file = GLib.FileFactory.NewForUri (uri);
-                        file.Delete (null);
-                    } catch (Exception) {
-                        Log.WarningFormat ("Failed to remove original file: {0}", uri);
-                    }
-                }
-            }
-
-            ImportThread = null;
-            FireEvent (ImportEvent.ImportFinished);
-        }
-
-        void RollbackImport ()
-        {
-            // Remove photos
-            foreach (var id in imported_photos) {
-                store.Remove (store.Get (id));
-            }
-
-            foreach (var uri in copied_files) {
-                var file = GLib.FileFactory.NewForUri (uri);
-                file.Delete (null);
-            }
-
-            // Clean up directories
-            while (created_directories.Count > 0) {
-                var uri = created_directories.Pop ();
-                var dir = GLib.FileFactory.NewForUri (uri);
-                var enumerator = dir.EnumerateChildren ("standard::name", GLib.FileQueryInfoFlags.None, null);
-                if (!enumerator.HasPending) {
-                    dir.Delete (null);
-                }
-            }
-
-            // Clean created tags
-            metadata_importer.Cancel();
-
-            // Remove created roll
-            rolls.Remove (CreatedRoll);
-        }
-
-        void ImportPhoto (IBrowsableItem item, Roll roll)
-        {
-            var destination = FindImportDestination (item);
-
-            // Do duplicate detection
-            if (DuplicateDetect && store.HasDuplicate (item)) {
-                return;
-            }
-
-            // Copy into photo folder.
-            CopyIfNeeded (item, destination);
-
-            // Import photo
-            var photo = store.CreateFrom (item, roll.Id);
-
-            bool needs_commit = false;
-
-            // Add tags
-            if (attach_tags.Count > 0) {
-                photo.AddTag (attach_tags);
-                needs_commit = true;
-            }
-
-            // Import XMP metadata
-            needs_commit |= metadata_importer.Import (photo, item);
-
-            if (needs_commit) {
-                store.Commit (photo);
-            }
-
-            // Prepare thumbnail (Import is I/O bound anyway)
-            ThumbnailLoader.Default.Request (destination, ThumbnailSize.Large, 10);
-
-            imported_photos.Add (photo.Id);
-        }
-
-        void CopyIfNeeded (IBrowsableItem item, SafeUri destination)
-        {
-            if (item.DefaultVersion.Uri.Equals (destination))
-                return;
-
-            // Copy image
-            var file = GLib.FileFactory.NewForUri (item.DefaultVersion.Uri);
-            var new_file = GLib.FileFactory.NewForUri (destination);
-            file.Copy (new_file, GLib.FileCopyFlags.AllMetadata, null, null);
-            copied_files.Add (destination);
-            original_files.Add (item.DefaultVersion.Uri);
-            item.DefaultVersion.Uri = destination;
-
-            // Copy XMP sidecar
-            var xmp_original = item.DefaultVersion.Uri.ReplaceExtension(".xmp");
-            var xmp_file = GLib.FileFactory.NewForUri (xmp_original);
-            if (xmp_file.Exists) {
-                var xmp_destination = destination.ReplaceExtension (".xmp");
-                var new_xmp_file = GLib.FileFactory.NewForUri (xmp_destination);
-                xmp_file.Copy (new_xmp_file, GLib.FileCopyFlags.AllMetadata, null, null);
-                copied_files.Add (xmp_destination);
-                original_files.Add (xmp_original);
-            }
-        }
-
-        SafeUri FindImportDestination (IBrowsableItem item)
-        {
-            var uri = item.DefaultVersion.Uri;
-
-            if (!CopyFiles)
-                return uri; // Keep it at the same place
-
-            // Find a new unique location inside the photo folder
-            string name = uri.GetFilename ();
-            DateTime time = item.Time;
-
-            var dest_uri = 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);
-                }
-            }
-        }
-
-#endregion
-
-#region Tagging
-
-        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)
-        {
-            App.Instance.Database.BeginTransaction ();
-            var import_category = GetImportedTagsCategory ();
-            foreach (var tagname in tags) {
-                var tag = tag_store.GetTagByName (tagname);
-                if (tag == null) {
-                    tag = tag_store.CreateCategory (import_category, tagname, false) as Tag;
-                    tag_store.Commit (tag);
-                }
-                attach_tags.Add (tag);
-            }
-            App.Instance.Database.CommitTransaction ();
-        }
-
-        Category GetImportedTagsCategory ()
-        {
-            var default_category = tag_store.GetTagByName (Catalog.GetString ("Imported Tags")) as Category;
-            if (default_category == null) {
-                default_category = tag_store.CreateCategory (null, Catalog.GetString ("Imported Tags"), false);
-                default_category.ThemeIconName = "gtk-new";
-            }
-            return default_category;
-        }
-
-#endregion
-
-    }
-}
diff --git a/src/Import/ImportSource.cs b/src/Import/ImportSource.cs
deleted file mode 100644
index 2ee01de..0000000
--- a/src/Import/ImportSource.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Hyena;
-using System;
-
-namespace FSpot.Import
-{
-    public interface ImportSource {
-        string Name { get; }
-        string IconName { get; }
-
-        void StartPhotoScan (ImportController controller);
-        void Deactivate ();
-    }
-}
diff --git a/src/Import/MetadataImporter.cs b/src/Import/MetadataImporter.cs
deleted file mode 100644
index fa71560..0000000
--- a/src/Import/MetadataImporter.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-using System;
-using Mono.Unix;
-using System.Collections.Generic;
-using FSpot.Utils;
-
-namespace FSpot.Import {
-    internal class MetadataImporter {
-        private TagStore tag_store;
-        private Stack<Tag> tags_created;
-
-        static private string LastImportIcon = "gtk-new";
-
-        private class TagInfo {
-            // This class contains the Root tag name, and its Icon name (if any)
-            string tag_name;
-            string icon_name;
-
-            public string TagName {
-                get { return tag_name; }
-            }
-
-            public string IconName {
-                get { return icon_name; }
-            }
-
-            public bool HasIcon {
-                get { return icon_name != null; }
-            }
-
-            public TagInfo (string t_name, string i_name)
-            {
-                tag_name = t_name;
-                icon_name = i_name;
-            }
-
-            public TagInfo (string t_name)
-            {
-                tag_name = t_name;
-                icon_name = null;
-            }
-        } // TagInfo
-
-        TagInfo li_root_tag; // This is the Last Import root tag
-
-        public MetadataImporter ()
-        {
-            this.tag_store = App.Instance.Database.Tags;
-            tags_created = new Stack<Tag> ();
-
-            li_root_tag = new TagInfo (Catalog.GetString ("Imported Tags"), LastImportIcon);
-        }
-
-        private Tag EnsureTag (TagInfo info, Category parent)
-        {
-            Tag tag = tag_store.GetTagByName (info.TagName);
-
-            if (tag != null)
-                return tag;
-
-            tag = tag_store.CreateCategory (parent,
-                    info.TagName,
-                    false);
-
-            if (info.HasIcon) {
-                tag.ThemeIconName = info.IconName;
-                tag_store.Commit(tag);
-            }
-
-            tags_created.Push (tag);
-            return tag;
-        }
-
-        private void AddTagToPhoto (Photo photo, string new_tag_name)
-        {
-            if (new_tag_name == null || new_tag_name.Length == 0)
-                return;
-
-            Tag parent = EnsureTag (li_root_tag, tag_store.RootCategory);
-            Tag tag = EnsureTag (new TagInfo (new_tag_name), parent as Category);
-
-            // Now we have the tag for this place, add the photo to it
-            photo.AddTag (tag);
-        }
-
-        public bool Import (Photo photo, IBrowsableItem importing_from)
-        {
-            using (var metadata = Metadata.Parse (importing_from.DefaultVersion.Uri)) {
-                // Copy Rating
-                var rating = metadata.ImageTag.Rating;
-                if (rating.HasValue) {
-                    var rating_val = Math.Min (metadata.ImageTag.Rating.Value, 5);
-                    photo.Rating = Math.Max (0, rating_val);
-                }
-
-                // Copy Keywords
-                foreach (var keyword in metadata.ImageTag.Keywords) {
-                    AddTagToPhoto (photo, keyword);
-                }
-
-                // XXX: We might want to copy more data.
-            }
-            return true;
-        }
-
-        public void Cancel()
-        {
-            // User have cancelled the import.
-            // Remove all created tags
-            while (tags_created.Count > 0)
-                tag_store.Remove (tags_created.Pop());
-
-            // Clear the tags_created array
-            tags_created.Clear();
-        }
-
-        public void Finish()
-        {
-            // Clear the tags_created array, since we do not need it anymore.
-            tags_created.Clear();
-        }
-    }
-} // namespace
diff --git a/src/InfoOverlay.cs b/src/InfoOverlay.cs
deleted file mode 100644
index 0a767c7..0000000
--- a/src/InfoOverlay.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-/* 
- * Copyright 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- * See COPYING for license information.
- *
- */
-using Gtk;
-using FSpot.Widgets;
-
-namespace FSpot {
-	public class InfoItem : InfoBox {
-		BrowsablePointer item;
-		
-		public InfoItem (BrowsablePointer item)
-		{
-			this.item = item;
-			item.Changed += HandleItemChanged;
-			HandleItemChanged (item, null);
-			VersionChanged += HandleVersionChanged;
-			ShowTags = true;
-			ShowRating = true;
-			Context = ViewContext.FullScreen;
-		}
-		
-		private void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs args)
-		{
-			Photo = item.Current;
-		}
-
-		private void HandleVersionChanged (InfoBox box, IBrowsableItemVersion version)
-		{
-			IBrowsableItemVersionable versionable = item.Current as IBrowsableItemVersionable;
-			PhotoQuery q = item.Collection as PhotoQuery;
-
-			if (versionable != null && q != null) {
-				versionable.SetDefaultVersion (version);
-				q.Commit (item.Index);
-			}
-		}
-	}
-
-	public class InfoOverlay : ControlOverlay {
-		InfoItem box;
-
-		public InfoOverlay (Widget w, BrowsablePointer item) : base (w)
-		{
-			XAlign = 1.0;
-			YAlign = 0.1;
-			DefaultWidth = 250;
-			box = new InfoItem (item);
-			box.BorderWidth = 15;
-			Add (box);
-			box.ShowAll ();
-			Visibility = VisibilityType.Partial;
-			KeepAbove = true;
-			//WindowPosition = WindowPosition.Mouse;
-			AutoHide = false;
-		}
-	}
-}
diff --git a/src/ItemAction.cs b/src/ItemAction.cs
deleted file mode 100644
index 9a9bd11..0000000
--- a/src/ItemAction.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-/* 
- * ItemAction.cs
- *
- * Copyright 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- * See COPYING for license information.
- *
- */
-using Gtk;
-using Mono.Unix;
-using FSpot.Filters;
-using System;
-using FSpot.UI.Dialog;
-
-namespace FSpot {
-	public abstract class ItemAction : Gtk.Action {
-		protected BrowsablePointer item;
-
-		public ItemAction (BrowsablePointer pointer,
-				   string name,
-				   string label,
-				   string tooltip,
-				   string icon_name) : base (name, label)
-		{
-			Tooltip = tooltip;
-			IconName = icon_name;
-			item = pointer;
-			item.Changed += ItemChanged;
-		}
-
-	        protected virtual void ItemChanged (object sender, 
-						    BrowsablePointerChangedEventArgs args)
-		{
-			Sensitive = item.IsValid;
-		}
-
-	}
-
-	public class RotateAction : ItemAction {
-		protected RotateDirection direction;
-		
-		public RotateAction (BrowsablePointer pointer,
-				     RotateDirection direction,
-				     string name,
-				     string label,
-				     string tooltip,
-				     string stock_id) 
-			: base (pointer, name, label, tooltip, stock_id)
-		{
-			this.direction = direction;
-		}
-
-		protected override void OnActivated ()
-		{
-			try {
-				RotateOperation op = new RotateOperation (item.Current, direction);
-				
-				while (op.Step ());
-				
-				item.Collection.MarkChanged (item.Index, FullInvalidate.Instance);
-			} catch (Exception e) {
-				Dialog d = new EditExceptionDialog (null, e, item.Current);
-				d.Show ();
-				d.Run ();
-				d.Destroy ();
-			}
-			   
-		}
-	}
-
-	public class RotateLeftAction : RotateAction {
-		public RotateLeftAction (BrowsablePointer p) 
-			: base (p,
-				RotateDirection.Counterclockwise,
-				"RotateItemLeft", 
-				Catalog.GetString ("Rotate Left"), 
-				Catalog.GetString ("Rotate picture left"),
-				"object-rotate-left")
-		{
-		}
-	}
-
-	public class RotateRightAction : RotateAction {
-		public RotateRightAction (BrowsablePointer p) 
-			: base (p,
-				RotateDirection.Clockwise,
-				"RotateItemRight", 
-				Catalog.GetString ("Rotate Right"), 
-				Catalog.GetString ("Rotate picture right"),
-				"object-rotate-right")
-		{
-		}
-	}
-
-	public class NextPictureAction : ItemAction {
-		public NextPictureAction (BrowsablePointer p)
-			: base (p,
-				"NextPicture",
-				Catalog.GetString ("Next"),
-				Catalog.GetString ("Next picture"),
-				"gtk-go-forward-ltr")
-		{
-		}
-
-		protected override void ItemChanged (object sender, BrowsablePointerChangedEventArgs args)
-		{
-			Sensitive = item.Index < item.Collection.Count -1;
-		}
-		
-		protected override void OnActivated ()
-		{
-			item.MoveNext ();
-		}
-	}
-
-	public class PreviousPictureAction : ItemAction {
-		public PreviousPictureAction (BrowsablePointer p)
-			: base (p,
-				"PreviousPicture",
-				Catalog.GetString ("Previous"),
-				Catalog.GetString ("Previous picture"),
-				"gtk-go-back-ltr")
-		{
-		}
-
-		protected override void ItemChanged (object sender, BrowsablePointerChangedEventArgs args)
-		{
-			Sensitive =  item.Index > 0;
-		}
-		
-		protected override void OnActivated ()
-		{
-			item.MovePrevious ();
-		}
-	}
-}
diff --git a/src/JobScheduler/Makefile.am b/src/JobScheduler/Makefile.am
deleted file mode 100644
index ea7b555..0000000
--- a/src/JobScheduler/Makefile.am
+++ /dev/null
@@ -1,16 +0,0 @@
-ASSEMBLY = FSpot.JobScheduler
-TARGET = library
-LINK = $(REF_FSPOT_JOB_SCHEDULER)
-
-SOURCES =  \
-	FSpotCompat.cs \
-	IInstanceCriticalJob.cs \
-	IJob.cs \
-	IntervalHeap.cs \
-	JobPriority.cs \
-	JobStatus.cs \
-	Scheduler.cs
-
-RESOURCES =
-
-include $(top_srcdir)/build/build.mk
diff --git a/src/JobScheduler/Makefile.in b/src/JobScheduler/Makefile.in
deleted file mode 100644
index 415e205..0000000
--- a/src/JobScheduler/Makefile.in
+++ /dev/null
@@ -1,806 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = src/JobScheduler
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.JobScheduler
-TARGET = library
-LINK = $(REF_FSPOT_JOB_SCHEDULER) $(am__append_1)
-SOURCES = \
-	FSpotCompat.cs \
-	IInstanceCriticalJob.cs \
-	IJob.cs \
-	IntervalHeap.cs \
-	JobPriority.cs \
-	JobStatus.cs \
-	Scheduler.cs
-
-RESOURCES = 
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/JobScheduler/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign src/JobScheduler/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/JobStore.cs b/src/JobStore.cs
deleted file mode 100644
index e1dcd25..0000000
--- a/src/JobStore.cs
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * JobStore.cs
- *
- * Author(s):
- *   Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using Mono.Data.SqliteClient;
-using System.Collections;
-using System.IO;
-using System;
-using Banshee.Database;
-using Banshee.Kernel;
-using FSpot.Jobs;
-using FSpot;
-using Hyena;
-
-public abstract class Job : DbItem, IJob
-{
-	public Job (uint id, string job_options, JobPriority job_priority, DateTime run_at, bool persistent) : base (id)
-	{
-		this.job_options = job_options;
-		this.job_priority = job_priority;
-		this.run_at = run_at;
-		this.persistent = persistent;
-	}
-
-	private string job_options;
-	public string JobOptions {
-		get { return job_options; }
-		set { job_options = value; }
-	}
-
-	private JobPriority job_priority;
-	internal JobPriority JobPriority {
-		get { return job_priority; }
-		set { job_priority = value; }
-	}
-
-	//Not in use yet !
-	private DateTime run_at;
-	public DateTime RunAt {
-		get { return run_at; }
-//		set { run_at = value; }
-	}
-
-	private bool persistent;
-	public bool Persistent {
-		get { return persistent; }
-	}
-
-	public event EventHandler Finished;
-
-	private JobStatus status;
-	public JobStatus Status
-	{
-		get { return status; }
-		set {
-			status = value;
-			switch (value) {
-			case JobStatus.Finished:
-			case JobStatus.Failed:
-				if (Finished != null)
-					Finished (this, new EventArgs ());
-				break;
-			default:
-				break;
-			}
-		}
-	}
-
-	public void Run ()
-	{
-		Status = JobStatus.Running;
-		if (Execute ())
-			Status = JobStatus.Finished;
-		else
-			Status = JobStatus.Failed;
-	}
-
-	protected abstract bool Execute ();
-}
-
-public class JobStore : DbStore<Job> {
-	
-	internal static void CreateTable (QueuedSqliteDatabase database)
-	{
-		if (database.TableExists ("jobs")) {
-			return;
-		}
-
-		database.ExecuteNonQuery (
-			"CREATE TABLE jobs (\n" +
-			"	id		INTEGER PRIMARY KEY NOT NULL, \n" +
-			"	job_type	TEXT NOT NULL, \n" +
-			"	job_options	TEXT NOT NULL, \n" +
-			"	run_at		INTEGER, \n" +
-			"	job_priority	INTEGER NOT NULL\n" +
-			")");
-	}
-
-	private Job LoadItem (SqliteDataReader reader)
-	{
-		return (Job) Activator.CreateInstance (
-				Type.GetType (reader ["job_type"].ToString ()), 
-				Convert.ToUInt32 (reader["id"]), 
-				reader["job_options"].ToString (), 
-				Convert.ToInt32 (reader["run_at"]), 
-				(JobPriority) Convert.ToInt32 (reader["job_priority"]),
-				true);
-	}
-	
-	private void LoadAllItems ()
-	{
-		SqliteDataReader reader = Database.Query ("SELECT id, job_type, job_options, run_at, job_priority FROM jobs");
-
-		Scheduler.Suspend ();
-		while (reader.Read ()) {
-			Job job = LoadItem (reader);
-			AddToCache (job);
-			job.Finished += HandleRemoveJob;
-			Scheduler.Schedule (job, job.JobPriority);
-			job.Status = JobStatus.Scheduled;
-		}
-
-		reader.Close ();
-	}
-
-	public Job Create (Type job_type, string job_options)
-	{
-		return Create (job_type, job_options, DateTime.Now, JobPriority.Lowest, false);
-	}
-
-	public Job CreatePersistent (Type job_type, string job_options)
-	{
-		return Create (job_type, job_options, DateTime.Now, JobPriority.Lowest, true);
-	}
-
-	internal Job Create (Type job_type, string job_options, DateTime run_at, JobPriority job_priority, bool persistent)
-	{
-		int id = 0;
-		if (persistent)
-			id = Database.Execute (new DbCommand ("INSERT INTO jobs (job_type, job_options, run_at, job_priority) VALUES (:job_type, :job_options, :run_at, :job_priority)",
-						"job_type", job_type.ToString (), 
-						"job_options", job_options, 
-						"run_at", DateTimeUtil.FromDateTime (run_at),
-						"job_priority", Convert.ToInt32 (job_priority)));
-		
-                Job job = (Job) Activator.CreateInstance (job_type, (uint)id, job_options, run_at, job_priority, true);
-
-		AddToCache (job);
-		job.Finished += HandleRemoveJob;
-		Scheduler.Schedule (job, job.JobPriority);
-		job.Status = JobStatus.Scheduled;
-		EmitAdded (job);
-
-		return job;
-	}
-	
-	public override void Commit (Job item)
-	{
-		if (item.Persistent)
-			Database.ExecuteNonQuery(new DbCommand("UPDATE jobs " 					+
-									"SET job_type = :job_type "		+
-									"SET job_options = :job_options "	+
-									"SET run_at = :run_at "			+
-									"SET job_priority = :job_priority "	+
-									"WHERE id = :item_id", 
-									"job_type", "Empty", //FIXME
-									"job_options", item.JobOptions,
-									"run_at", DateTimeUtil.FromDateTime (item.RunAt),
-									"job_priority", item.JobPriority));
-		
-		EmitChanged (item);
-	}
-	
-	public override Job Get (uint id)
-	{
-            // we never use this
-            return null;
-	}
-
-	public override void Remove (Job item)
-	{
-		RemoveFromCache (item);
-
-		if ((item as Job).Persistent)
-			Database.ExecuteNonQuery (new DbCommand ("DELETE FROM jobs WHERE id = :item_id", "item_id", item.Id));
-
-		EmitRemoved (item);
-	}
-
-	public void HandleRemoveJob (Object o, EventArgs e)
-	{
-		Remove (o as Job);
-	}
-
-	public JobStore (QueuedSqliteDatabase database, bool is_new) : base (database, true)
-	{
-		if (is_new || !Database.TableExists ("jobs")) {
-			CreateTable (database);
-		} else {
-			LoadAllItems ();
-                }
-	}
-}
diff --git a/src/Jobs/CalculateHashJob.cs b/src/Jobs/CalculateHashJob.cs
deleted file mode 100644
index 55f449c..0000000
--- a/src/Jobs/CalculateHashJob.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Jobs/CalculateHashJob.cs
- *
- * Author(s)
- *   Thomas Van Machelen <thomas.vanmachelen at gmail.com>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Banshee.Kernel;
-using Hyena;
-
-namespace FSpot.Jobs {
-	public class CalculateHashJob : Job
-	{
-		public CalculateHashJob (uint id, string job_options, int run_at, JobPriority job_priority, bool persistent) 
-			: this (id, job_options, DateTimeUtil.ToDateTime (run_at), job_priority, persistent)
-		{
-		}
-
-		public CalculateHashJob (uint id, string job_options, DateTime run_at, JobPriority job_priority, bool persistent) 
-			: base (id, job_options, job_priority, run_at, persistent)
-		{
-		}
-
-		public static CalculateHashJob Create (JobStore job_store, uint photo_id)
-		{
-			return (CalculateHashJob) job_store.CreatePersistent (typeof(FSpot.Jobs.CalculateHashJob), photo_id.ToString ()); 
-		}
-
-		protected override bool Execute ()
-		{
-			//this will add some more reactivity to the system
-			System.Threading.Thread.Sleep (200);
-
-			uint photo_id = Convert.ToUInt32 (JobOptions);
-			Log.DebugFormat ("Calculating Hash {0}...", photo_id);
-
-			try {
-				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) {
-				Log.DebugFormat ("Error Calculating Hash for photo {0}: {1}", JobOptions, e.Message);
-			}
-			return false;
-		}
-	} 
-}
-
diff --git a/src/Jobs/SyncMetadataJob.cs b/src/Jobs/SyncMetadataJob.cs
deleted file mode 100644
index 7e1e93b..0000000
--- a/src/Jobs/SyncMetadataJob.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Jobs/SyncMetadataJob.cs
- *
- * Author(s)
- *   Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Banshee.Kernel;
-using Hyena;
-using FSpot.Utils;
-using Mono.Unix;
-
-namespace FSpot.Jobs {
-    public class SyncMetadataJob : Job
-    {
-        public SyncMetadataJob (uint id, string job_options, int run_at, JobPriority job_priority, bool persistent) : this (id, job_options, DateTimeUtil.ToDateTime (run_at), job_priority, persistent)
-        {
-        }
-
-        public SyncMetadataJob (uint id, string job_options, DateTime run_at, JobPriority job_priority, bool persistent) : base (id, job_options, job_priority, run_at, persistent)
-        {
-        }
-
-        //Use THIS static method to create a job...
-        public static SyncMetadataJob Create (JobStore job_store, Photo photo)
-        {
-            return (SyncMetadataJob) job_store.CreatePersistent (typeof (FSpot.Jobs.SyncMetadataJob), photo.Id.ToString ());
-        }
-
-        protected override bool Execute ()
-        {
-            //this will add some more reactivity to the system
-            System.Threading.Thread.Sleep (500);
-            Log.Debug ("Syncing metadata to file...");
-            try {
-                Photo photo = FSpot.App.Instance.Database.Photos.Get (Convert.ToUInt32 (JobOptions)) as Photo;
-                WriteMetadataToImage (photo);
-                return true;
-            } catch (System.Exception e) {
-                Log.ErrorFormat ("Error syncing metadata to file\n{0}", e);
-            }
-            return false;
-        }
-
-        void WriteMetadataToImage (Photo photo)
-        {
-            Tag [] tags = photo.Tags;
-            string [] names = new string [tags.Length];
-
-            for (int i = 0; i < tags.Length; i++)
-                names [i] = tags [i].Name;
-
-            using (var metadata = Metadata.Parse (photo.DefaultVersion.Uri)) {
-                metadata.EnsureAvailableTags ();
-
-                var tag = metadata.ImageTag;
-                tag.DateTime = photo.Time;
-                tag.Comment = photo.Description ?? String.Empty;
-                tag.Keywords = names;
-                tag.Rating = photo.Rating;
-                tag.Software = FSpot.Defines.PACKAGE + " version " + FSpot.Defines.VERSION;
-
-                var always_sidecar = Preferences.Get<bool> (Preferences.METADATA_ALWAYS_USE_SIDECAR);
-                if (always_sidecar || !metadata.Writeable || metadata.PossiblyCorrupt) {
-                    if (!always_sidecar && metadata.PossiblyCorrupt) {
-                        Log.WarningFormat (Catalog.GetString ("Metadata of file {0} may be corrupt, refusing to write to it, falling back to XMP sidecar."), photo.DefaultVersion.Uri);
-                    }
-
-                    var sidecar_res = new GIOTagLibFileAbstraction () { Uri = photo.DefaultVersion.Uri.ReplaceExtension (".xmp") };
-
-                    metadata.SaveXmpSidecar (sidecar_res);
-                } else {
-                    metadata.Save ();
-                }
-            }
-        }
-    }
-}
diff --git a/src/Loaders/AreaPreparedEventArgs.cs b/src/Loaders/AreaPreparedEventArgs.cs
deleted file mode 100644
index 82387d7..0000000
--- a/src/Loaders/AreaPreparedEventArgs.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Fspot.Loaders.AreaPreparedEventArgs.cs
-//
-// Copyright (c) 2009 Novell, Inc.
-//
-// Author(s)
-//	Stephane Delcroix  <sdelcroix at novell.com>
-//
-// This is free software. See COPYING for details
-//
-
-using System;
-using Gdk;
-
-namespace FSpot.Loaders {
-	public class AreaPreparedEventArgs : EventArgs
-	{
-		bool reduced_resolution;
-
-		public bool ReducedResolution {
-			get { return reduced_resolution; }
-		}
-	
-		public AreaPreparedEventArgs (bool reduced_resolution) : base ()
-		{
-			this.reduced_resolution = reduced_resolution;
-		}
-	}
-}
diff --git a/src/Loaders/AreaUpdatedEventArgs.cs b/src/Loaders/AreaUpdatedEventArgs.cs
deleted file mode 100644
index 7308edf..0000000
--- a/src/Loaders/AreaUpdatedEventArgs.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Fspot.Loaders.AreaUpdatedEventArgs.cs
-//
-// Copyright (c) 2009 Novell, Inc.
-//
-// Author(s)
-//	Stephane Delcroix  <sdelcroix at novell.com>
-//
-// This is free software. See COPYING for details
-//
-
-using System;
-using Gdk;
-
-namespace FSpot.Loaders {
-	public class AreaUpdatedEventArgs : EventArgs
-	{
-		Gdk.Rectangle area;
-		public Gdk.Rectangle Area { 
-			get { return area; }
-		}
-
-		public AreaUpdatedEventArgs (Gdk.Rectangle area) : base ()
-		{
-			this.area = area;
-		}
-	}
-}
diff --git a/src/Loaders/GdkImageLoader.cs b/src/Loaders/GdkImageLoader.cs
deleted file mode 100644
index f904148..0000000
--- a/src/Loaders/GdkImageLoader.cs
+++ /dev/null
@@ -1,216 +0,0 @@
-//
-// Fspot.ImageLoader.cs
-//
-// Copyright (c) 2009 Novell, Inc.
-//
-// Author(s)
-//	Stephane Delcroix  <sdelcroix at novell.com>
-//
-// This is free software. See COPYING for details
-//
-
-using System;
-using System.Threading;
-using Gdk;
-using FSpot.Utils;
-using FSpot.Platform;
-using FSpot.Imaging;
-using Hyena;
-using TagLib.Image;
-
-namespace FSpot.Loaders {
-	public class GdkImageLoader : Gdk.PixbufLoader, IImageLoader
-	{
-#region public api
-		public GdkImageLoader () : base ()
-		{	
-		}
-
-        ~GdkImageLoader ()
-        {
-            if (!is_disposed)
-                Dispose ();
-        }
-
-		public void Load (SafeUri uri)
-		{
-			if (is_disposed)
-				return;
-
-			//First, send a thumbnail if we have one
-			if ((thumb = XdgThumbnailSpec.LoadThumbnail (uri, ThumbnailSize.Large, null)) != null) {
-				pixbuf_orientation = ImageOrientation.TopLeft;
-				EventHandler<AreaPreparedEventArgs> prep = AreaPrepared;
-				if (prep != null)
-					prep (this, new AreaPreparedEventArgs (true));
-				EventHandler<AreaUpdatedEventArgs> upd = AreaUpdated;
-				if (upd != null)
-					upd (this, new AreaUpdatedEventArgs (new Rectangle (0, 0, thumb.Width, thumb.Height)));
-			}
-
-			using (var image_file = ImageFile.Create (uri)) {
-				image_stream = image_file.PixbufStream ();
-				pixbuf_orientation = image_file.Orientation;
-			}
-
-			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) {
-				ThreadPool.QueueUserWorkItem (delegate {HandleReadDone (r);});
-			}, null);
-		}
-
-		new public event EventHandler<AreaPreparedEventArgs> AreaPrepared;
-		new public event EventHandler<AreaUpdatedEventArgs> AreaUpdated;
-		public event EventHandler Completed;
-
-
-		Pixbuf thumb;
-		new public Pixbuf Pixbuf {
-			get {
-				if (thumb != null)
-					return thumb;
-				return base.Pixbuf;
-			}
-		}
-
-		bool loading = false;
-		public bool Loading {
-			get { return loading; }
-		}
-
-		bool notify_prepared = false;
-		bool prepared = false;
-		public bool Prepared {
-			get { return prepared; }
-		}
-
-		ImageOrientation pixbuf_orientation = ImageOrientation.TopLeft;
-		public ImageOrientation PixbufOrientation {
-			get { return pixbuf_orientation; }
-		}
-
-		bool is_disposed = false;
-		public override void Dispose ()
-		{
-			is_disposed = true;
-			if (image_stream != null)
-				try {
-					image_stream.Close ();
-				} catch (GLib.GException)
-				{
-				}
-			Close ();
-			if (thumb != null) {
-				thumb.Dispose ();
-				thumb = null;
-			}
-			base.Dispose ();
-		}
-
-		public new bool Close ()
-		{
-			lock (sync_handle) {
-				return base.Close (true);
-			}
-		}
-#endregion
-
-#region event handlers
-		protected override void OnAreaPrepared ()
-		{
-			if (is_disposed)
-				return;
-
-			prepared = notify_prepared = true;
-			damage = Rectangle.Zero;
-			base.OnAreaPrepared ();
-		}
-
-		protected override void OnAreaUpdated (int x, int y, int width, int height)
-		{
-			if (is_disposed)
-				return;
-
-			Rectangle area = new Rectangle (x, y, width, height);
-			damage = damage == Rectangle.Zero ? area : damage.Union (area);
-			base.OnAreaUpdated (x, y, width, height);
-		}
-
-		protected virtual void OnCompleted ()
-		{
-			if (is_disposed)
-				return;
-
-			EventHandler eh = Completed;
-			if (eh != null)
-				eh (this, EventArgs.Empty);
-			Close ();
-		}
-#endregion
-
-#region private stuffs
-		System.IO.Stream image_stream;
-		const int count = 1 << 16;
-		byte [] buffer = new byte [count];
-		bool notify_completed = false;
-		Rectangle damage;
-		object sync_handle = new object ();
-
-		void HandleReadDone (IAsyncResult ar)
-		{
-			if (is_disposed)
-				return;
-
-			int byte_read = image_stream.EndRead (ar);
-			lock (sync_handle) {
-				if (byte_read == 0) {
-					image_stream.Close ();
-					Close ();
-					loading = false;
-					notify_completed = true;
-				} else {
-					try {
-						if (!is_disposed && Write (buffer, (ulong)byte_read))
-							image_stream.BeginRead (buffer, 0, count, HandleReadDone, null);
-					} catch (System.ObjectDisposedException) {
-					} catch (GLib.GException) {
-					}
-				}
-			}
-
-			GLib.Idle.Add (delegate {
-				//Send the AreaPrepared event
-				if (notify_prepared) {
-					notify_prepared = false;
-					if (thumb != null) {
-						thumb.Dispose ();
-						thumb = null;
-					}
-
-					EventHandler<AreaPreparedEventArgs> eh = AreaPrepared;
-					if (eh != null)
-						eh (this, new AreaPreparedEventArgs (false));
-				}
-
-				//Send the AreaUpdated events
-				if (damage != Rectangle.Zero) {
-					EventHandler<AreaUpdatedEventArgs> eh = AreaUpdated;
-					if (eh != null)
-						eh (this, new AreaUpdatedEventArgs (damage));
-					damage = Rectangle.Zero;
-				}
-
-				//Send the Completed event
-				if (notify_completed) {
-					notify_completed = false;
-					OnCompleted ();
-				}
-
-				return false;
-			});
-		}
-#endregion
-	}
-}	       
diff --git a/src/Loaders/IImageLoader.cs b/src/Loaders/IImageLoader.cs
deleted file mode 100644
index 19b2d73..0000000
--- a/src/Loaders/IImageLoader.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// Fspot.Loaders.IImageLoader.cs
-//
-// Copyright (c) 2009 Novell, Inc.
-//
-// Author(s)
-//	Ruben Vermeersch  <ruben at savanne.be>
-//
-// This is free software. See COPYING for details
-//
-
-using FSpot.Utils;
-using System;
-using Gdk;
-using Hyena;
-using TagLib.Image;
-
-namespace FSpot.Loaders {
-	public interface IImageLoader : IDisposable {
-		bool Loading { get; }	
-
-		event EventHandler<AreaPreparedEventArgs> AreaPrepared;
-		event EventHandler<AreaUpdatedEventArgs> AreaUpdated;
-		event EventHandler Completed;
-
-		void Load (SafeUri uri);
-
-		Pixbuf Pixbuf { get; }
-		ImageOrientation PixbufOrientation { get; }
-	}
-}
diff --git a/src/Loupe.cs b/src/Loupe.cs
deleted file mode 100644
index b2ecee9..0000000
--- a/src/Loupe.cs
+++ /dev/null
@@ -1,511 +0,0 @@
-//
-// FSpot.Widgets.Loupe.cs
-//
-// Author(s):
-//	Larry Ewing  <lewing at novell.com:
-//
-// Copyright (c) 2005-2009 Novell, Inc.
-//
-// This is free software. See COPYING for details.
-//
-using Cairo;
-
-using Gtk;
-using Gdk;
-using System;
-using System.Runtime.InteropServices;
-using Mono.Unix;
-using FSpot.Utils;
-using Hyena;
-
-namespace FSpot.Widgets {
-	public class Loupe : Gtk.Window {
-		protected PhotoImageView view;
-		protected Gdk.Rectangle region;
-		bool use_shape_ext = false;
-		protected Gdk.Pixbuf source;
-		protected Gdk.Pixbuf overlay;
-		private int radius = 128;
-		private int inner = 128;
-		private int border = 6;
-		private double angle = Math.PI / 4;
-		Gdk.Point start;
-		Gdk.Point start_hot;
-		Gdk.Point hotspot;
-
-		public Loupe (PhotoImageView view) : base ("Loupe")
-		{ 
-			this.view = view;
-			Decorated = false;
-			
-			Gtk.Window win = (Gtk.Window) view.Toplevel;
-
-			win.GetPosition (out old_win_pos.X, out old_win_pos.Y);
-			win.ConfigureEvent += HandleToplevelConfigure;
-
-			TransientFor = win;
-			DestroyWithParent = true;
-
-			BuildUI ();
-		}
-
-		Gdk.Point old_win_pos;
-		[GLib.ConnectBefore]
-		public void HandleToplevelConfigure (object o, ConfigureEventArgs args)
-		{
-			int x, y;
-			int loupe_x, loupe_y;
-
-			x = args.Event.X - old_win_pos.X;
-			y = args.Event.Y - old_win_pos.Y;
-			
-			GetPosition (out loupe_x, out loupe_y);
-			Move (loupe_x + x, loupe_y + y);
-
-			old_win_pos.X = args.Event.X;
-			old_win_pos.Y = args.Event.Y;
-		}
-		
-		// FIXME
-		//screen "composited-changed"
-
-		public int Radius {
-			get {
-				return radius;
-			}
-			set {
-				if (radius != value) {
-					radius = value;
-					UpdateSample ();
-				}
-			}
-		}
-
-		public int Border {
-			get {
-				return border;
-			}
-			set {
-				if (border != value) {
-					border = value;
-					UpdateSample ();
-				}
-			}
-		}
-
-		public double Angle {
-			get {
-				return angle;
-			}
-			set {
-				Gdk.Point then = hotspot;
-				angle = value;
-				Layout ();
-				Gdk.Point now = hotspot;
-				//System.Console.WriteLine ("{0} now {1}", then, now);
-				int x, y;
-				GdkWindow.GetOrigin (out x, out y);
-				//GdkWindow.MoveResize (x + then.X - now.X, y + then.Y - now.Y, Bounds.Width, Bounds.Height);
-				ShapeWindow ();
-				Move (x + then.X - now.X, y + then.Y - now.Y);
-				//QueueResize ();
-			}
-		}
-
-		protected override void OnSizeAllocated (Gdk.Rectangle allocation)
-		{
-			if (IsRealized)
-				ShapeWindow ();
-
-			base.OnSizeAllocated (allocation);
-		}
-
-		protected override void OnRealized ()
-		{
-			use_shape_ext = ! (CompositeUtils.IsComposited (Screen) && CompositeUtils.SetRgbaColormap (this));
-			
-			base.OnRealized ();
-			ShapeWindow ();
-		}
-
-		void SetSamplePoint (Gdk.Point p)
-		{
-			region.X = p.X;
-			region.Y = p.Y;
-			region.Width = 2 * radius;
-			region.Height = 2 * radius;
-			
-			if (view.Pixbuf != null) {
-				region.Offset (- Math.Min (region.X, Math.Max (region.Right - view.Pixbuf.Width, radius)), 
-					       - Math.Min (region.Y, Math.Max (region.Bottom - view.Pixbuf.Height, radius)));
-
-				region.Intersect (new Gdk.Rectangle (0, 0, view.Pixbuf.Width, view.Pixbuf.Height));
-			}
-			UpdateSample ();
-		}
-
-		protected virtual void UpdateSample ()
-		{
-			if (source != null)
-				source.Dispose ();
-			
-			source = null;
-
-			if (view.Pixbuf == null)
-				return;
-			
-			int small = (int) (radius * view.Zoom);
-			if (small != inner) {
-				inner = small;
-				QueueResize ();
-			}
-
-			Pixbuf tmp = new Gdk.Pixbuf (view.Pixbuf,
-						 region.X, region.Y,
-						 region.Width, region.Height);
-			using (tmp)
-				source = FSpot.Utils.PixbufUtils.TransformOrientation (tmp, view.PixbufOrientation);
-			
-			//FIXME sometimes that ctor returns results with a null
-			//handle this case ourselves
-			if (source.Handle == IntPtr.Zero)
-				source = null;
-
-			this.QueueDraw ();
-		}
-
-		[GLib.ConnectBefore]
-		private void HandleImageViewMotion (object sender, MotionNotifyEventArgs args)
-		{
-			Gdk.Point coords;
-			coords = new Gdk.Point ((int) args.Event.X, (int) args.Event.Y);
-			
-			SetSamplePoint (view.WindowCoordsToImage (coords));
-		}
-
-		private void ShapeWindow ()
-		{
-			Layout ();
-			Gdk.Pixmap bitmap = new Gdk.Pixmap (GdkWindow, 
-							    Allocation.Width, 
-							    Allocation.Height, 1);
-			
-			Context g = CairoHelper.Create (bitmap);
-			DrawShape (g, Allocation.Width, Allocation.Height);
-			
-			((IDisposable)g).Dispose ();
-
-			if (use_shape_ext)
-				ShapeCombineMask (bitmap, 0, 0);
-			else {
-				Cairo.Context rgba = CairoHelper.Create (GdkWindow);
-				DrawShape (rgba, Allocation.Width, Allocation.Height);
-				((IDisposable)rgba).Dispose ();
-				try {
-					CompositeUtils.InputShapeCombineMask (this, bitmap, 0,0);
-				} catch (EntryPointNotFoundException) {
-					Log.Warning ("gtk+ version doesn't support input shapping");
-				}
-			}
-			bitmap.Dispose ();
-		}
-		
-		Gdk.Point Center;
-	        Requisition Bounds;
-		
-		public void Layout ()
-		{
-			double a = radius + border;
-			double b = inner + border;
-			double x_proj = (a + b - border) * Math.Cos (angle);
-			double y_proj = (a + b - border) * Math.Sin (angle);
-			
-			Center.X = (int) Math.Ceiling (Math.Max (-x_proj + b, a));
-			Center.Y = (int) Math.Ceiling (Math.Max (-y_proj + b, a));
-
-			Bounds.Width = (int) Math.Ceiling (Math.Max (Math.Abs (x_proj) + b, a) + b + a);
-			Bounds.Height = (int) Math.Ceiling (Math.Max (Math.Abs (y_proj) + b, a) + b + a);
-			
-			hotspot.X = (int) Math.Ceiling (Center.X + x_proj);
-			hotspot.Y = (int) Math.Ceiling (Center.Y + y_proj);
-		}
-	
-		private void DrawShape (Context g, int width, int height)
-		{
-			int inner_x = radius + border + inner;
-			int cx = Center.X;
-			int cy = Center.Y;
-		
-			g.Operator = Operator.Source;
-			g.Source = new SolidPattern (new Cairo.Color (0,0,0,0));
-			g.Rectangle (0, 0, width, height);
-			g.Paint ();
-
-			g.NewPath ();
-			g.Translate (cx, cy);
-			g.Rotate (angle);
-
-			g.Source = new SolidPattern (new Cairo.Color (0.2, 0.2, 0.2, .6));
-			g.Operator = Operator.Over;
-			g.Rectangle (0, - (border + inner), inner_x, 2 * (border + inner));
-			g.Arc (inner_x, 0, inner + border, 0, 2 * Math.PI);
-			g.Arc (0, 0, radius + border, 0, 2 * Math.PI);
-			g.Fill ();
-
-			g.Source = new SolidPattern (new Cairo.Color (0, 0, 0, 1.0));
-			g.Operator = Operator.DestOut;
-			g.Arc (inner_x, 0, inner, 0, 2 * Math.PI);
-#if true			
-			g.Fill ();
-#else
-			g.FillPreserve ();
-
-			g.Operator = Operator.Over;
-			RadialGradient rg = new RadialGradient (inner_x - (inner * 0.3), inner * 0.3 , inner * 0.1, inner_x, 0, inner);
-			rg.AddColorStop (0, new Cairo.Color (0.0, 0.2, .8, 0.5)); 
-			rg.AddColorStop (0.7, new Cairo.Color (0.0, 0.2, .8, 0.1)); 
-			rg.AddColorStop (1.0, new Cairo.Color (0.0, 0.0, 0.0, 0.0));
-			g.Source = rg;
-			g.Fill ();
-			rg.Destroy ();
-#endif
-			g.Operator = Operator.Over;
-			g.Matrix = new Matrix ();
-			g.Translate (cx, cy);
-			if (source != null)
-			CairoHelper.SetSourcePixbuf (g, source, -source.Width / 2, -source.Height / 2);
-
-			g.Arc (0, 0, radius, 0, 2 * Math.PI);
-			g.Fill ();
-
-			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)
-		{
-			Context g = CairoHelper.Create (GdkWindow);
-			
-			DrawShape (g, Allocation.Width, Allocation.Height);
-			//base.OnExposeEvent (args);
-			((IDisposable)g).Dispose ();
-			return false;
-
-		}
-		
-		bool dragging = false;
-		bool rotate = false;
-		Delay drag;
-		Gdk.Point pos;
-		double start_angle = 0;
-		Gdk.Point root_pos;
-		Gdk.Point start_root;
-		Gdk.Cursor opened_hand_cursor = new Gdk.Cursor (Gdk.CursorType.Hand1);
-		Gdk.Cursor closed_hand_cursor = new Gdk.Cursor (Gdk.CursorType.Fleur);
-
-		private void HandleMotionNotifyEvent (object sender, MotionNotifyEventArgs args)
-		{
-		        pos.X = (int) args.Event.XRoot - start.X;
-		        pos.Y = (int) args.Event.YRoot - start.Y;
-
-			root_pos.X = (int) args.Event.XRoot;
-			root_pos.Y = (int) args.Event.YRoot;
-
-			if (dragging)
-				drag.Start ();
-		}
-
-		private bool DragUpdate ()
-		{
-			if (!dragging)
-				return false;
-
-			if (!rotate) {
-				return MoveWindow ();
-			} else {
-				Gdk.Point initial = start_root;
-				Gdk.Point hot = start_hot;
-				Gdk.Point win = Gdk.Point.Zero;
-				
-				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;
-				
-				Vector v1 = new Vector (initial);
-				Vector v2 = new Vector (now);
-
-				double angle = Vector.AngleBetween (v1, v2);
-				
-				Angle = start_angle + angle;
-				return false;	
-			}
-		}
-
-		private bool MoveWindow ()
-		{
-			Gdk.Point view_coords;
-			Gdk.Point top;
-			Gdk.Point current;
-			
-			GdkWindow.GetOrigin (out current.X, out current.Y);
-		
-			if (current == pos)
-				return false;
-			
-			Move (pos.X, pos.Y);
-
-			pos.Offset (hotspot.X, hotspot.Y);
-			Gtk.Window toplevel = (Gtk.Window) view.Toplevel;
-			toplevel.GdkWindow.GetOrigin (out top.X, out top.Y);
-			toplevel.TranslateCoordinates (view, 
-						       pos.X - top.X,  pos.Y - top.Y, 
-						       out view_coords.X, out view_coords.Y);
-
-			SetSamplePoint (view.WindowCoordsToImage (view_coords));
-
-			return false;
-		}
-
-		private void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs args)
-		{
-			UpdateSample ();
-		}
-
-		private void HandleButtonPressEvent (object sender, ButtonPressEventArgs args)
-		{
-			switch (args.Event.Type) {
-			case Gdk.EventType.ButtonPress:
-				if (args.Event.Button == 1) {
-					start = new Gdk.Point ((int)args.Event.X, (int)args.Event.Y);
-					start_root = new Gdk.Point ((int)args.Event.XRoot, (int)args.Event.YRoot);
-					start_hot = hotspot;
-
-					Gdk.Point win;
-					GdkWindow.GetOrigin (out win.X, out win.Y);
-					start_hot.X += win.X;
-					start_hot.Y += win.Y;
-
-					dragging = true;
-					rotate = (args.Event.State & Gdk.ModifierType.ShiftMask) > 0;
-					start_angle = Angle;
-				} else {
-					Angle += Math.PI /8;
-				}
-				break;
-			case Gdk.EventType.TwoButtonPress:
-				dragging = false;
-				App.Instance.Organizer.HideLoupe ();
-				break;
-			}
-		}
-
-		private void HandleViewZoomChanged (object sender, System.EventArgs args)
-		{
-			UpdateSample ();
-		}
-
-		private void HandleButtonReleaseEvent (object sender, ButtonReleaseEventArgs args)
-		{
-			dragging = false;
-		}
-
-		private void HandleKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
-		{
-			switch (args.Event.Key) {
-			case Gdk.Key.v:
-				App.Instance.Organizer.HideLoupe ();
-				args.RetVal = true;
-				break;
-			default:
-				break;
-			}
-			return;
-		}
-
-		protected override void OnDestroyed ()
-		{
-			view.MotionNotifyEvent -= HandleImageViewMotion;
-			view.Item.Changed -= HandleItemChanged;
-			view.ZoomChanged -= HandleViewZoomChanged;
-
-			opened_hand_cursor.Dispose ();
-			closed_hand_cursor.Dispose ();
-			opened_hand_cursor = null;
-			closed_hand_cursor = null;
-			
-			base.OnDestroyed ();
-		}
-
-		protected Widget SetFancyStyle (Widget widget)
-		{
-			//widget.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
-			//widget.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
-			return widget;
-		}
-		
-		protected override void OnSizeRequested (ref Requisition requisition) 
-		{
-			Layout ();
-			requisition = Bounds;
-		}
-
-		protected virtual void BuildUI ()
-		{
-			SetFancyStyle (this);
-			
-			TransientFor = (Gtk.Window) view.Toplevel;
-			SkipPagerHint = true;
-			SkipTaskbarHint = true;
-			
-			//view.MotionNotifyEvent += HandleImageViewMotion;
-			view.Item.Changed += HandleItemChanged;
-			view.ZoomChanged += HandleViewZoomChanged;
-
-			SetSamplePoint (Gdk.Point.Zero);
-
-			AddEvents ((int) (Gdk.EventMask.PointerMotionMask
-					  | Gdk.EventMask.ButtonPressMask
-					  | Gdk.EventMask.ButtonReleaseMask));
-
-			ButtonPressEvent += HandleButtonPressEvent;
-			ButtonReleaseEvent += HandleButtonReleaseEvent;
-			MotionNotifyEvent += HandleMotionNotifyEvent;
-			KeyPressEvent += HandleKeyPressEvent;
-
-			drag = new Delay (20, new GLib.IdleHandler (DragUpdate));
-
-			// Update the cursor appropriate to indicate dragability/dragging
-			bool inside = false, pressed = false;
-			EnterNotifyEvent += delegate {
-				inside = true;
-				if (!pressed)
-					GdkWindow.Cursor = opened_hand_cursor;
-			};
-			LeaveNotifyEvent += delegate {
-				inside = false;
-				if (!pressed)
-					GdkWindow.Cursor = null;
-			};
-			ButtonPressEvent += delegate {
-				pressed = true;
-				GdkWindow.Cursor = closed_hand_cursor;
-			};
-			ButtonReleaseEvent += delegate {
-				pressed = false;
-				GdkWindow.Cursor = inside ? opened_hand_cursor : null;
-			};
-		}
-	}
-}
-
diff --git a/src/MainWindow.cs b/src/MainWindow.cs
deleted file mode 100644
index a8b8436..0000000
--- a/src/MainWindow.cs
+++ /dev/null
@@ -1,3003 +0,0 @@
-/*
- * FSpot.MainWindow.cs
- *
- * Copyright (c) 2003-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.Text;
-using System.Collections;
-using System.Collections.Generic;
-
-using Gdk;
-using Gtk;
-
-using Mono.Addins;
-using Mono.Unix;
-
-using Hyena;
-using Hyena.Widgets;
-using Banshee.Kernel;
-
-using FSpot;
-using FSpot.Extensions;
-using FSpot.Query;
-using FSpot.Widgets;
-using FSpot.Utils;
-using FSpot.UI.Dialog;
-using FSpot.Platform;
-using FSpot.Import;
-
-namespace FSpot
-{
-	public class MainWindow
-	{
-		public Sidebar Sidebar { get; private set; }
-	
-		TagSelectionWidget tag_selection_widget;
-		[GtkBeans.Builder.Object] Gtk.Window main_window;
-		public Gtk.Window Window { 
-			get { return main_window; }
-		}
-	
-		[GtkBeans.Builder.Object] Gtk.HPaned main_hpaned;
-		[GtkBeans.Builder.Object] Gtk.VBox view_vbox;
-	
-		[GtkBeans.Builder.Object] Gtk.VBox toolbar_vbox;
-	
-		[GtkBeans.Builder.Object] Gtk.ScrolledWindow icon_view_scrolled;
-		[GtkBeans.Builder.Object] Box photo_box;
-		[GtkBeans.Builder.Object] Notebook view_notebook;
-		
-		Gtk.ScrolledWindow tag_selection_scrolled;
-	
-		[GtkBeans.Builder.Object] Label status_label;
-	
-		[GtkBeans.Builder.Object] Gtk.UIManager uimanager;
-		// Photo
-		[GtkBeans.Builder.Object] Gtk.Action create_version_menu_item;
-		[GtkBeans.Builder.Object] Gtk.Action delete_version_menu_item;
-		[GtkBeans.Builder.Object] Gtk.Action detach_version_menu_item;
-		[GtkBeans.Builder.Object] Gtk.Action rename_version_menu_item;
-		
-		[GtkBeans.Builder.Object] Gtk.Action tools;
-		[GtkBeans.Builder.Object] Gtk.Action export;
-		[GtkBeans.Builder.Object] Gtk.Action pagesetup_menu_item;
-		[GtkBeans.Builder.Object] Gtk.Action print;
-		[GtkBeans.Builder.Object] Gtk.Action send_mail;
-	
-		// Edit
-		[GtkBeans.Builder.Object] Gtk.Action copy;
-		[GtkBeans.Builder.Object] Gtk.Action select_none;
-		[GtkBeans.Builder.Object] Gtk.Action rotate_left;
-		[GtkBeans.Builder.Object] Gtk.Action rotate_right;
-	
-		[GtkBeans.Builder.Object] Gtk.Action sharpen;
-		[GtkBeans.Builder.Object] Gtk.Action adjust_time;
-	
-		[GtkBeans.Builder.Object] Gtk.Action update_thumbnail;
-		[GtkBeans.Builder.Object] Gtk.Action delete_from_drive;
-		[GtkBeans.Builder.Object] Gtk.Action remove_from_catalog;
-		[GtkBeans.Builder.Object] Gtk.Action set_as_background;
-	
-		[GtkBeans.Builder.Object] Gtk.Action attach_tag;
-		[GtkBeans.Builder.Object] Gtk.Action remove_tag;
-	
-		// View
-		[GtkBeans.Builder.Object] Gtk.ToggleAction display_toolbar;
-		[GtkBeans.Builder.Object] Gtk.ToggleAction display_sidebar;
-		[GtkBeans.Builder.Object] Gtk.ToggleAction display_timeline;
-		[GtkBeans.Builder.Object] Gtk.ToggleAction display_filmstrip;
-		[GtkBeans.Builder.Object] Gtk.ToggleAction display_dates_menu_item;
-		[GtkBeans.Builder.Object] Gtk.ToggleAction display_tags_menu_item;
-		[GtkBeans.Builder.Object] Gtk.ToggleAction display_ratings_menu_item;
-	
-		[GtkBeans.Builder.Object] Gtk.Action zoom_in;
-		[GtkBeans.Builder.Object] Gtk.Action zoom_out;
-		[GtkBeans.Builder.Object] Gtk.ToggleAction loupe_menu_item;
-	
-		[GtkBeans.Builder.Object] Gtk.RadioAction tag_icon_hidden;
-		[GtkBeans.Builder.Object] Gtk.RadioAction tag_icon_small;
-		[GtkBeans.Builder.Object] Gtk.RadioAction tag_icon_medium;
-		[GtkBeans.Builder.Object] Gtk.RadioAction tag_icon_large;
-	
-		[GtkBeans.Builder.Object] Gtk.ToggleAction reverse_order;
-		public Gtk.ToggleAction ReverseOrderAction {
-			get { return reverse_order; }
-		}
-	
-		// Find
-		[GtkBeans.Builder.Object] Gtk.Action clear_date_range;
-		[GtkBeans.Builder.Object] Gtk.Action clear_rating_filter;
-	
-		[GtkBeans.Builder.Object] Gtk.ToggleAction find_untagged;
-		
-		[GtkBeans.Builder.Object] Gtk.Action clear_roll_filter;	
-		
-		// Tags
-		[GtkBeans.Builder.Object] Gtk.Action edit_selected_tag;
-		[GtkBeans.Builder.Object] Gtk.Action delete_selected_tag;
-	
-		[GtkBeans.Builder.Object] Gtk.Action attach_tag_to_selection;
-		[GtkBeans.Builder.Object] Gtk.Action remove_tag_from_selection;
-		
-		// Other Widgets
-		[GtkBeans.Builder.Object] Scale zoom_scale;
-	
-		[GtkBeans.Builder.Object] VBox info_vbox;
-	
-		[GtkBeans.Builder.Object] Gtk.HBox tagbar;
-		[GtkBeans.Builder.Object] Gtk.VBox tag_entry_container;
-		[GtkBeans.Builder.Object] Gtk.VBox sidebar_vbox;
-		TagEntry tag_entry;
-	
-		Gtk.Toolbar toolbar;
-	
-		FindBar find_bar;
-	
-		PhotoVersionMenu versions_submenu;
-	
-		Gtk.ToggleToolButton browse_button;
-		Gtk.ToggleToolButton edit_button;
-	
-		QueryView icon_view;
-
-		PhotoView photo_view;
-		public PhotoView PhotoView {
-			get { return photo_view; }
-		}
-	
-		FSpot.FullScreenView fsview;
-		FSpot.PhotoQuery query;
-		FSpot.GroupSelector group_selector;
-		FSpot.QueryWidget query_widget;
-		
-		ToolButton rl_button;
-		ToolButton rr_button;
-	
-		Label count_label;
-	
-		Gtk.ToolButton display_next_button;
-		Gtk.ToolButton display_previous_button;
-		
-		bool write_metadata = false;
-	
-		Gdk.Cursor watch = new Gdk.Cursor (Gdk.CursorType.Watch);
-	
-		// Tag Icon Sizes
-		public int TagsIconSize {
-			get { return (int) Tag.TagIconSize; }
-			set { Tag.TagIconSize = (Tag.IconSize) value; }
-		}
-	
-		private static TargetEntry [] icon_source_target_table = 
-			new TargetEntry [] {
-				DragDropTargets.PhotoListEntry,
-				DragDropTargets.TagQueryEntry,
-				DragDropTargets.UriListEntry,
-				DragDropTargets.RootWindowEntry
-		};
-		
-		private static TargetEntry [] icon_dest_target_table = 
-			new TargetEntry [] {
-				DragDropTargets.PhotoListEntry,
-				DragDropTargets.TagListEntry,
-				DragDropTargets.UriListEntry
-		};
-		
-		private static TargetEntry [] tag_target_table = 
-			new TargetEntry [] {
-				DragDropTargets.TagListEntry
-		};
-		
-		const int PHOTO_IDX_NONE = -1;
-	
-		public Db Database { get; private set; }
-		public ModeType ViewMode { get; private set; }
-		public MainSelection Selection { get; private set; }
-		public InfoBox InfoBox { get; private set; }
-	
-		//
-		// Constructor
-		//
-		public MainWindow (Db db)
-		{
-			foreach (ServiceNode service in AddinManager.GetExtensionNodes ("/FSpot/Services")) {
-				try {
-					service.Initialize ();
-					service.Start ();
-				} catch (Exception e) {
-					Log.WarningFormat ("Something went wrong while starting the {0} extension.", service.Id);
-					Log.DebugException (e);
-				}
-			}
-		
-#if GSD_2_24
-			Log.Information ("Hack for gnome-settings-daemon engaged");
-			int max_age, max_size;
-			if (Preferences.TryGet<int> (Preferences.GSD_THUMBS_MAX_AGE, out max_age)) {
-				if (max_age < 0)
-					Log.Debug ("maximum_age check already disabled, good");
-				else if (max_age == 0)
-					Log.Warning ("maximum_age is 0 (tin-hat mode), not overriding");
-				else if (max_age < 180) {
-					Log.Debug ("Setting maximum_age to a saner value");
-					Preferences.Set (Preferences.GSD_THUMBS_MAX_AGE, 180);
-				}
-			}
-
-			if (Preferences.TryGet<int> (Preferences.GSD_THUMBS_MAX_SIZE, out max_size)) {
-				int count = App.Instance.Database.Photos.Count ("photos");
-				// average thumbs are taking 70K, so this will push the threshold
-				//if f-spot takes more than 70% of the thumbs space
-				int size = count / 10;
-				if (max_size < 0)
-					Log.Debug ("maximum_size check already disabled, good");
-				else if (max_size == 0)
-					Log.Warning ("maximum_size is 0 (tin-hat mode), not overriding");
-				else if (max_size < size) {
-					Log.DebugFormat ("Setting maximum_size to a saner value ({0}MB), according to your db size", size);
-					Preferences.Set (Preferences.GSD_THUMBS_MAX_SIZE, size);
-				}
-			}
-
-#endif
-			Database = db;
-	
-			GtkBeans.Builder builder = new GtkBeans.Builder ("main_window.ui");
-			builder.Autoconnect (this);
-
-			//Set the global DefaultColormap. Allows transparency according
-			//to the theme (work on murrine engine)
-			Gdk.Colormap colormap = ((Widget)main_window).Screen.RgbaColormap;
-			if (colormap == null) {
-				Log.Debug ("Your screen doesn't support alpha channels!");
-				colormap = ((Widget)main_window).Screen.RgbColormap;
-			}
-			Gtk.Widget.DefaultColormap = colormap;
-	
-			LoadPreference (Preferences.MAIN_WINDOW_WIDTH);
-			LoadPreference (Preferences.MAIN_WINDOW_X);
-			LoadPreference (Preferences.MAIN_WINDOW_MAXIMIZED);
-			main_window.ShowAll ();
-	
-			LoadPreference (Preferences.SIDEBAR_POSITION);
-			LoadPreference (Preferences.METADATA_EMBED_IN_IMAGE);
-	
-			pagesetup_menu_item.Activated += HandlePageSetupActivated;
-	
-			toolbar = new Gtk.Toolbar ();
-			toolbar_vbox.PackStart (toolbar);
-	
-			ToolButton import_button = GtkUtil.ToolButtonFromTheme ("gtk-add", Catalog.GetString ("Import"), true);
-			import_button.Clicked += (o, args) => StartImport (null);
-			import_button.TooltipText = Catalog.GetString ("Import new images");
-			toolbar.Insert (import_button, -1);
-		
-			toolbar.Insert (new SeparatorToolItem (), -1);
-	
-			rl_button = GtkUtil.ToolButtonFromTheme ("object-rotate-left", Catalog.GetString ("Rotate Left"), false);
-			rl_button.Clicked += HandleRotate270Command;
-			toolbar.Insert (rl_button, -1);
-	
-			rr_button = GtkUtil.ToolButtonFromTheme ("object-rotate-right", Catalog.GetString ("Rotate Right"), false);
-			rr_button.Clicked += HandleRotate90Command;
-			toolbar.Insert (rr_button, -1);
-	
-			toolbar.Insert (new SeparatorToolItem (), -1);
-	
-			browse_button = new ToggleToolButton ();
-			browse_button.Label = Catalog.GetString ("Browse");
-			browse_button.IconName = "mode-browse";
-			browse_button.IsImportant = true;
-			browse_button.Toggled += HandleToggleViewBrowse;
-			browse_button.TooltipText = Catalog.GetString ("Browse many photos simultaneously");
-			toolbar.Insert (browse_button, -1);
-	
-			edit_button = new ToggleToolButton ();
-			edit_button.Label = Catalog.GetString ("Edit Image");
-			edit_button.IconName = "mode-image-edit";
-			edit_button.IsImportant = true;
-			edit_button.Toggled += HandleToggleViewPhoto;
-			edit_button.TooltipText = Catalog.GetString ("View and edit a photo");
-			toolbar.Insert (edit_button, -1);
-	
-			toolbar.Insert (new SeparatorToolItem (), -1);
-	
-			ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), false);
-			fs_button.Clicked += HandleViewFullscreen;
-			fs_button.TooltipText = Catalog.GetString ("View photos fullscreen");
-			toolbar.Insert (fs_button, -1);
-	
-			ToolButton ss_button = GtkUtil.ToolButtonFromTheme ("media-playback-start", Catalog.GetString ("Slideshow"), false);
-			ss_button.Clicked += HandleViewSlideShow;
-			ss_button.TooltipText = Catalog.GetString ("View photos in a slideshow");
-			toolbar.Insert (ss_button, -1);
-	
-			SeparatorToolItem white_space = new SeparatorToolItem ();
-			white_space.Draw = false;
-			white_space.Expand = true;
-			toolbar.Insert (white_space, -1);
-	
-			ToolItem label_item = new ToolItem ();
-			count_label = new Label (String.Empty);
-			label_item.Child = count_label;
-			toolbar.Insert (label_item, -1);
-	
-			display_previous_button = new ToolButton (Stock.GoBack);
-			toolbar.Insert (display_previous_button, -1);
-			display_previous_button.TooltipText = Catalog.GetString ("Previous photo");
-			display_previous_button.Clicked += new EventHandler (HandleDisplayPreviousButtonClicked);
-	
-			display_next_button = new ToolButton (Stock.GoForward);
-			toolbar.Insert (display_next_button, -1);
-			display_next_button.TooltipText = Catalog.GetString ("Next photo");
-			display_next_button.Clicked += new EventHandler (HandleDisplayNextButtonClicked);
-	
-			Sidebar = new Sidebar ();
-			ViewModeChanged += Sidebar.HandleMainWindowViewModeChanged;
-			sidebar_vbox.Add (Sidebar);
-	
-			tag_selection_scrolled = new Gtk.ScrolledWindow ();
-			tag_selection_scrolled.ShadowType = ShadowType.In;
-			
-			tag_selection_widget = new TagSelectionWidget (Database.Tags);
-			tag_selection_scrolled.Add (tag_selection_widget);
-	
-			Sidebar.AppendPage (tag_selection_scrolled, Catalog.GetString ("Tags"), "tag");
-	
-			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);
-	
-			Sidebar.Context = ViewContext.Library;
-	 		
-			Sidebar.CloseRequested += HideSidebar;
-			Sidebar.Show ();
-	
-			InfoBox = new InfoBox ();
-			ViewModeChanged += InfoBox.HandleMainWindowViewModeChanged;
-			InfoBox.VersionChanged += delegate (InfoBox box, IBrowsableItemVersion version) { UpdateForVersionChange (version);};
-			sidebar_vbox.PackEnd (InfoBox, false, false, 0);
-	
-			InfoBox.Context = ViewContext.Library;
-			
-			tag_selection_widget.Selection.Changed += HandleTagSelectionChanged;
-			tag_selection_widget.KeyPressEvent += HandleTagSelectionKeyPress;
-			tag_selection_widget.ButtonPressEvent += HandleTagSelectionButtonPressEvent;
-			tag_selection_widget.PopupMenu += HandleTagSelectionPopupMenu;
-			tag_selection_widget.RowActivated += HandleTagSelectionRowActivated;
-			
-			LoadPreference (Preferences.TAG_ICON_SIZE);
-			
-			try {
-				query = new FSpot.PhotoQuery (Database.Photos);
-			} catch (System.Exception e) {
-				//FIXME assume any exception here is due to a corrupt db and handle that.
-				new RepairDbDialog (e, Database.Repair (), main_window);
-				query = new FSpot.PhotoQuery (Database.Photos);
-			}
-	
-			UpdateStatusLabel ();
-			query.Changed += HandleQueryChanged;
-	
-			Database.Photos.ItemsChanged += HandleDbItemsChanged;
-			Database.Tags.ItemsChanged += HandleTagsChanged;
-			Database.Tags.ItemsAdded += HandleTagsChanged;
-			Database.Tags.ItemsRemoved += HandleTagsChanged;
-	
-			group_selector = new FSpot.GroupSelector ();
-			group_selector.Adaptor = new FSpot.TimeAdaptor (query, Preferences.Get<bool> (Preferences.GROUP_ADAPTOR_ORDER_ASC));
-	
-			group_selector.ShowAll ();
-			
-			if (zoom_scale != null) {
-				zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
-			}
-	
-			view_vbox.PackStart (group_selector, false, false, 0);
-			view_vbox.ReorderChild (group_selector, 0);
-	
-			find_bar = new FindBar (query, tag_selection_widget.Model);
-			view_vbox.PackStart (find_bar, false, false, 0);
-			view_vbox.ReorderChild (find_bar, 1);
-			main_window.KeyPressEvent += HandleKeyPressEvent;
-			
-			query_widget = new FSpot.QueryWidget (query, Database);
-			query_widget.Logic.Changed += HandleQueryLogicChanged;
-			view_vbox.PackStart (query_widget, false, false, 0);
-			view_vbox.ReorderChild (query_widget, 2);
-			
-			MenuItem findByTag = uimanager.GetWidget ("/ui/menubar1/find/find_by_tag") as MenuItem;
-			query_widget.Hidden += delegate (object sender, EventArgs args) {
-				((Gtk.Label)findByTag.Child).TextWithMnemonic = Catalog.GetString ("Show _Find Bar");
-			};
-			query_widget.Shown += delegate (object sender, EventArgs args) {
-				((Gtk.Label)findByTag.Child).TextWithMnemonic = Catalog.GetString ("Hide _Find Bar");
-			};
-	
-			icon_view = new QueryView (query);
-			icon_view.ZoomChanged += HandleZoomChanged;
-			LoadPreference (Preferences.ZOOM);
-			LoadPreference (Preferences.SHOW_TAGS);
-			LoadPreference (Preferences.SHOW_DATES);
-			LoadPreference (Preferences.SHOW_RATINGS);
-			icon_view_scrolled.Add (icon_view);
-			icon_view.DoubleClicked += HandleDoubleClicked;
-			icon_view.Vadjustment.ValueChanged += HandleIconViewScroll;
-			icon_view.GrabFocus ();
-	
-			new FSpot.PreviewPopup (icon_view);
-	
-			icon_view.DragBegin += HandleIconViewDragBegin;
-			icon_view.DragEnd += HandleIconViewDragEnd;
-			icon_view.DragDataGet += HandleIconViewDragDataGet;
-			icon_view.DragMotion += HandleIconViewDragMotion;
-			icon_view.DragDrop += HandleIconViewDragDrop;
-			// StartDrag is fired by IconView
-			icon_view.StartDrag += HandleIconViewStartDrag;
-	
-			TagMenu tag_menu = new TagMenu (null, Database.Tags);
-			tag_menu.NewTagHandler += delegate { HandleCreateTagAndAttach (this, null); };
-			tag_menu.TagSelected += HandleAttachTagMenuSelected;
-			tag_menu.Populate();
-			(uimanager.GetWidget("/ui/menubar1/edit2/attach_tag") as MenuItem).Submenu = tag_menu;
-			
-			PhotoTagMenu pmenu = new PhotoTagMenu ();
-			pmenu.TagSelected += HandleRemoveTagMenuSelected;
-			(uimanager.GetWidget("/ui/menubar1/edit2/remove_tag") as MenuItem).Submenu = pmenu;
-			
-			Gtk.Drag.DestSet (icon_view, DestDefaults.All, icon_dest_target_table, 
-					  DragAction.Copy | DragAction.Move); 
-	
-			icon_view.DragDataReceived += HandleIconViewDragDataReceived;
-			icon_view.KeyPressEvent += HandleIconViewKeyPressEvent;
-	
-			photo_view = new PhotoView (query);
-			photo_box.Add (photo_view);
-	
-			photo_view.DoubleClicked += HandleDoubleClicked;
-			photo_view.KeyPressEvent += HandlePhotoViewKeyPressEvent;
-			photo_view.UpdateStarted += HandlePhotoViewUpdateStarted;
-			photo_view.UpdateFinished += HandlePhotoViewUpdateFinished;
-	
-			photo_view.View.ZoomChanged += HandleZoomChanged;
-	
-			// Tag typing: focus the tag entry if the user starts typing a tag
-			icon_view.KeyPressEvent += HandlePossibleTagTyping;
-			photo_view.KeyPressEvent += HandlePossibleTagTyping;
-			tag_entry = new TagEntry (Database.Tags);
-			tag_entry.KeyPressEvent += HandleTagEntryKeyPressEvent;
-			tag_entry.TagsAttached += HandleTagEntryTagsAttached;
-			tag_entry.TagsRemoved += HandleTagEntryRemoveTags;
-			tag_entry.Activated += HandleTagEntryActivate;
-			tag_entry_container.Add (tag_entry);
-	
-			Gtk.Drag.DestSet (photo_view, DestDefaults.All, tag_target_table, 
-					  DragAction.Copy | DragAction.Move); 
-	
-			photo_view.DragMotion += HandlePhotoViewDragMotion;
-			photo_view.DragDrop += HandlePhotoViewDragDrop;
-			photo_view.DragDataReceived += HandlePhotoViewDragDataReceived;
-	
-			view_notebook.SwitchPage += HandleViewNotebookSwitchPage;
-			group_selector.Adaptor.GlassSet += HandleAdaptorGlassSet;
-			group_selector.Adaptor.Changed += HandleAdaptorChanged;
-			LoadPreference (Preferences.GROUP_ADAPTOR_ORDER_ASC);
-			LoadPreference (Preferences.FILMSTRIP_ORIENTATION);
-	
-			Selection = new MainSelection (this);
-			Selection.Changed += HandleSelectionChanged;
-			Selection.ItemsChanged += HandleSelectionItemsChanged;
-			Selection.Changed += Sidebar.HandleSelectionChanged;
-			Selection.ItemsChanged += Sidebar.HandleSelectionItemsChanged;
-	
-			Mono.Addins.AddinManager.ExtensionChanged += PopulateExtendableMenus;
-			PopulateExtendableMenus (null, null);
-	
-			UpdateMenus ();
-	
-			main_window.ShowAll ();
-	
-			tagbar.Hide ();
-			find_bar.Hide ();
-	
-			UpdateFindByTagMenu ();
-	
-			LoadPreference (Preferences.SHOW_TOOLBAR);
-			LoadPreference (Preferences.SHOW_SIDEBAR);
-			LoadPreference (Preferences.SHOW_TIMELINE);
-			LoadPreference (Preferences.SHOW_FILMSTRIP);
-	
-			LoadPreference (Preferences.GNOME_MAILTO_ENABLED);
-			
-			Preferences.SettingChanged += OnPreferencesChanged;
-	
-			main_window.DeleteEvent += HandleDeleteEvent;
-	
-			// When the icon_view is loaded, set it's initial scroll position
-			icon_view.SizeAllocated += HandleIconViewReady;
-	
-			export.Activated += HandleExportActivated;
-			UpdateToolbar ();
-	
-			(uimanager.GetWidget("/ui/menubar1/file1/close1") as MenuItem).Hide ();
-
-	
-			Banshee.Kernel.Scheduler.Resume ();
-		}
-	
-		private void HandleDisplayNextButtonClicked (object sender, EventArgs args)
-		{
-			PhotoView.View.Item.MoveNext ();
-		}
-	
-		private void HandleDisplayPreviousButtonClicked (object sender, EventArgs args)
-		{
-			PhotoView.View.Item.MovePrevious ();
-		}
-	
-		private void OnSidebarExtensionChanged (object s, ExtensionNodeEventArgs args) {
-			// FIXME: No sidebar page removal yet!
-			if (args.Change == ExtensionChange.Add)
-				Sidebar.AppendPage ((args.ExtensionNode as SidebarPageNode).GetPage ());
-		}
-	
-		private Photo CurrentPhoto {
-			get {
-				int active = ActiveIndex ();
-				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 () 
-		{
-			if (Selection.Count == 1)
-				return SelectedIds() [0];
-			else
-				return PHOTO_IDX_NONE;
-		}
-	
-		// Switching mode.
-		public enum ModeType {
-			IconView,
-			PhotoView
-		};
-	
-		public event EventHandler ViewModeChanged;
-	
-		public void SetViewMode (ModeType value)
-		{
-			if (ViewMode == value)
-				return;
-	
-			ViewMode = value;
-			switch (ViewMode) {
-			case ModeType.IconView:
-				if (view_notebook.CurrentPage != 0)
-					view_notebook.CurrentPage = 0;
-	
-				display_timeline.Sensitive = true;
-				display_filmstrip.Sensitive = false;
-				group_selector.Visible = display_timeline.Active;
-	
-				if (photo_view.View.Loupe != null)
-					loupe_menu_item.Active = false;
-				JumpTo (photo_view.Item.Index);
-				zoom_scale.Value = icon_view.Zoom;
-				break;
-			case ModeType.PhotoView:
-				if (view_notebook.CurrentPage != 1)
-					view_notebook.CurrentPage = 1;
-	
-				display_timeline.Sensitive = false;
-				display_filmstrip.Sensitive = true;
-				group_selector.Visible = false;
-				
-				JumpTo (icon_view.FocusCell);
-				zoom_scale.Value = photo_view.NormalizedZoom;
-	
-				photo_view.View.GrabFocus();
-				break;
-			}
-			Selection.MarkChanged ();
-			UpdateToolbar ();
-			if (ViewModeChanged != null) 
-				ViewModeChanged (this, null);
-		}
-		
-		void UpdateToolbar ()
-		{
-			if (browse_button != null) {
-				bool state = ViewMode == ModeType.IconView;
-				
-				if (browse_button.Active != state)
-					browse_button.Active = state;
-			}
-	
-			if (edit_button != null) {
-				bool state = ViewMode == ModeType.PhotoView;
-				
-				if (edit_button.Active != state)
-					edit_button.Active = state;
-			}
-	
-			if (ViewMode == ModeType.PhotoView) {
-				display_previous_button.Visible = true;
-				display_next_button.Visible = true;
-				count_label.Visible = true;
-	
-				bool valid = photo_view.View.Item.IsValid;
-				bool prev = valid && photo_view.View.Item.Index > 0;
-				bool next = valid && photo_view.View.Item.Index < query.Count - 1;
-	
-				display_previous_button.Sensitive = prev;
-				display_next_button.Sensitive = next;
-	
-				if (Query == null)
-					count_label.Text = String.Empty;
-				else
-					// Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-					count_label.Text = String.Format (Catalog.GetString ("{0} of {1}"), Query.Count == 0 ? 0 : photo_view.View.Item.Index + 1, Query.Count == 0 ? 0 : Query.Count);
-			} else {
-				display_previous_button.Visible = false;
-				display_next_button.Visible = false;
-				count_label.Visible = false;
-			}
-	
-		}
-	
-		private void HandleExportActivated (object o, EventArgs e)
-		{
-			FSpot.Extensions.ExportMenuItemNode.SelectedImages = delegate () {return new PhotoList (SelectedPhotos ()); };
-		}
-	
-		private void HandleDbItemsChanged (object sender, DbItemEventArgs<Photo> args)
-		{
-			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)
-				query.RequestReload ();
-		}
-	
-		private void HandleTagsChanged (object sender, DbItemEventArgs<Tag> args)
-		{
-			icon_view.QueueDraw ();
-			UpdateTagEntryFromSelection ();	
-		}
-	
-		void HandleViewNotebookSwitchPage (object sender, SwitchPageArgs args)
-		{
-			switch (view_notebook.CurrentPage) {
-			case 0:
-				SetViewMode (ModeType.IconView);
-				break;
-			case 1:
-				SetViewMode (ModeType.PhotoView);
-				break;
-			}
-		}
-	
-		private int [] SelectedIds () {
-			int [] ids = new int [0];
-	
-			if (fsview != null && fsview.View.Item.IsValid)
-				ids = new int [] { fsview.View.Item.Index };
-			else {
-				switch (ViewMode) {
-				case ModeType.IconView:
-					ids = icon_view.Selection.Ids;
-					break;
-				default:
-				case ModeType.PhotoView:
-					if (photo_view.Item.IsValid)
-						ids = new int [] { photo_view.Item.Index };
-					break;
-				}
-			}
-	
-			return ids;
-		}
-	
-		public class MainSelection : IBrowsableCollection {
-			MainWindow win;
-	
-			public MainSelection (MainWindow win)
-			{
-				this.win = win;
-				win.icon_view.Selection.Changed += HandleSelectionChanged;
-				win.icon_view.Selection.ItemsChanged += HandleSelectionItemsChanged;
-				win.photo_view.PhotoChanged += HandlePhotoChanged;
-				win.query.ItemsChanged += HandleQueryItemsChanged;
-			}
-			
-			public int Count {
-				get {
-					switch (win.ViewMode) {
-					case ModeType.PhotoView:
-						return win.photo_view.Item.IsValid ? 1 : 0;
-					case ModeType.IconView:
-						return win.icon_view.Selection.Count;
-					}
-					return 0;
-				}
-			}
-	
-			public int IndexOf (IBrowsableItem item)
-			{
-				switch (win.ViewMode) {
-				case ModeType.PhotoView:
-					return item == win.photo_view.Item.Current ? 0 : -1;
-				case ModeType.IconView:
-					return win.icon_view.Selection.IndexOf (item);
-				}
-				return -1;
-			}
-			
-			public bool Contains (IBrowsableItem item)
-			{
-				switch (win.ViewMode) {
-				case ModeType.PhotoView:
-					return item == win.photo_view.Item.Current ? true : false;
-				case ModeType.IconView:
-					return win.icon_view.Selection.Contains (item);
-				}
-				return false;
-			}
-			
-			public void MarkChanged ()
-			{
-				if (Changed != null)
-					Changed (this);
-			}
-	
-			public void MarkChanged (int index, IBrowsableItemChanges changes)
-			{
-				throw new System.NotImplementedException ("I didn't think you'd find me");
-			}
-			
-			public IBrowsableItem this [int index] {
-				get {
-					switch (win.ViewMode) {
-					case ModeType.PhotoView:
-						if (index == 0)
-							return win.photo_view.Item.Current;
-						break;
-					case ModeType.IconView:
-						return win.icon_view.Selection [index];
-					}
-					throw new ArgumentOutOfRangeException ();
-				}
-			}
-			 
-			public IBrowsableItem [] Items {
-				get {
-					switch (win.ViewMode) {
-					case ModeType.PhotoView:
-						if (win.photo_view.Item.IsValid)
-							return new IBrowsableItem [] {win.photo_view.Item.Current};
-	
-						break;
-					case ModeType.IconView:
-						return win.icon_view.Selection.Items;
-					}
-					return new IBrowsableItem [0];
-				}
-			}
-	
-			private void HandleQueryItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args)
-			{
-				// FIXME for now we only listen to changes directly from the query
-				// when we are in PhotoView mode because we presume that we'll get
-				// proper notification from the icon view selection in icon view mode
-				if (win.ViewMode != ModeType.PhotoView || ItemsChanged == null) 
-					return;
-	
-				foreach (int item in args.Items) {
-					if (win.photo_view.Item.Index == item ) {
-						ItemsChanged (this, new BrowsableEventArgs (item, args.Changes));
-						break;
-					}
-				}
-			}
-	
-			private void HandlePhotoChanged (PhotoView sender)
-			{
-				if (win.ViewMode == ModeType.PhotoView && Changed != null)
-					Changed (this);
-			}
-	
-			public void HandleSelectionChanged (IBrowsableCollection collection)
-			{
-				if (win.ViewMode == ModeType.IconView && Changed != null)
-					Changed (this);
-	
-	
-			}
-	
-			private void HandleSelectionItemsChanged (IBrowsableCollection collection,  BrowsableEventArgs args)
-			{
-				if (win.ViewMode == ModeType.IconView && ItemsChanged != null)
-					ItemsChanged (this, args);
-			}
-	
-			public event IBrowsableCollectionChangedHandler Changed;
-			public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
-		}
-	
-		private void HandleSelectionChanged (IBrowsableCollection collection)
-		{
-			UpdateMenus ();
-			UpdateTagEntryFromSelection ();
-			UpdateStatusLabel ();
-			UpdateToolbar ();
-	
-			InfoBox.Photos = SelectedPhotos ();
-		}
-	
-		private void HandleSelectionItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args)
-		{
-			UpdateMenus ();
-			UpdateTagEntryFromSelection ();
-			photo_view.UpdateTagView ();
-			InfoBox.Photos = SelectedPhotos ();
-		}
-	
-	
-		//
-		// Selection Interface
-		//
-	
-		private Photo [] SelectedPhotos (int [] selected_ids)
-		{
-			Photo [] photo_list = new Photo [selected_ids.Length];
-		
-			int i = 0;
-			foreach (int num in selected_ids)
-				photo_list [i ++] = query [num] as Photo;
-			
-			return photo_list;
-		}
-	
-		public Photo [] SelectedPhotos () 
-		{
-			return SelectedPhotos (SelectedIds ());
-		}
-	
-		public PhotoQuery Query {
-			get { return query; }
-		}
-	
-		//
-		// Commands
-		//
-	
-		private void RotateSelectedPictures (Gtk.Window parent, RotateDirection direction)
-		{
-			RotateCommand command = new RotateCommand (parent);
-			
-			int [] selected_ids = SelectedIds ();
-			if (command.Execute (direction, SelectedPhotos (selected_ids)))
-				query.MarkChanged (selected_ids, InvalidateData.Instance);
-		}
-	
-		//
-		// Tag Selection Drag Handlers
-		//
-		
-		public void AddTagExtended (int [] nums, Tag [] tags)
-		{
-			foreach (int num in nums)
-				(query[num] as Photo).AddTag (tags);
-			query.Commit (nums);
-	
-			foreach (Tag t in tags) {
-				if (t.Icon != null || t.IconWasCleared)
-					continue;
-				// FIXME this needs a lot more work.
-				Pixbuf icon = null;
-				try {
-					Pixbuf tmp = FSpot.PhotoLoader.LoadAtMaxSize (query [nums[0]], 128, 128);
-					icon = PixbufUtils.TagIconFromPixbuf (tmp);
-					tmp.Dispose ();
-				} catch {
-					icon = null;
-				}
-				
-				t.Icon = icon;
-				Database.Tags.Commit (t);
-			}
-		}
-		
-		public void SetFolderQuery (IEnumerable<SafeUri> uri_list)
-		{
-			ShowQueryWidget ();
-			query_widget.SetFolders (uri_list);
-		}
-		
-		public void RemoveTags (int [] nums, Tag [] tags)
-		{
-			foreach (int num in nums)
-				(query[num] as Photo).RemoveTag (tags);
-			query.Commit (nums);
-		}
-	
-		void HandleTagSelectionButtonPressEvent (object sender, ButtonPressEventArgs args)
-		{
-			if (args.Event.Button == 3) {
-				TagPopup popup = new TagPopup ();
-				popup.Activate (args.Event, tag_selection_widget.TagAtPosition (args.Event.X, args.Event.Y),
-				tag_selection_widget.TagHighlight);
-				args.RetVal = true;
-			}
-		}
-	
-		void HandleTagSelectionPopupMenu (object sender, PopupMenuArgs args)
-		{
-			TagPopup popup = new TagPopup ();
-			popup.Activate (null, null, tag_selection_widget.TagHighlight);
-			args.RetVal = true;
-		}
-	
-		void HandleTagSelectionRowActivated (object sender, RowActivatedArgs args)
-	 	{
-	 		ShowQueryWidget ();
-	 		query_widget.Include (new Tag [] {tag_selection_widget.TagByPath (args.Path)});
-		}
-	
-		void JumpTo (int index)
-		{
-			switch (ViewMode) {
-			case ModeType.PhotoView:
-				photo_view.Item.Index = index;
-				break;
-			case ModeType.IconView:
-				icon_view.ScrollTo (index);
-				icon_view.Throb (index);
-				break;
-			}
-		}
-	
-		void HandleAdaptorGlassSet (FSpot.GroupAdaptor sender, int index)
-		{
-			JumpTo (index);
-		}
-	
-		void HandleAdaptorChanged (FSpot.GroupAdaptor sender)
-		{
-			UpdateGlass ();
-		}
-	
-		/*
-		 * Keep the glass temporal slider in sync with the user's scrolling in the icon_view
-		 */
-		private void UpdateGlass ()
-		{
-			// If people cant see the timeline don't update it.
-			if (! display_timeline.Active)
-				return;
-	
-			int cell_num = icon_view.TopLeftVisibleCell();
-			if (cell_num == -1 /*|| cell_num == lastTopLeftCell*/)
-				return;
-	
-			FSpot.IBrowsableItem photo = icon_view.Collection [cell_num];
-	#if false
-			group_selector.Adaptor.GlassSet -= HandleAdaptorGlassSet;
-			group_selector.Adaptor.SetGlass (group_selector.Adaptor.IndexFromPhoto (photo));
-			group_selector.Adaptor.GlassSet = HandleAdaptorGlassSet;
-	#else
-			/* 
-			 * FIXME this is a lame hack to get around a delegate chain.  This should 
-			 * actually operate directly on the adaptor not on the selector but I don't have 
-			 * time to fix it right now.
-			 */
-			if (!group_selector.GlassUpdating) {
-				group_selector.SetPosition (group_selector.Adaptor.IndexFromPhoto (photo));
-			}
-	#endif
-		}
-		
-		void HandleIconViewScroll (object sender, EventArgs args)
-		{
-			UpdateGlass ();
-		}
-	
-		void HandleIconViewReady (object sender, EventArgs args)
-		{
-			LoadPreference (Preferences.GLASS_POSITION);
-	
-			// We only want to set the position the first time
-			// the icon_view is ready (eg on startup)
-			icon_view.SizeAllocated -= HandleIconViewReady;
-		}
-	
-		//
-		// IconView Drag Handlers
-		//
-
-		public void HandleIconViewStartDrag (object sender, StartDragArgs args)
-		{
-			Gtk.Drag.Begin (icon_view, new TargetList (icon_source_target_table),
-					DragAction.Copy | DragAction.Move, (int) args.Button, args.Event);
-		}
-	
-		public void HandleIconViewDragBegin (object sender, DragBeginArgs args)
-		{
-			Photo [] photos = SelectedPhotos ();
-			
-			if (photos.Length > 0) {
-				int len = Math.Min (photos.Length, 4);
-				int size = 48;
-				int border  = 2;
-				int csize = size/2 + len * size / 2 + 2 * border ;
-				
-				Pixbuf container = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, csize, csize);
-				container.Fill (0x00000000);
-	
-				bool use_icon = false;;
-				while (len-- > 0) {
-					FSpot.PixbufCache.CacheEntry entry = icon_view.Cache.Lookup (photos [len].DefaultVersion.Uri);
-	
-					Pixbuf thumbnail = null;
-					if (entry != null) {
-						Cms.Profile screen_profile;
-						if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
-							thumbnail = entry.Pixbuf.Copy ();
-							FSpot.ColorManagement.ApplyProfile (thumbnail, screen_profile);
-						} else
-							thumbnail = entry.ShallowCopyPixbuf ();
-					}
-					
-					if (thumbnail != null) {
-						Pixbuf small = PixbufUtils.ScaleToMaxSize (thumbnail, size, size);				
-	
-						int x = border + len * (size/2) + (size - small.Width)/2;
-						int y = border + len * (size/2) + (size - small.Height)/2;
-						Pixbuf box = new Pixbuf (container, x - border, y - border, 
-									 small.Width + 2 * border, small.Height + 2 * border);
-	
-						box.Fill (0x000000ff);
-						small.CopyArea (0, 0, small.Width, small.Height, container, x, y); 
-						
-						thumbnail.Dispose ();
-						small.Dispose ();
-						use_icon = true;
-					}
-				}
-				if (use_icon)
-					Gtk.Drag.SetIconPixbuf (args.Context, container, 0, 0);
-				container.Dispose ();
-			}
-		}
-
-		void HandleIconViewDragEnd (object sender, DragEndArgs args) {
-		}
-	
-		void HandleIconViewDragDataGet (object sender, DragDataGetArgs args)
-		{	
-			if (args.Info == DragDropTargets.UriListEntry.Info) {
-				args.SelectionData.SetUriListData (new UriList (SelectedPhotos ()), args.Context.Targets[0]);
-				return;
-			}
-			
-			if (args.Info == DragDropTargets.PhotoListEntry.Info) {
-				args.SelectionData.SetPhotosData (SelectedPhotos (), args.Context.Targets[0]);
-				return;
-			}
-			
-			if (args.Info == DragDropTargets.RootWindowEntry.Info) {
-				HandleSetAsBackgroundCommand (null, null);
-				return;
-			}
-		}
-	
-		void HandleIconViewDragDrop (object sender, DragDropArgs args)
-		{
-			args.RetVal = true;
-		}
-	
-		void HandleIconViewDragMotion (object sender, DragMotionArgs args)
-		{
-			Gdk.Drag.Status (args.Context, args.Context.SuggestedAction, args.Time);
-			args.RetVal = true;
-		}
-	
-		public void ImportUriList (UriList list, bool copy) 
-		{
-			var controller = new ImportController ();
-			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;
-			controller.CopyFiles = copy;
-			controller.DuplicateDetect = true;
-			controller.RecurseSubdirectories = true;
-			controller.RemoveOriginals = false;
-
-			var import_window = new ImportDialog (controller, Window);
-			import_window.Show ();
-
-			controller.StartImport ();
-		}
-
-		void HandleImportCommand (object obj, EventArgs args)
-		{
-			StartImport (null);
-		}
-	
-		public void ImportFile (SafeUri uri)
-		{
-			StartImport (uri);
-		}
-
-		void StartImport (SafeUri uri)
-		{
-			var controller = new ImportController ();
-			controller.StatusEvent += (evnt) => {
-				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 ();
-		}
-	
-		void HandleIconViewDragDataReceived (object sender, DragDataReceivedArgs args)
-		{
-		 	Widget source = Gtk.Drag.GetSourceWidget (args.Context);     
-			
-			if (args.Info == DragDropTargets.TagListEntry.Info) {
-				//
-				// Translate the event args from viewport space to window space,
-				// 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);
-	
-				//Console.WriteLine ("Drop cell = {0} ({1},{2})", item, args.X, args.Y);
-				if (item >= 0) {
-					if (icon_view.Selection.Contains (item))
-						AttachTags (tag_selection_widget.TagHighlight, SelectedIds());
-					else 
-						AttachTags (tag_selection_widget.TagHighlight, new int [] {item});
-				}
-				
-				Gtk.Drag.Finish (args.Context, true, false, args.Time);
-				return;
-			}
-			
-			if (args.Info == DragDropTargets.UriListEntry.Info) {
-	
-				/* 
-				 * If the drop is coming from inside f-spot then we don't want to import 
-				 */
-				if (source != null)
-					return;
-	
-				UriList list = args.SelectionData.GetUriListData (); 
-				ImportUriList (list, (args.Context.Action & Gdk.DragAction.Copy) != 0);
-				
-				Gtk.Drag.Finish (args.Context, true, false, args.Time);
-				return;
-			}
-			
-			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);
-	
-				if (p_item >= 0) {
-					if (icon_view.Selection.Contains (p_item)) //We don't want to reparent ourselves!
-						return;
-					PhotoVersionCommands.Reparent cmd = new PhotoVersionCommands.Reparent ();				
-					Photo[] photos_to_reparent = SelectedPhotos ();
-					// Give feedback to user that something happened, and leave the parent selected after reparenting
-					icon_view.Selection.Add (p_item); 
-					cmd.Execute (Database.Photos, photos_to_reparent, query.Photos [p_item], GetToplevel (null));
-					UpdateQuery ();
-				}
-				Gtk.Drag.Finish (args.Context, true, false, args.Time);
-				return;
-			}
-		}
-	
-		//
-		// IconView event handlers
-		// 
-	
-		void HandleDoubleClicked (object sender, BrowsableEventArgs args)
-		{
-			Widget widget = sender as Widget;
-			if (widget == null)
-				return;
-	
-			switch (ViewMode) {
-			case ModeType.IconView:
-				icon_view.FocusCell = args.Items[0];
-				SetViewMode (ModeType.PhotoView);
-				break;
-			case ModeType.PhotoView:
-				SetViewMode (ModeType.IconView);
-				break;
-			}
-		}
-	
-		public void HandleCommonPhotoCommands (object sender, Gtk.KeyPressEventArgs args) {
-			bool alt = ModifierType.Mod1Mask == (args.Event.State & ModifierType.Mod1Mask);
-			bool shift = ModifierType.ShiftMask == (args.Event.State & ModifierType.ShiftMask);
-	
-			if (args.RetVal == null)
-				args.RetVal = false;
-			
-			switch (args.Event.Key) {
-			case Gdk.Key.Delete:
-				if (shift)
-					HandleDeleteCommand (sender, args);
-				else
-					HandleRemoveCommand (sender, args);
-				break;
-			case Gdk.Key.Key_0:
-			case Gdk.Key.KP_0:
-				if (alt)
-					HandleRatingMenuSelected (0);
-				break;
-			case Gdk.Key.Key_1:
-			case Gdk.Key.KP_1:
-				if (alt)
-					HandleRatingMenuSelected (1);
-				break;
-			case Gdk.Key.Key_2:
-			case Gdk.Key.KP_2:
-				if (alt)
-					HandleRatingMenuSelected (2);
-				break;
-			case Gdk.Key.Key_3:
-			case Gdk.Key.KP_3:
-				if (alt)
-					HandleRatingMenuSelected (3);
-				break;
-			case Gdk.Key.Key_4:
-			case Gdk.Key.KP_4:
-				if (alt)
-					HandleRatingMenuSelected (4);
-				break;
-			case Gdk.Key.Key_5:
-			case Gdk.Key.KP_5:
-				if (alt)
-					HandleRatingMenuSelected (5);
-				break;
-			default:
-				return; //do not set the RetVal to true
-			}
-			args.RetVal = true;
-		}
-	
-		void HandleIconViewKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
-		{
-			HandleCommonPhotoCommands (sender, args);
-			if ((bool)args.RetVal)
-				return;
-	
-			switch (args.Event.Key) {
-			case Gdk.Key.F:
-			case Gdk.Key.f:
-				HandleViewFullscreen (sender, args);
-				args.RetVal = true;
-				break;
-			}
-		}
-	
-		//
-		// FullScreenView event handlers.
-		//
-	
-		void HandleFullScreenViewKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
-		{
-			HandleCommonPhotoCommands (sender, args);
-			if ((bool)args.RetVal)
-				// this will hide any panels again that might have appeared above the fullscreen view
-				fsview.Present ();
-		}
-	
-		//
-		// PhotoView event handlers.
-		//
-	
-		void HandlePhotoViewKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
-		{
-			HandleCommonPhotoCommands (sender, args);
-			if ((bool)args.RetVal)
-				return;
-	
-			switch (args.Event.Key) {
-			case Gdk.Key.F:
-			case Gdk.Key.f:
-				HandleViewFullscreen (sender, args);
-				args.RetVal = true;
-				break;
-			case Gdk.Key.Escape:
-				SetViewMode (ModeType.IconView);
-				args.RetVal = true;
-				break;
-			}
-		}
-	
-		void HandlePhotoViewUpdateStarted (PhotoView sender)
-		{
-			main_window.GdkWindow.Cursor = watch;
-			// FIXME: use gdk_display_flush() when available
-			main_window.GdkWindow.Display.Sync ();
-		}
-	
-		void HandlePhotoViewUpdateFinished (PhotoView sender)
-		{
-			main_window.GdkWindow.Cursor = null;
-			// FIXME: use gdk_display_flush() when available
-			main_window.GdkWindow.Display.Sync ();
-		}
-	
-		//
-		// PhotoView drag handlers.
-		//
-	
-		void HandlePhotoViewDragDrop (object sender, DragDropArgs args)
-		{
-			//Widget source = Gtk.Drag.GetSourceWidget (args.Context);
-	
-			args.RetVal = true;
-		}
-	
-		void HandlePhotoViewDragMotion (object sender, DragMotionArgs args)
-		{
-			//Widget source = Gtk.Drag.GetSourceWidget (args.Context);
-			//Console.WriteLine ("Drag Motion {0}", source == null ? "null" : source.TypeName);
-	
-			Gdk.Drag.Status (args.Context, args.Context.SuggestedAction, args.Time);
-			args.RetVal = true;
-		}
-	
-		void HandlePhotoViewDragDataReceived (object sender, DragDataReceivedArgs args)
-		{
-		 	//Widget source = Gtk.Drag.GetSourceWidget (args.Context);     
-			//Console.WriteLine ("Drag received {0}", source == null ? "null" : source.TypeName);
-	
-			HandleAttachTagCommand (sender, null);
-			
-			Gtk.Drag.Finish (args.Context, true, false, args.Time);
-	
-	 		photo_view.View.GrabFocus();
-		}	
-	
-		//
-		// RatingMenu commands
-		//
-		
-		public void HandleRatingMenuSelected (int r) 
-		{
-			if (ViewMode == ModeType.PhotoView)
-				this.photo_view.UpdateRating(r);
-	
-			Photo p;
-			Database.BeginTransaction ();
-			int [] selected_photos = SelectedIds ();
-			foreach (int num in selected_photos) {
-				p = query [num] as Photo;
-				p.Rating = (uint) r;
-			}
-			query.Commit (selected_photos);
-			Database.CommitTransaction ();
-		}
-	
-		//
-		// TagMenu commands.
-		//
-	
-		public void HandleTagMenuActivate (object sender, EventArgs args)
-		{
-	
-			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 ()); 
-			}
-		}
-	
-		public void HandleAttachTagMenuSelected (Tag t) 
-		{
-			Database.BeginTransaction ();
-			AddTagExtended (SelectedIds (), new Tag [] {t});
-			Database.CommitTransaction ();
-			query_widget.PhotoTagsChanged (new Tag[] {t});
-		}
-		
-		public void HandleRequireTag (object sender, EventArgs args)
-	 	{
-			ShowQueryWidget ();
-			query_widget.Require (tag_selection_widget.TagHighlight);
-	 	}
-	 
-		public void HandleUnRequireTag (object sender, EventArgs args)
-		{
-			query_widget.UnRequire (tag_selection_widget.TagHighlight);
-	 	}
-	
-		public void HandleRemoveTagMenuSelected (Tag t)
-		{
-			Database.BeginTransaction ();
-			RemoveTags (SelectedIds (), new Tag [] {t});
-			Database.CommitTransaction ();
-			query_widget.PhotoTagsChanged (new Tag [] {t});
-		}
-	
-		//
-		// Main menu commands
-		//
-	
-		void HandlePageSetupActivated (object o, EventArgs e)
-		{
-			FSpot.Global.PageSetup = Print.RunPageSetupDialog (this.Window, FSpot.Global.PageSetup, null);
-		}
-		
-		void HandlePrintCommand (object sender, EventArgs e)
-		{
-			FSpot.PrintOperation print = new FSpot.PrintOperation (SelectedPhotos ());
-			print.Run (PrintOperationAction.PrintDialog, null);
-		}
-	
-		public void HandlePreferences (object sender, EventArgs args)
-		{
-			var pref = new PreferenceDialog (GetToplevel (sender));
-			pref.Run ();
-			pref.Destroy ();
-		}
-	
-		public void HandleManageExtensions (object sender, EventArgs args)
-		{
-			Mono.Addins.Gui.AddinManagerWindow.Run (main_window);
-		}
-	
-		void HandleSendMailCommand (object sender, EventArgs args)
-		{
-			//TestDisplay ();
-			new FSpot.SendEmail (new PhotoList (SelectedPhotos ()), Window);
-		}
-	
-		public static void HandleHelp (object sender, EventArgs args)
-		{
-			GtkBeans.Global.ShowUri (App.Instance.Organizer.Window.Screen, "ghelp:f-spot");
-		}
-	
-		public static void HandleAbout (object sender, EventArgs args)
-		{
-			FSpot.UI.Dialog.AboutDialog.ShowUp ();
-		}
-	
-		void HandleTagSizeChange (object sender, EventArgs args)
-		{
-			RadioAction choice = sender as RadioAction;
-		
-			//Get this callback twice. Once for the active going menuitem,
-			//once for the inactive leaving one. Ignore the inactive.
-			if (!choice.Active)
-				return;
-	
-			int old_size = TagsIconSize;
-			
-			if (choice == tag_icon_hidden) {
-				TagsIconSize = (int) Tag.IconSize.Hidden;
-			} else if (choice == tag_icon_small) {
-				TagsIconSize = (int) Tag.IconSize.Small;
-			} else if (choice == tag_icon_medium) {
-				TagsIconSize = (int) Tag.IconSize.Medium;
-			} else if (choice == tag_icon_large) {
-				TagsIconSize = (int) Tag.IconSize.Large;
-			} else {
-				return;
-			}
-			
-			if (old_size != TagsIconSize) {
-				tag_selection_widget.ColumnsAutosize();
-				if (photo_view != null)
-					photo_view.UpdateTagView ();
-				Preferences.Set (Preferences.TAG_ICON_SIZE, TagsIconSize);
-			}
-		}
-	
-		public void HandleFilmstripHorizontal (object sender, EventArgs args)
-		{
-			if (photo_view.FilmstripOrientation == Orientation.Horizontal)
-				return;
-			(sender as Gtk.CheckMenuItem).Active = false;
-			photo_view.PlaceFilmstrip (Orientation.Horizontal);
-		}
-	
-		public void HandleFilmstripVertical (object sender, EventArgs args)
-		{
-			if (photo_view.FilmstripOrientation == Orientation.Vertical)
-				return;
-			(sender as Gtk.CheckMenuItem).Active = false;
-			photo_view.PlaceFilmstrip (Orientation.Vertical);
-		}
-	
-		public void HandleReverseOrder (object sender, EventArgs args)
-		{
-			ToggleAction item = sender as ToggleAction;
-	
-			if (group_selector.Adaptor.OrderAscending == item.Active)
-				return;
-			
-			group_selector.Adaptor.OrderAscending = item.Active;
-			query.TimeOrderAsc = item.Active;
-	
-			// FIXME this is blah...we need UIManager love here
-			if (item != reverse_order)
-				reverse_order.Active = item.Active;
-			
-			//update the selection in the timeline
-			if ( query.Range != null && group_selector.Adaptor is TimeAdaptor) {
-				group_selector.SetLimitsToDates(query.Range.Start, query.Range.End);
-				
-			}
-	
-		}
-	
-		// Called when the user clicks the X button	
-		void HandleDeleteEvent (object sender, DeleteEventArgs args)
-		{
-			Close();
-			args.RetVal = true;
-		}
-	
-		void HandleCloseCommand (object sender, EventArgs args)
-		{
-			Close();
-		}
-		
-		public void Close ()
-		{
-			int x, y, width, height;
-			main_window.GetPosition (out x, out y);
-			main_window.GetSize (out width, out height);
-	
-			bool maximized = ((main_window.GdkWindow.State & Gdk.WindowState.Maximized) > 0);
-			Preferences.Set (Preferences.MAIN_WINDOW_MAXIMIZED, maximized);
-	
-			if (!maximized) {
-				Preferences.Set (Preferences.MAIN_WINDOW_X,		x);
-				Preferences.Set (Preferences.MAIN_WINDOW_Y,		y);
-				Preferences.Set (Preferences.MAIN_WINDOW_WIDTH,		width);
-				Preferences.Set (Preferences.MAIN_WINDOW_HEIGHT,	height);
-			}
-	
-			Preferences.Set (Preferences.SHOW_TOOLBAR,		toolbar.Visible);
-			Preferences.Set (Preferences.SHOW_SIDEBAR,		info_vbox.Visible);
-			Preferences.Set (Preferences.SHOW_TIMELINE,		display_timeline.Active);
-			Preferences.Set (Preferences.SHOW_FILMSTRIP,		display_filmstrip.Active);
-			Preferences.Set (Preferences.SHOW_TAGS,			icon_view.DisplayTags);
-			Preferences.Set (Preferences.SHOW_DATES,		icon_view.DisplayDates);
-			Preferences.Set (Preferences.SHOW_RATINGS,		icon_view.DisplayRatings);
-	
-			Preferences.Set (Preferences.GROUP_ADAPTOR_ORDER_ASC,   group_selector.Adaptor.OrderAscending);
-			Preferences.Set (Preferences.GLASS_POSITION,		group_selector.GlassPosition);
-			
-			Preferences.Set (Preferences.SIDEBAR_POSITION,		main_hpaned.Position);
-			Preferences.Set (Preferences.ZOOM,			icon_view.Zoom);
-	
-			tag_selection_widget.SaveExpandDefaults ();
-	
-			this.Window.Destroy ();
-		}
-		
-		void HandleCreateVersionCommand (object obj, EventArgs args)
-		{
-			PhotoVersionCommands.Create cmd = new PhotoVersionCommands.Create ();
-			cmd.Execute (Database.Photos, CurrentPhoto, GetToplevel (null));
-		}
-	
-		void HandleDeleteVersionCommand (object obj, EventArgs args)
-		{
-			PhotoVersionCommands.Delete cmd = new PhotoVersionCommands.Delete ();
-			cmd.Execute (Database.Photos, CurrentPhoto, GetToplevel (null));
-		}
-		
-		void HandleDetachVersionCommand (object obj, EventArgs args)
-		{
-			PhotoVersionCommands.Detach cmd = new PhotoVersionCommands.Detach ();
-			cmd.Execute (Database.Photos, CurrentPhoto, GetToplevel (null));
-			UpdateQuery ();
-		}
-	
-		void HandleRenameVersionCommand (object obj, EventArgs args)
-		{
-			PhotoVersionCommands.Rename cmd = new PhotoVersionCommands.Rename ();
-			cmd.Execute (Database.Photos, CurrentPhoto, main_window);
-		}
-		
-		public void HandleCreateTagAndAttach (object sender, EventArgs args)
-		{
-			Tag new_tag = CreateTag (sender, args);
-	
-			if (new_tag != null)
-				HandleAttachTagMenuSelected (new_tag);
-		}
-	
-		public void HandleCreateNewCategoryCommand (object sender, EventArgs args)
-		{
-			Tag new_tag = CreateTag (sender, args);
-			
-			if (new_tag != null) {
-				tag_selection_widget.ScrollTo (new_tag);
-				tag_selection_widget.TagHighlight = new Tag [] {new_tag};
-			}
-		}
-	
-		public Tag CreateTag (object sender, EventArgs args)
-		{
-			TagCommands.Create command = new TagCommands.Create (Database.Tags, GetToplevel (sender));
-			return command.Execute (TagCommands.TagType.Category, tag_selection_widget.TagHighlight);
-		}
-	
-		public void HandleAttachTagCommand (object obj, EventArgs args)
-		{
-			AttachTags (tag_selection_widget.TagHighlight, SelectedIds ());
-		}
-	
-		void AttachTags (Tag [] tags, int [] ids) 
-		{
-			Database.BeginTransaction ();
-			AddTagExtended (ids, tags);
-			Database.CommitTransaction ();
-			query_widget.PhotoTagsChanged (tags);
-		}
-	
-		public void HandleRemoveTagCommand (object obj, EventArgs args)
-		{
-			Tag [] tags = this.tag_selection_widget.TagHighlight;
-	
-			Database.BeginTransaction ();
-			RemoveTags (SelectedIds (), tags);
-			Database.CommitTransaction ();
-			query_widget.PhotoTagsChanged (tags);
-		}
-	
-		public void HandleEditSelectedTag (object sender, EventArgs ea)
-		{
-			Tag [] tags = this.tag_selection_widget.TagHighlight;
-			if (tags.Length != 1)
-				return;
-	
-			HandleEditSelectedTagWithTag (tags [0]);
-		}
-	
-		public void HandleEditSelectedTagWithTag (Tag tag)
-		{
-			if (tag == null)
-				return;
-			
-			EditTagDialog dialog = new EditTagDialog (Database, tag, main_window);
-			if ((ResponseType)dialog.Run () == ResponseType.Ok) {
-				bool name_changed = false;
-				try {
-					if (tag.Name != dialog.TagName) {
-						tag.Name = dialog.TagName;
-						name_changed = true;
-					}
-					tag.Category = dialog.TagCategory;
-					Database.Tags.Commit (tag, name_changed);
-				} catch (Exception ex) {
-					Log.Exception (ex);
-				}
-			}
-	
-			dialog.Destroy ();
-		}
-	
-		public void HandleMergeTagsCommand (object obj, EventArgs args)
-		{
-			Tag [] tags = this.tag_selection_widget.TagHighlight;
-			if (tags.Length < 2)
-				return;
-			
-			// Translators, The singular case will never happen here.
-			string header = Catalog.GetPluralString ("Merge the selected tag",
-									    "Merge the {0} selected tags?", tags.Length);
-			header = String.Format (header, tags.Length);
-	
-			// If a tag with children tags is selected for merging, we
-			// should also merge its children..
-			List<Tag> all_tags = new List<Tag> (tags.Length);
-			foreach (Tag tag in tags) {
-				if (! all_tags.Contains (tag))
-					all_tags.Add (tag);
-				else
-					continue;
-	
-				if (! (tag is Category))
-					continue;
-	
-				(tag as Category).AddDescendentsTo (all_tags);
-			}
-	
-			// debug..
-			tags = all_tags.ToArray ();
-			System.Array.Sort (tags, new TagRemoveComparer ());
-	
-			foreach (Tag tag in tags) {
-				Log.Debug ("tag: {0}", tag.Name);
-			}
-	
-			string msg = Catalog.GetString("This operation will merge the selected tags and any sub-tags into a single tag.");
-	
-			string ok_caption = Catalog.GetString ("_Merge Tags");
-			
-			if (ResponseType.Ok != HigMessageDialog.RunHigConfirmation(main_window, 
-										   DialogFlags.DestroyWithParent, 
-										   MessageType.Warning, 
-										   header, 
-										   msg, 
-										   ok_caption))
-				return;
-			
-			// The surviving tag is the last tag, as it is definitely not a child of any other the
-			// other tags.  removetags will contain the tags to be merged.
-			Tag survivor = tags[tags.Length - 1];
-			
-			Tag [] removetags = new Tag [tags.Length - 1];
-			Array.Copy (tags, 0, removetags, 0, tags.Length - 1);
-	
-			// Add the surviving tag to all the photos with the other tags
-			Photo [] photos = Database.Photos.Query (removetags);
-			foreach (Photo p in photos) {
-				p.AddTag (survivor);
-			}
-	
-			// Remove the defunct tags, which removes them from the photos, commits
-			// the photos, and removes the tags from the TagStore
-			Database.BeginTransaction ();
-			Database.Photos.Remove (removetags);
-			Database.CommitTransaction ();
-	
-			HandleEditSelectedTagWithTag (survivor);
-		}
-	
-		void HandleAdjustTime (object sender, EventArgs args)
-		{
-			PhotoList list = new PhotoList (Selection.Items);
-			list.Sort (new IBrowsableItemComparer.CompareDateName ());
-			(new AdjustTimeDialog (Database, list)).Run ();
-		}
-	
-		public void HideLoupe ()
-		{
-			loupe_menu_item.Active = false;
-		}
-	
-		void HandleLoupe (object sender, EventArgs args)
-		{
-			// Don't steal characters from any text entries
-			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
-				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
-				return;
-			}
-			
-			photo_view.View.ShowHideLoupe ();
-		}
-	
-		void HandleSharpen (object sender, EventArgs args)
-		{
-			// Don't steal characters from any text entries
-			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
-				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
-				return;
-			}
-			
-			photo_view.View.ShowSharpener ();
-		}
-	
-		void HandleDisplayToolbar (object sender, EventArgs args)
-		{
-			if (display_toolbar.Active)
-				toolbar.Show ();
-			else
-				toolbar.Hide ();
-		}
-	
-		void HandleDisplayTags (object sender, EventArgs args)
-		{
-			icon_view.DisplayTags = !icon_view.DisplayTags;
-		}
-		
-		void HandleDisplayDates (object sender, EventArgs args)
-		{
-			// Peg the icon_view's value to the MenuItem's active state,
-			// as icon_view.DisplayDates's get won't always be equal to it's true value
-			// because of logic to hide dates when zoomed way out.
-			icon_view.DisplayDates = display_dates_menu_item.Active;
-		}
-	
-		void HandleDisplayRatings (object sender, EventArgs args)
-		{
-			icon_view.DisplayRatings = display_ratings_menu_item.Active;
-		}
-	
-		void HandleDisplayGroupSelector (object sender, EventArgs args)
-		{
-			if (group_selector.Visible)
-				group_selector.Hide ();
-			else
-				group_selector.Show ();
-		}
-	
-		void HandleDisplayFilmstrip (object sender, EventArgs args)
-		{
-			photo_view.FilmStripVisibility = display_filmstrip.Active;
-			if (ViewMode == ModeType.PhotoView)
-				photo_view.QueueDraw ();
-		}
-	
-		void HandleDisplayInfoSidebar (object sender, EventArgs args)
-		{
-			if (info_vbox.Visible)
-				info_vbox.Hide ();
-			else
-				info_vbox.Show ();
-		}
-	
-		void HandleViewSlideShow (object sender, EventArgs args)
-		{
-			HandleViewFullscreen (sender, args);
-			fsview.PlayPause ();
-		}
-	
-		void HandleToggleViewBrowse (object sender, EventArgs args)
-		{
-			if (ViewMode == ModeType.IconView)
-				browse_button.Active = true;
-			else if (browse_button.Active)
-				SetViewMode (ModeType.IconView);
-		}
-	
-		void HandleToggleViewPhoto (object sender, EventArgs args)
-		{
-			if (ViewMode == ModeType.PhotoView)
-				edit_button.Active = true;
-			else if (edit_button.Active)
-				SetViewMode (ModeType.PhotoView);
-		}
-	
-		void HandleViewBrowse (object sender, EventArgs args)
-		{
-			SetViewMode (ModeType.IconView);
-		}
-	
-		void HandleViewPhoto (object sender, EventArgs args)
-		{
-			SetViewMode (ModeType.PhotoView);
-		}
-	
-		void HandleViewFullscreen (object sender, EventArgs args)
-		{
-			int active = (Selection.Count > 0 ? SelectedIds() [0] : 0);
-			if (fsview == null) {
-				fsview = new FSpot.FullScreenView (query, main_window);
-				fsview.Destroyed += HandleFullScreenViewDestroy;
-				fsview.KeyPressEvent += HandleFullScreenViewKeyPressEvent;
-				fsview.View.Item.Index = active;
-			} else {
-				// FIXME this needs to be another mode like PhotoView and IconView mode.
-				fsview.View.Item.Index = active;
-			}
-			
-			fsview.Show ();
-		}
-	
-		void HandleFullScreenViewDestroy (object sender, EventArgs args)
-		{
-			JumpTo (fsview.View.Item.Index);
-			fsview = null;
-		}
-		
-		void HandleZoomScaleValueChanged (object sender, System.EventArgs args)
-		{
-			switch (ViewMode) {
-			case ModeType.PhotoView:
-				photo_view.View.ZoomChanged -= HandleZoomChanged;
-				photo_view.NormalizedZoom = zoom_scale.Value;
-				photo_view.View.ZoomChanged += HandleZoomChanged;
-				break;
-			case ModeType.IconView:
-				icon_view.ZoomChanged -= HandleZoomChanged;
-				icon_view.Zoom = zoom_scale.Value;
-				icon_view.ZoomChanged += HandleZoomChanged;
-				break;
-			}
-			
-			zoom_in.Sensitive = (zoom_scale.Value != 1.0);
-			zoom_out.Sensitive = (zoom_scale.Value != 0.0);
-		}
-		
-		void HandleQueryChanged (IBrowsableCollection sender)
-		{
-			if (find_untagged.Active != query.Untagged)
-				find_untagged.Active = query.Untagged;
-			
-			clear_date_range.Sensitive = (query.Range != null);
-			clear_rating_filter.Sensitive = (query.RatingRange != null);
-			update_status_label = true;
-			GLib.Idle.Add (UpdateStatusLabel);
-		}
-	
-		bool update_status_label;
-		private bool UpdateStatusLabel ()
-		{
-			update_status_label = false;
-			int total_photos = Database.Photos.TotalPhotos;
-			if (total_photos != query.Count)
-				status_label.Text = String.Format (Catalog.GetPluralString ("{0} Photo out of {1}", "{0} Photos out of {1}", query.Count), query.Count, total_photos);
-			else
-				status_label.Text = String.Format (Catalog.GetPluralString ("{0} Photo", "{0} Photos", query.Count), query.Count);
-		
-			if ((Selection != null) && (Selection.Count > 0))
-				status_label.Text += String.Format (Catalog.GetPluralString (" ({0} selected)", " ({0} selected)", Selection.Count), Selection.Count);
-			status_label.UseMarkup = true;
-			return update_status_label;
-		}
-		
-		void HandleZoomChanged (object sender, System.EventArgs args)
-		{
-			zoom_scale.ValueChanged -= HandleZoomScaleValueChanged;
-	
-			double zoom = .5;
-			switch (ViewMode) {
-			case ModeType.PhotoView:
-				zoom = photo_view.NormalizedZoom;
-				zoom_scale.Value = zoom;
-				break;
-			case ModeType.IconView:
-				zoom = icon_view.Zoom;
-				if (zoom == 0.0 || zoom == 100.0 || zoom != zoom_scale.Value)
-					zoom_scale.Value = zoom;
-	
-				break;
-			}
-			
-			zoom_in.Sensitive = (zoom != 1.0);
-			zoom_out.Sensitive = (zoom != 0.0);
-			
-			zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
-		}
-	
-		void HandleZoomOut (object sender, ButtonPressEventArgs args)
-		{
-			ZoomOut ();
-		}
-		
-		void HandleZoomOut (object sender, EventArgs args)
-		{
-			ZoomOut ();
-		}
-		
-		void HandleZoomIn (object sender, ButtonPressEventArgs args)
-		{
-			ZoomIn ();
-		}
-		
-		void HandleZoomIn (object sender, EventArgs args)
-		{
-			ZoomIn ();
-		}
-		
-		private void ZoomOut ()
-		{
-			switch (ViewMode) {
-			case ModeType.PhotoView:
-				photo_view.ZoomOut ();
-				break;
-			case ModeType.IconView:
-				icon_view.ZoomOut ();
-				break;
-			}
-		}
-		
-		private void ZoomIn ()
-		{
-			switch (ViewMode) {
-			case ModeType.PhotoView:
-				double old_zoom = photo_view.Zoom;
-				try {
-					photo_view.ZoomIn ();
-				} catch {
-					photo_view.Zoom = old_zoom;
-				}
-				
-				break;
-			case ModeType.IconView:
-				icon_view.ZoomIn ();
-				break;
-			}
-		}
-	
-		public void DeleteException (Exception e, string fname)
-		{
-			string ok_caption = Catalog.GetString ("_Ok");
-			string error = Catalog.GetString ("Error Deleting Picture");
-			string msg;
-	
-			if (e is UnauthorizedAccessException)
-				msg = String.Format (
-					Catalog.GetString ("No permission to delete the file:{1}{0}"), 
-					fname, Environment.NewLine).Replace ("_", "__");
-			else
-				msg = String.Format (
-					Catalog.GetString ("An error of type {0} occurred while deleting the file:{2}{1}"),
-					e.GetType (), fname.Replace ("_", "__"), Environment.NewLine);
-			
-			HigMessageDialog.RunHigConfirmation (
-				main_window, DialogFlags.DestroyWithParent, MessageType.Error,
-				error, msg, ok_caption);
-		}
-	
-		public Gtk.Window GetToplevel (object sender)
-		{
-			Widget wsender = sender as Widget;
-			Gtk.Window toplevel = null;
-	
-			if (wsender != null && !(wsender is MenuItem))
-				toplevel = (Gtk.Window) wsender.Toplevel;
-			else if (fsview != null)
-				toplevel = fsview;
-			else 
-				toplevel = main_window;
-	
-			return toplevel;
-		}
-	
-		public void HandleDeleteCommand (object sender, EventArgs args)
-		{
-			// Don't steal characters from any text entries
-			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
-				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
-				return;
-			}
-			
-	   		Photo[] photos = SelectedPhotos();
-	   		string header = Catalog.GetPluralString ("Delete the selected photo permanently?", 
-									    "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.", 
-									 photos.Length);
-			string ok_caption = Catalog.GetPluralString ("_Delete photo", "_Delete photos", photos.Length);
-			
-			if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(GetToplevel (sender), 
-										   DialogFlags.DestroyWithParent, 
-										   MessageType.Warning, 
-										   header, msg, ok_caption)) {                              
-				
-				uint timer = Log.DebugTimerStart ();
-				foreach (Photo photo in photos) {
-					foreach (uint id in photo.VersionIds) {
-						try {
-							photo.DeleteVersion (id, true);
-						} catch (Exception e) {
-							DeleteException (e, photo.VersionUri (id).ToString ());
-						}
-					}
-				}
-				Database.Photos.Remove (photos);
-				
-				UpdateQuery ();
-				Log.DebugTimerPrint (timer, "HandleDeleteCommand took {0}");
-			}
-		}
-	
-		public void HandleRemoveCommand (object sender, EventArgs args)
-		{
-			// Don't steal characters from any text entries
-			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
-				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
-				return;
-			}
-	
-	   		Photo[] photos = SelectedPhotos();
-			if (photos.Length == 0) 
-				return;
-	
-	   		string header = Catalog.GetPluralString ("Remove the selected photo from F-Spot?",
-									    "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.");
-			string ok_caption = Catalog.GetString("_Remove from Catalog");
-			if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(GetToplevel (sender), DialogFlags.DestroyWithParent, 
-										   MessageType.Warning, header, msg, ok_caption)) {                              
-				Database.Photos.Remove (photos);
-				UpdateQuery ();
-			}
-		}
-	
-		void HandleSelectAllCommand (object sender, EventArgs args)
-		{
-			if (Window.Focus is Editable) {
-				(Window.Focus as Editable).SelectRegion (0, -1); // select all in text box
-				return;
-			}
-
-			icon_view.SelectAllCells ();
-			UpdateStatusLabel ();
-		}
-	
-		void HandleSelectNoneCommand (object sender, EventArgs args)
-		{
-			icon_view.Selection.Clear ();
-			UpdateStatusLabel ();
-		}
-
-		void HandleSelectInvertCommand (object sender, EventArgs args)
-		{
-			icon_view.Selection.SelectionInvert ();
-			UpdateStatusLabel ();
-		}
-	
-		// This ConnectBefore is needed because otherwise the editability of the name
-		// column will steal returns, spaces, and clicks if the tag name is focused
-		[GLib.ConnectBefore]
-		public void HandleTagSelectionKeyPress (object sender, Gtk.KeyPressEventArgs args)
-		{
-			args.RetVal = true;
-	
-			switch (args.Event.Key) {
-			case Gdk.Key.Delete:
-				HandleDeleteSelectedTagCommand (sender, (EventArgs) args);
-				break;
-			
-			case Gdk.Key.space:
-			case Gdk.Key.Return:
-			case Gdk.Key.KP_Enter:
-				ShowQueryWidget ();
-				query_widget.Include (tag_selection_widget.TagHighlight);
-				break;
-	
-			case Gdk.Key.F2:
-				tag_selection_widget.EditSelectedTagName ();
-				break;
-			
-			default:
-				args.RetVal = false;
-				break;
-			}
-		}
-	
-		public void HandleDeleteSelectedTagCommand (object sender, EventArgs args)
-		{
-			Tag [] tags = this.tag_selection_widget.TagHighlight;
-	
-			System.Array.Sort (tags, new TagRemoveComparer ());
-		
-			//How many pictures are associated to these tags?
-			Db db = App.Instance.Database;
-			FSpot.PhotoQuery count_query = new FSpot.PhotoQuery(db.Photos);
-			count_query.Terms = FSpot.OrTerm.FromTags(tags);
-			int associated_photos = count_query.Count;
-	
-			string header;
-			if (tags.Length == 1)
-				header = String.Format (Catalog.GetString ("Delete tag \"{0}\"?"), tags [0].Name.Replace ("_", "__"));
-			else
-				header = String.Format (Catalog.GetString ("Delete the {0} selected tags?"), tags.Length);
-			
-			header = String.Format (header, tags.Length);
-			string msg = String.Empty;
-			if (associated_photos > 0) {
-				string photodesc = Catalog.GetPluralString ("photo", "photos", associated_photos);
-				msg = String.Format( 
-					Catalog.GetPluralString("If you delete this tag, the association with {0} {1} will be lost.",
-								"If you delete these tags, the association with {0} {1} will be lost.",
-								tags.Length),
-					associated_photos, photodesc);
-			}
-			string ok_caption = Catalog.GetPluralString ("_Delete tag", "_Delete tags", tags.Length);
-			
-			if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(main_window, 
-										   DialogFlags.DestroyWithParent, 
-										   MessageType.Warning, 
-										   header, 
-										   msg, 
-										   ok_caption)) {                              
-				try { 				
-					db.Photos.Remove (tags);
-				} catch (InvalidTagOperationException e) {
-					Log.Debug ("this is something or another");
-	
-					// A Category is not empty. Can not delete it.
-					string error_msg = Catalog.GetString ("Tag is not empty");
-					string error_desc = String.Format (Catalog.GetString ("Can not delete tags that have tags within them.  " + 
-													 "Please delete tags under \"{0}\" first"),
-									   e.Tag.Name.Replace ("_", "__"));
-					
-					HigMessageDialog md = new HigMessageDialog (main_window, DialogFlags.DestroyWithParent, 
-										    Gtk.MessageType.Error, ButtonsType.Ok, 
-										    error_msg,
-										    error_desc);
-					md.Run ();
-					md.Destroy ();
-				}
-			}
-		}
-	
-		void HandleUpdateThumbnailCommand (object sender, EventArgs args)
-		{
-			ThumbnailCommand command = new ThumbnailCommand (main_window);
-	
-			int [] selected_ids = SelectedIds ();
-			if (command.Execute (SelectedPhotos (selected_ids)))
-				query.MarkChanged (selected_ids, InvalidateData.Instance);
-		}
-	
-		public void HandleRotate90Command (object sender, EventArgs args)
-		{
-			// Don't steal characters from any text entries
-			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
-				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
-				return;
-			}
-			
-			RotateSelectedPictures (GetToplevel (sender), RotateDirection.Clockwise);
-		}
-	
-		public void HandleRotate270Command (object sender, EventArgs args)
-		{
-			// Don't steal characters from any text entries
-			if (Window.Focus is Gtk.Entry && Gtk.Global.CurrentEvent is Gdk.EventKey) {
-				Window.Focus.ProcessEvent (Gtk.Global.CurrentEvent);
-				return;
-			}
-	
-			RotateSelectedPictures (GetToplevel (sender), RotateDirection.Counterclockwise);
-		}
-	
-		public void HandleCopy (object sender, EventArgs args)
-		{
-			Clipboard primary = Clipboard.Get (Atom.Intern ("PRIMARY", false));
-			Clipboard clipboard = Clipboard.Get (Atom.Intern ("CLIPBOARD", false));
-
-			if (Window.Focus is Editable) {
-				(Window.Focus as Editable).CopyClipboard ();
-				return;
-			}
-
-			clipboard.SetWithData (new TargetEntry[] {
-						DragDropTargets.PlainTextEntry,
-						DragDropTargets.UriListEntry,
-						DragDropTargets.CopyFilesEntry,},
-					delegate (Clipboard clip, SelectionData data, uint info) {
-						var paths = new List<string> ();
-						var uris = new List<string> ();
-						foreach (Photo p in SelectedPhotos ()) {
-							paths.Add (System.IO.Path.GetFullPath (p.DefaultVersion.Uri.LocalPath));
-							uris.Add (p.DefaultVersion.Uri.ToString ());
-						}
-						data.Text = String.Join (" ", paths.ToArray ());
-						data.SetUris (String.Join (" ", uris.ToArray ()));
-						data.Set (Atom.Intern ("x-special/gnome-copied-files", true), 8, System.Text.Encoding.UTF8.GetBytes ("copy\n" + String.Join ("\n", uris.ToArray ())));
-						
-					},
-					delegate {});
-	
-			var pt = new List<string> ();
-			foreach (Photo p in SelectedPhotos ()) {
-				pt.Add (System.IO.Path.GetFullPath (p.DefaultVersion.Uri.LocalPath));
-			}
-			
-			primary.Text = String.Join (" ", pt.ToArray ());
-		}
-	
-		void HandleSetAsBackgroundCommand (object sender, EventArgs args)
-		{
-			Photo current = CurrentPhoto;
-	
-			if (current == null)
-				return;
-	
-			Desktop.SetBackgroundImage (current.DefaultVersion.Uri.LocalPath);
-		}
-	
-		void HandleSetDateRange (object sender, EventArgs args) {
-			var date_range_dialog = new DateRangeDialog (query.Range, main_window);
-			if ((ResponseType)date_range_dialog.Run () == ResponseType.Ok)
-				query.Range = date_range_dialog.Range;
-			date_range_dialog.Destroy ();
-	
-			//update the TimeLine
-			if (group_selector.Adaptor is TimeAdaptor && query.Range != null) 
-				group_selector.SetLimitsToDates(query.Range.Start, query.Range.End);
-		}
-	
-		public void HandleClearDateRange (object sender, EventArgs args) {
-			if (group_selector.Adaptor is FSpot.TimeAdaptor) {
-				group_selector.ResetLimits();
-			}
-			query.Range = null;
-		}
-	
-		void HandleSelectLastRoll (object sender, EventArgs args) {
-			query.RollSet = new RollSet (Database.Rolls.GetRolls (1));
-		}
-	
-		void HandleSelectRolls (object sender, EventArgs args) {
-			new LastRolls (query, Database.Rolls, main_window);
-		}
-	
-		void HandleClearRollFilter (object sender, EventArgs args) {
-			query.RollSet = null;
-		}
-	
-		void HandleSetRatingFilter (object sender, EventArgs args) {
-			new RatingFilterDialog (query, main_window);
-		}
-	
-		public void HandleClearRatingFilter (object sender, EventArgs args) {
-			query.RatingRange = null;
-		}
-	
-		void HandleFindUntagged (object sender, EventArgs args) {
-			if (query.Untagged == find_untagged.Active)
-				return;
-	
-			query.Untagged = !query.Untagged;
-		}
-		
-		void OnPreferencesChanged (object sender, NotifyEventArgs args)
-		{
-			LoadPreference (args.Key);
-		}
-	
-		void LoadPreference (String key)
-		{
-			switch (key) {
-			case Preferences.MAIN_WINDOW_MAXIMIZED:
-				if (Preferences.Get<bool> (key))
-					main_window.Maximize ();
-				else
-					main_window.Unmaximize ();
-				break;
-	
-			case Preferences.MAIN_WINDOW_X:
-			case Preferences.MAIN_WINDOW_Y:
-				main_window.Move(Preferences.Get<int> (Preferences.MAIN_WINDOW_X),
-						 Preferences.Get<int> (Preferences.MAIN_WINDOW_Y));
-				break;
-			
-			case Preferences.MAIN_WINDOW_WIDTH:
-			case Preferences.MAIN_WINDOW_HEIGHT:
-				if (Preferences.Get<int> (Preferences.MAIN_WINDOW_WIDTH) > 0 &&
-							  Preferences.Get<int> (Preferences.MAIN_WINDOW_HEIGHT) > 0)
-					main_window.Resize(Preferences.Get<int> (Preferences.MAIN_WINDOW_WIDTH),
-							   Preferences.Get<int> (Preferences.MAIN_WINDOW_HEIGHT));
-	
-				break;
-			
-			case Preferences.SHOW_TOOLBAR:
-				if (display_toolbar.Active != Preferences.Get<bool> (key))
-					display_toolbar.Active = Preferences.Get<bool> (key);
-				break;
-			
-			case Preferences.SHOW_SIDEBAR:
-				if (display_sidebar.Active != Preferences.Get<bool> (key))
-					display_sidebar.Active = Preferences.Get<bool> (key);
-				break;
-			
-			case Preferences.SHOW_TIMELINE:
-				if (display_timeline.Active != Preferences.Get<bool> (key))
-					display_timeline.Active = Preferences.Get<bool> (key);
-				break;
-			
-			case Preferences.SHOW_FILMSTRIP:
-				if (display_filmstrip.Active != Preferences.Get<bool> (key)) {
-					display_filmstrip.Active = Preferences.Get<bool> (key);
-				}
-				break;
-			
-			case Preferences.SHOW_TAGS:
-				if (display_tags_menu_item.Active != Preferences.Get<bool> (key))
-					display_tags_menu_item.Active = Preferences.Get<bool> (key);
-				break;
-			
-			case Preferences.SHOW_DATES:
-				if (display_dates_menu_item.Active != Preferences.Get<bool> (key))
-					display_dates_menu_item.Active = Preferences.Get<bool> (key);
-					//display_dates_menu_item.Toggle ();
-				break;
-			
-			case Preferences.SHOW_RATINGS:
-				if (display_ratings_menu_item.Active != Preferences.Get<bool> (key))
-					display_ratings_menu_item.Active = Preferences.Get<bool> (key);
-				break;
-	
-			case Preferences.GROUP_ADAPTOR_ORDER_ASC:
-				group_selector.Adaptor.OrderAscending = Preferences.Get<bool> (key);
-				reverse_order.Active = Preferences.Get<bool> (key);
-				query.TimeOrderAsc = group_selector.Adaptor.OrderAscending;
-				break;
-	
-			case Preferences.GLASS_POSITION:
-				if (query.Count > 0) {
-					// If the database has changed since this pref was saved, this could cause
-					// an exception to be thrown.
-					try {
-						IBrowsableItem photo = group_selector.Adaptor.PhotoFromIndex (Preferences.Get<int> (key));
-						
-						if (photo != null)
-							JumpTo (query.IndexOf (photo));
-					} catch (Exception) {}
-				}
-	
-				icon_view.GrabFocus ();
-				break;
-			case Preferences.SIDEBAR_POSITION:
-				if (main_hpaned.Position !=Preferences.Get<int> (key) )
-					main_hpaned.Position = Preferences.Get<int> (key);
-				break;
-	
-			case Preferences.TAG_ICON_SIZE:
-				int s = Preferences.Get<int> (key);
-				tag_icon_hidden.Active = (s == (int) Tag.IconSize.Hidden);
-				tag_icon_small.Active = (s == (int) Tag.IconSize.Small);
-				tag_icon_medium.Active = (s == (int) Tag.IconSize.Medium);
-				tag_icon_large.Active = (s == (int) Tag.IconSize.Large);
-	
-				break;
-	
-			case Preferences.ZOOM:
-				icon_view.Zoom = Preferences.Get<double> (key);
-				break;
-			
-			case Preferences.METADATA_EMBED_IN_IMAGE:
-				write_metadata =Preferences.Get<bool> (key) ;
-				break;
-			case Preferences.GNOME_MAILTO_ENABLED:
-				send_mail.Visible = Preferences.Get<bool> (key);
-				break;
-			}
-		}
-	
-		// Version Id updates.
-	
-		void UpdateForVersionChange (IBrowsableItemVersion version)
-		{
-			IBrowsableItemVersionable versionable = CurrentPhoto as IBrowsableItemVersionable;
-
-			if (versionable != null) {
-				versionable.SetDefaultVersion (version);
-				query.Commit (ActiveIndex ());
-			}
-		}
-	
-		// Queries.
-	
-		public void UpdateQuery ()
-		{
-			main_window.GdkWindow.Cursor = watch;
-			main_window.GdkWindow.Display.Sync ();
-			query.RequestReload ();
-			main_window.GdkWindow.Cursor = null;
-		}
-	
-		void HandleTagSelectionChanged (object obj, EventArgs args)
-		{
-			UpdateMenus ();
-		}
-	
-		public bool TagIncluded (Tag tag)
-		{
-			return query_widget.TagIncluded (tag);
-		}
-		
-		public bool TagRequired (Tag tag)
-		{
-			return query_widget.TagRequired (tag);
-		}
-	
-		private void HandleQueryLogicChanged (object sender, EventArgs args)
-		{
-			HandleFindAddTagWith (null, null);
-		}
-		
-		public void HandleIncludeTag (object sender, EventArgs args)
-		{
-			ShowQueryWidget ();
-			query_widget.Include (tag_selection_widget.TagHighlight);
-		}
-		
-		public void HandleUnIncludeTag (object sender, EventArgs args)
-		{
-			query_widget.UnInclude (tag_selection_widget.TagHighlight);
-	 	}
-		
-		void HandleFindByTag (object sender, EventArgs args)
-		{
-			UpdateFindByTagMenu ();
-		}
-		
-		public void UpdateFindByTagMenu ()
-		{
-			if (query_widget.Visible) {
-				query_widget.Close ();
-			} else {
-				ShowQueryWidget ();
-			}
-		}
-		
-		void HandleFindAddTagWith (object sender, EventArgs args)
-		{
-			MenuItem find_add_tag_with = uimanager.GetWidget ("/ui/menubar1/find/find_add_tag_with") as MenuItem;
-			if (find_add_tag_with.Submenu != null)
-				find_add_tag_with.Submenu.Dispose ();
-			
-			Gtk.Menu submenu = FSpot.TermMenuItem.GetSubmenu (tag_selection_widget.TagHighlight);
-			find_add_tag_with.Sensitive = (submenu != null);
-			if (submenu != null) 
-				find_add_tag_with.Submenu = submenu;	
-		}
-		
-		public void HandleAddTagToTerm (object sender, EventArgs args)
-		{
-			MenuItem item = sender as MenuItem;
-			
-			int item_pos = 0;
-			foreach (MenuItem i in (item.Parent as Menu).Children) {
-				if (item == i) {
-					break;
-				}
-				
-				item_pos++;
-			}
-			// account for All and separator menu items
-			item_pos -= 2;
-			
-			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;
-				FSpot.LogicWidget.Box.InsertTerm (tag_selection_widget.TagHighlight, parent_term, after);
-			}
-		}
-		
-		//
-		// Handle Main Menu 
-	
-		void UpdateMenus ()
-		{
-			int tags_selected = tag_selection_widget.Selection.CountSelectedRows ();
-			bool tag_sensitive = tags_selected > 0;
-			bool active_selection = Selection.Count > 0;
-			bool single_active = CurrentPhoto != null;
-			MenuItem version_menu_item = uimanager.GetWidget ("/ui/menubar1/file1/version_menu_item") as MenuItem;
-			
-			if (!single_active) {
-				version_menu_item.Sensitive = false;
-				version_menu_item.Submenu = new Menu ();
-	
-				create_version_menu_item.Sensitive = false;
-				delete_version_menu_item.Sensitive = false;
-				detach_version_menu_item.Sensitive = false;
-				rename_version_menu_item.Sensitive = false;
-	
-				sharpen.Sensitive = false;
-				loupe_menu_item.Sensitive = false;
-			} else {
-				version_menu_item.Sensitive = true;
-				create_version_menu_item.Sensitive = true;
-				
-				if (CurrentPhoto.DefaultVersionId == Photo.OriginalVersionId) {
-					delete_version_menu_item.Sensitive = false;
-					detach_version_menu_item.Sensitive = false;
-					rename_version_menu_item.Sensitive = false;
-				} else {
-					delete_version_menu_item.Sensitive = true;
-					detach_version_menu_item.Sensitive = true;
-					rename_version_menu_item.Sensitive = true;
-				}
-	
-				versions_submenu = new PhotoVersionMenu (CurrentPhoto);
-				versions_submenu.VersionChanged += delegate (PhotoVersionMenu menu) { UpdateForVersionChange (menu.Version);};
-				version_menu_item.Submenu = versions_submenu;
-	
-				sharpen.Sensitive = (ViewMode == ModeType.IconView ? false : true);
-				loupe_menu_item.Sensitive = (ViewMode == ModeType.IconView ? false : true);
-			}
-	
-			set_as_background.Sensitive = single_active;
-			adjust_time.Sensitive = active_selection;
-	
-			attach_tag.Sensitive = active_selection;
-			remove_tag.Sensitive = active_selection;
-	
-			rotate_left.Sensitive = active_selection;
-			rotate_right.Sensitive = active_selection;
-			update_thumbnail.Sensitive = active_selection;
-			delete_from_drive.Sensitive = active_selection;
-			
-			send_mail.Sensitive = active_selection;
-			print.Sensitive = active_selection;
-			select_none.Sensitive = active_selection;
-			copy.Sensitive = active_selection;
-			remove_from_catalog.Sensitive = active_selection;
-			
-			clear_rating_filter.Sensitive = (query.RatingRange != null);
-	
-			clear_roll_filter.Sensitive = (query.RollSet != null);
-			
-			delete_selected_tag.Sensitive = tag_sensitive;
-			edit_selected_tag.Sensitive = tag_sensitive;
-	
-	
-			attach_tag_to_selection.Sensitive = tag_sensitive && active_selection;
-			remove_tag_from_selection.Sensitive = tag_sensitive && active_selection;
-		
-			export.Sensitive = active_selection;
-	
-			MenuItem toolsmenu = uimanager.GetWidget ("/ui/menubar1/tools") as MenuItem;
-			try {
-				tools.Visible = (toolsmenu.Submenu as Menu).Children.Length > 0;
-			} catch {
-				tools.Visible = false;
-			}
-	
-			if (rl_button != null) {
-				if (Selection.Count == 0) {
-					rl_button.Sensitive = false;
-					rl_button.TooltipText = String.Empty;
-				} else {
-					rl_button.Sensitive = true;
-	
-					string msg = Catalog.GetPluralString ("Rotate selected photo left",
-									      "Rotate selected photos left", Selection.Count);
-					rl_button.TooltipText = String.Format (msg, Selection.Count);
-				}
-			}
-			
-			if (rr_button != null) {
-				if (Selection.Count == 0) {
-					rr_button.Sensitive = false;
-					rr_button.TooltipText = String.Empty;
-				} else {
-					rr_button.Sensitive = true;
-	
-					string msg = Catalog.GetPluralString ("Rotate selected photo right",
-									      "Rotate selected photos right", Selection.Count);
-					rr_button.TooltipText = String.Format (msg, Selection.Count);
-				}
-			}
-	
-			//if (last_tags_selected_count != tags_selected) {
-			MenuItem find_add_tag = uimanager.GetWidget ("/ui/menubar1/find/find_add_tag") as MenuItem;
-			MenuItem find_add_tag_with = uimanager.GetWidget ("/ui/menubar1/find/find_add_tag_with") as MenuItem;
-	
-			((Gtk.Label)find_add_tag.Child).TextWithMnemonic = String.Format (
-				Catalog.GetPluralString ("Find _Selected Tag", "Find _Selected Tags", tags_selected), tags_selected
-			);
-	
-			((Gtk.Label)find_add_tag_with.Child).TextWithMnemonic = String.Format (
-				Catalog.GetPluralString ("Find Selected Tag _With", "Find Selected Tags _With", tags_selected), tags_selected
-			);
-	
-			find_add_tag.Sensitive = tag_sensitive;
-			find_add_tag_with.Sensitive = tag_sensitive && find_add_tag_with.Submenu != null;
-	
-			//last_tags_selected_count = tags_selected;
-			//}
-		}
-	
-		void PopulateExtendableMenus (object o, EventArgs args)
-		{
-			MenuItem exportmenu = uimanager.GetWidget ("/ui/menubar1/file1/export") as MenuItem;
-			MenuItem toolsmenu = uimanager.GetWidget ("/ui/menubar1/tools") as MenuItem;
-			try {
-				if (exportmenu.Submenu != null)
-					exportmenu.Submenu.Dispose ();
-				if (toolsmenu.Submenu != null)
-					toolsmenu.RemoveSubmenu ();
-	
-				exportmenu.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Exports") as FSpot.Extensions.SubmenuNode).GetSubmenu ();
-				exportmenu.Submenu.ShowAll ();
-	
-				toolsmenu.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Tools") as FSpot.Extensions.SubmenuNode).GetSubmenu ();
-				toolsmenu.Submenu.ShowAll ();
-	
-				tools.Visible = (toolsmenu.Submenu as Menu).Children.Length > 0;
-			} catch {
-				Log.Warning ("There's (maybe) something wrong with some of the installed extensions. You can try removing the directory addin-db-000 from ~/.config/f-spot/");
-				toolsmenu.Visible = false;
-			}
-		}
-	
-		public void HandleOpenWith (object sender, ApplicationActivatedEventArgs e)
-		{
-			GLib.AppInfo application = e.AppInfo;
-			Photo[] selected = SelectedPhotos ();
-	
-			if (selected == null || selected.Length < 1)
-				return;
-	
-			string header = Catalog.GetPluralString ("Create New Version?", "Create New Versions?", selected.Length); 
-			string msg = String.Format (Catalog.GetPluralString (
-					"Before launching {1}, should F-Spot create a new version of the selected photo to preserve the original?",
-					"Before launching {1}, should F-Spot create new versions of the selected photos to preserve the originals?", selected.Length),
-					selected.Length, application.Name);
-	
-			// FIXME add cancel button? add help button?
-			HigMessageDialog hmd = new HigMessageDialog(GetToplevel (sender), DialogFlags.DestroyWithParent, 
-								    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);
-			hmd.AddButton (Gtk.Stock.Yes, Gtk.ResponseType.Yes, true);
-	
-			bool support_xcf = false;;
-			if (application.Id == "gimp.desktop") 
-				foreach (Gdk.PixbufFormat format in Gdk.Pixbuf.Formats)
-					if (format.Name == "xcf")
-						support_xcf = true;
-	
-			//This allows creating a version with a .xcf extension.
-			//There's no need to convert the file to xcf file format, gimp will take care of this
-			if (support_xcf) {	
-				CheckButton cb = new CheckButton (Catalog.GetString ("XCF version"));
-				cb.Active = Preferences.Get<bool> (Preferences.EDIT_CREATE_XCF_VERSION);
-				hmd.VBox.Add (cb);
-				cb.Toggled += delegate (object s, EventArgs ea) {
-					Preferences.Set (Preferences.EDIT_CREATE_XCF_VERSION, (s as CheckButton).Active);
-				};
-				cb.Show ();
-			}
-	
-			Gtk.ResponseType response = Gtk.ResponseType.Cancel;
-	
-			try {
-				response = (Gtk.ResponseType) hmd.Run();
-			} finally {
-				hmd.Destroy ();
-			}
-			
-			bool create_xcf = false;
-			if (support_xcf)
-				create_xcf = Preferences.Get<bool> (Preferences.EDIT_CREATE_XCF_VERSION);
-	
-			Log.DebugFormat ("XCF ? {0}", create_xcf);
-	
-			if (response == Gtk.ResponseType.Cancel)
-				return;
-	
-			bool create_new_versions = (response == Gtk.ResponseType.Yes);
-	
-			ArrayList errors = new ArrayList ();
-			GLib.List uri_list = new GLib.List (typeof (string));
-			foreach (Photo photo in selected) {
-				try {
-					if (create_new_versions) {
-						uint version = photo.CreateNamedVersion (application.Name, create_xcf ? ".xcf" : null, photo.DefaultVersionId, true);
-						photo.DefaultVersionId = version;
-					}
-				} catch (Exception ex) {
-					errors.Add (new EditException (photo, ex));
-				}
-	
-				uri_list.Append (photo.DefaultVersion.Uri.ToString ());
-			}
-	
-			// FIXME need to clean up the error dialog here.
-			if (errors.Count > 0) {
-				Dialog md = new EditExceptionDialog (GetToplevel (sender), errors.ToArray (typeof (EditException)) as EditException []);
-				md.Run ();
-				md.Destroy ();
-			}
-	
-			if (create_new_versions)
-				Database.Photos.Commit (selected);
-	
-			try {
-				application.LaunchUris (uri_list, null);
-			} catch (System.Exception) {
-				Log.ErrorFormat ("Failed to lauch {0}", application.Name);
-			}
-		}
-	
-		public void GetWidgetPosition(Widget widget, out int x, out int y)
-		{
-			main_window.GdkWindow.GetOrigin(out x, out y);
-			
-			x += widget.Allocation.X;
-			y += widget.Allocation.Y;
-		}
-	
-		// Tag typing ...
-	
-		private void UpdateTagEntryFromSelection ()
-		{
-			if (!tagbar.Visible)
-				return;
-			tag_entry.UpdateFromSelection (SelectedPhotos ());
-		}
-	
-		public void HandlePossibleTagTyping (object sender, Gtk.KeyPressEventArgs args)
-		{
-			if (Selection.Count == 0 || tagbar.Visible && tag_entry.HasFocus)
-				return;
-	
-			if (args.Event.Key != Gdk.Key.t)
-				return;
-	
-			tagbar.Show ();
-			UpdateTagEntryFromSelection ();
-			tag_entry.GrabFocus ();
-			tag_entry.SelectRegion (-1, -1);
-		}
-	
-		// "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 ();
-		       }
-		}
-	
-		private void HandleTagEntryTagsAttached (object o, string [] new_tags)
-		{
-			int [] selected_photos = SelectedIds ();
-			if (selected_photos == null || new_tags == null || new_tags.Length == 0)
-				return;
-	
-			Category default_category = null;
-			Tag [] selection = tag_selection_widget.TagHighlight;
-			if (selection.Length > 0) {
-				if (selection [0] is Category)
-					default_category = (Category) selection [0];
-				else
-					default_category = selection [0].Category;
-			}
-			Tag [] tags = new Tag [new_tags.Length];
-			int i = 0;
-			Database.BeginTransaction ();
-			foreach (string tagname in new_tags) {
-				Tag t = Database.Tags.GetTagByName (tagname);
-				if (t == null) {
-					t = Database.Tags.CreateCategory (default_category, tagname, true) as Tag;
-					Database.Tags.Commit (t);
-				}
-				tags [i++] = t;
-			}
-			AddTagExtended (selected_photos, tags);
-			Database.CommitTransaction ();
-		}
-	
-		private void HandleTagEntryRemoveTags (object o, Tag [] remove_tags)
-		{
-			int [] selected_photos = SelectedIds ();
-			if (selected_photos == null || remove_tags == null || remove_tags.Length == 0)
-				return;
-	
-			Database.BeginTransaction ();
-			RemoveTags (selected_photos, remove_tags);
-			Database.CommitTransaction ();
-		}
-	
-		private void HideTagbar ()
-		{
-			if (! tagbar.Visible)
-				return;
-			
-			UpdateTagEntryFromSelection ();
-	
-			// Cancel any pending edits...
-			tagbar.Hide ();
-	
-			if (ViewMode == ModeType.IconView)
-				icon_view.GrabFocus ();
-			else {
-				photo_view.QueueDraw ();
-				photo_view.View.GrabFocus ();
-			}
-	
-			tag_entry.ClearTagCompletions ();
-		}
-	
-		public void HandleTagBarCloseButtonPressed (object sender, EventArgs args)
-		{
-			HideTagbar ();
-		}
-	
-		public void HandleTagEntryKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
-		{
-			args.RetVal = false;
-	
-			if (args.Event.Key == Gdk.Key.Escape) { 
-				HideTagbar ();
-				args.RetVal = true;
-			}
-		}
-	
-		public List<string> SelectedMimeTypes ()
-		{
-			List<string> contents = new List<string> ();
-	
-			foreach (Photo p in SelectedPhotos ()) {
-				string content;
-				try {
-					content = GLib.FileFactory.NewForUri (p.DefaultVersion.Uri).QueryInfo ("standard::content-type", GLib.FileQueryInfoFlags.None, null).ContentType;
-				} catch (GLib.GException) {
-					content = null;
-				}
-	
-				if (! contents.Contains (content))
-					contents.Add (content);
-			}
-	
-			return contents;
-		}
-	
-		private void ShowQueryWidget ()
-		{
-			if (find_bar.Visible) {
-				find_bar.Entry.Text = String.Empty;
-				find_bar.Hide ();
-			}
-			
-			query_widget.ShowBar ();
-			return;
-		}
-	
-		public void HideSidebar (object o, EventArgs args) {
-			display_sidebar.Active = false;
-		}
-		
-		public void HandleKeyPressEvent (object sender, Gtk.KeyPressEventArgs args)
-		{
-			bool ctrl = ModifierType.ControlMask == (args.Event.State & ModifierType.ControlMask);
-	
-			if ((ctrl && args.Event.Key == Gdk.Key.F) || args.Event.Key == Gdk.Key.slash) {
-				if (!find_bar.Visible) {
-					if (query_widget.Visible) {
-						query_widget.Close ();
-					}
-					
-					find_bar.ShowAll();
-				}
-	
-				// Grab the focus even if it's already shown
-				find_bar.Entry.GrabFocus ();
-				args.RetVal = true;
-				return;
-			}
-			
-			args.RetVal = false;
-		}
-	}
-}
diff --git a/src/Makefile.am b/src/Makefile.am
index 92568a8..5383664 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,223 +1,14 @@
 SUBDIRS = \
-	Cms \
-	Utils \
 	Core \
-	Query \
-	JobScheduler \
-	Bling \
-	Platform \
-	Widgets
+	Clients \
+	Extensions
 
-ASSEMBLY = f-spot
-TARGET = exe
-LINK = $(REF_FSPOT)
-ASSEMBLY_BUILD_FLAGS = -unsafe
+EXTRA_DIST = AssemblyInfo.cs.in
 
-SOURCES = \
-	BitConverter.cs \
-	PhotoList.cs \
-	ColorAdjustment/Adjustment.cs \
-	ColorAdjustment/AutoStretch.cs \
-	ColorAdjustment/Desaturate.cs \
-	ColorAdjustment/FullColorAdjustment.cs \
-	ColorAdjustment/SepiaTone.cs \
-	ControlOverlay.cs \
-	Core/App.cs \
-	Core/ColorManagement.cs \
-	Core/Photo.cs \
-	Core/PhotoVersion.cs \
-	Db.cs \
-	DependentListStore.cs \
-	DragDropTargets.cs \
-	Editors/Editor.cs \
-	Editors/AutoStretchEditor.cs \
-	Editors/CropEditor.cs \
-	Editors/ColorEditor.cs \
-	Editors/DesaturateEditor.cs \
-	Editors/RedEyeEditor.cs \
-	Editors/SepiaEditor.cs \
-	Editors/SoftFocusEditor.cs \
-	Editors/TiltEditor.cs \
-	ExportStore.cs \
-	Extensions/ExportMenuItemNode.cs \
-	Extensions/IExporter.cs \
-	Extensions/ICommand.cs \
-	Extensions/IMenuGenerator.cs \
-	Extensions/IService.cs \
-	Extensions/MenuNode.cs \
-	Extensions/CommandMenuItemNode.cs \
-	Extensions/ComplexMenuItemNode.cs \
-	Extensions/PhotoSelectionCondition.cs \
-	Extensions/PopupCommands.cs \
-	Extensions/ServiceNode.cs \
-	Extensions/SidebarPage.cs \
-	Extensions/SidebarPageNode.cs \
-	Extensions/TransitionNode.cs \
-	Extensions/ViewModeCondition.cs \
-	Fader.cs \
-	Filters/ChmodFilter.cs \
-	Filters/FilterRequest.cs \
-	Filters/FilterSet.cs \
-	Filters/IFilter.cs \
-	Filters/JpegFilter.cs \
-	Filters/ResizeFilter.cs \
-	Filters/SharpFilter.cs \
-	Filters/UniqueNameFilter.cs \
-	Filters/WhiteListFilter.cs \
-	FolderQueryWidget.cs \
-	FullScreenView.cs \
-	GroupAdaptor.cs \
-	GroupSelector.cs \
-	Accelerometer.cs \
-	Histogram.cs \
-	Loaders/AreaPreparedEventArgs.cs \
-	Loaders/AreaUpdatedEventArgs.cs \
-	Loaders/ImageLoader.cs \
-	Loaders/IImageLoader.cs \
-	Loaders/GdkImageLoader.cs \
-	ImageLoaderThread.cs \
-	Import/ImportController.cs \
-	Import/ImportSource.cs \
-	Import/FileImportSource.cs \
-	Import/MetadataImporter.cs \
-	InfoOverlay.cs \
-	ItemAction.cs \
-	Imaging/DCRawFile.cs \
-	Imaging/Ciff.cs \
-	Imaging/ImageFile.cs \
-	Imaging/InternalProcess.cs \
-	Imaging/IOChannel.cs \
-	Imaging/RafFile.cs \
-	Imaging/Tiff.cs \
-	JobStore.cs \
-	Jobs/SyncMetadataJob.cs \
-	Jobs/CalculateHashJob.cs \
-	Loupe.cs \
-	MainWindow.cs \
-	MemorySurface.cs \
-	MetaStore.cs \
-	PhotoEventArgs.cs \
-	PhotoImageView.cs \
-	PhotoLoader.cs \
-	PhotoPopup.cs \
-	PhotoQuery.cs \
-	PhotoStore.cs \
-	PhotoTagMenu.cs \
-	PhotoVersionCommands.cs \
-	PhotoVersionMenu.cs \
-	PhotoView.cs \
-	PixbufUtils.cs \
-	PixbufCache.cs \
-	Preferences.cs  \
-	PrintOperation.cs \
-	ProgressItem.cs \
-	QueuedSqliteDatabase.cs \
-	RotateCommand.cs \
-	RollStore.cs \
-	SelectionDataExtensions.cs \
-	SendEmail.cs \
-	XScreenSaverSlide.cs \
-	SingleView.cs \
-	Sharpener.cs \
-	SoftFocus.cs \
-	TagCommands.cs \
-	TagPopup.cs \
-	TagQueryWidget.cs \
-	TagSelectionWidget.cs \
-	TagStore.cs \
-	ThumbnailCache.cs \
-	ThumbnailGenerator.cs \
-	Term.cs \
-	TimeAdaptor.cs \
-	TipWindow.cs \
-	UI.Dialog/AboutDialog.cs \
-	UI.Dialog/AdjustTimeDialog.cs \
-	UI.Dialog/BuilderDialog.cs \
-	UI.Dialog/DateRangeDialog.cs \
-	UI.Dialog/EditExceptionDialog.cs \
-	UI.Dialog/EditTagDialog.cs \
-	UI.Dialog/EditTagIconDialog.cs \
-	UI.Dialog/ExceptionDialog.cs \
-	UI.Dialog/GladeDialog.cs \
-	UI.Dialog/ImportDialog.cs \
-	UI.Dialog/LastRollDialog.cs \
-	UI.Dialog/PreferenceDialog.cs \
-	UI.Dialog/ProgressDialog.cs \
-	UI.Dialog/RatingFilterDialog.cs \
-	UI.Dialog/RepairDbDialog.cs \
-	UI.Dialog/RepairDialog.cs \
-	UI.Dialog/SelectionRatioDialog.cs \
-	UI.Dialog/TagSelectionDialog.cs \
-	UI.Dialog/ThreadProgressDialog.cs \
-	Updater.cs \
-	UriCollection.cs \
-	Util.cs \
-	Vector.cs \
-	ThumbnailCommand.cs \
-	QueryWidget.cs \
-	Query/HiddenTag.cs \
-	Widgets/SlideShow.cs \
-	Widgets/CompositeUtils.cs \
-	Widgets/Dissolve.cs \
-	Widgets/EditorPage.cs \
-	Widgets/Filmstrip.cs \
-	Widgets/FindBar.cs \
-	Widgets/FolderTreePage.cs \
-	Widgets/FolderTreeView.cs \
-	Widgets/FolderTreeModel.cs \
-	Widgets/CellRendererTextProgress.cs\
-	Widgets/IEffect.cs \
-	Widgets/ITransition.cs \
-	Widgets/IconView.cs \
-	Widgets/ImageInfo.cs \
-	Widgets/InfoBox.cs \
-	Widgets/MetadataDisplay.cs \
-	Widgets/PanZoom.cs \
-	Widgets/PreviewPopup.cs  \
-	Widgets/Push.cs \
-	Widgets/QueryView.cs \
-	Widgets/RatingMenuItem.cs \
-	Widgets/Reveal.cs \
-	Widgets/ScalingIconView.cs \
-	Widgets/Sidebar.cs \
-	Widgets/TagEntry.cs \
-	Widgets/TagMenu.cs \
-	Widgets/TagView.cs \
-	Widgets/Tests/FindBarTests.cs \
-	Widgets/TrayView.cs \
-	Widgets/ViewContext.cs \
-	Widgets/Wipe.cs \
-	main.cs \
-	Tests/ImageFileTests.cs \
-	Tests/UpdaterTests.cs
+run:
+	@pushd $(top_builddir); \
+	make run; \
+	popd;
 
-
-RESOURCES = \
-	../COPYING \
-	../icons/f-spot-not.png \
-	../icons/f-spot-128.png \
-	../icons/flower.png \
-	f-spot.glade \
-	ui/import.ui \
-	ui/mail_dialog.ui \
-	ui/main_window.ui \
-	ui/single_view.ui \
-	ui/version_name_dialog.ui \
-	ui/viewer_preferences.ui \
-	UI.Dialog/ui/AdjustTimeDialog.ui \
-	UI.Dialog/ui/DateRangeDialog.ui \
-	UI.Dialog/ui/EditTagDialog.ui \
-	UI.Dialog/ui/EditTagIconDialog.ui \
-	UI.Dialog/ui/PreferenceDialog.ui \
-	UI.Dialog/ui/RatingFilterDialog.ui \
-	UI.Dialog/ui/CreateTagDialog.ui \
-	UI.Dialog/ui/LastImportRollFilterDialog.ui \
-	UI.Dialog/ui/RepairDialog.ui \
-	FSpot.addin.xml
-
-include $(top_srcdir)/build/build.mk
-
-bin_SCRIPTS = f-spot
-EXTRA_DIST += f-spot.exe.config
-module_SCRIPTS += f-spot.exe.config
+MAINTAINERCLEANFILES = Makefile.in
 
diff --git a/src/Makefile.in b/src/Makefile.in
index ff2608d..213f95e 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -14,7 +14,6 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
-
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
@@ -34,13 +33,9 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(srcdir)/AssemblyInfo.cs.in $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/f-spot.exe.config.in \
-	$(srcdir)/f-spot.in $(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
 subdir = src
+DIST_COMMON = $(srcdir)/AssemblyInfo.cs.in $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
@@ -51,37 +46,16 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = f-spot AssemblyInfo.cs f-spot.exe.config
+CONFIG_CLEAN_FILES = AssemblyInfo.cs
 CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(bin_SCRIPTS) $(module_SCRIPTS)
+SOURCES =
 DIST_SOURCES =
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	html-recursive info-recursive install-data-recursive \
@@ -136,6 +110,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -145,9 +123,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -161,6 +136,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -188,6 +164,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -284,14 +261,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -344,436 +319,16 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 SUBDIRS = \
-	Cms \
-	Utils \
 	Core \
-	Query \
-	JobScheduler \
-	Bling \
-	Platform \
-	Widgets
-
-ASSEMBLY = f-spot
-TARGET = exe
-LINK = $(REF_FSPOT) $(am__append_1)
-ASSEMBLY_BUILD_FLAGS = -unsafe
-SOURCES = \
-	BitConverter.cs \
-	PhotoList.cs \
-	ColorAdjustment/Adjustment.cs \
-	ColorAdjustment/AutoStretch.cs \
-	ColorAdjustment/Desaturate.cs \
-	ColorAdjustment/FullColorAdjustment.cs \
-	ColorAdjustment/SepiaTone.cs \
-	ControlOverlay.cs \
-	Core/App.cs \
-	Core/ColorManagement.cs \
-	Core/Photo.cs \
-	Core/PhotoVersion.cs \
-	Db.cs \
-	DependentListStore.cs \
-	DragDropTargets.cs \
-	Editors/Editor.cs \
-	Editors/AutoStretchEditor.cs \
-	Editors/CropEditor.cs \
-	Editors/ColorEditor.cs \
-	Editors/DesaturateEditor.cs \
-	Editors/RedEyeEditor.cs \
-	Editors/SepiaEditor.cs \
-	Editors/SoftFocusEditor.cs \
-	Editors/TiltEditor.cs \
-	ExportStore.cs \
-	Extensions/ExportMenuItemNode.cs \
-	Extensions/IExporter.cs \
-	Extensions/ICommand.cs \
-	Extensions/IMenuGenerator.cs \
-	Extensions/IService.cs \
-	Extensions/MenuNode.cs \
-	Extensions/CommandMenuItemNode.cs \
-	Extensions/ComplexMenuItemNode.cs \
-	Extensions/PhotoSelectionCondition.cs \
-	Extensions/PopupCommands.cs \
-	Extensions/ServiceNode.cs \
-	Extensions/SidebarPage.cs \
-	Extensions/SidebarPageNode.cs \
-	Extensions/TransitionNode.cs \
-	Extensions/ViewModeCondition.cs \
-	Fader.cs \
-	Filters/ChmodFilter.cs \
-	Filters/FilterRequest.cs \
-	Filters/FilterSet.cs \
-	Filters/IFilter.cs \
-	Filters/JpegFilter.cs \
-	Filters/ResizeFilter.cs \
-	Filters/SharpFilter.cs \
-	Filters/UniqueNameFilter.cs \
-	Filters/WhiteListFilter.cs \
-	FolderQueryWidget.cs \
-	FullScreenView.cs \
-	GroupAdaptor.cs \
-	GroupSelector.cs \
-	Accelerometer.cs \
-	Histogram.cs \
-	Loaders/AreaPreparedEventArgs.cs \
-	Loaders/AreaUpdatedEventArgs.cs \
-	Loaders/ImageLoader.cs \
-	Loaders/IImageLoader.cs \
-	Loaders/GdkImageLoader.cs \
-	ImageLoaderThread.cs \
-	Import/ImportController.cs \
-	Import/ImportSource.cs \
-	Import/FileImportSource.cs \
-	Import/MetadataImporter.cs \
-	InfoOverlay.cs \
-	ItemAction.cs \
-	Imaging/DCRawFile.cs \
-	Imaging/Ciff.cs \
-	Imaging/ImageFile.cs \
-	Imaging/InternalProcess.cs \
-	Imaging/IOChannel.cs \
-	Imaging/RafFile.cs \
-	Imaging/Tiff.cs \
-	JobStore.cs \
-	Jobs/SyncMetadataJob.cs \
-	Jobs/CalculateHashJob.cs \
-	Loupe.cs \
-	MainWindow.cs \
-	MemorySurface.cs \
-	MetaStore.cs \
-	PhotoEventArgs.cs \
-	PhotoImageView.cs \
-	PhotoLoader.cs \
-	PhotoPopup.cs \
-	PhotoQuery.cs \
-	PhotoStore.cs \
-	PhotoTagMenu.cs \
-	PhotoVersionCommands.cs \
-	PhotoVersionMenu.cs \
-	PhotoView.cs \
-	PixbufUtils.cs \
-	PixbufCache.cs \
-	Preferences.cs  \
-	PrintOperation.cs \
-	ProgressItem.cs \
-	QueuedSqliteDatabase.cs \
-	RotateCommand.cs \
-	RollStore.cs \
-	SelectionDataExtensions.cs \
-	SendEmail.cs \
-	XScreenSaverSlide.cs \
-	SingleView.cs \
-	Sharpener.cs \
-	SoftFocus.cs \
-	TagCommands.cs \
-	TagPopup.cs \
-	TagQueryWidget.cs \
-	TagSelectionWidget.cs \
-	TagStore.cs \
-	ThumbnailCache.cs \
-	ThumbnailGenerator.cs \
-	Term.cs \
-	TimeAdaptor.cs \
-	TipWindow.cs \
-	UI.Dialog/AboutDialog.cs \
-	UI.Dialog/AdjustTimeDialog.cs \
-	UI.Dialog/BuilderDialog.cs \
-	UI.Dialog/DateRangeDialog.cs \
-	UI.Dialog/EditExceptionDialog.cs \
-	UI.Dialog/EditTagDialog.cs \
-	UI.Dialog/EditTagIconDialog.cs \
-	UI.Dialog/ExceptionDialog.cs \
-	UI.Dialog/GladeDialog.cs \
-	UI.Dialog/ImportDialog.cs \
-	UI.Dialog/LastRollDialog.cs \
-	UI.Dialog/PreferenceDialog.cs \
-	UI.Dialog/ProgressDialog.cs \
-	UI.Dialog/RatingFilterDialog.cs \
-	UI.Dialog/RepairDbDialog.cs \
-	UI.Dialog/RepairDialog.cs \
-	UI.Dialog/SelectionRatioDialog.cs \
-	UI.Dialog/TagSelectionDialog.cs \
-	UI.Dialog/ThreadProgressDialog.cs \
-	Updater.cs \
-	UriCollection.cs \
-	Util.cs \
-	Vector.cs \
-	ThumbnailCommand.cs \
-	QueryWidget.cs \
-	Query/HiddenTag.cs \
-	Widgets/SlideShow.cs \
-	Widgets/CompositeUtils.cs \
-	Widgets/Dissolve.cs \
-	Widgets/EditorPage.cs \
-	Widgets/Filmstrip.cs \
-	Widgets/FindBar.cs \
-	Widgets/FolderTreePage.cs \
-	Widgets/FolderTreeView.cs \
-	Widgets/FolderTreeModel.cs \
-	Widgets/CellRendererTextProgress.cs\
-	Widgets/IEffect.cs \
-	Widgets/ITransition.cs \
-	Widgets/IconView.cs \
-	Widgets/ImageInfo.cs \
-	Widgets/InfoBox.cs \
-	Widgets/MetadataDisplay.cs \
-	Widgets/PanZoom.cs \
-	Widgets/PreviewPopup.cs  \
-	Widgets/Push.cs \
-	Widgets/QueryView.cs \
-	Widgets/RatingMenuItem.cs \
-	Widgets/Reveal.cs \
-	Widgets/ScalingIconView.cs \
-	Widgets/Sidebar.cs \
-	Widgets/TagEntry.cs \
-	Widgets/TagMenu.cs \
-	Widgets/TagView.cs \
-	Widgets/Tests/FindBarTests.cs \
-	Widgets/TrayView.cs \
-	Widgets/ViewContext.cs \
-	Widgets/Wipe.cs \
-	main.cs \
-	Tests/ImageFileTests.cs \
-	Tests/UpdaterTests.cs
-
-RESOURCES = \
-	../COPYING \
-	../icons/f-spot-not.png \
-	../icons/f-spot-128.png \
-	../icons/flower.png \
-	f-spot.glade \
-	ui/import.ui \
-	ui/mail_dialog.ui \
-	ui/main_window.ui \
-	ui/single_view.ui \
-	ui/version_name_dialog.ui \
-	ui/viewer_preferences.ui \
-	UI.Dialog/ui/AdjustTimeDialog.ui \
-	UI.Dialog/ui/DateRangeDialog.ui \
-	UI.Dialog/ui/EditTagDialog.ui \
-	UI.Dialog/ui/EditTagIconDialog.ui \
-	UI.Dialog/ui/PreferenceDialog.ui \
-	UI.Dialog/ui/RatingFilterDialog.ui \
-	UI.Dialog/ui/CreateTagDialog.ui \
-	UI.Dialog/ui/LastImportRollFilterDialog.ui \
-	UI.Dialog/ui/RepairDialog.ui \
-	FSpot.addin.xml
-
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+	Clients \
+	Extensions
 
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES) f-spot.exe.config
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
-	$(THEME_ICONS_SOURCE) f-spot.exe.config
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
+EXTRA_DIST = AssemblyInfo.cs.in
 MAINTAINERCLEANFILES = Makefile.in
-bin_SCRIPTS = f-spot
 all: all-recursive
 
 .SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -803,80 +358,8 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
-f-spot: $(top_builddir)/config.status $(srcdir)/f-spot.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 AssemblyInfo.cs: $(top_builddir)/config.status $(srcdir)/AssemblyInfo.cs.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-f-spot.exe.config: $(top_builddir)/config.status $(srcdir)/f-spot.exe.config.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-install-binSCRIPTS: $(bin_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
-	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-binSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(bindir)" && rm -f $$files
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -1079,12 +562,9 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-recursive
-all-am: Makefile $(SCRIPTS)
+all-am: Makefile
 installdirs: installdirs-recursive
 installdirs-am:
-	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
 install: install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
@@ -1102,12 +582,10 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -1133,13 +611,13 @@ info: info-recursive
 
 info-am:
 
-install-data-am: install-data-local install-moduleSCRIPTS
+install-data-am:
 
 install-dvi: install-dvi-recursive
 
 install-dvi-am:
 
-install-exec-am: install-binSCRIPTS
+install-exec-am:
 
 install-html: install-html-recursive
 
@@ -1177,8 +655,7 @@ ps: ps-recursive
 
 ps-am:
 
-uninstall-am: uninstall-binSCRIPTS uninstall-local \
-	uninstall-moduleSCRIPTS
+uninstall-am:
 
 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
 	install-am install-strip tags-recursive
@@ -1187,68 +664,22 @@ uninstall-am: uninstall-binSCRIPTS uninstall-local \
 	all all-am check check-am clean clean-generic clean-libtool \
 	ctags ctags-recursive distclean distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-binSCRIPTS \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs installdirs-am maintainer-clean \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
 	maintainer-clean-generic mostlyclean mostlyclean-generic \
 	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am uninstall-binSCRIPTS uninstall-local \
-	uninstall-moduleSCRIPTS
+	uninstall uninstall-am
 
 
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
+run:
 	@pushd $(top_builddir); \
 	make run; \
 	popd;
 
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/src/MemorySurface.cs b/src/MemorySurface.cs
deleted file mode 100644
index 7c5ccea..0000000
--- a/src/MemorySurface.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 
- * MemorySurface.cs
- *
- * Copyright 2007 Novell Inc.
- *
- * Author
- * 	Larry Ewing <lewing at novell.com>
- *	Stephane Delcroix <stephane at delcroix.org>	
- *
- * See COPYING for license information.
- *
- */
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace FSpot {
-	public sealed class MemorySurface : Cairo.Surface {
-		static class NativeMethods
-		{
-			[DllImport ("libfspot")]
-			public static extern IntPtr f_image_surface_create (Cairo.Format format, int width, int height);
-			
-			[DllImport ("libfspot")]
-			public static extern IntPtr f_image_surface_get_data (IntPtr surface);
-	
-			[DllImport ("libfspot")]
-			public static extern Cairo.Format f_image_surface_get_format (IntPtr surface);
-	
-			[DllImport ("libfspot")]
-			public static extern int f_image_surface_get_width (IntPtr surface);
-	
-			[DllImport ("libfspot")]
-			public static extern int f_image_surface_get_height (IntPtr surface);
-	
-			[DllImport("libfspot")]
-			public static extern IntPtr f_pixbuf_to_cairo_surface (IntPtr handle);
-
-			[DllImport("libfspot")]
-			public static extern IntPtr f_pixbuf_from_cairo_surface (IntPtr handle);
-		}
-
-		public MemorySurface (Cairo.Format format, int width, int height)
-			: this (NativeMethods.f_image_surface_create (format, width, height))
-		{
-		}
-
-		public MemorySurface (IntPtr handle) : base (handle, true)
-		{
-			if (DataPtr == IntPtr.Zero)
-				throw new ApplicationException ("Missing image data");
-		}
-
-		public IntPtr DataPtr {
-			get { return NativeMethods.f_image_surface_get_data (Handle); }
-		}
-
-		public Cairo.Format Format {
-			get { return NativeMethods.f_image_surface_get_format (Handle); }
-		}
-		
-		public int Width {
-			get { return NativeMethods.f_image_surface_get_width (Handle); }
-		}
-
-		public int Height {
-			get { return NativeMethods.f_image_surface_get_height (Handle); }
-		}
-
-		public static MemorySurface CreateSurface (Gdk.Pixbuf pixbuf)
-		{
-			IntPtr surface = NativeMethods.f_pixbuf_to_cairo_surface (pixbuf.Handle);
-			return new MemorySurface (surface);
-		}
-
-		public static Gdk.Pixbuf CreatePixbuf (MemorySurface mem)
-		{
-			IntPtr result = NativeMethods.f_pixbuf_from_cairo_surface (mem.Handle);
-			return (Gdk.Pixbuf) GLib.Object.GetObject (result, true);
-		}
-	}
-}
-
-
diff --git a/src/MetaStore.cs b/src/MetaStore.cs
deleted file mode 100644
index 13cc99c..0000000
--- a/src/MetaStore.cs
+++ /dev/null
@@ -1,161 +0,0 @@
-using Gdk;
-using Gtk;
-using Mono.Data.SqliteClient;
-using System.Collections;
-using System.IO;
-using System;
-using Banshee.Database;
-using FSpot;
-
-public class MetaItem : DbItem {
-	private string name;
-	public string Name {
-		get { return name; }
-		set { name = value; }
-	}
-
-	private string data;
-	public string Value {
-		get { return data; }
-		set { data = value; }
-	}
-	
-	public int ValueAsInt {
-		get { return System.Int32.Parse (Value); }
-		set { Value = value.ToString (); }
-	}
-
-	public MetaItem (uint id, string name, string data) : base (id)
-	{
-		this.name = name;
-		this.data = data;
-	}
-}
-
-public class MetaStore : DbStore<MetaItem> {
-	private const string version = "F-Spot Version";
-	private const string db_version = "F-Spot Database Version";
-	private const string hidden = "Hidden Tag Id";
-
-	public MetaItem FSpotVersion {
-		get { return GetByName (version); }
-	}
-	
-	public MetaItem DatabaseVersion {
-		get { return GetByName (db_version); }
-	}
-	
-	public MetaItem HiddenTagId {
-		get { return GetByName (hidden); }
-	}
-
-	private MetaItem GetByName (string name)
-	{
-		foreach (MetaItem i in this.item_cache.Values)
-			if (i.Name == name)
-				return i;
-
-		// Otherwise make it and return it
-		return Create (name, null);
-	}
-
-	private void CreateTable ()
-	{
-		Database.ExecuteNonQuery ( 
-			"CREATE TABLE meta (\n" +
-			"	id	INTEGER PRIMARY KEY NOT NULL, \n" +
-			"	name	TEXT UNIQUE NOT NULL, \n" +
-			"	data	TEXT\n" +
-			")");
-	}
-
-	private void CreateDefaultItems (bool is_new)
-	{
-		Create (version, FSpot.Defines.VERSION);
-		Create (db_version, (is_new) ? FSpot.Database.Updater.LatestVersion.ToString () : "0");
-		
-		// Get the hidden tag id, if it exists
-		try {
-			string id = (string)Database.QuerySingle("SELECT id FROM tags WHERE name = 'Hidden'");
-			Create (hidden, id);
-		} catch (Exception) {}
-	}
-	
-	private void LoadAllItems ()
-	{
-		SqliteDataReader reader = Database.Query("SELECT id, name, data FROM meta");
-
-		while (reader.Read ()) {
-			uint id = Convert.ToUInt32 (reader ["id"]);
-
-			string name = reader ["name"].ToString ();
-
-			string data = null;
-			if (reader ["data"] != null)
-				data = reader ["data"].ToString ();
-
-			MetaItem item = new MetaItem (id, name, data);
-
-			AddToCache (item);
-		}
-
-		reader.Close ();
-
-		if (FSpotVersion.Value != FSpot.Defines.VERSION) {
-			FSpotVersion.Value = FSpot.Defines.VERSION;
-			Commit (FSpotVersion);
-		}
-	}
-
-	private MetaItem Create (string name, string data)
-	{
-
-		uint id = (uint)Database.Execute(new DbCommand("INSERT INTO meta (name, data) VALUES (:name, :data)",
-				"name", name, "data", (data == null) ? "NULL" : data ));
-		
-		//FIXME This smells bad. This line used to be *before* the
-		//Command.executeNonQuery. It smells of a bug, but there might
-		//have been a reason for this
-
-		MetaItem item = new MetaItem (id, name, data);
-
-		
-		AddToCache (item);
-		EmitAdded (item);
-
-		return item;
-	}
-	
-	public override void Commit (MetaItem item)
-	{
-		Database.ExecuteNonQuery(new DbCommand("UPDATE meta SET data = :data WHERE name = :name", "name", item.Name, "data", item.Value));
-		
-		EmitChanged (item);
-	}
-	
-	public override MetaItem Get (uint id)
-	{
-		return LookupInCache (id);
-	}
-	
-	public override void Remove (MetaItem item)
-	{
-		RemoveFromCache (item);
-		
-		Database.ExecuteNonQuery (new DbCommand ("DELETE FROM meta WHERE id = :id", "id", item.Id));
-
-		EmitRemoved (item);
-	}
-
-	// Constructor
-
-	public MetaStore (QueuedSqliteDatabase database, bool is_new)
-		: base (database, true)
-	{
-		if (is_new || !Database.TableExists ("meta")) {
-			CreateTable ();
-			CreateDefaultItems (is_new);
-		} else
-			LoadAllItems ();
-	}
-}
diff --git a/src/PhotoEventArgs.cs b/src/PhotoEventArgs.cs
deleted file mode 100644
index 5b0b6e8..0000000
--- a/src/PhotoEventArgs.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * FSpot.PhotoEventArgs.cs
- *
- * Author(s):
- *	Ruben Vermeersch
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-namespace FSpot
-{
-	public class PhotoEventArgs : DbItemEventArgs<Photo> {
-		PhotosChanges changes;
-		public PhotosChanges Changes {
-			get { return changes; }
-		}
-
-		public PhotoEventArgs (Photo photo, PhotosChanges changes) : this (new Photo[] {photo}, changes)
-		{
-		}
-
-		public PhotoEventArgs (Photo[] photos, PhotosChanges changes) : base (photos)
-		{
-			this.changes = changes;
-		}
-	}
-}
diff --git a/src/PhotoImageView.cs b/src/PhotoImageView.cs
deleted file mode 100644
index e2aa723..0000000
--- a/src/PhotoImageView.cs
+++ /dev/null
@@ -1,429 +0,0 @@
-//
-// FSpot.Widgets.PhotoImageView.cs
-//
-// Copyright (c) 2004-2009 Novell, Inc.
-//
-// Author(s)
-//	Larry Ewing  <lewing at novell.com>
-//	Stephane Delcroix  <stephane at delcroix.org>
-//
-// This is free software. See COPYING for details.
-//
-
-using System;
-using FSpot.Editors;
-using FSpot.Utils;
-using FSpot.Loaders;
-
-using Hyena;
-using Gdk;
-
-using TagLib.Image;
-
-namespace FSpot.Widgets {
-	public class PhotoImageView : ImageView {
-#region public API
-
-		protected PhotoImageView (IntPtr raw) : base (raw) { }
-
-		public PhotoImageView (IBrowsableCollection query) : this (new BrowsablePointer (query, -1))
-		{
-		}
-
-		public PhotoImageView (BrowsablePointer item) : base ()
-		{
-			Accelerometer.OrientationChanged += HandleOrientationChanged;
-			Preferences.SettingChanged += OnPreferencesChanged;
-
-			this.item = item;
-			item.Changed += HandlePhotoItemChanged;
-		}
-
-		public BrowsablePointer Item {
-			get { return item; }
-		}
-
-		public IBrowsableCollection Query {
-			get { return item.Collection; }
-		}
-
-		public Loupe Loupe {
-			get { return loupe; }
-		}
-
-		public Gdk.Pixbuf CompletePixbuf ()
-		{
-			//FIXME: this should be an async call
-			if (loader != null)
-				while (loader.Loading)
-					Gtk.Application.RunIteration ();
-			return this.Pixbuf;
-		}
-
-		public void Reload ()
-		{
-			if (Item == null || !Item.IsValid)
-				return;
-			
-			HandlePhotoItemChanged (this, null);
-		}
-
-		// Zoom scaled between 0.0 and 1.0
-		public double NormalizedZoom {
-			get { return (Zoom - MIN_ZOOM) / (MAX_ZOOM - MIN_ZOOM); }
-			set { Zoom = (value * (MAX_ZOOM - MIN_ZOOM)) + MIN_ZOOM; }
-		}
-		
-		public event EventHandler PhotoChanged;
-#endregion
-
-#region Gtk widgetry
-		protected override void OnStyleSet (Gtk.Style previous)
-		{
-			CheckPattern = new CheckPattern (this.Style.Backgrounds [(int)Gtk.StateType.Normal]);
-		}
-
-		protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
-		{
-			if ((evnt.State & (ModifierType.Mod1Mask | ModifierType.ControlMask)) != 0)
-				return base.OnKeyPressEvent (evnt);
-
-			bool handled = true;
-		
-			// Scroll if image is zoomed in (scrollbars are visible)
-			Gtk.ScrolledWindow scrolled_w = this.Parent as Gtk.ScrolledWindow;
-			bool scrolled = scrolled_w != null && !this.Fit;
-		
-			// Go to the next/previous photo when not zoomed (no scrollbars)
-			switch (evnt.Key) {
-			case Gdk.Key.Up:
-			case Gdk.Key.KP_Up:
-			case Gdk.Key.Left:
-			case Gdk.Key.KP_Left:
-			case Gdk.Key.h:
-			case Gdk.Key.H:
-			case Gdk.Key.k:
-			case Gdk.Key.K:
-				if (scrolled)
-					handled = false;
-				else
-					this.Item.MovePrevious ();
-				break;
-			case Gdk.Key.Page_Up:
-			case Gdk.Key.KP_Page_Up:
-			case Gdk.Key.BackSpace:
-			case Gdk.Key.b:
-			case Gdk.Key.B:
-				this.Item.MovePrevious ();
-				break;
-			case Gdk.Key.Down:
-			case Gdk.Key.KP_Down:
-			case Gdk.Key.Right:
-			case Gdk.Key.KP_Right:
-			case Gdk.Key.j:
-			case Gdk.Key.J:
-			case Gdk.Key.l:
-			case Gdk.Key.L:
-				if (scrolled)
-					handled = false;
-				else
-					this.Item.MoveNext ();
-				break;
-			case Gdk.Key.Page_Down:
-			case Gdk.Key.KP_Page_Down:
-			case Gdk.Key.space:
-			case Gdk.Key.KP_Space:
-			case Gdk.Key.n:
-			case Gdk.Key.N:
-				this.Item.MoveNext ();
-				break;
-			case Gdk.Key.Home:
-			case Gdk.Key.KP_Home:
-				this.Item.Index = 0;
-				break;
-			case Gdk.Key.r:
-			case Gdk.Key.R:
-				this.Item.Index = new Random().Next(0, this.Query.Count - 1);
-				break;
-			case Gdk.Key.End:
-			case Gdk.Key.KP_End:
-				this.Item.Index = this.Query.Count - 1;
-				break;
-			default:
-				handled = false;
-				break;
-			}
-
-			return handled || base.OnKeyPressEvent (evnt);
-		}
-
-		protected override void OnDestroyed ()
-		{
-			if (loader != null) {
-				loader.AreaUpdated -= HandlePixbufAreaUpdated;
-				loader.AreaPrepared -= HandlePixbufPrepared;
-				loader.Dispose ();
-			}
-			base.OnDestroyed ();
-		}
-#endregion
-
-#region loader		
-		uint timer;
-		IImageLoader loader;
-		void Load (SafeUri uri)
-		{
-			timer = Log.DebugTimerStart ();
-			if (loader != null)
-				loader.Dispose ();
-
-			loader = ImageLoader.Create (uri);
-			loader.AreaPrepared += HandlePixbufPrepared;
-			loader.AreaUpdated += HandlePixbufAreaUpdated;
-			loader.Completed += HandleDone;
-			loader.Load (uri);
-		}
-
-		void HandlePixbufPrepared (object sender, AreaPreparedEventArgs args)
-		{
-			IImageLoader loader = sender as IImageLoader;
-			if (loader != this.loader)
-				return;
-
-			if (!ShowProgress)
-				return;
-
-			Gdk.Pixbuf prev = this.Pixbuf;
-			this.Pixbuf = loader.Pixbuf;
-			PixbufOrientation = Accelerometer.GetViewOrientation (loader.PixbufOrientation);
-			if (prev != null)
-				prev.Dispose ();
-
-			this.ZoomFit (args.ReducedResolution);
-		}
-
-		void HandlePixbufAreaUpdated (object sender, AreaUpdatedEventArgs args)
-		{
-			IImageLoader loader = sender as IImageLoader;
-			if (loader != this.loader)
-				return;
-
-			if (!ShowProgress)
-				return;
-
-			Gdk.Rectangle area = this.ImageCoordsToWindow (args.Area);
-			this.QueueDrawArea (area.X, area.Y, area.Width, area.Height);
-		}
-
-		void HandleDone (object sender, System.EventArgs args)
-		{
-			Log.DebugTimerPrint (timer, "Loading image took {0}");
-			IImageLoader loader = sender as IImageLoader;
-			if (loader != this.loader)
-				return;
-
-			Pixbuf prev = this.Pixbuf;
-			if (Pixbuf != loader.Pixbuf)
-				Pixbuf = loader.Pixbuf;
-
-			if (Pixbuf == null) {
-				// FIXME: Do we have test cases for this ???
-
-				// FIXME in some cases the image passes completely through the
-				// pixbuf loader without properly loading... I'm not sure what to do about this other
-				// than try to load the image one last time.
-				try {
-					Log.Warning ("Falling back to file loader");
-					Pixbuf = PhotoLoader.Load (item.Collection, item.Index);
-				} catch (Exception e) {
-					LoadErrorImage (e);
-				}
-			}
-
-			if (loader.Pixbuf != null) //FIXME: this test in case the photo was loaded with the direct loader
-				PixbufOrientation = Accelerometer.GetViewOrientation (loader.PixbufOrientation);
-			else
-				PixbufOrientation = ImageOrientation.TopLeft;
-
-			if (Pixbuf == null)
-				LoadErrorImage (null);
-			else
-				ZoomFit ();
-
-			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)
-		{
-			Reload ();
-		}
-		
-		bool progressive_display = true;
-		bool ShowProgress {
-			get { return progressive_display; }
-		}
-
-		void LoadErrorImage (System.Exception e)
-		{
-			// FIXME we should check the exception type and do something
-			// like offer the user a chance to locate the moved file and
-			// update the db entry, but for now just set the error pixbuf	
-			Pixbuf old = Pixbuf;
-			Pixbuf = new Pixbuf (PixbufUtils.ErrorPixbuf, 0, 0, 
-					     PixbufUtils.ErrorPixbuf.Width, 
-					     PixbufUtils.ErrorPixbuf.Height);
-			if (old != null)
-				old.Dispose ();
-
-			PixbufOrientation = ImageOrientation.TopLeft;
-			ZoomFit (false);
-		}
-
-		void HandlePhotoItemChanged (object sender, BrowsablePointerChangedEventArgs args) 
-		{
-			// If it is just the position that changed fall out
-			if (args != null && 
-			    args.PreviousItem != null &&
-			    Item.IsValid &&
-			    (args.PreviousIndex != item.Index) &&
-			    (this.Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri))
-				return;
-
-			// Don't reload if the image didn't change at all.
-			if (args != null && args.Changes != null &&
-			    !args.Changes.DataChanged &&
-			    args.PreviousItem != null &&
-			    Item.IsValid &&
-			    this.Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri)
-				return;
-
-			// Same image, don't load it progressively
-			if (args != null &&
-			    args.PreviousItem != null && 
-			    Item.IsValid && 
-			    Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri)
-				progressive_display = false;
-
-			try {
-				if (Item.IsValid) 
-					Load (Item.Current.DefaultVersion.Uri);
-				else
-					LoadErrorImage (null);
-			} catch (System.Exception e) {
-				Log.DebugException (e);
-				LoadErrorImage (e);
-			}
-			
-			Selection = Gdk.Rectangle.Zero;
-
-			EventHandler eh = PhotoChanged;
-			if (eh != null)
-				eh (this, EventArgs.Empty);
-		}
-		
-
-		private void HandleLoupeDestroy (object sender, EventArgs args)
-		{
-			if (sender == loupe)
-				loupe = null;
-
-			if (sender == sharpener)
-				sharpener = null;
-
-		}
-
-
-		public void ShowHideLoupe ()
-		{
-			if (loupe == null) {
-				loupe = new Loupe (this);
-				loupe.Destroyed += HandleLoupeDestroy;
-				loupe.Show ();
-			} else {
-				loupe.Destroy ();	
-			}
-			
-		}
-		
-		public void ShowSharpener ()
-		{
-			if (sharpener == null) {
-				sharpener = new Sharpener (this);
-				sharpener.Destroyed += HandleLoupeDestroy;
-			}
-
-			sharpener.Show ();	
-		}
-
-		void OnPreferencesChanged (object sender, NotifyEventArgs args)
-		{
-			LoadPreference (args.Key);
-		}
-
-		void LoadPreference (String key)
-		{
-			switch (key) {
-			case Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE:
-				Reload ();
-				break;
-			}
-		}
-
-		protected override void ApplyColorTransform (Pixbuf pixbuf)
-		{
-			Cms.Profile screen_profile;
-			if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) 
-				FSpot.ColorManagement.ApplyProfile (pixbuf, screen_profile);
-		}
-
-		bool crop_helpers = true;
-		public bool CropHelpers {
-			get { return crop_helpers; }
-			set { 
-				if (crop_helpers == value)
-					return;
-				crop_helpers = value;
-				QueueDraw ();
-			}
-		}
-
-		protected override bool OnExposeEvent (EventExpose evnt)
-		{
-			if (!base.OnExposeEvent (evnt))
-				return false;
-
-			if (!CanSelect || !CropHelpers || Selection == Rectangle.Zero)
-				return true;
-
-			using (Cairo.Context ctx = CairoHelper.Create (GdkWindow)) {
-				ctx.SetSourceRGBA (.7, .7, .7, .8);
-				ctx.SetDash (new double [] {10, 15}, 0);
-				ctx.LineWidth = .8;
-				for (int i=1; i<3; i++) {
-					Point s = ImageCoordsToWindow (new Point (Selection.X + Selection.Width / 3 * i, Selection.Y));
-					Point e = ImageCoordsToWindow (new Point (Selection.X + Selection.Width / 3 * i, Selection.Y + Selection.Height));
-					ctx.MoveTo (s.X, s.Y);
-					ctx.LineTo (e.X, e.Y);
-					ctx.Stroke ();
-				}
-				for (int i=1; i<3; i++) {
-					Point s = ImageCoordsToWindow (new Point (Selection.X, Selection.Y + Selection.Height / 3 * i));
-					Point e = ImageCoordsToWindow (new Point (Selection.X + Selection.Width, Selection.Y + Selection.Height / 3 * i));
-					ctx.MoveTo (s.X, s.Y);
-					ctx.LineTo (e.X, e.Y);
-					ctx.Stroke ();
-				}
-			}
-			return true;
-		}
-	
-	}
-}
diff --git a/src/PhotoList.cs b/src/PhotoList.cs
deleted file mode 100644
index c66212f..0000000
--- a/src/PhotoList.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * FSpot.PhotoList.cs
- *
- * Author(s):
- *	Larry Ewing
- *
- * This is free software, See COPYING for details
- */
-
-using System.Collections.Generic;
-
-namespace FSpot {
-	public class PhotoList : IBrowsableCollection {
-		protected List<IBrowsableItem> list;
-		IBrowsableItem [] cache;
-
-		public PhotoList (IBrowsableItem [] photos)
-		{
-			list = new List<IBrowsableItem> (photos);
-		}
-
-		public PhotoList ()
-		{
-			list = new List<IBrowsableItem> ();
-		}
-
-		public int Count {
-			get { return list.Count; }
-		}
-
-		public void Clear ()
-		{
-			list.Clear ();
-			Reload ();
-		}
-
-		public int Capacity {
-			set { list.Capacity = value; }
-		}
-        
-		public void AddAll (List<IBrowsableItem> photos)
-		{
-			list = photos;
-			Reload ();
-		}
-
-		public void Add (IBrowsableItem photo)
-		{
-			list.Add (photo);
-			Reload ();
-		}
-
-		public void Add (IBrowsableItem [] items)
-		{
-			list.AddRange (items);
-			Reload ();
-		}
-
-		public int IndexOf (IBrowsableItem item)
-		{
-			return list.IndexOf (item);
-		}
-
-		public bool Contains (IBrowsableItem item)
-		{
-			return list.Contains (item);
-		}
-
-		public IBrowsableItem this [int index] {
-			get { return list [index]; }
-			set {
-				list [index] = value;
-				MarkChanged (index, FullInvalidate.Instance);
-			}
-		}
-
-		public void Sort (IComparer<IBrowsableItem> compare)
-		{
-			list.Sort (compare);
-			Reload ();
-		}
-
-		public void Reload ()
-		{
-			cache = null;
-			if (Changed != null)
-				Changed (this);
-		}
-
-		public void MarkChanged (int num, IBrowsableItemChanges changes)
-		{
-			MarkChanged (new BrowsableEventArgs (num, changes));
-		}
-
-		public void MarkChanged (BrowsableEventArgs args)
-		{
-			if (ItemsChanged != null)
-				ItemsChanged (this, args);
-		}
-
-		public IBrowsableItem [] Items {
-			get {
-				if (cache == null)
-					cache = list.ToArray ();
-
-				return cache;
-			}
-			set {
-				list.Clear ();
-				Add (value);
-			}
-		}
-
-		public event IBrowsableCollectionChangedHandler Changed;
-		public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
-	}
-}
diff --git a/src/PhotoLoader.cs b/src/PhotoLoader.cs
deleted file mode 100644
index 7a51e9d..0000000
--- a/src/PhotoLoader.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-
-using FSpot.Platform;
-using FSpot.Imaging;
-using Hyena;
-
-namespace FSpot {
-	[Obsolete ("nuke or rename this")]
-	public class PhotoLoader {
-		public PhotoQuery query;
-
-		public Gdk.Pixbuf Load (int index) {
-			return Load (query, index);
-		}
-
-		static public Gdk.Pixbuf Load (IBrowsableCollection collection, int index)
-		{
-			IBrowsableItem item = collection [index];
-			return Load (item);
-		}
-
-		static public Gdk.Pixbuf Load (IBrowsableItem item) 
-		{
-			using (var img = ImageFile.Create (item.DefaultVersion.Uri)) {
-				Gdk.Pixbuf pixbuf = img.Load ();
-				return pixbuf;
-			}
-		}
-
-		static public Gdk.Pixbuf LoadAtMaxSize (IBrowsableItem item, int width, int height) 
-		{
-			using (var img = ImageFile.Create (item.DefaultVersion.Uri)) {
-				Gdk.Pixbuf pixbuf = img.Load (width, height);
-				return pixbuf;
-			}
-		}
-
-		public PhotoLoader (PhotoQuery query)
-		{
-			this.query = query;
-		}
-	}
-}
diff --git a/src/PhotoPopup.cs b/src/PhotoPopup.cs
deleted file mode 100644
index 24bf735..0000000
--- a/src/PhotoPopup.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * FSpot.PhotoPopup
- *
- * Author(s)
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-
-using Gtk;
-
-using Mono.Addins;
-
-using FSpot.Extensions;
-
-namespace FSpot
-{
-	public class PhotoPopup : Gtk.Menu
-	{
-
-		protected PhotoPopup (IntPtr handle) : base (handle)
-		{
-		}
-
-		public PhotoPopup () : this (null)
-		{
-		}
-
-		public PhotoPopup (Widget parent) : base ()
-		{
-			foreach (MenuNode node in AddinManager.GetExtensionNodes ("/FSpot/Menus/PhotoPopup"))
-				Append (node.GetMenuItem (parent));
-			ShowAll ();
-		}
-
-		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);
-			else 
-				Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
-		}
-
-	}
-}
diff --git a/src/PhotoQuery.cs b/src/PhotoQuery.cs
deleted file mode 100644
index 7aceaa3..0000000
--- a/src/PhotoQuery.cs
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * FSpot.PhotoQuery.cs
- * 
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using FSpot.Query;
-using Hyena;
-
-namespace FSpot {
-	public class PhotoQuery : FSpot.IBrowsableCollection {
-		class PhotoCache
-		{
-			static int SIZE = 100;
-			public int Size {
-				get { return SIZE; }
-			}
-
-			Dictionary <int, Photo []> cache;
-			string temp_table;
-			PhotoStore store;
-
-			public PhotoCache (PhotoStore store, string temp_table)
-			{
-				this.temp_table = temp_table;
-				this.store = store;
-				cache = new Dictionary<int, Photo[]> ();
-			}
-
-			public bool TryGetPhoto (int index, out Photo photo)
-			{
-				photo = null;
-				Photo [] val;
-				int offset = index - index % SIZE;
-				if (!cache.TryGetValue (offset, out val))
-					return false;
-				photo = val [index - offset];
-				return true;
-			}
-
-			public Photo Get (int index)
-			{
-				Photo [] val;
-				int offset = index - index % SIZE;
-				if (!cache.TryGetValue (offset, out val)) {
-					val = store.QueryFromTemp (temp_table, offset, SIZE);
-					cache [offset] = val;
-				}
-				return val [index - offset];
-			}
-		}
-
-		PhotoCache cache;
-		private PhotoStore store;
-		private Term terms;
-
-		static int query_count = 0;
-		static int QueryCount {
-			get {return query_count ++;}
-		}
-
-		Dictionary<uint, int> reverse_lookup;
-
-		int count = -1;
-		
-		string temp_table = String.Format ("photoquery_temp_{0}", QueryCount);
-
-		// Constructor
-		public PhotoQuery (PhotoStore store, params IQueryCondition [] conditions)
-		{
-			this.store = store;
-			this.store.ItemsChanged += MarkChanged;
-			cache = new PhotoCache (store, temp_table);
-			reverse_lookup = new Dictionary<uint, int> ();
-			SetCondition (OrderByTime.OrderByTimeDesc);
-
-			foreach (IQueryCondition condition in conditions)
-				SetCondition (condition);
-
-			RequestReload ();
-		}
-
-		public int Count {
-			get {
-				if (count < 0)
-					count = store.Count (temp_table);
-				return count;
-			}
-		}
-		
-		public bool Contains (IBrowsableItem item) {
-			return IndexOf (item) >= 0;
-		}
-
-		// IPhotoCollection Interface
-		public event FSpot.IBrowsableCollectionChangedHandler Changed;
-		public event FSpot.IBrowsableCollectionItemsChangedHandler ItemsChanged;
-		
-		public IBrowsableItem this [int index] {
-			get { return cache.Get (index); }
-		}
-
-		[Obsolete ("DO NOT USE THIS, IT'S TOO SLOW")]
-		public Photo [] Photos {
-			get { return store.QueryFromTemp (temp_table); }
-		}
-
-		[Obsolete ("DO NOT USE Items on PhotoQuery")]
-		public IBrowsableItem [] Items {
-			get { throw new NotImplementedException (); }
-		}
-
-		public PhotoStore Store {
-			get { return store; }
-		}
-		
-		//Query Conditions
-		private Dictionary<Type, IQueryCondition> conditions;
-		private Dictionary<Type, IQueryCondition> Conditions {
-			get {
-				if (conditions == null)
-					conditions = new Dictionary<Type, IQueryCondition> ();
-				return conditions;
-			}
-		}
-
-		internal bool SetCondition (IQueryCondition condition)
-		{
-			if (condition == null)
-				throw new ArgumentNullException ("condition");
-			if (Conditions.ContainsKey (condition.GetType ()) && Conditions [condition.GetType ()] == condition)
-				return false;
-			Conditions [condition.GetType ()] = condition;
-			return true;
-		}
-
-		internal T GetCondition<T> () where T : IQueryCondition
-		{
-			IQueryCondition val;
-			Conditions.TryGetValue (typeof (T), out val);
-			return (T)val;
-		}
-
-		internal bool UnSetCondition<T> ()
-		{
-			if (!Conditions.ContainsKey (typeof(T)))
-				return false;
-			Conditions.Remove (typeof(T));
-			return true;
-		}
-
-		public Term Terms {
-			get { return terms; }
-			set {
-				terms = value;
-				untagged = false;
-				RequestReload ();
-			}
-		}
-	
-		public DateRange Range {
-			get { return GetCondition<DateRange> (); }
-			set {
-				if (value == null && UnSetCondition<DateRange> () || value != null && SetCondition (value))
-					RequestReload ();
-			}
-		}
-		
-		private bool untagged = false;
-		public bool Untagged {
-			get { return untagged; }
-			set {
-				if (untagged != value) {
-					untagged = value;
-					
-					if (untagged) {
-						UnSetCondition<ConditionWrapper> ();
-						UnSetCondition<HiddenTag> ();
-					}
-					
-					RequestReload ();
-				}
-			}
-		}
-
-		public RollSet RollSet {
-			get { return GetCondition<RollSet> (); }
-			set {
-				if (value == null && UnSetCondition<RollSet> () || value != null && SetCondition (value))
-					RequestReload ();
-			}
-		}
-
-		public RatingRange RatingRange {
-			get { return GetCondition<RatingRange> (); }
-			set {
-				if (value == null && UnSetCondition<RatingRange>() || value != null && SetCondition (value))
-					RequestReload ();
-			}
-		}
-		
-		public HiddenTag HiddenTag {
-			get { return GetCondition<HiddenTag> (); }
-			set {
-				if (value == null && UnSetCondition<HiddenTag>() || value != null && SetCondition (value))
-					RequestReload ();
-			}
-		}
-		
-		public ConditionWrapper TagTerm {
-			get { return GetCondition<ConditionWrapper> (); }
-			set {
-				if (value == null && UnSetCondition<ConditionWrapper>()
-				    || value != null && SetCondition (value)) {
-					
-					if (value != null) {
-						untagged = false;
-						SetCondition (HiddenTag.ShowHiddenTag);
-					} else {
-						UnSetCondition<HiddenTag> ();
-					}
-					
-					RequestReload ();
-				}
-			}
-		}
-
-		public OrderByTime OrderByTime {
-			get { return GetCondition<OrderByTime> (); }
-			set {
-				if (value != null && SetCondition (value))
-					RequestReload ();
-			}
-		}
-
-		public bool TimeOrderAsc {
-			get { return OrderByTime.Asc; }
-			set {
-				if (value != OrderByTime.Asc)
-					OrderByTime = new OrderByTime (value);
-			}
-		}
-
-		public void RequestReload ()
-		{
-			uint timer = Log.DebugTimerStart ();
-			IQueryCondition[] condition_array;
-			
-			int i = 0;
-			if (untagged) {
-				condition_array = new IQueryCondition[conditions.Count + 1];
-				condition_array[0] = new UntaggedCondition ();
-				i = 1;
-			} else {
-				condition_array = new IQueryCondition[conditions.Count + 2];
-		//		condition_array[0] = new ConditionWrapper (extra_condition);
-				condition_array[1] = new ConditionWrapper (terms != null ? terms.SqlCondition () : null);
-				i = 2;
-			}
-			
-			foreach (IQueryCondition condition in Conditions.Values) {
-				condition_array[i] = condition;
-				i++;
-			}
-	
-			store.QueryToTemp (temp_table, condition_array);
-
-			count = -1;
-			cache = new PhotoCache (store, temp_table);
-			reverse_lookup = new Dictionary<uint,int> ();
-
-			if (Changed != null)
-				Changed (this);
-			
-			Log.DebugTimerPrint (timer, "Reloading the query took {0}");
-		}
-		
-		public int IndexOf (IBrowsableItem photo)
-		{
-			if (photo == null || !(photo is Photo))
-				return -1;
-			return store.IndexOf (temp_table, photo as Photo);
-		}
-
-		private int [] IndicesOf (DbItem [] dbitems)
-		{
-			uint timer = Log.DebugTimerStart ();
-			List<int> indices = new List<int> ();
-			List<uint> items_to_search = new List<uint> ();
-			int cur;
-			foreach (DbItem dbitem in dbitems) {
-				if (reverse_lookup.TryGetValue (dbitem.Id, out cur))
-					indices.Add (cur);
-				else
-					items_to_search.Add (dbitem.Id);
-			}
-
-			if (items_to_search.Count > 0)
-				indices.AddRange (store.IndicesOf (temp_table, items_to_search.ToArray ()));
-			Log.DebugTimerPrint (timer, "IndicesOf took {0}");
-			return indices.ToArray ();
-		}
-
-		public int LookupItem (System.DateTime date)
-		{
-			return LookupItem (date, TimeOrderAsc);
-		}
-
-		private int LookupItem (System.DateTime date, bool asc)
-		{
-			if (Count == 0)
-				return -1;
-			
-			uint timer = Log.DebugTimerStart ();
-			int low = 0;
-			int high = Count - 1;
-			int mid = (low + high) / 2;
-			Photo current;
-			while (low <= high) {
-				mid = (low + high) / 2;
-				if (!cache.TryGetPhoto (mid, out current))
-					//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);
-
-				int comp = this [mid].Time.CompareTo (date);
-				if (!asc && comp < 0 || asc && comp > 0)
-					high = mid - 1;
-				else if (!asc && comp > 0 || asc && comp < 0)
-					low = mid + 1;
-				else
-					return mid;
-			}
-			Log.DebugTimerPrint (timer, "LookupItem took {0}");
-			if (asc)
-				return this[mid].Time < date ? mid + 1 : mid;
-			return this[mid].Time > date ? mid + 1 : mid;
-
-		}
-
-		public void Commit (int index)
-		{
-			Commit (new int [] {index});
-		}
-
-		public void Commit (int [] indexes)
-		{
-			List<Photo> to_commit = new List<Photo>();
-			foreach (int index in indexes) {
-				to_commit.Add (this [index] as Photo);
-				reverse_lookup [(this [index] as Photo).Id] = index;
-			}
-			store.Commit (to_commit.ToArray ());
-		}
-
-		private void MarkChanged (object sender, DbItemEventArgs<Photo> args)
-		{
-			int [] indexes = IndicesOf (args.Items);
-
-			if (indexes.Length > 0 && ItemsChanged != null)
-				ItemsChanged (this, new BrowsableEventArgs(indexes, (args as PhotoEventArgs).Changes));
-		}
-
-		public void MarkChanged (int index, IBrowsableItemChanges changes)
-		{
-			MarkChanged (new int [] {index}, changes);
-		}
-
-		public void MarkChanged (int [] indexes, IBrowsableItemChanges changes)
-		{
-			ItemsChanged (this, new BrowsableEventArgs (indexes, changes));
-		}
-	}
-}
diff --git a/src/PhotoStore.cs b/src/PhotoStore.cs
deleted file mode 100644
index d5c9eea..0000000
--- a/src/PhotoStore.cs
+++ /dev/null
@@ -1,900 +0,0 @@
-/*
- * PhotoStore.cs
- *
- * Author(s):
- *	Ettore Perazzoli <ettore at perazzoli.org>
- *	Larry Ewing <lewing at gnome.org>
- *	Stephane Delcroix <stephane at delcroix.org>
- * 
- * This is free software. See COPYING for details.
- */
-
-using Gdk;
-using Gtk;
-
-using Mono.Data.SqliteClient;
-using Mono.Unix;
-
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using System;
-
-using FSpot;
-using FSpot.Jobs;
-using FSpot.Query;
-using FSpot.Utils;
-using FSpot.Platform;
-
-using Hyena;
-using Banshee.Database;
-
-
-public class PhotoStore : DbStore<Photo> {
-	public int TotalPhotos {
-		get {
-			SqliteDataReader reader = Database.Query("SELECT COUNT(*) AS photo_count FROM photos");
-			reader.Read ();
-			int total = Convert.ToInt32 (reader ["photo_count"]);
-			reader.Close ();
-			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 (QueuedSqliteDatabase database, bool is_new)
-		: base (database, false)
-	{
-		EnsureThumbnailDirectory ();
-
-		if (! is_new)
-			return;
-		
-		Database.ExecuteNonQuery ( 
-			"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.ExecuteNonQuery (
-			"CREATE TABLE photo_tags (\n" +
-			"	photo_id	INTEGER, \n" +
-			"       tag_id		INTEGER, \n" +
-			"       UNIQUE (photo_id, tag_id)\n" +
-			")");
-
-		Database.ExecuteNonQuery (
-			"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.ExecuteNonQuery ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
-		Database.ExecuteNonQuery ("CREATE INDEX idx_photo_versions_import_md5 ON photo_versions(import_md5)");
-		Database.ExecuteNonQuery ("CREATE INDEX idx_photos_roll_id ON photos(roll_id)");
-	}
-
-	public bool HasDuplicate (IBrowsableItem item) {
-		var uri = item.DefaultVersion.Uri;
-		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.
-			var reader = Database.Query (new DbCommand ("SELECT photos.id, photos.time, pv.filename FROM photos LEFT JOIN photo_versions AS pv ON pv.photo_id = photos.id WHERE pv.filename = :filename", "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.Close ();
-		}
-
-		return false;
-	}
-
-	public Photo CreateFrom (IBrowsableItem 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 DbCommand (
-				"INSERT INTO photos (time, base_uri, filename, description, roll_id, default_version_id, rating) "	+
-				"VALUES (:time, :base_uri, :filename, :description, :roll_id, :default_version_id, :rating)",
-				"time", unix_time,
-				"base_uri", item.DefaultVersion.BaseUri.ToString (),
-				"filename", item.DefaultVersion.Filename,
-				"description", description,
-				"roll_id", roll_id,
-				"default_version_id", Photo.OriginalVersionId,
-				"rating", "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.Loaded = true;
-
-		InsertVersion (photo, photo.DefaultVersion as PhotoVersion);
-		EmitAdded (photo);
-		return photo;
-	}
-
-	private void InsertVersion (Photo photo, PhotoVersion version)
-	{
-		Database.ExecuteNonQuery (new DbCommand (
-			"INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, import_md5) " +
-			"VALUES (:photo_id, :version_id, :name, :base_uri, :filename, :is_protected, :import_md5)",
-			"photo_id", photo.Id,
-			"version_id", version.VersionId,
-			"name", version.Name,
-			"base_uri", version.BaseUri.ToString (),
-			"filename", version.Filename,
-			"is_protected", version.IsProtected,
-			"import_md5", (version.ImportMD5 != String.Empty ? version.ImportMD5 : null)));
-	}
-
-
-	private void GetVersions (Photo photo)
-	{
-		SqliteDataReader reader = Database.Query(
-			new DbCommand("SELECT version_id, name, base_uri, filename, import_md5, protected " +
-				      "FROM photo_versions " + 
-				      "WHERE photo_id = :id", 
-				      "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.Close();
-	}
-
-	private void GetTags (Photo photo)
-	{
-		SqliteDataReader reader = Database.Query(new DbCommand("SELECT tag_id FROM photo_tags WHERE photo_id = :id", "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.Close();
-	}		
-	
-	private void GetAllVersions  (string ids) {
-		SqliteDataReader 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.Loaded) {
-				//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.Close();
-	}
-
-	private void GetAllTags (string ids) {
-		SqliteDataReader 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.Loaded) {
-				//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.Close();
-	}
-
-	public override Photo Get (uint id)
-	{
-		Photo photo = LookupInCache (id);
-		if (photo != null)
-			return photo;
-
-		SqliteDataReader reader = Database.Query(
-			new DbCommand("SELECT time, description, roll_id, default_version_id, rating " +
-				      "FROM photos " +
-				      "WHERE id = :id", "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.Close();
-
-		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 ();
-
-		SqliteDataReader reader =
-			Database.Query (new DbCommand ("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 = :base_uri AND photos.filename = :filename)" +
-			                               " OR (pv.base_uri = :base_uri AND pv.filename = :filename)",
-			                               "base_uri", base_uri.ToString (),
-			                               "filename", 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.Close();
-
-		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);
-
-		ArrayList query_builder = new ArrayList (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 ("','", ((string []) query_builder.ToArray (typeof (string))));
-		Database.ExecuteNonQuery (String.Format ("DELETE FROM photos WHERE id IN ('{0}')", id_list));
-		Database.ExecuteNonQuery (String.Format ("DELETE FROM photo_tags WHERE photo_id IN ('{0}')", id_list));
-		Database.ExecuteNonQuery (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.
-		bool use_transactions = !Database.InTransaction && items.Length > 1;
-
-		if (use_transactions)
-			Database.BeginTransaction ();
-
-		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.ExecuteNonQuery (
-				new DbCommand (
-					"UPDATE photos " + 
-					"SET description = :description, " + 
-					"    default_version_id = :default_version_id, " + 
-					"    time = :time, " + 
-					"    base_uri = :base_uri, " +
-					"    filename = :filename, " +       
-					"    rating = :rating " +
-					"WHERE id = :id ",
-					"description", photo.Description,
-					"default_version_id", photo.DefaultVersionId,
-					"time", DateTimeUtil.FromDateTime (photo.Time),
-					"base_uri", photo.VersionUri (Photo.OriginalVersionId).GetBaseUri ().ToString (),
-					"filename", photo.VersionUri (Photo.OriginalVersionId).GetFilename (),
-					"rating", String.Format ("{0}", photo.Rating),
-					"id", photo.Id
-				)
-			);
-
-		// Update tags.
-		if (changes.TagsRemoved != null)
-			foreach (Tag tag in changes.TagsRemoved)
-				Database.ExecuteNonQuery (new DbCommand (
-					"DELETE FROM photo_tags WHERE photo_id = :photo_id AND tag_id = :tag_id",
-					"photo_id", photo.Id,
-					"tag_id", tag.Id));
-
-		if (changes.TagsAdded != null)
-			foreach (Tag tag in changes.TagsAdded)
-				Database.ExecuteNonQuery (new DbCommand (
-					"INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " +
-					"VALUES (:photo_id, :tag_id)",
-					"photo_id", photo.Id,
-					"tag_id", tag.Id));
-
-		// Update versions.
-		if (changes.VersionsRemoved != null)
-			foreach (uint version_id in changes.VersionsRemoved)
-				Database.ExecuteNonQuery (new DbCommand (
-					"DELETE FROM photo_versions WHERE photo_id = :photo_id AND version_id = :version_id",
-					"photo_id", photo.Id,
-					"version_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.ExecuteNonQuery (new DbCommand (
-					"UPDATE photo_versions SET name = :name, " +
-					"base_uri = :base_uri, filename = :filename, protected = :protected, import_md5 = :import_md5 " +
-					"WHERE photo_id = :photo_id AND version_id = :version_id",
-					"name", version.Name,
-					"base_uri", version.BaseUri.ToString (),
-					"filename", version.Filename,
-					"protected", version.IsProtected,
-					"photo_id", photo.Id,
-					"import_md5", (version.ImportMD5 != String.Empty ? version.ImportMD5 : null),
-					"version_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;
-		}
-
-		SqliteDataReader reader = Database.Query (query_builder.ToString());
-		reader.Read ();
-		int count = Convert.ToInt32 (reader ["count"]);
-		reader.Close();
-		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 ();
-		SqliteDataReader reader = Database.Query (query);
-		int index = - 1;
-		if (reader.Read ())
-			index = Convert.ToInt32 (reader ["row_id"]);
-		reader.Close();
-		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> ();
-		SqliteDataReader reader = Database.Query (query);
-		while (reader.Read ())
-			list.Add (Convert.ToInt32 (reader ["row_id"]) - 1);
-		reader.Close ();
-		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.ExecuteNonQuery ("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.ExecuteNonQuery (query_builder.ToString ());
-
-		int minyear = Int32.MaxValue;
-		int maxyear = Int32.MinValue;
-
-		SqliteDataReader 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.Close ();
-
-		//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.ExecuteNonQuery (String.Format ("DROP TABLE IF EXISTS {0}", temp_table));
-		//Database.ExecuteNonQuery (String.Format ("CREATE TEMPORARY TABLE {0} AS {1}", temp_table, query));
-		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 DbCommand (query));
-	}
-
-	private Photo [] Query (DbCommand query)
-	{
-		uint timer = Log.DebugTimerStart ();
-		SqliteDataReader 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.Close();
-
-		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.Loaded;
-		}
-		
-		photo_ids = photo_ids + "-1)";
-	
-		if (need_load) {
-			GetAllTags (photo_ids);
-			GetAllVersions (photo_ids);
-			foreach (Photo photo in new_photos)
-				photo.Loaded = true;
-		} else {
-			//Console.WriteLine ("Skipped Loading Data");
-		}
-	
-		foreach (Photo photo in new_photos)
-			photo.Changes = null;
-
- 		Log.DebugTimerPrint (timer, "Query took {0} : " + query.CommandText);
-		return query_result.ToArray ();
-	}
-
-	public Photo [] Query (SafeUri uri)
-	{
-		string filename = uri.GetFilename ();
-
-		/* query by file */
-		if ( ! String.IsNullOrEmpty (filename)) {
-			return Query (new DbCommand (
-			"SELECT id, "			+
-				"time, "			+
-				"base_uri, "		+
-				"filename, "		+
-				"description, "		+
-				"roll_id, "		+
-				"default_version_id, "	+
-				"rating "		+
-			"FROM photos " 				+
-			"WHERE base_uri LIKE :base_uri "		+
-			"AND filename LIKE :filename",
-			"base_uri", uri.GetBaseUri ().ToString (),
-			"filename", filename));
-		}
-		
-		/* query by directory */
-		return Query (new DbCommand (
-			"SELECT id, "			+
-				"time, "			+
-				"base_uri, "		+
-				"filename, "		+
-				"description, "		+
-				"roll_id, "		+
-				"default_version_id, "	+
-				"rating "		+
-			"FROM photos " 				+
-			"WHERE base_uri LIKE :base_uri "		+
-			"AND base_uri NOT LIKE :base_uri_",
-			"base_uri", uri.ToString () + "%",
-			"base_uri_", 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 ();
-		ArrayList where_clauses = new ArrayList ();
-		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 ", ((String []) where_clauses.ToArray (typeof(String)))));
-		}
-		query_builder.Append (" ORDER BY time");
-		return Query (query_builder.ToString ());
-	}
-}
diff --git a/src/PhotoTagMenu.cs b/src/PhotoTagMenu.cs
deleted file mode 100644
index dedb060..0000000
--- a/src/PhotoTagMenu.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-//
-// PhotoTagMenu.cs
-//
-// Copyright (C) 2004 Novell, Inc.
-//
-//
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-using Gtk;
-
-using FSpot;
-using Hyena;
-
-public class PhotoTagMenu : Menu {
-	public delegate void TagSelectedHandler (Tag t);
-	public event TagSelectedHandler TagSelected;
-
-	public PhotoTagMenu () : base () {
-	}
-	
-	protected PhotoTagMenu (IntPtr raw) : base (raw) {}
-
-	public void Populate (IBrowsableItem [] photos) {
-		Hashtable hash = new Hashtable ();
-		if (photos != null) {
-			foreach (IBrowsableItem p in photos) {
-				foreach (Tag t in p.Tags) {
-					if (!hash.Contains (t.Id)) {
-						hash.Add (t.Id, t);
-					}
-				}
-			}
-		}
-
-		foreach (Widget w in this.Children) {
-			w.Destroy ();
-		}
-		
-		if (hash.Count == 0) {
-			/* Fixme this should really set parent menu
-			   items insensitve */
-			MenuItem item = new MenuItem (Mono.Unix.Catalog.GetString ("(No Tags)"));
-			this.Append (item);
-			item.Sensitive = false;
-			item.ShowAll ();
-			return;
-		}
-
-		foreach (Tag t in hash.Values) {
-			MenuItem item = new TagMenu.TagMenuItem (t);
-			this.Append (item);
-			item.ShowAll ();
-			item.Activated += HandleActivate;
-		}
-				
-	}
-
-	void HandleActivate (object obj, EventArgs args)
-	{
-		if (TagSelected != null) {
-			TagMenu.TagMenuItem t = obj as TagMenu.TagMenuItem;
-			if (t != null)
-				TagSelected (t.Value);
-			else 
-				Log.Debug ("Item was not a TagMenuItem");
-		}
-	}
-}
diff --git a/src/PhotoVersionCommands.cs b/src/PhotoVersionCommands.cs
deleted file mode 100644
index 137fce6..0000000
--- a/src/PhotoVersionCommands.cs
+++ /dev/null
@@ -1,246 +0,0 @@
-using Gtk;
-using Glade;
-using System;
-using Mono.Unix;
-using FSpot;
-using Hyena;
-using Hyena.Widgets;
-using FSpot.UI.Dialog;
-
-public class PhotoVersionCommands
-{
-	private class VersionNameRequest : BuilderDialog {
-		private Photo photo;
-
-		[GtkBeans.Builder.Object] private Button ok_button;
-		[GtkBeans.Builder.Object] private Entry version_name_entry;
-		[GtkBeans.Builder.Object] private Label prompt_label;
-		[GtkBeans.Builder.Object] private Label already_in_use_label;
-
-		public enum RequestType {
-			Create,
-			Rename
-		}
-
-		private RequestType request_type;
-
-		private void Update ()
-		{
-			string new_name = version_name_entry.Text;
-
-			if (photo.VersionNameExists (new_name)
-			    && ! (request_type == RequestType.Rename
-				  && new_name == photo.GetVersion (photo.DefaultVersionId).Name)) {
-				already_in_use_label.Markup = "<small>This name is already in use</small>";
-				ok_button.Sensitive = false;
-				return;
-			}
-
-			already_in_use_label.Text = String.Empty;
-			
-			if (new_name.Length == 0)
-				ok_button.Sensitive = false;
-			else
-				ok_button.Sensitive = true;
-		}
-
-		private void HandleVersionNameEntryChanged (object obj, EventArgs args)
-		{
-			Update ();
-		}
-
-		public VersionNameRequest (RequestType request_type, Photo photo, Gtk.Window parent_window) : base ("version_name_dialog.ui", "version_name_dialog")
-		{
-			this.request_type = request_type;
-			this.photo = photo;
-
-			switch (request_type) {
-			case RequestType.Create:
-				this.Title = Catalog.GetString ("Create New Version");
-				prompt_label.Text = Catalog.GetString ("Name:");
-				break;
-
-			case RequestType.Rename:
-				this.Title = Catalog.GetString ("Rename Version");
-				prompt_label.Text = Catalog.GetString ("New name:");
-				version_name_entry.Text = photo.GetVersion (photo.DefaultVersionId).Name;
-				version_name_entry.SelectRegion (0, -1);
-				break;
-			}
-
-			version_name_entry.Changed += HandleVersionNameEntryChanged;
-			version_name_entry.ActivatesDefault = true;
-
-			this.TransientFor = parent_window;
-			this.DefaultResponse = ResponseType.Ok;
-
-			Update ();
-		}
-
-		public ResponseType Run (out string name)
-		{
-			ResponseType response = (ResponseType) this.Run ();
-
-			name = version_name_entry.Text;
-			if (request_type == RequestType.Rename && name == photo.GetVersion (photo.DefaultVersionId).Name)
-				response = ResponseType.Cancel;
-
-			this.Destroy ();
-
-			return response;
-		}
-	}
-
-	// Creating a new version.
-
-	public class Create {
-		public bool Execute (PhotoStore store, Photo photo, Gtk.Window parent_window)
-		{
-			VersionNameRequest request = new VersionNameRequest (VersionNameRequest.RequestType.Create,
-									     photo, parent_window);
-
-			string name;
-			ResponseType response = request.Run (out name);
-
-			if (response != ResponseType.Ok)
-				return false;
-
-			try {
-				photo.DefaultVersionId = photo.CreateVersion (name, photo.DefaultVersionId, true);
-				store.Commit (photo);
-				return true;
-			} catch (Exception e) {
-				HandleException ("Could not create a new version", e, parent_window);
-				return false;
-			}
-		}
-	}
-
-
-	// Deleting a version.
-
-	public class Delete {
-		public bool Execute (PhotoStore store, Photo photo, Gtk.Window parent_window)
-		{
-			string ok_caption = Catalog.GetString ("Delete");
-			string msg = String.Format (Catalog.GetString ("Really delete version \"{0}\"?"), photo.DefaultVersion.Name);
-			string desc = Catalog.GetString ("This removes the version and deletes the corresponding file from disk.");
-			try {
-				if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(parent_window, DialogFlags.DestroyWithParent, 
-									   MessageType.Warning, msg, desc, ok_caption)) {
-					photo.DeleteVersion (photo.DefaultVersionId);
-					store.Commit (photo);
-					return true;
-				}
-			} catch (Exception e) {
-				HandleException ("Could not delete a version", e, parent_window);
-			}
-			return false;
-		}
-	}
-
-	// Renaming a version.
-
-	public class Rename {
-		public bool Execute (PhotoStore store, Photo photo, Gtk.Window parent_window)
-		{
-			VersionNameRequest request = new VersionNameRequest (VersionNameRequest.RequestType.Rename,
-									     photo, parent_window);
-
-			string new_name;
-			ResponseType response = request.Run (out new_name);
-
-			if (response != ResponseType.Ok)
-				return false;
-
-			try {
-				photo.RenameVersion (photo.DefaultVersionId, new_name);
-				store.Commit (photo);
-				return true;
-			} catch (Exception e) {
-				HandleException ("Could not rename a version", e, parent_window);
-				return false;
-			}
-		}
-	}
-
-	// Detaching a version (making it a separate photo).
-	
-	public class Detach {
-		public bool Execute (PhotoStore store, Photo photo, Gtk.Window parent_window)
-		{
-			string ok_caption = Catalog.GetString ("De_tach");
-			string msg = String.Format (Catalog.GetString ("Really detach version \"{0}\" from \"{1}\"?"), photo.DefaultVersion.Name, photo.Name.Replace("_", "__"));
-			string desc = Catalog.GetString ("This makes the version appear as a separate photo in the library. To undo, drag the new photo back to its parent.");
-			try {
-				if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(parent_window, DialogFlags.DestroyWithParent, 
-									   MessageType.Warning, msg, desc, ok_caption)) {
-					Photo new_photo = store.CreateFrom (photo, photo.RollId);
-					new_photo.CopyAttributesFrom (photo);
-					photo.DeleteVersion (photo.DefaultVersionId, false, true);
-					store.Commit (new Photo[] {new_photo, photo});
-					return true;
-				}
-			} catch (Exception e) {
-				HandleException ("Could not detach a version", e, parent_window);
-			}
-			return false;
-		}
-	}
-
-	// Reparenting a photo as version of another one
-	
-	public class Reparent {
-		public bool Execute (PhotoStore store, Photo [] photos, Photo new_parent, Gtk.Window parent_window)
-		{
-			string ok_caption = Catalog.GetString ("Re_parent");
-			string msg = String.Format (Catalog.GetPluralString ("Really reparent \"{0}\" as version of \"{1}\"?", 
-			                                                     "Really reparent {2} photos as versions of \"{1}\"?", photos.Length), 
-			                            new_parent.Name.Replace ("_", "__"), photos[0].Name.Replace ("_", "__"), photos.Length);
-			string desc = Catalog.GetString ("This makes the photos appear as a single one in the library. The versions can be detached using the Photo menu.");
-
-			try {
-				if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(parent_window, DialogFlags.DestroyWithParent, 
-									   MessageType.Warning, msg, desc, ok_caption)) {
-					uint highest_rating = new_parent.Rating;
-					string new_description = new_parent.Description;
-					foreach (Photo photo in photos) {
-						highest_rating = Math.Max(photo.Rating, highest_rating);
-						if (string.IsNullOrEmpty(new_description))
-							new_description = photo.Description;
-						new_parent.AddTag (photo.Tags);
-						
-						foreach (uint version_id in photo.VersionIds) {
-							new_parent.DefaultVersionId = new_parent.CreateReparentedVersion (photo.GetVersion (version_id) as PhotoVersion);
-							store.Commit (new_parent);
-						}
-						uint [] version_ids = photo.VersionIds;
-						Array.Reverse (version_ids);
-						foreach (uint version_id in version_ids) {
-							photo.DeleteVersion (version_id, true, true);
-						}
-						store.Remove (photo);
-					}
-					new_parent.Rating = highest_rating;
-					new_parent.Description = new_description;
-					store.Commit (new_parent);
-					return true;
-				}
-			}
-			catch (Exception e) {
-				HandleException ("Could not reparent photos", e, parent_window);
-			}
-			return false;
-		}
-	}
-	
-	private static void HandleException (string msg, Exception e, Gtk.Window parent_window) {
-		Log.DebugException (e);
-		msg = Catalog.GetString (msg);
-		string desc = String.Format (Catalog.GetString ("Received exception \"{0}\"."), e.Message);
-		HigMessageDialog md = new HigMessageDialog (parent_window, DialogFlags.DestroyWithParent, 
-							    Gtk.MessageType.Error, ButtonsType.Ok, msg, desc);
-		md.Run ();
-		md.Destroy ();
-	}
-}
diff --git a/src/PhotoVersionMenu.cs b/src/PhotoVersionMenu.cs
deleted file mode 100644
index 1c1f4f8..0000000
--- a/src/PhotoVersionMenu.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-
-using Gtk;
-
-using System;
-using System.Collections.Generic;
-
-using FSpot;
-
-
-public class PhotoVersionMenu : Menu {
-
-	public IBrowsableItemVersion Version {
-		get; private set;
-	}
-
-	public delegate void VersionChangedHandler (PhotoVersionMenu menu);
-	public event VersionChangedHandler VersionChanged;
-
-	private Dictionary <MenuItem, IBrowsableItemVersion> version_mapping;
-
-	private void HandleMenuItemActivated (object sender, EventArgs args)
-	{
-		MenuItem item = sender as MenuItem;
-
-		if (item != null && version_mapping.ContainsKey (item)) {
-			Version = version_mapping [item];
-			VersionChanged (this);
-		}
-	}
-
-	public PhotoVersionMenu (IBrowsableItem photo)
-	{
-		Version = photo.DefaultVersion;
-
-		version_mapping = new Dictionary<MenuItem, IBrowsableItemVersion> ();
-
-		foreach (IBrowsableItemVersion version in photo.Versions) {
-			MenuItem menu_item = new MenuItem (version.Name);
-			menu_item.Show ();
-			menu_item.Sensitive = true;
-			Gtk.Label child = ((Gtk.Label) menu_item.Child);
-
-			if (version == photo.DefaultVersion) {
-				child.UseMarkup = true;
-				child.Markup = String.Format ("<b>{0}</b>", version.Name);
-			}
-
-			version_mapping.Add (menu_item, version);
-
-			Append (menu_item);
-		}
-
-		if (version_mapping.Count == 1) {
-			MenuItem no_edits_menu_item = new MenuItem (Mono.Unix.Catalog.GetString ("(No Edits)"));
-			no_edits_menu_item.Show ();
-			no_edits_menu_item.Sensitive = false;
-			Append (no_edits_menu_item);
-		}
-	}
-}
diff --git a/src/PhotoView.cs b/src/PhotoView.cs
deleted file mode 100644
index caa93b1..0000000
--- a/src/PhotoView.cs
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * FSpot.PhotoView.cs
- *
- * Author(s)
- * 	Ettore Perazzoli
- * 	Larry Ewing
- *	Stephane Delcroix
- *
- * This is free software. See COPYING for details.
- */
-
-using Gdk;
-using GLib;
-using Gtk;
-using System;
-using System.IO;
-using System.Collections.Generic;
-using System.Xml.Serialization;
-using Mono.Unix;
-
-using FSpot.Widgets;
-using FSpot.Utils;
-using Hyena;
-using FSpot.UI.Dialog;
-
-namespace FSpot {
-	public class PhotoView : EventBox {
-		FSpot.Delay commit_delay; 
-	
-		private PhotoImageView photo_view;
-		private ScrolledWindow photo_view_scrolled;
-		private EventBox background;
-		
-		private Filmstrip filmstrip;
-		VBox inner_vbox;
-		HBox inner_hbox;
-	
-		private Widgets.TagView tag_view;
-		
-		private Entry description_entry;
-		private Widgets.Rating rating;
-	
-		// Public events.
-	
-		public delegate void PhotoChangedHandler (PhotoView me);
-		public event PhotoChangedHandler PhotoChanged;
-	
-		public delegate void UpdateStartedHandler (PhotoView view);
-		public event UpdateStartedHandler UpdateStarted;
-	
-		public delegate void UpdateFinishedHandler (PhotoView view);
-		public event UpdateFinishedHandler UpdateFinished;
-
-		public event EventHandler<BrowsableEventArgs> DoubleClicked;
-	
-		public Orientation FilmstripOrientation {
-			get { return filmstrip.Orientation; }
-		}
-	
-		public PhotoImageView View {
-			get { return photo_view; }
-		}
-	
-		public FSpot.BrowsablePointer Item {
-			get { return photo_view.Item; }
-		}
-	
-		private IBrowsableCollection query;
-		public IBrowsableCollection Query {
-			get { return query; }
-			set { query = value; }
-		}
-	
-		public double Zoom {
-			get { return photo_view.Zoom; }
-			set { photo_view.Zoom = value; }
-		}
-		
-		public double NormalizedZoom {
-			get { return photo_view.NormalizedZoom; }
-			set { photo_view.NormalizedZoom = value; }
-		}
-	
-		public void Reload ()
-		{
-			photo_view.Reload ();
-		}
-	
-		private void UpdateDescriptionEntry ()
-		{
-			description_entry.Changed -= HandleDescriptionChanged;
-			if (Item.IsValid) {
-				if (description_entry.Sensitive == false)
-					description_entry.Sensitive = true;
-	
-				string desc = Item.Current.Description;
-				if (description_entry.Text != desc) {
-					description_entry.Text = desc == null ? String.Empty : desc;
-				}
-			} else {
-				description_entry.Sensitive = false;
-				description_entry.Text = String.Empty;
-			}
-	
-			description_entry.Changed += HandleDescriptionChanged;
-		}    
-	
-		public void UpdateRating ()
-		{
-			if (Item.IsValid)
-				UpdateRating ((int)Item.Current.Rating);
-		}
-
-		public void UpdateRating (int r)
-		{
-			rating.Changed -= HandleRatingChanged;
-			rating.Value = r;
-			rating.Changed += HandleRatingChanged;
-		}
-	
-		private void Update ()
-		{
-			if (UpdateStarted != null)
-				UpdateStarted (this);
-	
-			UpdateDescriptionEntry ();
-			UpdateRating ();
-
-			if (UpdateFinished != null)
-				UpdateFinished (this);
-		}
-	
-		public void ZoomIn ()
-		{
-			photo_view.ZoomIn ();
-		}
-		
-		public void ZoomOut ()
-		{
-			photo_view.ZoomOut ();
-		}
-	
-		// Event handlers.
-		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) {
-				PhotoPopup popup = new PhotoPopup ();
-				popup.Activate (this.Toplevel, args.Event);
-			}
-		}
-	
-		protected override bool OnPopupMenu ()
-		{
-			PhotoPopup popup = new PhotoPopup ();
-			popup.Activate (this.Toplevel);
-			return true;
-		}
-	
-		int changed_photo;
-		private bool CommitPendingChanges ()
-		{
-			if (commit_delay.IsPending) {
-				commit_delay.Stop ();
-				((PhotoQuery)query).Commit (changed_photo);
-			}
-			return true;
-		}
-	
-		private void HandleDescriptionChanged (object sender, EventArgs args) 
-		{
-			if (!Item.IsValid)
-				return;
-			
-			((Photo)Item.Current).Description = description_entry.Text;
-			
-			if (commit_delay.IsPending)
-				if (changed_photo == Item.Index)
-					commit_delay.Stop ();
-				else
-					CommitPendingChanges ();
-			
-			changed_photo = Item.Index;
-			commit_delay.Start ();
-		}
-	
-		private void HandleRatingChanged (object o, EventArgs e)
-		{
-			if (!Item.IsValid)
-				return;
-	
-			((Photo)Item.Current).Rating = (uint)(o as Widgets.Rating).Value;
-	
-			if (commit_delay.IsPending)
-				if (changed_photo == Item.Index)
-					commit_delay.Stop();
-				else
-					CommitPendingChanges ();
-			changed_photo = Item.Index;
-			commit_delay.Start ();
-	 	}
-
-		public void UpdateTagView ()
-		{
-			tag_view.DrawTags ();
-			tag_view.QueueDraw ();
-		}
-	
-		void HandlePhotoChanged (object sender, EventArgs e)
-		{
-			if (query is PhotoQuery) {
-				CommitPendingChanges ();
-			}
-			
-			tag_view.Current = Item.Current;
-			Update ();
-	
-			if (this.PhotoChanged != null)
-				PhotoChanged (this);
-		}
-	
-		private void HandleDestroy (object sender, System.EventArgs args)
-		{
-			CommitPendingChanges ();
-			Dispose ();
-		}
-	
-		private void OnPreferencesChanged (object sender, NotifyEventArgs args)
-		{
-			LoadPreference (args.Key);
-		}
-
-		private void LoadPreference (String key)
-		{
-			switch (key) {
-			case Preferences.FILMSTRIP_ORIENTATION:
-				PlaceFilmstrip ((Orientation) Preferences.Get<int> (key));
-				break;
-			}
-		}
-
-		public void PlaceFilmstrip (Orientation pos)
-		{
-			PlaceFilmstrip (pos, false);
-		}
-
-		public void PlaceFilmstrip (Orientation pos, bool force)
-		{
-			if (!force && filmstrip.Orientation == pos)
-				return;
-			filmstrip.Orientation = pos;
-
-			System.Collections.IEnumerator widgets;
-			switch (pos) {
-			case Orientation.Horizontal:
-				widgets = inner_hbox.AllChildren.GetEnumerator ();
-				while (widgets.MoveNext ())
-					if (widgets.Current == filmstrip) {
-						inner_hbox.Remove (filmstrip);
-						break;
-					}
-				inner_vbox.PackStart (filmstrip, false, false, 0); 
-				inner_vbox.ReorderChild (filmstrip, 0);
-				break;
-			case Orientation.Vertical:
-				widgets = inner_vbox.AllChildren.GetEnumerator ();
-				while (widgets.MoveNext ())
-					if (widgets.Current == filmstrip) {
-						inner_vbox.Remove (filmstrip);
-						break;
-					}
-				inner_hbox.PackEnd (filmstrip, false, false, 0);
-				break;
-			}
-			Preferences.Set (Preferences.FILMSTRIP_ORIENTATION, (int) pos);
-		}
-	
-		public bool FilmStripVisibility {
-			get { return filmstrip.Visible; }
-			set { filmstrip.Visible = value; }
-		}
-	
-		public PhotoView (IBrowsableCollection query)
-			: base ()
-		{
-			this.query = query;
-	
-			commit_delay = new FSpot.Delay (1000, new GLib.IdleHandler (CommitPendingChanges));
-			this.Destroyed += HandleDestroy;
-	
-			Name = "ImageContainer";
-			Box vbox = new VBox (false, 6);
-			Add (vbox);
-	
-		        background = new EventBox ();
-			Frame frame = new Frame ();
-			background.Add (frame);
-	
-			frame.ShadowType = ShadowType.In;
-			vbox.PackStart (background, true, true, 0);
-			
-			inner_vbox = new VBox (false , 2);
-			inner_hbox = new HBox (false , 2);
-	
-			frame.Add (inner_hbox);
-			
-			BrowsablePointer bp = new BrowsablePointer (query, -1);
-			photo_view = new PhotoImageView (bp);
-	
-			filmstrip = new Filmstrip (bp);
-			Gdk.Pixbuf bg = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, 1, 77);
-			bg.Fill (0x00000000);
-			filmstrip.BackgroundTile = bg;
-			filmstrip.ThumbOffset = 1;
-			filmstrip.Spacing = 4;
-			filmstrip.ThumbSize = 75;
-			PlaceFilmstrip ((Orientation) Preferences.Get <int> (Preferences.FILMSTRIP_ORIENTATION), true);
-	
-			photo_view.PhotoChanged += HandlePhotoChanged;
-	
-			photo_view_scrolled = new ScrolledWindow (null, null);
-
-			photo_view_scrolled.SetPolicy (PolicyType.Automatic, PolicyType.Automatic);
-			photo_view_scrolled.ShadowType = ShadowType.None;
-			photo_view_scrolled.Add (photo_view);
-			photo_view_scrolled.Child.ButtonPressEvent += HandleButtonPressEvent;
-			photo_view.AddEvents ((int) EventMask.KeyPressMask);
-			inner_vbox.PackStart (photo_view_scrolled, true, true, 0);
-			inner_hbox.PackStart (inner_vbox, true, true, 0);
-			
-			HBox lower_hbox = new HBox (false, 2);
-			//inner_hbox.BorderWidth = 6;
-	
-			tag_view = new Widgets.TagView ();
-			lower_hbox.PackStart (tag_view, false, true, 0);
-	
-			Label comment = new Label (Catalog.GetString ("Description:"));
-			lower_hbox.PackStart (comment, false, false, 0);
-			description_entry = new Entry ();
-			lower_hbox.PackStart (description_entry, true, true, 0);
-			description_entry.Changed += HandleDescriptionChanged;
-	
-			rating = new Widgets.Rating();
-			lower_hbox.PackStart (rating, false, false, 0);
-			rating.Changed += HandleRatingChanged;
-	
-			SetColors ();
-			
-			inner_vbox.PackStart (lower_hbox, false, true, 0);
-	
-			vbox.ShowAll ();
-	
-			Realized += delegate (object o, EventArgs e) {SetColors ();};
-			Preferences.SettingChanged += OnPreferencesChanged;
-		}
-
-		~PhotoView ()
-		{
-			Hyena.Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
-			Dispose (false);	
-		}
-
-		public override void Dispose ()
-		{
-			Dispose (true);
-			base.Dispose ();
-			System.GC.SuppressFinalize (this);
-		}
-	
-		bool is_disposed = false;
-		protected virtual void Dispose (bool disposing)
-		{
-			if (is_disposed)
-				return;
-			if (disposing) { //Free managed resources
-				filmstrip.Dispose ();	
-			}
-
-			is_disposed = true;
-		}
-
-		private void SetColors ()
-		{
-			GtkUtil.ModifyColors (filmstrip);
-			GtkUtil.ModifyColors (tag_view);
-			GtkUtil.ModifyColors (photo_view);
-			GtkUtil.ModifyColors (background);
-			GtkUtil.ModifyColors (photo_view_scrolled);
-			GtkUtil.ModifyColors (rating);
-
-			Gdk.Color dark = Style.Dark (Gtk.StateType.Normal);
-			filmstrip.ModifyBg (Gtk.StateType.Normal, dark);
-			tag_view.ModifyBg (Gtk.StateType.Normal, dark);
-			photo_view.ModifyBg (Gtk.StateType.Normal, dark);
-			background.ModifyBg (Gtk.StateType.Normal, dark);
-			photo_view_scrolled.ModifyBg (Gtk.StateType.Normal, dark);
-			rating.ModifyBg (Gtk.StateType.Normal, dark);
-		}
-	
-		protected override void OnStyleSet (Style previous)
-		{
-			SetColors ();
-		}
-	}
-}
diff --git a/src/PixbufCache.cs b/src/PixbufCache.cs
deleted file mode 100644
index 38d9e20..0000000
--- a/src/PixbufCache.cs
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * FSpot.PixbufCache.cs
- *
- * Author(s):
- * 	Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Collections;
-using System.Threading;
-using Hyena;
-
-using FSpot.Utils;
-using FSpot.Platform;
-
-namespace FSpot {
-	public class PixbufCache {
-		Hashtable items;
-		ArrayList items_mru;
-		int total_size;
-		int max_size = 256 * 256 * 4 * 30;
-
-		private Thread worker;
-
-		public delegate void PixbufLoadedHandler (PixbufCache cache, CacheEntry entry);
-		public event PixbufLoadedHandler OnPixbufLoaded;
-		
-		public PixbufCache ()
-		{
-			items = new Hashtable ();
-			items_mru = new ArrayList ();
-			
-			worker = new Thread (new ThreadStart (WorkerTask));
-			worker.Start ();
-
-			ThumbnailLoader.Default.OnPixbufLoaded += HandleThumbnailLoaded;
-		}
-		
-		public void HandleThumbnailLoaded (ImageLoaderThread loader, ImageLoaderThread.RequestItem result)
-		{
-            Reload (result.Uri);
-		}
-
-		public void Request (SafeUri uri, object closure, int width, int height)
-		{
-			lock (items) {
-				CacheEntry entry = items[uri] as CacheEntry;
-
-				if (entry == null) {
-					entry = new CacheEntry (this, uri, closure, width, height);
-					items [uri] = entry;
-					items_mru.Add (entry);
-				} else {
-					MoveForward (entry);
-					entry.Data = closure;
-				}
-				Monitor.Pulse (items);
-			}
-		}
-
-//		public void Update (SafeUri uri, Gdk.Pixbuf pixbuf)
-//		{
-//			lock (items) {
-//				CacheEntry entry = (CacheEntry) items [uri];
-//				if (entry != null) {
-//					entry.SetPixbufExtended (pixbuf, true);
-//				}
-//			}
-//		}
-
-		public void Update (CacheEntry entry, Gdk.Pixbuf pixbuf)
-		{
-			lock (items) {
-				entry.SetPixbufExtended (pixbuf, true);
-			}
-		}
-		
-		public void Reload (CacheEntry entry, object data, int width, int height)
-		{
-			lock (items) {
-				lock (entry) {
-					entry.Reload = true;
-					entry.Width = width;
-					entry.Height = height;
-					entry.Data = data;
-				}
-				Monitor.Pulse (items);
-			}
-		}
-
-		public void Reload (SafeUri uri)
-		{
-			CacheEntry entry;
-
-			lock (items) {
-				entry = (CacheEntry) items [uri];
-				if (entry != null) {
-					lock (entry) {
-						entry.Reload = true;
-					}
-					Monitor.Pulse (items);
-				}
-			}
-		}
-
-		private CacheEntry FindNext ()
-		{
-			CacheEntry entry;
-			int i = items_mru.Count;
-			int size = 0;
-			if (total_size > max_size * 4) {
-				//System.Console.WriteLine ("Hit major limit ({0}) out of {1}",
-				//			  total_size, max_size);
-				return null;
-			} 
-			while (i-- > 0) {
-				entry = (CacheEntry) items_mru [i];
-				lock (entry) {
-					if (entry.Reload) {
-						entry.Reload = false;
-						return entry;
-					}
-
-					//if the depth of the queue is so large that we've reached double our limit 
-					//break out of here and let the queue shrink.
-					if (entry.Pixbuf != null)
-						size += entry.Size;
-
-					if (size > max_size * 2) {
-						//System.Console.WriteLine ("Hit limit ({0},{1}) out of {2}", 
-						//			  size, total_size,max_size);
-						return null;
-					}
-				}
-			}
-			return null;
-		}
-		
-		private bool ShrinkIfNeeded ()
-		{
-			int num = 0;
-			while ((items_mru.Count - num) > 10 && total_size > max_size) {
-				CacheEntry entry = (CacheEntry) items_mru [num++];
-				items.Remove (entry.Uri);
-				entry.Dispose ();
-			}
-			if (num > 0) {
-				//System.Console.WriteLine ("removing {0} out of {3}  ({1} > {2})", 
-				//			  num, total_size, max_size, items_mru.Count);
-				items_mru.RemoveRange (0, num);
-				return true;
-			}
-			return false;
-		}
-		
-		private void WorkerTask ()
-		{
-			CacheEntry current = null;
-			//ThumbnailGenerator.Default.PushBlock ();
-			while (true) {
-				try {
-					lock (items) {
-						/* find the next item */
-						while ((current = FindNext ()) == null) {
-							if (!ShrinkIfNeeded ()){
-								//ThumbnailGenerator.Default.PopBlock ();
-								Monitor.Wait (items);
-								//ThumbnailGenerator.Default.PushBlock ();
-							}
-						}
-					}
-					ProcessRequest (current);
-					QueueLast (current);
-				} catch (System.Exception e) {
-					Log.Exception (e);
-					current = null;
-				}
-			}
-		}
-		
-		protected virtual void ProcessRequest (CacheEntry entry)
-		{
-			Gdk.Pixbuf loaded = null;
-			try {
-				loaded = XdgThumbnailSpec.LoadThumbnail (entry.Uri, ThumbnailSize.Large);
-				this.Update (entry, loaded);
-			} catch (GLib.GException){
-				if (loaded != null)
-					loaded.Dispose ();
-				return;		
-			}
-		}
-		
-		private void QueueLast (CacheEntry entry)
-		{
-			Gtk.Application.Invoke (delegate (object obj, System.EventArgs args) {
-				if (entry.Uri != null && OnPixbufLoaded != null)
-					OnPixbufLoaded (this, entry);
-			});
-		}
-		
-		private void MoveForward (CacheEntry entry)
-		{
-#if true
-			int i = items_mru.Count;
-			CacheEntry tmp1 = entry;
-			CacheEntry tmp2;
-			while (i-- > 0) {
-				tmp2 = (CacheEntry) items_mru [i];
-				items_mru [i] = tmp1;
-				tmp1 = tmp2;
-				if (tmp2 == entry)
-					return;
-			}
-			throw new System.Exception ("move forward failed");
-#else
-			items_mru.Remove (entry);
-			items_mru.Add (entry);	
-#endif
-		}
-		       
-
-		private CacheEntry ULookup (SafeUri uri)
-		{
-			CacheEntry entry = (CacheEntry) items [uri];
-			if (entry != null) {
-				MoveForward (entry);
-			}
-			return (CacheEntry) entry;
-		}
-
-		public CacheEntry Lookup (SafeUri uri)
-		{
-			lock (items) {
-				return ULookup (uri);
-			}
-		}
-
-		private void URemove (SafeUri uri)
-		{
-			CacheEntry entry = (CacheEntry) items [uri];
-			if (entry != null) {
-				items.Remove (uri);
-				items_mru.Remove (entry);
-				entry.Dispose ();
-			}
-		}
-
-		public void Remove (SafeUri uri)
-		{
-			lock (items) {
-				URemove (uri);
-			}
-		}
-
-		public class CacheEntry : System.IDisposable {
-			private Gdk.Pixbuf pixbuf;
-			private SafeUri uri;
-			private int width;
-			private int height;
-			private object data;
-			private bool reload;
-			private PixbufCache cache;
-			
-			public CacheEntry (PixbufCache cache, SafeUri uri, object closure, int width, int height)
-			{
-				this.uri = uri;
-				this.width = width;
-				this.height = height;
-				this.data = closure;
-				this.Reload = true;
-				this.cache = cache;
-				cache.total_size += this.Size;
-			}
-
-			public bool Reload {
-				get { return reload; }
-				set { reload = value; }
-			}
-
-			public SafeUri Uri {
-				get { return uri; }
-			}
-
-			public int Width {
-				get { return width; }
-				set { width = value; }
-			}
-
-			public int Height {
-				get { return height; }
-				set { height = value; }
-			}
-
-			public object Data {
-				get {
-					lock (this) {
-						return data;
-					}
-				}
-				set {
-					lock (this) {
-						data = value;
-					}
-				}
-			}
-			
-			public bool IsDisposed {
-				get { return uri == null; }
-			}
-			
-			public void SetPixbufExtended (Gdk.Pixbuf value, bool ignore_undead)
-			{
-				lock (this) {
-					if (IsDisposed) {
-						if (ignore_undead) {
-							return;
-						} else {
-							throw new System.Exception ("I don't want to be undead");
-						}
-					}							
-
-					Gdk.Pixbuf old = this.Pixbuf;
-					cache.total_size -= this.Size;
-					this.pixbuf = value;
-					if (pixbuf != null) {
-						this.width = pixbuf.Width;
-						this.height = pixbuf.Height;
-					}
-					cache.total_size += this.Size;
-					this.Reload = false;
-					
-					if (old != null)
-						old.Dispose ();
-				}
-			}
-
-			public Gdk.Pixbuf Pixbuf {
-				get {
-					lock (this) {
-						return pixbuf;
-					}
-				}
-			}
-			
-			public Gdk.Pixbuf ShallowCopyPixbuf ()
-			{
-				lock (this) {
-					if (IsDisposed)
-						return null;
-
-					if (pixbuf == null)
-						return null;
-					
-					return pixbuf.ShallowCopy ();
-				}
-			}
-			
-			~CacheEntry ()
-			{
-				if (!IsDisposed)
-					this.Dispose ();
-			}
-			
-			public void Dispose ()
-			{
-				lock (this) {
-					if (! IsDisposed)
-						cache.total_size -= this.Size;
-
-					if (this.pixbuf != null) {
-						this.pixbuf.Dispose ();
-						
-					}
-					this.pixbuf = null;
-					this.cache = null;
-					this.uri = null;
-				}
-				System.GC.SuppressFinalize (this);
-			}
-			
-			public int Size {
-				get {
-					return width * height * 3;
-				}
-			}
-		}
-	}
-}
diff --git a/src/PixbufUtils.cs b/src/PixbufUtils.cs
deleted file mode 100644
index 6c0c760..0000000
--- a/src/PixbufUtils.cs
+++ /dev/null
@@ -1,532 +0,0 @@
-//
-// FSpot.PixbufUtils.cs
-//
-// Author(s):
-//	Ettore Perazzoli
-//	Larry Ewing  <lewing at novell.com>
-//	Stephane Delcroix  <stephane at declroix.org>
-//
-// This is free software. See COPYING for details
-//
-
-using Gdk;
-using System.Collections;
-using System.Runtime.InteropServices;
-using System;
-using System.IO;
-using FSpot;
-using FSpot.Utils;
-using FSpot.Imaging;
-using Hyena;
-using TagLib.Image;
-
-public static class PixbufUtils {
-	static Pixbuf error_pixbuf = null;
-	public static Pixbuf ErrorPixbuf {
-		get {
-			if (error_pixbuf == null)
-				error_pixbuf = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "f-spot-question-mark", 256, (Gtk.IconLookupFlags)0);
-			return error_pixbuf;
-		}
-	}
-	public static Pixbuf LoadingPixbuf = PixbufUtils.LoadFromAssembly ("f-spot-loading.png");
-
-	public static int GetSize (Pixbuf pixbuf)
-	{
-		return Math.Max (pixbuf.Width, pixbuf.Height);
-	}
-
-	public static double Fit (Pixbuf pixbuf,
-				  int dest_width, int dest_height,
-				  bool upscale_smaller,
-				  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);
-	}
-
-	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)
-	{
-		if (orig_width == 0 || orig_height == 0) {
-			fit_width = 0;
-			fit_height = 0;
-			return 0.0;
-		}
-
-		double scale = Math.Min (dest_width / (double)orig_width,
-					 dest_height / (double)orig_height);
-		
-		if (scale > 1.0 && !upscale_smaller)
-			scale = 1.0;
-
-		fit_width = (int) Math.Round (scale * orig_width);
-		fit_height = (int) Math.Round (scale * orig_height);
-		
-		return scale;
-	}
-
-
-	// FIXME: These should be in GTK#.  When my patch is committed, these LoadFrom* methods will
-	// go away.
-
-	public class AspectLoader {
-		Gdk.PixbufLoader loader = new Gdk.PixbufLoader ();
-		int max_width;
-		int max_height;
-		ImageOrientation orientation;
-
-		public AspectLoader (int max_width, int max_height) 
-		{
-			this.max_height = max_height;
-			this.max_width = max_width;
-			loader.SizePrepared += HandleSizePrepared;
-		}
-
-		private void HandleSizePrepared (object obj, SizePreparedArgs args)
-		{
-			switch (orientation) {
-			case ImageOrientation.LeftTop:
-			case ImageOrientation.LeftBottom:
-			case ImageOrientation.RightTop:
-			case ImageOrientation.RightBottom:
-				int tmp = max_width;
-				max_width = max_height;
-				max_height = tmp;
-				break;
-			default:
-				break;
-			}
-
-			int scale_width = 0;
-			int scale_height = 0;
-
-			double scale = Fit (args.Width, args.Height, max_width, max_height, true, out scale_width, out scale_height);
-
-			if (scale < 1.0)
-				loader.SetSize (scale_width, scale_height);
-		}
-
-		public Pixbuf Load (System.IO.Stream stream, ImageOrientation orientation)
-		{
-			int count;
-			byte [] data = new byte [8192];
-			while (((count = stream.Read (data, 0, data.Length)) > 0) && loader.Write (data, (ulong)count))
-				;
-			
-			loader.Close ();
-			Pixbuf orig = loader.Pixbuf;
-			Gdk.Pixbuf rotated = FSpot.Utils.PixbufUtils.TransformOrientation (orig, orientation);
-			
-			if (orig != rotated) {
-				orig.Dispose ();
-			}
-			loader.Dispose ();
-			return rotated;
-		}
-		
-		public Pixbuf LoadFromFile (string path)
-		{
-			try {
-				orientation = GetOrientation (path);
-				using (FileStream fs = System.IO.File.OpenRead (path)) {
-					return Load (fs, orientation);
-				}
-			} catch (Exception) {
-				Log.ErrorFormat ("Error loading photo {0}", path);
-				return null;
-			} 
-		}
-	}
-
-	public static Pixbuf ScaleToMaxSize (Pixbuf pixbuf, int width, int height)
-	{
-		return ScaleToMaxSize (pixbuf, width, height, true);
-	}	
-
-	public static Pixbuf ScaleToMaxSize (Pixbuf pixbuf, int width, int height, bool upscale)
-	{
-		int scale_width = 0;
-		int scale_height = 0;
-		double scale = Fit (pixbuf, width, height, upscale, out scale_width, out scale_height);
-
-		Gdk.Pixbuf result;
-		if (upscale || (scale < 1.0))
-			result = pixbuf.ScaleSimple (scale_width, scale_height, (scale_width > 20) ? Gdk.InterpType.Bilinear : Gdk.InterpType.Nearest);
-		else
-			result = pixbuf.Copy ();
-
-		return result;
-	}
-		
-	static public void GetSize (string path, out int width, out int height)
-	{
-		using (Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (path)) {
-			width = pixbuf.Width;
-			height = pixbuf.Height;
-		}
-	}
-
-	static public Pixbuf LoadAtMaxSize (string path, int max_width, int max_height)
-	{
-		PixbufUtils.AspectLoader loader = new AspectLoader (max_width, max_height);
-		return loader.LoadFromFile (path);
-	}
-
-	static public Pixbuf LoadFromStream (System.IO.Stream input)
-	{
-		Gdk.PixbufLoader loader = new Gdk.PixbufLoader ();
-		byte [] buffer = new byte [8192];
-		int n;
-
-		while ((n = input.Read (buffer, 0, 8192)) != 0)
-			loader.Write (buffer, (ulong) n);
-		
-		loader.Close ();
-		
-		return loader.Pixbuf;
-		
-	}
-
-	public static Pixbuf TagIconFromPixbuf (Pixbuf source)
-	{
-		return IconFromPixbuf (source, (int) FSpot.Tag.IconSize.Large);
-	}
-
-	public static Pixbuf IconFromPixbuf (Pixbuf source, int size)
-	{
-		Pixbuf tmp = null;
-		Pixbuf icon = null;
-
-		if (source.Width > source.Height)
-			source = tmp = new Pixbuf (source, (source.Width - source.Height) /2, 0, source.Height, source.Height);
-		else if (source.Width < source.Height) 
-			source = tmp = new Pixbuf (source, 0, (source.Height - source.Width) /2, source.Width, source.Width);
-
-		if (source.Width == source.Height)
-			icon = source.ScaleSimple (size, size, InterpType.Bilinear);
-		else
-			throw new Exception ("Bad logic leads to bad accidents");
-
-		if (tmp != null)
-			tmp.Dispose ();
-		
-		return icon;
-	}
-
-	static Pixbuf LoadFromAssembly (string resource)
-	{
-		try {
-			return new Pixbuf (System.Reflection.Assembly.GetEntryAssembly (), resource);
-		} catch {
-			return null;
-		}
-	}
-
-	public static Gdk.Pixbuf ScaleToAspect (Gdk.Pixbuf orig, int width, int height)
-	{
-		Gdk.Rectangle pos;
-		double scale = Fit (orig, width, height, false, out pos.Width, out pos.Height);
-		pos.X = (width - pos.Width) / 2;
-		pos.Y = (height - pos.Height) / 2;
-
-		Pixbuf scaled = new Pixbuf (Colorspace.Rgb, false, 8, width, height);
-		scaled.Fill (0x000000); 
-
-		orig.Composite (scaled, pos.X, pos.Y, 
-				pos.Width, pos.Height,
-				pos.X, pos.Y, scale, scale,
-				Gdk.InterpType.Bilinear,
-				255);
-
-		return scaled;
-	}
-
-	public static Pixbuf Flatten (Pixbuf pixbuf)
-	{
-		if (!pixbuf.HasAlpha)
-			return null;
-
-		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);
-
-		return flattened;
-	}
-
-	[DllImport ("libfspot")]
-	static extern IntPtr f_pixbuf_unsharp_mask (IntPtr src, double radius, double amount, double threshold);
-
-	public static Pixbuf UnsharpMask (Pixbuf src, double radius, double amount, double threshold)
-	{
-		IntPtr raw_ret = f_pixbuf_unsharp_mask (src.Handle, radius, amount, threshold);
- 		Gdk.Pixbuf ret = (Gdk.Pixbuf) GLib.Object.GetObject(raw_ret, true);
-		return ret;
-	}
-	
-	[DllImport ("libfspot")]
-	static extern IntPtr f_pixbuf_blur (IntPtr src, double radius);
-
-	public static Pixbuf Blur (Pixbuf src, double radius)
-	{
-		IntPtr raw_ret = f_pixbuf_blur (src.Handle, radius);
- 		Gdk.Pixbuf ret = (Gdk.Pixbuf) GLib.Object.GetObject(raw_ret, true);
-		return ret;
-	}	
-
-	public unsafe static Gdk.Pixbuf RemoveRedeye (Gdk.Pixbuf src, Gdk.Rectangle area)
-	{
-		return RemoveRedeye (src, area, -15);
-	}
-
-	public unsafe static Gdk.Pixbuf RemoveRedeye (Gdk.Pixbuf src, Gdk.Rectangle area, int threshold)
-	//threshold, factors and comparisons borrowed from the gimp plugin 'redeye.c' by Robert Merkel
-	{
-		Gdk.Pixbuf copy = src.Copy ();
-		Gdk.Pixbuf selection = new Gdk.Pixbuf (copy, area.X, area.Y, area.Width, area.Height);
-		byte *spix = (byte *)selection.Pixels;
-		int h = selection.Height;
-		int w = selection.Width;
-		int channels = src.NChannels;
-
-		double RED_FACTOR = 0.5133333;
-		double GREEN_FACTOR = 1;
-		double BLUE_FACTOR = 0.1933333;
-
-		for (int j = 0; j < h; j++) {
-			byte *s = spix;
-			for (int i = 0; i < w; i++) {
-				int adjusted_red = (int)(s[0] * RED_FACTOR);
-				int adjusted_green = (int)(s[1] * GREEN_FACTOR);
-				int adjusted_blue = (int)(s[2] * BLUE_FACTOR);
-
-				if (adjusted_red >= adjusted_green - threshold
-				    && adjusted_red >= adjusted_blue - threshold)
-					s[0] = (byte)(((double)(adjusted_green + adjusted_blue)) / (2.0 * RED_FACTOR));
-				s += channels;
-			}
-			spix += selection.Rowstride;
-		}
-
-		return copy;
-	}
-
-	public static unsafe Pixbuf ColorAdjust (Pixbuf src, double brightness, double contrast,
-					  double hue, double saturation, int src_color, int dest_color)
-	{
-		Pixbuf adjusted = new Pixbuf (Colorspace.Rgb, src.HasAlpha, 8, src.Width, src.Height);
-		PixbufUtils.ColorAdjust (src, adjusted, brightness, contrast, hue, saturation, src_color, dest_color);
-		return adjusted;
-	}
-
-	public static Cms.Format PixbufCmsFormat (Pixbuf buf)
-	{
-		return buf.HasAlpha ? Cms.Format.Rgba8Planar : Cms.Format.Rgb8;
-	}
-
-	public static unsafe void ColorAdjust (Pixbuf src, Pixbuf dest, 
-					       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");
-
-		//Cms.Profile eos10d = new Cms.Profile ("/home/lewing/ICCProfiles/EOS-10D-True-Color-Non-Linear.icm");
-		Cms.Profile srgb = Cms.Profile.CreateStandardRgb ();
-
-		Cms.Profile bchsw = Cms.Profile.CreateAbstract (256, 
-								0.0, 
-								brightness, contrast,
-								hue, saturation, src_color, 
-								dest_color);
-
-		Cms.Profile [] list = new Cms.Profile [] { srgb, bchsw, srgb };
-		Cms.Transform trans = new Cms.Transform (list, 
-							 PixbufCmsFormat (src),
-							 PixbufCmsFormat (dest),
-							 Cms.Intent.Perceptual, 0x0100);
-
-		ColorAdjust (src, dest, trans);
-
-		trans.Dispose ();
-		srgb.Dispose ();
-		bchsw.Dispose ();
-	}
-
-
-	public static unsafe void ColorAdjust (Gdk.Pixbuf src, Gdk.Pixbuf dest, Cms.Transform trans)
-	{
-		int width = src.Width;
-		byte * srcpix  = (byte *) src.Pixels;
-		byte * destpix = (byte *) dest.Pixels;
-
-		for (int row = 0; row < src.Height; row++) {
-			trans.Apply ((IntPtr) (srcpix + row * src.Rowstride),
-				     (IntPtr) (destpix + row * dest.Rowstride), 
-				     (uint)width);
-		}
-		
-	}
-
-	public static unsafe bool IsGray (Gdk.Pixbuf pixbuf, int max_difference)
-	{
-		int chan = pixbuf.NChannels;
-
-		byte *pix = (byte *)pixbuf.Pixels;
-		int h = pixbuf.Height;
-		int w = pixbuf.Width;
-		int stride = pixbuf.Rowstride;
-
-		for (int j = 0; j < h; j++) {
-			byte *p = pix;
-			for (int i = 0; i < w; i++) {
-				if (Math.Abs (p[0] - p[1]) > max_difference || Math.Abs (p[0] - p [2]) > max_difference) {
-					goto Found;
-				}
-				p += chan;
-			}
-			pix += stride;
-		}
-
-		return true;
-
-	Found:
-		return false;
-	}
-
-	public static unsafe void ReplaceColor (Gdk.Pixbuf src, Gdk.Pixbuf dest)
-	{
-		if (src.HasAlpha || !dest.HasAlpha || (src.Width != dest.Width) || (src.Height != dest.Height))
-			throw new ApplicationException ("invalid pixbufs");
-
-		byte *dpix = (byte *)dest.Pixels;
-		byte *spix = (byte *)src.Pixels;
-		int h = src.Height;
-		int w = src.Width;
-		for (int j = 0; j < h; j++) {
-			byte *d = dpix;
-			byte *s = spix;
-			for (int i = 0; i < w; i++) {
-				d[0] = s[0];
-				d[1] = s[1];
-				d[2] = s[2];
-				d += 4;
-				s += 3;
-			}
-			dpix += dest.Rowstride;
-			spix += src.Rowstride;
-		}
-	}
-
-	public static ImageOrientation GetOrientation (SafeUri uri)
-	{
-		using (var img = ImageFile.Create (uri)) {
-			return img.Orientation;
-		}	
-	}
-	
-	[Obsolete ("Use GetOrientation (SafeUri) instead")]
-	public static ImageOrientation GetOrientation (string path)
-	{
-        return GetOrientation (new SafeUri (path));
-	}
-
-	[DllImport("libgnomeui-2-0.dll")]
-	static extern IntPtr gnome_thumbnail_scale_down_pixbuf(IntPtr pixbuf, int dest_width, int dest_height);
-
-	public static Gdk.Pixbuf ScaleDown (Gdk.Pixbuf src, int width, int height)
-	{
-		IntPtr raw_ret = gnome_thumbnail_scale_down_pixbuf(src.Handle, width, height);
-		Gdk.Pixbuf ret;
-		if (raw_ret == IntPtr.Zero)
-			ret = null;
-		else
-			ret = (Gdk.Pixbuf) GLib.Object.GetObject(raw_ret, true);
-		return ret;
-	}
-
-    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!
-            var file_from = GLib.FileFactory.NewForUri (source);
-            var file_to = GLib.FileFactory.NewForUri (destination);
-            file_from.Copy (file_to, GLib.FileCopyFlags.AllMetadata | GLib.FileCopyFlags.Overwrite, null, null);
-            return;
-        }
-
-        // Else make a derived copy with metadata copied
-        using (var img = ImageFile.Create (source)) {
-            using (var pixbuf = img.Load ()) {
-                CreateDerivedVersion (source, destination, jpeg_quality, pixbuf);
-            }
-        }
-    }
-
-    public static void CreateDerivedVersion (SafeUri source, SafeUri destination, uint jpeg_quality, Pixbuf pixbuf)
-    {
-        SaveToSuitableFormat (destination, pixbuf, jpeg_quality);
-
-        using (var metadata_from = Metadata.Parse (source)) {
-            using (var metadata_to = Metadata.Parse (destination)) {
-                metadata_to.CopyFrom (metadata_from);
-                metadata_to.Save ();
-            }
-        }
-    }
-
-    private static void SaveToSuitableFormat (SafeUri destination, Pixbuf pixbuf, uint jpeg_quality)
-    {
-        // FIXME: this needs to work on streams rather than filenames. Do that when we switch to
-        // newer GDK.
-        var extension = destination.GetExtension ().ToLower ();
-        if (extension == ".png") {
-            pixbuf.Save (destination.LocalPath, "png");
-        } else if (extension == ".jpg" || extension == ".jpeg") {
-            pixbuf.Save (destination.LocalPath, "jpeg", jpeg_quality);
-        } else {
-            throw new NotImplementedException ("Saving this file format is not supported");
-        }
-    }
-
-#region Gdk hackery
-
-    // This hack below is needed because there is no wrapped version of
-    // Save which allows specifying the variable arguments (it's not
-    // possible with p/invoke).
-
-    [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);
-
-    private static bool Save (this Pixbuf pixbuf, string filename, string type, uint jpeg_quality)
-    {
-        IntPtr error = IntPtr.Zero;
-        IntPtr nfilename = GLib.Marshaller.StringToPtrGStrdup (filename);
-        IntPtr ntype = GLib.Marshaller.StringToPtrGStrdup (type);
-        IntPtr optlabel1 = GLib.Marshaller.StringToPtrGStrdup ("quality");
-        IntPtr optvalue1 = GLib.Marshaller.StringToPtrGStrdup (jpeg_quality.ToString ());
-        bool ret = gdk_pixbuf_save(pixbuf.Handle, nfilename, ntype, out error, optlabel1, optvalue1, IntPtr.Zero);
-        GLib.Marshaller.Free (nfilename);
-        GLib.Marshaller.Free (ntype);
-        GLib.Marshaller.Free (optlabel1);
-        GLib.Marshaller.Free (optvalue1);
-        if (error != IntPtr.Zero) throw new GLib.GException (error);
-        return ret;
-    }
-
-#endregion
-}
diff --git a/src/Platform/Gnome/PreferenceBackend.cs b/src/Platform/Gnome/PreferenceBackend.cs
deleted file mode 100644
index 9d0e02c..0000000
--- a/src/Platform/Gnome/PreferenceBackend.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * FSpot.Platform.Gnome.PreferenceBackend.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-#if !NOGCONF
-
-using System;
-using System.Runtime.Serialization;
-
-
-namespace FSpot
-{
-	public class NotifyEventArgs : System.EventArgs
-	{
-		string key;
-		public string Key {
-			get { return key; }
-		}
-
-		object val;
-		public object Value {
-			get { return val; }
-		}
-
-		public NotifyEventArgs (string key, object val)
-		{
-			this.key = key;
-			this.val = val;
-		}
-	}
-
-	[Serializable]
-	public class NoSuchKeyException : Exception
-	{
-		public NoSuchKeyException () : base ()
-		{
-		}
-
-		public NoSuchKeyException (string key) : base (key)
-		{
-		}
-
-		public NoSuchKeyException (string key, Exception e) : base (key, e)
-		{
-		}
-
-		protected NoSuchKeyException (SerializationInfo info, StreamingContext context) : base (info, context)
-		{
-		}
-	}
-}
-
-namespace FSpot.Platform
-{
-	public class PreferenceBackend
-	{
-		static object sync_handler = new object ();
-
-		private static GConf.Client client;
-		private GConf.Client Client {
-			get {
-				lock (sync_handler) {
-					if (client == null)
-						client = new GConf.Client ();
-					return client;
-				}
-			}
-		}
-
-		public PreferenceBackend ()
-		{
-		}
-
-		public object Get (string key)
-		{
-			try {
-				return Client.Get (key);
-			} catch (GConf.NoSuchKeyException) {
-				throw new NoSuchKeyException (key);
-			}
-		}
-
-		internal T Get<T> (string key)
-		{
-			T value = default(T);
-			try {
-				value = (T) Get (key);
-			} catch (NoSuchKeyException) {
-			} catch (InvalidCastException) {
-			}
-			return value;
-		}
-
-		public void Set (string key, object o)
-		{
-			Client.Set (key, o);
-		}
-
-		public void AddNotify (string key, EventHandler<NotifyEventArgs> handler)
-		{
-			// GConf doesn't like trailing slashes
-			key = key.TrimEnd('/');	
-			Client.AddNotify (key, delegate (object sender, GConf.NotifyEventArgs args) {handler (sender, new NotifyEventArgs (args.Key, args.Value));});
-		}
-	}
-}
-#endif
diff --git a/src/Platform/Makefile.am b/src/Platform/Makefile.am
deleted file mode 100644
index 8ddca2c..0000000
--- a/src/Platform/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-ASSEMBLY = FSpot.Platform
-TARGET = library
-LINK = $(REF_FSPOT_PLATFORM)
-
-SOURCES = \
-	Gnome/Desktop.cs \
-	Gnome/PreferenceBackend.cs \
-	Gnome/ScreenSaver.cs \
-	Gnome/WebProxy.cs
-
-# Currently unused
-#NULL_PLATFORM_CSDISTFILES = \
-#	Null/Desktop.cs \
-#	Null/PreferenceBackend.cs \
-#	Null/ScreenSaver.cs \
-#	Null/WebProxy.cs
-
-RESOURCES =
-
-include $(top_srcdir)/build/build.mk
diff --git a/src/Platform/Makefile.in b/src/Platform/Makefile.in
deleted file mode 100644
index 0c45656..0000000
--- a/src/Platform/Makefile.in
+++ /dev/null
@@ -1,810 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = src/Platform
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Platform
-TARGET = library
-LINK = $(REF_FSPOT_PLATFORM) $(am__append_1)
-SOURCES = \
-	Gnome/Desktop.cs \
-	Gnome/PreferenceBackend.cs \
-	Gnome/ScreenSaver.cs \
-	Gnome/WebProxy.cs
-
-
-# Currently unused
-#NULL_PLATFORM_CSDISTFILES = \
-#	Null/Desktop.cs \
-#	Null/PreferenceBackend.cs \
-#	Null/ScreenSaver.cs \
-#	Null/WebProxy.cs
-RESOURCES = 
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Platform/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign src/Platform/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/Preferences.cs b/src/Preferences.cs
deleted file mode 100644
index 795c6fe..0000000
--- a/src/Preferences.cs
+++ /dev/null
@@ -1,244 +0,0 @@
-using System.Net;
-using System;
-using System.Collections.Generic;
-using Mono.Unix;
-using FSpot.Platform;
-using Hyena;
-
-namespace FSpot
-{
-	public class Preferences
-	{
-		public const string APP_FSPOT = "/apps/f-spot/";
-		public const string APP_FSPOT_EXPORT = APP_FSPOT + "export/";
-		public const string APP_FSPOT_EXPORT_TOKENS = APP_FSPOT_EXPORT + "tokens/";
-
-		public const string GTK_RC = APP_FSPOT + "ui/gtkrc";
-
-		public const string MAIN_WINDOW_MAXIMIZED = APP_FSPOT + "ui/maximized";
-		public const string MAIN_WINDOW_X = APP_FSPOT + "ui/main_window_x";
-		public const string MAIN_WINDOW_Y = APP_FSPOT + "ui/main_window_y";
-		public const string MAIN_WINDOW_WIDTH = APP_FSPOT + "ui/main_window_width";
-		public const string MAIN_WINDOW_HEIGHT = APP_FSPOT + "ui/main_window_height";
-
-		public const string IMPORT_WINDOW_WIDTH = APP_FSPOT + "ui/import_window_width";
-		public const string IMPORT_WINDOW_HEIGHT = APP_FSPOT + "ui/import_window_height";
-		public const string IMPORT_WINDOW_PANE_POSITION = APP_FSPOT + "ui/import_window_pane_position";
-
-		public const string IMPORT_COPY_FILES = "/apps/f-spot/import/copy_files";
-		public const string IMPORT_INCLUDE_SUBFOLDERS = "/apps/f-spot/import/include_subfolders";
-		public const string IMPORT_CHECK_DUPLICATES = "/apps/f-spot/import/check_duplicates";
-		public const string IMPORT_REMOVE_ORIGINALS = "/apps/f-spot/import/remove_originals";
-		
-		public const string VIEWER_WIDTH = APP_FSPOT + "ui/viewer_width";
-		public const string VIEWER_HEIGHT = APP_FSPOT + "ui/viewer_height";
-		public const string VIEWER_MAXIMIZED = APP_FSPOT + "ui/viewer_maximized";
-		public const string VIEWER_SHOW_TOOLBAR = APP_FSPOT + "ui/viewer_show_toolbar";
-		public const string VIEWER_SHOW_FILENAMES = APP_FSPOT + "ui/viewer_show_filenames";
-		public const string VIEWER_INTERPOLATION = APP_FSPOT + "viewer/interpolation";
-		public const string VIEWER_TRANS_COLOR = APP_FSPOT + "viewer/trans_color";
-		public const string VIEWER_TRANSPARENCY = APP_FSPOT + "viewer/transparency";
-		public const string CUSTOM_CROP_RATIOS = APP_FSPOT + "viewer/custom_crop_ratios";
-		
-		public const string COLOR_MANAGEMENT_DISPLAY_PROFILE = APP_FSPOT + "ui/color_management_display_profile";
-		public const string COLOR_MANAGEMENT_OUTPUT_PROFILE = APP_FSPOT + "ui/color_management_output_profile";
-		
-		public const string SHOW_TOOLBAR = APP_FSPOT + "ui/show_toolbar";
-		public const string SHOW_SIDEBAR = APP_FSPOT + "ui/show_sidebar";
-		public const string SHOW_TIMELINE = APP_FSPOT + "ui/show_timeline";
-		public const string SHOW_FILMSTRIP = APP_FSPOT + "ui/show_filmstrip";
-		public const string FILMSTRIP_ORIENTATION = APP_FSPOT + "ui/filmstrip_orientation";
-		public const string SHOW_TAGS = APP_FSPOT + "ui/show_tags";
-		public const string SHOW_DATES = APP_FSPOT + "ui/show_dates";
-		public const string EXPANDED_TAGS = APP_FSPOT + "ui/expanded_tags";
-		public const string SHOW_RATINGS = APP_FSPOT + "ui/show_ratings";
-		public const string TAG_ICON_SIZE = APP_FSPOT + "ui/tag_icon_size";
-		public const string TAG_ICON_AUTOMATIC = APP_FSPOT + "ui/tag_icon_automatic";
-		
-		public const string GLASS_POSITION = APP_FSPOT + "ui/glass_position";
-		public const string GROUP_ADAPTOR_ORDER_ASC = APP_FSPOT + "ui/group_adaptor_sort_asc";
-		
-		public const string SIDEBAR_POSITION = APP_FSPOT + "ui/sidebar_size";
-		public const string ZOOM = APP_FSPOT + "ui/zoom";
-
-		public const string EXPORT_EMAIL_SIZE = APP_FSPOT + "export/email/size";
-		public const string EXPORT_EMAIL_ROTATE = APP_FSPOT + "export/email/auto_rotate";
-
-		public const string IMPORT_GUI_ROLL_HISTORY = APP_FSPOT + "import/gui_roll_history";
-
-		public const string SCREENSAVER_TAG = APP_FSPOT + "screensaver/tag_id";
-		public const string SCREENSAVER_DELAY = APP_FSPOT + "screensaver/delay";
-
-		public const string STORAGE_PATH = APP_FSPOT + "import/storage_path";
-
-		public const string METADATA_EMBED_IN_IMAGE = APP_FSPOT + "metadata/embed_in_image";
-
-		public const string METADATA_ALWAYS_USE_SIDECAR = APP_FSPOT + "metadata/always_use_sidecar";
-
-		public const string EDIT_REDEYE_THRESHOLD = APP_FSPOT + "edit/redeye_threshold";
-		public const string EDIT_CREATE_XCF_VERSION = APP_FSPOT + "edit/create_xcf";
-
-		public const string GNOME_MAILTO = "/desktop/gnome/url-handlers/mailto/";
-		public const string GNOME_MAILTO_COMMAND = GNOME_MAILTO + "command";
-		public const string GNOME_MAILTO_ENABLED = GNOME_MAILTO + "enabled";
-
-		public const string GSD_THUMBS_MAX_AGE = "/desktop/gnome/thumbnail_cache/maximum_age";
-		public const string GSD_THUMBS_MAX_SIZE = "/desktop/gnome/thumbnail_cache/maximum_size";
-
-
-		private static PreferenceBackend backend;
-		private static EventHandler<NotifyEventArgs> changed_handler;
-		private static PreferenceBackend Backend {
-			get {
-				if (backend == null) {
-					backend = new PreferenceBackend ();
-					changed_handler = new EventHandler<NotifyEventArgs> (OnSettingChanged);
-					backend.AddNotify (APP_FSPOT, changed_handler);
-					backend.AddNotify (GNOME_MAILTO, changed_handler);
-				}
-				return backend;
-			}
-		}
-
-		private static Dictionary<string, object> cache = new Dictionary<string, object>();
-
-		static object GetDefault (string key)
-		{
-			switch (key) {
-			case MAIN_WINDOW_X:
-			case MAIN_WINDOW_Y:
-			case MAIN_WINDOW_HEIGHT:
-			case MAIN_WINDOW_WIDTH:
-			case IMPORT_WINDOW_HEIGHT:
-			case IMPORT_WINDOW_WIDTH:
-			case IMPORT_WINDOW_PANE_POSITION:
-			case FILMSTRIP_ORIENTATION:
-				return 0;
-					
-			case METADATA_EMBED_IN_IMAGE:
-			case METADATA_ALWAYS_USE_SIDECAR:
-			case MAIN_WINDOW_MAXIMIZED:
-			case GROUP_ADAPTOR_ORDER_ASC:
-			case IMPORT_REMOVE_ORIGINALS:
-				return false;
-
-			case GLASS_POSITION:
-				return null;
-
-			case SHOW_TOOLBAR:
-			case SHOW_SIDEBAR:
-			case SHOW_TIMELINE:
-			case SHOW_FILMSTRIP:
-			case SHOW_TAGS:
-			case SHOW_DATES:
-			case SHOW_RATINGS:
-			case VIEWER_SHOW_FILENAMES:
-				return true;
-			
-			case TAG_ICON_SIZE:
-				return (int) Tag.IconSize.Medium;
-
-			case TAG_ICON_AUTOMATIC:
-				return true;
-		
-			case SIDEBAR_POSITION:
-				return 130;
-			case ZOOM:
-				return null;
-
-			case IMPORT_GUI_ROLL_HISTORY:
-				return 10;
-
-			case SCREENSAVER_TAG:
-				return 1;
-			case SCREENSAVER_DELAY:
-				return 4.0;
-			case STORAGE_PATH:
-				return System.IO.Path.Combine (FSpot.Global.HomeDirectory, Catalog.GetString("Photos"));
-			case EXPORT_EMAIL_SIZE:
-				return 3;	// medium size 640px
-			case EXPORT_EMAIL_ROTATE:
-			case VIEWER_INTERPOLATION:
-				return true;
-			case VIEWER_TRANSPARENCY:
-				return "NONE";
-			case VIEWER_TRANS_COLOR:
-				return "#000000";
-			case EDIT_REDEYE_THRESHOLD:
-				return -15;
-
-			case GTK_RC:
-			case COLOR_MANAGEMENT_DISPLAY_PROFILE:
-			case COLOR_MANAGEMENT_OUTPUT_PROFILE:
-				return String.Empty;
-			case IMPORT_CHECK_DUPLICATES:
-			case IMPORT_COPY_FILES:
-			case IMPORT_INCLUDE_SUBFOLDERS:
-				return true;
-			default:
-				return null;
-			}
-		}
-		
-		//return true if the key exists in the backend
-		public static bool TryGet<T> (string key, out T value)
-		{
-			lock (cache) {
-				value = default (T);
-				object o;
-				if (cache.TryGetValue (key, out o)) {
-					value = (T)o;
-					return true;
-				}
-
-				try {
-					value = (T) Backend.Get (key);
-				} catch { //catching NoSuchKeyException
-					return false;
-				}
-				
-				cache.Add (key, value);
-				return true;
-			}
-		}
-
-		public static T Get<T> (string key)
-		{
-			T val;
-			if (TryGet<T> (key, out val))
-				return val;
-			try {
-				return (T) GetDefault (key);
-			} catch { //catching InvalidCastException
-				return default (T);
-			}
-		}
-
-		public static void Set (string key, object value)
-		{
-			lock (cache) {
-				try {
-					cache [key] = value;				
-					Backend.Set (key, value);
-				} catch (Exception e){
-					Log.Exception ("Unable to set this :"+key, e);
-				}
-			}
-		}
-
-		public static event EventHandler<NotifyEventArgs> SettingChanged;
-
-		static void OnSettingChanged (object sender, NotifyEventArgs args)
-		{
-			lock (cache) {
-				if (cache.ContainsKey (args.Key)) {
-					cache [args.Key] = args.Value;				
-				}
-			}
-
-			if (SettingChanged != null)
-				SettingChanged (sender, args);
-		}
-
-	}
-}
diff --git a/src/PrintOperation.cs b/src/PrintOperation.cs
deleted file mode 100644
index 0f8a2d0..0000000
--- a/src/PrintOperation.cs
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * FSpot.PrintOperation.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using Cairo;
-using System;
-using System.Runtime.InteropServices;
-using Mono.Unix;
-
-using FSpot.Widgets;
-using FSpot.Imaging;
-using Hyena;
-
-namespace FSpot
-{
-	public class PrintOperation : Gtk.PrintOperation
-	{
-		IBrowsableItem [] selected_photos;
-		int photos_per_page = 1;
-		CustomPrintWidget.FitMode fit = CustomPrintWidget.FitMode.Scaled;
-		bool repeat, white_borders, crop_marks;
-		string print_label_format;
-		string comment;
-
-		public PrintOperation (IBrowsableItem [] selected_photos) : base ()
-		{
-			this.selected_photos = selected_photos;
-			CustomTabLabel = Catalog.GetString ("Image Settings");
-			NPages = selected_photos.Length;
-			DefaultPageSetup = FSpot.Global.PageSetup;
-		}
-
-		protected override void OnBeginPrint (Gtk.PrintContext context)
-		{
-			base.OnBeginPrint (context);
-		}
-
-		protected override Gtk.Widget OnCreateCustomWidget ()
-		{
-			Gtk.Widget widget = new CustomPrintWidget (this);
-			widget.ShowAll ();
-			(widget as CustomPrintWidget).Changed += OnCustomWidgetChanged;
-			OnCustomWidgetChanged (widget);
-			return widget;
-		}
-
-		protected override void OnCustomWidgetApply (Gtk.Widget widget)
-		{
-			CustomPrintWidget cpw = widget as CustomPrintWidget;
-			UseFullPage = cpw.UseFullPage;
-			photos_per_page = cpw.PhotosPerPage;
-			repeat = cpw.Repeat;
-			NPages = repeat ? selected_photos.Length :(int) Math.Ceiling (1.0 * selected_photos.Length / photos_per_page);
-			fit = cpw.Fitmode;
-			white_borders = cpw.WhiteBorders;
-			crop_marks = cpw.CropMarks;
-			print_label_format = cpw.PrintLabelFormat;
-			comment = cpw.CustomText;
-		}
-
-		protected void OnCustomWidgetChanged (Gtk.Widget widget)
-		{
-			OnCustomWidgetApply (widget);
-			using (ImageSurface surface = new ImageSurface (Format.ARGB32, 360, 254)) {
-				using (Context gr = new Context (surface)) {
-					gr.Color = new Color (1, 1, 1);
-					gr.Rectangle (0, 0, 360, 254);
-					gr.Fill ();
-					using (Gdk.Pixbuf pixbuf = Gdk.Pixbuf.LoadFromResource ("flower.png")) {
-						DrawImage (gr, pixbuf,0, 0, 360, 254);
-					}
-				}
-				(widget as CustomPrintWidget).PreviewImage.Pixbuf = CreatePixbuf (surface);
-			}
-		}
-
-		protected override void OnDrawPage (Gtk.PrintContext context, int page_nr)
-		{
-			base.OnDrawPage (context, page_nr);
-			Context cr = context.CairoContext;	
-
-			int ppx, ppy;
-			switch (photos_per_page) {
-			default:
-			case 1: ppx = ppy =1; break;
-			case 2: ppx = 1; ppy = 2; break;
-			case 4: ppx = ppy = 2; break;
-			case 9: ppx = ppy = 3; break;
-			case 12: ppx = 3; ppy = 4; break;
-			case 20: ppx = 4; ppy = 5; break;
-			case 30: ppx = 5; ppy = 6; break;
-			}
-
-			//FIXME: if paper is landscape, swap ppx with ppy
-
-			double w = context.Width / ppx;
-			double h = context.Height / ppy;
-
-			// compute picture size using 4800DPI
-			double mx=(w / 25.4) * 4800, my=(h / 25.4) * 4800;
-
-			for (int x = 0; x <= ppx; x++) {
-				for (int y = 0; y <= ppy; y++) {
-					int p_index = repeat ? page_nr : page_nr * photos_per_page + y * ppx + x;
-					if (crop_marks)
-						DrawCropMarks (cr, x*w, y*h, w*.1);
-					if (x == ppx || y == ppy || p_index >= selected_photos.Length)
-						continue;
-					using (var img = ImageFile.Create (selected_photos[p_index].DefaultVersion.Uri))
-					{
-						Gdk.Pixbuf pixbuf;
-						try {
-							pixbuf = img.Load ((int) mx, (int) my);
-							Cms.Profile printer_profile;
-							if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE), out printer_profile)) 
-								FSpot.ColorManagement.ApplyProfile (pixbuf, img.GetProfile (), printer_profile);
-						} catch (Exception e) {
-							Log.Exception ("Unable to load image " + selected_photos[p_index].DefaultVersion.Uri + "\n", e);
-							// If the image is not found load error pixbuf
-							pixbuf = new Gdk.Pixbuf (PixbufUtils.ErrorPixbuf, 0, 0, 
-										      PixbufUtils.ErrorPixbuf.Width, 
-										      PixbufUtils.ErrorPixbuf.Height);
-						}
-						//Gdk.Pixbuf pixbuf = img.Load (100, 100);
-						bool rotated = false;
-						if (Math.Sign ((double)pixbuf.Width/pixbuf.Height - 1.0) != Math.Sign (w/h - 1.0)) {
-							Gdk.Pixbuf d_pixbuf = pixbuf.RotateSimple (Gdk.PixbufRotation.Counterclockwise);
-							pixbuf.Dispose ();
-							pixbuf = d_pixbuf;
-							rotated = true;
-						}
-
-						DrawImage (cr, pixbuf, x * w, y * h, w, h);
-
-						string tag_string = "";
-						foreach (Tag t in selected_photos[p_index].Tags)
-							tag_string = String.Concat (tag_string, t.Name);
-
-						string label = String.Format (print_label_format,
-									      comment,
-									      selected_photos[p_index].Name,
-									      selected_photos[p_index].Time.ToLocalTime ().ToShortDateString (),
-									      selected_photos[p_index].Time.ToLocalTime ().ToShortTimeString (),
-									      tag_string,
-									      selected_photos[p_index].Description);
-
-						DrawComment (context, (x + 1) * w, (rotated ? y : y + 1) * h, (rotated ? w : h) * .025, label, rotated);
-
-						pixbuf.Dispose ();
-					}
-				}
-			}
-
-		}
-
-		protected override void OnEndPrint (Gtk.PrintContext context)
-		{
-			base.OnEndPrint (context);
-			context.Dispose ();
-		}
-
-		protected override void OnRequestPageSetup (Gtk.PrintContext context, int page_nr, Gtk.PageSetup setup)
-		{
-			base.OnRequestPageSetup (context, page_nr, setup);
-		}
-
-		private void DrawCropMarks (Context cr, double x, double y, double length)
-		{
-			cr.Save ();
-			cr.Color = new Color (0, 0, 0);
-			cr.MoveTo (x - length/2, y);
-			cr.LineTo (x + length/2, y);
-			cr.MoveTo (x, y - length/2);
-			cr.LineTo (x, y + length/2);
-			cr.LineWidth = .2;
-			cr.SetDash (new double[] {length*.4, length*.2}, 0);
-			cr.Stroke ();
-			cr.Restore ();
-		}
-
-		private static void DrawComment (Gtk.PrintContext context, double x, double y, double h, string comment, bool rotated)
-		{
-			if (comment == null || comment == String.Empty)
-				return;
-
-			Context cr = context.CairoContext;
-			cr.Save ();
-			Pango.Layout layout = context.CreatePangoLayout ();
-			Pango.FontDescription desc = Pango.FontDescription.FromString ("sans 14");
-			layout.FontDescription = desc;
-			layout.SetText (comment);
-			int lay_w, lay_h;
-			layout.GetPixelSize (out lay_w, out lay_h);
-			double scale = h/lay_h;
-			if (rotated) {
-				cr.Translate (x - h, y + lay_w * scale);
-				cr.Rotate (- Math.PI / 2);
-			}
-			else
-				cr.Translate (x - lay_w * scale, y - h);
-			cr.Scale (scale, scale);
-			Pango.CairoHelper.ShowLayout (context.CairoContext, layout);
-			cr.Restore ();
-		}
-	
-
-		private void DrawImage (Context cr, Gdk.Pixbuf pixbuf, double x, double y, double w, double h)
-		{
-			double scalex, scaley;
-			switch (fit) {
-			case CustomPrintWidget.FitMode.Zoom:
-				scalex = scaley = Math.Max (w/pixbuf.Width, h/pixbuf.Height);
-				break;
-			case CustomPrintWidget.FitMode.Fill:
-				scalex = w/pixbuf.Width;
-				scaley = h/pixbuf.Height;
-				break;
-			default:
-			case CustomPrintWidget.FitMode.Scaled:
-				scalex = scaley = Math.Min (w/pixbuf.Width, h/pixbuf.Height);
-				break;
-			}	
-
-			double rectw = w / scalex;
-			double recth = h / scaley;
-
-			cr.Save ();
-			if (white_borders)
-				cr.Translate (w * .025, h * .025);
-
-			cr.Translate (x, y);
-			if (white_borders)
-				cr.Scale (.95, .95);
-			cr.Scale (scalex, scaley);
-			cr.Rectangle (0, 0, rectw, recth);
-			Gdk.CairoHelper.SetSourcePixbuf (cr, pixbuf, (rectw - pixbuf.Width) / 2.0, (recth - pixbuf.Height) / 2.0);
-			cr.Fill ();
-
-			if (white_borders) {
-				cr.Rectangle (0, 0 ,rectw, recth);
-				cr.Color = new Color (0, 0, 0);
-				cr.LineWidth = 1 / scalex;
-				cr.Stroke ();
-			}
-			cr.Restore ();
-		}
-
-		[DllImport("libfspot")]
-		static extern IntPtr f_pixbuf_from_cairo_surface (IntPtr handle);
-		
-		private static Gdk.Pixbuf CreatePixbuf (Surface s)
-		{
-			IntPtr result = f_pixbuf_from_cairo_surface (s.Handle);
-			return (Gdk.Pixbuf) GLib.Object.GetObject (result, true);
-		}
-	}
-}
diff --git a/src/ProgressItem.cs b/src/ProgressItem.cs
deleted file mode 100644
index aaafe71..0000000
--- a/src/ProgressItem.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * FSpot.ProgressItem.cs
- *
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-
-namespace FSpot {
-	public class ProgressItem {
-		public ProgressItem () {
-		}
-		
-		public delegate void ChangedHandler (ProgressItem item);
-		public event ChangedHandler Changed;
-
-		double value;
-		public double Value {
-			get {
-				lock (this) {
-					return value;
-				}
-			}
-			set {
-				lock (this) {
-					this.value = value;
-					if (Changed != null)
-						Changed (this);
-				}
-			}
-		}
-	}
-}
-
diff --git a/src/Query/HiddenTag.cs b/src/Query/HiddenTag.cs
deleted file mode 100644
index 0990b47..0000000
--- a/src/Query/HiddenTag.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * HiddenTag.cs
- * 
- * Author(s):
- *	Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-
-using System;
-
-using FSpot;
-
-
-namespace FSpot.Query
-{
-	
-	public class HiddenTag : IQueryCondition
-	{
-		private static HiddenTag show_hidden_tag;
-		private static HiddenTag hide_hidden_tag;
-		
-		public static HiddenTag ShowHiddenTag {
-			get {
-				if (show_hidden_tag == null)
-					show_hidden_tag = new HiddenTag (true);
-				
-				return show_hidden_tag;
-			}
-		}
-
-		public static HiddenTag HideHiddenTag {
-			get {
-				if (hide_hidden_tag == null)
-					hide_hidden_tag = new HiddenTag (false);
-				
-				return hide_hidden_tag;
-			}
-		}
-		
-		
-		bool show_hidden;
-		
-		private HiddenTag (bool show_hidden)
-		{
-			this.show_hidden = show_hidden;
-		}
-		
-		public string SqlClause ()
-		{
-			Tag hidden = App.Instance.Database.Tags.Hidden;
-			
-			if ( ! show_hidden && hidden != null)
-				return String.Format (" photos.id NOT IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0}) ",
-				                      hidden.Id);
-			else
-				return null;
-		}
-	}
-}
diff --git a/src/Query/LogicalTerm.cs b/src/Query/LogicalTerm.cs
deleted file mode 100644
index a3967d5..0000000
--- a/src/Query/LogicalTerm.cs
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * FSpot.Query.LogicalTerm
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Collections.Generic;
-using Hyena;
-
-namespace FSpot.Query
-{
-	public abstract class LogicalTerm : IQueryCondition
-	{
-		public abstract string SqlClause ();
-	}
-
-	public class TagTerm : LogicalTerm, IDisposable
-	{
-		Tag tag;
-		public Tag Tag {
-			get { return tag; }
-		}
-
-		public TagTerm (Tag tag)
-		{
-			this.tag = tag;
-		}
-
-		public override string SqlClause ()
-		{
-			return SqlClause (this);
-		}
-
-		internal static string SqlClause (params TagTerm [] tags)
-		{
-			List<string> list = new List<string> (tags.Length);
-			foreach (TagTerm tag in tags)
-				list.Add (tag.Tag.Id.ToString ());
-			return SqlClause (list.ToArray ());
-		}
-
-		private static string SqlClause (string [] tagids)
-		{
-			if (tagids.Length == 0)
-				return null;
-			if (tagids.Length == 1)
-				return String.Format (" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0})) ", tagids[0]);
-			else
-				return String.Format (" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN ({0}))) ", String.Join (", ", tagids));
-		}
-
-		public void Dispose ()
-		{
-			if (tag != null)
-				tag.Dispose ();
-			System.GC.SuppressFinalize (this);
-		}
-
-		~TagTerm ()
-		{
-			Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
-			if (tag != null)
-				tag.Dispose ();
-		}
-	}
-
-	public class TextTerm : LogicalTerm
-	{
-		string text;
-		public string Text {
-			get { return text; }
-		}
-
-		string field;
-		public string Field {
-			get { return field;  }
-		}
-
-		public TextTerm (string text, string field)
-		{
-			this.text = text;
-			this.field = field;
-		}
-
-		public static OrTerm SearchMultiple (string text, params string[] fields)
-		{
-			List<TextTerm> terms = new List<TextTerm> (fields.Length);
-			foreach (string field in fields)
-				terms.Add (new TextTerm (text, field));
-			return new OrTerm (terms.ToArray ());
-		}
-
-		public override string SqlClause ()
-		{
-			return String.Format (" {0} LIKE %{1}% ", field, text);
-		}
-	}
-
-	public class NotTerm : LogicalTerm
-	{
-		LogicalTerm term;
-		public LogicalTerm Term {
-			get { return term; }
-		}
-
-		public NotTerm (LogicalTerm term)
-		{
-			this.term = term;
-		}
-
-		public override string SqlClause ()
-		{
-			return String.Format (" NOT ({0}) ", term.SqlClause ());
-		}
-	}
-
-	public abstract class NAryOperator : LogicalTerm
-	{
-		protected List<LogicalTerm> terms;
-		public LogicalTerm[] Terms {
-			get { return terms.ToArray (); }
-		}
-
-		protected string [] ToStringArray ()
-		{
-			List<string> ls = new List<string> (terms.Count);
-			foreach (LogicalTerm term in terms)
-				ls.Add (term.SqlClause ());
-			return ls.ToArray ();
-		}
-
-		public static string SqlClause (string op, string[] items)
-		{
-			if (items.Length == 1)
-				return items [0];
-			else
-				return " (" + String.Join (String.Format (" {0} ", op), items) + ") ";
-		}
-		
-	}
-
-	public class OrTerm : NAryOperator
-	{
-		public OrTerm (params LogicalTerm[] terms)
-		{
-			this.terms = new List<LogicalTerm> (terms.Length);
-			foreach (LogicalTerm term in terms)
-				Add (term);
-		}
-
-		private void Add (LogicalTerm term)
-		{
-			if (term is OrTerm)
-				foreach (LogicalTerm t in (term as OrTerm).terms)
-					Add (t);
-			else
-				terms.Add (term);
-		}
-
-		public override string SqlClause ()
-		{
-			List<TagTerm> tagterms = new List<TagTerm> ();
-			List<string> otherterms = new List<string> ();
-			foreach (LogicalTerm term in terms)
-				if (term is TagTerm)
-					tagterms.Add (term as TagTerm);
-				else
-					otherterms.Add (term.SqlClause ());
-			otherterms.Insert (0, TagTerm.SqlClause (tagterms.ToArray ()));
-			return SqlClause ("OR", otherterms.ToArray ());
-		}
-	}
-
-	public class AndTerm : NAryOperator
-	{
-		public AndTerm (params LogicalTerm[] terms)
-		{
-			this.terms = new List<LogicalTerm> (terms.Length);
-			foreach (LogicalTerm term in terms)
-				Add (term);
-		}
-
-		private void Add (LogicalTerm term)
-		{
-			if (term is AndTerm)
-				foreach (LogicalTerm t in (term as AndTerm).terms)
-					Add (t);
-			else
-				terms.Add (term);
-		}
-
-		public override string SqlClause ()
-		{
-			return SqlClause ("AND", ToStringArray ());
-		}
-	}
-}
diff --git a/src/Query/Makefile.am b/src/Query/Makefile.am
deleted file mode 100644
index 3ad8fc8..0000000
--- a/src/Query/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-ASSEMBLY = FSpot.Query
-TARGET = library
-LINK = $(REF_FSPOT_QUERY)
-
-SOURCES = \
-	ConditionWrapper.cs \
-	DateRange.cs \
-	FolderSet.cs \
-	IOrderCondition.cs \
-	IQueryCondition.cs \
-	LogicalTerm.cs \
-	OrderByTime.cs \
-	RatingRange.cs \
-	RollSet.cs \
-	UntaggedCondition.cs \
-	Tests/LogicalTermTests.cs
-
-RESOURCES =
-
-include $(top_srcdir)/build/build.mk
diff --git a/src/Query/Makefile.in b/src/Query/Makefile.in
deleted file mode 100644
index ce0f1d5..0000000
--- a/src/Query/Makefile.in
+++ /dev/null
@@ -1,810 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = src/Query
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Query
-TARGET = library
-LINK = $(REF_FSPOT_QUERY) $(am__append_1)
-SOURCES = \
-	ConditionWrapper.cs \
-	DateRange.cs \
-	FolderSet.cs \
-	IOrderCondition.cs \
-	IQueryCondition.cs \
-	LogicalTerm.cs \
-	OrderByTime.cs \
-	RatingRange.cs \
-	RollSet.cs \
-	UntaggedCondition.cs \
-	Tests/LogicalTermTests.cs
-
-RESOURCES = 
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Query/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign src/Query/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/Query/RollSet.cs b/src/Query/RollSet.cs
deleted file mode 100644
index 1ac8ce3..0000000
--- a/src/Query/RollSet.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * RollSet.cs
- *
- * Author(s):
- * 	Bengt Thuree
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is frees software. See COPYING for details.
- */
-
-namespace FSpot.Query
-{
-	public class RollSet : IQueryCondition
-	{
-		private Roll [] rolls;
-
-		public RollSet (Roll [] rolls)
-		{
-			this.rolls = rolls;
-		}
-
-		public RollSet (Roll roll) : this (new Roll[] {roll})
-		{
-		}
-
-		public string SqlClause ()
-		{
-			//Building something like " photos.roll_id IN (3, 4, 7) " 
-			System.Text.StringBuilder sb = new System.Text.StringBuilder (" photos.roll_id IN (");
-			for (int i = 0; i < rolls.Length; i++) {
-				sb.Append (rolls [i].Id);
-				if (i != rolls.Length - 1)
-					sb.Append (", ");
-			}
-			sb.Append (") ");
-			return sb.ToString ();	
-		}
-	}
-}
diff --git a/src/Query/Tests/LogicalTermTests.cs b/src/Query/Tests/LogicalTermTests.cs
deleted file mode 100644
index 6911b24..0000000
--- a/src/Query/Tests/LogicalTermTests.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-#if ENABLE_TESTS
-using NUnit.Framework;
-
-namespace FSpot.Query.Tests
-{
-	[TestFixture]
-	public class LogicalTermTests
-	{
-		[Test]
-		public void SomeTests ()
-		{
-			Tag t1 = new Tag (null, 1, "tag1");
-			Tag t2 = new Tag (null, 2, "tag2");
-			Tag t3 = new Tag (null, 3, "tag3");
-			Tag t4 = new Tag (null, 4, "tag4");
-			Tag t5 = new Tag (null, 5, "tag5");
-
-			TagTerm tt1 = new TagTerm (t1);
-			TagTerm tt2 = new TagTerm (t2);
-			TagTerm tt3 = new TagTerm (t3);
-			TagTerm tt4 = new TagTerm (t4);
-			TagTerm tt5 = new TagTerm (t5);
-
-			object [] tests = {
-				" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id = 1)) ", tt1,
-				" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN (2, 3))) ", new OrTerm (tt2, tt3),
-				" (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN (3, 4, 5))) ", new OrTerm (tt3, tt4, tt5),
-				
-			};
-	
-			for (int i=0; i < tests.Length; i+=2) {
-				//System.Console.WriteLine ((tests[i+1] as LogicalTerm).SqlClause ());
-				//System.Console.WriteLine (tests[i]);
-				Assert.AreEqual (tests[i] as string, (tests[i+1] as LogicalTerm).SqlClause ());
-			}
-		}
-	}
-}
-#endif
diff --git a/src/QueryWidget.cs b/src/QueryWidget.cs
deleted file mode 100644
index fd7fc49..0000000
--- a/src/QueryWidget.cs
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * FSpot.QueryWidget.cs
- *
- * Author(s):
- *	Gabriel Burt
- *
- * This is free software. See COPYING for details.
- */
-
-
-using System;
-using System.Collections.Generic;
-
-using Mono.Unix;
-
-using Gtk;
-
-using FSpot.Utils;
-using FSpot.Query;
-using FSpot.Widgets;
-using Hyena;
-
-
-namespace FSpot {
-
-	public class QueryWidget : HighlightedBox {
-		PhotoQuery query;
-		LogicWidget logic_widget;
-		FolderQueryWidget folder_query_widget;
-		
-		Gtk.HBox box;
-		Gtk.Label label;
-		Gtk.Label untagged;
-		Gtk.Label rated;
-		Gtk.Label comma1_label;
-		Gtk.Label comma2_label;
-		Gtk.Label rollfilter;
-		Gtk.HBox warning_box;
-		Gtk.Button clear_button;
-		Gtk.Button refresh_button;
-
-		public LogicWidget Logic {
-			get { return logic_widget; }
-		}
-
-		public QueryWidget (PhotoQuery query, Db db) : base(new HBox())
-		{
-			box = Child as HBox;
-			box.Spacing = 6;
-			box.BorderWidth = 2;
-
-			this.query = query;
-			query.Changed += HandleChanged;
-
-			label = new Gtk.Label (Catalog.GetString ("Find: "));
-			label.Show ();
-			label.Ypad = 9;
-			box.PackStart (label, false, false, 0);
-
-			untagged = new Gtk.Label (Catalog.GetString ("Untagged photos"));
-			untagged.Visible = false;
-			box.PackStart (untagged, false, false, 0);
-
-			comma1_label = new Gtk.Label (", ");
-			comma1_label.Visible = false;
-			box.PackStart (comma1_label, false, false, 0);
-
-			rated = new Gtk.Label (Catalog.GetString ("Rated photos"));
-			rated.Visible = false;
-			box.PackStart (rated, false, false, 0);
-
-			comma2_label = new Gtk.Label (", ");
-			comma2_label.Visible = false;
-			box.PackStart (comma2_label, false, false, 0);
-
-			// Note for translators: 'Import roll' is no command, it means 'Roll that has been imported' 
-			rollfilter = new Gtk.Label (Catalog.GetString ("Import roll"));	
-			rollfilter.Visible = false;
-			box.PackStart (rollfilter, false, false, 0);
-
-			folder_query_widget = new FolderQueryWidget (query);
-			folder_query_widget.Visible = false;
-			box.PackStart (folder_query_widget, false, false, 0);
-			
-			logic_widget = new LogicWidget (query, db.Tags);
-			logic_widget.Show ();
-			box.PackStart (logic_widget, true, true, 0);
-
-			warning_box = new Gtk.HBox ();
-			warning_box.PackStart (new Gtk.Label (System.String.Empty));
-			
-			Gtk.Image warning_image = new Gtk.Image ("gtk-info", Gtk.IconSize.Button);
-			warning_image.Show ();
-			warning_box.PackStart (warning_image, false, false, 0);
-			
-			clear_button = new Gtk.Button ();
-			clear_button.Add (new Gtk.Image ("gtk-close", Gtk.IconSize.Button));
-			clear_button.Clicked += HandleClearButtonClicked;
-			clear_button.Relief = Gtk.ReliefStyle.None;
-			clear_button.TooltipText = Catalog.GetString("Clear search");
-			box.PackEnd (clear_button, false, false, 0);
-			
-			refresh_button = new Gtk.Button ();
-			refresh_button.Add (new Gtk.Image ("gtk-refresh", Gtk.IconSize.Button));
-			refresh_button.Clicked += HandleRefreshButtonClicked;
-			refresh_button.Relief = Gtk.ReliefStyle.None;
-			refresh_button.TooltipText = Catalog.GetString("Refresh search");
-			box.PackEnd (refresh_button, false, false, 0);
-
-			Gtk.Label warning = new Gtk.Label (Catalog.GetString ("No matching photos found"));
-			warning_box.PackStart (warning, false, false, 0);
-			warning_box.ShowAll ();
-			warning_box.Spacing = 6;
-			warning_box.Visible = false;
-
-			box.PackEnd (warning_box, false, false, 0);
-			
-			warning_box.Visible = false;
-		}
-		
-		public void HandleClearButtonClicked (object sender, System.EventArgs args)
-		{
-			Close ();
-		}
-
- 		public void HandleRefreshButtonClicked (object sender, System.EventArgs args)
- 		{
- 			query.RequestReload ();
- 		}
- 
-		public void Close ()
-		{
-			query.Untagged = false;
-			query.RollSet = null;
-
-			if (query.Untagged)
-				return;
-
-			query.RatingRange = null;
-			logic_widget.Clear = true;
-			logic_widget.UpdateQuery ();
-			
-			folder_query_widget.Clear ();
-			query.RequestReload ();
-			
-			HideBar ();
-		}
-
-		public void ShowBar ()
-		{
-			Show ();
-		}
-
-		public void HideBar ()
-		{
-			Hide ();
-		}
-
-		public void HandleChanged (IBrowsableCollection collection) 
-		{
-			if (query.TagTerm == null)
-				logic_widget.Clear = true;
-
-			if ( ! logic_widget.Clear
-			    || query.Untagged
-			    || (query.RollSet != null)
-			    || (query.RatingRange != null)
-			    || ! folder_query_widget.Empty)
-				ShowBar ();
-			else
-				HideBar ();
-
-			untagged.Visible = query.Untagged;
-			rated.Visible = (query.RatingRange != null);
-			warning_box.Visible = (query.Count < 1);
-			rollfilter.Visible = (query.RollSet != null);
-			comma1_label.Visible = (untagged.Visible && rated.Visible);
-			comma2_label.Visible = (!untagged.Visible && rated.Visible && rollfilter.Visible) || 
-					       (untagged.Visible && rollfilter.Visible);
-
-		}
-
-		public void PhotoTagsChanged (Tag[] tags)
-		{
-			logic_widget.PhotoTagsChanged (tags);
-		}
-
-		public void Include (Tag [] tags)
-		{
-			logic_widget.Include (tags);
-		}
-		
-		public void UnInclude (Tag [] tags)
-		{
-			logic_widget.UnInclude (tags);
-		}
-		
-		public void Require (Tag [] tags)
-		{
-			logic_widget.Require (tags);
-		}
-		
-		public void UnRequire (Tag [] tags)
-		{
-			logic_widget.UnRequire (tags);
-		}
-		
-		public bool TagIncluded (Tag tag)
-		{
-			return logic_widget.TagIncluded (tag);
-		}
-		
-		public bool TagRequired (Tag tag)
-		{
-			return logic_widget.TagRequired (tag);
-		}
-		
-		public void SetFolders (IEnumerable<SafeUri> uri_list)
-		{
-			folder_query_widget.SetFolders (uri_list);
-			query.RequestReload ();
-		}
-	}
-}
diff --git a/src/QueuedSqliteDatabase.cs b/src/QueuedSqliteDatabase.cs
deleted file mode 100644
index e6fec3f..0000000
--- a/src/QueuedSqliteDatabase.cs
+++ /dev/null
@@ -1,501 +0,0 @@
-/***************************************************************************
- *  QueuedSqliteDatabase.cs
- *
- *  Copyright (C) 2005-2006 Novell, Inc.
- *  Written by Aaron Bockover <aaron at aaronbock.net>
- ****************************************************************************/
-
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
- *
- *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
- *  Software is furnished to do so, subject to the following conditions:
- *
- *  The above copyright notice and this permission notice shall be included in 
- *  all copies or substantial portions of the Software.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
- *  DEALINGS IN THE SOFTWARE.
- */
- 
-using System;
-using System.IO;
-using System.Threading;
-using System.Collections.Generic;
-using Mono.Data.SqliteClient;
-
-using Hyena;
-
-namespace Banshee.Database
-{
-    /// <summary>
-    /// A thread-safe wrapper for SQLite.
-    /// </summary>
-    /// <remarks>
-    /// SQLite is not thread-safe by default on Linux. Therefor, we handle 
-    /// all SQL queries on a seperate thread.
-    /// </remarks>
-    public class QueuedSqliteDatabase : IDisposable
-    {
-        /// <summary>
-        /// Holds queries to be executed.
-        /// </summary>
-        private Queue<QueuedSqliteCommand> command_queue = new Queue<QueuedSqliteCommand>();
-
-        private SqliteConnection connection;
-        private int version;
-        private Thread queue_thread;
-        private volatile bool dispose_requested = false;
-        private volatile bool connected;
-
-        /// <summary>
-        /// Thread currently executing the transaction.
-        /// </summary>
-        /// <remarks>
-        /// Only queries from this thread are allowed (all threads are allowed
-        /// if there is no active transaction. Queries from other threads will
-        /// be queued until the transaction ends.
-        /// </remarks>
-        private volatile Thread current_transaction_thread = null;
-
-        /// <summary>
-        /// Threads will sleep on this signal if there's a transaction active.
-        /// </summary>
-        ///
-        /// This works as a mutual exclusion mechanism. If there are no threads
-        /// waiting to start a transaction, the transaction_signal will 
-        /// immediately continue (note that the initial state is set to
-        /// signalled). Otherwise, the thread will wait until signalled.
-        private AutoResetEvent transaction_signal = new AutoResetEvent(true);
-        
-        /// <summary>
-        /// Signal used to indicate there is new data in the <see cref="command_queue"/>.
-        /// </summary>
-        private AutoResetEvent queue_signal = new AutoResetEvent(false);
-        
-	public delegate void ExceptionThrownHandler (Exception e);
-	public event ExceptionThrownHandler ExceptionThrown;
-
-        public QueuedSqliteDatabase(string dbpath)
-        {
-            // Connect
-            if(connection == null) {
-                version = GetFileVersion(dbpath);
-                if (version == 3) {
-                    connection = new SqliteConnection("Version=3,URI=file:" + dbpath);
-                } else if (version == 2) {
-                    connection = new SqliteConnection("Version=2,encoding=UTF-8,URI=file:" + dbpath);
-                } else {
-                    throw new Exception("Unsupported SQLite database version");
-                }
-                connection.Open();
-                connected = true;
-            }
- 
-            queue_thread = new Thread(ProcessQueue);
-            queue_thread.IsBackground = true;
-            queue_thread.Start();
-        }
-
-        ~QueuedSqliteDatabase ()
-        {
-            Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
-            Dispose (false);
-        }
-        
-        public void Dispose()
-        {
-            Dispose (true);
-            GC.SuppressFinalize (this);
-        }
-
-        bool already_disposed = false;
-        protected virtual void Dispose (bool is_disposing)
-        {
-            if (already_disposed)
-                return;
-            if (is_disposing) { //Free managed resources
-                dispose_requested = true;
-                queue_signal.Set();
-                queue_thread.Join();
-            }
-            //Free unmanaged resources
-
-            already_disposed = true;
-       }
-        
-        private void WaitForConnection()
-        {
-            while(!connected);
-        }
-
-        private void QueueCommand(QueuedSqliteCommand command)
-        {
-            // Make queries that happen outside of transactions sleep if there
-            // is an active transaction. This uses the same thread queue as
-            // threads willing to enter a transaction.
-            bool release_thread = false;
-            if (current_transaction_thread != Thread.CurrentThread) {
-                transaction_signal.WaitOne();
-                release_thread = true;
-            }
-
-            lock(command_queue) {
-                command_queue.Enqueue(command);
-            }
-
-            if (release_thread) {
-                transaction_signal.Set();
-            }
-
-            queue_signal.Set();
-        }
-        
-        public SqliteDataReader Query(DbCommand command)
-        {
-            WaitForConnection();
-            command.Connection = connection;
-            command.CommandType = Banshee.Database.CommandType.Reader;
-            QueueCommand(command);
-            return command.WaitForResult() as SqliteDataReader;
-        }
-        
-        public SqliteDataReader Query(object command)
-        {
-            return Query(new DbCommand(command.ToString()));
-        }
-
-        public bool InTransaction {
-            get { return current_transaction_thread != null; }
-        }
-        
-        public void BeginTransaction()
-        {
-            if (current_transaction_thread == Thread.CurrentThread) {
-                throw new Exception("Can't start a recursive transaction");
-            }
-
-            transaction_signal.WaitOne();
-            current_transaction_thread = Thread.CurrentThread;
-            ExecuteNonQuery("BEGIN TRANSACTION");
-        }
-
-        public void CommitTransaction()
-        {
-            if (current_transaction_thread != Thread.CurrentThread) {
-                throw new Exception("Can't commit from outside a transaction");
-            }
-
-            ExecuteNonQuery("COMMIT TRANSACTION");
-            current_transaction_thread = null;
-            transaction_signal.Set(); 
-        }
-
-        public void RollbackTransaction()
-        {
-            if (current_transaction_thread != Thread.CurrentThread) {
-                throw new Exception("Can't rollback from outside a transaction");
-            }
-
-            ExecuteNonQuery("ROLLBACK");
-            current_transaction_thread = null;
-            transaction_signal.Set(); 
-        }
-
-        public object QuerySingle(DbCommand command)
-        {
-            WaitForConnection();
-            command.Connection = connection;
-            command.CommandType = Banshee.Database.CommandType.Scalar;
-            QueueCommand(command);
-            return command.WaitForResult();
-        }
-                
-        public object QuerySingle(object command)
-        {
-            return QuerySingle(new DbCommand(command.ToString()));
-        }
-        
-        public int Execute(DbCommand command)
-        {
-            WaitForConnection();
-            command.Connection = connection;
-            command.CommandType = Banshee.Database.CommandType.Execute;
-            QueueCommand(command);
-            command.WaitForResult();
-            return command.InsertID;
-        }
-        
-        public int Execute(object command)
-        {
-            return Execute(new DbCommand(command.ToString()));
-        }
-        
-        public void ExecuteNonQuery(DbCommand command)
-        {
-            WaitForConnection();
-            command.Connection = connection;
-            command.CommandType = Banshee.Database.CommandType.ExecuteNonQuery;
-            QueueCommand(command);
-        }
-        
-        public void ExecuteNonQuery(object command)
-        {
-            ExecuteNonQuery(new DbCommand(command.ToString()));
-        }
-
-        public bool TableExists(string table)
-        {
-            bool result;
-            if (version == 2) {
-                // Old SQLite doesn't support selecting from sqlite_master
-                try {
-                    Execute("SELECT * FROM "+table+" LIMIT 0");
-                    result = true;
-                } catch (Exception) {
-                    result = false;
-                }
-            } else {
-                result = Convert.ToInt32(QuerySingle(String.Format(@"
-                    SELECT COUNT(*) 
-                        FROM sqlite_master
-                        WHERE Type='table' AND Name='{0}'", 
-                        table))) > 0;
-            }
-
-            return result;
-        }
-
-        private void ProcessQueue()
-        {         
-	    try {
-           
-            // Keep handling queries
-            while(!dispose_requested) {
-                while(command_queue.Count > 0) {
-                    QueuedSqliteCommand command;
-                    lock(command_queue) {
-                        command = command_queue.Dequeue();
-                    }
-		    //Log.Debug (command.CommandText);
-                    command.Execute();
-                }
-
-                queue_signal.WaitOne();
-            }
-
-            // Finish
-            connection.Close();
-	    } catch (Exception e) {
-		    if (ExceptionThrown != null)
-			    ExceptionThrown (e);
-		    else
-			    throw;
-	    }
-        }
-
-        public int GetFileVersion(string path) 
-        {
-            if (!File.Exists(path)) {
-                return 3;
-            }
-
-            using (Stream stream = File.OpenRead (path)) {
-                byte [] data = new byte [15];
-                stream.Read (data, 0, data.Length);
-
-                string magic = System.Text.Encoding.ASCII.GetString (data, 0, data.Length);
-
-                switch (magic) {
-                case "SQLite format 3":
-                    return 3;
-                case "** This file co":
-                    return 2;
-                default:
-                    return -1;
-                }
-            }
-        }
-    }
-
-    public enum CommandType {
-        Reader,
-        Scalar,
-        Execute,
-        ExecuteNonQuery
-    }
-
-    public class QueuedSqliteCommand
-    {
-        private CommandType command_type;
-        private object result;
-        private int insert_id;
-        private Exception execution_exception;
-        private bool finished = false;
-        private Object finishedLock = new Object();
-
-        private SqliteCommand command;
-
-        private const int MAX_RETRIES = 4;
-        private const int SLEEP_TIME = 1000; // 1 sec
-        private int attempt = 0;
-        
-        public QueuedSqliteCommand(string query)
-        {
-            this.command = new SqliteCommand(query);
-        }
-        
-        public QueuedSqliteCommand(SqliteConnection connection, string query, CommandType commandType) 
-        {
-            this.command_type = commandType;
-            this.command = new SqliteCommand(query, connection);
-        }
-        
-        public void Execute()
-        {
-            if(result != null) {
-                throw new ApplicationException("Command has alread been executed");
-            }
-        
-            try {
-                switch(command_type) {
-                    case Banshee.Database.CommandType.Reader:
-                        result = command.ExecuteReader();
-                        break;
-                    case Banshee.Database.CommandType.Scalar:
-                        result = command.ExecuteScalar();
-                        break;
-                    case Banshee.Database.CommandType.Execute:
-                    default:
-                        result = command.ExecuteNonQuery();
-                        insert_id = command.LastInsertRowID();
-                        break;
-                }
-            } catch (SqliteBusyException) {
-                if (attempt > MAX_RETRIES) {
-                    throw; // FIXME: show this to the user
-                }
-
-                attempt++;
-                Thread.Sleep(SLEEP_TIME);
-                Execute();
-            } catch(Exception e) {
-                Log.DebugFormat ("Broken query: {0}", command.CommandText);
-                execution_exception = e;
-                if (command_type == Banshee.Database.CommandType.ExecuteNonQuery) {
-                    throw execution_exception;
-                }
-            }
-            command.Dispose();
-            
-            Monitor.Enter(finishedLock);
-            finished = true;
-            Monitor.Pulse(finishedLock);
-            Monitor.Exit(finishedLock);
-        }
-        
-        public object WaitForResult()
-        {
-            Monitor.Enter(finishedLock);
-            while (!finished) {
-                Monitor.Wait(finishedLock);
-            };
-            Monitor.Exit(finishedLock);
-            
-            if(execution_exception != null) {
-                throw execution_exception;
-            }
-            
-            return result;
-        }
-        
-        public object Result {
-            get { return result; }
-            internal set { result = value; }
-        }
-        
-        public int InsertID {
-            get { return insert_id; }
-        }
-        
-        public CommandType CommandType {
-            get { return command_type; }
-            set { command_type = value; }
-        }
-
-        public SqliteConnection Connection {
-            set { command.Connection = value; }
-        }
-
-        protected SqliteParameterCollection Parameters {
-            get { return command.Parameters; }
-        }
-
-        public string CommandText {
-            get { return command.CommandText; }
-        }
-    }
-    
-    public class DbCommand : QueuedSqliteCommand
-    {
-        public DbCommand(string command) : base(command)
-        {
-        }
-                
-        public DbCommand(string command, params object [] parameters) : this(command)
-        {
-            for(int i = 0; i < parameters.Length;) {
-                SqliteParameter param;
-                
-                if(parameters[i] is SqliteParameter) {
-                    param = (SqliteParameter)parameters[i];
-                    if(i < parameters.Length - 1 && !(parameters[i + 1] is SqliteParameter)) {
-                        param.Value = parameters[i + 1];
-                        i += 2;
-                    } else {
-                        i++;
-                    }
-                } else {
-                    param = new SqliteParameter();
-                    param.ParameterName = (string)parameters[i];
-                    param.Value = parameters[i + 1];
-                    i += 2;
-                }
-                
-                Parameters.Add(param);
-            }
-        }
-        
-        public void AddParameter<T>(string name, T value)
-        {
-            AddParameter<T>(new DbParameter<T>(name), value);
-        }
-        
-        public void AddParameter<T>(DbParameter<T> param, T value)
-        {
-            param.Value = value;
-            Parameters.Add(param);
-        }
-    }
-    
-    public class DbParameter<T> : SqliteParameter
-    {
-        public DbParameter(string name) : base()
-        {
-            ParameterName = name;
-        }
-        
-        public new T Value {
-            get { return (T)base.Value; }
-            set { base.Value = value; }
-        }
-    }
-}
diff --git a/src/RollStore.cs b/src/RollStore.cs
deleted file mode 100644
index 25bc89d..0000000
--- a/src/RollStore.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * RollStore.cs
- *
- * Author(s)
- *	Ettore Perazzoli <ettore at perazzoli.org>
- *	Bengt Thuree
- *	Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using Mono.Data.SqliteClient;
-using System.Collections;
-using System.IO;
-using System;
-using Banshee.Database;
-using FSpot;
-using Hyena;
-
-public class RollStore : DbStore<Roll>
-{
-	public RollStore (QueuedSqliteDatabase database, bool is_new) : base (database, false)
-	{
-		if (!is_new && Database.TableExists("rolls"))
-			return;
-
-		Database.ExecuteNonQuery (
-			"CREATE TABLE rolls (\n" +
-			"	id	INTEGER PRIMARY KEY NOT NULL, \n" +
-			"       time	INTEGER NOT NULL\n" +
-			")");
-	}
-
-	public Roll Create (DateTime time_in_utc)
-	{
-		long unix_time = DateTimeUtil.FromDateTime (time_in_utc);
-		uint id = (uint) Database.Execute (new DbCommand ("INSERT INTO rolls (time) VALUES (:time)", "time", unix_time));
-
-		Roll roll = new Roll (id, unix_time);
-		AddToCache (roll);
-
-		return roll;
-	}
-
-	public Roll Create ()
-	{
-		return Create (System.DateTime.UtcNow);
-	}
-
-	public override Roll Get (uint id)
-	{
-		Roll roll = LookupInCache (id) as Roll;
-		if (roll != null)
-			return roll;
-
-		SqliteDataReader reader = Database.Query(new DbCommand ("SELECT time FROM rolls WHERE id = :id", "id", id));
-
-		if (reader.Read ()) {
-			roll = new Roll (id, Convert.ToUInt32 (reader ["time"]));
-			AddToCache (roll);
-		}
-
-		return roll;
-	}
-
-	public override void Remove (Roll item)
-	{
-		RemoveFromCache (item);
-		Database.ExecuteNonQuery (new DbCommand ("DELETE FROM rolls WHERE id = :id", "id", item.Id));
-	}
-
-	public override void Commit (Roll item)
-	{
-		// Nothing to do here, since all the properties of a roll are immutable.
-	}
-
-	public uint PhotosInRoll (Roll roll)
-	{
-		uint number_of_photos = 0;
-		using (SqliteDataReader reader = Database.Query (new DbCommand ("SELECT count(*) AS count FROM photos WHERE roll_id = :id", "id", roll.Id))) {
-			if (reader.Read ())
-				number_of_photos = Convert.ToUInt32 (reader ["count"]);
-               
-			reader.Close ();
-		}
-                return number_of_photos;
-	}
-
-	public Roll [] GetRolls ()
-	{
-		return GetRolls (-1);
-	}
-
-	public Roll [] GetRolls (int limit)
-	{
-		ArrayList list = new ArrayList ();
-
-		string query = "SELECT DISTINCT rolls.id AS roll_id, rolls.time AS roll_time FROM rolls, photos WHERE photos.roll_id = rolls.id ORDER BY rolls.time DESC";
-		if (limit >= 0)
-			query += " LIMIT " + limit;
-
-		using (SqliteDataReader reader = Database.Query(query)) {
-			while (reader.Read ()) {
-				uint id = Convert.ToUInt32 (reader["roll_id"]);
-
-				Roll roll = LookupInCache (id) as Roll;
-				if (roll == null) {
-					roll = new Roll (id, Convert.ToUInt32 (reader["roll_time"]));
-					AddToCache (roll);
-				}
-				list.Add (roll);
-			}
-			reader.Close ();
-		}
-		return (Roll []) list.ToArray (typeof (Roll));
-	}
-}
diff --git a/src/RotateCommand.cs b/src/RotateCommand.cs
deleted file mode 100644
index f4628fd..0000000
--- a/src/RotateCommand.cs
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Filters/IFilter.cs
- *
- * Author(s)
- *   Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details
- *
- */
-
-using System;
-using System.IO;
-
-using Gtk;
-using Gdk;
-
-using FSpot;
-using FSpot.UI.Dialog;
-
-using Hyena;
-using Hyena.Widgets;
-using FSpot.Utils;
-
-using Mono.Unix;
-
-namespace FSpot {
-	public class RotateException : ApplicationException {
-		public string path;
-		public bool ReadOnly = false;
-		
-		public string Path {
-			get { return path; }
-		}
-
-		public RotateException (string msg, string path) : this (msg, path, false) {}
-		
-		public RotateException (string msg, string path, bool ro) : base (msg) {
-			this.path = path;
-			this.ReadOnly = ro;
-		}
-	}
-
-	public enum RotateDirection {
-		Clockwise,
-		Counterclockwise,
-	}
-
-	public class RotateOperation {
-		IBrowsableItem item;
-		RotateDirection direction;
-		bool done;
-
-		public RotateOperation (IBrowsableItem item, RotateDirection direction)
-		{
-			this.item = item;
-			this.direction = direction;
-			done = false;
-		}
-
-		private static void RotateOrientation (string original_path, RotateDirection direction)
-		{
-            try {
-                using (var metadata = Metadata.Parse (new SafeUri (original_path))) {
-                    var tag = metadata.ImageTag;
-                    var orientation = direction == RotateDirection.Clockwise
-                        ? FSpot.Utils.PixbufUtils.Rotate90 (tag.Orientation)
-                        : FSpot.Utils.PixbufUtils.Rotate270 (tag.Orientation);
-
-                    tag.Orientation = orientation;
-                    metadata.Save ();
-                }
-            } catch (Exception 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 () {
-			string original_path;
-
-			if (done)
-				return false;
-
- 			original_path = item.DefaultVersion.Uri.LocalPath;
- 			done = true;
-
-			if ((File.GetAttributes(original_path) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) {
-				throw new RotateException (Catalog.GetString ("Unable to rotate readonly file"), original_path, true);
-			}
-
-			Rotate (original_path, direction);
-
-			return !done;
-		}
-	}
-
-	public class RotateMultiple {
-		RotateDirection direction;
-		IBrowsableItem [] items;
-		int index;
-		RotateOperation op;
-
-		public int Index { 
-			get { return index; }
-		}
-
-		public IBrowsableItem [] Items {
-			get { return items; }
-		}
-
-		public RotateMultiple (IBrowsableItem [] items, RotateDirection direction)
-		{
-			this.direction = direction;
-			this.items = items;
-			index = 0;
-		}
-		
-		public bool Step ()
-		{
-			if (index >= items.Length)  
-				return false;
-
-			if (op == null) 
-				op = new RotateOperation (items [index], direction);
-			
-			if (op.Step ())
-				return true;
-			else {
-				index++;
-				op = null;
-			}
-
-			return (index < items.Length);
-		}
-	}
-}
-
-public class RotateCommand {
-	private Gtk.Window parent_window;
-
-	public RotateCommand (Gtk.Window parent_window)
-	{
-		this.parent_window = parent_window;
-	}
-
-	public bool Execute (RotateDirection direction, IBrowsableItem [] items)
-	{
-		ProgressDialog progress_dialog = null;
-		
-		if (items.Length > 1)
-			progress_dialog = new ProgressDialog (Catalog.GetString ("Rotating photos"),
-							      ProgressDialog.CancelButtonType.Stop,
-							      items.Length, parent_window);
-		
-	        RotateMultiple op = new RotateMultiple (items, direction);
-		int readonly_count = 0;
-		bool done = false;
-		int index = 0;
-
-		while (!done) {
-			if (progress_dialog != null && op.Index != -1 && index < items.Length) 
-				if (progress_dialog.Update (String.Format (Catalog.GetString ("Rotating photo \"{0}\""), op.Items [op.Index].Name)))
-					break;
-
-			try {
-				done = !op.Step ();
-			} catch (RotateException re) {
-				if (!re.ReadOnly)
-					RunGenericError (re, re.Path, re.Message);
-				else
-					readonly_count++;
-			} catch (GLib.GException) {
-				readonly_count++;
-			} catch (DirectoryNotFoundException e) {
-				RunGenericError (e, op.Items [op.Index].DefaultVersion.Uri.LocalPath, Catalog.GetString ("Directory not found"));
-			} catch (FileNotFoundException e) {
-				RunGenericError (e, op.Items [op.Index].DefaultVersion.Uri.LocalPath, Catalog.GetString ("File not found"));
-			} catch (Exception e) {
-				RunGenericError (e, op.Items [op.Index].DefaultVersion.Uri.LocalPath);
-			}
-			index ++;
-		}
-		
-		if (progress_dialog != null)
-			progress_dialog.Destroy ();
-		
-		if (readonly_count > 0)
-			RunReadonlyError (readonly_count);
-		
-		return true;
-	}
-
-	private void RunReadonlyError (int readonly_count)
-	{
-		string notice = Catalog.GetPluralString ("Unable to rotate photo", "Unable to rotate {0} photos", readonly_count);
-		string desc = Catalog.GetPluralString (
-			"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.",
-			"{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.",
-			readonly_count
-		);
-
-		notice = String.Format (notice, readonly_count);
-		desc = String.Format (desc, readonly_count);
-		
-		HigMessageDialog md = new HigMessageDialog (parent_window, 
-							    DialogFlags.DestroyWithParent,
-							    MessageType.Error,
-							    ButtonsType.Close,
-							    notice, 
-							    desc);
-		md.Run();
-		md.Destroy();
-	}
-	
-	// FIXME shouldn't need this method, should catch all exceptions explicitly
-	// so can present translated error messages.
-	private void RunGenericError (System.Exception e, string path)
-	{
-		RunGenericError (e, path, e.Message);
-	}
-
-	private void RunGenericError (System.Exception e, string path, string msg)
-	{
-		string longmsg = String.Format (Catalog.GetString ("Received error \"{0}\" while attempting to rotate {1}"),
-						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);
-		md.Run ();
-		md.Destroy ();
-	}
-}
diff --git a/src/SelectionDataExtensions.cs b/src/SelectionDataExtensions.cs
deleted file mode 100644
index 83206cb..0000000
--- a/src/SelectionDataExtensions.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * FSpot.SelectionDataExtensions.cs
- *
- * Author(s)
- * 	Mike Gemuende <mike at gemuende.de>
- *	Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Text;
-
-using Gtk;
-using Gdk;
-
-using FSpot;
-using FSpot.Utils;
-
-namespace FSpot
-{
-	public static class SelectionDataExtensions
-	{
-		public static void SetPhotosData (this SelectionData selection_data, Photo [] photos, Atom target)
-		{
-			byte [] data = new byte [photos.Length * sizeof (uint)];
-			
-			int i = 0;
-			foreach (Photo photo in photos) {
-				byte [] bytes = System.BitConverter.GetBytes (photo.Id);
-				
-				foreach (byte b in bytes) {
-					data[i] = b;
-					i++;
-				}
-			}
-			
-			selection_data.Set (target, 8, data, data.Length);
-		}
-		
-		public static Photo [] GetPhotosData (this SelectionData selection_data)
-		{
-			int size = sizeof (uint);
-			int length = selection_data.Length / size;
-			
-			PhotoStore photo_store = App.Instance.Database.Photos;
-
-			Photo [] photos = new Photo [length];
-			
-			for (int i = 0; i < length; i ++) {
-				uint id = System.BitConverter.ToUInt32 (selection_data.Data, i * size);
-				photos[i] = photo_store.Get (id);
-			}
-
-			return photos;
-		}
-		
-		public static void SetTagsData (this SelectionData selection_data, Tag [] tags, Atom target)
-		{
-			byte [] data = new byte [tags.Length * sizeof (uint)];
-			
-			int i = 0;
-			foreach (Tag tag in tags) {
-				byte [] bytes = System.BitConverter.GetBytes (tag.Id);
-				
-				foreach (byte b in bytes) {
-					data[i] = b;
-					i++;
-				}
-			}
-			
-			selection_data.Set (target, 8, data, data.Length);
-		}
-		
-		public static Tag [] GetTagsData (this SelectionData selection_data)
-		{
-			int size = sizeof (uint);
-			int length = selection_data.Length / size;
-			
-			TagStore tag_store = App.Instance.Database.Tags;
-
-			Tag [] tags = new Tag [length];
-			
-			for (int i = 0; i < length; i ++) {
-				uint id = System.BitConverter.ToUInt32 (selection_data.Data, i * size);
-				tags[i] = tag_store.Get (id);
-			}
-
-			return tags;
-		}
-		
-		public static string GetStringData (this SelectionData selection_data)
-		{
-			if (selection_data.Length <= 0)
-				return String.Empty;
-			
-			try {
-				return Encoding.UTF8.GetString (selection_data.Data);
-			} catch (Exception) {
-				return String.Empty;
-			}
-		}
-		
-		public static void SetUriListData (this SelectionData selection_data, UriList uri_list, Atom target)
-		{
-			Byte [] data = Encoding.UTF8.GetBytes (uri_list.ToString ());
-			
-			selection_data.Set (target, 8, data, data.Length);
-		}
-		
-		public static UriList GetUriListData (this SelectionData selection_data)
-		{
-			string [] uris = GetStringData (selection_data).Split ('\n');
-			
-			return new UriList (uris);
-		}
-	}
-}
diff --git a/src/SendEmail.cs b/src/SendEmail.cs
deleted file mode 100644
index 40a0110..0000000
--- a/src/SendEmail.cs
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * FSpot.SendEmail
- *
- * Author(s)
- * 	Bengt Thuree  <bengt at thuree.com>
- * 	Stephane Delcroix  <stephane at delcroix.org>
- * 	Paul Lange <palango at gmx.de>
- *
- * This is free software. See COPYING for details.
- */
-
-using Gtk;
-using GLib;
-using System;
-
-using FSpot.Widgets;
-using FSpot.Filters;
-using FSpot.UI.Dialog;
-
-using Hyena;
-using Hyena.Widgets;
-using Mono.Unix;
-
-namespace FSpot
-{
-	public class SendEmail : BuilderDialog
-	{
-		Window parent_window;
-
-#pragma warning disable 0649
-		[GtkBeans.Builder.Object] private Gtk.ScrolledWindow   tray_scrolled;
-		[GtkBeans.Builder.Object] private Label 		NumberOfPictures, TotalOriginalSize, ApproxNewSize;
-		[GtkBeans.Builder.Object] private RadioButton 	tiny_size, small_size, medium_size,
-														large_size, x_large_size, original_size;
-#pragma warning restore 0649
-
-		long Orig_Photo_Size 	= 0;
-		double scale_percentage = 0.3;
-		
-		// The different sizes we can shrink to foto to. See RadioButton above for labels.
-		static int[] sizes 		= { 0, 320, 	480, 	640, 	800, 	1024 };
-		
-		// Estimated size relative to original after shrinking down the photo. 
-		double[] avg_scale_ref 	= { 0, 0.0186,	0.0348,	0.0532,	0.0826,	0.1234 };
-		
-		static int NoOfSizes	= sizes.Length;
-		double[] avg_scale	= new double [NoOfSizes];
-		string tmp_mail_dir;	// To temporary keep the resized images
-		bool force_original = false;
-
-		IBrowsableCollection selection;
-
-		public SendEmail (IBrowsableCollection selection, Window parent_window) : base ("mail_dialog.ui", "mail_dialog")
-		{
-			this.selection = selection;
-			this.parent_window = parent_window;
-
-			foreach (var p in selection.Items) {
-				if (FileFactory.NewForUri (p.DefaultVersion.Uri).QueryInfo ("standard::content-type", FileQueryInfoFlags.None, null).ContentType != "image/jpeg")
-					force_original = true;
-			}
-
-			if (force_original) {
-				original_size.Active = true;
-				tiny_size.Sensitive = false;
-				small_size.Sensitive = false;
-				medium_size.Sensitive = false;
-				large_size.Sensitive = false;
-				x_large_size.Sensitive = false;
-			} else
-				switch (Preferences.Get<int> (Preferences.EXPORT_EMAIL_SIZE)) {
-					case 0 :  original_size.Active = true; break;
-					case 1 :  tiny_size.Active = true; break;
-					case 2 :  small_size.Active = true; break;
-					case 3 :  medium_size.Active = true; break;
-					case 4 :  large_size.Active = true; break;
-					case 5 :  x_large_size.Active = true; break;
-					default: break;
-				}
-
-			
-			tray_scrolled.Add (new TrayView (selection));
-
-			Modal = false;
-
-			// Calculate total original filesize 
-			foreach (var photo in selection.Items) {
-				try {
-					Orig_Photo_Size += FileFactory.NewForUri (photo.DefaultVersion.Uri).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
-				} catch {
-				}
-			}
-
-			for (int k = 0; k < avg_scale_ref.Length; k++)
-				avg_scale[k] = avg_scale_ref[k];
-
-
-			// Calculate approximate size shrinking, use first photo, and shrink to medium size as base.
-			var scalephoto = selection [0];
-			if (scalephoto != null && !force_original) {
-				
-				// Get first photos file size
-				long orig_size = FileFactory.NewForUri (scalephoto.DefaultVersion.Uri).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
-				
-				FilterSet filters = new FilterSet ();
-				filters.Add (new ResizeFilter ((uint)(sizes [3])));
-				long new_size;
-				using (FilterRequest request = new FilterRequest (scalephoto.DefaultVersion.Uri)) {
-					filters.Convert (request);
-					new_size = FileFactory.NewForUri (request.Current).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
-				}
-				
-				if (orig_size > 0) {
-				
-					// Get the factor (scale) between original and resized medium size.
-					scale_percentage = 1 - ( (float) (orig_size - new_size) / orig_size);
-					
-					// What is the relation between the estimated medium scale factor, and reality?
-					double scale_scale = scale_percentage / avg_scale_ref[3];
-					
-					//System.Console.WriteLine ("scale_percentage {0}, ref {1}, relative {2}",
-					//	scale_percentage, avg_scale_ref[3], scale_scale  );
-
-					// Re-Calculate the proper relation per size
-					for (int k = 0; k < avg_scale_ref.Length; k++) {
-						avg_scale[k] = avg_scale_ref[k] * scale_scale;
-					//	System.Console.WriteLine ("avg_scale[{0}]={1} (was {2})",
-					//		k, avg_scale[k], avg_scale_ref[k]  );
-					}
-				}
-
-			}
-
-			NumberOfPictures.Text 	= selection.Count.ToString();
-			TotalOriginalSize.Text 	= GLib.Format.SizeForDisplay (Orig_Photo_Size);
-			
-			UpdateEstimatedSize();
-
-			ShowAll ();
-
-			//LoadHistory ();
-
-			Response += HandleResponse;
-		}
-
-		private int GetScaleSize()
-		{
-			// not only convert dialog size to pixel size, but also set preferences se we use same size next time
-			int size_number = 0; // default to original size
-			if (tiny_size.Active)
-				size_number = 1;
-			if (small_size.Active)
-				size_number = 2;
-			if (medium_size.Active)
-				size_number = 3;
-			if (large_size.Active)
-				size_number = 4;
-			if (x_large_size.Active)
-				size_number = 5;
-			
-			if (!force_original)
-				Preferences.Set (Preferences.EXPORT_EMAIL_SIZE, size_number);
-			return sizes [ size_number ];
-		}
-		
-		private int GetScaleIndex ()
-		{
-			int scale = GetScaleSize();
-			for (int k = 0; k < sizes.Length; k++)
-				if (sizes[k] == scale)
-					return k;
-			return 0;
-		}
-
-		private void UpdateEstimatedSize()
-		{
-				int new_size_index;
-				long new_approx_total_size;
-				string approxresult;
-				
-				new_size_index = GetScaleIndex();
-				if (new_size_index == 0)
-					new_approx_total_size = Orig_Photo_Size;
-				else
-					new_approx_total_size = System.Convert.ToInt64(Orig_Photo_Size * avg_scale [new_size_index]);
-
-				approxresult = GLib.Format.SizeForDisplay (new_approx_total_size);
-				ApproxNewSize.Text 	= approxresult;	
-
-		}
-
-		public void on_size_toggled (object o, EventArgs args) 
-		{
-			UpdateEstimatedSize();
-		}
-
-
-		private void HandleResponse (object sender, Gtk.ResponseArgs args)
-		{
-			int size = 0;
-			bool UserCancelled = false;
-
-			// Lets remove the mail "create mail" dialog
-			Destroy();
-
-			if (args.ResponseId != Gtk.ResponseType.Ok) {
-				return;
-			}
-			ProgressDialog progress_dialog = null;
-		
-			progress_dialog = new ProgressDialog (Catalog.GetString ("Preparing email"),
-												ProgressDialog.CancelButtonType.Stop,
-												selection.Count,
-												parent_window);
-			
-			size = GetScaleSize(); // Which size should we scale to. 0 --> Original
-			
-			// evaluate mailto command and define attachment args for cli
-			System.Text.StringBuilder attach_arg = new System.Text.StringBuilder ();
-			switch (Preferences.Get<string> (Preferences.GNOME_MAILTO_COMMAND)) {
-			case "thunderbird %s":
-			case "mozilla-thunderbird %s":
-			case "seamonkey -mail -compose %s":
-			case "icedove %s":
-				attach_arg.Append(",");
-				break;
-			case "kmail %s":
-				attach_arg.Append(" --attach ");
-				break;
-			default://evolution falls into default, since it supports mailto uri correctly
-				attach_arg.Append("&attach=");
-				break;
-			}
-
-			// Create a tmp directory.
-			tmp_mail_dir = System.IO.Path.GetTempFileName ();	// Create a tmp file	
-			System.IO.File.Delete (tmp_mail_dir);			// Delete above tmp file
-			System.IO.Directory.CreateDirectory (tmp_mail_dir);	// Create a directory with above tmp name
-			
-			System.Text.StringBuilder mail_attach = new System.Text.StringBuilder ();
-
-			FilterSet filters = new FilterSet ();
-
-			if (size != 0)
-				filters.Add (new ResizeFilter ((uint) size));
-			filters.Add (new UniqueNameFilter (new SafeUri (tmp_mail_dir)));
-
-
-			for (int i = 0; i < selection.Count; i++) {
-				var photo = selection [i];
-				if ( (photo != null) && (!UserCancelled) ) {
-
-					if (progress_dialog != null)
-						UserCancelled = progress_dialog.Update (String.Format 
-							(Catalog.GetString ("Exporting picture \"{0}\""), photo.Name));
-							
-					if (UserCancelled)
-						break;
-
-					try {
-						// Prepare a tmp_mail file name
-						FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri);
-
-						filters.Convert (request);
-						request.Preserve(request.Current);
-
-						mail_attach.Append(((i == 0 && attach_arg.ToString () == ",") ? "" : attach_arg.ToString()) + request.Current.ToString ());
-					} catch (Exception e) {
-						Hyena.Log.ErrorFormat ("Error preparing {0}: {1}", selection[i].Name, e.Message);
-						HigMessageDialog md = new HigMessageDialog (parent_window, 
-											    DialogFlags.DestroyWithParent,
-											    MessageType.Error,
-											    ButtonsType.Close,
-											    Catalog.GetString("Error processing image"), 
-											    String.Format(Catalog.GetString("An error occured while processing \"{0}\": {1}"), selection[i].Name, e.Message));
-						md.Run();
-						md.Destroy();
-						UserCancelled = true;
-					}
-				}
-			} // foreach
-			
-			if (progress_dialog != null) 
-				progress_dialog.Destroy (); // No need to keep this window
-
-			if (!UserCancelled) {
-				// Send the mail :)
-				string mail_subject = Catalog.GetString("My Photos");
-				switch (Preferences.Get<string> (Preferences.GNOME_MAILTO_COMMAND)) {
-				// openSuSE
-				case "thunderbird %s":
-					System.Diagnostics.Process.Start("thunderbird", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\"");
-					break;
-				case "icedove %s":
-					System.Diagnostics.Process.Start("icedove", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\"");
-					break;
-				case "mozilla-thunderbird %s":
-					System.Diagnostics.Process.Start("mozilla-thunderbird", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\"");
-					break;
-				case "seamonkey -mail -compose %s":
-					System.Diagnostics.Process.Start("seamonkey", " -mail -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\"");
-					break;
-				case "kmail %s":
-					System.Diagnostics.Process.Start("kmail", "  --composer --subject \"" + mail_subject + "\"" + mail_attach);
-					break;
-				case "evolution %s": //evo doesn't urldecode the subject
-					GtkBeans.Global.ShowUri (Screen, "mailto:?subject=" + mail_subject + mail_attach);
-					break;
-				default: 
-					GtkBeans.Global.ShowUri (Screen, "mailto:?subject=" + System.Web.HttpUtility.UrlEncode(mail_subject) + mail_attach);
-					break;
-				}
-			}
-		}
-	}
-}
diff --git a/src/Sharpener.cs b/src/Sharpener.cs
deleted file mode 100644
index e25e9eb..0000000
--- a/src/Sharpener.cs
+++ /dev/null
@@ -1,148 +0,0 @@
-//
-// FSpot.Widgets.Sharpener.cs
-//
-// Author(s):
-//	Larry Ewing  <lewing at novell.com:
-//
-// Copyright (c) 2005-2009 Novell, Inc.
-//
-// This is free software. See COPYING for details.
-//
-using Cairo;
-
-using Gtk;
-using Gdk;
-using System;
-using System.Runtime.InteropServices;
-using Mono.Unix;
-using FSpot.Widgets;
-using FSpot.UI.Dialog;
-using Hyena.Widgets;
-
-namespace FSpot.Widgets {
-	public class Sharpener : Loupe {
-		Gtk.SpinButton amount_spin = new Gtk.SpinButton (0.5, 100.0, .01);
-		Gtk.SpinButton radius_spin = new Gtk.SpinButton (5.0, 50.0, .01);
-		Gtk.SpinButton threshold_spin = new Gtk.SpinButton (0.0, 50.0, .01);
-		Gtk.Dialog dialog;
-		
-		public Sharpener (PhotoImageView view) : base (view)
-		{	
-		}
-
-		protected override void UpdateSample ()
-		{
-			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);
-		}
-
-		private void HandleSettingsChanged (object sender, EventArgs args)
-		{
-			UpdateSample ();
-		}
-		
-		private void HandleOkClicked (object sender, EventArgs args)
-		{
-			Photo photo = view.Item.Current as Photo;
-
-			if (photo == null)
-				return;
-			
-			try {
-				Gdk.Pixbuf orig = view.Pixbuf;
-				Gdk.Pixbuf final = PixbufUtils.UnsharpMask (orig,
-									    radius_spin.Value,
-									    amount_spin.Value,
-									    threshold_spin.Value);
-				
-				bool create_version = photo.DefaultVersion.IsProtected;
-
-				photo.SaveVersion (final, create_version);
-				photo.Changes.DataChanged = true;
-				App.Instance.Database.Photos.Commit (photo);
-			} 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);
-				
-				HigMessageDialog md = new HigMessageDialog (this, DialogFlags.DestroyWithParent, 
-									    Gtk.MessageType.Error,
-									    ButtonsType.Ok, 
-									    msg,
-									    desc);
-				md.Run ();
-				md.Destroy ();
-			}
-			
-			Destroy ();
-		}
-
-		public void HandleCancelClicked (object sender, EventArgs args)
-		{
-			Destroy ();
-		}
-
-		public void HandleLoupeDestroyed (object sender, EventArgs args)
-		{
-			dialog.Destroy ();
-		}
-		
-		protected override void BuildUI ()
-		{
-			base.BuildUI ();
-
-			string title = Catalog.GetString ("Sharpen");
-			dialog = new Gtk.Dialog (title, (Gtk.Window) this,
-						 DialogFlags.DestroyWithParent, new object [0]);
-			dialog.BorderWidth = 12;
-			dialog.VBox.Spacing = 6;
-			
-			Gtk.Table table = new Gtk.Table (3, 2, false);
-			table.ColumnSpacing = 6;
-			table.RowSpacing = 6;
-			
-			table.Attach (SetFancyStyle (new Gtk.Label (Catalog.GetString ("Amount:"))), 0, 1, 0, 1);
-			table.Attach (SetFancyStyle (new Gtk.Label (Catalog.GetString ("Radius:"))), 0, 1, 1, 2);
-			table.Attach (SetFancyStyle (new Gtk.Label (Catalog.GetString ("Threshold:"))), 0, 1, 2, 3);
-			
-			SetFancyStyle (amount_spin = new Gtk.SpinButton (0.00, 100.0, .01));
-			SetFancyStyle (radius_spin = new Gtk.SpinButton (1.0, 50.0, .01));
-			SetFancyStyle (threshold_spin = new Gtk.SpinButton (0.0, 50.0, .01));
-			amount_spin.Value = .5;
-			radius_spin.Value = 5;
-			threshold_spin.Value = 0.0;
-
-			amount_spin.ValueChanged += HandleSettingsChanged;
-			radius_spin.ValueChanged += HandleSettingsChanged;
-			threshold_spin.ValueChanged += HandleSettingsChanged;
-
-			table.Attach (amount_spin, 1, 2, 0, 1);
-			table.Attach (radius_spin, 1, 2, 1, 2);
-			table.Attach (threshold_spin, 1, 2, 2, 3);
-			
-			Gtk.Button cancel_button = new Gtk.Button (Gtk.Stock.Cancel);
-			cancel_button.Clicked += HandleCancelClicked;
-			dialog.AddActionWidget (cancel_button, Gtk.ResponseType.Cancel);
-			
-			Gtk.Button ok_button = new Gtk.Button (Gtk.Stock.Ok);
-			ok_button.Clicked += HandleOkClicked;
-			dialog.AddActionWidget (ok_button, Gtk.ResponseType.Cancel);
-
-			Destroyed += HandleLoupeDestroyed;
-			
-			table.ShowAll ();
-			dialog.VBox.PackStart (table);
-			dialog.ShowAll ();
-		}
-	}
-}
-
diff --git a/src/SingleView.cs b/src/SingleView.cs
deleted file mode 100644
index ccc9b4a..0000000
--- a/src/SingleView.cs
+++ /dev/null
@@ -1,674 +0,0 @@
-using Gtk;
-using Gdk;
-using System;
-using System.Collections.Generic;
-
-using Mono.Addins;
-using Mono.Unix;
-
-using Hyena;
-using FSpot.Extensions;
-using FSpot.Utils;
-using FSpot.UI.Dialog;
-using FSpot.Widgets;
-using FSpot.Platform;
-
-namespace FSpot {
-	public class SingleView {
-		[GtkBeans.Builder.Object]  Gtk.HBox toolbar_hbox;
-		[GtkBeans.Builder.Object]  Gtk.VBox info_vbox;
-		[GtkBeans.Builder.Object]  Gtk.ScrolledWindow image_scrolled;
-		[GtkBeans.Builder.Object]  Gtk.HPaned info_hpaned;
-
-		Gtk.ScrolledWindow directory_scrolled;
-
-		[GtkBeans.Builder.Object]  Gtk.CheckMenuItem side_pane_item;
-		[GtkBeans.Builder.Object]  Gtk.CheckMenuItem toolbar_item;
-		[GtkBeans.Builder.Object]  Gtk.CheckMenuItem filenames_item;
-		
-		[GtkBeans.Builder.Object]  Gtk.MenuItem zoom_in;
-		[GtkBeans.Builder.Object]  Gtk.MenuItem zoom_out;
-
-		[GtkBeans.Builder.Object]  Gtk.MenuItem export;
-
-		[GtkBeans.Builder.Object]  Gtk.Scale zoom_scale;
-
-		[GtkBeans.Builder.Object]  Label status_label;
-
-		[GtkBeans.Builder.Object]  ImageMenuItem rotate_left;
-		[GtkBeans.Builder.Object]  ImageMenuItem rotate_right;
-
-		ToolButton rr_button, rl_button;
-
-		Sidebar sidebar;
-
-		[GtkBeans.Builder.Object] private Gtk.Window single_view;
-
-		public Gtk.Window Window {
-			get { 
-				return single_view;
-			}
-		}
-
-		PhotoImageView image_view;
-		FSpot.Widgets.IconView directory_view;
-		private SafeUri uri;
-		
-		UriCollection collection;
-		
-		FullScreenView fsview;
-
-		public SingleView (SafeUri [] uris)
-		{
-			this.uri = uris [0];
-			Log.Debug ("uri: " + this.uri);
-			
-			GtkBeans.Builder builder = new GtkBeans.Builder ("single_view.ui");
-			builder.Autoconnect (this);
-		
-			LoadPreference (Preferences.VIEWER_WIDTH);
-			LoadPreference (Preferences.VIEWER_MAXIMIZED);
-
-			Gtk.Toolbar toolbar = new Gtk.Toolbar ();
-			toolbar_hbox.PackStart (toolbar);
-		
-			rl_button = GtkUtil.ToolButtonFromTheme ("object-rotate-left", Catalog.GetString ("Rotate Left"), true);
-			rl_button.Clicked += HandleRotate270Command;
-			rl_button.TooltipText = Catalog.GetString ("Rotate photo left");
-			toolbar.Insert (rl_button, -1);
-
-			rr_button = GtkUtil.ToolButtonFromTheme ("object-rotate-right", Catalog.GetString ("Rotate Right"), true);
-			rr_button.Clicked += HandleRotate90Command;
-			rr_button.TooltipText = Catalog.GetString ("Rotate photo right");
-			toolbar.Insert (rr_button, -1);
-
-			toolbar.Insert (new SeparatorToolItem (), -1);
-
-			ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), true);
-			fs_button.Clicked += HandleViewFullscreen;
-			fs_button.TooltipText = Catalog.GetString ("View photos fullscreen");
-			toolbar.Insert (fs_button, -1);
-
-			ToolButton ss_button = GtkUtil.ToolButtonFromTheme ("media-playback-start", Catalog.GetString ("Slideshow"), true);
-			ss_button.Clicked += HandleViewSlideshow;
-			ss_button.TooltipText = Catalog.GetString ("View photos in a slideshow");
-			toolbar.Insert (ss_button, -1);
-
-			collection = new UriCollection (uris);
-
-			TargetEntry [] dest_table = {
-				FSpot.DragDropTargets.UriListEntry,
-				FSpot.DragDropTargets.PlainTextEntry
-			};
-			
-			directory_view = new FSpot.Widgets.IconView (collection);
-			directory_view.Selection.Changed += HandleSelectionChanged;
-			directory_view.DragDataReceived += HandleDragDataReceived;
-			Gtk.Drag.DestSet (directory_view, DestDefaults.All, dest_table, 
-					DragAction.Copy | DragAction.Move); 
-			directory_view.DisplayTags = false;
-			directory_view.DisplayDates = false;
-			directory_view.DisplayRatings = false;
-
-			directory_scrolled = new ScrolledWindow();
-			directory_scrolled.Add (directory_view);
-
-			sidebar = new Sidebar ();
-
-			info_vbox.Add (sidebar);
-			sidebar.AppendPage (directory_scrolled, Catalog.GetString ("Folder"), "gtk-directory");
-
-			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);
- 		
-			sidebar.Context = ViewContext.Single;
-
-			sidebar.CloseRequested += HandleHideSidePane;
-			sidebar.Show ();
-
-			ThumbnailLoader.Default.OnPixbufLoaded += delegate { directory_view.QueueDraw (); };
-
-			image_view = new PhotoImageView (collection);
-			GtkUtil.ModifyColors (image_view);
-			GtkUtil.ModifyColors (image_scrolled);
-			image_view.ZoomChanged += HandleZoomChanged;
-			image_view.Item.Changed += HandleItemChanged;
-			image_view.ButtonPressEvent += HandleImageViewButtonPressEvent;
-			image_view.DragDataReceived += HandleDragDataReceived;
-			Gtk.Drag.DestSet (image_view, DestDefaults.All, dest_table,
-					DragAction.Copy | DragAction.Move); 
-			image_scrolled.Add (image_view);
-			
-			Window.ShowAll ();
-
-			zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
-		
-			LoadPreference (Preferences.VIEWER_SHOW_TOOLBAR);
- 			LoadPreference (Preferences.VIEWER_INTERPOLATION);
-			LoadPreference (Preferences.VIEWER_TRANSPARENCY);
-			LoadPreference (Preferences.VIEWER_TRANS_COLOR);
-
-			ShowSidebar = collection.Count > 1;
-
-			LoadPreference (Preferences.VIEWER_SHOW_FILENAMES);
-
-			Preferences.SettingChanged += OnPreferencesChanged;
-			Window.DeleteEvent += HandleDeleteEvent;
-			
-			collection.Changed += HandleCollectionChanged;
-
-			// wrap the methods to fit to the delegate
-			image_view.Item.Changed += delegate (object sender, BrowsablePointerChangedEventArgs old) {
-					BrowsablePointer pointer = sender as BrowsablePointer;
-					if (pointer == null)
-						return;
-					IBrowsableItem [] item = {pointer.Current};
-					sidebar.HandleSelectionChanged (new PhotoList (item));
-			};
-			
-			image_view.Item.Collection.ItemsChanged += sidebar.HandleSelectionItemsChanged;
-
-			UpdateStatusLabel ();
-			
-			if (collection.Count > 0)
-				directory_view.Selection.Add (0);
-
-			export.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Exports") as FSpot.Extensions.SubmenuNode).GetMenuItem (this).Submenu;
-			export.Submenu.ShowAll ();
-			export.Activated += HandleExportActivated ;
-		}
-
-		private void OnSidebarExtensionChanged (object s, ExtensionNodeEventArgs args) {
-			// FIXME: No sidebar page removal yet!
-			if (args.Change == ExtensionChange.Add)
-				sidebar.AppendPage ((args.ExtensionNode as SidebarPageNode).GetPage ());
-		}
-
-		void HandleExportActivated (object o, EventArgs e)
-		{
-			FSpot.Extensions.ExportMenuItemNode.SelectedImages = delegate () {return new PhotoList (directory_view.Selection.Items); };
-		}
-
-		public void HandleCollectionChanged (IBrowsableCollection collection)
-		{
-			if (collection.Count > 0 && directory_view.Selection.Count == 0) {
-				Log.Debug ("Added selection");
-				directory_view.Selection.Add (0);
-			}
-
-			if (collection.Count > 1)
-				ShowSidebar = true;
-
-			rotate_left.Sensitive = rotate_right.Sensitive = rr_button.Sensitive = rl_button.Sensitive = collection.Count != 0;
-
-			UpdateStatusLabel ();
-		}
-
-		public bool ShowSidebar {
-			get {
-				return info_vbox.Visible;
-			}
-			set {
-				info_vbox.Visible = value;
-				if (side_pane_item.Active != value)
-					side_pane_item.Active = value;
-			}
-		}
-		
-		public bool ShowToolbar {
-			get {
-				return toolbar_hbox.Visible;
-			}
-			set {
-				toolbar_hbox.Visible = value;
-				if (toolbar_item.Active != value)
-					toolbar_item.Active = value;
-			}
-		}
-
-		private SafeUri CurrentUri
-		{
-			get { 
-			 	return this.uri; 
-			}
-			set {
-			 	this.uri = value;
-				collection.Clear ();
-				collection.LoadItems (new SafeUri[] { this.uri });
-			}
-		}
-
-		void HandleRotate90Command (object sender, System.EventArgs args) 
-		{
-			RotateCommand command = new RotateCommand (this.Window);
-			if (command.Execute (RotateDirection.Clockwise, new IBrowsableItem [] { image_view.Item.Current }))
-				collection.MarkChanged (image_view.Item.Index, FullInvalidate.Instance);
-		}
-
-		void HandleRotate270Command (object sender, System.EventArgs args) 
-		{
-			RotateCommand command = new RotateCommand (this.Window);
-			if (command.Execute (RotateDirection.Counterclockwise, new IBrowsableItem [] { image_view.Item.Current }))
-				collection.MarkChanged (image_view.Item.Index, FullInvalidate.Instance);
-		}		
-
-		private void HandleSelectionChanged (FSpot.IBrowsableCollection selection) 
-		{
-			
-			if (selection.Count > 0) {
-				image_view.Item.Index = ((FSpot.Widgets.IconView.SelectionCollection)selection).Ids[0];
-
-				zoom_scale.Value = image_view.NormalizedZoom;
-			}
-			UpdateStatusLabel ();
-		}
-
-		private void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs old)
-		{
-			BrowsablePointer pointer = sender as BrowsablePointer;
-			if (pointer == null)
-				return;
-
-			directory_view.FocusCell = pointer.Index;
-			directory_view.Selection.Clear ();
-			if (collection.Count > 0) {
-				directory_view.Selection.Add (directory_view.FocusCell);
-				directory_view.ScrollTo (directory_view.FocusCell);
-			}
-		}
-
-		void HandleSetAsBackgroundCommand (object sender, EventArgs args)
-		{
-			IBrowsableItem current = image_view.Item.Current;
-
-			if (current == null)
-				return;
-
-			Desktop.SetBackgroundImage (current.DefaultVersion.Uri.LocalPath);
-		}
-
-		private void HandleViewToolbar (object sender, System.EventArgs args)
-		{
-			ShowToolbar = toolbar_item.Active;
-		}
-		
-		private void HandleHideSidePane (object sender, System.EventArgs args) 
-		{
-			ShowSidebar = false;
-		}
-
-		private void HandleViewSidePane (object sender, System.EventArgs args)
-		{
-			ShowSidebar = side_pane_item.Active;
-		}
-
-		private void HandleViewSlideshow (object sender, System.EventArgs args)
-		{
-			HandleViewFullscreen (sender, args);
-			fsview.PlayPause ();
-		}
-	
-		private void HandleViewFilenames (object sender, System.EventArgs args)
-		{
-			directory_view.DisplayFilenames = filenames_item.Active; 
-			UpdateStatusLabel ();
-		}
-
-		private void HandleAbout (object sender, System.EventArgs args)
-		{
-			FSpot.UI.Dialog.AboutDialog.ShowUp ();
-		}
-
-		private void HandleNewWindow (object sender, System.EventArgs args)
-		{
-			/* FIXME this needs to register witth the core */
-			new SingleView (new SafeUri[] {uri});
-		}
-
-		private void HandlePreferences (object sender, System.EventArgs args)
-		{
-			SingleView.PreferenceDialog.Show ();
-		}
-
-		private void HandleOpenFolder (object sender, System.EventArgs args)
-		{
-			Open (FileChooserAction.SelectFolder);
-		}
-
-		private void HandleOpen (object sender, System.EventArgs args)
-		{
-			Open (FileChooserAction.Open);
-		}
-
-		private void Open (FileChooserAction action)
-		{
-			string title = Catalog.GetString ("Open");
-
-			if (action == FileChooserAction.SelectFolder)
-				title = Catalog.GetString ("Select Folder");
-
-			FileChooserDialog chooser = new FileChooserDialog (title,
-									   Window,
-									   action);
-
-			chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
-			chooser.AddButton (Stock.Open, ResponseType.Ok);
-
-			chooser.SetUri (uri.ToString ());
-			int response = chooser.Run ();
-
-			if ((ResponseType) response == ResponseType.Ok)
-				CurrentUri = new SafeUri (chooser.Uri, true);
-			
-
-			chooser.Destroy ();
-		}
-
-		private void HandleViewFullscreen (object sender, System.EventArgs args)
-		{
-			if (fsview != null)
-				fsview.Destroy ();
-
-			fsview = new FSpot.FullScreenView (collection, Window);
-			fsview.Destroyed += HandleFullScreenViewDestroy;
-
-			fsview.View.Item.Index = image_view.Item.Index;
-			fsview.Show ();
-		}
-		
-		private void HandleFullScreenViewDestroy (object sender, System.EventArgs args)
-		{
-			directory_view.Selection.Clear ();
-			if (fsview.View.Item.IsValid) 
-				directory_view.Selection.Add (fsview.View.Item.Index);
-			fsview = null;
-		}
-		
-		public void HandleZoomOut (object sender, System.EventArgs args)
-		{
-			image_view.ZoomOut ();
-		}
-
-		public void HandleZoomOut (object sender, Gtk.ButtonPressEventArgs args)
-		{
-			image_view.ZoomOut ();
-		}
-
-		public void HandleZoomIn (object sender, Gtk.ButtonPressEventArgs args)
-		{
-			image_view.ZoomIn ();
-		}
-
-		public void HandleZoomIn (object sender, System.EventArgs args)
-		{
-			image_view.ZoomIn ();
-		}
-
-		private void HandleZoomScaleValueChanged (object sender, System.EventArgs args)
-		{
-			image_view.NormalizedZoom = zoom_scale.Value;
-		}
-
-		private void HandleZoomChanged (object sender, System.EventArgs args)
-		{
-			zoom_scale.Value = image_view.NormalizedZoom;
-
-			// FIXME something is broken here
-			//zoom_in.Sensitive = (zoom_scale.Value != 1.0);
-			//zoom_out.Sensitive = (zoom_scale.Value != 0.0);
-		}
-
-		private void HandleImageViewButtonPressEvent (object sender, ButtonPressEventArgs args)
-		{
-			if (args.Event.Type != EventType.ButtonPress || args.Event.Button != 3)
-			 	return;
-
-			Gtk.Menu popup_menu = new Gtk.Menu ();
-			bool has_item = image_view.Item.Current != null;
-
-			GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Rotate _Left"), "object-rotate-left", delegate { HandleRotate270Command(Window, null); }, has_item);
-			GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Rotate _Right"), "object-rotate-right", delegate { HandleRotate90Command (Window, null); }, has_item);
-			GtkUtil.MakeMenuSeparator (popup_menu);
-			GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Set as Background"), HandleSetAsBackgroundCommand, has_item);
-
-			popup_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
-		}
-
-		void HandleDeleteEvent (object sender, DeleteEventArgs args)
-		{
-			SavePreferences ();
-			this.Window.Destroy ();
-			args.RetVal = true;
-		}
-
-		void HandleDragDataReceived (object sender, DragDataReceivedArgs args) 
-		{
-			if (args.Info == FSpot.DragDropTargets.UriListEntry.Info
-			    || args.Info == FSpot.DragDropTargets.PlainTextEntry.Info) {
-				
-				/* 
-				 * If the drop is coming from inside f-spot then we don't want to import 
-				 */
-				if (Gtk.Drag.GetSourceWidget (args.Context) != null)
-					return;
-				
-				UriList list = args.SelectionData.GetUriListData ();
-				collection.LoadItems (list.ToArray());
-				
-				Gtk.Drag.Finish (args.Context, true, false, args.Time);
-				
-				return;
-			}
-		}
-
-		private void UpdateStatusLabel ()
-		{
-			IBrowsableItem item = image_view.Item.Current;
-			System.Text.StringBuilder sb = new System.Text.StringBuilder();
-			if (filenames_item.Active && item != null)
-				sb.Append (System.IO.Path.GetFileName (item.DefaultVersion.Uri.LocalPath) + "  -  ");
-
-			sb.AppendFormat (Catalog.GetPluralString ("{0} Photo", "{0} Photos", collection.Count), collection.Count);
-			status_label.Text = sb.ToString ();
-		}
-
-		private void HandleFileClose (object sender, System.EventArgs args)
-		{
-			SavePreferences ();
-			this.Window.Destroy ();
-		}
-
-		private void SavePreferences  ()
-		{
-			int width, height;
-			Window.GetSize (out width, out height);
-		
-			bool maximized = ((Window.GdkWindow.State & Gdk.WindowState.Maximized) > 0);
-			Preferences.Set (Preferences.VIEWER_MAXIMIZED, maximized);
-		
-			if (!maximized) {
-				Preferences.Set (Preferences.VIEWER_WIDTH,	width);
-				Preferences.Set (Preferences.VIEWER_HEIGHT,	height);
-			}
-		
-			Preferences.Set (Preferences.VIEWER_SHOW_TOOLBAR,	toolbar_hbox.Visible);
-			Preferences.Set (Preferences.VIEWER_SHOW_FILENAMES, filenames_item.Active);
-		}
-
-		private void HandleFileOpen (object sender, System.EventArgs args)
-		{
-			FileChooserDialog file_selector =
-				new FileChooserDialog ("Open", this.Window,
-						       FileChooserAction.Open);
-			
-			file_selector.SetUri (uri.ToString ());
-			int response = file_selector.Run ();
-			
-			if ((Gtk.ResponseType) response == Gtk.ResponseType.Ok) {
-				var l = new List<SafeUri> ();
-				foreach (var s in file_selector.Uris)
-					l.Add (new SafeUri (s));
-				new FSpot.SingleView (l.ToArray ());
-			}
-			
-			file_selector.Destroy ();
-		}
-
-		void OnPreferencesChanged (object sender, NotifyEventArgs args)
-		{
-			LoadPreference (args.Key);
-		}
-
-		void LoadPreference (String key)
-		{
-			switch (key) {
-			case Preferences.VIEWER_MAXIMIZED:
-				if (Preferences.Get<bool> (key))
-					Window.Maximize ();
-				else
-					Window.Unmaximize ();
-				break;
-
-			case Preferences.VIEWER_WIDTH:
-			case Preferences.VIEWER_HEIGHT:
-				int width, height;
-				width = Preferences.Get<int> (Preferences.VIEWER_WIDTH);
-				height = Preferences.Get<int> (Preferences.VIEWER_HEIGHT);
-
-				if( width == 0 || height == 0 )
-					break;
-
-				Window.SetDefaultSize(width, height);
-
-				Window.ReshowWithInitialSize();
-				break;
-			
-			case Preferences.VIEWER_SHOW_TOOLBAR:
-				if (toolbar_item.Active != Preferences.Get<bool> (key))
-					toolbar_item.Active = Preferences.Get<bool> (key);
-
-				toolbar_hbox.Visible = Preferences.Get<bool> (key);
-				break;
-
-			case Preferences.VIEWER_INTERPOLATION:
-				if (Preferences.Get<bool> (key))
-					image_view.Interpolation = Gdk.InterpType.Bilinear;
-				else
-					image_view.Interpolation = Gdk.InterpType.Nearest;
-				break;
-
-			case Preferences.VIEWER_SHOW_FILENAMES:
-				if (filenames_item.Active != Preferences.Get<bool> (key))
-					filenames_item.Active = Preferences.Get<bool> (key);
-				break;
-
-			case Preferences.VIEWER_TRANSPARENCY:
-				if (Preferences.Get<string> (key) == "CHECK_PATTERN")
-					image_view.CheckPattern = CheckPattern.Dark;
-				else if (Preferences.Get<string> (key) == "COLOR")
-					image_view.CheckPattern = new CheckPattern (Preferences.Get<string> (Preferences.VIEWER_TRANS_COLOR));
-				else // NONE
-					image_view.CheckPattern = new CheckPattern (image_view.Style.BaseColors [(int)Gtk.StateType.Normal]);
-				break;
-
-			case Preferences.VIEWER_TRANS_COLOR:
-				if (Preferences.Get<string> (Preferences.VIEWER_TRANSPARENCY) == "COLOR")
-					image_view.CheckPattern = new CheckPattern (Preferences.Get<string> (key));
-				break;
-			}
-		}
-
-		public class PreferenceDialog : BuilderDialog {
-			[GtkBeans.Builder.Object] private CheckButton interpolation_check;
-			[GtkBeans.Builder.Object] private ColorButton color_button;
-			[GtkBeans.Builder.Object] private RadioButton as_background_radio;
-			[GtkBeans.Builder.Object] private RadioButton as_check_radio;
-			[GtkBeans.Builder.Object] private RadioButton as_color_radio;
-
-			public PreferenceDialog () : base ("viewer_preferences.ui", "viewer_preferences")
-			{
-				this.LoadPreference (Preferences.VIEWER_INTERPOLATION);
-				this.LoadPreference (Preferences.VIEWER_TRANSPARENCY);
-				this.LoadPreference (Preferences.VIEWER_TRANS_COLOR);
-				Preferences.SettingChanged += OnPreferencesChanged;
-				this.Destroyed += HandleDestroyed;
-			}
-
-			void InterpolationToggled (object sender, System.EventArgs args)
-			{
-				Preferences.Set (Preferences.VIEWER_INTERPOLATION, interpolation_check.Active);
-			}
-
-			void HandleTransparentColorSet (object sender, System.EventArgs args)
-			{
-				Preferences.Set (Preferences.VIEWER_TRANS_COLOR, 
-						"#" + 
-						(color_button.Color.Red / 256 ).ToString("x").PadLeft (2, '0') +
-						(color_button.Color.Green / 256 ).ToString("x").PadLeft (2, '0') +
-						(color_button.Color.Blue / 256 ).ToString("x").PadLeft (2, '0'));
-			}
-
-			void HandleTransparencyToggled (object sender, System.EventArgs args)
-			{
-				if (as_background_radio.Active)
-					Preferences.Set (Preferences.VIEWER_TRANSPARENCY, "NONE");
-				else if (as_check_radio.Active)
-					Preferences.Set (Preferences.VIEWER_TRANSPARENCY, "CHECK_PATTERN");
-				else if (as_color_radio.Active)
-					Preferences.Set (Preferences.VIEWER_TRANSPARENCY, "COLOR");
-			}
-			
-			static PreferenceDialog prefs;
-			public static void Show ()
-			{
-				if (prefs == null)
-					prefs = new PreferenceDialog ();
-				
-				prefs.Present ();
-			}
-
-			void OnPreferencesChanged (object sender, NotifyEventArgs args)
-			{
-				LoadPreference (args.Key);
-			}
-
-			void HandleClose (object sender, EventArgs args)
-			{
-				this.Destroy ();
-			}
-
-			private void HandleDestroyed (object sender, EventArgs args)
-			{
-				prefs = null;
-			}
-
-			void LoadPreference (string key)
-			{
-		
-				switch (key) {
-				case Preferences.VIEWER_INTERPOLATION:
-					interpolation_check.Active = Preferences.Get<bool> (key);
-					break;
-				case Preferences.VIEWER_TRANSPARENCY:
-					switch (Preferences.Get<string> (key)) {
-					case "COLOR":
-						as_color_radio.Active = true;
-						break;
-					case "CHECK_PATTERN":
-						as_check_radio.Active = true;
-						break;
-					default: //NONE
-						as_background_radio.Active = true;
-						break;
-					}
-					break;
-				case Preferences.VIEWER_TRANS_COLOR:
-					color_button.Color = new Gdk.Color (
-						Byte.Parse (Preferences.Get<string> (key).Substring (1,2), System.Globalization.NumberStyles.AllowHexSpecifier),
-						Byte.Parse (Preferences.Get<string> (key).Substring (3,2), System.Globalization.NumberStyles.AllowHexSpecifier),
-						Byte.Parse (Preferences.Get<string> (key).Substring (5,2), System.Globalization.NumberStyles.AllowHexSpecifier));
-					break;
-				}
-			}
-		}
-	}
-}
diff --git a/src/TagCommands.cs b/src/TagCommands.cs
deleted file mode 100644
index 4176167..0000000
--- a/src/TagCommands.cs
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * TagCommand.cs
- *
- * Author(s):
- * 	Larry Ewing <lewing at novell.com>
- * 	Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2003-2009 Novell, Inc,
- * Copyright (c) 2007 Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- */
-
-using Gtk;
-using Gdk;
-using System;
-using System.Text;
-using System.Collections;
-
-using Mono.Unix;
-using FSpot;
-using FSpot.Utils;
-using FSpot.UI.Dialog;
-using FSpot.Widgets;
-using Hyena;
-
-public class TagCommands {
-
-	public enum TagType {
-		Tag,
-		Category
-	}
-
-	public class Create : BuilderDialog {
-		TagStore tag_store;
-
-
-		[GtkBeans.Builder.Object] private Button create_button;
-		[GtkBeans.Builder.Object] private Entry tag_name_entry;
-		[GtkBeans.Builder.Object] private Label prompt_label;
-		[GtkBeans.Builder.Object] private Label already_in_use_label;
-		[GtkBeans.Builder.Object] private Label photo_label;
-		[GtkBeans.Builder.Object] private ScrolledWindow photo_scrolled_window;
-		[GtkBeans.Builder.Object] private ComboBox category_option_menu;
-		[GtkBeans.Builder.Object] private CheckButton auto_icon_checkbutton;
-
-		Gtk.Widget parent_window;
-
-		private ArrayList categories;
-
-		private void PopulateCategories (ArrayList categories, Category parent)
-		{
-			foreach (Tag tag in parent.Children) {
-				if (tag is Category) {
-					categories.Add (tag);
-					PopulateCategories (categories, tag as Category);
-				}
-			}
-		}
-
-		private string Indentation (Category category)
-		{
-			int indentations = 0;
-			for (Category parent = category.Category;
-			     parent != null && parent.Category != null;
-			     parent = parent.Category)
-				indentations++;
-			return new string (' ', indentations*2);
-		}
-
-		private void PopulateCategoryOptionMenu ()
-		{
-			categories = new ArrayList ();
-			categories.Add (tag_store.RootCategory);
-			PopulateCategories (categories, tag_store.RootCategory);
-
-			ListStore category_store = new ListStore (typeof(Pixbuf), typeof(string));
-
-			foreach (Category category in categories) {
-				category_store.AppendValues (category.SizedIcon, Indentation (category) + category.Name);
-			}
-
-			category_option_menu.Sensitive = true;
-
-			category_option_menu.Model = category_store;
-			var icon_renderer = new CellRendererPixbuf ();
-			icon_renderer.Width = (int)Tag.TagIconSize;
-			category_option_menu.PackStart (icon_renderer, true);
-
-			var text_renderer = new CellRendererText ();
-			text_renderer.Alignment = Pango.Alignment.Left;
-			text_renderer.Width = 150;
-			category_option_menu.PackStart (text_renderer, true);
-
-			category_option_menu.AddAttribute (icon_renderer, "pixbuf", 0);
-			category_option_menu.AddAttribute (text_renderer, "text", 1);
-			category_option_menu.ShowAll ();
-		}
-
-		private bool TagNameExistsInCategory (string name, Category category)
-		{
-			foreach (Tag tag in category.Children) {
-				if (String.Compare(tag.Name, name, true) == 0)
-					return true;
-
-				if (tag is Category && TagNameExistsInCategory (name, tag as Category))
-					return true;
-			}
-
-			return false;
-		}
-
-		private void Update ()
-		{
-			if (tag_name_entry.Text == String.Empty) {
-				create_button.Sensitive = false;
-				already_in_use_label.Markup = String.Empty;
-			} else if (TagNameExistsInCategory (tag_name_entry.Text, tag_store.RootCategory)) {
-				create_button.Sensitive = false;
-				already_in_use_label.Markup = "<small>" + Catalog.GetString ("This name is already in use") + "</small>";
-			} else {
-				create_button.Sensitive = true;
-				already_in_use_label.Markup = String.Empty;
-			}
-		}
-
-		private void HandleTagNameEntryChanged (object sender, EventArgs args)
-		{
-			Update ();
-		}
-
-		private Category Category {
-			get {
-				if (categories.Count == 0)
-					return tag_store.RootCategory;
-				else
-					return categories [category_option_menu.Active] as Category;
-			}
-			set {
-				if ((value != null) && (categories.Count > 0)) {
-					//System.Console.WriteLine("TagCreateCommand.set_Category(" + value.Name + ")");
-					for (int i = 0; i < categories.Count; i++) {
-						Category category = (Category)categories[i];
-						// should there be an equals type method?
-						if (value.Id == category.Id) {
-							category_option_menu.Active = i;
-							return;
-						}
-					}	
-				} else {
-					category_option_menu.Active = 0;
-				}
-			}
-		}
-		
-		public Tag Execute (TagType type, Tag [] selection)
-		{
-			Category default_category = null;
-			if (selection.Length > 0) {
-				if (selection [0] is Category)
-					default_category = (Category) selection [0];
-				else
-					default_category = selection [0].Category;
-			} else {
-				default_category = tag_store.RootCategory;
-			}
-
-			this.DefaultResponse = ResponseType.Ok;
-
-			this.Title = Catalog.GetString ("Create New Tag");
-			prompt_label.Text = Catalog.GetString ("Name of New Tag:");
-			this.auto_icon_checkbutton.Active = Preferences.Get<bool> (Preferences.TAG_ICON_AUTOMATIC);
-
-			PopulateCategoryOptionMenu ();
-			this.Category = default_category;
-			Update ();
-			tag_name_entry.GrabFocus ();
-
-			ResponseType response = (ResponseType) this.Run ();
-
-
-			Tag new_tag = null;
-			if (response == ResponseType.Ok) {
-				bool autoicon = this.auto_icon_checkbutton.Active;
-				Preferences.Set (Preferences.TAG_ICON_AUTOMATIC, autoicon);
-				try {
-					Category parent_category = Category;
-
-					if (type == TagType.Category)
-						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) {
-					// FIXME error dialog.
-					Log.Exception (ex);
-				}
-			}
-
-			this.Destroy ();
-			return new_tag;
-		}
-
-		public Create (TagStore tag_store, Gtk.Window parent_window) : base ("CreateTagDialog.ui", "create_tag_dialog")
-		{
-			this.tag_store = tag_store;
-			this.parent_window = parent_window;
-		}
-	}
-
-}
diff --git a/src/TagPopup.cs b/src/TagPopup.cs
deleted file mode 100644
index 1d67cac..0000000
--- a/src/TagPopup.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * TagPopup.cs
- *
- * Author:
- *   Larry Ewing <lewing at novell.com>
- *
- * Copyright (c) 2004 Novell, Inc.
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Mono.Unix;
-using FSpot;
-using FSpot.Utils;
-
-public class TagPopup {
-	public void Activate (Gdk.EventButton eb, Tag tag, Tag [] tags)
-	{
-		int photo_count = App.Instance.Organizer.SelectedPhotos ().Length;
-		int tags_count = tags.Length;
-
-		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
-        );
-
-        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);
-
-        GtkUtil.MakeMenuSeparator (popup_menu);
-		
-		GtkUtil.MakeMenuItem (popup_menu,
-			Catalog.GetString ("Edit Tag..."), "gtk-edit",
-			delegate { App.Instance.Organizer.HandleEditSelectedTagWithTag (tag); }, tag != null && tags_count == 1);
-
-		GtkUtil.MakeMenuItem (popup_menu,
-			Catalog.GetPluralString ("Delete Tag", "Delete Tags", tags_count), "gtk-delete",
-			new EventHandler (App.Instance.Organizer.HandleDeleteSelectedTagCommand), tag != null);
-		
-		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);
-
-		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);
-
-		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);
-
-		}
-
-		if (eb != null)
- 			popup_menu.Popup (null, null, null, eb.Button, eb.Time);
-		else
-			popup_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
-
-	}
-}
diff --git a/src/TagQueryWidget.cs b/src/TagQueryWidget.cs
deleted file mode 100644
index a7ccc08..0000000
--- a/src/TagQueryWidget.cs
+++ /dev/null
@@ -1,702 +0,0 @@
-using System;
-using System.Collections;
-using System.Text;
-using Mono.Unix;
-using Gtk;
-using Gdk;
-
-using FSpot.Utils;
-using FSpot.Query;
-
-namespace FSpot
-{
-	public class LiteralPopup
-	{
-		//private Literal literal;
-
-		public void Activate (Gdk.EventButton eb, Literal literal)
-		{
-			Activate (eb, literal, new Gtk.Menu (), true);
-		}
-
-		public void Activate (Gdk.EventButton eb, Literal literal, Gtk.Menu popup_menu, bool is_popup)
-		{
-			//this.literal = literal;
-
-			/*MenuItem attach_item = new MenuItem (Catalog.GetString ("Find With"));
-			TagMenu attach_menu = new TagMenu (attach_item, App.Instance.Database.Tags);
-			attach_menu.TagSelected += literal.HandleAttachTagCommand;
-			attach_item.ShowAll ();
-			popup_menu.Append (attach_item);*/
-
-			if (literal.IsNegated) {
-				GtkUtil.MakeMenuItem (popup_menu,
-						      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);
-			}
-
-			GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Remove From Search"),
-					      "gtk-remove",
-					      new EventHandler (literal.HandleRemoveCommand),
-					      true);
-
-			if (is_popup) {
-				if (eb != null)
-					popup_menu.Popup (null, null, null, eb.Button, eb.Time);
-				else
-					popup_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
-			}
-		}
-	}
-
-	public class LiteralMenu : Menu
-	{
-		private LiteralPopup popup;
-		private Literal literal;
-
-		public LiteralMenu (MenuItem item, Literal literal)
-		{
-			popup = new LiteralPopup ();
-
-			this.literal = literal;
-
-			item.Submenu = this;
-			item.Activated += HandlePopulate;
-		}
-
-		private void HandlePopulate (object obj, EventArgs args)
-		{
-			foreach (Widget child in Children) {
-				Remove (child);
-				child.Destroy ();
-			}
-
-			popup.Activate (null, literal, this, false);
-		}
-	}
-
-	public static class TermMenuItem
-	{
-		public static void Create (Tag [] tags, Gtk.Menu menu)
-		{
-			Gtk.MenuItem item = new Gtk.MenuItem (String.Format (Catalog.GetPluralString ("Find _With", "Find _With", tags.Length), tags.Length));
-
-			Gtk.Menu submenu = GetSubmenu (tags);
-			if (submenu == null)
-				item.Sensitive = false;
-			else
-				item.Submenu = submenu;
-
-			menu.Append (item);
-			item.Show ();
-		}
-
-		public static Gtk.Menu GetSubmenu (Tag [] tags)
-		{
-			Tag single_tag = null;
-			if (tags != null && tags.Length == 1)
-				single_tag = tags[0];
-
-			//Console.WriteLine ("creating find with menu item");
-			if (LogicWidget.Root == null || LogicWidget.Root.SubTerms.Count == 0) {
-				//Console.WriteLine ("root is null or has no terms");
-				return null;
-			} 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);
-
-				int sensitive_items = 0;
-				foreach (Term term in LogicWidget.Root.SubTerms) {
-					ArrayList term_parts = new ArrayList ();
-
-					bool contains_tag = AppendTerm (term_parts, term, single_tag);
-
-					string name = "_" + String.Join (", ", (string []) term_parts.ToArray (typeof(string)));
-
-					Gtk.MenuItem item = GtkUtil.MakeMenuItem (m, name, new EventHandler (App.Instance.Organizer.HandleAddTagToTerm));
-					item.Sensitive = !contains_tag;
-
-					if (!contains_tag)
-						sensitive_items++;
-				}
-
-				if (sensitive_items == 0)
-					all_item.Sensitive = false;
-
-				return m;
-			}
-		}
-
-		private static bool AppendTerm (ArrayList parts, Term term, Tag single_tag)
-		{
-			bool tag_matches = false;
-			if (term != null) {
-				Literal literal = term as Literal;
-				if (literal != null) {
-					if (literal.Tag == single_tag)
-						tag_matches = true;
-
-					if (literal.IsNegated)
-						parts.Add (String.Format (Catalog.GetString ("Not {0}"), literal.Tag.Name));
-					else
-						parts.Add (literal.Tag.Name);
-				} else {
-					foreach (Term subterm in term.SubTerms) {
-						tag_matches |= AppendTerm (parts, subterm, single_tag);
-					}
-				}
-			}
-
-			return tag_matches;
-		}
-	}
-
-	public class LiteralBox : VBox {
-		private GrabHandle handle;
-
-		public LiteralBox () : base ()
-		{
-			handle = new GrabHandle (24, 8);
-
-			PackEnd (handle, false, false, 0);
-
-			Show ();
-		}
-	}
-
-	public class GrabHandle : DrawingArea {
-		public GrabHandle (int w, int h) : base ()
-		{
-			Size (w, h);
-			Orientation = Gtk.Orientation.Horizontal;
-			Show ();
-		}
-
-		private Gtk.Orientation orientation;
-		public Gtk.Orientation Orientation {
-			get { return orientation; }
-			set { orientation = value; }
-		}
-
-		protected override bool OnExposeEvent (Gdk.EventExpose evnt)
-		{
-			bool ret = base.OnExposeEvent(evnt);
-
-			if (evnt.Window != GdkWindow) {
-				return ret;
-			}
-
-			Gtk.Style.PaintHandle(Style, GdkWindow, State, ShadowType.In,
-					      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,
-			//Height + (y_offset * 2));
-
-			return ret;
-		}
-	}
-
-	public class LogicWidget : HBox {
-		private PhotoQuery query;
-
-
-		private static Term rootTerm;
-		private EventBox rootAdd;
-		private HBox rootBox;
-		private Label help;
-		private HBox sepBox;
-
-		private bool preventUpdate = false;
-		private bool preview = false;
-
-		public event EventHandler Changed;
-
-		public static Term Root
-		{
-			get {
-				return rootTerm;
-			}
-		}
-
-		private static LogicWidget logic_widget = null;
-		public static LogicWidget Box {
-			get { return logic_widget; }
-		}
-
-		// Drag and Drop
-		private static TargetEntry [] tag_dest_target_table =
-			new TargetEntry [] {
-				DragDropTargets.TagListEntry,
-				DragDropTargets.TagQueryEntry
-			};
-
-		public LogicWidget (PhotoQuery query, TagStore tag_store) : base ()
-		{
-			//SetFlag (WidgetFlags.NoWindow);
-			this.query = query;
-
-			CanFocus = true;
-			Sensitive = true;
-
-			Init ();
-
-			tag_store.ItemsChanged += HandleTagChanged;
-			tag_store.ItemsRemoved += HandleTagDeleted;
-
-			Show ();
-
-			logic_widget = this;
-		}
-
-		private void Init ()
-		{
-			sepBox = null;
-			preview = false;
-
-			rootAdd = new Gtk.EventBox ();
-			rootAdd.VisibleWindow = false;
-			rootAdd.CanFocus = true;
-			rootAdd.DragMotion  += HandleDragMotion;
-			rootAdd.DragDataReceived += HandleDragDataReceived;
-			rootAdd.DragLeave  += HandleDragLeave;
-
-			help = new Gtk.Label ("<i>" + Catalog.GetString ("Drag tags here to search for them") + "</i>");
-			help.UseMarkup = true;
-			help.Visible = true;
-
-			rootBox = new HBox();
-			rootBox.Add (help);
-			rootBox.Show ();
-
-			rootAdd.Child = rootBox;
-			rootAdd.Show ();
-
-			Gtk.Drag.DestSet (rootAdd, DestDefaults.All, tag_dest_target_table,
-					  DragAction.Copy | DragAction.Move );
-
-			PackEnd (rootAdd, true, true, 0);
-
-			rootTerm = new OrTerm (null, null);
-		}
-
-		private void Preview ()
-		{
-			if (sepBox == null) {
-				sepBox = new HBox ();
-				Widget sep = rootTerm.SeparatorWidget ();
-				if (sep != null) {
-					sep.Show ();
-					sepBox.PackStart (sep, false, false, 0);
-				}
-				rootBox.Add (sepBox);
-			}
-
-			help.Hide ();
-			sepBox.Show ();
-		}
-
-		/** Handlers **/
-
-		// When the user edits a tag (it's icon, name, etc) we get called
-		// and update the images/text in the query as needed to reflect the changes.
-		private void HandleTagChanged (object sender, DbItemEventArgs<Tag> args)
-		{
-			foreach (Tag t in args.Items)
-                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 ();
-		}
-
-		private void HandleDragMotion (object o, DragMotionArgs args)
-		{
-			if (!preview && rootTerm.Count > 0 && (Literal.FocusedLiterals.Count == 0 || Children.Length > 2)) {
-				Preview ();
-				preview = true;
-			}
-		}
-
-		private void HandleDragLeave (object o, EventArgs args)
-		{
-			if (preview && Children.Length > 1) {
-				sepBox.Hide ();
-				preview = false;
-			} else if (preview && Children.Length == 1) {
-				help.Show ();
-			}
-		}
-
-		private void HandleLiteralsMoved (ArrayList literals, Term parent, Literal after)
-		{
-			preventUpdate = true;
-			foreach (Literal term in literals) {
-				Tag tag = term.Tag;
-
-				// Don't listen for it to be removed since we are
-				// moving it. We will update when we're done.
-				term.Removed -= HandleRemoved;
-				term.RemoveSelf ();
-
-				// Add it to where it was dropped
-				ArrayList groups = InsertTerm (new Tag[] {tag}, parent, after);
-
-				if (term.IsNegated)
-					foreach (Literal group in groups)
-					group.IsNegated = true;
-			}
-			preventUpdate = false;
-			UpdateQuery ();
-		}
-
-		private void HandleTagsAdded (Tag[] tags, Term parent, Literal after)
-		{
-			InsertTerm (tags, parent, after);
-		}
-
-		private void HandleAttachTag (Tag tag, Term parent, Literal after)
-		{
-			InsertTerm (new Tag [] {tag}, parent, after);
-		}
-
-		private void HandleNegated (Literal group)
-		{
-			UpdateQuery ();
-		}
-
-		private void HandleRemoving (Literal term)
-		{
-			foreach (Widget w in HangersOn (term))
-			Remove (w);
-
-			// Remove the term's widget
-			Remove (term.Widget);
-		}
-
-		public ArrayList HangersOn (Literal term)
-		{
-			ArrayList w = new ArrayList ();
-
-			// Find separators that only exist because of this term
-			if (term.Parent != null) {
-				if (term.Parent.Count > 1)
-				{
-					if (term == term.Parent.Last)
-						w.Add (Children[WidgetPosition (term.Widget) - 1]);
-					else
-						w.Add (Children[WidgetPosition (term.Widget) + 1]);
-				}
-				else if (term.Parent.Count == 1)
-				{
-					if (term.Parent.Parent != null) {
-						if (term.Parent.Parent.Count > 1) {
-							if (term.Parent == term.Parent.Parent.Last)
-								w.Add (Children[WidgetPosition (term.Widget) - 1]);
-							else
-								w.Add (Children[WidgetPosition (term.Widget) + 1]);
-						}
-					}
-				}
-			}
-			return w;
-		}
-
-		private void HandleRemoved (Literal group)
-		{
-			UpdateQuery ();
-		}
-
-		private void HandleDragDataReceived (object o, DragDataReceivedArgs args)
-		{
-			args.RetVal = true;
-			
-			if (args.Info == DragDropTargets.TagListEntry.Info) {
-
-				InsertTerm (args.SelectionData.GetTagsData (), rootTerm, null);
-				return;
-			}
-			
-			if (args.Info == DragDropTargets.TagQueryEntry.Info) {
-
-				// FIXME: use drag data
-				HandleLiteralsMoved (Literal.FocusedLiterals, rootTerm, null);
-
-				// Prevent them from being removed again
-				Literal.FocusedLiterals = null;
-				
-				return;
-			}
-		}
-
-		/** Helper Functions **/
-
-		public void PhotoTagsChanged (Tag [] tags)
-		{
-			bool refresh_required = false;
-
-			foreach (Tag tag in tags) {
-				if ((rootTerm.FindByTag (tag)).Count > 0) {
-					refresh_required = true;
-					break;
-				}
-			}
-
-			if (refresh_required)
-				UpdateQuery ();
-		}
-
-		// Inserts a widget into a Box at a certain index
-		private void InsertWidget (int index, Gtk.Widget widget) {
-			widget.Visible = true;
-			PackStart (widget, false, false, 0);
-			ReorderChild (widget, index);
-		}
-
-		// Return the index position of a widget in this Box
-		private int WidgetPosition (Gtk.Widget widget)
-		{
-			for (int i = 0; i < Children.Length; i++)
-				if (Children[i] == widget)
-					return i;
-
-			return Children.Length - 1;
-		}
-
-		public bool TagIncluded (Tag tag)
-		{
-			return rootTerm.TagIncluded (tag);
-		}
-
-		public bool TagRequired (Tag tag)
-		{
-			return rootTerm.TagRequired (tag);
-		}
-
-		// Add a tag or group of tags to the rootTerm, at the end of the Box
-		public void Include (Tag [] tags)
-		{
-			// Filter out any tags that are already included
-			ArrayList new_tags = new ArrayList(tags.Length);
-			foreach (Tag tag in tags) {
-				if (! rootTerm.TagIncluded (tag))
-					new_tags.Add (tag);
-
-			}
-
-			if (new_tags.Count == 0)
-				return;
-
-			tags = (Tag []) new_tags.ToArray (typeof (Tag));
-
-			InsertTerm (tags, rootTerm, null);
-		}
-
-		public void UnInclude (Tag [] tags)
-		{
-			ArrayList new_tags = new ArrayList(tags.Length);
-			foreach (Tag tag in tags) {
-				if (rootTerm.TagIncluded (tag))
-					new_tags.Add (tag);
-			}
-
-			if (new_tags.Count == 0)
-				return;
-
-			tags = (Tag []) new_tags.ToArray (typeof (Tag));
-
-			bool needsUpdate = false;
-			preventUpdate = true;
-			foreach (Term parent in rootTerm.LiteralParents ()) {
-				if (parent.Count == 1) {
-					foreach (Tag tag in tags) {
-						if ((parent.Last as Literal).Tag == tag) {
-							(parent.Last as Literal).RemoveSelf ();
-							needsUpdate = true;
-							break;
-						}
-					}
-				}
-			}
-			preventUpdate = false;
-
-			if (needsUpdate)
-				UpdateQuery ();
-		}
-
-		// AND this tag with all terms
-		public void Require (Tag [] tags)
-		{
-			// TODO it would be awesome if this was done by putting parentheses around
-			// OR terms and ANDing the result with this term (eg factored out)
-
-			// Trim out tags that are already required
-			ArrayList new_tags = new ArrayList(tags.Length);
-			foreach (Tag tag in tags) {
-				if (! rootTerm.TagRequired (tag))
-					new_tags.Add (tag);
-			}
-
-			if (new_tags.Count == 0)
-				return;
-
-			tags = (Tag []) new_tags.ToArray (typeof (Tag));
-
-			bool added = false;
-			preventUpdate = true;
-			foreach (Term parent in rootTerm.LiteralParents ()) {
-				// TODO logic could be broken if a term's SubTerms are a mixture
-				// of Literals and non-Literals
-				InsertTerm (tags, parent, parent.Last as Literal);
-				added = true;
-			}
-
-			// If there were no LiteralParents to add this tag to, then add it to the rootTerm
-			// TODO should add the first tag in the array,
-			// then add the others to the first's parent (so they will be ANDed together)
-			if (!added)
-				InsertTerm (tags, rootTerm, null);
-
-			preventUpdate = false;
-
-			UpdateQuery ();
-		}
-
-		public void UnRequire (Tag [] tags)
-		{
-			// Trim out tags that are not required
-			ArrayList new_tags = new ArrayList(tags.Length);
-			foreach (Tag tag in tags) {
-				if (rootTerm.TagRequired (tag))
-					new_tags.Add (tag);
-			}
-
-			if (new_tags.Count == 0)
-				return;
-
-			tags = (Tag []) new_tags.ToArray (typeof (Tag));
-
-			preventUpdate = true;
-			foreach (Term parent in rootTerm.LiteralParents ()) {
-				// Don't remove if this tag is the only child of a term
-				if (parent.Count > 1) {
-					foreach (Tag tag in tags) {
-						((parent.FindByTag (tag))[0] as Literal).RemoveSelf ();
-					}
-				}
-			}
-
-			preventUpdate = false;
-
-			UpdateQuery ();
-		}
-
-		public ArrayList InsertTerm (Tag [] tags, Term parent, Literal after)
-		{
-			int position;
-			if (after != null)
-				position = WidgetPosition (after.Widget) + 1;
-			else
-				position = Children.Length - 1;
-
-			ArrayList added = new ArrayList ();
-
-			foreach (Tag tag in tags) {
-				//Console.WriteLine ("Adding tag {0}", tag.Name);
-
-				// Don't put a tag into a Term twice
-				if (parent != Root && (parent.FindByTag (tag, true)).Count > 0)
-					continue;
-
-				if (parent.Count > 0) {
-					Widget sep = parent.SeparatorWidget ();
-
-					InsertWidget (position, sep);
-					position++;
-				}
-
-				// Encapsulate new OR terms within a new AND term of which they are the
-				// only member, so later other terms can be AND'd with them
-				//
-				// TODO should really see what type of term the parent is, and
-				// encapsulate this term in a term of the opposite type. This will
-				// allow the query system to be expanded to work for multiple levels much easier.
-				if (parent == rootTerm) {
-					parent = new AndTerm (rootTerm, after);
-					after = null;
-				}
-
-				Literal term  = new Literal (parent, tag, after);
-				term.TagsAdded  += HandleTagsAdded;
-				term.LiteralsMoved += HandleLiteralsMoved;
-				term.AttachTag  += HandleAttachTag;
-				term.NegatedToggled += HandleNegated;
-				term.Removing  += HandleRemoving;
-				term.Removed  += HandleRemoved;
-				term.RequireTag  += Require;
-				term.UnRequireTag += UnRequire;
-
-				added.Add (term);
-
-				// Insert this widget into the appropriate place in the hbox
-				InsertWidget (position, term.Widget);
-			}
-
-			UpdateQuery ();
-
-			return added;
-		}
-
-		// Update the query, which updates the icon_view
-		public void UpdateQuery ()
-		{
-			if (preventUpdate)
-				return;
-
-			if (sepBox != null)
-				sepBox.Hide ();
-
-			if (rootTerm.Count == 0) {
-				help.Show ();
-				query.TagTerm = null;
-			} else {
-				help.Hide ();
-				query.TagTerm = new ConditionWrapper (rootTerm.SqlCondition ());
-			}
-
-			EventHandler handler = Changed;
-			if (handler != null)
-				handler (this, new EventArgs ());
-		}
-
-		public bool Clear
-		{
-			get {
-				return rootTerm.Count == 0;
-			}
-
-			set {
-				// Clear out the query, starting afresh
-				foreach (Widget widget in Children) {
-					Remove (widget);
-					widget.Destroy ();
-				}
-				Init ();
-			}
-		}
-	}
-}
diff --git a/src/TagSelectionWidget.cs b/src/TagSelectionWidget.cs
deleted file mode 100644
index e096833..0000000
--- a/src/TagSelectionWidget.cs
+++ /dev/null
@@ -1,823 +0,0 @@
-/*
- * TagSelectionWidget.cs
- *
- * Author(s)
- * 
- * This is free software. See COPYING for details.
- */
-
-
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System;
-
-using GLib;
-
-using Gdk;
-
-using Gtk;
-
-using Mono.Unix;
-
-using FSpot;
-using FSpot.Utils;
-using FSpot.Widgets;
-using FSpot.UI.Dialog;
-using Hyena.Widgets;
-
-
-
-namespace FSpot {
-	
-	public class TagSelectionWidget : SaneTreeView {
-		
-		Db database;
-		TagStore tag_store;
-	
-		// FIXME this is a hack.
-		private static Pixbuf empty_pixbuf = new Pixbuf (Colorspace.Rgb, true, 8, 1, 1);
-	
-		// If these are changed, the base () call in the constructor must be updated.
-		private const int IdColumn = 0;
-		private const int NameColumn = 1;
-	
-		// Selection management.
-	
-		public Tag TagAtPosition (double x, double y) 
-	    {
-	        return TagAtPosition((int) x, (int) y);
-	    }
-	
-		public Tag TagAtPosition (int x, int y) 
-		{
-			TreePath path;
-	
-			// Work out which tag we're dropping onto
-			if (!this.GetPathAtPos (x, y, out path))
-				return null;
-	
-			return TagByPath (path);
-		}
-	
-		public Tag TagByPath (TreePath path) 
-		{
-			TreeIter iter;
-	
-			if (!Model.GetIter (out iter, path))
-				return null;
-	
-			return TagByIter (iter);
-		}
-		
-		public Tag TagByIter (TreeIter iter)
-		{
-			GLib.Value val = new GLib.Value ();
-	 
-			Model.GetValue (iter, IdColumn, ref val);
-			uint tag_id = (uint) val;
-	 
-			return tag_store.Get (tag_id) as Tag;
-		}
-	
-		// Loading up the store.
-	
-		private void LoadCategory (Category category, TreeIter parent_iter)
-		{
-			IList<Tag> tags = category.Children;
-	
-			foreach (Tag t in tags) {
-				TreeIter iter = (Model as TreeStore).AppendValues (parent_iter, t.Id, t.Name);
-				if (t is Category)
-					LoadCategory (t as Category, iter);
-			}
-		}
-	
-		public void ScrollTo (Tag tag)
-		{
-			TreeIter iter;
-			if (! TreeIterForTag (tag, out iter))
-				return;
-	
-			TreePath path = Model.GetPath (iter);
-	
-			ScrollToCell (path, null, false, 0, 0);
-		}
-	
-		public Tag [] TagHighlight {
-			get {
-				TreeModel model;
-				TreeIter iter;
-	
-				TreePath [] rows = Selection.GetSelectedRows(out model);
-	
-				Tag [] tags = new Tag [rows.Length];
-				int i = 0;
-	
-				foreach (TreePath path in rows) {
-					GLib.Value value = new GLib.Value ();
-					Model.GetIter (out iter, path);
-					Model.GetValue (iter, IdColumn, ref value);
-					uint tag_id = (uint) value;
-					tags[i] = tag_store.Get (tag_id) as Tag;
-					i++;
-				}
-				return tags;
-			}
-	
-			set {
-				if (value == null)
-					return;
-	
-				Selection.UnselectAll ();
-	
-				TreeIter iter;
-				foreach (Tag tag in value)
-					if (TreeIterForTag (tag, out iter))
-						Selection.SelectIter (iter);
-			}
-		}
-	
-		public void Update ()
-		{
-			(Model as TreeStore).Clear ();
-	
-			// GRRR We have to special case the root because I can't pass null for a
-			// Gtk.TreeIter (since it's a struct, and not a class).
-			// FIXME: This should be fixed in GTK#...  It's gross.
-	
-			foreach (Tag t in tag_store.RootCategory.Children) {
-				TreeIter iter = (Model as TreeStore).AppendValues (t.Id, t.Name);
-				if (t is Category)
-					LoadCategory (t as Category, iter);
-			}
-		}
-	
-		// Data functions.
-	
-		private void SetBackground (CellRenderer renderer, Tag tag)
-		{
-			// FIXME this should be themable but Gtk# doesn't give me access to the proper
-			// members in GtkStyle for that.
-			/*
-			if (tag is Category)
-				renderer.CellBackground = ToHashColor (this.Style.MidColors [(int) Gtk.StateType.Normal]);
-			else
-				renderer.CellBackground = ToHashColor (this.Style.LightColors [(int) Gtk.StateType.Normal]);
-			*/
-		}
-	
-		private void IconDataFunc (TreeViewColumn column, 
-					   CellRenderer renderer,
-					   TreeModel model,
-					   TreeIter iter)
-		{
-			GLib.Value value = new GLib.Value ();
-			Model.GetValue (iter, IdColumn, ref value);
-			uint tag_id = (uint) value;
-			Tag tag = tag_store.Get (tag_id) as Tag;
-	
-			SetBackground (renderer, tag);
-	
-			if (tag.SizedIcon != null) {
-				Cms.Profile screen_profile;
-				if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
-					//FIXME, we're leaking a pixbuf here
-					Gdk.Pixbuf temp = tag.SizedIcon.Copy();
-					FSpot.ColorManagement.ApplyProfile (temp, screen_profile);
-					(renderer as CellRendererPixbuf).Pixbuf = temp;
-				} else
-					(renderer as CellRendererPixbuf).Pixbuf = tag.SizedIcon;
-			} else
-				(renderer as CellRendererPixbuf).Pixbuf = empty_pixbuf;
-		}
-	
-		private void NameDataFunc (TreeViewColumn column,
-					   CellRenderer renderer,
-					   TreeModel model,
-					   TreeIter iter)
-		{
-			// FIXME not sure why it happens...
-			if (model == null)
-				return;
-	
-			GLib.Value value = new GLib.Value ();
-			Model.GetValue (iter, IdColumn, ref value);
-			uint tag_id = (uint) value;
-	
-			Tag tag = tag_store.Get (tag_id) as Tag;
-	
-			SetBackground (renderer, tag);
-	
-			(renderer as CellRendererText).Text = tag.Name;
-		}
-	
-		private bool TreeIterForTag(Tag tag, out TreeIter iter) 
-		{
-			TreeIter root = TreeIter.Zero;
-			iter = TreeIter.Zero;
-	
-			bool valid = Model.GetIterFirst (out root);
-			
-			while (valid) {
-				if (TreeIterForTagRecurse (tag, root, out iter))
-					return true;
-	
-				valid = Model.IterNext (ref root);
-			}
-			return false;
-		}
-	
-		// Depth first traversal
-		private bool TreeIterForTagRecurse (Tag tag, TreeIter parent, out TreeIter iter) 
-		{
-			bool valid = Model.IterChildren (out iter, parent);
-	
-			while (valid) {
-				if (TreeIterForTagRecurse (tag, iter, out iter))
-					return true;
-				valid = Model.IterNext (ref iter);
-			}
-	
-			GLib.Value value = new GLib.Value ();
-			Model.GetValue (parent, IdColumn, ref value);
-			iter = parent;
-	
-			if (tag.Id == (uint) value)
-				return true;
-	
-			return false;
-		}
-		
-		// Copy a branch of the tree to a new parent
-		// (note, this doesn't work generically as it only copies the first value of each node)
-		private void CopyBranch (TreeIter src, TreeIter dest, bool is_root, bool is_parent) 
-		{
-			TreeIter copy, iter;
-			GLib.Value value = new GLib.Value ();
-			TreeStore store = Model as TreeStore;
-			bool valid;
-			
-			store.GetValue (src, IdColumn, ref 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);
-			} else { 
-				copy = store.AppendValues (dest, (uint)value, tag.Name);
-			}
-			
-			valid = Model.IterChildren (out iter, src);
-			while (valid) {
-				// child nodes are already ordered
-				CopyBranch (iter, copy, false, false);
-				valid = Model.IterNext (ref iter);
-			}
-		}
-	
-		// insert tag into the correct place in the tree, with parent. return the new TagIter in iter.
-		private TreeIter InsertInOrder (TreeIter parent, bool is_root, Tag tag) 
-		{
-			TreeStore store = Model as TreeStore;
-			TreeIter iter;
-			Tag compare;
-			bool valid;
-	
-			if (is_root)
-				valid = store.GetIterFirst (out iter);
-			else
-				valid = store.IterChildren (out iter, parent);
-	
-			while (valid) {
-				//I have no desire to figure out a more performant sort over this...
-				GLib.Value value = new GLib.Value ();
-				store.GetValue(iter, IdColumn, ref value);
-				compare = (Tag) tag_store.Get ((uint) value);
-	
-				if (compare.CompareTo (tag) > 0) {
-					iter = store.InsertNodeBefore (iter);
-					store.SetValue (iter, IdColumn, tag.Id);
-					store.SetValue (iter, NameColumn, tag.Name);
-					
-					if (!is_root)
-						ExpandRow (Model.GetPath (parent), false);
-					return iter;
-				}
-				valid = store.IterNext(ref iter);
-			}
-			
-			if (is_root) 
-				iter = store.AppendNode (); 
-			else {
-				iter = store.AppendNode (parent); 
-				ExpandRow (Model.GetPath (parent), false);
-			}
-	
-			store.SetValue (iter, IdColumn, tag.Id);
-			store.SetValue (iter, NameColumn, tag.Name);
-			return iter;
-		}
-	
-		private void HandleTagsRemoved (object sender, DbItemEventArgs<Tag> args)
-		{
-			TreeIter iter;
-	
-			foreach (Tag tag in args.Items) {
-				if (TreeIterForTag (tag, out iter)) 
-					(Model as TreeStore).Remove (ref iter);
-			}
-		}
-		
-		private void HandleTagsAdded (object sender, DbItemEventArgs<Tag> args)
-		{
-			TreeIter iter = TreeIter.Zero;
-			
-			foreach (Tag tag in args.Items) {
-				if (tag.Category != tag_store.RootCategory)
-					TreeIterForTag (tag.Category, out iter);
-	
-				InsertInOrder (iter,
-					       tag.Category.Name == tag_store.RootCategory.Name,
-					       tag);
-			}
-		}
-		
-		private void HandleTagsChanged (object sender, DbItemEventArgs<Tag> args)
-		{
-			TreeStore store = Model as TreeStore;
-			TreeIter iter, category_iter, parent_iter;
-	
-			foreach (Tag tag in args.Items) {
-				TreeIterForTag (tag, out iter);
-				
-				bool category_valid = TreeIterForTag(tag.Category, out category_iter);
-				bool parent_valid = Model.IterParent(out parent_iter, iter);
-				
-				if ((category_valid && (category_iter.Equals (parent_iter))) || (!category_valid && !parent_valid)) {
-					// if we haven't been reparented
-					TreePath path = store.GetPath (iter); 
-					store.EmitRowChanged (path, iter);
-				} else {
-					// It is a bit tougher. We need to do an annoying clone of structs...
-					CopyBranch (iter, category_iter, !category_valid, true);
-					store.Remove (ref iter);
-				}
-			}
-		}
-	
-		void ExpandDefaults ()
-		{
-			int [] tags = FSpot.Preferences.Get<int []> (FSpot.Preferences.EXPANDED_TAGS);
-			if (tags == null) {
-				ExpandAll ();
-				return;
-			}
-	
-			TreeIter [] iters = ModelIters ();
-			if (iters == null || iters.Length == 0 || tags.Length == 0)
-				return;
-	
-			foreach (TreeIter iter in iters)
-			{
-				GLib.Value v = new GLib.Value ();
-				Model.GetValue (iter, IdColumn, ref v);
-				int tag_id = (int)(uint) v;
-				if (Array.IndexOf (tags, tag_id) > -1) {
-					ExpandRow (Model.GetPath (iter), false);
-				}
-			}
-		}
-	
-		// Returns a flattened array of TreeIter's from the Model
-		TreeIter [] ModelIters ()
-		{
-			TreeIter root;
-			if (Model.GetIterFirst (out root))
-			{
-				return ModelIters (root, true).ToArray (typeof (TreeIter)) as TreeIter [];
-			}
-	
-			return null;
-		}
-	
-		// Returns ArrayList containing the root TreeIter and all TreeIters at root's level and
-		// descended from it
-		ArrayList ModelIters (TreeIter root, bool first)
-		{
-			ArrayList model_iters = new ArrayList (Model.IterNChildren ());
-	
-			model_iters.Add (root);
-	
-			// Append any children
-			TreeIter child;
-			if (Model.IterChildren (out child, root))
-				model_iters.AddRange (ModelIters (child, true));
-			
-			// Append any siblings and their children
-			if (first) {
-				while (Model.IterNext (ref root)) {
-					model_iters.AddRange (ModelIters (root, false));
-				}
-			}
-	
-			return model_iters;
-		}
-	
-		public void SaveExpandDefaults ()
-		{
-			ArrayList expanded_tags = new ArrayList ();
-			
-			TreeIter [] iters = ModelIters ();
-			if (iters == null)
-				return;
-	
-			foreach (TreeIter iter in iters)
-			{
-				if (GetRowExpanded (Model.GetPath (iter))) {
-					GLib.Value v = new GLib.Value ();
-					Model.GetValue (iter, IdColumn, ref v);
-					expanded_tags.Add ((int)(uint) v);
-				}
-			}
-	
-	#if GCONF_SHARP_2_18
-			FSpot.Preferences.Set (	FSpot.Preferences.EXPANDED_TAGS, (int []) expanded_tags.ToArray (typeof (int)));
-	#else
-			if (expanded_tags.Count == 0)
-				expanded_tags.Add (-1);
-	
-			FSpot.Preferences.Set (	FSpot.Preferences.EXPANDED_TAGS,
-							(int []) expanded_tags.ToArray (typeof (int)));
-	#endif
-		}
-	
-		public void EditSelectedTagName ()
-		{
-			TreePath [] rows = Selection.GetSelectedRows();
-			if (rows.Length != 1)
-				return;
-			
-			//SetCursor (rows[0], NameColumn, true);
-			text_render.Editable = true;
-			text_render.Edited += HandleTagNameEdited;
-			SetCursor (rows[0], complete_column, true);
-			text_render.Editable = false;
-		}
-	
-		public void HandleTagNameEdited (object sender, EditedArgs args)
-		{
-			args.RetVal = false;
-	
-			TreeIter iter;
-	
-			if (!Model.GetIterFromString (out iter, args.Path))
-				return;
-	
-			GLib.Value value = new GLib.Value ();
-			Model.GetValue (iter, IdColumn, ref value);
-			uint tag_id = (uint) value;
-			Tag tag = tag_store.Get (tag_id) as Tag;
-	
-			// Ignore if it hasn't changed
-			if (tag.Name == args.NewText)
-				return;
-	
-			// Check that the tag doesn't already exist
-			if (String.Compare (args.NewText, tag.Name, true) != 0 &&
-			    tag_store.GetTagByName (args.NewText) != null) {
-				HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window,
-					DialogFlags.DestroyWithParent, 
-					MessageType.Warning, ButtonsType.Ok, 
-					Catalog.GetString ("Error renaming tag"),
-					Catalog.GetString ("This name is already in use"));
-	
-				md.Run ();
-				md.Destroy ();
-				this.GrabFocus ();
-				return;
-			}
-	
-			tag.Name = args.NewText;
-			tag_store.Commit (tag, true);
-	
-			text_render.Edited -= HandleTagNameEdited;
-	
-			args.RetVal = true;
-			return;
-		}
-		
-		private static TargetEntry [] tag_source_target_table = 
-			new TargetEntry [] {
-				DragDropTargets.TagListEntry
-			};
-	
-		private static TargetEntry [] tag_dest_target_table = 
-			new TargetEntry [] {
-				DragDropTargets.PhotoListEntry,
-				DragDropTargets.UriListEntry,
-				DragDropTargets.TagListEntry
-			};
-	
-		
-		CellRendererPixbuf pix_render;
-		TreeViewColumn complete_column;
-		CellRendererText text_render;
-	
-		protected TagSelectionWidget (IntPtr raw) : base (raw) { }
-
-		// Constructor.
-		public TagSelectionWidget (TagStore tag_store)
-			: base (new TreeStore (typeof(uint), typeof(string)))
-		{
-			database = App.Instance.Database;
-			
-			HeadersVisible = false;
-	
-			complete_column = new TreeViewColumn ();
-					
-			pix_render = new CellRendererPixbuf ();
-			complete_column.PackStart (pix_render, false);
-			complete_column.SetCellDataFunc (pix_render, new TreeCellDataFunc (IconDataFunc));
-			//complete_column.AddAttribute (pix_render, "pixbuf", OpenIconColumn);
-	
-			//icon_column = AppendColumn ("icon", 
-			//, new TreeCellDataFunc (IconDataFunc));
-			//icon_column = AppendColumn ("icon", new CellRendererPixbuf (), new TreeCellDataFunc (IconDataFunc));
-	
-			text_render = new CellRendererText ();
-			complete_column.PackStart (text_render, true);
-			complete_column.SetCellDataFunc (text_render, new TreeCellDataFunc (NameDataFunc));
-	
-			AppendColumn (complete_column);
-	
-			this.tag_store = tag_store;
-	
-			Update ();
-	
-			ExpandDefaults ();
-	
-			tag_store.ItemsAdded += HandleTagsAdded;
-			tag_store.ItemsRemoved += HandleTagsRemoved;
-			tag_store.ItemsChanged += HandleTagsChanged;
-	
-			// TODO make the search find tags that are not currently expanded
-			EnableSearch = true;
-			SearchColumn = NameColumn;
-	
-			// Transparent white
-			empty_pixbuf.Fill(0xffffff00);
-			
-			
-			/* set up drag and drop */
-			DragDataGet += HandleDragDataGet;
-			DragDrop += HandleDragDrop;
-			DragBegin += HandleDragBegin;
-
-			Gtk.Drag.SourceSet (this,
-			           Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
-			           tag_source_target_table,
-			           DragAction.Copy | DragAction.Move);
-
-			DragDataReceived += HandleDragDataReceived;
-			DragMotion += HandleDragMotion;
-			
-			Gtk.Drag.DestSet (this,
-			                  DestDefaults.All,
-			                  tag_dest_target_table,
-			                  DragAction.Copy | DragAction.Move); 
-		}
-	
-		void HandleDragBegin (object sender, DragBeginArgs args)
-		{
-			Tag [] tags = TagHighlight;
-			int len = tags.Length;
-			int size = 32;
-			int csize = size/2 + len * size / 2 + 2;
-			
-			Pixbuf container = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, csize, csize);
-			container.Fill (0x00000000);
-			
-			bool use_icon = false;;
-			while (len-- > 0) {
-				Pixbuf thumbnail = tags[len].Icon;
-				
-				if (thumbnail != null) {
-					Pixbuf small = PixbufUtils.ScaleToMaxSize (thumbnail, size, size);				
-					
-					int x = len * (size/2) + (size - small.Width)/2;
-					int y = len * (size/2) + (size - small.Height)/2;
-	
-					small.Composite (container, x, y, small.Width, small.Height, x, y, 1.0, 1.0, Gdk.InterpType.Nearest, 0xff);
-					small.Dispose ();
-	
-					use_icon = true;
-				}
-			}
-			
-			if (use_icon)
-				Gtk.Drag.SetIconPixbuf (args.Context, container, 0, 0);
-			
-			container.Dispose ();
-		}
-		
-		void HandleDragDataGet (object sender, DragDataGetArgs args)
-		{
-			if (args.Info == DragDropTargets.TagListEntry.Info) {
-				args.SelectionData.SetTagsData (TagHighlight, args.Context.Targets[0]);
-				return;
-			}
-		}
-	
-		void HandleDragDrop (object sender, DragDropArgs args)
-		{
-			args.RetVal = true;
-		}
-	
-		public void HandleDragMotion (object o, DragMotionArgs args)
-		{
-			TreePath path;
-	        TreeViewDropPosition position = TreeViewDropPosition.IntoOrAfter;
-			GetPathAtPos (args.X, args.Y, out path);
-	
-	        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;
-	            }
-	        }
-	
-			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)
-				Vadjustment.Value += 30;
-		}
-	
-		public void HandleDragDataReceived (object o, DragDataReceivedArgs args)
-		{
-	        TreePath path;
-	        TreeViewDropPosition position;
-			
-	        if ( ! GetDestRowAtPos ((int)args.X, (int)args.Y, out path, out position))
-	            return;
-	
-	        Tag tag = path == null ? null : TagByPath (path);
-			if (tag == null)
-				return;
-	
-			if (args.Info == DragDropTargets.PhotoListEntry.Info) {
-				database.BeginTransaction ();
-				
-				Photo[] photos = args.SelectionData.GetPhotosData ();
-
-				foreach (Photo photo in photos) {
-
-					if (photo == null)
-						continue;
-					
-					photo.AddTag (tag);
-					database.Photos.Commit (photo);
-					
-					// FIXME: AddTagExtendes from Mainwindow.cs does some tag-icon handling.
-					// this should be done here or completely located to the Tag-class.
-				}
-				database.CommitTransaction ();
-				
-				// FIXME: this needs to be done somewhere:
-				//query_widget.PhotoTagsChanged (new Tag[] {tag});
-				return;
-			}
-			
-			if (args.Info == DragDropTargets.UriListEntry.Info) {
-				UriList list = args.SelectionData.GetUriListData ();
-				
-				database.BeginTransaction ();
-				List<Photo> photos = new List<Photo> ();
-				foreach (var photo_uri in list) {
-					Photo photo = database.Photos.GetByUri (photo_uri);
-					
-					// FIXME - at this point we should import the photo, and then continue
-					if (photo == null)
-						continue;
-					
-					// FIXME this should really follow the AddTagsExtended path too
-					photo.AddTag (new Tag[] {tag});
-					photos.Add (photo);
-				}
-				database.Photos.Commit (photos.ToArray ());
-				database.CommitTransaction ();
-				
-				// FIXME: this need to be done
-				//InvalidateViews (); // but it seems not to be needed. tags are updated through in IconView through PhotoChanged
-				return;
-			}
-	
-			if (args.Info == DragDropTargets.TagListEntry.Info) {
-				Category parent;
-	            if (position == TreeViewDropPosition.Before || position == TreeViewDropPosition.After) {
-	                parent = tag.Category;
-	            } else {
-	                parent = tag as Category;
-	            }
-	
-				if (parent == null || TagHighlight.Length < 1) {
-	                args.RetVal = false;
-					return;
-	            }
-	
-	            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 as Category;
-	
-	                    // Saving changes will automatically cause the TreeView to be updated
-	                    database.Tags.Commit (child);
-	                    moved_count++;
-	                }
-	            }
-	
-	            // Reselect the same tags
-	            TagHighlight = highlighted_tags;
-	
-	            args.RetVal = moved_count > 0;
-				return;
-			}
-		}
-		
-	
-	#if TEST_TAG_SELECTION_WIDGET
-	
-		class Test {
-	
-			private TagSelectionWidget selection_widget;
-	
-			private void OnSelectionChanged ()
-			{
-				Log.Debug ("Selection changed:");
-	
-				foreach (Tag t in selection_widget.TagSelection)
-					Log.DebugFormat ("\t{0}", t.Name);
-			}
-	
-			private Test ()
-			{
-				const string path = "/tmp/TagSelectionTest.db";
-	
-				try {
-					File.Delete (path);
-				} catch {}
-	
-				Db db = new Db (path, true);
-	
-				Category people_category = db.Tags.CreateCategory (null, "People");
-				db.Tags.CreateTag (people_category, "Anna");
-				db.Tags.CreateTag (people_category, "Ettore");
-				db.Tags.CreateTag (people_category, "Miggy");
-				db.Tags.CreateTag (people_category, "Nat");
-	
-				Category places_category = db.Tags.CreateCategory (null, "Places");
-				db.Tags.CreateTag (places_category, "Milan");
-				db.Tags.CreateTag (places_category, "Boston");
-	
-				Category exotic_category = db.Tags.CreateCategory (places_category, "Exotic");
-				db.Tags.CreateTag (exotic_category, "Bengalore");
-				db.Tags.CreateTag (exotic_category, "Manila");
-				db.Tags.CreateTag (exotic_category, "Tokyo");
-	
-				selection_widget = new TagSelectionWidget (db.Tags);
-				selection_widget.SelectionChanged += new SelectionChangedHandler (OnSelectionChanged);
-	
-				Window window = new Window (WindowType.Toplevel);
-				window.SetDefaultSize (400, 200);
-				ScrolledWindow scrolled = new ScrolledWindow (null, null);
-				scrolled.SetPolicy (PolicyType.Automatic, PolicyType.Automatic);
-				scrolled.Add (selection_widget);
-				window.Add (scrolled);
-	
-				window.ShowAll ();
-			}
-	
-			static private void Main (string [] args)
-			{
-				Program program = new Program ("TagSelectionWidgetTest", "0.0", Modules.UI, args);
-	
-				Test test = new Test ();
-	
-				program.Run ();
-			}
-		}
-	
-	#endif
-	}
-}
diff --git a/src/TagStore.cs b/src/TagStore.cs
deleted file mode 100644
index fd9fa44..0000000
--- a/src/TagStore.cs
+++ /dev/null
@@ -1,380 +0,0 @@
-using Gdk;
-using Gtk;
-using Mono.Unix;
-using Mono.Data.SqliteClient;
-using System.Collections.Generic;
-using System.Collections;
-using System.IO;
-using System;
-using Banshee.Database;
-using FSpot;
-using FSpot.Jobs;
-using FSpot.Query;
-using FSpot.Utils;
-using Hyena;
-
-public class InvalidTagOperationException : InvalidOperationException {
-	public Tag tag;
-	
-	public InvalidTagOperationException (Tag t, string message) : base (message)
-	{
-		tag = t;
-	}
-
-	public Tag Tag {
-		get {
-			return tag;
-		}
-	}
-
-}
-
-// Sorts tags into an order that it will be safe to delete
-// them in (eg children first).
-public class TagRemoveComparer : IComparer {
-	public int Compare (object obj1, object obj2) 
-	{
-		Tag t1 = obj1 as Tag;
-		Tag t2 = obj2 as Tag;
-		
-		return Compare (t1, t2);
-	}
-       
-	public int Compare (Tag t1, Tag t2)
-	{
-		if (t1.IsAncestorOf (t2))
-			return 1;
-		else if (t2.IsAncestorOf (t1))
-			return -1;
-		else
-			return 0;
-	}
-}
-
-public class TagStore : DbStore<Tag> {
-	Category root_category;
-	public Category RootCategory {
-		get {
-			return root_category;
-		}
-	}
-
-	private const string STOCK_ICON_DB_PREFIX = "stock_icon:";
-
-	static void SetIconFromString (Tag tag, string icon_string)
-	{
-		if (icon_string == null) {
-			tag.Icon = null;
-			// IconWasCleared automatically set already, override
-			// it in this case since it was NULL in the db.
-			tag.IconWasCleared = false;
-		} else if (icon_string == String.Empty)
-			tag.Icon = null;
-		else if (icon_string.StartsWith (STOCK_ICON_DB_PREFIX))
-			tag.ThemeIconName = icon_string.Substring (STOCK_ICON_DB_PREFIX.Length);
-		else
-			tag.Icon = GdkUtils.Deserialize (Convert.FromBase64String (icon_string));
-	}
-
-	private Tag hidden;
-	public Tag Hidden {
-		get {
-			return hidden;
-		}
-	}
-
-	public Tag GetTagByName (string name)
-	{
-		foreach (Tag t in this.item_cache.Values)
-			if (t.Name.ToLower () == name.ToLower ())
-				return t;
-
-		return null;
-	}
-
-	public Tag GetTagById (int id)
-	{
-		foreach (Tag t in this.item_cache.Values)
-			if (t.Id == id)
-				return t;
-		return null;
-	}
-
-	public Tag [] GetTagsByNameStart (string s)
-	{
-		List <Tag> l = new List<Tag> ();
-		foreach (Tag t in this.item_cache.Values) {
-			if (t.Name.ToLower ().StartsWith (s.ToLower ()))
-				l.Add (t);
-		}
-
-		if (l.Count == 0)
-			return null;
-		
-		l.Sort (delegate (Tag t1, Tag t2) {return t2.Popularity.CompareTo (t1.Popularity); });
-
-		return l.ToArray ();
-	}
-
-	// In this store we keep all the items (i.e. the tags) in memory at all times.  This is
-	// mostly to simplify handling of the parent relationship between tags, but it also makes it
-	// a little bit faster.  We achieve this by passing "true" as the cache_is_immortal to our
-	// base class.
-	private void LoadAllTags ()
-	{
-
-		// Pass 1, get all the tags.
-
-		SqliteDataReader reader = Database.Query ("SELECT id, name, is_category, sort_priority, icon FROM tags");
-
-		while (reader.Read ()) {
-			uint id = Convert.ToUInt32 (reader ["id"]);
-			string name = reader ["name"].ToString ();
-			bool is_category = (Convert.ToUInt32 (reader ["is_category"]) != 0);
-
-			Tag tag;
-			if (is_category)
-				tag = new Category (null, id, name);
-			else
-				tag = new Tag (null, id, name);
-
-			if (reader ["icon"] != null)
-				try {
-					SetIconFromString (tag, reader ["icon"].ToString ());
-				} catch (Exception ex) {
-					Log.Exception ("Unable to load icon for tag " + name, ex);
-				}
-
-			tag.SortPriority = Convert.ToInt32 (reader["sort_priority"]);
-			AddToCache (tag);
-		}
-
-		reader.Close ();
-
-		// Pass 2, set the parents.
-		reader = Database.Query ("SELECT id, category_id FROM tags");
-
-		while (reader.Read ()) {
-			uint id = Convert.ToUInt32 (reader ["id"]);
-			uint category_id = Convert.ToUInt32 (reader ["category_id"]);
-
-			Tag tag = Get (id) as Tag;
-			if (tag == null)
-				throw new Exception (String.Format ("Cannot find tag {0}", id));
-			if (category_id == 0)
-				tag.Category = RootCategory;
-			else {
-				tag.Category = Get (category_id) as Category;
-				if (tag.Category == null)
-					Log.Warning ("Tag Without category found");
-			}
-
-		}
-		reader.Close ();
-
-		//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"])) as Tag;
-			if (t != null)
-				t.Popularity = Convert.ToInt32 (reader ["popularity"]);
-		}
-		reader.Close ();
-
-		if (FSpot.App.Instance.Database.Meta.HiddenTagId.Value != null)
-			hidden = LookupInCache ((uint) FSpot.App.Instance.Database.Meta.HiddenTagId.ValueAsInt) as Tag;
-	}
-
-
-	private void CreateTable ()
-	{
-		Database.ExecuteNonQuery (
-			"CREATE TABLE tags (\n" +
-			"	id		INTEGER PRIMARY KEY NOT NULL, \n" +
-			"	name		TEXT UNIQUE, \n" +
-			"	category_id	INTEGER, \n" +
-			"	is_category	BOOLEAN, \n" +
-			"	sort_priority	INTEGER, \n" +
-			"	icon		TEXT\n" +
-			")");
-	}
-
-	private void CreateDefaultTags ()
-	{
-		Category favorites_category = CreateCategory (RootCategory, Catalog.GetString ("Favorites"), false);
-		favorites_category.ThemeIconName = "emblem-favorite";
-		favorites_category.SortPriority = -10;
-		Commit (favorites_category);
-
-		Tag hidden_tag = CreateTag (RootCategory, Catalog.GetString ("Hidden"), false);
-		hidden_tag.ThemeIconName = "emblem-readonly";
-		hidden_tag.SortPriority = -9;
-		this.hidden = hidden_tag;
-		Commit (hidden_tag);
-		FSpot.App.Instance.Database.Meta.HiddenTagId.ValueAsInt = (int) hidden_tag.Id;
-		FSpot.App.Instance.Database.Meta.Commit (FSpot.App.Instance.Database.Meta.HiddenTagId);
-
-		Tag people_category = CreateCategory (RootCategory, Catalog.GetString ("People"), false);
-		people_category.ThemeIconName = "emblem-people";
-		people_category.SortPriority = -8;
-		Commit (people_category);
-
-		Tag places_category = CreateCategory (RootCategory, Catalog.GetString ("Places"), false);
-		places_category.ThemeIconName = "emblem-places";
-		places_category.SortPriority = -8;
-		Commit (places_category);
-
-		Tag events_category = CreateCategory (RootCategory, Catalog.GetString ("Events"), false);
-		events_category.ThemeIconName = "emblem-event";
-		events_category.SortPriority = -7;
-		Commit (events_category);
-	}
-
-
-	// Constructor
-
-	public TagStore (QueuedSqliteDatabase database, bool is_new)
-		: base (database, true)
-	{
-		// The label for the root category is used in new and edit tag dialogs
-		root_category = new Category (null, 0, Catalog.GetString ("(None)"));
-
-		if (! is_new) {
-			LoadAllTags ();
-		} else {
-			CreateTable ();
-			CreateDefaultTags ();
-		}
-	}
-
-	private uint InsertTagIntoTable (Category parent_category, string name, bool is_category, bool autoicon)
-	{
-
-		uint parent_category_id = parent_category.Id;
-		String default_tag_icon_value = autoicon ? null : String.Empty;
-
-		int id = Database.Execute (new DbCommand ("INSERT INTO tags (name, category_id, is_category, sort_priority, icon)"
-                          + "VALUES (:name, :category_id, :is_category, 0, :icon)",
-						  "name", name,
-						  "category_id", parent_category_id,
-						  "is_category", is_category ? 1 : 0,
-						  "icon", default_tag_icon_value));
-
-
-		return (uint) id;
-	}
-
-	public Tag CreateTag (Category category, string name, bool autoicon)
-	{
-		if (category == null)
-			category = RootCategory;
-
-		uint id = InsertTagIntoTable (category, name, false, autoicon);
-
-		Tag tag = new Tag (category, id, name);
-		tag.IconWasCleared = !autoicon;
-
-		AddToCache (tag);
-		EmitAdded (tag);
-		
-		return tag;
-	}
-
-	public Category CreateCategory (Category parent_category, string name, bool autoicon)
-	{
-		if (parent_category == null)
-			parent_category = RootCategory;
-
-		uint id = InsertTagIntoTable (parent_category, name, true, autoicon);
-
-		Category new_category = new Category (parent_category, id, name);
-		new_category.IconWasCleared = !autoicon;
-
-		AddToCache (new_category);
-		EmitAdded (new_category);
-
-		return new_category;
-	}
-
-	public override Tag Get (uint id)
-	{
-		if (id == 0)
-			return RootCategory;
-		else
-			return LookupInCache (id);
-	}
-	
-	public override void Remove (Tag tag)
-	{
-		Category category = tag as Category;
-		if (category != null && 
-		    category.Children != null && 
-		    category.Children.Count > 0)
-			throw new InvalidTagOperationException (category, "Cannot remove category that contains children");
-
-		RemoveFromCache (tag);
-		
-		tag.Category = null;
-
-		Database.ExecuteNonQuery (new DbCommand ("DELETE FROM tags WHERE id = :id", "id", tag.Id));
-
-		EmitRemoved (tag);
-	}
-
-
-	private string GetIconString (Tag tag)
-	{
-		if (tag.ThemeIconName != null)
-			return STOCK_ICON_DB_PREFIX + tag.ThemeIconName;
-		if (tag.Icon == null) {
-			if (tag.IconWasCleared)
-				return String.Empty;
-			return null;
-		}
-
-		byte [] data = GdkUtils.Serialize (tag.Icon);
-		return Convert.ToBase64String (data);
-	}
-
-	public override void Commit (Tag tag)
-	{
-		Commit (tag, false);	
-	}
-
-	public void Commit (Tag tag, bool update_xmp)
-	{
-		Commit (new Tag[] {tag}, update_xmp);
-	}
-
-	public void Commit (Tag [] tags, bool update_xmp)
-	{
-
-		bool use_transactions = !Database.InTransaction && update_xmp;
-
-		if (use_transactions)
-			Database.BeginTransaction ();
-
-		foreach (Tag tag in tags) {
-			Database.ExecuteNonQuery (new DbCommand ("UPDATE tags SET name = :name, category_id = :category_id, "
-                	    + "is_category = :is_category, sort_priority = :sort_priority, icon = :icon WHERE id = :id",
-							  "name", tag.Name,
-							  "category_id", tag.Category.Id,
-							  "is_category", tag is Category ? 1 : 0,
-							  "sort_priority", tag.SortPriority,
-							  "icon", GetIconString (tag),
-							  "id", tag.Id));
-			
-			if (update_xmp && Preferences.Get<bool> (Preferences.METADATA_EMBED_IN_IMAGE)) {
-				Photo [] photos = App.Instance.Database.Photos.Query (new Tag [] { tag });
-				foreach (Photo p in photos)
-					if (p.HasTag (tag)) // the query returns all the pics of the tag and all its child. this avoids updating child tags
-						SyncMetadataJob.Create (App.Instance.Database.Jobs, p);
-			}
-		}
-
-		if (use_transactions)
-			Database.CommitTransaction ();
-
-		EmitChanged (tags);
-	}
-}
diff --git a/src/Term.cs b/src/Term.cs
deleted file mode 100644
index 7c0174d..0000000
--- a/src/Term.cs
+++ /dev/null
@@ -1,946 +0,0 @@
-/*
- * Term.cs
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Text;
-using Mono.Unix;
-using Gtk;
-using Gdk;
-using Hyena;
-
-namespace FSpot {
-	public abstract class Term {
-		private ArrayList sub_terms = new ArrayList ();
-		private Term parent = null;
-
-		protected bool is_negated = false;
-		protected Tag tag = null;
-
-		public Term (Term parent, Literal after)
-		{
-			this.parent = parent;
-
-			if (parent != null) {
-				if (after == null)
-					parent.Add (this);
-				else
-					parent.SubTerms.Insert (parent.SubTerms.IndexOf (after) + 1, this);
-			}
-		}
-
-		/** Properties **/
-		public bool HasMultiple {
-			get {
-				return (SubTerms.Count > 1);
-			}
-		}
-
-		public ArrayList SubTerms {
-			get {
-				return sub_terms;
-			}
-		}
-
-		public Term Last {
-			get {
-				// Return the last Literal in this term
-				if (SubTerms.Count > 0)
-					return SubTerms[SubTerms.Count - 1] as Term;
-				else
-					return null;
-			}
-		}
-
-		public int Count {
-			get {
-				return SubTerms.Count;
-			}
-		}
-
-		public Term Parent {
-			get { return parent; }
-			set {
-				if (parent == value)
-					return;
-
-				// If our parent was already set, remove ourself from it
-				if (parent != null)
-					parent.Remove(this);
-
-				// Add ourself to our new parent
-				parent = value;
-				parent.Add(this);
-			}
-		}
-
-		public virtual bool IsNegated {
-			get { return is_negated; }
-			set {
-				if (is_negated != value)
-					Invert(false);
-
-				is_negated = value;
-			}
-		}
-
-
-		/** Methods **/
-
-		public void Add (Term term)
-		{
-			SubTerms.Add (term);
-		}
-
-		public void Remove (Term term)
-		{
-			SubTerms.Remove (term);
-
-			// Remove ourselves if we're now empty
-			if (SubTerms.Count == 0)
-				if (Parent != null)
-					Parent.Remove (this);
-		}
-
-		public void CopyAndInvertSubTermsFrom (Term term, bool recurse)
-		{
-			is_negated = true;
-			ArrayList termsToMove = new ArrayList(term.SubTerms);
-			foreach (Term subterm in termsToMove) {
-				if (recurse)
-					subterm.Invert(true).Parent = this;
-				else
-					subterm.Parent = this;
-			}
-		}
-
-		public ArrayList FindByTag (Tag t)
-		{
-			return FindByTag (t, true);
-		}
-
-		public ArrayList FindByTag (Tag t, bool recursive)
-		{
-			ArrayList results = new ArrayList ();
-
-			if (tag != null && tag == t)
-				results.Add (this);
-
-			if (recursive)
-				foreach (Term term in SubTerms)
-				results.AddRange (term.FindByTag (t, true));
-			else
-				foreach (Term term in SubTerms) {
-				foreach (Term literal in SubTerms) {
-					if (literal.tag != null && literal.tag == t) {
-						results.Add (literal);
-					}
-				}
-
-				if (term.tag != null && term.tag == t) {
-					results.Add (term);
-				}
-			}
-
-			return results;
-		}
-
-		public ArrayList LiteralParents ()
-		{
-			ArrayList results = new ArrayList ();
-
-			bool meme = false;
-			foreach (Term term in SubTerms) {
-				if (term is Literal)
-					meme = true;
-
-				results.AddRange (term.LiteralParents ());
-			}
-
-			if (meme)
-				results.Add (this);
-
-			return results;
-		}
-
-		public bool TagIncluded(Tag t)
-		{
-			ArrayList parents = LiteralParents ();
-
-			if (parents.Count == 0)
-				return false;
-
-			foreach (Term term in parents) {
-				bool termHasTag = false;
-				bool onlyTerm = true;
-				foreach (Term literal in term.SubTerms) {
-					if (literal.tag != null) {
-						if (literal.tag == t) {
-							termHasTag = true;
-						} else {
-							onlyTerm = false;
-						}
-					}
-				}
-
-				if (termHasTag && onlyTerm)
-					return true;
-			}
-
-			return false;
-		}
-
-		public bool TagRequired(Tag t)
-		{
-			int count, grouped_with;
-			return TagRequired(t, out count, out grouped_with);
-		}
-
-		public bool TagRequired(Tag t, out int num_terms, out int grouped_with)
-		{
-			ArrayList parents = LiteralParents ();
-
-			num_terms = 0;
-			grouped_with = 100;
-			int min_grouped_with = 100;
-
-			if (parents.Count == 0)
-				return false;
-
-			foreach (Term term in parents) {
-				bool termHasTag = false;
-
-				// Don't count it as required if it's the only subterm..though it is..
-				// it is more clearly identified as Included at that point.
-				if (term.Count > 1) {
-					foreach (Term literal in term.SubTerms) {
-						if (literal.tag != null) {
-							if (literal.tag == t) {
-								num_terms++;
-								termHasTag = true;
-								grouped_with = term.SubTerms.Count;
-								break;
-							}
-						}
-					}
-				}
-
-				if (grouped_with < min_grouped_with)
-					min_grouped_with = grouped_with;
-
-				if (!termHasTag)
-					return false;
-			}
-
-			grouped_with = min_grouped_with;
-
-			return true;
-		}
-
-		public abstract Term Invert(bool recurse);
-
-		// Recursively generate the SQL condition clause that this
-		// term represents.
-		public virtual string SqlCondition ()
-		{
-			StringBuilder condition = new StringBuilder ("(");
-
-			for (int i = 0; i < SubTerms.Count; i++) {
-				Term term = SubTerms[i] as Term;
-				condition.Append (term.SqlCondition ());
-
-				if (i != SubTerms.Count - 1)
-					condition.Append (SQLOperator ());
-			}
-
-			condition.Append(")");
-
-			return condition.ToString ();
-		}
-
-		public virtual Gtk.Widget SeparatorWidget ()
-		{
-			return null;
-		}
-
-		public virtual string SQLOperator ()
-		{
-			return String.Empty;
-		}
-
-		protected static Hashtable op_term_lookup = new Hashtable();
-		public static Term TermFromOperator (string op, Term parent, Literal after)
-		{
-			//Console.WriteLine ("finding type for operator {0}", op);
-			//op = op.Trim ();
-			op = op.ToLower ();
-
-			if (AndTerm.Operators.Contains (op)) {
-				//Console.WriteLine ("AND!");
-				return new AndTerm (parent, after);
-			} else if (OrTerm.Operators.Contains (op)) {
-				//Console.WriteLine ("OR!");
-				return new OrTerm (parent, after);
-			}
-
-			Log.DebugFormat ("Do not have Term for operator {0}", op);
-			return null;
-		}
-	}
-
-	public class AndTerm : Term {
-		static ArrayList operators = new ArrayList ();
-		static AndTerm () {
-			operators.Add (Catalog.GetString (" and "));
-			//operators.Add (Catalog.GetString (" && "));
-			operators.Add (Catalog.GetString (", "));
-		}
-
-		public static ArrayList Operators {
-			get { return operators; }
-		}
-
-		public AndTerm (Term parent, Literal after) : base (parent, after) {}
-
-		public override Term Invert (bool recurse)
-		{
-			OrTerm newme = new OrTerm(Parent, null);
-			newme.CopyAndInvertSubTermsFrom(this, recurse);
-			if (Parent != null)
-				Parent.Remove(this);
-			return newme;
-		}
-
-		public override Widget SeparatorWidget ()
-		{
-			Widget sep = new Label (String.Empty);
-			sep.SetSizeRequest (3, 1);
-			sep.Show ();
-			return sep;
-			//return null;
-		}
-
-		public override string SqlCondition ()
-		{
-			StringBuilder condition = new StringBuilder ("(");
-
-			condition.Append (base.SqlCondition());
-
-			Tag hidden = App.Instance.Database.Tags.Hidden;
-			if (hidden != null) {
-				if (FindByTag (hidden, true).Count == 0) {
-					condition.Append (String.Format (
-								  " AND id NOT IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0})", hidden.Id
-							  ));
-				}
-			}
-
-			condition.Append (")");
-
-			return condition.ToString ();
-		}
-
-		public override string SQLOperator ()
-		{
-			return " AND ";
-		}
-	}
-
-	public class OrTerm : Term {
-		static ArrayList operators = new ArrayList ();
-		static OrTerm () {
-			operators.Add (Catalog.GetString (" or "));
-			//operators.Add (Catalog.GetString (" || "));
-		}
-
-		public static OrTerm FromTags(Tag [] from_tags)
-		{
-			if (from_tags == null || from_tags.Length == 0)
-				return null;
-
-			OrTerm or = new OrTerm(null, null);
-			foreach (Tag t in from_tags) {
-				Literal l = new Literal(t);
-				l.Parent = or;
-			}
-			return or;
-		}
-
-
-		public static ArrayList Operators {
-			get { return operators; }
-		}
-
-		public OrTerm (Term parent, Literal after) : base (parent, after) {}
-
-		private static string OR = Catalog.GetString ("or");
-
-		public override Term Invert (bool recurse)
-		{
-			AndTerm newme = new AndTerm(Parent, null);
-			newme.CopyAndInvertSubTermsFrom(this, recurse);
-			if (Parent != null)
-				Parent.Remove(this);
-			return newme;
-		}
-
-		public override Gtk.Widget SeparatorWidget ()
-		{
-			Widget label = new Label (" " + OR + " ");
-			label.Show ();
-			return label;
-		}
-
-		public override string SQLOperator ()
-		{
-			return " OR ";
-		}
-	}
-
-	public abstract class AbstractLiteral : Term {
-		public AbstractLiteral(Term parent, Literal after) : base (parent, after) {}
-
-		public override Term Invert (bool recurse)
-		{
-			is_negated = !is_negated;
-			return this;
-		}
-	}
-
-	// TODO rename to TagLiteral?
-	public class Literal : AbstractLiteral {
-		public Literal (Tag tag) : this (null, tag, null)
-		{
-		}
-
-		public Literal (Term parent, Tag tag, Literal after) : base (parent, after) {
-			this.tag = tag;
-		}
-
-		/** Properties **/
-
-		public static ArrayList FocusedLiterals
-		{
-			get {
-				return focusedLiterals;
-			}
-			set {
-				focusedLiterals = value;
-			}
-		}
-
-		public Tag Tag {
-			get {
-				return tag;
-			}
-		}
-
-		public override bool IsNegated {
-			get {
-				return is_negated;
-			}
-
-			set {
-				if (is_negated == value)
-					return;
-
-				is_negated = value;
-
-				NormalIcon = null;
-				NegatedIcon = null;
-				Update ();
-
-				if (NegatedToggled != null)
-					NegatedToggled (this);
-			}
-		}
-
-		private Pixbuf NegatedIcon
-		{
-			get {
-				if (negated_icon != null)
-					return negated_icon;
-
-				if (NormalIcon == null)
-					return null;
-
-				negated_icon = NormalIcon.Copy ();
-
-				int offset = ICON_SIZE - overlay_size;
-				NegatedOverlay.Composite (negated_icon, offset, 0, overlay_size, overlay_size, offset, 0, 1.0, 1.0, InterpType.Bilinear, 200);
-
-				return negated_icon;
-			}
-
-			set {
-				negated_icon = null;
-			}
-		}
-
-		public Widget Widget {
-			get {
-				if (widget != null)
-					return widget;
-
-				container = new EventBox ();
-				box = new HBox ();
-
-				handle_box = new LiteralBox ();
-				handle_box.BorderWidth = 1;
-
-				label = new Label (System.Web.HttpUtility.HtmlEncode (tag.Name));
-				label.UseMarkup = true;
-
-				image = new Gtk.Image (NormalIcon);
-
-				container.CanFocus = true;
-
-				container.KeyPressEvent  += KeyHandler;
-				container.ButtonPressEvent += HandleButtonPress;
-				container.ButtonReleaseEvent += HandleButtonRelease;
-				container.EnterNotifyEvent += HandleMouseIn;
-				container.LeaveNotifyEvent += HandleMouseOut;
-
-				//new PopupManager (new LiteralPopup (container, this));
-
-				// Setup this widget as a drag source (so tags can be moved after being placed)
-				container.DragDataGet += HandleDragDataGet;
-				container.DragBegin += HandleDragBegin;
-				container.DragEnd += HandleDragEnd;
-
-				Gtk.Drag.SourceSet (container, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
-						    tag_target_table, DragAction.Copy | DragAction.Move);
-
-				// Setup this widget as a drag destination (so tags can be added to our parent's Term)
-				container.DragDataReceived += HandleDragDataReceived;
-				container.DragMotion += HandleDragMotion;
-				container.DragLeave += HandleDragLeave;
-
-				Gtk.Drag.DestSet (container, DestDefaults.All, tag_dest_target_table,
-						  DragAction.Copy | DragAction.Move );
-
-				container.TooltipText = tag.Name;
-
-				label.Show ();
-				image.Show ();
-
-				if (tag.Icon == null) {
-					handle_box.Add (label);
-				} else {
-					handle_box.Add (image);
-				}
-
-				handle_box.Show ();
-
-				box.Add (handle_box);
-				box.Show ();
-
-				container.Add (box);
-
-				widget = container;
-
-				return widget;
-			}
-		}
-
-		private Pixbuf NormalIcon
-		{
-			get {
-				if (normal_icon != null)
-					return normal_icon;
-
-				Pixbuf scaled = null;
-				scaled = tag.Icon;
-
-				for (Category category = tag.Category; category != null && scaled == null; category = category.Category)
-					scaled = category.Icon;
-
-				if (scaled == null)
-					return null;
-
-				if (scaled.Width != ICON_SIZE) {
-					scaled = scaled.ScaleSimple (ICON_SIZE, ICON_SIZE, InterpType.Bilinear);
-				}
-
-				normal_icon = scaled;
-
-				return normal_icon;
-			}
-
-			set {
-				normal_icon = null;
-			}
-		}
-
-		/** Methods **/
-		public void Update ()
-		{
-			// Clear out the old icons
-			normal_icon = null;
-			negated_icon = null;
-			if (IsNegated) {
-				widget.TooltipText = String.Format (Catalog.GetString ("Not {0}"), tag.Name);
-				label.Text = "<s>" + System.Web.HttpUtility.HtmlEncode (tag.Name) + "</s>";
-				image.Pixbuf = NegatedIcon;
-			} else {
-				widget.TooltipText = tag.Name;
-				label.Text = System.Web.HttpUtility.HtmlEncode (tag.Name);
-				image.Pixbuf = NormalIcon;
-			}
-
-			label.UseMarkup = true;
-
-			// Show the icon unless it's null
-			if (tag.Icon == null && container.Children [0] == image) {
-				container.Remove (image);
-				container.Add (label);
-			} else if (tag.Icon != null && container.Children [0] == label) {
-				container.Remove (label);
-				container.Add (image);
-			}
-
-
-			if (isHoveredOver && image.Pixbuf != null ) {
-				// Brighten the image slightly
-				Pixbuf brightened = image.Pixbuf.Copy ();
-				image.Pixbuf.SaturateAndPixelate (brightened, 1.85f, false);
-				//Pixbuf brightened = PixbufUtils.Glow (image.Pixbuf, .6f);
-
-				image.Pixbuf = brightened;
-			}
-		}
-
-		public void RemoveSelf ()
-		{
-			if (Removing != null)
-				Removing (this);
-
-			if (Parent != null)
-				Parent.Remove (this);
-
-			if (Removed != null)
-				Removed (this);
-		}
-
-		public override string SqlCondition ()
-		{
-			StringBuilder ids = new StringBuilder (tag.Id.ToString ());
-
-			if (tag is Category) {
-				List<Tag> tags = new List<Tag> ();
-				(tag as Category).AddDescendentsTo (tags);
-
-				for (int i = 0; i < tags.Count; i++)
-					ids.Append (", " + (tags [i] as Tag).Id.ToString ());
-			}
-
-			return String.Format (
-				       "id {0}IN (SELECT photo_id FROM photo_tags WHERE tag_id IN ({1}))",
-				       (IsNegated ? "NOT " : String.Empty), ids.ToString ());
-		}
-
-		public override Gtk.Widget SeparatorWidget ()
-		{
-			return new Label ("ERR");
-		}
-
-		private static Pixbuf NegatedOverlay
-		{
-			get {
-				if (negated_overlay == null) {
-					System.Reflection.Assembly assembly = System.Reflection.Assembly.GetCallingAssembly ();
-					negated_overlay = new Pixbuf (assembly.GetManifestResourceStream ("f-spot-not.png"));
-					negated_overlay = negated_overlay.ScaleSimple (overlay_size, overlay_size, InterpType.Bilinear);
-				}
-
-				return negated_overlay;
-			}
-		}
-
-		public static void RemoveFocusedLiterals ()
-		{
-			if (focusedLiterals != null)
-				foreach (Literal literal in focusedLiterals)
-				literal.RemoveSelf ();
-		}
-
-		/** Handlers **/
-
-		private void KeyHandler (object o, KeyPressEventArgs args)
-		{
-			args.RetVal = false;
-
-			switch (args.Event.Key) {
-			case Gdk.Key.Delete:
-				RemoveFocusedLiterals ();
-				args.RetVal = true;
-				return;
-			}
-		}
-
-		private void HandleButtonPress (object o, ButtonPressEventArgs args)
-		{
-			args.RetVal = true;
-
-			switch (args.Event.Type) {
-			case EventType.TwoButtonPress:
-				if (args.Event.Button == 1)
-					IsNegated = !IsNegated;
-				else
-					args.RetVal = false;
-				return;
-
-			case EventType.ButtonPress:
-				Widget.GrabFocus ();
-
-				if (args.Event.Button == 1) {
-					// TODO allow multiple selection of literals so they can be deleted, modified all at once
-					//if ((args.Event.State & ModifierType.ControlMask) != 0) {
-					//}
-
-				}
-				else if (args.Event.Button == 3)
-				{
-					LiteralPopup popup = new LiteralPopup ();
-					popup.Activate (args.Event, this);
-				}
-
-				return;
-
-			default:
-				args.RetVal = false;
-				return;
-			}
-		}
-
-		private void HandleButtonRelease (object o, ButtonReleaseEventArgs args)
-		{
-			args.RetVal = true;
-
-			switch (args.Event.Type) {
-			case EventType.TwoButtonPress:
-				args.RetVal = false;
-				return;
-
-			case EventType.ButtonPress:
-				if (args.Event.Button == 1) {
-				}
-				return;
-
-			default:
-				args.RetVal = false;
-				return;
-			}
-		}
-
-		private void HandleMouseIn (object o, EnterNotifyEventArgs args)
-		{
-			isHoveredOver = true;
-			Update ();
-		}
-
-		private void HandleMouseOut (object o, LeaveNotifyEventArgs args)
-		{
-			isHoveredOver = false;
-			Update ();
-		}
-
-		void HandleDragDataGet (object sender, DragDataGetArgs args)
-		{
-			args.RetVal = true;
-			
-			if (args.Info == DragDropTargets.TagListEntry.Info || args.Info == DragDropTargets.TagQueryEntry.Info) {
-				
-				// FIXME: do really write data
-				Byte [] data = Encoding.UTF8.GetBytes (String.Empty);
-				Atom [] targets = args.Context.Targets;
-
-				args.SelectionData.Set (targets[0], 8, data, data.Length);
-
-				return;
-			}
-			
-			// Drop cancelled
-			args.RetVal = false;
-
-			foreach (Widget w in hiddenWidgets)
-				w.Visible = true;
-
-			focusedLiterals = null;
-		}
-
-		void HandleDragBegin (object sender, DragBeginArgs args)
-		{
-			Gtk.Drag.SetIconPixbuf (args.Context, image.Pixbuf, 0, 0);
-
-			focusedLiterals.Add (this);
-
-			// Hide the tag and any separators that only exist because of it
-			container.Visible = false;
-			hiddenWidgets.Add (container);
-			foreach (Widget w in LogicWidget.Box.HangersOn (this)) {
-				hiddenWidgets.Add (w);
-				w.Visible = false;
-			}
-		}
-
-		void HandleDragEnd (object sender, DragEndArgs args)
-		{
-			// Remove any literals still marked as focused, because
-			// the user is throwing them away.
-			RemoveFocusedLiterals ();
-
-			focusedLiterals = new ArrayList();
-			args.RetVal = true;
-		}
-
-		private void HandleDragDataReceived (object o, DragDataReceivedArgs args)
-		{
-			args.RetVal = true;
-			
-			if (args.Info == DragDropTargets.TagListEntry.Info) {
-
-				if (TagsAdded != null)
-					TagsAdded (args.SelectionData.GetTagsData (), Parent, this);
-				
-				return;
-			}
-			
-			if (args.Info == DragDropTargets.TagQueryEntry.Info) {
-
-				if (! focusedLiterals.Contains(this))
-					if (LiteralsMoved != null)
-						LiteralsMoved (focusedLiterals, Parent, this);
-
-				// Unmark the literals as focused so they don't get nixed
-				focusedLiterals = null;
-			}
-		}
-
-		private bool preview = false;
-		private Gtk.Widget preview_widget;
-		private void HandleDragMotion (object o, DragMotionArgs args)
-		{
-			if (!preview) {
-				if (preview_widget == null) {
-					preview_widget = new Gtk.Label (" | ");
-					box.Add (preview_widget);
-				}
-
-				preview_widget.Show ();
-			}
-		}
-
-		private void HandleDragLeave (object o, EventArgs args)
-		{
-			preview = false;
-			preview_widget.Hide ();
-		}
-
-		public void HandleToggleNegatedCommand (object o, EventArgs args)
-		{
-			IsNegated = !IsNegated;
-		}
-
-		public void HandleRemoveCommand (object o, EventArgs args)
-		{
-			RemoveSelf ();
-		}
-
-		public void HandleAttachTagCommand (Tag t)
-		{
-			if (AttachTag != null)
-				AttachTag (t, Parent, this);
-		}
-
-		public void HandleRequireTag (object sender, EventArgs args)
-		{
-			if (RequireTag != null)
-				RequireTag (new Tag [] {this.Tag});
-		}
-
-		public void HandleUnRequireTag (object sender, EventArgs args)
-		{
-			if (UnRequireTag != null)
-				UnRequireTag (new Tag [] {this.Tag});
-		}
-
-		private const int ICON_SIZE = 24;
-
-		private const int overlay_size = (int) (.40 * ICON_SIZE);
-
-		private static TargetEntry [] tag_target_table =
-			new TargetEntry [] { DragDropTargets.TagQueryEntry };
-
-		private static TargetEntry [] tag_dest_target_table =
-			new TargetEntry [] {
-				DragDropTargets.TagListEntry,
-				DragDropTargets.TagQueryEntry
-			};
-
-		private static ArrayList focusedLiterals = new ArrayList();
-		private static ArrayList hiddenWidgets = new ArrayList();
-		private Gtk.Container container;
-		private LiteralBox handle_box;
-		private Gtk.Box box;
-		private Gtk.Image image;
-		private Gtk.Label label;
-
-		private Pixbuf normal_icon;
-		//private EventBox widget;
-		private Widget widget;
-		private Pixbuf negated_icon;
-		private static Pixbuf negated_overlay;
-		private bool isHoveredOver = false;
-
-		public delegate void NegatedToggleHandler (Literal group);
-		public event NegatedToggleHandler NegatedToggled;
-
-		public delegate void RemovingHandler (Literal group);
-		public event RemovingHandler Removing;
-
-		public delegate void RemovedHandler (Literal group);
-		public event RemovedHandler Removed;
-
-		public delegate void TagsAddedHandler (Tag[] tags, Term parent, Literal after);
-		public event TagsAddedHandler TagsAdded;
-
-		public delegate void AttachTagHandler (Tag tag, Term parent, Literal after);
-		public event AttachTagHandler AttachTag;
-
-		public delegate void TagRequiredHandler (Tag [] tags);
-		public event TagRequiredHandler RequireTag;
-
-		public delegate void TagUnRequiredHandler (Tag [] tags);
-		public event TagUnRequiredHandler UnRequireTag;
-
-		public delegate void LiteralsMovedHandler (ArrayList literals, Term parent, Literal after);
-		public event LiteralsMovedHandler LiteralsMoved;
-	}
-
-	public class TextLiteral : AbstractLiteral {
-		private string text;
-
-		public TextLiteral (Term parent, string text) : base (parent, null)
-		{
-			this.text = text;
-		}
-
-		public override string SqlCondition ()
-		{
-			return String.Format (
-				       "id {0}IN (SELECT id FROM photos WHERE base_uri LIKE '%{1}%' OR filename LIKE '%{1}%' OR description LIKE '%{1}%')",
-				       (IsNegated ? "NOT " : ""), EscapeQuotes(text)
-			       );
-		}
-
-		protected static string EscapeQuotes (string v)
-		{
-			return v == null ? String.Empty : v.Replace("'", "''");
-		}
-	}
-}
diff --git a/src/Tests/ImageFileTests.cs b/src/Tests/ImageFileTests.cs
deleted file mode 100644
index cbc6fd8..0000000
--- a/src/Tests/ImageFileTests.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-#if ENABLE_TESTS
-using NUnit.Framework;
-using System;
-using Hyena;
-using Banshee.Database;
-using FSpot.Imaging;
-
-namespace FSpot.Tests
-{
-    [TestFixture]
-    public class ImageFileTests
-    {
-        [SetUp]
-        public void Initialize () {
-            GLib.GType.Init ();
-        }
-
-        [Test]
-        public void CheckLoadableTypes ()
-        {
-            bool missing = false;
-
-            // Test that we have loaders defined for all Taglib# parseable types.
-            foreach (var key in TagLib.FileTypes.AvailableTypes.Keys) {
-                Type type = TagLib.FileTypes.AvailableTypes [key];
-                if (!type.IsSubclassOf (typeof (TagLib.Image.File))) {
-                    continue;
-                }
-
-                var test_key = key;
-                if (key.StartsWith ("taglib/")) {
-                    test_key = "." + key.Substring (7);
-                }
-
-                if (!ImageFile.NameTable.ContainsKey (test_key)) {
-                    Log.InformationFormat ("Missing key for {0}", test_key);
-                    missing = true;
-                }
-            }
-
-            Assert.IsFalse (missing, "No missing loaders for Taglib# parseable files.");
-        }
-    }
-}
-#endif
diff --git a/src/Tests/UpdaterTests.cs b/src/Tests/UpdaterTests.cs
deleted file mode 100644
index a5529b7..0000000
--- a/src/Tests/UpdaterTests.cs
+++ /dev/null
@@ -1,260 +0,0 @@
-#if ENABLE_TESTS
-using NUnit.Framework;
-using System;
-using Hyena;
-using FSpot;
-using FSpot.Database;
-using Banshee.Database;
-
-namespace FSpot.Tests
-{
-    [TestFixture]
-    public class UpdaterTests
-    {
-        static bool initialized = false;
-        static void Initialize () {
-            GLib.GType.Init ();
-            Updater.silent = true;
-            initialized = true;
-        }
-
-        [Test]
-        public void Test_0_6_1_5 ()
-        {
-            TestUpdate ("0.6.1.5", "17.0");
-        }
-
-        [Test]
-        public void Test_0_6_2 ()
-        {
-            TestUpdate ("0.6.2", "17.1");
-        }
-
-        [Test]
-        public void Test_0_7_0_17_2 ()
-        {
-            TestUpdate ("0.7.0-17.2", "17.2");
-        }
-
-        [Test]
-        public void Test_0_7_0_18_0 ()
-        {
-            TestUpdate ("0.7.0-18.0", "18");
-        }
-
-        private void TestUpdate (string version, string revision)
-        {
-            if (!initialized)
-                Initialize ();
-
-            var uri = new SafeUri (Environment.CurrentDirectory + "/../tests/data/f-spot-"+version+".db");
-            var file = GLib.FileFactory.NewForUri (uri);
-            Assert.IsTrue (file.Exists, String.Format ("Test database for version {0} not found", version));
-
-            var tmp = System.IO.Path.GetTempFileName ();
-            var uri2 = new SafeUri (tmp);
-            var file2 = GLib.FileFactory.NewForUri (uri2);
-            file.Copy (file2, GLib.FileCopyFlags.Overwrite, null, null);
-
-            var db = new QueuedSqliteDatabase (uri2.AbsolutePath);
-            ValidateRevision (db, revision);
-
-            Updater.Run (db);
-            ValidateRevision (db, Updater.LatestVersion.ToString ());
-
-            ValidateTableStructure (db);
-
-            CheckPhotosTable (db);
-            CheckPhotoVersionsTable (db);
-            CheckTagsTable (db);
-
-            file2.Delete ();
-        }
-
-        private void ValidateRevision (QueuedSqliteDatabase db, string revision)
-        {
-            var query = "SELECT data FROM meta WHERE name = 'F-Spot Database Version'";
-            var found = db.QuerySingle (query).ToString ();
-            Assert.AreEqual (revision, found);
-        }
-
-        private void ValidateTableStructure (QueuedSqliteDatabase db)
-        {
-            CheckTableExistance (db, "exports");
-            CheckTableExistance (db, "jobs");
-            CheckTableExistance (db, "meta");
-            CheckTableExistance (db, "photo_tags");
-            CheckTableExistance (db, "photo_versions");
-            CheckTableExistance (db, "photos");
-            CheckTableExistance (db, "rolls");
-            CheckTableExistance (db, "tags");
-        }
-
-        private void CheckTableExistance (QueuedSqliteDatabase db, string name)
-        {
-            Assert.IsTrue (db.TableExists (name), String.Format ("Expected table {0} does not exist.", name));
-        }
-
-        private void CheckPhotosTable (QueuedSqliteDatabase db)
-        {
-            CheckPhoto (db, 1, 1249579156, "file:///tmp/database/", "sample.jpg", "Testing!", 1, 2, 5);
-            CheckPhoto (db, 2, 1276191607, "file:///tmp/database/", "sample_canon_bibble5.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 3, 1249834364, "file:///tmp/database/", "sample_canon_zoombrowser.jpg", "%test comment%", 1, 1, 0);
-            CheckPhoto (db, 4, 1276191607, "file:///tmp/database/", "sample_gimp_exiftool.jpg", "", 1, 1, 5);
-            CheckPhoto (db, 5, 1242995279, "file:///tmp/database/", "sample_nikon1.jpg", "", 1, 1, 1);
-            CheckPhoto (db, 6, 1276191607, "file:///tmp/database/", "sample_nikon1_bibble5.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 7, 1167646774, "file:///tmp/database/", "sample_nikon2.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 8, 1276191607, "file:///tmp/database/", "sample_nikon2_bibble5.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 9, 1256140553, "file:///tmp/database/", "sample_nikon3.jpg", "                                    ", 1, 1, 0);
-            CheckPhoto (db, 10, 1238587697, "file:///tmp/database/", "sample_nikon4.jpg", "                                    ", 1, 1, 0);
-            CheckPhoto (db, 11, 1276191607, "file:///tmp/database/", "sample_no_metadata.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 12, 1265446642, "file:///tmp/database/", "sample_null_orientation.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 13, 1161575860, "file:///tmp/database/", "sample_olympus1.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 14, 1236006332, "file:///tmp/database/", "sample_olympus2.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 15, 1246010310, "file:///tmp/database/", "sample_panasonic.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 16, 1258799979, "file:///tmp/database/", "sample_sony1.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 17, 1257533767, "file:///tmp/database/", "sample_sony2.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 18, 1026565108, "file:///tmp/database/", "sample_xap.jpg", "", 1, 1, 4);
-            CheckPhoto (db, 19, 1093249257, "file:///tmp/database/", "sample_xmpcrash.jpg", "", 1, 1, 0);
-            CheckPhoto (db, 20, 1276191607, "file:///tmp/database/test/", "sample_tangled1.jpg", "test comment", 1, 1, 0);
-            CheckCount (db, "photos", 20);
-        }
-
-        private void CheckPhotoVersionsTable (QueuedSqliteDatabase db)
-        {
-            CheckPhotoVersion (db, 1, 1, "Original", "file:///tmp/database/", "sample.jpg", "", 1);
-            CheckPhotoVersion (db, 2, 1, "Original", "file:///tmp/database/", "sample_canon_bibble5.jpg", "", 1);
-            CheckPhotoVersion (db, 3, 1, "Original", "file:///tmp/database/", "sample_canon_zoombrowser.jpg", "", 1);
-            CheckPhotoVersion (db, 4, 1, "Original", "file:///tmp/database/", "sample_gimp_exiftool.jpg", "", 1);
-            CheckPhotoVersion (db, 5, 1, "Original", "file:///tmp/database/", "sample_nikon1.jpg", "", 1);
-            CheckPhotoVersion (db, 6, 1, "Original", "file:///tmp/database/", "sample_nikon1_bibble5.jpg", "", 1);
-            CheckPhotoVersion (db, 7, 1, "Original", "file:///tmp/database/", "sample_nikon2.jpg", "", 1);
-            CheckPhotoVersion (db, 8, 1, "Original", "file:///tmp/database/", "sample_nikon2_bibble5.jpg", "", 1);
-            CheckPhotoVersion (db, 9, 1, "Original", "file:///tmp/database/", "sample_nikon3.jpg", "", 1);
-            CheckPhotoVersion (db, 10, 1, "Original", "file:///tmp/database/", "sample_nikon4.jpg", "", 1);
-            CheckPhotoVersion (db, 1, 2, "Modified", "file:///tmp/database/", "sample%20(Modified).jpg", "", 0);
-            CheckPhotoVersion (db, 11, 1, "Original", "file:///tmp/database/", "sample_no_metadata.jpg", "", 1);
-            CheckPhotoVersion (db, 12, 1, "Original", "file:///tmp/database/", "sample_null_orientation.jpg", "", 1);
-            CheckPhotoVersion (db, 13, 1, "Original", "file:///tmp/database/", "sample_olympus1.jpg", "", 1);
-            CheckPhotoVersion (db, 14, 1, "Original", "file:///tmp/database/", "sample_olympus2.jpg", "", 1);
-            CheckPhotoVersion (db, 15, 1, "Original", "file:///tmp/database/", "sample_panasonic.jpg", "", 1);
-            CheckPhotoVersion (db, 16, 1, "Original", "file:///tmp/database/", "sample_sony1.jpg", "", 1);
-            CheckPhotoVersion (db, 17, 1, "Original", "file:///tmp/database/", "sample_sony2.jpg", "", 1);
-            CheckPhotoVersion (db, 18, 1, "Original", "file:///tmp/database/", "sample_xap.jpg", "", 1);
-            CheckPhotoVersion (db, 19, 1, "Original", "file:///tmp/database/", "sample_xmpcrash.jpg", "", 1);
-            CheckPhotoVersion (db, 20, 1, "Original", "file:///tmp/database/test/", "sample_tangled1.jpg", "", 1);
-            CheckCount (db, "photo_versions", 21);
-            CheckOriginalVersionCount (db);
-        }
-
-        private void CheckTagsTable (QueuedSqliteDatabase db)
-        {
-            CheckTag (db, 1, "Favorites", 0, 1, -10, "stock_icon:emblem-favorite");
-            CheckTag (db, 2, "Hidden", 0, 0, -9, "stock_icon:emblem-readonly");
-            CheckTag (db, 3, "People", 0, 1, -8, "stock_icon:emblem-people");
-            CheckTag (db, 4, "Places", 0, 1, -8, "stock_icon:emblem-places");
-            CheckTag (db, 5, "Events", 0, 1, -7, "stock_icon:emblem-event");
-            CheckTag (db, 6, "Imported Tags", 0, 1, 0, "stock_icon:gtk-new");
-            CheckTag (db, 7, "keyword1", 6, 1, 0, "");
-            CheckTag (db, 8, "keyword2", 6, 1, 0, "");
-            CheckTag (db, 9, "keyword3", 6, 1, 0, "");
-            CheckTag (db, 10, "keyword 1", 6, 1, 0, "");
-            CheckTag (db, 11, "keyword 2", 6, 1, 0, "");
-            CheckTag (db, 12, "Kirche Sulzbach", 6, 1, 0, "");
-            CheckTag (db, 13, "Nikon D70s", 6, 1, 0, "");
-            CheckTag (db, 14, "Food", 6, 1, 0, "");
-            CheckTag (db, 15, "2007", 6, 1, 0, "");
-            CheckTag (db, 16, "2006", 6, 1, 0, "");
-            CheckTag (db, 17, "Neujahr", 6, 1, 0, tag_icon_emblem);
-            CheckTag (db, 18, "Sylvester", 6, 1, 0, "");
-            CheckTag (db, 19, "Olympus µ 700", 6, 1, 0, "");
-            CheckTag (db, 20, "Rom 2006-10", 6, 1, 0, "");
-            CheckTag (db, 21, "Architecture", 5, 1, 0, tag_icon_img);
-            CheckTag (db, 22, "Flughafen", 6, 1, 0, "");
-            CheckTag (db, 23, "Basel", 6, 1, 0, "");
-            CheckTag (db, 24, "FreeFoto.com", 6, 1, 0, "");
-            CheckTag (db, 25, "City", 6, 1, 0, "stock_icon:emblem-places");
-            CheckTag (db, 26, " ", 25, 1, 0, "");
-            CheckTag (db, 27, "State", 6, 1, 0, "stock_icon:emblem-places");
-            CheckTag (db, 28, "Country", 6, 1, 0, "stock_icon:emblem-places");
-            CheckTag (db, 29, "Ubited Kingdom", 28, 1, 0, "");
-            CheckTag (db, 30, "Communications", 6, 1, 0, "");
-            CheckTag (db, 31, "Türkei 2004", 6, 1, 0, "");
-            CheckCount (db, "tags", 31);
-        }
-
-        private void CheckPhoto (QueuedSqliteDatabase db, uint id, uint time, string base_uri, string filename, string description, uint roll_id, uint default_version_id, uint rating)
-        {
-            var reader = db.Query ("SELECT id, time, base_uri, filename, description, roll_id, default_version_id, rating FROM photos WHERE id = " + id);
-            var found = false;
-            while (reader.Read ()) {
-                Assert.AreEqual (id, Convert.ToUInt32 (reader[0]), "id on photo "+id);
-                Assert.AreEqual (time, Convert.ToUInt32 (reader[1]), "time on photo "+id);
-                Assert.AreEqual (base_uri, reader[2], "base_uri on photo "+id);
-                Assert.AreEqual (filename, reader[3], "filename on photo "+id);
-                Assert.AreEqual (description, reader[4], "description on photo "+id);
-                Assert.AreEqual (roll_id, Convert.ToUInt32 (reader[5]), "roll_id on photo "+id);
-                Assert.AreEqual (default_version_id, Convert.ToUInt32 (reader[6]), "default_version_id on photo "+id);
-                Assert.AreEqual (rating, Convert.ToUInt32 (reader[7]), "rating on photo "+id);
-                found = true;
-            }
-            Assert.IsTrue (found, "photo "+id+" missing");
-        }
-
-        private void CheckPhotoVersion (QueuedSqliteDatabase db, uint photo_id, uint version_id, string name, string base_uri, string filename, string import_md5, uint is_protected)
-        {
-            var reader = db.Query ("SELECT photo_id, version_id, name, base_uri, filename, import_md5, protected FROM photo_versions WHERE photo_id = " + photo_id + " AND version_id = " + version_id);
-            var found = false;
-            while (reader.Read ()) {
-                Assert.AreEqual (photo_id, Convert.ToUInt32 (reader[0]), "photo_id on photo version "+photo_id+"/"+version_id);
-                Assert.AreEqual (version_id, Convert.ToUInt32 (reader[1]), "version_id on photo version "+photo_id+"/"+version_id);
-                Assert.AreEqual (name, reader[2], "name on photo version "+photo_id+"/"+version_id);
-                Assert.AreEqual (base_uri, reader[3], "base_uri on photo version "+photo_id+"/"+version_id);
-                Assert.AreEqual (filename, reader[4], "filename on photo version "+photo_id+"/"+version_id);
-                Assert.AreEqual (import_md5, reader[5], "import_md5 on photo version "+photo_id+"/"+version_id);
-                Assert.AreEqual (is_protected, Convert.ToUInt32 (reader[6]), "protected on photo version "+photo_id+"/"+version_id);
-                found = true;
-            }
-            Assert.IsTrue (found, "photo version "+photo_id+"/"+version_id+" missing");
-        }
-
-        private void CheckOriginalVersionCount (QueuedSqliteDatabase db)
-        {
-            var photo_count = GetCount (db, "photos", "1");
-            var orig_version_count = GetCount (db, "photo_versions", "version_id = 1");
-            Assert.AreEqual (photo_count, orig_version_count, "Expecting an original version for each photo");
-        }
-
-        private void CheckTag (QueuedSqliteDatabase db, uint id, string name, uint cat_id, int is_cat, int sort, string icon)
-        {
-            var reader = db.Query ("SELECT id, name, category_id, is_category, sort_priority, icon FROM tags WHERE id = " + id);
-            var found = false;
-            while (reader.Read ()) {
-                Assert.AreEqual (id, Convert.ToUInt32 (reader[0]), "id on tag "+id);
-                Assert.AreEqual (name, reader[1], "name on tag "+id);
-                Assert.AreEqual (cat_id, Convert.ToUInt32 (reader[2]), "category_id on tag "+id);
-                Assert.AreEqual (is_cat, Convert.ToInt32 (reader[3]), "is_cat on tag "+id);
-                Assert.AreEqual (sort, reader[4], "sort_priority on tag "+id);
-                Assert.AreEqual (icon, reader[5], "icon on tag "+id);
-                found = true;
-            }
-            Assert.IsTrue (found, "tag "+id+" missing");
-        }
-
-        private int GetCount (QueuedSqliteDatabase db, string table, string where)
-        {
-            return Int32.Parse (db.QuerySingle ("SELECT COUNT(*) FROM "+table+" WHERE "+where).ToString ());
-        }
-
-        private void CheckCount (QueuedSqliteDatabase db, string table, int count)
-        {
-            var counted = GetCount (db, table, "1");
-            Assert.AreEqual (count, counted, "Count on "+table);
-        }
-
-        private const string tag_icon_img = "R2RrUAAAJBgBAQACAAAAwAAAADAAAAAw////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBRlAATTZoFYE+dCKFRnQfBUZ4H3E+dBvFOmwb8UJwG71GeB9pRnge/UJ4InU+ZBlpVmQAP////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBJkgAOTZsHblCfBsxPnAf4c7cx9KHVb/+14Yr/x+mk/9fxv//i9s//1vC8/8Xpov+z4Ij/ndRp/2uxJ/NPmwf5UJ0Gxk6bBWZNmQAK////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AVaoABk6bB3NQnQbxeb04967egP/b88P/3vTH/73qkP+u5Xj/oeFj/5TdTv+L2j7/l95S/6TiaP+x5n3/wuuZ/+T20v/X8r7/qtx6/3G3L/ZPnAbuUJsFZlWqAAP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBNmgZTUJ0H6m+1LvbA6Jr/1PG4/6vkc/+H2Df/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3TSF/+M2kD/seZ9/9vzw/+45I7/Z7Ai9E+cB+FPmgdH////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AgIAAAk+eBY5apBT1sOCC/9Txt/+f4GD/dNIY/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3fTHf+q5HH/2fO//6fbdf9VoAz2UJwIfP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBVlQAMUZwHumuyJ/XJ7af/quRy/3fTHf9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/fNUm/7joif/E6p//Yaoa9VCcCKpVqgAG////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AE6dAA1QnAfZfsA/+Mzuqv+U3U7/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv+i4WT/zO6q/3K4LvdQnQbJVaoABv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AgIAAAk+dB7uAwUH4x+2i/4fYN/9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/4PXMP+t5Xf/x+2i/9byu//l99P/3vTH/87vrf+76Y//ld1P/3XTGf9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/j9tF/8vuqf9zuDH3UJwIpf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AT5wGi2yyKfTH7aL/hdg0/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv+h4WL/4/bQ//////////////////////////////////////////////////X87v/C65n/ftYo/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/47bQ//G7KH/YKgb9lGcCXH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBNmgZTXKQW9cDplv+R3Ej/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/jdpB/+D1zP//////////////////////////////////////////////////////////////////////9/zx/7PmgP900hf/c9IW/3PSFv9z0hb/c9IW/3PSFv+c31r/uuaO/1ahDfZOmAQ+////AP///wD///8A////AP///wD///8A////AP///wD///8A////AEmSAAdQnQfqqd52/5/gYP9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv+i4WT/+v32///////////////////////////////////////////////////////////////////////////////////////T8bX/etQh/3PSFv9z0hb/c9IW/3PSFv9z0hb/q+Rz/5vVYv9PnQfbAP8AAf///wD///8A////AP///wD///8A////AP///wD///8A////AE6ZB3VytzH0uumM/3XTGv9z0hb/c9IW/3PSFv9z0hb/c9IW/67leP/+//7/////////////////////////////////////////////////////////////////////////////////////////////////5PbR/3rUIf9z0hb/c9IW/3PSFv9z0hb/etQh/8Drlv9irBzzTpoGW////wD///8A////AP///wD///8A////AP///wD///8AVZkAD1GcCPKu4X3/j9tF/3PSFv9z0hb/c9IW/3PSFv9z0hb/md5V//3+/P////////////////////////////////////////////X58P/u9ej/7vXo//r8+P///////////////////////////////////////////9Pxtv900hf/c9IW/3PSFv9z0hb/c9IW/5rfV/+i22v/UJ0H6VWqAAb///8A////AP///wD///8A////AP///wD///8ATpsHc3m8Ofaw5nv/dNIX/3PSFv9z0hb/c9IW/3PSFv+A1iz/9vzv////////////////////////////////////////////9fnw/1WeD/9UnQ7/UpwN/3qzRP////////////////////////////////////////////////+054P/c9IW/3PSFv9z0hb/c9IW/3bTG/+56Ir/arIk806aBlv///8A////AP///wD///8A////AP///wD///8AUJ4Hz57XZ/+P20X/c9IW/3PSFv9z0hb/c9IW/3PSFv/G7aH/////////////////////////////////////////////////7vXo/1SdDv9Omgb/TpoG/2mpLP/////////////////////////////////////////////////4/fP/f9Yq/3PSFv9z0hb/c9IW/3PSFv+Z3lb/ktFU/1GdB7f///8A////AP///wD///8A////AP///wBNmQAUUp4L+bXmhf941B7/c9IW/3PSFv9z0hb/c9IW/4jZOv/9/vv//////////////////////+jy3//l8Nv/////////////////7vXo/1SdDv9Omgb/TpoG/2mpLP//////////////////////1ujF//b68v//////////////////////xOyc/3PSFv9z0hb/c9IW/3PSFv+B1y7/sOR+/1CbB/ZVqgAG////AP///wD///8A////AP///wBOmQVfcbUw9qbiav9z0hb/c9IW/3PSFv9z0hb/c9IW/73qkf//////////////////////+/35/1+jHf9TnQ7/kMBk/+/26f//////7vXo/1SdDv9Omgb/TpoG/2mpLP///////////9npyf9wrTb/UZwK/4+/Yv//////////////////////9/zx/3bTG/9z0hb/c9IW/3PSFv9z0hb/suZ+/2avH/FPmgdH////AP///wD///8A////AP///wBQngetj85R/5DbRv9z0hb/c9IW/3PSFv9z0hb/c9IW/+r43P//////////////////////sdKR/1efEf9Omgb/UpwM/1WfEP+ly4D/5/Le/1SdDv9Omgb/TpoG/2mpLP/n8d3/g7hQ/1WdD/9Pmgf/TpoG/1OdDv/l8Nr//////////////////////5jeVP9z0hb/c9IW/3PSFv9z0hb/nN9a/4THQ/5OmwWP////AP///wD///8A////AP///wBRngbNmdZf/4bYNf9z0hb/c9IW/3PSFv9z0hb/htg1////////////////////////////fbVI/1WeDv9Omgb/TpoG/06aBv9VnhD/Vp8S/1SdDv9Omgb/TpoG/1OdDv9VnhD/UZsK/06aBv9Omgb/TpoG/1SdDv+82aH//////////////////////7/rlf9z0hb/c9IW/3PSFv9z0hb/kdxH/47PT/9Rnwe0////AP///wD///8A////AP///wBQnQfjodxo/3/WKf9z0hb/c9IW/3PSFv9z0hb/l95S////////////////////////////+fz3/6/Rjv9YoBP/VZ0P/06aBv9Omgb/TpoG/0+bCP9Omgb/TpoG/1CbCP9Omgb/TpoG/06aBv9XnxP/aKgq/8ziuP///////////////////////////9LxtP9z0hb/c9IW/3PSFv9z0hb/idk7/5fWWv9RnwfR////AP///wD///8A////AP///wBPnAf1qOFw/3jUHv9z0hb/c9IW/3PSFv9z0hb/peJp///////////////////////////////////////3+vP/p8yC/1efEv9UnQ7/TpoG/06aBv9Omgb/TpoG/06aBv9Omgb/V58S/2ClIP/D3ar//v/+/////////////////////////////////+H1zv9z0hb/c9IW/3PSFv9z0hb/gtcv/5/cY/9QnQfo////AP///wD///8A////AFWqAANPmgf+rOR1/3PSFv9z0hb/c9IW/3PSFv9z0hb/rOR1/////////////////////////////////////////////f78/7DSkP9Pmgf/UJsI/06aBv9Omgb/TpoG/06aBv9UnhD/Vp8S/9LlwP///////////////////////////////////////////+n42v9z0hb/c9IW/3PSFv9z0hb/fNUl/6Tgaf9Pmwf4////AP///wD///8A////AP///wBOmwb4puFt/3bTG/9z0hb/c9IW/3PSFv9z0hb/n+Bg///////////////////////////////////////G36//YqUi/1afEf9Omgb/TpoG/06aBv9Omgb/TpoG/06aBv9Omgb/T5sH/1aeEf95s0P/3uzR/////////////////////////////////9v0xP9z0hb/c9IW/3PSFv9z0hb/gNYr/53cYP9QnQbs////AP///wD///8A////AP///wBRngfnnNtg/3zVJf9z0hb/c9IW/3PSFv9z0hb/ktxJ////////////////////////////1ujF/2qqLf9XnxL/TpoG/06aBv9Omgb/U50N/1efE/9Omgb/TpoG/1aeEf9Omgf/TpoG/06aBv9Pmwj/VZ4P/4W5U//u9ef//////////////////////8zvqv9z0hb/c9IW/3PSFv9z0hb/hdg0/5PVU/9RngfW////AP///wD///8A////AP///wBRnwfRktRS/4HWLf9z0hb/c9IW/3PSFv9z0hb/fNUl//z++v//////////////////////e7RF/06aBv9Omgb/TpoG/1CbCf9VnQ//irxa/1SdDv9Omgb/TpoG/1+kHf9zrzn/Vp8S/06aBv9Omgb/TpoG/1KdDP+52J3//////////////////////7PmgP9z0hb/c9IW/3PSFv9z0hb/itk8/4nORv9QnQe7////AP///wD///8A////AP///wBRnge2iM1F/4fYN/9z0hb/c9IW/3PSFv9z0hb/c9IW/9nzwP//////////////////////1ujF/1aeEf9Omgb/VZ4Q/362Sv/l8Nv/7vXo/1SdDv9Omgb/TpoG/2mpLP//////yuG1/2KlIv9XnhH/TpoG/1qhFv/5+/b//////////////////////4jZOf9z0hb/c9IW/3PSFv9z0hb/kNtG/37GOf9QnQWZ////AP///wD///8A////AP///wBPnAdxcbkr95TdTf9z0hb/c9IW/3PSFv9z0hb/c9IW/6zkdf///////////////////////////4a6Vf9rqy//1efE////////////7vXo/1SdDv9Omgb/TpoG/2mpLP////////////z9+/+31pj/XKIZ/73Zof//////////////////////6fja/3PSFv9z0hb/c9IW/3PSFv9z0hb/nN9b/2exIPJOmgZY////AP///wD///8A////AP///wBLnggiVKAM9p/fX/910xn/c9IW/3PSFv9z0hb/c9IW/3jUH//x+uf/////////////////////////////////////////////////7vXo/1SdDv9Omgb/TpoG/2mpLP//////////////////////////////////////////////////////p+Nt/3PSFv9z0hb/c9IW/3PSFv951CD/nt9e/1GcCPdVmQAP////AP///wD///8A////AP///wD///8AUZwH4I7TS/+B1i3/c9IW/3PSFv9z0hb/c9IW/3PSFv+q5HH/////////////////////////////////////////////////7vXo/1OdDf9Omgb/TpoG/2mpLP/////////////////////////////////////////////////m99X/dNIY/3PSFv9z0hb/c9IW/3PSFv+H2Tj/hs5A/1GeBsr///8A////AP///wD///8A////AP///wD///8ATZsGh3K8K/qR3Ej/c9IW/3PSFv9z0hb/c9IW/3PSFv910xn/3PTF////////////////////////////////////////////+/35/4e6Vf90rzv/dK87/63Qi/////////////////////////////////////////////z++v+S3Er/c9IW/3PSFv9z0hb/c9IW/3PSFv+X3lL/arUh9k2aB23///8A////AP///wD///8A////AP///wD///8ATZsIIVGdCfeU2VL/fdUm/3PSFv9z0hb/c9IW/3PSFv9z0hb/ftYo/+354f///////////////////////////////////////////////////////////////////////////////////////////////////////////6njcP9z0hb/c9IW/3PSFv9z0hb/c9IW/4LXMP+Q1kr/UJwH81WcABL///8A////AP///wD///8A////AP///wD///8A////AFCcBZVttyb4ktxJ/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/4rZO//t+eL////////////////////////////////////////////////////////////////////////////////////////////+//7/tuiF/3PSFv9z0hb/c9IW/3PSFv9z0hb/dNIY/5feUv9lsBr2T5sIe////wD///8A////AP///wD///8A////AP///wD///8A////AFGUABNQnQj0jdVI/4HWLf9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9+1ij/3PTF//////////////////////////////////////////////////////////////////////////////////n99f+f4GD/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/htg2/4jSP/9QnAbtVY4ACf///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAFOmgZ5XaoW9ZTcTv961CL/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/ddMa/6zkdf/y++n////////////////////////////////////////////////////////////+//7/zu+t/4XYM/9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9+1ij/lNtO/1mlEPROmQVfAAAAAf///wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAAAAEAVQADT5wHvGm3IPeS3En/dtMb/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv951CD/ruV5/9rzwv/8/vr/////////////////////////////////7fnh/8Lrmv+N2kL/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3nUIP+U3U3/Yq8Y9k+cCKUAAAACAAAAAgAAAAEAAAAB////AP///wD///8A////AP///wAAAAABAAAAAQAAAAIAAAAEOXEAElCdB992wyv8jdpC/3bTG/9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv971ST/kdxI/5/gYP+s5HX/puJq/5feUv+H2Df/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/eNQf/5HcSP9vviX6T5wH0SdOAA0AAAAFAAAAAwAAAAIAAAABAAAAAf///wD///8A////AAAAAAEAAAABAAAAAgAAAAQAAAAHAAAACjl3Bi1PnAbwd8Uq/Y7bRP951CD/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv981Sb/kdxI/3G/JftPnAfrMFoHJQAAAA0AAAAJAAAABgAAAAQAAAACAAAAAQAAAAH///8A////AAAAAAEAAAACAAAABAAAAAYAAAAKAAAADgAAABM1ZQQ6T5oH5mm3HfmO20T/ftYo/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/4HWLf+O2kT/ZLIZ906ZB94rUgU1AAAAFwAAABMAAAAOAAAACgAAAAYAAAADAAAAAgAAAAH///8AAAAAAQAAAAEAAAADAAAABQAAAAkAAAANAAAAEgAAABcAAAAdGjMAMk2WBs5dqxP2h9U8/4rZO/961CH/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv981SX/jNo//4bUOf9YpRD2SpIHxA8kADIAAAAiAAAAHAAAABcAAAARAAAADAAAAAgAAAAFAAAAAgAAAAEAAAABAAAAAQAAAAEAAAADAAAABgAAAAoAAAAPAAAAFAAAABkAAAAgAAAAJwULADBEhQWlT5sI+Gu6H/yL1z7/htg1/3vVJP900hf/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv900hj/fNUm/4jZOf+J1zz/aLcb+06bB/c/fAaeAAUANgAAACwAAAAlAAAAHwAAABkAAAATAAAADgAAAAkAAAAFAAAAAwAAAAEAAAABAAAAAQAAAAEAAAADAAAABQAAAAkAAAAOAAAAEwAAABgAAAAeAAAAJQAAAC0AAAA4GzQDXkaJBslQnAj6br8i/oPTNv+M2j//hdgz/33VJv961CH/dtMb/3TSF/9z0hb/dNIY/3fTHP961CL/ftYo/4bYNf+M2kD/gtI0/2u8H/5Rmgj6QoEGxhIkA2MAAABDAAAANgAAACsAAAAkAAAAHQAAABgAAAASAAAADQAAAAgAAAAFAAAAAgAAAAEAAAAB////AAAAAAEAAAACAAAABAAAAAcAAAALAAAAEAAAABUAAAAaAAAAIAAAACgAAAAyAAAAQQAAAFAePQJ+Q4QG0U6YB/pVoQz4bL0f/n3MLv+E1DX/iNk6/4vaPv+L2j3/i9o9/4jYOv+D0zT/e8ws/2i5HP5Tnwv5TpgH+UF+BtAZMwKDAAAAWwAAAEwAAAA9AAAAMAAAACUAAAAfAAAAGQAAABQAAAAOAAAACgAAAAYAAAADAAAAAgAAAAH///8A////AAAAAAEAAAACAAAAAwAAAAUAAAAHAAAACwAAAA8AAAATAAAAGAAAAB4AAAAmAAAAMQAAAD0AAABKAAAAVgMFAGYiRQOUO3cFykuSBu9Olwf6TpoG/lCaB/pSngr5TpkG+02aBv5NmAb5SpAG7zpyBMoePAKYAgIAbQAAAGAAAABUAAAARwAAADkAAAAuAAAAIwAAABwAAAAXAAAAEgAAAA4AAAAKAAAABwAAAAQAAAACAAAAAQAAAAH///8A////AP///wAAAAABAAAAAgAAAAMAAAAEAAAABgAAAAkAAAAMAAAADwAAABQAAAAYAAAAHgAAACcAAAAvAAAAOQAAAEIAAABLAAAAVQAAAFwAAABhBQoAahMnAnwcOAKJEiUCfQUHAG0AAABmAAAAYQAAAFkAAABSAAAASAAAAD8AAAA1AAAALAAAACQAAAAcAAAAGAAAABIAAAAOAAAACwAAAAgAAAAGAAAABAAAAAIAAAABAAAAAf///wD///8A////AP///wAAAAABAAAAAQAAAAEAAAACAAAAAwAAAAUAAAAGAAAACAAAAAsAAAAOAAAAEAAAABQAAAAaAAAAHQAAACMAAAApAAAALQAAADIAAAA1AAAAOQAAADoAAAA8AAAAOwAAADoAAAA5AAAANAAAADEAAAAsAAAAJwAAACEAAAAbAAAAFwAAABMAAAAQAAAADAAAAAoAAAAIAAAABgAAAAQAAAADAAAAAgAAAAEAAAAB////AP///wD///8A////AP///wD///8A////AAAAAAEAAAABAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGAAAABYAAAAUAAAAEQAAAA8AAAANAAAACwAAAAgAAAAHAAAABgAAAAUAAAADAAAAAwAAAAIAAAABAAAAAf///wD///8A////AP///wD///8A";
-
-        private const string tag_icon_emblem = "R2RrUAAAGxgBAQABAAAAkAAAADAAAAAwgYFpgYFpdnZkZGVbVlZUTExRZl5iem1xlH+CinuAe3N6Z2lyYmZvb21zfnZ5jn5+jX59jH18i3x7hnh4fW1wdGJobVliYU9WVkZJTT4/QTQ1NCstKiMmIRwgKCEjLSQlMykoQzUyUz87ZkxFfWBXlXdss5SH0bGi17us38a55tLG28m+tqadkoJ8dWZhdWZhgYFpgYFpdnZkZGVbVlZUTExRZl5iem1xlH+CinuAe3N6Z2lyYmZvb21zfnZ5jn5+jX59jH18i3x7hnh4fW1wdGJobVliYU9WVkZJTT4/QTQ1NCstKiMmIRwgKCEjLSQlMykoQzUyUz87ZkxFfWBXlXdss5SH0bGi17us38a55tLG28m+tqadkoJ8dWZhdWZhhIFthIFteHVnZGNcU1NTSEhPY11ieG1xk4GEi32CfnZ7bmxzaWlvcm1yfXJ1iHh5hXV2gHJzfG9weGtscmNmbFthaFVcXUxRU0RHSj0+PzQ1NCstKiMmIh0gJyAiKiMjLyYlQDIvUD05Y0tFel5Wj3NpqYyAw6aYyq+i0ruu2se60L6zrp2UjHx1cWFccWFcioB1ioB1e3RsY19eUE9SQkNLXlphdG1ykISIjYKFhXt+enJ0dW1veG1ve21wf21wd2dqbWBjY1lcX1VZX1NWX1BUYE5TV0dLTkFDRzw8PTQ0MystKyQnIx4gJR8gJiAgKCEfOi4qSzs2YEpEdVxUhWtjmX91rZOItJyRvaicxrOnvqyhoI6GgXBqaVlUaVlUjoB6joB6fnJwY11fTUtSPD9JWlhgcW1zj4aKj4WHin6Ag3Z2fnBvfGxteWhrd2Vpa1xhXVJXT0hNS0RJUEZKVUdKWUhLUUNFSj4/RDo7OzQ0MywtLCUnJB8hJB4fIx0dIx0aNSonRzgzXUpDcFpSfGZei3RsmoN6oo2DrJiOtqSYsJ6TlIN6eWdhY1JOY1JOmIWFmIWFhnh6aWFmUU9XP0JMXFxkc3F3kIuPk4mLj4KCi3l2hHBtfWppdGJkbFpgXU9VTEJJOjY8NzI5QDc8SDw/T0BCST0+Qzo6Pzc4ODIyMSssKyUmJR8gIx0dIRsaHxkXMigkRTgzXUxFcFtTd2NbgWxkinZukn51m4h+pZOHn42Ch3Vsb11XW0pGW0pGsqSfsqSfo5iUi4SCd3R0aGdpfXl6jYeIoZiamo6Pj4GCgXBwdGNjbV1fY1VZWk1TT0VLQjtBNTE3Mi40ODE2PjQ4Qzc6PjM2OTAyNS0vMCkqKiQlJSAhIBwdIhwcJB0cJx0bPTArU0I8bllQgWpfh3BljndslX9yl4J1moZ3nYl6lYJ0fWthZlRPU0NAU0NAxr20xr20urKqpqCZlpKLiYWAlpCMoZiWr6KioJKTj4CCeWlraFlcYFNWVktQTERJRD1DOjY7MC40LisxMi0yNS4zOC80NSwwMSgrLiUoKSEkJB4gIBwdHRoaIhwcJx4dLSAeRjYxXkpDfGRaj3Zpk3ttmIBxnYZ2m4V0mYNyloJwjHlpdWNZXk5ITD07TD074NvO4NvO19PEyMO1vLeosqudt6yju66nwK+tqJeYj3+Cb2FmWExSUEZMRT9EOzc9NjM5MS80KyovKSctKictKyYtLCYtKSIoJx4jJRsfIRgcHRcZGRcYGBcXIhsbKh8eNCQiUT03a1RMjHJloYV1o4h3pYx4qI96oIl0l4FsjnlkgW1ba1lOVUVARDY1RDY16+fZ6+fZ5N7P18+/zcKywbSjuaqfsqKcqpmYkYKEem1wXVJYSEBHQjxCOzc8NDI2MS80LiwwKigtKSYsJyQqJiMpJSIoIx4kIBsgHhgcHRcaGxcZGhcYGhgYJR0cLSIfNyckUj43a1RKi3BioINypYh2rI96s5Z/qIx2mX9ri3Nff2dXb1dNX0ZDUjo8Ujo88e3f8e3f6uPV39PD1ca1yLWktaKXpZONkYCBeWtuZVpfTEVLOzc9ODU6NDI2MTAyLy0xLSovKyctKSUrJiMpIyEnIR8lHxwiHBkeGhcbGRcaGhgaGxkZHRsaJyAeLyQhOSkkUj42aVJHhWtdm35tpIZzsJB7vJqDro54nH5ri25df2NVdVZPaklIYj9DYj9D+fPn+fPn8+rc6dnI4Mu50belr5iNlH97cmBjW09US0NJNzQ7LCwyLCwwLCwvLCwtLCotLCgsKyYsKSQrJSEnIB4kHBwhGRofFxgcFBYaFhcaGRkaHRsbIR0cKyIfMiYiOyslUT00ZU5Df2RWlXdmo4NwtZF8xqCItZB7n3xqiWlaf15TfFVQeUxOdkVNdkVN/PXq/PXq9Ond59XG3cW0yq6cooqAgm1pWUlNRjtBOjQ6KysxJCctJyktKywtLy4tLi0uLisuLSkuKictJCMpHiAlGh0iFxsgFBoeEhkdFBkcGRsdHh0dJCAeLiUhNSkkPi4nUj41ZE5CemFTj3Jinn5ssY15w52GsYt4mnZmhGFVfVdPglRSiFFVjE9YjE9Y+O/n+O/n7eDX2ce7ybOkspmJjnlwcV9cTUBDPjU7NTI3Ky0yJywwLC8xMjMzODc0NTU0MjI0LzA0LC0yJikuICYrGyMoGCEmFSAkEx4iFR4hGh8gHyAfJSEfMCcjOCwmQzIqVUI4ZVBFeWJVinFilXppooVysJB7oH9ujWtfeVdPd1BMhlRUlFhcoFtioFti9Ofj9Ofj49XPx7atsJ2Rk35ydWRdXU5MPjQ3NC8zMC8zKi8zKzE0MjY2Ozw5Q0E9Pj88ODs7Mjg6LTU4JzE1IS0yHCowGSgtFicrFCUqFiQnGyMkICMiJiQgMislPDApSDctWEY7ZlNId2RYhHBjiXVmkXppmH9tjHBifF1VbEpHcUhIilRWpGBkuWpwuWpw8ODg8ODg2srItaSfmIZ/dWRbXE9KSD48LygrKigsKiwvKjEzLzc4OD08Q0VAT0xFSElEPkVCNUFBLz0/KTk8IzU5HjE3Gy81GC4zFS0xFystHSgoISYkKCYhNS4nQDQrTTwxW0o/Z1dLdWZbfW9jfm9if29hgG9fd2FWa1BLYD5Aaj9Dj1RYtGlt0nl90nl989rd89rd3MbHtqOgl4eCc2hgW1RRR0RFLjA2KzE3LTY8LzxBNUNGPkhISU5LVFVPTVFNRE1LO0lJNkZIMUJFLT9DKjxBJTk+Hzc7GzU5HDE0IS0uJCkpKyglODAqQjYuTz4zXEo/Z1RJc2FXfGpffmtggG1hgm9iemRacVZRZ0lHbUpJiFhYo2dmuHNyuHNy9tPa9tPa38HFtqKilomGcW1nWVtaRkxQLjpDLT1GMUNLNkpSPVFXRVVYUFpZWmBaU1xZS1dWQlNUPlBSPE5ROktPOElOMUVKKUFGIz5DIjk9JjM1KS4vLioqOzIuRTgxUkA1Xkk/Z1FHcltSemNafWZdgWphhW5lf2dfd19YcFdRcldRgF5XjmZemWxjmWxj+szX+szX4bzEt6GklYuKbnJuV2JjRFRbLURQLkhUNU9bPFljRWBoTWNnV2dnYWtmWmdkUmJhSl1fR1pdR1lcR1hbR1daPVJVM0xRKkhNKEFGKzk9LTI1Mi0vPjQySDo0VUI3X0k/Z09FcFZNeFxVfWFagmdhiG1pg2tlfmhgeGVbdmRYd2RXeGRWeWRVeWRV9sDN9sDN3bO8s5ugkYmKa3NyV2dqR11kM1BcNFNgOlllQWFsSGZvTWdtVGhqW2lnV2ZmUmNjTWBhTV9hT19hUmBhVGFiR1pdO1RYMU9ULUdMLj1BLzQ5My4xQDY0Szw3WEQ6YUtBaVFHclhPeF5Xe2JcfmdjgWxqgGxnfm1lfW1iemtec2ZYbGFRZl1NZl1N6Km36Km30J+qqY6ViYCFZnJzWW1xT2lvQmRsQWRuQ2ZvRWhyR2dwR2NrR15kR1ldSVpdTFtdTl1dUl9fWWRiX2hlZWxoVWVkRV1gOFdcMkxTMUBFMTc7My8xQjc2Tj45XEc9Z1FHbllPd2Nae2lhd2ljcmhmbWhpcmtpeXBpgHRqfXFmcGZaY1tPWFJGWFJG2pGh2pGhxIuYnoGLgHiAYXF1W3N4V3V6UXh9TnV8THJ6Sm53RmhyQF9pOlReM0pUO05VRVRXT1pZV19cYmhjbXFqdnhvY29rUGVnQF5kN1JZNERKMjk9MzAyQzk3UUE8YUpBbFZNdGFXfW5kfXRsc29rZmppWWVoZWtrdHNug3pygXdtbmZdWlRMSkdASkdAz36Pz36PunuKlnaCenJ8XXB2XXh+XX+DXYeLWIOHVHyCTnR8RWlzO1xoL01aIz1MMEVPQE5SUFdWXGBbamxkeHhtg4F0bXdxWGxtR2RqO1dfN0hNMzs/MzEyRTs5U0I+ZUxEcVtReGdegXdtf3x0cHVwXGtsSWJnWmtscHVyhYB5hHtza2VfU1BKPz46Pz46u3B9u3B9rHF8knR8fXd8aHp9ZH6AYYGDXYWHVnyAT3N4RmhuPVtkNFBZKUJMHjRALT5FP0tMUlhUXGBZZGhha3BocnduYXBsUGlrQmNpO1phOk9TOkVJPD4/TENBWEhDZ05FcV1TeGphgXtyf4J6cXp2YHFyTmhtWm5wanV0eXx4eHhyZGViUVJRQkREQkREqGFqqGFqnmhvjnN3gXx9coSDa4ODZYODXYKDU3Z5SmpuP1xhNE5VLERLIjg/GCwzKjg8P0hHVFhRXWBYXmVeX2lkYGxoVGloR2VoPWNoOl1jPlZaQVBTRkpLU0xJXU5IaVBHcl9VeG5kgIB2f4d/coB8Y3d3U29zW3F0ZHV1bXl3bHRyXWVlT1VYRElORElOmVZcmVZck2Bki3JyhIB+eo2JcIiGaISDXX+AUXFzRmNmOVJXLUNJJjpAHS80FCUpJzM0P0ZCVllQXmFXWmJbVWNgUmRjSWNlQWNmOmJoOl9lQVtfRlhaTlRVWFNQYFNMalJIcmFXeHBmgIN6f4uEc4WAZXx8V3R4W3R3X3V3ZHZ2YnFyWGRnTlhdRk5VRk5VmF5dmF5dk2dlinVyg4F8eouGboWDZYCBWXp+TGxwQl5jNk5SKz9EJDc8Gy0xEiMmJDEyOkRAUVZPV15WUl5bTV9gSV9kQ2BlPWFnOWJoO2FnQl9kSF5iUFxfWlpZYllUbFdPcmVcdnNre4R9eoyHc4eEaYCAYHp9YHl8YXh7YXh7X3N3WmluVV5lUlZdUlZdo3Vso3Vsm3hvjHx1gIB6coJ+Zn19XXl9UXR9R2dwQFxkN05ULUJHJTo/HC81EiUrITI1M0FBRlFOTFhWSVtcR11jRV9oQWBpPWFqOmJqPGJqQmFpRmFpTWBnWGBiYV9ebF9ZcGpkcXVwc4J/c4mIcYeGboSEbIGCaoCCZ36DZH2DY3mAY3B2Y2hsY2FlY2FlrYd4rYd4oYV4joJ4fn93bHt3YHZ5V3N6S257Q2RwPltkN09WL0RJJzxBHDE4EicuHjI3LkBCPU1NQ1RVQlhdQltlQV5sP19sPWBsO2FsPWJsQWNtRGNuSmNuV2RpYGVmbWVhbm5rbXZ1bIGBbYeIb4eHcoaGdoaFcYWHbIOIZoGKZX6HanZ9bm9ycWlqcWlqr5R/r5R/oo58i4R3eXx0ZXNxWnF1Um55R2x9QmRzP11oPFNaNkpOLEFGIDU8FCoyHTM6KT9ENUpOOlBVPVZfP1toQF9wP2BvP2JvPmNvP2RwQmVyRGZ0SGd1VWlyX2tva21sa3JyZ3h6ZH+DZIOIa4WIc4eIe4iHdoiKb4eOaYaSaYSPcn6Eend5gHJxgHJxjnhljnhlhndneXVrb3RuY3NyXXZ6WHeBUnqJUnR/U250VWdmT1xZQFBQLkBDGzE3JDk/LkNIOU1RP1NZQ1piR2JsS2dzSmh0SGp1R2t1R2x2R2x4SGx5Sm15Um94WHB3YHF2X3R6XXd9WnqBWnyDXnyCYnyAZnx/Z4CFaYWNa4qVb4mUeISJgX5+iHp1iHp1c2FQc2FQcGRWa2pgZ25pYnNzX3p+XX+HWoWSXoGJY3x+aXZwY2tiUFxXOUlJIjY8KT1DM0ZMPE9UQlZcSF5lTmduU252Um94UHB5T3F7TXJ8THF8S3F8S3J9T3N9U3R+V3V/V3Z/VXaAU3eAUnZ/U3V9VHN6VXF4XHmBZIOMbYyXdI6YfYmMhoSBjX94jX94UkU2UkU2VE1BWVtUXGZiYHN0Yn+DY4iPZZOebpGWd46LgYl9fH1uZGthR1RRKT1BMENIOEpQQFJYR1lfT2NoV25yXnZ5XHd8Wnh/WHmBVXmCUniBT3iBTHeBTHiETHmGTHqJS3iGS3WDSXJ+SG96Rmx3Q2hzQGVvTnF7XoCLb5CbepScg4+RjYqFlId8lId8PTIlPTIlRT0yUVFJW2FcZXNxZX6BZoiOZpOebpOYdo+Pf4uDeoB1Y21mR1ZVKj9DMENINklPPVBVRFZcTGFmVWxwXXV4WnZ7WHd+VniBVHiCUniCUHeBTXeBTHiES3iGSXmJS3iGTnaCUXR+T293R2dwPV1mNFNcQ2BpVnF6aYKKdIiOfYaHhoSAjIJ7jIJ7LyQZLyQZOjIoTUpCXF1Wa3JuaH1+Z4aLZJGbapGXcY6QeYqGc395Xm1qQ1ZXKT9ELkNINEhNOk1SQFNYSV5iUmltWXJ1V3N5VXR9U3WAUXaBUHaBT3aBTnaBTHaDSneFSHeHTXeEU3eBWnd+WHF1S2RpO1NaLENLO1FYT2JoY3R5bnt+dnt8fXx7g315g315HhQKHhQKLSQbSEE4XVhPcXFqbHx6aISHY4+YZo6Wa4yRcImKan5+V2xuQFZZKEBELENHMEZKNUpOO1BTRFpeTWVpVW1yUm92UHF6T3J9TnN/T3SAT3SAT3WATHWCSnWCR3WEUHeCWXmAZXt9Y3NzUGBiOUhMITA2Mj5DRlBTW2JjZmprbG5vcnJzd3V3d3V3HBEIHBEILCIYST81X1ZMdHBmbXl1Z4CCYIqRY4uTZ4qRbImPZoCFVW90P1lfKURKK0VKLkZLMUhLNkxQP1ZbSGFmT2luTWtzS213Sm56SnB9THJ+TXN/TnSASnOASHKARHGAUHV/XXl+bX18bHVyWGBePkVGJCotMzc5RkhIWVhXY2JhaGlqbnBzc3V6c3V6LB8WLB8WOS0jUEU6YVhNcm1ianVwZHt7XYOJYYeOZomQbIyTaIWMV3V8Q2FoLkxULktSLklOLkdLMUpOOlRZQ15jSWVrSGdvR2lzRmt2R216SXB8SnF+S3OASHF/RXB+Qm59T3N8Xnd7b317cXdyYGVhSk1LNTY1QEFATk5NXVxaZWVkbW5vdHZ7en2Een2EQTAoQTAoSjsxWUxBZFpPb2leZ29qYXRzWXt/XoKIZYiPbY+XaoyVW32GR2pzM1dhMVJbLkxTKkZMLEdMNFBWPFlfQmFnQmNrQmVvQWdyQ2l2RW16RnB9R3KARG99Qm17P2p4Tm94XnV4cn15eHpya2pkW1dSSkRAUUxIWVZTYmBeaWlocnR2e3+FgoiQgoiQVkI5VkI5Wkk/YlRJZ1xQa2ZaZGpjXW5rVnJ0XH2CZIeObpOcbZOeXoWQS3N/OWFtNFlkLU9YJ0VMJ0RLLk1TNVVcO1xjPF5mPGBqPWJtPmZyQWt4Qm58Q3GAQW18Pmp4PGZ0TWx0X3R2dX13fnxydXBna2JYYFNKYlhRZV5ZZ2VibGxsd3p+goePipKdipKdbltQbltQbVxSal9VaGFXZWRaXmhjWWtqU29zWHl/X4KKaI6YZ4+bW4SRTXeEP2l3OF9rMFJcKEZNJkNKK0pRMVBXNVVcN1hgOVtlOl5oPmNuQ2t2R3B9SnWCR3F+RG17QGl3TW11W3J1bXh0d3lxdXNqdGxicmZacmlhcW1pcXFxdHd6foOJiI+Yj5mjj5mjjXltjXlthHRqdW1kamZfXWFbWGRjVGdpT2pxU3R9WX2GYIiTYIuXWISRT3yKRXSCPWd0M1diKUdPJkJKKEZNK0lRLUxUMVFZNVVeOFliPmFqRmt1TXJ+UnqFTnWBSnJ+Rm56Tm53V3B0Y3JwbnRudnduf3puiX1uhX50gX98fICEfoWLh4+Xj5qilqKrlqKrq5iKq5iKm42BgHpza2xnVV5cUWFjT2NoS2ZvTm96U3eDWIGOWYaUVYSSUYGQTH6OQm59NltnKkhRJUFJJUJKJUNLJURLK0lRME9XNVRcPl5mSWt0UnV+W36IVXqEUXaBTHJ9T3B4VG5zWWxtZXBsdnpyi4d6oJWCmZOIkZKPiJCXiJOdkJull6Stnaq0naq0taOVtaOVo5aLhoF6bnBsVWBfUGFkTGJoR2NtSWt2TXN/UnyJVIKQU4KQUYKRUIKSR3OBO2BsME1XKkVOKEVNJkRMJENLKklRME9YNVRdP19nTGx0VnZ/X4CJWn2GVnqDUXaAUnJ6VG91VmtuYnBud313kY6CqqCNoJqPkpSShY2Vgo6Zi5ahk5+omaaumaausKCUsKCUoZaLiIR8dHZxXWhlU2RmSmJnQF9oQmVwRm14S3aDTn2KUH6MUYGOU4OQTXeDRWlyPVpiOFNaM1BXLU1VKUtTLlBZNFZgOFtlQmRtTm94WHeAYX+IXn6GW36GWHyEWHh/WXV6WnB0ZXR0eYF9lJKIrqOUnJaNhoaGcHZ+a3R/dX6IgImRiJGYiJGYrJ2TrJ2Tn5WMi4d/enx1ZnBrVmhoSWJmOVtjOmBqPmdyRHB8SXeETXuHUX+LVoSPU3uFT3F5S2dtRmBmPVtiNVZeLlJbM1hhOF5oPGJtRWl0UXJ7WniBY3+GYoCHYYGIX4OIXn6EXnp/XXV5Z3h7fIaEl5aPsaebmZKMenl5W19nVFpkYGZvbXN6d32Cd32CqJuSqJuSnpSMjYqCf4F5bXZwWGtqSGJlM1dfNFxmOWNuPmt3RXN/SniDUX6IWISNV3+GVnh+VXF1UWtwRmRrO15lMlhhNl5oO2NuPmhzR255U3R+XHmBZX+FZYKIZYSJZYeMY4OIYn+EX3l+aXyAfomJmZmUtKqglo+LcG5wSkxVQUVPT1NbXmFnaWxxaWxxqJuSqJuSnpSMjYqCf4F5bXZwWGtqSGJlM1dfNFxmOWNuPmt3RXN/SniDUX6IWISNV3+GVnh+VXF1UWtwRmRrO15lMlhhNl5oO2NuPmhzR255U3R+XHmBZX+FZYKIZYSJZYeMY4OIYn+EX3l+aXyAfomJmZmUtKqglo+LcG5wSkxVQUVPT1NbXmFnaWxxaWxx";
-    }
-}
-#endif
diff --git a/src/ThumbnailCommand.cs b/src/ThumbnailCommand.cs
deleted file mode 100644
index 5352037..0000000
--- a/src/ThumbnailCommand.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using Gtk;
-using FSpot;
-using FSpot.Utils;
-using FSpot.UI.Dialog;
-
-public class ThumbnailCommand {
-	
-	private Gtk.Window parent_window;
-
-	public ThumbnailCommand (Gtk.Window parent_window)
-	{
-		this.parent_window = parent_window;
-	}
-
-	public bool Execute (IBrowsableItem [] photos)
-	{
-		ProgressDialog progress_dialog = null;
-        var loader = ThumbnailLoader.Default;
-		if (photos.Length > 1) {
-			progress_dialog = new ProgressDialog (Mono.Unix.Catalog.GetString ("Updating Thumbnails"),
-							      ProgressDialog.CancelButtonType.Stop,
-							      photos.Length, parent_window);
-		}
-
-		int count = 0;
-		foreach (IBrowsableItem photo in photos) {
-			if (progress_dialog != null
-			    && progress_dialog.Update (String.Format (Mono.Unix.Catalog.GetString ("Updating picture \"{0}\""), photo.Name)))
-				break;
-
-			foreach (IBrowsableItemVersion version in photo.Versions) {
-				loader.Request (version.Uri, ThumbnailSize.Large, 10);
-			}
-			
-			count++;
-		}
-
-		if (progress_dialog != null)
-			progress_dialog.Destroy ();
-
-		return true;
-	}
-}
diff --git a/src/TimeAdaptor.cs b/src/TimeAdaptor.cs
deleted file mode 100644
index 2b80a83..0000000
--- a/src/TimeAdaptor.cs
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * FSpot.TimeAdaptor.cs
- *
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- * 	Stephane Delcroix  <stephnae at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Threading;
-using System.Collections.Generic;
-using FSpot.Query;
-using Hyena;
-
-namespace FSpot {
-	public class TimeAdaptor : GroupAdaptor, FSpot.ILimitable {
-		Dictionary <int, int[]> years = new Dictionary<int, int[]> ();
-
-		public override event GlassSetHandler GlassSet;
-		public override void SetGlass (int min)
-		{
-			DateTime date = DateFromIndex (min);
-
-			if (GlassSet != null)
-				GlassSet (this, query.LookupItem (date));
-		}
-
-		public void SetLimits (int min, int max) 
-		{
-			DateTime start = DateFromIndex (min);
-
-			DateTime end = DateFromIndex(max);
-
-			if (order_ascending)
-				end = end.AddMonths (1);
-			else
-			 	end = end.AddMonths(-1);
-
-			SetLimits (start, end);
-		}
-
-		public void SetLimits (DateTime start, DateTime end)
-		{
-			query.Range = (start > end) ? new DateRange (end, start) : new DateRange (start, end);
-		}
-
-		public override int Count ()
-		{
-			return years.Count * 12;
-		}
-
-		public override string GlassLabel (int item)
-		{
-			return String.Format ("{0} ({1})", DateFromIndex (item).ToString ("MMMM yyyy"), Value (item));
-		}
-
-		public override string TickLabel (int item)
-		{
-			DateTime start = DateFromIndex (item);
-			
-			if ((start.Month == 12 && !order_ascending) || (start.Month == 1 && order_ascending))
-				return start.Year.ToString ();
-			else 
-				return null;
-		}
-
-		public override int Value (int item)
-		{
-			if (order_ascending)
-				return years [startyear + item/12][item % 12];
-			else
-				return years [endyear - item/12][11 - item % 12];
-		}
-
-		public DateTime DateFromIndex (int item) 
-		{
-			item = Math.Max (item, 0);
-			item = Math.Min (years.Count * 12 - 1, item);
-			
-			if (order_ascending)
-				return DateFromIndexAscending (item);
-
-			return DateFromIndexDescending (item);
-		}
-
-		private DateTime DateFromIndexAscending (int item)
-		{
-			int year = startyear + item/12;
-			int month = 1 + (item % 12);
-
-			return new DateTime(year, month, 1);
-		}
-
-		private DateTime DateFromIndexDescending (int item)
-		{
-			int year = endyear - item/12;
-			int month = 12 - (item % 12);
-			
-			return new DateTime (year, month, DateTime.DaysInMonth (year, month)).AddDays (1.0).AddMilliseconds (-.1);
-		}
-		
-		public override int IndexFromPhoto (FSpot.IBrowsableItem photo) 
-		{
-			if (order_ascending)
-			       return IndexFromDateAscending (photo.Time);
-
-			return IndexFromDateDescending (photo.Time);	
-		}
-
-		public int IndexFromDate (DateTime date)
-		{
-			if (order_ascending)
-				return IndexFromDateAscending(date);
-
-			return IndexFromDateDescending(date);
-		}
-
-		private int IndexFromDateAscending(DateTime date)
-		{
-			int year = date.Year;
-			int min_year = startyear;
-			int max_year = endyear;
-
-			if (year < min_year || year > max_year) {
-				Log.DebugFormat ("TimeAdaptor.IndexFromDate year out of range[{1},{2}]: {0}", year, min_year, max_year);
-				return 0;
-			}
-
-			return (year - startyear) * 12 + date.Month - 1 ;
-		}
-
-		private int IndexFromDateDescending(DateTime date)
-		{
-			int year = date.Year;
-			int min_year = startyear;
-			int max_year = endyear;
-		
-			if (year < min_year || year > max_year) {
-				Log.DebugFormat ("TimeAdaptor.IndexFromPhoto year out of range[{1},{2}]: {0}", year, min_year, max_year);
-				return 0;
-			}
-
-			return 12 * (endyear - year) + 12 - date.Month;
-		}
-
-		public override FSpot.IBrowsableItem PhotoFromIndex (int item)
-	       	{
-			DateTime start = DateFromIndex (item);
-			return query [query.LookupItem (start)];
-		
-		}
-
-		public override event ChangedHandler Changed;
-		
-		uint timer;
-		protected override void Reload () 
-		{
-			timer = Log.DebugTimerStart ();
-			Thread reload = new Thread (new ThreadStart (DoReload));
-			reload.IsBackground = true;
-			reload.Priority = ThreadPriority.Lowest;
-			reload.Start ();
-		}
-
-		int startyear = Int32.MaxValue, endyear = Int32.MinValue;
-		void DoReload ()
-		{
-			Thread.Sleep (200);
-			Dictionary <int, int[]> years_tmp = query.Store.PhotosPerMonth ();
-			int startyear_tmp = Int32.MaxValue;
-			int endyear_tmp = Int32.MinValue;
-			
-			foreach (int year in years_tmp.Keys) {
-				startyear_tmp = Math.Min (year, startyear_tmp);
-				endyear_tmp = Math.Max (year, endyear_tmp);
-			}
-			
-			Gtk.Application.Invoke(delegate {
-				
-				years = years_tmp;
-				startyear = startyear_tmp;
-				endyear = endyear_tmp;
-				
-				if (Changed != null)
-					Changed (this);
-			});
-			
-			Log.DebugTimerPrint (timer, "TimeAdaptor REAL Reload took {0}");
-		}
-
-		public TimeAdaptor (PhotoQuery query, bool order_ascending) 
-			: base (query, order_ascending)
-		{ }
-	}
-}
diff --git a/src/TipWindow.cs b/src/TipWindow.cs
deleted file mode 100644
index 565cf48..0000000
--- a/src/TipWindow.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Gtk;
-using Gdk;
-
-namespace FSpot {
-	internal class TipWindow : Gtk.Window {
-		public TipWindow () : base (Gtk.WindowType.Popup) 
-		{
-			Name = "gtk-tooltips";
-			AppPaintable = true;
-			BorderWidth = 4;
-		}
-
-		protected override bool OnExposeEvent (Gdk.EventExpose args)
-		{
-			Gtk.Style.PaintFlatBox (Style, GdkWindow, State, ShadowType.Out,
-						args.Area, this, "tooltip", Allocation.X, Allocation.Y, 
-						Allocation.Width, Allocation.Height);
-			
-			return base.OnExposeEvent (args);
-		}
-	}
-}
diff --git a/src/UI.Dialog/AboutDialog.cs b/src/UI.Dialog/AboutDialog.cs
deleted file mode 100644
index 8458c48..0000000
--- a/src/UI.Dialog/AboutDialog.cs
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * FSpot.UI.Dialog.AboutDialog.cs
- *
- * Author(s):
- *	Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2008-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.IO;
-using Mono.Unix;
-using Hyena;
-
-namespace FSpot.UI.Dialog
-{
-	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",
-				"",
-				"Active Contributors to this release",
-				"\tAdemir Mendoza",
-				"\tAlex Launi",
-				"\tAnton Keks",
-				"\tBertrand Lorentz",
-				"\tChristian Krause",
-				"\tEvan Briones",
-				"\tGabriel Burt",
-				"\tIain Churcher",
-				"\tIain Lane",
-				"\tLorenzo Milesi",
-				"\tMike Gem\x00fcnde",
-				"\tNick Van Eeckhout",
-				"\tPaul Lange",
-				"\tPaul Wellner Bou",
-				"\tPeter Goetz",
-				"\tTomas Kovacik",
-				"\tTrevor Buchanan",
-				"",
-				"Contributors",
-				"\tAaron Bockover",
-				"\tAlessandro Gervaso",
-				"\tAlex Graveley",
-				"\tAlvaro del Castillo",
-				"\tBen Monnahan",
-				"\tBengt Thuree",
-				"\tChad Files",
-				"\tChristopher Halse Rogers",
-				"\tDaniel Köb",
-				"\tEttore Perazzoli",
-				"\tEwen Cheslack-Postava",
-				"\tJeffrey Finkelstein",
-				"\tJeffrey Stedfast",
-				"\tJoe Shaw",
-				"\tJoerg Buesse",
-				"\tJon Trowbridge",
-				"\tJoshua Tauberer",
-				"\tKarl Mikaelsson",
-				"\tGrahm Orr",
-				"\tLaurence Hygate",
-				"\tLee Willis",
-				"\tMartin Willemoes Hansen",
-				"\tMatt Jones",
-				"\tMatt Perry",
-				"\tMichal Nánási",
-				"\tMiguel de Icaza",
-				"\tNat Friedman",
-				"\tPatanjali Somayaji",
-				"\tPascal de Bruijn",
-				"\tPeter Johanson",
-				"\tTambet Ingo",
-				"\tThomas Van Machelen",
-				"\tTodd Berman",
-				"\tVasily Kirilichev",
-				"\tVincent Moreau",
-				"\tVincent Pomey",
-				"\tVladimir Vukicevic",
-				"\tWojciech Dzierżanowski",
-				"\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 = 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 ();
-		}
-	}
-}
diff --git a/src/UI.Dialog/AdjustTimeDialog.cs b/src/UI.Dialog/AdjustTimeDialog.cs
deleted file mode 100644
index 5bdab38..0000000
--- a/src/UI.Dialog/AdjustTimeDialog.cs
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * FSpot.UI.Dialogs.AdjstTimeDialog.cs
- *
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- *
- * Copyright (c) 2006-2009 Novell, Inc.
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Gtk;
-using System.Collections;
-using Mono.Unix;
-using FSpot.Widgets;
-using Hyena;
-
-namespace FSpot.UI.Dialog {
-	public class AdjustTimeDialog : BuilderDialog 
-	{
-		[GtkBeans.Builder.Object] ScrolledWindow view_scrolled;
-		[GtkBeans.Builder.Object] ScrolledWindow tray_scrolled;
-		[GtkBeans.Builder.Object] Button ok_button;
-		[GtkBeans.Builder.Object] Button cancel_button;
-		[GtkBeans.Builder.Object] SpinButton photo_spin;
-		[GtkBeans.Builder.Object] Label name_label;
-		[GtkBeans.Builder.Object] Label old_label;
-		[GtkBeans.Builder.Object] Label count_label;
-		[GtkBeans.Builder.Object] Gnome.DateEdit date_edit;
-		[GtkBeans.Builder.Object] Frame tray_frame;
-		[GtkBeans.Builder.Object] Gtk.Entry entry;
-		[GtkBeans.Builder.Object] Gtk.Entry offset_entry;
-		[GtkBeans.Builder.Object] Gtk.CheckButton difference_check;
-		[GtkBeans.Builder.Object] Gtk.CheckButton interval_check;
-		[GtkBeans.Builder.Object] Gtk.Frame action_frame;
-		[GtkBeans.Builder.Object] Gtk.Entry spacing_entry;
-		[GtkBeans.Builder.Object] Gtk.Label starting_label;
-		
-		IBrowsableCollection collection;
-		BrowsablePointer Item;
-		FSpot.Widgets.IconView tray;
-		PhotoImageView view;
-		Db db;
-		TimeSpan gnome_dateedit_sucks;
-
-		public AdjustTimeDialog (Db db, IBrowsableCollection collection) : base ("AdjustTimeDialog.ui", "time_dialog")
-		{
-			this.db = db;
-			this.collection = collection;
-
-			tray = new TrayView (collection);
-			tray_scrolled.Add (tray);
-			tray.Selection.Changed += HandleSelectionChanged;
-
-			view = new PhotoImageView (collection);
-			view_scrolled.Add (view);
-			Item = view.Item;
-			Item.Changed += HandleItemChanged;
-			Item.MoveFirst ();
-
-			//forward_button.Clicked += HandleForwardClicked;
-			//back_button.Clicked += HandleBackClicked;
-			ok_button.Clicked += HandleOkClicked;
-			cancel_button.Clicked += HandleCancelClicked;
-
-			photo_spin.ValueChanged += HandleSpinChanged;
-			photo_spin.SetIncrements (1.0, 1.0);
-			photo_spin.Adjustment.StepIncrement = 1.0;
-			photo_spin.Wrap = true;
-
-			date_edit.TimeChanged += HandleTimeChanged;
-			date_edit.DateChanged += HandleTimeChanged;
-			Gtk.Entry entry = (Gtk.Entry) date_edit.Children [0];
-			entry.Changed += HandleTimeChanged;
-			entry = (Gtk.Entry) date_edit.Children [2];
-			entry.Changed += HandleTimeChanged;
-			offset_entry.Changed += HandleOffsetChanged;
-			ShowAll ();
-			HandleCollectionChanged (collection);
-
-			spacing_entry.Changed += HandleSpacingChanged;
-			spacing_entry.Sensitive = ! difference_check.Active;
-		      
-			difference_check.Toggled += HandleActionToggled;
-		}
-
-		DateTime EditTime {
-			get { return date_edit.Time - gnome_dateedit_sucks; }
-		}
-
-		TimeSpan Offset
-		{
-			get {
-				Log.DebugFormat ("{0} - {1} = {2}", date_edit.Time, Item.Current.Time, date_edit.Time - Item.Current.Time);
-				return EditTime - Item.Current.Time;
-			}
-			set {
-				date_edit.Time = Item.Current.Time - gnome_dateedit_sucks + value;
-			}
-		}
-
-		void HandleTimeChanged (object sender, EventArgs args)
-		{
-			TimeSpan span = Offset;
-			Log.DebugFormat ("time changed {0}", span);
-			if (! offset_entry.HasFocus)
-				offset_entry.Text = span.ToString ();
-
-			starting_label.Text = "min.";
-			difference_check.Label = String.Format (Catalog.GetString ("Shift all photos by {0}"),
-							      Offset);
-		}
-
-		void HandleItemChanged (object sender, BrowsablePointerChangedEventArgs args)
-		{
-			//back_button.Sensitive = (Item.Index > 0 && collection.Count > 0);
-			//forward_button.Sensitive = (Item.Index < collection.Count - 1);
-
-			if (Item.IsValid) {
-				IBrowsableItem item = Item.Current;
-				
-				name_label.Text = System.Uri.UnescapeDataString(item.Name);
-				old_label.Text = (item.Time).ToString ();
-				
-				int i = collection.Count > 0 ? Item.Index + 1: 0;
-				// Note for translators: This indicates the current photo is photo {0} of {1} out of photos
-				count_label.Text = System.String.Format (Catalog.GetString ("{0} of {1}"), i, collection.Count);
-
-				DateTime actual = item.Time;
-				date_edit.Time = actual;
-				gnome_dateedit_sucks = date_edit.Time - actual;
-			}
-			HandleTimeChanged (this, System.EventArgs.Empty);
-
-			if (!tray.Selection.Contains (Item.Index)) {
-				tray.Selection.Clear ();
-				tray.Selection.Add (Item.Index);
-			}
-
-			photo_spin.Value = Item.Index + 1;
-		}
-
-		private void ShiftByDifference ()
-		{
-			TimeSpan span = Offset;
-			Photo [] photos = new Photo [collection.Count];
-
-			for (int i = 0; i < collection.Count; i++) {
-				Photo p = (Photo) collection [i];
-				DateTime time = p.Time;
-				p.Time = time + span;
-				photos [i] = p;
-				Log.DebugFormat ("XXXXX old: {0} new: {1} span: {2}", time, p.Time, span);
-			}
-			
-			db.Photos.Commit (photos);
-		}
-
-		private void SpaceByInterval ()
-		{
-			DateTime date = EditTime;
-		        long ticks = (long) (double.Parse (spacing_entry.Text) * TimeSpan.TicksPerMinute);
-			TimeSpan span = new TimeSpan (ticks);
-			Photo [] photos = new Photo [collection.Count];
-			
-			for (int i = 0; i < collection.Count; i++) {
-				photos [i] = (Photo) collection [i];
-			}
-			
-			TimeSpan accum = new TimeSpan (0);
-			for (int j = Item.Index; j > 0; j--) {
-				date -= span;
-			}
-
-			for (int i = 0; i < photos.Length; i++) {
-				photos [i].Time = date + accum;
-				accum += span;
-			}
-			
-			db.Photos.Commit (photos);
-		}
-
-		void HandleSpinChanged (object sender, EventArgs args)
-		{
-			Item.Index = photo_spin.ValueAsInt - 1;
-		}
-
-		void HandleOkClicked (object sender, EventArgs args)
-		{
-			if (! Item.IsValid)
-				throw new ApplicationException ("invalid item selected");
-
-			Sensitive = false;
-			
-			if (difference_check.Active)
-				ShiftByDifference ();
-			else
-				SpaceByInterval ();
-
-
-			Destroy ();
-		}
-
-		void HandleOffsetChanged (object sender, EventArgs args)
-		{
-			Log.DebugFormat ("offset = {0}", Offset);
-			TimeSpan current = Offset;
-			try {
-				TimeSpan span = TimeSpan.Parse (offset_entry.Text);
-				if (span != current)
-					Offset = span;
-			} catch (System.Exception) {
-				Log.WarningFormat ("unparsable span {0}", offset_entry.Text);
-			}
-		}
-
-		void HandleSpacingChanged (object sender, EventArgs args)
-		{
-			if (! spacing_entry.Sensitive)
-				return;
-
-			try {
-				double.Parse (spacing_entry.Text);
-				ok_button.Sensitive = true;
-			} catch {
-				ok_button.Sensitive = false;
-			}
-		}
-
-		void HandleActionToggled (object sender, EventArgs args)
-		{
-			spacing_entry.Sensitive = ! difference_check.Active;
-			HandleSpacingChanged (sender, args);
-		}
-
-		void HandleCancelClicked (object sender, EventArgs args)
-		{
-			Destroy ();
-		}
-
-		void HandleForwardClicked (object sender, EventArgs args)
-		{
-			view.Item.MoveNext ();
-		}
-
-		void HandleBackClicked (object sender, EventArgs args)
-		{
-			view.Item.MovePrevious ();
-		}
-
-		void HandleSelectionChanged (IBrowsableCollection sender)
-		{
-			if (sender.Count > 0) {
-				view.Item.Index = ((FSpot.Widgets.IconView.SelectionCollection)sender).Ids[0];
-
-			}
-		}
-
-		void HandleCollectionChanged (IBrowsableCollection collection)
-		{
-			bool multiple = collection.Count > 1;
-			tray_frame.Visible = multiple;
-			//forward_button.Visible = multiple;
-			//back_button.Visible = multiple;
-			count_label.Visible = multiple;
-			photo_spin.Visible = multiple;
-			action_frame.Visible = multiple;
-			photo_spin.SetRange (1.0, (double) collection.Count);
-		}
-	}
-}
diff --git a/src/UI.Dialog/DateRangeDialog.cs b/src/UI.Dialog/DateRangeDialog.cs
deleted file mode 100644
index 80a6592..0000000
--- a/src/UI.Dialog/DateRangeDialog.cs
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * FSpot.UI.Dialog.DateRangeDialog.cs
- *
- * Author(s):
- * 	Larry Ewing <lewing at novell.com>
- * 	Bengt Thuree
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using Gtk;
-using System;
-using Mono.Unix;
-using FSpot.Query;
-using FSpot.Widgets;
-
-namespace FSpot.UI.Dialog
-{
-	public class DateRangeDialog : BuilderDialog {
-		Gtk.Window parent_window;
-
-		[GtkBeans.Builder.Object] Button ok_button;
-		[GtkBeans.Builder.Object] Frame startframe;
-		[GtkBeans.Builder.Object] Frame endframe;
-		[GtkBeans.Builder.Object] ComboBox period_combobox;
-
-		DateEdit start_dateedit;
-		DateEdit end_dateedit;
-
-		TreeStore rangestore;
-
-		static string [] ranges = {
-			"today",
-			"yesterday",
-			"last7days",
-			"last30days",
-			"last90days",
-			"last360days",
-			"currentweek",
-			"previousweek",
-			"thismonth",
-			"previousmonth",
-			"thisyear",
-			"previousyear",
-			"alldates",
-			"customizedrange"
-		};
-
-		public DateRangeDialog (DateRange query_range, Gtk.Window parent_window) : base ("DateRangeDialog.ui", "date_range_dialog")
-		{
-			this.parent_window = parent_window;
-			TransientFor = parent_window;
-			DefaultResponse = ResponseType.Ok;
-
-			(startframe.Child as Bin).Child = start_dateedit = new DateEdit ();
-			start_dateedit.Show ();
-			(endframe.Child as Bin).Child = end_dateedit = new DateEdit ();
-			end_dateedit.Show ();
-
-			var cell_renderer = new CellRendererText ();
-
-			// Build the combo box with years and month names
-			period_combobox.Model = rangestore = new TreeStore (typeof (string));
-			period_combobox.PackStart (cell_renderer, true);
-
-			period_combobox.SetCellDataFunc (cell_renderer, new CellLayoutDataFunc (RangeCellFunc));
-
-			foreach (string range in ranges)
-				rangestore.AppendValues (GetString(range));
-
-			period_combobox.Changed += HandlePeriodComboboxChanged;
-           	 	period_combobox.Active = System.Array.IndexOf(ranges, "last7days"); // Default to Last 7 days
-
-			if (query_range != null) {
-				start_dateedit.DateTimeOffset = query_range.Start;
-				end_dateedit.DateTimeOffset = query_range.End;
-			}
-
-		}
-
-		void RangeCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
-		{
-			string name = (string)tree_model.GetValue (iter, 0);
-			(cell as CellRendererText).Text = name;
-		}
-
-		private static string GetString(int index)
-		{
-			return GetString (ranges [index]);
-		}
-
-		private static string GetString(string rangename)
-		{
-			System.DateTime today = System.DateTime.Today;
-			switch (rangename) {
-			case "today":
-				return Catalog.GetString("Today");
-			case "yesterday":
-				return Catalog.GetString("Yesterday");
-			case "last7days":
-				return Catalog.GetString("Last 7 days");
-			case "last30days":
-				return Catalog.GetString("Last 30 days");
-			case "last90days":
-				return Catalog.GetString("Last 90 days");
-			case "last360days":
-				return Catalog.GetString("Last 360 days");
-			case "currentweek":
-				return Catalog.GetString("Current Week (Mon-Sun)");
-			case "previousweek":
-				return Catalog.GetString("Previous Week (Mon-Sun)");
-			case "thismonth":
-				if (today.Year == (today.AddMonths(-1)).Year) // Same year for current and previous month. Present only MONTH
-					return today.ToString("MMMM");
-				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");
-				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":
-				return today.AddYears(-1).ToString("yyyy");
-			case "alldates":
-				return Catalog.GetString("All Images");
-			case "customizedrange":
-				return Catalog.GetString("Customized Range");
-			default:
-				return rangename;
-			}	
-		}
-
-		public DateRange Range {
-			get { return QueryRange (period_combobox.Active); }
-		}
-
-		private DateRange QueryRange (int index)
-		{
-			return QueryRange ( ranges [index]);
-		}
-
-		private DateRange QueryRange (string rangename)
-		{
-			System.DateTime today = System.DateTime.Today;
-			System.DateTime startdate = today;
-			System.DateTime enddate = today;
-			bool clear = false;
-
-			switch (rangename) {
-			case "today":
-				startdate = today;
-				enddate = today;
-				break;
-			case "yesterday":
-				startdate = today.AddDays (-1);
-				enddate = today.AddDays (-1);
-				break;
-			case "last7days":
-				startdate = today.AddDays (-6);
-				enddate = today;
-				break;
-			case "last30days":
-				startdate = today.AddDays (-29);
-				enddate = today;
-				break;
-			case "last90days":
-				startdate = today.AddDays (-89);
-				enddate = today;
-				break;
-			case "last360days":
-				startdate = today.AddDays (-359);
-				enddate = today;
-				break;
-			case "currentweek":
-				startdate = today.AddDays (System.DayOfWeek.Sunday - today.DayOfWeek); // Gets to Sunday
-				startdate = startdate.AddDays (1); // Advance to Monday according to ISO 8601
-				enddate = today;
-				break;
-			case "previousweek":
-				startdate = today.AddDays (System.DayOfWeek.Sunday - today.DayOfWeek); // Gets to Sunday
-				startdate = startdate.AddDays (1); // Advance to Monday according to ISO 8601
-				startdate = startdate.AddDays(-7); // Back 7 days
-				enddate = startdate.AddDays (6);
-				break;
-			case "thismonth":
-				startdate = new System.DateTime(today.Year, today.Month, 1); // the first of the month
-				enddate = today; // we don't have pictures in the future
-				break;
-			case "previousmonth":
-				startdate = new System.DateTime((today.AddMonths(-1)).Year, (today.AddMonths(-1)).Month, 1);
-				enddate = new System.DateTime((today.AddMonths(-1)).Year, (today.AddMonths(-1)).Month, System.DateTime.DaysInMonth((today.AddMonths(-1)).Year,(today.AddMonths(-1)).Month));
-				break;
-			case "thisyear":
-				startdate = new System.DateTime(today.Year, 1, 1); // Jan 1st of this year
-				enddate = today;
-				break;
-			case "previousyear":
-				startdate = new System.DateTime((today.AddYears(-1)).Year, 1, 1); // Jan 1st of prev year
-				enddate = new System.DateTime((today.AddYears(-1)).Year, 12, 31); // Dec, 31 of prev year
-				break;
-			case "alldates":
-				clear = true;
-				break;
-			case "customizedrange":
-				startdate = start_dateedit.DateTimeOffset.Date;
-				enddate = end_dateedit.DateTimeOffset.Date;
-				break;
-			default:
-				clear = true;
-				break;
-			}	
-			if (!clear)
-				return new DateRange (startdate, enddate.Add (new System.TimeSpan(23,59,59)));
-			else
-				return null;
-		}
-	
-		void HandleDateEditChanged (object o, EventArgs args)
-		{
-			period_combobox.Changed -= HandlePeriodComboboxChanged;
-           	 	period_combobox.Active = System.Array.IndexOf (ranges, "customizedrange");
-			period_combobox.Changed += HandlePeriodComboboxChanged;
-		}
-
-		void HandlePeriodComboboxChanged (object o, EventArgs args)
-		{
-			start_dateedit.DateChanged -= HandleDateEditChanged;
-			((Gtk.Entry) start_dateedit.Children [0] as Gtk.Entry).Changed -= HandleDateEditChanged;
-			end_dateedit.DateChanged -= HandleDateEditChanged;
-			((Gtk.Entry) end_dateedit.Children [0] as Gtk.Entry).Changed -= HandleDateEditChanged;
-	
-			ComboBox combo = o as ComboBox;
-			if (o == null)
-				return;
-
-			start_dateedit.Sensitive = (combo.Active != System.Array.IndexOf (ranges, "alldates"));
-			end_dateedit.Sensitive = (combo.Active != System.Array.IndexOf (ranges, "alldates"));
-
-			DateRange range = QueryRange (period_combobox.Active);
-			if (range != null) {
-				start_dateedit.DateTimeOffset = range.Start;
-				end_dateedit.DateTimeOffset = range.End;
-			}
-			
-			start_dateedit.DateChanged += HandleDateEditChanged;
-			((Gtk.Entry) start_dateedit.Children [0] as Gtk.Entry).Changed += HandleDateEditChanged;
-			end_dateedit.DateChanged += HandleDateEditChanged;
-			((Gtk.Entry) end_dateedit.Children [0] as Gtk.Entry).Changed += HandleDateEditChanged;
-		}
-	}
-}
diff --git a/src/UI.Dialog/EditExceptionDialog.cs b/src/UI.Dialog/EditExceptionDialog.cs
deleted file mode 100644
index 2ce147a..0000000
--- a/src/UI.Dialog/EditExceptionDialog.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * FSpot.UI.Dialog.EditExceptionDialog.cs
- *
- * Author(s)
- *	Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Mono.Unix;
-using Gtk;
-using Hyena;
-using Hyena.Widgets;
-
-namespace FSpot.UI.Dialog
-{
-	public class EditException : Exception 
-	{
-		IBrowsableItem item;
-
-		public IBrowsableItem Item {
-			get { return item; }
-		}
-
-		public EditException (IBrowsableItem item, Exception e) : base (
-                        String.Format (Catalog.GetString ("Received exception \"{0}\". Unable to save photo {1}"),
-				       e.Message, item.Name), e)
-		{
-			this.item = item;
-		}
-	}
-
-	public class EditExceptionDialog : HigMessageDialog
-	{
-		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))
-		{
-			foreach (Exception e in errors)
-				Log.Exception (e);
-		}
-
-		public EditExceptionDialog (Gtk.Window parent, Exception e, IBrowsableItem item) : this (parent, new EditException (item, e))
-		{
-		}
-	       
-		public EditExceptionDialog (Gtk.Window parent, Exception e) : this (parent, new Exception [] { e })
-		{
-		}
-
-		private static string GenerateMessage (Exception [] errors)
-		{
-			string desc = String.Empty;
-			for (int i = 0; i < errors.Length && i < MaxErrors; i++) {
-				Exception e = errors [i];
-				desc += e.Message + Environment.NewLine;
-			}
-			return desc;
-		}
-	}
-}
diff --git a/src/UI.Dialog/EditTagDialog.cs b/src/UI.Dialog/EditTagDialog.cs
deleted file mode 100644
index 06db020..0000000
--- a/src/UI.Dialog/EditTagDialog.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * FSpot.UI.Dialog.EditTagDialog.cs
- *
- * Author(s):
- * 	Larry Ewing <lewing at novell.com>
- * 	Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2003-2009 Novell, Inc,
- * Copyright (c) 2007 Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.Collections;
-using Mono.Unix;
-using Gtk;
-
-namespace FSpot.UI.Dialog
-{
-	public class EditTagDialog : BuilderDialog {
-		Db db;
-		Tag tag;
-
-		[GtkBeans.Builder.Object] Button ok_button;
-		[GtkBeans.Builder.Object] Entry tag_name_entry;
-		[GtkBeans.Builder.Object] Label already_in_use_label;
-		[GtkBeans.Builder.Object] Gtk.Image icon_image;
-		[GtkBeans.Builder.Object] OptionMenu category_option_menu;
-
-
-		public EditTagDialog (Db db, Tag t, Gtk.Window parent_window) : base ("EditTagDialog.ui", "edit_tag_dialog")
-		{
-			this.db = db;
-			tag = t;
-			TransientFor = parent_window;
-
-			orig_name = last_valid_name = t.Name;
-			tag_name_entry.Text = t.Name;
-
-			icon_image.Pixbuf = t.Icon;
-			Cms.Profile screen_profile;
-			if (icon_image.Pixbuf != null && FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
-				icon_image.Pixbuf = icon_image.Pixbuf.Copy();
-				FSpot.ColorManagement.ApplyProfile (icon_image.Pixbuf, screen_profile);
-			}
-			PopulateCategoryOptionMenu  (t);
-			
-			tag_name_entry.GrabFocus ();
-
-			category_option_menu.Changed += HandleTagNameEntryChanged;
-		}
-
-		string orig_name;
-		string last_valid_name;
-		public string TagName {
-			get { return last_valid_name; }
-		}
-
-		public Category TagCategory {
-			get { return categories [category_option_menu.History] as Category;}
-		}
-
-		ArrayList categories;
-
-		void HandleTagNameEntryChanged (object sender, EventArgs args)
-		{
-			string name = tag_name_entry.Text;
-
-			if (name == String.Empty) {
-				ok_button.Sensitive = false;
-				already_in_use_label.Markup = String.Empty;
-			} else if (TagNameExistsInCategory (name, db.Tags.RootCategory)
-				   && String.Compare(name, orig_name, true) != 0) {
-				ok_button.Sensitive = false;
-				already_in_use_label.Markup = "<small>" + Catalog.GetString ("This name is already in use") + "</small>";
-			} else {
-				ok_button.Sensitive = true;
-				already_in_use_label.Markup = String.Empty;
-				last_valid_name = tag_name_entry.Text;
-			}
-		}
-
-		bool TagNameExistsInCategory (string name, Category category)
-		{
-			foreach (Tag tag in category.Children) {
-				if (String.Compare(tag.Name, name, true) == 0)
-					return true;
-
-				if (tag is Category && TagNameExistsInCategory (name, tag as Category))
-					return true;
-			}
-
-			return false;
-		}
-
-		void PopulateCategories (ArrayList categories, Category parent)
-		{
-			foreach (Tag tag in parent.Children) {
-				if (tag is Category && tag != this.tag && !this.tag.IsAncestorOf (tag)) {
-					categories.Add (tag);
-					PopulateCategories (categories, tag as Category);
-				}
-			}
-		}
-
-		void HandleIconButtonClicked (object sender, EventArgs args)
-		{
-			EditTagIconDialog dialog = new EditTagIconDialog (db, tag, this);
-
-			ResponseType response = (ResponseType) dialog.Run ();
-			if (response == ResponseType.Ok) {
-				if (dialog.ThemeIconName != null) {
-					tag.ThemeIconName = dialog.ThemeIconName;
-				} else {
-					tag.ThemeIconName = null;
-					tag.Icon = dialog.PreviewPixbuf;
-				}
-			} else if (response == (ResponseType)1)
-				tag.Icon = null;
-
-			Cms.Profile screen_profile;
-			if (tag.Icon != null && FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
-				icon_image.Pixbuf = tag.Icon.Copy();
-				FSpot.ColorManagement.ApplyProfile(icon_image.Pixbuf, screen_profile);
-			} else
-				icon_image.Pixbuf = tag.Icon;
-			
-			dialog.Destroy ();
-		}
-
-		void PopulateCategoryOptionMenu (Tag t)
-		{
-			int history = 0;
-			int i = 0;
-			categories = new ArrayList ();
-			Category root = db.Tags.RootCategory;
-			categories.Add (root);
-			PopulateCategories (categories, root);
-
-			Menu menu = new Menu ();
-
-			foreach (Category category in categories) {
-				if (t.Category == category)
-					history = i;
-				
-				i++;
-				
-				menu.Append (TagMenu.TagMenuItem.IndentedItem (category));
-			}
-			
-			category_option_menu.Sensitive = true;
-
-			menu.ShowAll ();
-			category_option_menu.Menu = menu;
-			category_option_menu.SetHistory ((uint)history);
-		}
-	}
-}
-
diff --git a/src/UI.Dialog/EditTagIconDialog.cs b/src/UI.Dialog/EditTagIconDialog.cs
deleted file mode 100644
index 059d60d..0000000
--- a/src/UI.Dialog/EditTagIconDialog.cs
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * FSpot.UI.Dialog.EditTagIconDialog.cs
- *
- * Author(s):
- * 	Larry Ewing <lewing at novell.com>
- * 	Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2003-2009 Novell, Inc,
- * Copyright (c) 2007 Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using Mono.Unix;
-using Gtk;
-using FSpot.Widgets;
-using FSpot.Utils;
-using FSpot.Imaging;
-using Hyena;
-using Hyena.Widgets;
-
-namespace FSpot.UI.Dialog
-{
-	public class EditTagIconDialog : BuilderDialog {
-		FSpot.PhotoQuery query;
-		PhotoImageView image_view;
-		Gtk.IconView icon_view;
-		ListStore icon_store;
-		string icon_name = null;
-		Gtk.FileChooserButton external_photo_chooser;
-
-		[GtkBeans.Builder.Object] Gtk.Image preview_image;
-		[GtkBeans.Builder.Object] Gtk.ScrolledWindow photo_scrolled_window;
-		[GtkBeans.Builder.Object] Gtk.ScrolledWindow icon_scrolled_window;
-		[GtkBeans.Builder.Object] Label photo_label;
-		[GtkBeans.Builder.Object] Label from_photo_label;
-		[GtkBeans.Builder.Object] SpinButton photo_spin_button;
-		[GtkBeans.Builder.Object] HBox external_photo_chooser_hbox;
-		
-		public EditTagIconDialog (Db db, Tag t, Gtk.Window parent_window) : base ("EditTagIconDialog.ui", "edit_tag_icon_dialog")
-		{
-			TransientFor = parent_window;
-			Title = String.Format (Catalog.GetString ("Edit Icon for Tag {0}"), t.Name);
-
-			preview_pixbuf = t.Icon;
-			Cms.Profile screen_profile;
-			if (preview_pixbuf != null && FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) { 
-				preview_image.Pixbuf = preview_pixbuf.Copy ();
-				ColorManagement.ApplyProfile (preview_image.Pixbuf, screen_profile);
-			} else
-				preview_image.Pixbuf = preview_pixbuf;
-
-			query = new FSpot.PhotoQuery (db.Photos);
-			
-			if (db.Tags.Hidden != null)
-				query.Terms = FSpot.OrTerm.FromTags (new Tag [] {t});
-			else 
-				query.Terms = new FSpot.Literal (t);
-
-			image_view = new PhotoImageView (query) {CropHelpers = false};
-			image_view.SelectionXyRatio = 1.0;
-			image_view.SelectionChanged += HandleSelectionChanged;
-			image_view.PhotoChanged += HandlePhotoChanged;
-
-			external_photo_chooser = new Gtk.FileChooserButton (Catalog.GetString ("Select Photo from file"),
-					Gtk.FileChooserAction.Open);
-
-			external_photo_chooser.Filter = new FileFilter();
-			external_photo_chooser.Filter.AddPixbufFormats();
-                        external_photo_chooser.LocalOnly = false;
-			external_photo_chooser_hbox.PackStart (external_photo_chooser);
-			external_photo_chooser.Show ();
-			external_photo_chooser.SelectionChanged += HandleExternalFileSelectionChanged;
-
-			photo_scrolled_window.Add (image_view);
-
-			if (query.Count > 0) {
-				photo_spin_button.Wrap = true;
-				photo_spin_button.Adjustment.Lower = 1.0;
-				photo_spin_button.Adjustment.Upper = (double) query.Count;
-				photo_spin_button.Adjustment.StepIncrement = 1.0;
-				photo_spin_button.ValueChanged += HandleSpinButtonChanged;
-				
-				image_view.Item.Index = 0;
-			} else {
-				from_photo_label.Markup = String.Format (Catalog.GetString (
-					"\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."), t.Name); 
-				photo_scrolled_window.Visible = false;
-				photo_label.Visible = false;
-				photo_spin_button.Visible = false;
-			}			
-
-			icon_store = new ListStore (typeof (string), typeof (Gdk.Pixbuf));
-
-			icon_view = new Gtk.IconView (icon_store); 
-			icon_view.PixbufColumn = 1;
-			icon_view.SelectionMode = SelectionMode.Single;
-			icon_view.SelectionChanged += HandleIconSelectionChanged;
-
-			icon_scrolled_window.Add (icon_view);
-
-			icon_view.Show();
-
-			image_view.Show ();
-
-			FSpot.Delay fill_delay = new FSpot.Delay (FillIconView);
-			fill_delay.Start ();
-		}
-
-		public FSpot.BrowsablePointer Item {
-			get { return image_view.Item; }
-		}
-
-		Gdk.Pixbuf preview_pixbuf;
-		public Gdk.Pixbuf PreviewPixbuf {
-			get { return preview_pixbuf; }
-			set {
-				icon_name = null;
-				preview_pixbuf = value;
-				Cms.Profile screen_profile;
-				if (value!= null && FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) { 
-					preview_image.Pixbuf = value.Copy ();
-					ColorManagement.ApplyProfile (preview_image.Pixbuf, screen_profile);
-				} else
-					preview_image.Pixbuf = value;
-
-			}
-
-		}
-
-		public string ThemeIconName {
-			get { return icon_name; }
-			set {
-				icon_name = value;	
-				PreviewPixbuf = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, value, 48, (IconLookupFlags) 0);
-			}
-			
-		}
-		
-		void HandleSpinButtonChanged (object sender, EventArgs args)
-		{
-			int value = photo_spin_button.ValueAsInt - 1;
-			
-			image_view.Item.Index = value;
-		}
-
-		void HandleExternalFileSelectionChanged (object sender, EventArgs args)
-		{	//Note: The filter on the FileChooserButton's dialog means that we will have a Pixbuf compatible uri here
-			CreateTagIconFromExternalPhoto ();
-		}
-
-		void CreateTagIconFromExternalPhoto ()
-		{
-			try {
-				using (var img = ImageFile.Create (new SafeUri(external_photo_chooser.Uri, true))) {
-					using (Gdk.Pixbuf external_image = img.Load ()) {
-						PreviewPixbuf = PixbufUtils.TagIconFromPixbuf (external_image);
-					}
-				}
-			} catch (Exception) {
-				string caption = Catalog.GetString ("Unable to load image");
-				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);
-				md.Run();
-				md.Destroy();
-			}
-		}
-
-		void HandleSelectionChanged (object sender, EventArgs e)
-		{
-			int x = image_view.Selection.X;
-			int y = image_view.Selection.Y;
-			int width = image_view.Selection.Width;
-			int height = image_view.Selection.Height;
-		       
-			if (image_view.Pixbuf != null) {
-				if (image_view.Selection != Gdk.Rectangle.Zero) {
-					using (var tmp = new Gdk.Pixbuf (image_view.Pixbuf, x, y, width, height)) {
-						Gdk.Pixbuf transformed = FSpot.Utils.PixbufUtils.TransformOrientation (tmp, image_view.PixbufOrientation);
-						PreviewPixbuf = PixbufUtils.TagIconFromPixbuf (transformed);
-						transformed.Dispose ();
-					}
-				} else {
-					Gdk.Pixbuf transformed = FSpot.Utils.PixbufUtils.TransformOrientation (image_view.Pixbuf, image_view.PixbufOrientation);
-					PreviewPixbuf = PixbufUtils.TagIconFromPixbuf (transformed);
-					transformed.Dispose ();
-				}
-			}
-		}
-
-		public void HandlePhotoChanged (object sender, EventArgs e)
-		{
-			int item = image_view.Item.Index;
-			photo_label.Text = String.Format (Catalog.GetString ("Photo {0} of {1}"), 
-							  item + 1, query.Count);
-
-			photo_spin_button.Value = item + 1;
-			HandleSelectionChanged (null, null);
-		}
-
-		public void HandleIconSelectionChanged (object o, EventArgs args)
-		{
-			if (icon_view.SelectedItems.Length == 0)
-				return;
-
-			TreeIter iter;
-			icon_store.GetIter (out iter, icon_view.SelectedItems [0]); 
-			ThemeIconName = (string) icon_store.GetValue (iter, 0);
-		}
-
-		public bool FillIconView ()
-		{
-			icon_store.Clear ();
-			string [] icon_list = FSpot.Global.IconTheme.ListIcons ("Emblems");
-			foreach (string item_name in icon_list)
-				icon_store.AppendValues (item_name, GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, item_name, 32, (IconLookupFlags) 0));
-			return false;
-		}
-	}
-}
diff --git a/src/UI.Dialog/ExceptionDialog.cs b/src/UI.Dialog/ExceptionDialog.cs
deleted file mode 100644
index 5b35b83..0000000
--- a/src/UI.Dialog/ExceptionDialog.cs
+++ /dev/null
@@ -1,188 +0,0 @@
-using System;
-using System.Reflection;
-using System.Resources;
-using System.Diagnostics;
-using System.Collections;
-using System.IO;
-using Mono.Unix;
-using Gtk;
-
-namespace FSpot.UI.Dialog
-{
-    public class ExceptionDialog : Gtk.Dialog
-    {
-        private AccelGroup accel_group;
-        private string debugInfo;
-        
-        public ExceptionDialog(Exception e) : base()
-        {
-            debugInfo = BuildExceptionMessage(e);
-           
-            HasSeparator = false;
-            BorderWidth = 5;
-            Resizable = false;
-            Title = Catalog.GetString("F-Spot Encountered a Fatal Error");
-            
-            VBox.Spacing = 12;
-            ActionArea.Layout = ButtonBoxStyle.End;
-
-            accel_group = new AccelGroup();
-		    AddAccelGroup(accel_group);
-        
-            HBox hbox = new HBox(false, 12);
-            hbox.BorderWidth = 5;
-            VBox.PackStart(hbox, false, false, 0);
-        
-            Image image = new Image(Stock.DialogError, IconSize.Dialog);
-            image.Yalign = 0.0f;
-            hbox.PackStart(image, true, true, 0);
-
-            VBox label_vbox = new VBox(false, 0);
-            label_vbox.Spacing = 12;
-            hbox.PackStart(label_vbox, false, false, 0);
-
-            Label label = new Label(String.Format("<b><big>{0}</big></b>", GLib.Markup.EscapeText(Title)));
-            label.UseMarkup = true;
-            label.Justify = Justification.Left;
-            label.LineWrap = true;
-            label.SetAlignment(0.0f, 0.5f);
-            label_vbox.PackStart(label, false, false, 0);
-
-            label = new Label(e.Message);
-                
-            label.UseMarkup = true;
-            label.Justify = Gtk.Justification.Left;
-            label.LineWrap = true;
-            label.SetAlignment(0.0f, 0.5f);
-            label_vbox.PackStart(label, false, false, 0);
-
-            Label details_label = new Label(String.Format("<b>{0}</b>", 
-                GLib.Markup.EscapeText(Catalog.GetString("Error Details"))));
-            details_label.UseMarkup = true;
-            Expander details_expander = new Expander("Details");
-            details_expander.LabelWidget = details_label;
-            label_vbox.PackStart(details_expander, true, true, 0);
-
-            ScrolledWindow scroll = new ScrolledWindow();
-            TextView view = new TextView();
-            
-            scroll.HscrollbarPolicy = PolicyType.Automatic;
-            scroll.VscrollbarPolicy = PolicyType.Automatic;
-            scroll.AddWithViewport(view);
-            
-            scroll.SetSizeRequest(450, 250);
-			
-			view.Editable = false;
-			view.Buffer.Text = debugInfo;
-			
-			details_expander.Add(scroll);
-			
-            hbox.ShowAll();
-
-			AddButton(Stock.Close, ResponseType.Close, true);
-        }
-
-        private void AddButton(string stock_id, Gtk.ResponseType response, bool is_default)
-        {
-            Button button = new Button(stock_id);
-            button.CanDefault = true;
-            button.Show();
-
-            AddActionWidget(button, response);
-
-            if(is_default) {
-                DefaultResponse = response;
-                button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Return, 
-                    0, AccelFlags.Visible);
-            }
-        }
-        
-        private string BuildExceptionMessage(Exception e)
-        {
-            System.Text.StringBuilder msg = new System.Text.StringBuilder();
-            
-            msg.Append(Catalog.GetString("An unhandled exception was thrown: "));
-            msg.Append(e.Message);
-            
-            msg.Append(String.Format("{0}{0}", Environment.NewLine));
-            msg.Append(e.StackTrace);
-            
-            msg.Append(Environment.NewLine);
-            
-            msg.Append(".NET Version: " + Environment.Version.ToString());
-            
-            msg.Append(String.Format("{0}{0}Assembly Version Information:{0}{0}", Environment.NewLine));
-            
-            foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
-		    AssemblyName name = asm.GetName();
-                    msg.Append(name.Name + " (" + name.Version.ToString () + ")" + Environment.NewLine);
-		}
-            
-            msg.Append(Environment.NewLine + "Platform Information: " + BuildPlatformString());
-            
-            msg.Append(String.Format("{0}{0}Distribution Information:{0}{0}", Environment.NewLine));
-            
-            Hashtable lsb = LsbVersionInfo.Harvest;
-            
-            foreach(string lsbfile in lsb.Keys) {
-                msg.Append("[" + lsbfile + "]" + Environment.NewLine);
-                msg.Append(lsb[lsbfile] + Environment.NewLine);
-            }
-            
-            return msg.ToString();
-        }
-        
-        private string BuildPlatformString()
-        {
-            ProcessStartInfo startInfo = new ProcessStartInfo();
-            startInfo.Arguments = "-sirom";
-            startInfo.RedirectStandardOutput = true;
-            startInfo.RedirectStandardError = true;
-            startInfo.UseShellExecute = false;
-            
-            foreach(string unameprog in new string [] { 
-                "/usr/bin/uname", "/bin/uname", "/usr/local/bin/uname",
-                "/sbin/uname", "/usr/sbin/uname", "/usr/local/sbin/uname"}) {
-                try {
-                    startInfo.FileName = unameprog;
-                    Process uname = Process.Start(startInfo);
-                    return uname.StandardOutput.ReadLine().Trim();
-                } catch(Exception) {
-                    continue;
-                }
-            }
-            
-            return null;
-        }
-        
-        private class LsbVersionInfo
-        {
-            private string [] filesToCheck = {
-                "*-release",
-                "slackware-version",
-                "debian_version"
-            };
-            
-            private Hashtable harvest = new Hashtable(); 
-            
-            public LsbVersionInfo()
-            {
-                foreach(string pattern in filesToCheck) {
-                    foreach(string filename in Directory.GetFiles("/etc/", pattern)) {
-                        using(FileStream fs = File.OpenRead(filename)) {
-                            harvest[filename] = (new StreamReader(fs)).ReadToEnd();
-                        }
-                    }
-                }
-            }
-            
-            public Hashtable Findings {
-                get { return harvest; }
-            }
-            
-            public static Hashtable Harvest {
-                get { return (new LsbVersionInfo()).Findings; }
-            }
-        }
-    }
-}
diff --git a/src/UI.Dialog/GladeDialog.cs b/src/UI.Dialog/GladeDialog.cs
deleted file mode 100644
index c61d5c5..0000000
--- a/src/UI.Dialog/GladeDialog.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * FSpot.UI.Dialog.GladeDialog
- *
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using System;
-
-namespace FSpot.UI.Dialog 
-{
-	public class GladeDialog
-	{
-		protected string dialog_name;
-		protected Glade.XML xml;
-		private Gtk.Dialog dialog;
-		
-		protected GladeDialog ()
-		{
-		}
-
-		public GladeDialog (string widget_name) : this (widget_name, "f-spot.glade")
-		{
-		}
-
-		public GladeDialog (string widget_name, string resource_name)
-		{
-			if (widget_name == null)
-				throw new ArgumentNullException ("widget_name");
-			if (resource_name == null)
-				throw new ArgumentNullException ("resource_name");
-
-			CreateDialog (widget_name, resource_name);
-		}
-
-		protected void CreateDialog (string widget_name)
-		{
-			CreateDialog (widget_name, "f-spot.glade");
-		}
-
-		protected void CreateDialog (string widget_name, string resource_name)
-		{
-			this.dialog_name = widget_name;
-			xml = new Glade.XML (null, resource_name, widget_name, "f-spot");
-			xml.Autoconnect (this);
-		}
-
-		public Gtk.Dialog Dialog {
-			get {
-				if (dialog == null)
-					dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
-				
-				return dialog;
-			}
-		}
-	}
-}
diff --git a/src/UI.Dialog/ImportDialog.cs b/src/UI.Dialog/ImportDialog.cs
deleted file mode 100644
index 189f209..0000000
--- a/src/UI.Dialog/ImportDialog.cs
+++ /dev/null
@@ -1,347 +0,0 @@
-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
-{
-    public class ImportDialog : BuilderDialog
-    {
-        static readonly string select_folder_label = Catalog.GetString ("Choose Folder...");
-        private ImportController Controller { get; set; }
-        private TreeStore Sources { get; set; }
-
-        private static Dictionary<string, ImportSource> history_sources = new Dictionary<string, ImportSource> ();
-
-        [GtkBeans.Builder.Object] Button cancel_button;
-        [GtkBeans.Builder.Object] Button import_button;
-        [GtkBeans.Builder.Object] CheckButton copy_check;
-        [GtkBeans.Builder.Object] CheckButton duplicate_check;
-        [GtkBeans.Builder.Object] CheckButton recurse_check;
-        [GtkBeans.Builder.Object] CheckButton remove_check;
-        [GtkBeans.Builder.Object] Button remove_warning_button;
-        [GtkBeans.Builder.Object] ComboBox sources_combo;
-        [GtkBeans.Builder.Object] HBox tagentry_box;
-        [GtkBeans.Builder.Object] HPaned import_hpaned;
-        [GtkBeans.Builder.Object] ProgressBar progress_bar;
-        [GtkBeans.Builder.Object] ScrolledWindow icon_scrolled;
-        [GtkBeans.Builder.Object] ScrolledWindow photo_scrolled;
-
-        private PhotoImageView photo_view;
-        private TagEntry tag_entry;
-
-        public ImportDialog (ImportController controller, Window parent) : base ("import.ui", "import_dialog")
-        {
-            Controller = controller;
-            BuildUI (parent);
-            ResetPreview ();
-            LoadPreferences ();
-            ScanSources ();
-            ConnectEvents ();
-        }
-
-        void BuildUI (Window parent)
-        {
-            TransientFor = parent;
-            WindowPosition = WindowPosition.CenterOnParent;
-
-            photo_view = new PhotoImageView (Controller.Photos);
-            photo_scrolled.Add (photo_view);
-            photo_scrolled.SetSizeRequest (200, 200);
-            photo_view.Show ();
-
-            GtkUtil.ModifyColors (photo_scrolled);
-            GtkUtil.ModifyColors (photo_view);
-
-            var tray = new ScalingIconView (Controller.Photos);
-            tray.Selection.Changed += (c) => {
-                if (tray.Selection.Count > 0)
-                    photo_view.Item.Index = tray.Selection.Ids[0];
-            };
-            icon_scrolled.Add (tray);
-            tray.DisplayTags = false;
-            tray.Show ();
-
-            progress_bar.Hide ();
-
-            import_button.Sensitive = false;
-
-            tag_entry = new TagEntry (App.Instance.Database.Tags, false);
-            tag_entry.UpdateFromTagNames (new string []{});
-            tagentry_box.Add (tag_entry);
-            tag_entry.Show ();
-        }
-
-        void ResetPreview ()
-        {
-            photo_view.Pixbuf = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "f-spot", 128, (Gtk.IconLookupFlags)0);
-            photo_view.ZoomFit (false);
-        }
-
-        void LoadPreferences ()
-        {
-            if (Preferences.Get<int> (Preferences.IMPORT_WINDOW_WIDTH) > 0) {
-                Resize (Preferences.Get<int> (Preferences.IMPORT_WINDOW_WIDTH), Preferences.Get<int> (Preferences.IMPORT_WINDOW_HEIGHT));
-            }
-
-            if (FSpot.Preferences.Get<int> (Preferences.IMPORT_WINDOW_PANE_POSITION) > 0) {
-                import_hpaned.Position = Preferences.Get<int> (Preferences.IMPORT_WINDOW_PANE_POSITION);
-            }
-
-            copy_check.Active = Controller.CopyFiles;
-            recurse_check.Active = Controller.RecurseSubdirectories;
-            duplicate_check.Active = Controller.DuplicateDetect;
-            remove_check.Active = Controller.RemoveOriginals;
-            remove_check.Sensitive = copy_check.Active;
-            remove_warning_button.Sensitive = copy_check.Active && remove_check.Active;
-        }
-
-        void ScanSources ()
-        {
-            // Populates the source combo box
-            Sources = new TreeStore (typeof(ImportSource), typeof(string), typeof(string), typeof(bool));
-            sources_combo.Model = Sources;
-            sources_combo.RowSeparatorFunc = (m, i) => (m.GetValue (i, 1) as string) == String.Empty;
-            var render = new CellRendererPixbuf ();
-            sources_combo.PackStart (render, false);
-            sources_combo.SetAttributes (render, "icon-name", 2, "sensitive", 3);
-            var render2 = new CellRendererText ();
-            sources_combo.PackStart (render2, true);
-            sources_combo.SetAttributes (render2, "text", 1, "sensitive", 3);
-
-            GLib.Idle.Add (() => {
-                PopulateSourceCombo (null);
-                QueueDraw ();
-                return false;
-            });
-        }
-
-        void PopulateSourceCombo (ImportSource source_to_activate)
-        {
-            int activate_index = 0;
-            sources_combo.Changed -= OnSourceComboChanged;
-            Sources.Clear ();
-            Sources.AppendValues (null, Catalog.GetString ("Choose Import source..."), String.Empty, true);
-            Sources.AppendValues (null, select_folder_label, "folder", true);
-            Sources.AppendValues (null, String.Empty, String.Empty);
-            bool mount_added = false;
-            foreach (var source in Controller.Sources) {
-                if (source == source_to_activate) {
-                    activate_index = Sources.IterNChildren ();
-                }
-                Sources.AppendValues (source, source.Name, source.IconName, true);
-                mount_added = true;
-            }
-            if (!mount_added) {
-                Sources.AppendValues (null, Catalog.GetString ("(No Cameras Detected)"), String.Empty, false);
-            }
-
-            if (history_sources.Count > 0) {
-                Sources.AppendValues (null, String.Empty, String.Empty);
-                foreach (var source in history_sources.Values) {
-                    if (source == source_to_activate) {
-                        activate_index = Sources.IterNChildren ();
-                    }
-                    Sources.AppendValues (source, source.Name, source.IconName, true);
-                }
-            }
-            sources_combo.Changed += OnSourceComboChanged;
-            sources_combo.Active = activate_index;
-        }
-
-        void ConnectEvents ()
-        {
-            Controller.StatusEvent += OnControllerStatusEvent;
-            Controller.ProgressUpdated += OnControllerProgressUpdated;
-            copy_check.Toggled += (o, args) => {
-                Controller.CopyFiles = copy_check.Active;
-                remove_check.Sensitive = copy_check.Active;
-                remove_warning_button.Sensitive = copy_check.Active && remove_check.Active;
-            };
-            recurse_check.Toggled += (o, args) => { Controller.RecurseSubdirectories = recurse_check.Active; };
-            duplicate_check.Toggled += (o, args) => { Controller.DuplicateDetect = duplicate_check.Active; };
-            remove_check.Toggled += (o, args) => {
-                Controller.RemoveOriginals = remove_check.Active;
-                remove_warning_button.Sensitive = copy_check.Active && remove_check.Active;
-            };
-            import_button.Clicked += (o, args) => StartImport ();
-            cancel_button.Clicked += (o, args) => CancelImport ();
-            remove_warning_button.Clicked += (o, args) => {
-                var dialog = new MessageDialog (this, DialogFlags.Modal, MessageType.Warning, ButtonsType.Ok, true,
-                        Catalog.GetString ("Checking this box will remove the imported photos from the camera after the import finished successfully.\n\nIt is generally recommended to backup your photos before removing them from the camera. <b>Use this option at your own risk!</b>"));
-                dialog.Title = Catalog.GetString ("Warning");
-                dialog.Response += (s, arg) => {
-                    dialog.Destroy ();
-                };
-                dialog.Run ();
-            };
-            Response += (o, args) => {
-                if (args.ResponseId == ResponseType.DeleteEvent) {
-                    CancelImport ();
-                }
-            };
-        }
-
-        void ShowFolderSelector ()
-        {
-            var file_chooser = new FileChooserDialog (
-                Catalog.GetString ("Import"), this,
-                FileChooserAction.SelectFolder,
-                Stock.Cancel, ResponseType.Cancel,
-                Stock.Open, ResponseType.Ok);
-
-            file_chooser.SelectMultiple = false;
-            file_chooser.LocalOnly = false;
-
-            int response = file_chooser.Run ();
-            if ((ResponseType) response == ResponseType.Ok) {
-                var uri = new SafeUri (file_chooser.Uri, true);
-                SwitchToFolderSource (uri);
-            }
-
-            file_chooser.Destroy ();
-        }
-
-        public void SwitchToFolderSource (SafeUri uri)
-        {
-            ImportSource source = null;
-            if (!history_sources.TryGetValue (uri, out source)) {
-                var name = uri.GetFilename ();
-                source = new FileImportSource (uri, name, "folder");
-                history_sources[uri] = source;
-            }
-
-            PopulateSourceCombo (source);
-            Controller.ActiveSource = source;
-        }
-
-        int current_index = -1;
-        void OnSourceComboChanged (object sender, EventArgs args)
-        {
-            // Prevent double firing.
-            if (sources_combo.Active == current_index) {
-                Log.Debug ("Skipping double fire!");
-                return;
-            } else {
-                current_index = sources_combo.Active;
-            }
-
-            TreeIter iter;
-            sources_combo.GetActiveIter (out iter);
-            var source = Sources.GetValue (iter, 0) as ImportSource;
-            if (source == null) {
-                var label = (string) Sources.GetValue (iter, 1);
-                if (label == select_folder_label) {
-                    ShowFolderSelector ();
-                    return;
-                } else {
-                    sources_combo.Active = 0;
-                    return;
-                }
-            }
-            Controller.ActiveSource = source;
-        }
-
-        void OnControllerStatusEvent (ImportEvent evnt)
-        {
-            Log.DebugFormat ("Received controller event: {0}", evnt);
-
-            switch (evnt) {
-                case ImportEvent.SourceChanged:
-                    HideScanSpinner ();
-                    ResetPreview ();
-                    import_button.Sensitive = true;
-                    break;
-
-                case ImportEvent.PhotoScanStarted:
-                    ShowScanSpinner ();
-                    break;
-
-                case ImportEvent.PhotoScanFinished:
-                    HideScanSpinner ();
-                    break;
-
-                case ImportEvent.ImportStarted:
-                    ShowImportProgress ();
-                    break;
-
-                case ImportEvent.ImportFinished:
-                    Controller = null;
-                    Destroy ();
-                    break;
-
-                case ImportEvent.ImportError:
-                    // TODO
-                    break;
-            }
-        }
-
-        void OnControllerProgressUpdated (int current, int total)
-        {
-            var importing_label = Catalog.GetString ("Importing Photos: {0} of {1}...");
-            progress_bar.Text = String.Format (importing_label, current, total);
-            progress_bar.Fraction = (double) current / Math.Max (total, 1);
-        }
-
-        void StartImport ()
-        {
-            Controller.AttachTags (tag_entry.GetTypedTagNames ());
-            Controller.StartImport ();
-            import_button.Sensitive = false;
-            OptionsSensitive = false;
-        }
-
-        void CancelImport ()
-        {
-            Controller.CancelImport ();
-            Controller = null;
-            Destroy ();
-        }
-
-        bool pulse_timeout_running = false;
-
-        void ShowImportProgress ()
-        {
-            progress_bar.Text = Catalog.GetString ("Importing photos...");
-            progress_bar.Show ();
-        }
-
-        void ShowScanSpinner ()
-        {
-            // TODO: Using a GtkSpinner would be nicer here.
-            progress_bar.Text = Catalog.GetString ("Searching for photos... (You can already click Import to continue)");
-            progress_bar.Show ();
-            pulse_timeout_running = true;
-            GLib.Timeout.Add (40, () => {
-                if (!pulse_timeout_running) {
-                    return false;
-                }
-
-                progress_bar.Pulse ();
-                return pulse_timeout_running;
-            });
-        }
-
-        void HideScanSpinner ()
-        {
-            pulse_timeout_running = false;
-            progress_bar.Hide ();
-        }
-
-        public bool OptionsSensitive
-        {
-            set {
-                sources_combo.Sensitive = value;
-                copy_check.Sensitive = value;
-                recurse_check.Sensitive = value;
-                duplicate_check.Sensitive = value;
-                tagentry_box.Sensitive = value;
-            }
-        }
-    }
-}
diff --git a/src/UI.Dialog/LastRollDialog.cs b/src/UI.Dialog/LastRollDialog.cs
deleted file mode 100644
index a187c30..0000000
--- a/src/UI.Dialog/LastRollDialog.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * LastRollDialog.cs:
- *
- * Author(s):
- * 	Bengt Thuree (bengt at thuree.com)
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-
-using System;
-using Gtk;
-using FSpot.Query;
-using FSpot.UI.Dialog;
-
-namespace FSpot.UI.Dialog {
-	public class LastRolls : BuilderDialog {
-		FSpot.PhotoQuery query;
-		RollStore rollstore;
-		Gtk.Window parent_window;
-		
-		Roll [] rolls;
-
-		[GtkBeans.Builder.Object] private ComboBox combo_filter; // at, after, or between
-		[GtkBeans.Builder.Object] private ComboBox combo_roll_1;
-		[GtkBeans.Builder.Object] private ComboBox combo_roll_2;
-		[GtkBeans.Builder.Object] private Label    and_label; // and label between two comboboxes.
-		[GtkBeans.Builder.Object] private Label    photos_in_selected_rolls;
-		
-		public LastRolls (FSpot.PhotoQuery query, RollStore rollstore, Gtk.Window parent_window) : base ("LastImportRollFilterDialog.ui", "last_import_rolls_filter")
-		{
-			this.query = query;
-			this.rollstore = rollstore;
-			this.parent_window = parent_window;
-			rolls = rollstore.GetRolls (FSpot.Preferences.Get<int> (FSpot.Preferences.IMPORT_GUI_ROLL_HISTORY));
-
-			PopulateCombos ();
-			
-			combo_filter.Active = 0;
-			combo_roll_1.Active = 0;
-			combo_roll_2.Active = 0;
-			
-			DefaultResponse = ResponseType.Ok;
-			Response += HandleResponse;
-			Show ();
-		}
-
-		[GLib.ConnectBefore]
-		protected void HandleResponse (object o, Gtk.ResponseArgs args)
-		{
-			if (args.ResponseId == ResponseType.Ok) {
-				Roll [] selected_rolls = SelectedRolls ();
-				
-				if (selected_rolls != null && selected_rolls.Length > 0 )
-					query.RollSet = new RollSet (selected_rolls);
-			}
-			Destroy ();
-		}
-		
-		void HandleComboFilterChanged (object o, EventArgs args)
-		{
-			combo_roll_2.Visible = (combo_filter.Active == 2);
-			and_label.Visible = combo_roll_2.Visible;
-
-			UpdateNumberOfPhotos ();
-		}
-
-		void HandleComboRollChanged (object o, EventArgs args)
-		{
-			UpdateNumberOfPhotos ();
-		}
-
-		private void UpdateNumberOfPhotos()
-		{
-			Roll [] selected_rolls = SelectedRolls ();
-			uint sum = 0;
-			if (selected_rolls != null)
-				foreach (Roll roll in selected_rolls) 
-					sum = sum + rollstore.PhotosInRoll (roll);
-			photos_in_selected_rolls.Text = sum.ToString();
-		}
-		
-		private void PopulateCombos ()
-		{
-			for (uint k = 0; k < rolls.Length; k++)
-			{
-				uint numphotos = rollstore.PhotosInRoll (rolls [k]);
-				// Roll time is in UTC always
-				DateTime date = rolls [k].Time.ToLocalTime ();
-				
-				string header = String.Format ("{0} ({1})",
-					date.ToString("%dd %MMM, %HH:%mm"),
-					numphotos);		
-					
-				combo_roll_1.AppendText (header);
-				combo_roll_2.AppendText (header);
-			}					
-		}
-		
-		private Roll [] SelectedRolls ()
-		{
-			if ((combo_roll_1.Active < 0) || ((combo_filter.Active == 2) && (combo_roll_2.Active < 0)))
-				return null;
-				
-			System.Collections.ArrayList result = new System.Collections.ArrayList ();
-
-			switch (combo_filter.Active) {
-			case 0 : // at - Return the roll the user selected
-				result.Add (rolls [combo_roll_1.Active]);
-				break;
-			case 1 : // after - Return all rolls from latest to the one the user selected
-				for (uint k = 0; k <= combo_roll_1.Active; k++)
-					result.Add (rolls [k]);
-				break;
-			case 2 : // between - Return all rolls between the two import rolls the user selected
-				uint k1 = (uint) combo_roll_1.Active;
-				uint k2 = (uint) combo_roll_2.Active;
-				if (k1 > k2) {
-					k1 = (uint) combo_roll_2.Active;
-					k2 = (uint) combo_roll_1.Active;
-				}
-				for (uint k = k1; k <= k2; k++)
-					result.Add (rolls[k]);
-				break;
-			}
-			return (Roll []) result.ToArray (typeof(Roll));
-		}
-	}
-}
diff --git a/src/UI.Dialog/PreferenceDialog.cs b/src/UI.Dialog/PreferenceDialog.cs
deleted file mode 100644
index dfaf44a..0000000
--- a/src/UI.Dialog/PreferenceDialog.cs
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * FSpot.UI.Dialog.PreferenceDialog.cs
- *
- * Authors(s):
- *	Larry Ewing  <lewing at novell.com>
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- * Copyright (c) 2007,2010 Stephane Delcroix
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.IO;
-using System.Collections.Generic;
-using System.Linq;
-using Gtk;
-using Mono.Unix;
-using Hyena;
-
-using FSpot.Widgets;
-
-namespace FSpot.UI.Dialog {
-	public class PreferenceDialog : BuilderDialog
-	{
-		[GtkBeans.Builder.Object] FileChooserButton photosdir_chooser;
-
-		[GtkBeans.Builder.Object] RadioButton writemetadata_radio;
-		[GtkBeans.Builder.Object] RadioButton dontwrite_radio;
-		[GtkBeans.Builder.Object] CheckButton always_sidecar_check;
-
-		[GtkBeans.Builder.Object] ComboBox theme_combo;
-		[GtkBeans.Builder.Object] ComboBox screenprofile_combo;
-		[GtkBeans.Builder.Object] ComboBox printprofile_combo;
-
-#region public API (ctor)
-		public PreferenceDialog (Window parent) : base ("PreferenceDialog.ui", "preference_dialog")
-		{
-			TransientFor = parent;
-
-			//Photos Folder
-			if (Global.PhotoUri == new SafeUri (Preferences.Get<string> (Preferences.STORAGE_PATH))) {
-				photosdir_chooser.SetCurrentFolderUri (Global.PhotoUri);
-				photosdir_chooser.CurrentFolderChanged += HandlePhotosdirChanged;
-			} else {
-				photosdir_chooser.SetCurrentFolderUri (Global.PhotoUri);
-				photosdir_chooser.Sensitive = false;
-			}
-
-			//Write Metadata
-			LoadPreference (Preferences.METADATA_EMBED_IN_IMAGE);
-			LoadPreference (Preferences.METADATA_ALWAYS_USE_SIDECAR);
-
-			//Screen profile
-			ListStore sprofiles = new ListStore (typeof (string), typeof (int));
-			sprofiles.AppendValues (Catalog.GetString ("None"), 0);
-			if (FSpot.ColorManagement.XProfile != null)
-				sprofiles.AppendValues (Catalog.GetString ("System profile"), -1);
-			sprofiles.AppendValues (null, 0);
-			
-			//Pick the display profiles from the full list, avoid _x_profile_
-			var dprofs = from profile in FSpot.ColorManagement.Profiles
-				where (profile.Value.DeviceClass == Cms.IccProfileClass.Display && profile.Key != "_x_profile_")
-				select profile;
-			foreach (var p in dprofs)
-				sprofiles.AppendValues (p.Key, 1);
-
-			CellRendererText profilecellrenderer = new CellRendererText ();
-			profilecellrenderer.Ellipsize = Pango.EllipsizeMode.End;
-
-			screenprofile_combo.Model = sprofiles;
-			screenprofile_combo.PackStart (profilecellrenderer, true);
-			screenprofile_combo.RowSeparatorFunc = ProfileSeparatorFunc;
-			screenprofile_combo.SetCellDataFunc (profilecellrenderer, ProfileCellFunc);
-			LoadPreference (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE);
-
-			//Print profile
-			ListStore pprofiles = new ListStore (typeof (string), typeof (int));
-			pprofiles.AppendValues (Catalog.GetString ("None"), 0);
-			pprofiles.AppendValues (null, 0);
-
-			var pprofs = from profile in FSpot.ColorManagement.Profiles
-				where (profile.Value.DeviceClass == Cms.IccProfileClass.Output && profile.Key != "_x_profile_")
-				select profile;
-			foreach (var p in pprofs)
-				pprofiles.AppendValues (p.Key, 1);
-			
-			printprofile_combo.Model = pprofiles;
-			printprofile_combo.PackStart (profilecellrenderer, true);
-			printprofile_combo.RowSeparatorFunc = ProfileSeparatorFunc;
-			printprofile_combo.SetCellDataFunc (profilecellrenderer, ProfileCellFunc);
-			LoadPreference (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE);
-
-			//Theme chooser
-			ListStore themes = new ListStore (typeof (string), typeof (string));
-			themes.AppendValues (Catalog.GetString ("Standard theme"), null);
-			themes.AppendValues (null, null); //Separator
-			string gtkrc = System.IO.Path.Combine ("gtk-2.0", "gtkrc");
-			string [] search = {System.IO.Path.Combine (Global.HomeDirectory, ".themes"), "/usr/share/themes"};
-			foreach (string path in search)
-				if (System.IO.Directory.Exists (path)) 
-					foreach (string dir in System.IO.Directory.GetDirectories (path))
-						if (File.Exists (System.IO.Path.Combine (dir, gtkrc)))
-							themes.AppendValues (System.IO.Path.GetFileName (dir), System.IO.Path.Combine (dir, gtkrc));
-			CellRenderer themecellrenderer = new CellRendererText ();
-			theme_combo.Model = themes;
-			theme_combo.PackStart (themecellrenderer, true);
-			theme_combo.RowSeparatorFunc = ThemeSeparatorFunc;
-			theme_combo.SetCellDataFunc (themecellrenderer, ThemeCellFunc);
-			LoadPreference (Preferences.GTK_RC);
-
-			ConnectEvents ();
-		}
-#endregion
-
-#region preferences
-		void OnPreferencesChanged (object sender, NotifyEventArgs args)
-		{
-			LoadPreference (args.Key);
-		}
-
-		void LoadPreference (string key)
-		{
-			string pref;
-			int i;
-			switch (key) {
-			case Preferences.STORAGE_PATH:
-				photosdir_chooser.SetCurrentFolder (Preferences.Get<string> (key));
-				break;
-			case Preferences.METADATA_EMBED_IN_IMAGE:
-				bool embed_active = Preferences.Get<bool> (key);
-				if (writemetadata_radio.Active != embed_active) {
-					if (embed_active) {
-						writemetadata_radio.Active = true;
-					} else {
-						dontwrite_radio.Active = true;
-					}
-				}
-				always_sidecar_check.Sensitive = embed_active;
-				break;
-			case Preferences.METADATA_ALWAYS_USE_SIDECAR:
-				bool always_use_sidecar = Preferences.Get<bool> (key);
-				always_sidecar_check.Active = always_use_sidecar;
-				break;
-			case Preferences.GTK_RC:
-				pref = Preferences.Get<string> (key);
-				if (String.IsNullOrEmpty (pref)) {
-					theme_combo.Active = 0;
-					break;
-				}
-				i = 0;
-				foreach (object [] row in theme_combo.Model as ListStore) {
-					if (pref == (string)row [1]) {
-						theme_combo.Active = i;
-						break;
-					}
-					i++;
-				}
-				break;
-			case Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE:
-				pref = Preferences.Get<string> (key);
-				if (String.IsNullOrEmpty (pref)) {
-					screenprofile_combo.Active = 0;
-					break;
-				}
-				if (pref == "_x_profile_" && FSpot.ColorManagement.XProfile != null) {
-					screenprofile_combo.Active = 1;
-					break;
-				}
-				i = 0;
-				foreach (object [] row in screenprofile_combo.Model as ListStore) {
-					if (pref == (string)row [0]) {
-						screenprofile_combo.Active = i;
-						break;
-					}
-					i++;
-				}
-				break;
-			case Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE:
-				pref = Preferences.Get<string> (key);
-				if (String.IsNullOrEmpty (pref)) {
-					printprofile_combo.Active = 0;
-					break;
-				}
-				i = 0;
-				foreach (object [] row in printprofile_combo.Model as ListStore) {
-					if (pref == (string)row [0]) {
-						printprofile_combo.Active = i;
-						break;
-					}
-					i++;
-				}
-				break;
-			}
-		}
-#endregion
-
-#region event handlers
-		void ConnectEvents ()
-		{
-			Preferences.SettingChanged += OnPreferencesChanged;
-			screenprofile_combo.Changed += HandleScreenProfileComboChanged;
-			printprofile_combo.Changed += HandlePrintProfileComboChanged;
-			theme_combo.Changed += HandleThemeComboChanged;
-			writemetadata_radio.Toggled += HandleWritemetadataGroupChanged;
-			always_sidecar_check.Toggled += HandleAlwaysSidecareCheckToggled;
-		}
-
-		void HandlePhotosdirChanged (object sender, System.EventArgs args)
-		{
-			photosdir_chooser.CurrentFolderChanged -= HandlePhotosdirChanged;
-			Preferences.Set (Preferences.STORAGE_PATH, photosdir_chooser.Filename);
-			photosdir_chooser.CurrentFolderChanged += HandlePhotosdirChanged;
-			Global.PhotoUri = new SafeUri (photosdir_chooser.Uri, true);
-		}
-
-		void HandleWritemetadataGroupChanged (object sender, System.EventArgs args)
-		{
-			Preferences.Set (Preferences.METADATA_EMBED_IN_IMAGE, writemetadata_radio.Active);
-		}
-
-		void HandleAlwaysSidecareCheckToggled (object sender, EventArgs args)
-		{
-			Preferences.Set (Preferences.METADATA_ALWAYS_USE_SIDECAR, always_sidecar_check.Active);
-		}
-
-		void HandleThemeComboChanged (object sender, EventArgs e)
-		{
-			ComboBox combo = sender as ComboBox;
-			if (combo == null)
-				return;
-			TreeIter iter;
-			if (combo.GetActiveIter (out iter)) {
-				string gtkrc = (string)combo.Model.GetValue (iter, 1);
-				if (!String.IsNullOrEmpty (gtkrc))
-					Preferences.Set (Preferences.GTK_RC, gtkrc);
-				else
-					Preferences.Set (Preferences.GTK_RC, String.Empty);
-			}
-			Gtk.Rc.DefaultFiles = Global.DefaultRcFiles;
-			Gtk.Rc.AddDefaultFile (Preferences.Get<string> (Preferences.GTK_RC));
-			Gtk.Rc.ReparseAllForSettings (Gtk.Settings.Default, true);
-		}
-
-		void HandleScreenProfileComboChanged (object sender, EventArgs e)
-		{
-			ComboBox combo = sender as ComboBox;
-			if (combo == null)
-				return;
-			TreeIter iter;
-			if (combo.GetActiveIter (out iter)) {
-				switch ((int)combo.Model.GetValue (iter, 1)) {
-				case 0:
-					Preferences.Set (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE, String.Empty);
-					break;
-				case -1:
-					Preferences.Set (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE, "_x_profile_");
-					break;
-				case 1:
-					Preferences.Set (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE, (string)combo.Model.GetValue (iter, 0));
-					break;
-				}
-			}
-		}
-
-		void HandlePrintProfileComboChanged (object sender, EventArgs e)
-		{
-			ComboBox combo = sender as ComboBox;
-			if (combo == null)
-				return;
-			TreeIter iter;
-			if (combo.GetActiveIter (out iter)) {
-				switch ((int)combo.Model.GetValue (iter, 1)) {
-				case 0:
-					Preferences.Set (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE, String.Empty);
-					break;
-				case 1:
-					Preferences.Set (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE, (string)combo.Model.GetValue (iter, 0));
-					break;
-				}
-			}
-		}
-#endregion
-
-#region Gtk widgetry
-		void ThemeCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
-		{
-			string name = (string)tree_model.GetValue (iter, 0);
-			(cell as CellRendererText).Text = name;
-		}
-
-		bool ThemeSeparatorFunc (TreeModel tree_model, TreeIter iter)
-		{
-			return tree_model.GetValue (iter, 0) == null;
-		}
-
-		void ProfileCellFunc (CellLayout cell_layout, CellRenderer cell, TreeModel tree_model, TreeIter iter)
-		{
-			string name = (string)tree_model.GetValue (iter, 0);
-			(cell as CellRendererText).Text = name;
-		}
-
-		bool ProfileSeparatorFunc (TreeModel tree_model, TreeIter iter)
-		{
-			return tree_model.GetValue (iter, 0) == null;
-		}
-#endregion
-	}
-}
diff --git a/src/UI.Dialog/ProgressDialog.cs b/src/UI.Dialog/ProgressDialog.cs
deleted file mode 100644
index 4f64f61..0000000
--- a/src/UI.Dialog/ProgressDialog.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * FSpot.UI.Dialog.ProgressDialog.cs
- *
- * Author(s):
- * 	Ettore Perazzoli
- *	Larry Ewing  <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- */
-
-using GLib;
-using Gtk;
-using System;
-
-using Mono.Unix;
-
-namespace FSpot.UI.Dialog {
-	public class ProgressDialog : Gtk.Dialog {
-	
-		private bool cancelled;
-	
-		private void HandleResponse (object me, ResponseArgs args)
-		{
-			cancelled = true;
-		}
-	
-		public enum CancelButtonType {
-			Cancel,
-			Stop,
-			None
-		};
-	
-		private int total_count;
-	
-		private ProgressBar progress_bar;
-		public ProgressBar Bar {
-			get { return progress_bar; }
-		}
-	
-		private Label message_label;
-		public Label Message {
-			get { return message_label; }
-		}
-	
-		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)
-		{
-			Title = title;
-			this.total_count = total_count;
-	
-			if (parent_window != null)
-				this.TransientFor = parent_window;
-	
-			HasSeparator = false;
-			BorderWidth = 6;
-			SetDefaultSize (300, -1);
-	
-			message_label = new Label (String.Empty);
-			VBox.PackStart (message_label, true, true, 12);
-	
-			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);
-				break;
-			case CancelButtonType.Stop:
-				button = (Gtk.Button)AddButton (Gtk.Stock.Stop, (int) ResponseType.Cancel);
-				break;
-			}
-	
-			Response += new ResponseHandler (HandleResponse);
-		}
-	
-		private int current_count;
-	
-		// Return true if the operation was cancelled by the user.
-		public bool Update (string message)
-		{
-			current_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 ();
-	
-			while (Application.EventsPending ())
-				Application.RunIteration ();
-	
-			return cancelled;
-		}
-	}
-}
diff --git a/src/UI.Dialog/RatingFilterDialog.cs b/src/UI.Dialog/RatingFilterDialog.cs
deleted file mode 100644
index 4604a76..0000000
--- a/src/UI.Dialog/RatingFilterDialog.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * FSpot.UI.Dialog.RatingFilterDialog.cs
- *
- * Author(s):
- * 	Bengt Thuree <bengt at thuree.com>
- *	Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using Gtk;
-using FSpot;
-using FSpot.Query;
-using FSpot.Widgets;
-using FSpot.UI.Dialog;
-
-namespace FSpot.UI.Dialog
-{
-	public class RatingFilterDialog : BuilderDialog {
-		FSpot.PhotoQuery query;
-		Gtk.Window parent_window;
-
-		[GtkBeans.Builder.Object] Button ok_button;
-		[GtkBeans.Builder.Object] HBox minrating_hbox;
-		[GtkBeans.Builder.Object] HBox maxrating_hbox;
-		
-		private int minrating_value = 4;
-		private int maxrating_value = 5;
-		private Rating minrating;
-		private Rating maxrating;
-
-		public RatingFilterDialog (FSpot.PhotoQuery query, Gtk.Window parent_window) : base ("RatingFilterDialog.ui", "rating_filter_dialog")
-		{
-			this.query = query;
-			this.parent_window = parent_window;
-			TransientFor = parent_window;
-			DefaultResponse = ResponseType.Ok;
-			ok_button.GrabFocus ();
-			
-			if (query.RatingRange != null) {
-				minrating_value = (int) query.RatingRange.MinRating;
-				maxrating_value = (int) query.RatingRange.MaxRating;
-			}
-			minrating = new Rating (minrating_value);
-			maxrating = new Rating (maxrating_value);
-			minrating_hbox.PackStart (minrating, false, false, 0);
-			maxrating_hbox.PackStart (maxrating, false, false, 0);
-
-			ResponseType response = (ResponseType) Run ();
-
-			if (response == ResponseType.Ok) {
-				query.RatingRange = new RatingRange ((uint) minrating.Value, (uint) maxrating.Value);
-			}
-			
-			Destroy ();
-		}
-	}
-}
-
-
diff --git a/src/UI.Dialog/RepairDbDialog.cs b/src/UI.Dialog/RepairDbDialog.cs
deleted file mode 100644
index 28cbab0..0000000
--- a/src/UI.Dialog/RepairDbDialog.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * FSpot.UI.Dialog.RepairDbDialog
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Gtk;
-using Mono.Unix;
-using Hyena;
-using Hyena.Widgets;
-
-namespace FSpot.UI.Dialog
-{
-	public class RepairDbDialog : HigMessageDialog
-	{
-		public RepairDbDialog (System.Exception e, string backup_path, Window parent) : 
-				base (parent, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok, 
-				Catalog.GetString ("Error loading database."), 
-				String.Format (Catalog.GetString ("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."), backup_path))
-		{
-			Log.Exception (e);
-			Run ();
-			Destroy ();
-		}
-	}
-}
diff --git a/src/UI.Dialog/RepairDialog.cs b/src/UI.Dialog/RepairDialog.cs
deleted file mode 100644
index f3ab1f7..0000000
--- a/src/UI.Dialog/RepairDialog.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * FSpot.UI.Dialog.RepairDialog
- *
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using Gtk;
-using System;
-using System.IO;
-using FSpot.Widgets;
-
-namespace FSpot. UI.Dialog
-{
-	public class RepairDialog : BuilderDialog
-	{
-		[GtkBeans.Builder.Object] ScrolledWindow view_scrolled;
-		
-		IBrowsableCollection source;
-		PhotoList missing;
-
-		public RepairDialog (IBrowsableCollection collection) : base ("RepairDialog.ui", "repair_dialog")
-		{
-			source = collection;
-			missing = new PhotoList ();
-			
-			FindMissing ();
-			TrayView view = new TrayView (missing);
-			view_scrolled.Add (view);
-				
-			this.ShowAll ();
-		}
-
-		public void FindMissing ()
-		{
-			int i;
-			missing.Clear ();
-
-			for (i = 0; i < source.Count; i++) {
-				IBrowsableItem item = source [i];
-				string path = item.DefaultVersion.Uri.LocalPath;
-				if (! File.Exists (path) || (new FileInfo (path).Length == 0))
-					missing.Add (item);
-			}
-		}
-	}
-}
diff --git a/src/UI.Dialog/SelectionRatioDialog.cs b/src/UI.Dialog/SelectionRatioDialog.cs
deleted file mode 100644
index 21a72c0..0000000
--- a/src/UI.Dialog/SelectionRatioDialog.cs
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * FSpot.UI.Dialog.SelectionRatioDialog.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING fro details.
- */
-
-using System;
-using System.IO;
-using System.Xml.Serialization;
-using System.Collections.Generic;
-
-using Gtk;
-
-using Mono.Unix;
-using Hyena;
-
-namespace FSpot.UI.Dialog {
-	public class SelectionRatioDialog : GladeDialog
-	{
-		[Serializable]
-		public struct SelectionConstraint {
-			private string label;
-			public string Label {
-				get { return label; }
-				set { label = value; }
-			}
-			private double ratio;
-			public double XyRatio {
-				get { return ratio; }
-				set { ratio = value; }
-			}
-			
-			public SelectionConstraint (string label, double ratio)
-			{
-				this.label = label;
-				this.ratio = ratio;
-			}
-		}
-
-		[Glade.Widget] Button close_button;
-		[Glade.Widget] Button add_button;
-		[Glade.Widget] Button delete_button;
-		[Glade.Widget] Button up_button;
-		[Glade.Widget] Button down_button;
-		[Glade.Widget] TreeView content_treeview;
-		private ListStore constraints_store;
-
-		public SelectionRatioDialog () : base ("customratio_dialog")
-		{
-			close_button.Clicked += delegate (object o, EventArgs e) {SavePrefs (); this.Dialog.Destroy (); };
-			add_button.Clicked += delegate (object o, EventArgs e) {constraints_store.AppendValues ("New Selection", 1.0);};
-			delete_button.Clicked += DeleteSelectedRows;
-			up_button.Clicked += MoveUp;
-			down_button.Clicked += MoveDown;
-			CellRendererText text_renderer = new CellRendererText ();
-			text_renderer.Editable = true;
-			text_renderer.Edited += HandleLabelEdited;
-			content_treeview.AppendColumn (Catalog.GetString ("Label"), text_renderer, "text", 0);
-			text_renderer = new CellRendererText ();
-			text_renderer.Editable = true;
-			text_renderer.Edited += HandleRatioEdited;
-			content_treeview.AppendColumn (Catalog.GetString ("Ratio"), text_renderer, "text", 1);
-
-			LoadPreference (Preferences.CUSTOM_CROP_RATIOS);
-			Preferences.SettingChanged += OnPreferencesChanged;
-		}
-	
-		private void Populate ()
-		{
-			constraints_store = new ListStore (typeof (string), typeof (double));
-			content_treeview.Model = constraints_store;
-			XmlSerializer serializer = new XmlSerializer (typeof(SelectionConstraint));
-			string [] vals = Preferences.Get<string []> (Preferences.CUSTOM_CROP_RATIOS);
-			if (vals != null) 
-				foreach (string xml in vals) {
-					SelectionConstraint constraint = (SelectionConstraint)serializer.Deserialize (new StringReader (xml));
-					constraints_store.AppendValues (constraint.Label, constraint.XyRatio);
-				}	
-		}
-
-		private void OnPreferencesChanged (object sender, NotifyEventArgs args)
-		{
-			LoadPreference (args.Key);
-		}
-	
-		private void LoadPreference (String key)
-		{
-			switch (key) {
-			case Preferences.CUSTOM_CROP_RATIOS:
-				Populate ();
-				break;
-			}
-		}
-
-		private void SavePrefs ()
-		{
-			List<string> prefs = new List<string> ();
-			XmlSerializer serializer = new XmlSerializer (typeof (SelectionConstraint));
-			foreach (object[] row in constraints_store) {
-				StringWriter sw = new StringWriter ();
-				serializer.Serialize (sw, new SelectionConstraint ((string)row[0], (double)row[1]));
-				sw.Close ();
-				prefs.Add (sw.ToString ());
-			}
-
-#if !GCONF_SHARP_2_18		
-			if (prefs.Count != 0)
-#endif
-				Preferences.Set (Preferences.CUSTOM_CROP_RATIOS, prefs.ToArray());
-#if !GCONF_SHARP_2_18		
-			else
-				Preferences.Set (Preferences.CUSTOM_CROP_RATIOS, -1);
-#endif
-		}
-
-		public void HandleLabelEdited (object sender, EditedArgs args)
-		{
-			args.RetVal = false;
-			TreeIter iter;
-			if (!constraints_store.GetIterFromString (out iter, args.Path))
-				return;
-
-			using (GLib.Value val = new GLib.Value (args.NewText))
-				constraints_store.SetValue (iter, 0, val);
-
-			args.RetVal = true;
-		}
-
-		public void HandleRatioEdited (object sender, EditedArgs args)
-		{
-			args.RetVal = false;
-			TreeIter iter;
-			if (!constraints_store.GetIterFromString (out iter, args.Path))
-				return;
-
-			double ratio;
-			try {
-				ratio = ParseRatio (args.NewText);
-			} catch (FormatException fe) {
-				Log.Exception (fe);
-				return;
-			}
-			if (ratio < 1.0)
-				ratio = 1.0 / ratio;
-
-			using (GLib.Value val = new GLib.Value (ratio))
-				constraints_store.SetValue (iter, 1, val);
-
-			args.RetVal = true;
-		}
-
-		private double ParseRatio (string text)
-		{
-			try {
-				return Convert.ToDouble (text);
-			} catch (FormatException) {
-				char [] separators = {'/', ':'};
-				foreach (char c in separators) {
-					if (text.IndexOf (c) != -1) {
-						double ratio = Convert.ToDouble (text.Substring (0, text.IndexOf (c)));
-						ratio /= Convert.ToDouble (text.Substring (text.IndexOf (c) + 1));
-						return ratio;
-					}
-				}
-				throw new FormatException (String.Format ("unable to parse {0}", text));
-			}
-		}
-
-		private void DeleteSelectedRows (object o, EventArgs e)
-		{
-			TreeIter iter;
-			TreeModel model;
-			if (content_treeview.Selection.GetSelected (out model, out iter))
-				(model as ListStore).Remove (ref iter);
-		}
-
-		private void MoveUp (object o, EventArgs e)
-		{
-			TreeIter selected;
-			TreeModel model;
-			if (content_treeview.Selection.GetSelected (out model, out selected)) {
-				//no IterPrev :(
-				TreeIter prev;
-				TreePath path = model.GetPath (selected);
-				if (path.Prev ())
-					if (model.GetIter (out prev, path))
-						(model as ListStore).Swap (prev, selected);
-			}
-		}
-
-		private void MoveDown (object o, EventArgs e)
-		{
-			TreeIter current;
-			TreeModel model;
-			if (content_treeview.Selection.GetSelected (out model, out current)) {
-				TreeIter next = current;
-				if ((model as ListStore).IterNext (ref next))
-					(model as ListStore).Swap (current, next);
-			}
-		}
-	}
-}
diff --git a/src/UI.Dialog/TagSelectionDialog.cs b/src/UI.Dialog/TagSelectionDialog.cs
deleted file mode 100644
index f5cb1b9..0000000
--- a/src/UI.Dialog/TagSelectionDialog.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-using Gdk;
-using Gtk;
-using Glade;
-
-namespace FSpot.UI.Dialog {
-	public class TagSelectionDialog : GladeDialog 
-	{
-		[Widget] Gtk.ScrolledWindow tag_selection_scrolled;
-		[Widget] Gtk.VBox selection_vbox;
-		[Widget] Gtk.Button ok_button;
-		[Widget] Gtk.Button cancel_button;
-		
-		TagSelectionWidget tag_selection_widget;
-		
-		public TagSelectionDialog (TagStore tags) : base ("tag_selection_dialog")
-		{
-			tag_selection_widget = new TagSelectionWidget (tags);
-			tag_selection_scrolled.Add (tag_selection_widget);
-			tag_selection_widget.Show ();
-		}
-		
-		public Tag[] Run ()
-		{
-			int response = this.Dialog.Run ();
-			if ((ResponseType) response == ResponseType.Ok)
-				return tag_selection_widget.TagHighlight;
-			
-			return null;
-		}
-		
-		public void Hide ()
-		{
-			this.Dialog.Hide ();
-		}
-	}
-}
-
-
diff --git a/src/UI.Dialog/ThreadProgressDialog.cs b/src/UI.Dialog/ThreadProgressDialog.cs
deleted file mode 100644
index 55ed22a..0000000
--- a/src/UI.Dialog/ThreadProgressDialog.cs
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * FSpot.UI.Dialog.ThreadProgressDialog.cs
- *
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * Copyright (c) 2004-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.Threading;
-using System.Collections.Generic;
-
-using Gtk;
-
-namespace FSpot.UI.Dialog {
-	public class ThreadProgressDialog : Gtk.Dialog {
-		FSpot.Delay delay;
-
-		Gtk.ProgressBar progress_bar;
-		Gtk.Label message_label;
-		Gtk.Button button;
-
-		Gtk.Button retry_button;
-		Gtk.Button skip_button;
-		Gtk.ResponseType error_response;
-		AutoResetEvent error_response_event;
-
-		object syncHandle = new object ();
-
-		Thread thread;
-
-		public ThreadProgressDialog (Thread thread, int total) {
-			/*
-			if (parent_window)
-				this.TransientFor = parent_window;
-
-			*/
-			this.Title = thread.Name;
-			this.thread = thread;
-			
-			HasSeparator = false;
-			BorderWidth = 6;
-			SetDefaultSize (300, -1);
-			
-			message_label = new Gtk.Label (String.Empty);
-			VBox.PackStart (message_label, true, true, 12);
-			
-			progress_bar = new Gtk.ProgressBar ();
-			VBox.PackStart (progress_bar, true, true, 6);
-
-			retry_button = new Gtk.Button (Mono.Unix.Catalog.GetString ("Retry"));
-			retry_button.Clicked += new EventHandler (HandleRetryClicked);
-			skip_button = new Gtk.Button (Mono.Unix.Catalog.GetString ("Skip"));
-			skip_button.Clicked += new EventHandler (HandleSkipClicked);
-
-			ActionArea.Add (retry_button);
-			ActionArea.Add (skip_button);
-
-			button_label = Gtk.Stock.Cancel;
-			button = (Gtk.Button) AddButton (button_label, (int)Gtk.ResponseType.Cancel);
-			
-			delay = new Delay (new GLib.IdleHandler (HandleUpdate));
-
-			Response += HandleResponse;
-			Destroyed += HandleDestroy;
-		}
-
-		string progress_text;
-		public string ProgressText {
-			get { return progress_text; }
-			set {
-				lock (syncHandle) {
-					progress_text = value;
-					delay.Start ();
-				}
-			}
-		}
-
-		string button_label;
-		public string ButtonLabel {
-			get { return button_label; }			
-			set {
-				lock (syncHandle) {
-					button_label = value;
-					delay.Start ();
-				}
-			}
-		}
-		
-		string message;
-		public string Message {
-			get { return message; }
-			set {
-				lock (syncHandle) {
-					message = value;
-					delay.Start ();
-				}
-			}
-		}
-		
-		double fraction;
-		public double Fraction {
-			get { return Fraction; }
-			set {
-				lock (syncHandle) {
-					fraction = value;
-					delay.Start ();
-				}
-			}
-		}
-
-		List<Widget> widgets;
-		public void VBoxPackEnd (Widget w)
-		{
-			if (widgets == null)
-				widgets = new List<Widget> ();
-			lock (syncHandle) {
-				widgets.Add (w);
-				delay.Start ();
-			}
-		}
-
-		internal void SetProperties (string progress_text, string button_label, string message, double fraction)
-		{
-			lock (syncHandle) {
-				this.progress_text = progress_text;
-				this.button_label = button_label;
-				this.message = message;
-				this.fraction = fraction;
-				delay.Start ();
-			}	
-		}
-
-		bool retry_skip;
-		bool RetrySkipVisible {
-			set { 
-				retry_skip = value;
-				delay.Start ();
-			} 
-		}
-
-		public bool PerformRetrySkip ()
-		{
-			error_response = Gtk.ResponseType.None;
-			RetrySkipVisible = true;
-
-			error_response_event = new AutoResetEvent (false);
-			error_response_event.WaitOne ();
-
-			RetrySkipVisible = false;
-
-			return (error_response == Gtk.ResponseType.Yes);
-		}
-
-		void HandleResponse (object obj, Gtk.ResponseArgs args) {
-			this.Destroy ();
-		}
-
-		bool HandleUpdate ()
-		{
-			message_label.Text = message;
-			progress_bar.Text = progress_text;
-			progress_bar.Fraction = System.Math.Min (1.0, System.Math.Max (0.0, fraction));
-			button.Label = button_label;
-			retry_button.Visible = skip_button.Visible = retry_skip;
-
-			if (widgets != null && widgets.Count > 0) {
-				foreach (var w in widgets)
-					VBox.PackEnd (w);
-				widgets.Clear ();
-			}
-
-			return false;
-		}
-
-		void HandleDestroy (object sender, EventArgs args)
-		{
-			delay.Stop ();
-			if (thread.IsAlive) {
-				thread.Abort ();
-			}
-		}
-
-		void HandleRetryClicked (object obj, EventArgs args)
-		{
-			error_response = Gtk.ResponseType.Yes;
-			error_response_event.Set ();
-		}
-
-		void HandleSkipClicked (object obj, EventArgs args)
-		{
-			error_response = Gtk.ResponseType.No;
-			error_response_event.Set ();
-		}
-
-		public void Start () {
-			ShowAll ();
-			RetrySkipVisible = false;
-			thread.Start ();
-		}
-	}
-}
diff --git a/src/Updater.cs b/src/Updater.cs
deleted file mode 100644
index 26ce6e5..0000000
--- a/src/Updater.cs
+++ /dev/null
@@ -1,982 +0,0 @@
-using Mono.Data.SqliteClient;
-using Mono.Unix;
-using Gtk;
-using System;
-using System.Collections;
-using Banshee.Database;
-using FSpot.Utils;
-using Hyena;
-using FSpot.UI.Dialog;
-
-namespace FSpot.Database {
-	public static class Updater {
-		private static ProgressDialog dialog;
-		private static Hashtable updates = new Hashtable ();
-		private static Version db_version;
-		private static QueuedSqliteDatabase db;
-
-		public static bool silent = false;
-
-
-		public static Version LatestVersion {
-			get {
-				if (updates == null || updates.Count == 0)
-					return new Version (0, 0);
-				ArrayList keys = new ArrayList (updates.Keys);
-				keys.Sort ();
-				return keys[keys.Count - 1] as Version;
-			}
-		}
-		
-		static Updater () {
-			// Update from version 0 to 1: Remove empty Other tags
-			AddUpdate (new Version ("1"), delegate () {
-				string other_id = SelectSingleString ("SELECT id FROM tags WHERE name = 'Other'");
-
-				if (other_id == null)
-					return;
-
-				// Don't do anything if there are subtags
-				string tag_count = SelectSingleString (
-					String.Format ("SELECT COUNT(*) FROM tags WHERE category_id = {0}", other_id));
-				
-				if (tag_count == null || System.Int32.Parse (tag_count) != 0)
-					return;
-				
-				// Don't do anything if there are photos tagged with this
-				string photo_count = SelectSingleString (
-					String.Format ("SELECT COUNT(*) FROM photo_tags WHERE tag_id = {0}", other_id));
-
-				if (photo_count == null || System.Int32.Parse (photo_count) != 0)
-					return;
-
-				// Finally, we know that the Other tag exists and has no children, so remove it
-				ExecuteNonQuery ("DELETE FROM tags WHERE name = 'Other'");
-			});
-
-			// Update from version 1 to 2: Restore Other tags that were removed leaving dangling child tags
-			AddUpdate (new Version ("2"), delegate () {
-				string tag_count = SelectSingleString ("SELECT COUNT(*) FROM tags WHERE category_id != 0 AND category_id NOT IN (SELECT id FROM tags)");
-
-				// If there are no dangling tags, then don't do anything
-				if (tag_count == null || System.Int32.Parse (tag_count) == 0)
-					return;
-
- 				int id = ExecuteScalar ("INSERT INTO tags (name, category_id, is_category, icon) VALUES ('Other', 0, 1, 'stock_icon:f-spot-other.png')");
-
-				ExecuteNonQuery (String.Format (
-					"UPDATE tags SET category_id = {0} WHERE id IN "		+
-					"(SELECT id FROM tags WHERE category_id != 0 AND category_id "	+
-					"NOT IN (SELECT id FROM tags))",
-					id));
-
-				Log.Debug ("Other tag restored.  Sorry about that!");
-			});
-			
-			// Update from version 2 to 3: ensure that Hidden is the only tag left which is a real tag (not category)
-			AddUpdate (new Version ("3"), delegate () {
-				ExecuteNonQuery ("UPDATE tags SET is_category = 1 WHERE name != 'Hidden'");
-			});
-
-			//Version 3.1, clean old (and unused) items in Export
-			AddUpdate (new Version (3, 1), delegate () {
-				if (TableExists ("exports"))
-					ExecuteScalar ("DELETE FROM exports WHERE export_type='fspot:Folder'");
-			});
-
-			//Version 4.0, bump the version number to a integer, for backward compatibility
-			AddUpdate (new Version (4, 0), delegate () {});
-
-
-			//Version 5.0, add a roll_id field to photos, rename table 'imports' to 'rolls' 
-			//and fix bgo 324425.
-			AddUpdate (new Version (5, 0), delegate () {
-				Log.Debug ("Will add a roll_id field to photos!");
-				string tmp_photos = MoveTableToTemp ("photos");
-				ExecuteNonQuery (
-					"CREATE TABLE photos (                                     " +
-					"	id                 INTEGER PRIMARY KEY NOT NULL,   " +
-					"       time               INTEGER NOT NULL,	   	   " +
-					"       directory_path     STRING NOT NULL,		   " +
-					"       name               STRING NOT NULL,		   " +
-					"       description        TEXT NOT NULL,	           " +
-					"       roll_id            INTEGER NOT NULL,		   " +
-					"       default_version_id INTEGER NOT NULL		   " +
-					")");
-				ExecuteScalar (String.Format("INSERT INTO photos SELECT id, time, directory_path, name, description, 0, default_version_id FROM {0}", tmp_photos));
-
-				Log.Debug ("Will rename imports to rolls!");
-				string tmp_rolls = MoveTableToTemp ("imports");
-				ExecuteNonQuery (
-					"CREATE TABLE rolls (                                     " +
-					"	id                 INTEGER PRIMARY KEY NOT NULL,   " +
-					"       time               INTEGER NOT NULL	   	   " +
-					")");
-				ExecuteScalar (String.Format("INSERT INTO rolls SELECT id, time FROM {0}", tmp_rolls));
-
-				Log.Debug ("Cleaning weird descriptions, fixes bug #324425.");
-				ExecuteNonQuery ("UPDATE photos SET description = \"\" WHERE description LIKE \"Invalid size of entry%\"");
-			});				
-
-
-			//Version 6.0, change tag icon f-spot-tag-other to emblem-generic
-			AddUpdate (new Version (6,0), delegate () {
-				ExecuteScalar ("UPDATE tags SET icon = \"stock_icon:emblem-generic\" " +
-						" WHERE icon LIKE \"stock_icon:f-spot-other.png\"");
-			});
-
-			//Update to version 7.0, keep photo uri instead of path
-			AddUpdate (new Version (7,0), delegate () {
-				string tmp_photos = MoveTableToTemp ("photos");
-				ExecuteNonQuery ( 
-					"CREATE TABLE photos (" +
-					"	id                 INTEGER PRIMARY KEY NOT NULL," +
-					"       time               INTEGER NOT NULL," +
-					"       uri                STRING NOT NULL," +
-					"       description        TEXT NOT NULL," +
-					"       roll_id            INTEGER NOT NULL," +
-					"       default_version_id INTEGER NOT NULL" +
-					")");
-				ExecuteNonQuery (String.Format (
-					"INSERT INTO photos (id, time, uri, description, roll_id, default_version_id)	" +
-					"SELECT id, time, 'file://' || directory_path || '/' || name, 		" +
-					"description, roll_id, default_version_id FROM {0}", tmp_photos));
-			}, true);
-			
-			// Update to version 8.0, store full version uri
-			AddUpdate (new Version (8,0),delegate () {
-				string tmp_versions = MoveTableToTemp ("photo_versions");
-				ExecuteNonQuery (
-					"CREATE TABLE photo_versions (          " +
-					"       photo_id        INTEGER,        " +
-					"       version_id      INTEGER,        " +
-					"       name            STRING,         " +
-					"       uri             STRING NOT NULL " +
-					")");
-
-				SqliteDataReader reader = ExecuteReader (String.Format (
-						"SELECT photo_id, version_id, name, uri " +
-						"FROM {0}, photos " +
-						"WHERE photo_id = id ", tmp_versions));
-		
-				while (reader.Read ()) {
-					System.Uri photo_uri = new System.Uri (reader [3] as string);
-					string name_without_extension = System.IO.Path.GetFileNameWithoutExtension (photo_uri.AbsolutePath);
-					string extension = System.IO.Path.GetExtension (photo_uri.AbsolutePath);
-
-					string uri = photo_uri.Scheme + "://" + 
-						photo_uri.Host + 
-						System.IO.Path.GetDirectoryName (photo_uri.AbsolutePath) + "/" +
-						name_without_extension + " (" + (reader [2]).ToString () + ")" + extension;
-
-					ExecuteNonQuery (new DbCommand (
-						"INSERT INTO photo_versions (photo_id, version_id, name, uri) " +
-						"VALUES (:photo_id, :version_id, :name, :uri)",
-						"photo_id", Convert.ToUInt32 (reader [0]),
-						"version_id", Convert.ToUInt32 (reader [1]),
-						"name", (reader [2]).ToString (),
-						"uri", uri));
-				}
-
-			}, true);
-			
-			// Update to version 9.0
-			AddUpdate (new Version (9,0),delegate () {
-				string tmp_versions = MoveTableToTemp ("photo_versions");
-				ExecuteNonQuery (
-					"CREATE TABLE photo_versions (          " +
-					"       photo_id        INTEGER,        " +
-					"       version_id      INTEGER,        " +
-					"       name            STRING,         " +
-					"       uri             STRING NOT NULL," +
-					"	protected	BOOLEAN		" +
-					")");
-				ExecuteNonQuery (String.Format (
-					"INSERT INTO photo_versions (photo_id, version_id, name, uri, protected) " +
-					"SELECT photo_id, version_id, name, uri, 0 " +
-					"FROM {0} ", tmp_versions));
-			});
-
- 			// Update to version 10.0, make id autoincrement
- 			AddUpdate (new Version (10,0),delegate () {
- 				string tmp_photos = MoveTableToTemp ("photos");
- 				ExecuteNonQuery (
- 					"CREATE TABLE photos (                                     " +
- 					"	id                 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
- 					"	time               INTEGER NOT NULL,	   	   " +
- 					"	uri		   STRING NOT NULL,		   " +
- 					"	description        TEXT NOT NULL,	           " +
- 					"	roll_id            INTEGER NOT NULL,		   " +
- 					"	default_version_id INTEGER NOT NULL		   " +
- 					")");
- 
- 				ExecuteNonQuery (String.Format (
- 					"INSERT INTO photos (id, time, uri, description, roll_id, default_version_id) " +
- 					"SELECT id, time, uri, description, roll_id, default_version_id  " + 
- 					"FROM  {0} ", tmp_photos));
- 			}, false);
- 
-			// Update to version 11.0, rating
-			AddUpdate (new Version (11,0),delegate () {
- 				string tmp_photos = MoveTableToTemp ("photos");
- 				Execute (
- 					"CREATE TABLE photos (                                     " +
- 					"	id                 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
- 					"	time               INTEGER NOT NULL,	   	   " +
- 					"	uri		   STRING NOT NULL,		   " +
- 					"	description        TEXT NOT NULL,	           " +
- 					"	roll_id            INTEGER NOT NULL,		   " +
- 					"	default_version_id INTEGER NOT NULL,		   " +
-					"       rating             INTEGER NULL			   " +
- 					")");
- 
- 				Execute (String.Format (
- 					"INSERT INTO photos (id, time, uri, description, roll_id, default_version_id, rating) " +
- 					"SELECT id, time, uri, description, roll_id, default_version_id, null  " + 
- 					"FROM  {0} ", tmp_photos));
-			});
-
-			//Update to version 12.0, remove dead associations, bgo #507950, #488545
-			AddUpdate (new Version (12, 0), delegate () {
-				Execute ("DELETE FROM photo_tags WHERE tag_id NOT IN (SELECT id FROM tags)");
-			});
-			
-			// Update to version 13.0
-			AddUpdate (new Version (13,0), delegate () {
-				Execute ("UPDATE photos SET rating = 0 WHERE rating IS NULL");
-			});
-
-			// Update to version 14.0
-			AddUpdate (new Version (14,0), delegate () {
-				Execute ("UPDATE photos SET rating = 0 WHERE rating IS NULL");
-			});
-
-			// Update to version 15.0
-			AddUpdate (new Version (15,0), delegate () {
-				string tmp_photo_tags = MoveTableToTemp ("photo_tags");
-				Execute (
-					"CREATE TABLE photo_tags (        " +
-					"	photo_id      INTEGER,    " +
-					"       tag_id        INTEGER,    " +
-					"       UNIQUE (photo_id, tag_id) " +
-					")");
-				Execute (String.Format (
-					"INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " +
-					"SELECT photo_id, tag_id FROM {0}", tmp_photo_tags));
-				string tmp_photo_versions = MoveTableToTemp ("photo_versions");
-				Execute (
-					"CREATE TABLE photo_versions (		"+
-					"	photo_id	INTEGER,	" +
-					"	version_id	INTEGER,	" +
-					"	name		STRING,		" +
-					"	uri		STRING NOT NULL," +
-					"	protected	BOOLEAN, 	" +
-					"	UNIQUE (photo_id, version_id)	" +
-					")");
-				Execute (String.Format (
-					"INSERT OR IGNORE INTO photo_versions 		" +
-					"(photo_id, version_id, name, uri, protected)	" +
-					"SELECT photo_id, version_id, name, uri, protected FROM {0}", tmp_photo_versions));
-			});
-
-			// Update to version 16.0
-			 AddUpdate (new Version (16,0), delegate () {
-				 string temp_table = MoveTableToTemp ("photos");
-  
-				 Execute ("CREATE TABLE photos ( " +
-					  "	id                 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,   " +
-					  "	time               INTEGER NOT NULL,	   	   " +
-					  "	uri		   STRING NOT NULL,		   " +
-					  "	description        TEXT NOT NULL,	           " +
-					  "	roll_id            INTEGER NOT NULL,		   " +
-					  "	default_version_id INTEGER NOT NULL,		   " +
-					  "	rating		   INTEGER NULL,		   " +
-					  "	md5_sum		   TEXT NULL  			   " +
-					  ")"
-				 );
-  
-				 Execute (string.Format ("INSERT INTO photos (id, time, uri, description, roll_id, " + 
-							 "default_version_id, rating, md5_sum) " + 
-							 "SELECT id, time, uri, description, roll_id, " +
-							 "       default_version_id, rating, '' " +
-							 "FROM   {0} ", 
-							 temp_table
-							)
-				 );
-
-
-				 string temp_versions_table = MoveTableToTemp ("photo_versions");
-
-				 Execute ("CREATE TABLE photo_versions (    	" +
-					  "      photo_id        INTEGER,  	" +
-					  "      version_id      INTEGER,  	" +
-					  "      name            STRING,    	" +
-					  "	uri		STRING NOT NULL," +
-					  "	md5_sum		STRING NOT NULL," +
-					  "	protected	BOOLEAN		" +
-					  ")");
-
-				 Execute (String.Format ("INSERT INTO photo_versions (photo_id, version_id, name, uri, md5_sum, protected) " + 
-							 "SELECT photo_id, version_id, name, uri, '', protected " +
-							 "FROM   {0} ", 
-							 temp_versions_table
-							)
-				 );
-
-				 JobStore.CreateTable (db);
-
-				 // This is kind of hacky but should be a lot faster on
-				 // large photo databases
-				 Execute (string.Format ("INSERT INTO jobs (job_type, job_options, run_at, job_priority) " +
-							 "SELECT '{0}', id, {1}, {2} " +
-							 "FROM   photos ",
-							 typeof(Jobs.CalculateHashJob).ToString (),
-							 DateTimeUtil.FromDateTime (DateTime.Now),
-							 0
-							)
-				 );
-			 }, true);
-
-			// Update to version 16.1
-			 AddUpdate (new Version (16,1), delegate () {
-				 Execute ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
-			 }, false);
-
-			// Update to version 16.2
-			 AddUpdate (new Version (16,2), delegate () {
-				 Execute ("CREATE INDEX idx_photos_roll_id ON photos(roll_id)");
-			 }, false);
-
-			// Update to version 16.3
-			AddUpdate (new Version (16,3), delegate () {
-				Execute (String.Format ("DELETE FROM jobs WHERE job_type = '{0}'", typeof(Jobs.CalculateHashJob).ToString ()));
-			}, false);
-
-			// Update to version 16.4
-			AddUpdate (new Version (16,4), delegate () { //fix the tables schema EOL
-				string temp_table = MoveTableToTemp ("exports");
-			 	Execute (
-					"CREATE TABLE exports (\n" +
-					"	id			INTEGER PRIMARY KEY NOT NULL, \n" +
-					"	image_id		INTEGER NOT NULL, \n" +
-					"	image_version_id	INTEGER NOT NULL, \n" +
-					"	export_type		TEXT NOT NULL, \n" +
-					"	export_token		TEXT NOT NULL\n" +
-					")");
-				Execute (String.Format (
-					"INSERT INTO exports (id, image_id, image_version_id, export_type, export_token) " + 
-					"SELECT id, image_id, image_version_id, export_type, export_token " +
-					"FROM {0}", temp_table));
-
-				temp_table = MoveTableToTemp ("jobs");
-				Execute (
-					"CREATE TABLE jobs (\n" +
-					"	id		INTEGER PRIMARY KEY NOT NULL, \n" +
-					"	job_type	TEXT NOT NULL, \n" +
-					"	job_options	TEXT NOT NULL, \n" +
-					"	run_at		INTEGER, \n" +
-					"	job_priority	INTEGER NOT NULL\n" +
-					")");
-				Execute (String.Format (
-					"INSERT INTO jobs (id, job_type, job_options, run_at, job_priority) " +
-					"SELECT id, job_type, job_options, run_at, job_priority " +
-					"FROM {0}", temp_table));
-
-				temp_table = MoveTableToTemp ("meta");
-				Execute (
-					"CREATE TABLE meta (\n" +
-					"	id	INTEGER PRIMARY KEY NOT NULL, \n" +
-					"	name	TEXT UNIQUE NOT NULL, \n" +
-					"	data	TEXT\n" +
-					")");
-				Execute (String.Format (
-					"INSERT INTO meta (id, name, data) " +
-					"SELECT id, name, data " +
-					"FROM {0}", temp_table));
-
-				temp_table = MoveTableToTemp ("photos");
-				Execute ( 
-					"CREATE TABLE photos (\n" +
-					"	id			INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, \n" +
-					"	time			INTEGER NOT NULL, \n" +
-					"	uri			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" +
-					"	md5_sum			TEXT NULL\n" +
-					")");
-				Execute (String.Format (
-					"INSERT INTO photos (id, time, uri, description, roll_id, default_version_id, rating, md5_sum) " +
-					"SELECT id, time, uri, description, roll_id, default_version_id, rating, md5_sum " +
-					"FROM {0}", temp_table));
-
-				temp_table = MoveTableToTemp ("photo_tags");
-				Execute(
-					"CREATE TABLE photo_tags (\n" +
-					"	photo_id	INTEGER, \n" +
-					"       tag_id		INTEGER, \n" +
-					"       UNIQUE (photo_id, tag_id)\n" +
-					")");
-				Execute (String.Format (
-					"INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " +
-					"SELECT photo_id, tag_id " +
-					"FROM {0}", temp_table));
-
-				temp_table = MoveTableToTemp ("photo_versions");
-				Execute (
-					"CREATE TABLE photo_versions (\n"+
-					"	photo_id	INTEGER, \n" +
-					"	version_id	INTEGER, \n" +
-					"	name		STRING, \n" +
-					"	uri		STRING NOT NULL, \n" +
-					"	md5_sum		STRING NOT NULL, \n" +
-					"	protected	BOOLEAN, \n" +
-					"	UNIQUE (photo_id, version_id)\n" +
-					")");
-				Execute (String.Format (
-					"INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, uri, md5_sum, protected) " +
-					"SELECT photo_id, version_id, name, uri, md5_sum, protected " +
-					"FROM {0}", temp_table));
-
-				Execute ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
-				Execute ("CREATE INDEX idx_photos_roll_id ON photos(roll_id)");
-
-				temp_table = MoveTableToTemp ("rolls");
-				Execute (
-					"CREATE TABLE rolls (\n" +
-					"	id	INTEGER PRIMARY KEY NOT NULL, \n" +
-					"       time	INTEGER NOT NULL\n" +
-					")");
-				Execute (String.Format (
-					"INSERT INTO rolls (id, time) " +
-					"SELECT id, time " +
-					"FROM {0}", temp_table));
-
-				temp_table = MoveTableToTemp ("tags");
-				Execute (
-					"CREATE TABLE tags (\n" +
-					"	id		INTEGER PRIMARY KEY NOT NULL, \n" +
-					"	name		TEXT UNIQUE, \n" +
-					"	category_id	INTEGER, \n" +
-					"	is_category	BOOLEAN, \n" +
-					"	sort_priority	INTEGER, \n" +
-					"	icon		TEXT\n" +
-					")");
-				Execute (String.Format (
-					"INSERT INTO tags (id, name, category_id, is_category, sort_priority, icon) " +
-					"SELECT id, name, category_id, is_category, sort_priority, icon " +
-					"FROM {0}", temp_table));
-			});
-
-			// Update to version 16.5
-			AddUpdate (new Version (16,5), delegate () { //fix md5 null in photos and photo_versions table
-				string temp_table = MoveTableToTemp ("photo_versions");
-				Execute (
-					"CREATE TABLE photo_versions (\n"+
-					"	photo_id	INTEGER, \n" +
-					"	version_id	INTEGER, \n" +
-					"	name		STRING, \n" +
-					"	uri		STRING NOT NULL, \n" +
-					"	md5_sum		TEXT NULL, \n" +
-					"	protected	BOOLEAN, \n" +
-					"	UNIQUE (photo_id, version_id)\n" +
-					")");
-				Execute (String.Format (
-					"INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, uri, md5_sum, protected) " +
-					"SELECT photo_id, version_id, name, uri, md5_sum, protected " +
-					"FROM {0}", temp_table));
-
-				Execute ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
-
-				Execute ("UPDATE photos SET md5_sum = NULL WHERE md5_sum = ''");
-				Execute ("UPDATE photo_versions SET md5_sum = NULL WHERE md5_sum = ''");
-			});
-			
-			// Update to version 17.0, split uri and filename
-			AddUpdate (new Version (17,0),delegate () {
-				string tmp_photos = MoveTableToTemp ("photos");
-				string tmp_versions = MoveTableToTemp ("photo_versions");
-				
-				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" +
-					"	md5_sum			TEXT NULL\n" +
-					")");
-				
-				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" +
-					"	md5_sum		TEXT NULL, \n" +
-					"	protected	BOOLEAN, \n" +
-					"	UNIQUE (photo_id, version_id)\n" +
-					")");
-				
-				SqliteDataReader reader = ExecuteReader (String.Format (
-					"SELECT id, time, uri, description, roll_id, default_version_id, rating, md5_sum " +
-					"FROM {0} ", tmp_photos));
-		
-				while (reader.Read ()) {
-					System.Uri photo_uri = new System.Uri (reader ["uri"] as string);
-					
-					string filename = photo_uri.GetFilename ();
-					Uri base_uri = photo_uri.GetDirectoryUri ();
-
-					string md5 = reader["md5_sum"] != null ? reader ["md5_sum"].ToString () : null;
-
-					Execute (new DbCommand (
-						"INSERT INTO photos (id, time, base_uri, filename, description, roll_id, default_version_id, rating, md5_sum) "	+
-						"VALUES (:id, :time, :base_uri, :filename, :description, :roll_id, :default_version_id, :rating, :md5_sum)",
-						"id", Convert.ToUInt32 (reader ["id"]),
-						"time", reader ["time"],
-						"base_uri", base_uri.ToString (),
-						"filename", filename,
-						"description", reader["description"].ToString (),
-						"roll_id", Convert.ToUInt32 (reader ["roll_id"]),
-						"default_version_id", Convert.ToUInt32 (reader ["default_version_id"]),
-						"rating", Convert.ToUInt32 (reader ["rating"]),
-						"md5_sum", String.IsNullOrEmpty (md5) ? null : md5));
-				}
-				
-				reader.Close ();
-				
-				reader = ExecuteReader (String.Format (
-						"SELECT photo_id, version_id, name, uri, md5_sum, protected " +
-						"FROM {0} ", tmp_versions));
-				
-				while (reader.Read ()) {
-					System.Uri photo_uri = new System.Uri (reader ["uri"] as string);
-					
-					string filename = photo_uri.GetFilename ();
-					Uri base_uri = photo_uri.GetDirectoryUri ();
-
-					string md5 = reader["md5_sum"] != null ? reader ["md5_sum"].ToString () : null;
-					
-					Execute (new DbCommand (				
-						"INSERT INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, md5_sum) " +
-						"VALUES (:photo_id, :version_id, :name, :base_uri, :filename, :is_protected, :md5_sum)",
-						"photo_id", Convert.ToUInt32 (reader ["photo_id"]),
-						"version_id", Convert.ToUInt32 (reader ["version_id"]),
-						"name", reader["name"].ToString (),
-						"base_uri", base_uri.ToString (),
-						"filename", filename,
-						"is_protected", Convert.ToBoolean (reader["protected"]),
-						"md5_sum", String.IsNullOrEmpty (md5) ? null : md5));
-				}
-				
-				Execute ("CREATE INDEX idx_photos_roll_id ON photos(roll_id)");
-				Execute ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
-				
-
-			}, true);
-
-			// Update to version 17.1, Rename 'Import Tags' to 'Imported Tags'
-			AddUpdate (new Version (17,1),delegate () {	
-				Execute ("UPDATE tags SET name = 'Imported Tags' WHERE name = 'Import Tags'");
-			});
-			
-			// Update to version 17.2, Make sure every photo has an Original version in photo_versions
-			AddUpdate (new Version(17,2),delegate () {
-				// Find photos that have no original version;
-				var have_original_query = "SELECT id FROM photos LEFT JOIN photo_versions AS pv ON pv.photo_id = id WHERE pv.version_id = 1";
-				var no_original_query = String.Format ("SELECT id, base_uri, filename FROM photos WHERE id NOT IN ({0})", have_original_query);
-
-				var reader = ExecuteReader (no_original_query);
-
-				while (reader.Read ()) {
-					Execute (new DbCommand (
-						"INSERT INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, md5_sum) " +
-						"VALUES (:photo_id, :version_id, :name, :base_uri, :filename, :is_protected, :md5_sum)",
-						"photo_id", Convert.ToUInt32 (reader ["id"]),
-						"version_id", 1,
-						"name", "Original",
-						"base_uri", reader["base_uri"].ToString (),
-						"filename", reader["filename"].ToString (),
-						"is_protected", 1,
-						"md5_sum", ""));
-				}
-			}, true);
-
-			// Update to version 18.0, Import MD5 hashes
-			AddUpdate (new Version(18,0),delegate () {
-				string tmp_photos = MoveTableToTemp ("photos");
-				string tmp_versions = MoveTableToTemp ("photo_versions");
-
-				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" +
-					")");
-
-				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" +
-					")");
-
-				var reader = ExecuteReader (String.Format (
-					"SELECT id, time, base_uri, filename, description, roll_id, default_version_id, rating " +
-					"FROM {0} ", tmp_photos));
-
-				while (reader.Read ()) {
-					Execute (new DbCommand (
-						"INSERT INTO photos (id, time, base_uri, filename, description, roll_id, default_version_id, rating) "	+
-						"VALUES (:id, :time, :base_uri, :filename, :description, :roll_id, :default_version_id, :rating)",
-						"id", Convert.ToUInt32 (reader ["id"]),
-						"time", reader ["time"],
-						"base_uri", reader ["base_uri"].ToString (),
-						"filename", reader ["filename"].ToString (),
-						"description", reader["description"].ToString (),
-						"roll_id", Convert.ToUInt32 (reader ["roll_id"]),
-						"default_version_id", Convert.ToUInt32 (reader ["default_version_id"]),
-						"rating", Convert.ToUInt32 (reader ["rating"])));
-				}
-
-				reader.Close ();
-
-				reader = ExecuteReader (String.Format (
-						"SELECT photo_id, version_id, name, base_uri, filename, protected " +
-						"FROM {0} ", tmp_versions));
-
-				while (reader.Read ()) {
-					Execute (new DbCommand (
-						"INSERT INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, import_md5) " +
-						"VALUES (:photo_id, :version_id, :name, :base_uri, :filename, :is_protected, :import_md5)",
-						"photo_id", Convert.ToUInt32 (reader ["photo_id"]),
-						"version_id", Convert.ToUInt32 (reader ["version_id"]),
-						"name", reader["name"].ToString (),
-						"base_uri", reader["base_uri"].ToString (),
-						"filename", reader["filename"].ToString (),
-						"is_protected", Convert.ToBoolean (reader["protected"]),
-						"import_md5", ""));
-				}
-
-				Execute ("CREATE INDEX idx_photo_versions_import_md5 ON photo_versions(import_md5)");
-
-			}, true);
-		}
-
-		private const string meta_db_version_string = "F-Spot Database Version";
-
-		private static Version GetDatabaseVersion ()
-		{
-			if (!TableExists ("meta"))
-				throw new Exception ("No meta table found!");
-
-			var query = String.Format ("SELECT data FROM meta WHERE name = '{0}'", meta_db_version_string);
-			var version_id = SelectSingleString (query);
-			return new Version (version_id);
-		}
-
-		public static void Run (QueuedSqliteDatabase database)
-		{
-			db = database;
-			db_version = GetDatabaseVersion ();
-
-			if (updates.Count == 0)
-				return;
-
-			if (db_version == LatestVersion)
-				return;
-			else if (db_version > LatestVersion) {
-				if (!silent)
-					Log.Information ("The existing database version is more recent than this version of F-Spot expects.");
-				return;
-			}
-
-			uint timer = 0;
-			if (!silent)
-				timer = Log.InformationTimerStart ("Updating F-Spot Database");
-
-			// Only create and show the dialog if one or more of the updates to be done is
-			// marked as being slow
-			bool slow = false;
-			foreach (Version version in updates.Keys) {
-				if (version > db_version && (updates[version] as Update).IsSlow)
-					slow = true;
-					break;
-			}
-
-			if (slow && !silent) {
-				dialog = new ProgressDialog (Catalog.GetString ("Updating F-Spot Database"), ProgressDialog.CancelButtonType.None, 0, null);
-				dialog.Message.Text = Catalog.GetString ("Please wait while your F-Spot gallery's database is updated. This may take some time.");
-				dialog.Bar.Fraction = 0.0;
-				dialog.Modal = false;
-				dialog.SkipTaskbarHint = true;
-				dialog.WindowPosition = WindowPosition.Center;
-				dialog.ShowAll ();
-				dialog.Present ();
-				dialog.QueueDraw ();
-			}
-
-			db.BeginTransaction ();
-			try {
-				ArrayList keys = new ArrayList (updates.Keys);
-				keys.Sort ();
-				foreach (Version version in keys) {
-					if (version <= db_version)
-						continue;
-
-					Pulse ();
-					(updates[version] as Update).Execute (db, db_version);
-				}
-
-				db.CommitTransaction ();
-			} catch (Exception e) {
-				if (!silent) {
-					Log.DebugException (e);
-					Log.Warning ("Rolling back database changes because of Exception");
-				}
-				// There was an error, roll back the database
-				db.RollbackTransaction ();
-
-				// Pass the exception on, this is fatal
-				throw e;
-			}
-			
-			if (dialog != null)
-				dialog.Destroy ();
-			
-			if (db_version == LatestVersion && !silent)
-				Log.InformationTimerPrint (timer, "Database updates completed successfully (in {0}).");
-		}
-		
-		private static void AddUpdate (Version version, UpdateCode code)
-		{
-			AddUpdate (version, code, false);
-		}
-		
-		private static void AddUpdate (Version version, UpdateCode code, bool is_slow)
-		{
-			updates[version] = new Update (version, code, is_slow);
-		}
-
-		public static void Pulse ()
-		{
-			if (dialog != null) {
-				dialog.Bar.Pulse ();
-				dialog.ShowAll ();
-			}
-		}
-
-		private static int Execute (string statement)
-		{
-			return db.Execute (statement);
-		}
-
-		private static int Execute (DbCommand command)
-		{
-			return db.Execute (command);
-		}
-
-		private static void ExecuteNonQuery (string statement)
-		{
-			db.ExecuteNonQuery(statement);
-		}
-
-		private static void ExecuteNonQuery (DbCommand command)
-		{
-			db.ExecuteNonQuery(command);
-		}
-		
-		private static int ExecuteScalar (string statement)
-		{
-			return db.Execute(statement);
-		}
-
-		private static SqliteDataReader ExecuteReader (string statement)
-		{
-			return db.Query (statement);
-		}
-		
-		private static bool TableExists (string table)
-		{
-			return db.TableExists (table);
-		}
-
-		private static string SelectSingleString (string statement)
-		{
-			string result = null;
-
-			try {
-				result = (string)db.QuerySingle(statement);
-			} catch (Exception) {}
-
-			return result;
-		}
-
-		private static string MoveTableToTemp (string table_name)
-		{
-			string temp_name = table_name + "_temp";
-			
-			// Get the table definition for the table we are copying
-			string sql = SelectSingleString (String.Format ("SELECT sql FROM sqlite_master WHERE tbl_name = '{0}' AND type = 'table' ORDER BY type DESC", table_name));
-			
-			// Drop temp table if already exists
-			ExecuteNonQuery ("DROP TABLE IF EXISTS " + temp_name);
-
-			// Change the SQL to create the temp table
-			ExecuteNonQuery (sql.Replace ("CREATE TABLE " + table_name, "CREATE TEMPORARY TABLE " + temp_name));
-
-			// Copy the data
-			ExecuteScalar (String.Format ("INSERT INTO {0} SELECT * FROM {1}", temp_name, table_name));
-				
-			// Delete the original table
-			ExecuteNonQuery ("DROP TABLE " + table_name);
-
-			return temp_name;
-		}
-
-		private delegate void UpdateCode ();
-
-		private class Update {
-			public Version Version;
-			private UpdateCode code;
-			public bool IsSlow = false;
-			
-			public Update (Version to_version, UpdateCode code, bool slow)
-			{
-				this.Version = to_version;
-				this.code = code;
-				IsSlow = slow;
-			}
-
-			public Update (Version to_version, UpdateCode code)
-			{
-				this.Version = to_version;
-				this.code = code;
-			}
-
-			public void Execute (QueuedSqliteDatabase db, Version db_version)
-			{
-				code ();
-				
-				if (!silent)
-					Log.DebugFormat ("Updated database from version {0} to {1}",
-							db_version.ToString (),
-							Version.ToString ());
-
-				db_version = Version;
-				db.ExecuteNonQuery(new DbCommand("UPDATE meta SET data = :data WHERE name = :name", "name", meta_db_version_string, "data", db_version.ToString ()));
-			}
-		}
-
-		public class Version : IComparable {
-			int maj = 0;
-			int min = 0;
-
-			public Version (int maj, int min)
-			{
-				this.maj = maj;
-				this.min = min;
-			}
-
-			public Version (string version)
-			{
-				string [] parts = version.Split (new char [] {'.'}, 2);
-				try {
-					this.maj = Convert.ToInt32 (parts [0]);
-				}
-				catch (Exception) {
-					this.maj = 0;
-				}
-				try {
-					this.min = Convert.ToInt32 (parts [1]);
-				}
-				catch (Exception) {
-					this.min = 0;
-				}
-			}
-
-			//IComparable
-			public int CompareTo (object obj) {
-				if (this.GetType () == obj.GetType ())
-					return Compare (this, (Version)obj);
-				else
-					throw new Exception ("Object must be of type Version");
-			}
-
-			public int CompareTo (Version version)
-			{
-				return Compare (this, version);
-			}
-	
-			public static int Compare (Version v1, Version v2)
-			{
-				if (v1.maj == v2.maj)
-					return v1.min.CompareTo (v2.min);
-				return v1.maj.CompareTo (v2.maj);
-			}
-
-			public override string ToString ()
-			{
-				if (min == 0)
-					return maj.ToString ();
-				return maj + "." + min;
-			}
-
-			public override bool Equals (object obj)
-			{
-				return obj is Version && this == (Version)obj;
-			}
-
-			public override int GetHashCode ()
-			{
-				return maj ^ min;
-			}
-
-			public static bool operator == (Version v1, Version v2)
-			{
-				return v1.maj == v2.maj && v1.min == v2.min;
-			}
-
-			public static bool operator != (Version v1, Version v2)
-			{
-				return !(v1 == v2);
-			}
-
-			public static bool operator < (Version v1, Version v2)
-			{
-				return Compare (v1,v2) < 0;
-			}
-
-			public static bool operator > (Version v1, Version v2)
-			{
-				return Compare (v1,v2) > 0;
-			}
-
-			public static bool operator <= (Version v1, Version v2)
-			{
-				return !(v1 > v2);
-			}
-
-			public static bool operator >= (Version v1, Version v2)
-			{
-				return !(v1 < v2);
-			}
-		}
-	} 
-}
diff --git a/src/UriCollection.cs b/src/UriCollection.cs
deleted file mode 100644
index a6a2623..0000000
--- a/src/UriCollection.cs
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * UriCollection.cs
- *
- * Author(s):
- *	Larry Ewing  (lewing at novell.com)
- *	Stephane Delcroix  (stephane at delcroix.org)
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- * Copyright (c) 2007 Stephane Delcroix
- *
- * This is free software. See COPYING for details
- */
-
-using System;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Xml;
-
-using Hyena;
-using GLib;
-
-using FSpot.Imaging;
-
-namespace FSpot {
-	public class UriCollection : PhotoList {
-		public UriCollection () : base (new IBrowsableItem [0])
-		{
-		}
-
-		public UriCollection (System.IO.FileInfo [] files) : this ()
-		{
-			LoadItems (files);
-		}
-
-		public UriCollection (SafeUri [] uri) : this ()
-		{
-			LoadItems (uri);
-		}
-
-		public void Add (SafeUri uri)
-		{
-			if (ImageFile.HasLoader (uri)) {
-				//Console.WriteLine ("using image loader {0}", uri.ToString ());
-				Add (new FileBrowsableItem (uri));
-			} else {
-				GLib.FileInfo info = FileFactory.NewForUri (uri).QueryInfo ("standard::type,standard::content-type", FileQueryInfoFlags.None, null);
-
-				if (info.FileType == FileType.Directory)
-					new DirectoryLoader (this, uri);
-				else {
-					// FIXME ugh...
-					if (info.ContentType == "text/xml"
-					 || info.ContentType == "application/xml"
-					 || info.ContentType == "application/rss+xml"
-					 || info.ContentType == "text/plain") {
-						new RssLoader (this, uri);
-					}
-				}
-			}
-		}
-
-		public void LoadItems (SafeUri [] uris)
-		{
-			foreach (SafeUri uri in uris) {
-				Add (uri);
-			}
-		}
-
-		private class RssLoader
-		{
-			public RssLoader (UriCollection collection, SafeUri uri)
-			{
-				XmlDocument doc = new XmlDocument ();
-				doc.Load (uri.ToString ());
-				XmlNamespaceManager ns = new XmlNamespaceManager (doc.NameTable);
-				ns.AddNamespace ("media", "http://search.yahoo.com/mrss/");
-				ns.AddNamespace ("pheed", "http://www.pheed.com/pheed/");
-				ns.AddNamespace ("apple", "http://www.apple.com/ilife/wallpapers");
-
-				ArrayList items = new ArrayList ();
-				XmlNodeList list = doc.SelectNodes ("/rss/channel/item/media:content", ns);
-				foreach (XmlNode item in list) {
-					SafeUri image_uri = new SafeUri (item.Attributes ["url"].Value);
-					Hyena.Log.DebugFormat ("flickr uri = {0}", image_uri.ToString ());
-					items.Add (new FileBrowsableItem (image_uri));
-				}
-
-				if (list.Count < 1) {
-					list = doc.SelectNodes ("/rss/channel/item/pheed:imgsrc", ns);
-					foreach (XmlNode item in list) {
-						SafeUri image_uri = new SafeUri (item.InnerText.Trim ());
-						Hyena.Log.DebugFormat ("pheed uri = {0}", uri);
-						items.Add (new FileBrowsableItem (image_uri));
-					}
-				}
-
-				if (list.Count < 1) {
-					list = doc.SelectNodes ("/rss/channel/item/apple:image", ns);
-					foreach (XmlNode item in list) {
-						SafeUri image_uri = new SafeUri (item.InnerText.Trim ());
-						Hyena.Log.DebugFormat ("apple uri = {0}", uri);
-						items.Add (new FileBrowsableItem (image_uri));
-					}
-				}
-				collection.Add (items.ToArray (typeof (FileBrowsableItem)) as FileBrowsableItem []);
-			}
-		}
-
-		private class DirectoryLoader
-		{
-			UriCollection collection;
-			GLib.File file;
-
-			public DirectoryLoader (UriCollection collection, SafeUri uri)
-			{
-				this.collection = collection;
-				file = FileFactory.NewForUri (uri);
-				file.EnumerateChildrenAsync ("standard::*",
-							     FileQueryInfoFlags.None,
-							     500,
-							     null,
-							     InfoLoaded);
-										    
-			}
-
-			void InfoLoaded (GLib.Object o, GLib.AsyncResult res)
-			{
-				List<FileBrowsableItem> items = new List<FileBrowsableItem> ();
-				foreach (GLib.FileInfo info in file.EnumerateChildrenFinish (res)) {
-					SafeUri i = new SafeUri (file.GetChild (info.Name).Uri);
-					Hyena.Log.DebugFormat ("testing uri = {0}", i);
-					if (ImageFile.HasLoader (i))
-						items.Add (new FileBrowsableItem (i));
-				}
-				Gtk.Application.Invoke (items, System.EventArgs.Empty, delegate (object sender, EventArgs args) {
-					collection.Add (items.ToArray ());
-				});
-			}
-		}
-
-		protected void LoadItems (System.IO.FileInfo [] files)
-		{
-			List<IBrowsableItem> items = new List<IBrowsableItem> ();
-			foreach (var f in files) {
-				if (ImageFile.HasLoader (new SafeUri (f.FullName))) {
-					Hyena.Log.Debug (f.FullName);
-					items.Add (new FileBrowsableItem (new SafeUri (f.FullName)));
-				}
-			}
-
-			list = items;
-			this.Reload ();
-		}
-	}
-
-
-}
-
diff --git a/src/Util.cs b/src/Util.cs
deleted file mode 100644
index 38425b7..0000000
--- a/src/Util.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-//
-// Utility functions.
-//
-// Miguel de Icaza (miguel at ximian.com).
-//
-// (C) 2002 Ximian, Inc.
-//
-//
-
-using System.Runtime.InteropServices;
-using System.Threading;
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using System;
-using Hyena;
-
-
-namespace FSpot.Utils
-{
-
-	public class UriList : List<SafeUri> {
-		public UriList (FSpot.IBrowsableItem [] photos) {
-			foreach (FSpot.IBrowsableItem p in photos) {
-				SafeUri uri;
-				try {
-					uri = p.DefaultVersion.Uri;
-				} catch {
-					continue;
-				}
-				Add (uri);
-			}
-		}
-		
-		public UriList () : base ()
-		{
-		}
-		
-		private void LoadFromStrings (string [] items) {
-			//string [] items = System.Text.RegularExpressions.Regex.Split ("\n", data);
-			
-			foreach (String i in items) {
-				if (!i.StartsWith ("#")) {
-					SafeUri uri;
-					String s = i;
-	
-					if (i.EndsWith ("\r")) {
-						s = i.Substring (0, i.Length - 1);
-						Log.DebugFormat ("uri = {0}", s);
-					}
-					
-					try {
-						uri = new SafeUri (s);
-					} catch {
-#if true //Workaround to bgo 362016 in gnome-screenshot. Remove this hack when gnome 2.6.18 is widely distributed.
-						if (System.Text.RegularExpressions.Regex.IsMatch (s, "^file:/[^/]")) {
-							try {
-								s = "file:///" + s.Substring(6);
-								uri = new SafeUri (s);
-								Log.DebugFormat ("Converted uri from file:/ to >>{0}<<", s);
-							} catch {
-								continue;
-							}
-						} else
-							continue;
-#else					
-						continue;
-#endif
-					}
-					Add (uri);
-				}
-			}
-		}
-
-		public void AddUnknown (string unknown)
-		{
-			SafeUri uri;
-			
-			if (File.Exists (unknown) || Directory.Exists (unknown))
-				uri = new SafeUri (unknown);
-			else 
-				uri = new SafeUri (unknown);
-			
-			Add (uri);
-		}
-	
-		public UriList (string data) 
-		{
-			LoadFromStrings (data.Split ('\n'));
-		}
-		
-		public UriList (string [] uris)
-		{
-			LoadFromStrings (uris);
-		}
-		
-		/*public UriList (Gtk.SelectionData selection) 
-		{
-			// FIXME this should check the atom etc.
-			LoadFromString (System.Text.Encoding.UTF8.GetString (selection.Data));
-		}*/
-	
-		/*public void Add (string path)
-		{
-			AddUnknown (path);
-		}*/
-	
-		public void Add (FSpot.IBrowsableItem item)
-		{
-			Add (item.DefaultVersion.Uri);
-		}
-	
-		public override string ToString () {
-			StringBuilder list = new StringBuilder ();
-	
-			foreach (SafeUri uri in this) {
-				if (uri == null)
-					break;
-	
-				list.Append (uri.ToString () + Environment.NewLine);
-			}
-	
-			return list.ToString ();
-		}
-	
-		public string [] ToLocalPaths () {
-			int count = 0;
-			foreach (SafeUri uri in this) {
-				if (uri.IsFile)
-					count++;
-			}
-			
-			String [] paths = new String [count];
-			count = 0;
-			foreach (SafeUri uri in this) {
-				if (uri.IsFile)
-					paths[count++] = uri.LocalPath;
-			}
-			return paths;
-		}
-	}
-}
-
-
diff --git a/src/Utils/FileExtensions.cs b/src/Utils/FileExtensions.cs
deleted file mode 100644
index f8fbe8b..0000000
--- a/src/Utils/FileExtensions.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * FSpot.Utils.FileExtensions.cs
- *
- * Author(s)
- * 	Paul Wellner Bou <paul at purecodes.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.IO;
-using Mono.Unix;
-using GLib;
-using Hyena;
-
-namespace FSpot.Utils
-{
-	public static class FileExtensions
-	{
-		public static bool CopyRecursive (this GLib.File source, GLib.File target, GLib.FileCopyFlags flags, GLib.Cancellable cancellable, GLib.FileProgressCallback callback)
-		{
-			bool result = true;
-			
-			GLib.FileType ft = source.QueryFileType (GLib.FileQueryInfoFlags.None, cancellable);
-			
-			if (ft != GLib.FileType.Directory) {
-				Hyena.Log.DebugFormat ("Copying \"{0}\" to \"{1}\"", source.Path, target.Path);
-				return source.Copy (target, flags, cancellable, callback);
-			}
-			
-			if (!target.Exists) {
-				Hyena.Log.DebugFormat ("Creating directory: \"{0}\"", target.Path);
-				result = result && target.MakeDirectoryWithParents (cancellable);
-			}
-			
-			GLib.FileEnumerator fe = source.EnumerateChildren ("standard::name", GLib.FileQueryInfoFlags.None, cancellable);
-			GLib.FileInfo fi = fe.NextFile ();
-			while (fi != null) {
-				GLib.File source_file = GLib.FileFactory.NewForPath (Path.Combine (source.Path, fi.Name));
-				GLib.File target_file = GLib.FileFactory.NewForPath (Path.Combine (target.Path, fi.Name));
-				result = result && source_file.CopyRecursive(target_file, flags, cancellable, callback);
-				fi = fe.NextFile ();
-			}
-			fe.Close (cancellable);
-			return result;
-		}
-	}
-}
diff --git a/src/Utils/Makefile.am b/src/Utils/Makefile.am
deleted file mode 100644
index 191d979..0000000
--- a/src/Utils/Makefile.am
+++ /dev/null
@@ -1,35 +0,0 @@
-ASSEMBLY = FSpot.Utils
-TARGET = library
-LINK = $(REF_FSPOT_UTILS)
-
-SOURCES = \
-	Cache.cs \
-	CairoUtils.cs \
-	ConsoleCrayon.cs \
-	FileExtensions.cs \
-	GdkUtils.cs \
-    GIOTagLibFileAbstraction.cs \
-	GtkUtil.cs \
-	HashUtils.cs \
-	Metadata.cs \
-	PixbufUtils.cs \
-	RecursiveFileEnumerator.cs \
-	SafeUri.cs \
-	SafeUriExtensions.cs \
-	SidecarXmpExtensions.cs \
-	Unix.cs \
-	UriExtensions.cs \
-	UriUtils.cs \
-	XdgThumbnailSpec.cs \
-	Tests/GIOTagLibFileAbstractionTests.cs \
-	Tests/ImageTestHelper.cs \
-	Tests/SafeUriTests.cs \
-	Tests/SidecarXmpExtensionsTests.cs \
-	Tests/XdgThumbnailSpecTests.cs
-
-RESOURCES =
-
-include $(top_srcdir)/build/build.mk
-
-EXTRA_DIST += FSpot.Utils.dll.config
-module_SCRIPTS += FSpot.Utils.dll.config
diff --git a/src/Utils/Makefile.in b/src/Utils/Makefile.in
deleted file mode 100644
index f53c01d..0000000
--- a/src/Utils/Makefile.in
+++ /dev/null
@@ -1,823 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = src/Utils
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Utils
-TARGET = library
-LINK = $(REF_FSPOT_UTILS) $(am__append_1)
-SOURCES = \
-	Cache.cs \
-	CairoUtils.cs \
-	ConsoleCrayon.cs \
-	FileExtensions.cs \
-	GdkUtils.cs \
-    GIOTagLibFileAbstraction.cs \
-	GtkUtil.cs \
-	HashUtils.cs \
-	Metadata.cs \
-	PixbufUtils.cs \
-	RecursiveFileEnumerator.cs \
-	SafeUri.cs \
-	SafeUriExtensions.cs \
-	SidecarXmpExtensions.cs \
-	Unix.cs \
-	UriExtensions.cs \
-	UriUtils.cs \
-	XdgThumbnailSpec.cs \
-	Tests/GIOTagLibFileAbstractionTests.cs \
-	Tests/ImageTestHelper.cs \
-	Tests/SafeUriTests.cs \
-	Tests/SidecarXmpExtensionsTests.cs \
-	Tests/XdgThumbnailSpecTests.cs
-
-RESOURCES = 
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES) FSpot.Utils.dll.config
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
-	$(THEME_ICONS_SOURCE) FSpot.Utils.dll.config
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Utils/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign src/Utils/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/Utils/Metadata.cs b/src/Utils/Metadata.cs
deleted file mode 100644
index 882b818..0000000
--- a/src/Utils/Metadata.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using Hyena;
-using TagLib;
-using System;
-using GLib;
-
-namespace FSpot.Utils
-{
-    public static class Metadata
-    {
-        public static TagLib.Image.File Parse (SafeUri uri)
-        {
-            // Detect mime-type
-            var gfile = FileFactory.NewForUri (uri);
-            var info = gfile.QueryInfo ("standard::content-type", FileQueryInfoFlags.None, null);
-            var mime = info.ContentType;
-
-            // Parse file
-            var res = new GIOTagLibFileAbstraction () { Uri = uri };
-            var sidecar_uri = uri.ReplaceExtension (".xmp");
-            var sidecar_res = new GIOTagLibFileAbstraction () { Uri = sidecar_uri };
-            var file = TagLib.File.Create (res, mime, ReadStyle.Average) as TagLib.Image.File;
-
-            // Load XMP sidecar
-            var sidecar_file = GLib.FileFactory.NewForUri (sidecar_uri);
-            if (sidecar_file.Exists) {
-                file.ParseXmpSidecar (sidecar_res);
-            }
-
-            return file;
-        }
-    }
-}
diff --git a/src/Utils/SafeUri.cs b/src/Utils/SafeUri.cs
deleted file mode 100644
index 6f381cc..0000000
--- a/src/Utils/SafeUri.cs
+++ /dev/null
@@ -1,208 +0,0 @@
-/***************************************************************************
- *  SafeUri.cs
- *
- *  Copyright (C) 2006 Novell, Inc.
- *  Written by Aaron Bockover <aaron at abock.org>
- ****************************************************************************/
-
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
- *
- *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),
- *  to deal in the Software without restriction, including without limitation
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
- *  and/or sell copies of the Software, and to permit persons to whom the
- *  Software is furnished to do so, subject to the following conditions:
- *
- *  The above copyright notice and this permission notice shall be included in
- *  all copies or substantial portions of the Software.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *  DEALINGS IN THE SOFTWARE.
- */
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Hyena
-{
-    public class SafeUri
-    {
-        private enum LocalPathCheck {
-            NotPerformed,
-            Yes,
-            No
-        }
-
-        private static int MAX_SCHEME_LENGTH = 8;
-
-        private string uri;
-        private string local_path;
-        private string scheme;
-        private LocalPathCheck local_path_check = LocalPathCheck.NotPerformed;
-
-        public SafeUri (string uri)
-        {
-            int scheme_delimit_index = uri.IndexOf ("://");
-            if (scheme_delimit_index > 0 && scheme_delimit_index <= MAX_SCHEME_LENGTH) {
-                this.uri = uri;
-            } else {
-                this.uri = FilenameToUri (uri);
-            }
-        }
-
-        public SafeUri (string uri, bool isUri)
-        {
-            if (isUri) {
-                this.uri = uri;
-            } else {
-                this.uri = FilenameToUri (uri);
-            }
-        }
-
-        public SafeUri (Uri uri)
-        {
-            this.uri = uri.AbsoluteUri;
-        }
-
-        public static string FilenameToUri (string localPath)
-        {
-            // TODO: replace with managed conversion to avoid marshalling
-            IntPtr path_ptr = GLib.Marshaller.StringToPtrGStrdup (localPath);
-
-#if WIN32
-            IntPtr uri_ptr = g_filename_to_uri_utf8 (path_ptr, IntPtr.Zero, IntPtr.Zero);
-#else
-            IntPtr uri_ptr = g_filename_to_uri (path_ptr, IntPtr.Zero, IntPtr.Zero);
-#endif
-            GLib.Marshaller.Free (path_ptr);
-
-            if (uri_ptr == IntPtr.Zero) {
-                throw new ApplicationException ("Filename path must be absolute");
-            }
-
-            string uri = GLib.Marshaller.Utf8PtrToString (uri_ptr);
-            GLib.Marshaller.Free (uri_ptr);
-
-            return uri;
-        }
-
-        public static string UriToFilename (string uri)
-        {
-            // TODO: replace with managed conversion to avoid marshalling
-            IntPtr uri_ptr = GLib.Marshaller.StringToPtrGStrdup (uri);
-#if WIN32
-            IntPtr path_ptr = g_filename_from_uri_utf8 (uri_ptr, IntPtr.Zero, IntPtr.Zero);
-#else
-            IntPtr path_ptr = g_filename_from_uri (uri_ptr, IntPtr.Zero, IntPtr.Zero);
-#endif
-
-            GLib.Marshaller.Free (uri_ptr);
-
-            if (path_ptr == IntPtr.Zero) {
-                throw new ApplicationException ("URI could not be converted to local file location");
-            }
-
-            string path = GLib.Marshaller.Utf8PtrToString (path_ptr);
-            GLib.Marshaller.Free (path_ptr);
-
-            return path;
-        }
-
-        public static string UriToFilename (SafeUri uri)
-        {
-            return UriToFilename (uri.AbsoluteUri);
-        }
-
-        public override string ToString ()
-        {
-            return AbsoluteUri;
-        }
-
-        public static implicit operator string(SafeUri s)
-        {
-            return s.ToString ();
-        }
-
-        public override bool Equals (object o)
-        {
-            if (!(o is SafeUri)) {
-                return false;
-            }
-
-            return (o as SafeUri).AbsoluteUri == AbsoluteUri;
-        }
-
-        public override int GetHashCode ()
-        {
-            return AbsoluteUri.GetHashCode ();
-        }
-
-        public string AbsoluteUri {
-            get { return uri; }
-        }
-
-        public bool IsLocalPath {
-            get {
-                if (local_path_check == LocalPathCheck.NotPerformed) {
-                    if (IsFile) {
-                        local_path_check = LocalPathCheck.Yes;
-                        return true;
-                    } else {
-                        local_path_check = LocalPathCheck.No;
-                        return false;
-                    }
-                }
-
-                return local_path_check == LocalPathCheck.Yes;
-            }
-        }
-
-        public string AbsolutePath {
-            get {
-                if (local_path == null && IsLocalPath) {
-                    local_path = UriToFilename (uri);
-                }
-
-                return local_path;
-            }
-        }
-
-        public string LocalPath {
-            get { return AbsolutePath; }
-        }
-
-        public string Scheme {
-            get {
-                if (scheme == null) {
-                    scheme = uri.Substring (0, uri.IndexOf ("://"));
-                }
-
-                return scheme;
-            }
-        }
-
-        public bool IsFile {
-            get { return Scheme == System.Uri.UriSchemeFile; }
-        }
-
-#if WIN32
-        [DllImport ("libglib-2.0-0.dll")]
-        private static extern IntPtr g_filename_to_uri_utf8 (IntPtr filename, IntPtr hostname, IntPtr error);
-
-        [DllImport ("libglib-2.0-0.dll")]
-        private static extern IntPtr g_filename_from_uri_utf8 (IntPtr uri, IntPtr hostname, IntPtr error);
-#else
-        [DllImport ("libglib-2.0-0.dll")]
-        private static extern IntPtr g_filename_to_uri (IntPtr filename, IntPtr hostname, IntPtr error);
-
-        [DllImport ("libglib-2.0-0.dll")]
-        private static extern IntPtr g_filename_from_uri (IntPtr uri, IntPtr hostname, IntPtr error);
-#endif
-    }
-}
diff --git a/src/Utils/SidecarXmpExtensions.cs b/src/Utils/SidecarXmpExtensions.cs
deleted file mode 100644
index aac3f11..0000000
--- a/src/Utils/SidecarXmpExtensions.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using System.IO;
-using GLib;
-using Hyena;
-using TagLib.Image;
-using TagLib.Xmp;
-
-namespace FSpot.Utils
-{
-    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 void ParseXmpSidecar (this TagLib.Image.File file, TagLib.File.IFileAbstraction resource)
-        {
-            string xmp;
-            using (var stream = resource.ReadStream) {
-                using (var reader = new StreamReader (stream)) {
-                    xmp = reader.ReadToEnd ();
-                }
-            }
-
-            var tag = new XmpTag (xmp);
-            var xmp_tag = file.GetTag (TagLib.TagTypes.XMP, true) as XmpTag;
-            xmp_tag.ReplaceFrom (tag);
-        }
-
-        public static void 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)
-                return;
-
-            var xmp = xmp_tag.Render ();
-
-            using (var stream = resource.WriteStream) {
-                stream.SetLength (0);
-                using (var writer = new StreamWriter (stream)) {
-                    writer.Write (xmp);
-                }
-                resource.CloseStream (stream);
-            }
-        }
-    }
-}
diff --git a/src/Utils/Tests/ImageTestHelper.cs b/src/Utils/Tests/ImageTestHelper.cs
deleted file mode 100644
index 7e3f29e..0000000
--- a/src/Utils/Tests/ImageTestHelper.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-#if ENABLE_TESTS
-using NUnit.Framework;
-using System;
-using Hyena;
-using TagLib;
-
-namespace FSpot.Utils.Tests
-{
-	public static class ImageTestHelper
-	{
-        public static SafeUri CreateTempFile (string name)
-        {
-            var uri = new SafeUri (Environment.CurrentDirectory + "/../tests/data/" + name);
-            var file = GLib.FileFactory.NewForUri (uri);
-
-            var tmp = System.IO.Path.GetTempFileName ()+".jpg"; // hack!
-            var uri2 = new SafeUri (tmp);
-            var file2 = GLib.FileFactory.NewForUri (uri2);
-            file.Copy (file2, GLib.FileCopyFlags.Overwrite, null, null);
-            return uri2;
-        }
-
-        public static void DeleteTempFile (SafeUri uri)
-        {
-            var file = GLib.FileFactory.NewForUri (uri);
-            file.Delete ();
-        }
-	}
-}
-#endif
diff --git a/src/Utils/Tests/SidecarXmpExtensionsTests.cs b/src/Utils/Tests/SidecarXmpExtensionsTests.cs
deleted file mode 100644
index fdda372..0000000
--- a/src/Utils/Tests/SidecarXmpExtensionsTests.cs
+++ /dev/null
@@ -1,143 +0,0 @@
-#if ENABLE_TESTS
-using NUnit.Framework;
-using System;
-using Hyena;
-using TagLib;
-using TagLib.IFD;
-using TagLib.IFD.Entries;
-using TagLib.IFD.Tags;
-using TagLib.Xmp;
-
-namespace FSpot.Utils.Tests
-{
-    [TestFixture]
-    public class SidecarXmpExtensionsTests
-    {
-        [SetUp]
-        public void Initialize () {
-            GLib.GType.Init ();
-        }
-
-        [Test]
-        public void ValidateWithoutSidecar ()
-        {
-            // Tests the file in its original state
-            var uri = ImageTestHelper.CreateTempFile ("taglib-sample.jpg");
-            var res = new GIOTagLibFileAbstraction () { Uri = uri };
-
-            var file = File.Create (res) as TagLib.Image.File;
-            Assert.IsTrue (file != null);
-
-            XmpTag xmp = file.GetTag (TagTypes.XMP) as XmpTag;
-            // Xmp.MicrosoftPhoto_1_.DateAcquired (XmpText/20) "2009-08-04T20:42:36Z"
-            {
-                var node = xmp.NodeTree;
-                node = node.GetChild (XmpTag.MS_PHOTO_NS, "DateAcquired");
-                Assert.IsNotNull (node);
-                Assert.AreEqual ("2009-08-04T20:42:36Z", node.Value);
-                Assert.AreEqual (XmpNodeType.Simple, node.Type);
-                Assert.AreEqual (0, node.Children.Count);
-            }
-
-            Assert.AreEqual (new string [] { "Kirche Sulzbach" }, file.ImageTag.Keywords);
-
-            ImageTestHelper.DeleteTempFile (uri);
-        }
-
-        [Test]
-        public void ValidateWithSidecar ()
-        {
-            // Tests the file with a sidecar
-            var uri = ImageTestHelper.CreateTempFile ("taglib-sample.jpg");
-            var res = new GIOTagLibFileAbstraction () { Uri = uri };
-            var sidecar_uri = CopySidecarToTest (uri);
-            var sidecar_res = new GIOTagLibFileAbstraction () { Uri = sidecar_uri };
-
-            var file = File.Create (res) as TagLib.Image.File;
-            Assert.IsTrue (file != null);
-
-            // Override by sidecar file
-            file.ParseXmpSidecar (sidecar_res);
-
-            XmpTag xmp = file.GetTag (TagTypes.XMP) as XmpTag;
-            // Xmp.MicrosoftPhoto_1_.DateAcquired (XmpText/20) "2009-08-04T20:42:36Z"
-            {
-                var node = xmp.NodeTree;
-                node = node.GetChild (XmpTag.MS_PHOTO_NS, "DateAcquired");
-                Assert.IsNull (node);
-            }
-
-            Assert.AreEqual (new string [] { "F-Spot", "metadata", "test" }, file.ImageTag.Keywords);
-
-            ImageTestHelper.DeleteTempFile (uri);
-            ImageTestHelper.DeleteTempFile (sidecar_uri);
-        }
-
-        [Test]
-        public void TestSidecarWrite ()
-        {
-            var uri = ImageTestHelper.CreateTempFile ("taglib-sample.jpg");
-            var sidecar_uri = uri.ReplaceExtension (".xmp");
-            var res = new GIOTagLibFileAbstraction () { Uri = uri };
-            var sidecar_res = new GIOTagLibFileAbstraction () { Uri = sidecar_uri };
-            Assert.IsTrue (sidecar_uri.ToString ().EndsWith (".xmp"));
-
-            var sidecar_file = GLib.FileFactory.NewForUri (sidecar_uri);
-            Assert.IsFalse (sidecar_file.Exists);
-
-            var file = File.Create (res) as TagLib.Image.File;
-            Assert.IsTrue (file != null);
-
-            file.ImageTag.Keywords = new string [] { "Kirche Aarschot" };
-
-            // Validate writing of the sidecar
-            file.SaveXmpSidecar (sidecar_res);
-            Assert.IsTrue (sidecar_file.Exists);
-
-            var target = "<x:xmpmeta xmlns:x=\"adobe:ns:meta/\"><rdf:RDF xm"
-                + "lns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">"
-                + "<rdf:Description MicrosoftPhoto:DateAcquired=\"2009-08-0"
-                + "4T20:42:36Z\" xmp:creatortool=\"Microsoft Windows Photo "
-                + "Gallery 6.0.6001.18000\" tiff:software=\"Microsoft Windo"
-                + "ws Photo Gallery 6.0.6001.18000\" tiff:Orientation=\"1\""
-                + " MicrosoftPhoto:Rating=\"1\" xmp:Rating=\"1\" xmlns:tiff"
-                + "=\"http://ns.adobe.com/tiff/1.0/\" xmlns:xmp=\"http://ns"
-                + ".adobe.com/xap/1.0/\" xmlns:MicrosoftPhoto=\"http://ns.m"
-                + "icrosoft.com/photo/1.0/\"><MicrosoftPhoto:LastKeywordXMP"
-                + "><rdf:Bag><rdf:li>Kirche Sulzbach</rdf:li></rdf:Bag></Mi"
-                + "crosoftPhoto:LastKeywordXMP><dc:subject xmlns:dc=\"http:"
-                + "//purl.org/dc/elements/1.1/\"><rdf:Bag><rdf:li>Kirche Aa"
-                + "rschot</rdf:li></rdf:Bag></dc:subject></rdf:Description>"
-                + "</rdf:RDF></x:xmpmeta>";
-
-            string written;
-            var read_res = new GIOTagLibFileAbstraction () { Uri = sidecar_uri };
-            using (var stream = read_res.ReadStream) {
-                using (var reader = new System.IO.StreamReader (stream)) {
-                    written = reader.ReadToEnd ();
-                }
-            }
-            Assert.AreEqual (target, written);
-
-            // Check that the file is unchanged
-            file = File.Create (res) as TagLib.Image.File;
-            var keywords = file.ImageTag.Keywords;
-            Assert.AreEqual (new string [] { "Kirche Sulzbach" }, keywords);
-
-            ImageTestHelper.DeleteTempFile (uri);
-            ImageTestHelper.DeleteTempFile (sidecar_uri);
-        }
-
-        SafeUri CopySidecarToTest (SafeUri uri)
-        {
-            var target = uri.ReplaceExtension (".xmp");
-
-            var orig_uri = new SafeUri (Environment.CurrentDirectory + "/../tests/data/taglib-sample.xmp");
-            var file = GLib.FileFactory.NewForUri (orig_uri);
-            var file2 = GLib.FileFactory.NewForUri (target);
-            file.Copy (file2, GLib.FileCopyFlags.Overwrite, null, null);
-            return target;
-        }
-    }
-}
-#endif
diff --git a/src/Utils/Unix.cs b/src/Utils/Unix.cs
deleted file mode 100644
index ac5db78..0000000
--- a/src/Utils/Unix.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using Hyena;
-
-namespace FSpot.Utils {
-	public static class Unix {
-		static class NativeMethods
-		{
-			[DllImport ("libc", EntryPoint="rename", CharSet = CharSet.Auto)]
-			public static extern int Rename (string oldpath, string newpath);
-
-			[DllImport("libc", EntryPoint="prctl")]
-			public static extern int PrCtl(int option, string name, ulong arg3, ulong arg4, ulong arg5);
-
-			[DllImport("libc", EntryPoint="utime")]
-			public static extern int UTime (string filename, IntPtr buf);
-		}
-
-		public static int Rename (string oldpath, string newpath)
-		{
-			return NativeMethods.Rename (oldpath, newpath);
-		}
-
-		public static void SetProcessName (string name)
-		{
-			try {
-				if (NativeMethods.PrCtl(15 /* PR_SET_NAME */, name, 0, 0, 0) != 0)
-					Log.Warning ("Error setting process name: " + Mono.Unix.Native.Stdlib.GetLastError());
-			} catch (DllNotFoundException) {
-				/* noop */
-			} catch (EntryPointNotFoundException) {
-		    		/* noop */
-			}
-		}
-
-		public static void Touch (string filename)
-		{
-			if (NativeMethods.UTime (filename, IntPtr.Zero) != 0)
-				Log.DebugFormat ("touch on {0} failed", filename);
-		}
-	}
-}
diff --git a/src/Vector.cs b/src/Vector.cs
deleted file mode 100644
index 565eee6..0000000
--- a/src/Vector.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-
-namespace FSpot {
-	public class Vector {
-		double X;
-		double Y;
-		
-		public Vector (Gdk.Point p)
-		{
-			X = p.X;
-			Y = p.Y;
-		}
-
-		public Vector (double x, double y)
-		{
-			X = x;
-			Y = y;
-		}
-
-		public void Normalize ()
-		{
-			double len = Length;
-			X = X / len;
-			Y = Y / len;
-		}
-		
-		public double AngleBetween (Vector v)
-		{
-			return AngleBetween (this, v);
-		}
-		
-		public static double AngleBetween (Vector v1, Vector v2)
-		{
-			double val = Dot (v1, v2) / (v1.Length * v2.Length);
-			val = Math.Acos (val);
-			if (!Right (v1, v2))
-				return -val;
-			return val;
-		}
-
-		static bool Right (Vector v1, Vector v2)
-		{
-			return (v1.X * v2.Y - v1.Y * v2.X) > 0;
-		}
-
-		public static double Dot (Vector v1, Vector v2)
-		{
-			return v1.X * v2.X + v1.Y * v2.Y;
-		}
-
-		double Length {
-			get {
-				return Math.Sqrt (X * X + Y * Y);
-			}
-		}
-
-		public override string ToString ()
-		{
-			return String.Format ("v({0},{1}).{2}", X, Y, Length);
-		}
-	}
-}
diff --git a/src/Widgets/CairoTransition.cs b/src/Widgets/CairoTransition.cs
deleted file mode 100644
index 08ffda8..0000000
--- a/src/Widgets/CairoTransition.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-// FSpot.Widgets.CairoTransition.cs
-//
-// Author(s):
-//	Stephane Delcroix  <stephane at delcroix.org>
-//
-// Copyright (c) 2009 Novell, Inc.
-//
-// This is open source software. See COPYING for details.
-//
-
-using System;
-
-using Cairo;
-using Gdk;
-
-using FSpot.Utils;
-
-using Color = Cairo.Color;
-
-namespace FSpot.Widgets
-{
-	public abstract class CairoTransition : SlideShowTransition
-	{
-		public CairoTransition (string name) : base (name)
-		{
-		}
-
-		public override void Draw (Drawable d, Pixbuf prev, Pixbuf next, int width, int height, double progress)
-		{
-			using (Cairo.Context cr = Gdk.CairoHelper.Create (d)) {
-				Draw (cr, prev, next, width, height, progress);
-			}
-		}
-
-		protected abstract void Draw (Context cr, Pixbuf prev, Pixbuf next, int width, int height, double progress);
-	}
-}
diff --git a/src/Widgets/CellRendererTextProgress.cs b/src/Widgets/CellRendererTextProgress.cs
deleted file mode 100644
index 24f6bbb..0000000
--- a/src/Widgets/CellRendererTextProgress.cs
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * FSpot.Widgets.CellRendererTextProgress.cs
- *
- * Author(s)
- * 	Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- */
-
-
-using System;
-using System.Collections.Generic;
-
-using Gtk;
-using GLib;
-
-using FSpot;
-using FSpot.Utils;
-
-using Banshee.Database;
-
-using Mono.Unix;
-using Mono.Data.SqliteClient;
-
-namespace FSpot.Widgets
-{	
-	/*
-	 * Because subclassing of CellRendererText does not to work, we
-	 * use a new cellrenderer, which renderes a simple text and a
-	 * progress bar below the text similar to the one used in baobab (gnome-utils)
-	 */
-	public class CellRendererTextProgress : CellRenderer
-	{
-		readonly int progress_width;
-		readonly int progress_height;
-		
-		static Gdk.Color green = new Gdk.Color (0xcc, 0x00, 0x00);
-		static Gdk.Color yellow = new Gdk.Color (0xed, 0xd4, 0x00);
-		static Gdk.Color red = new Gdk.Color (0x73, 0xd2, 0x16);
-		
-		public CellRendererTextProgress () : this (70, 8)
-		{
-		}
-
-		public CellRendererTextProgress (int progress_width, int progress_height)
-		{
-			this.progress_width = progress_width;
-			this.progress_height = progress_height;
-			
-			Xalign = 0.0f;
-			Yalign = 0.5f;
-			
-			Xpad = Ypad = 2;
-		}
-		
-		protected CellRendererTextProgress (IntPtr ptr) : base (ptr)
-		{
-		}
-		
-		int progress_value;
-		
-		[GLib.PropertyAttribute ("value")]
-		public int Value {
-			get { return progress_value; }
-			set {
-				/* normalize value */
-				progress_value = Math.Max (Math.Min (value, 100), 0);
-			}
-		}
-		
-		Pango.Layout text_layout;
-		string text;
-		
-		[GLib.PropertyAttribute ("text")]
-		public string Text {
-			get { return text; }
-			set {
-				if (text == value)
-					return;
-				
-				text = value;
-				text_layout = null;	
-			}
-		}
-		
-		bool use_markup;
-		public bool UseMarkup {
-			get { return use_markup; }
-			set {
-				if (use_markup == value)
-					return;
-				
-				use_markup = value;
-				text_layout = null;
-			}
-		}
-		
-		void UpdateLayout (Widget widget)
-		{
-			text_layout = new Pango.Layout (widget.PangoContext);
-
-			if (UseMarkup)
-				text_layout.SetMarkup (text);
-			else
-				text_layout.SetText (text);
-		}
-		
-		Gdk.Color GetValueColor ()
-		{
-			if (progress_value <= 33)
-				return green;
-			
-			if (progress_value <= 66)
-				return yellow;
-			
-			return red;
-		}
-		
-		public override void GetSize (Gtk.Widget widget, ref Gdk.Rectangle cell_area, out int x_offset, out int y_offset, out int width, out int height)
-		{
-			if (text_layout == null)
-				UpdateLayout (widget);
-			
-			int text_width, text_height;
-			
-			text_layout.GetPixelSize (out text_width, out text_height);
-			
-			width = (int) (2 * Xpad + Math.Max (progress_width, text_width));
-			height = (int) (3 * Ypad + progress_height + text_height);
-			
-			x_offset = Math.Max ((int) (Xalign * (cell_area.Width - width)), 0);
-			y_offset = Math.Max ((int) (Yalign * (cell_area.Height - height)), 0);
-		}
-		
-		protected override void Render (Gdk.Drawable window, Gtk.Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, Gtk.CellRendererState flags)
-		{
-			base.Render (window, widget, background_area, cell_area, expose_area, flags);
-			
-			if (text_layout == null)
-				UpdateLayout (widget);
-
-			int x, y, width, height, text_width, text_height;
-			
-			/* first render the text */
-			text_layout.GetPixelSize (out text_width, out text_height);
-			
-			x  = (int) (cell_area.X + Xpad + Math.Max ((int) (Xalign * (cell_area.Width - 2 * Xpad - text_width)), 0));
-			y  = (int) (cell_area.Y + Ypad);
-
-			Style.PaintLayout (widget.Style,
-			                   window,
-			                   StateType.Normal,
-			                   true,
-			                   cell_area,
-			                   widget,
-			                   "cellrenderertextprogress",
-			                   x, y,
-			                   text_layout);
-			
-			y += (int) (text_height + Ypad);
-			x  = (int) (cell_area.X + Xpad + Math.Max ((int) (Xalign * (cell_area.Width - 2 * Xpad - progress_width)), 0));
-			
-			
-			/* second render the progress bar */
-			using (Cairo.Context cairo_context = Gdk.CairoHelper.Create (window)) {
-				
-				width = progress_width;
-				height = progress_height;
-				
-				cairo_context.Rectangle (x, y, width, height);
-				Gdk.CairoHelper.SetSourceColor (cairo_context, widget.Style.Dark (StateType.Normal));
-				cairo_context.Fill ();
-				
-				x += widget.Style.XThickness;
-				y += widget.Style.XThickness;
-				width -= 2* widget.Style.XThickness;
-				height -= 2 * widget.Style.Ythickness;
-				
-				cairo_context.Rectangle (x, y, width, height);
-				Gdk.CairoHelper.SetSourceColor (cairo_context, widget.Style.Light (StateType.Normal));
-				cairo_context.Fill ();
-				
-				/* scale the value and ensure, that at least one pixel is drawn, if the value is greater than zero */
-				int scaled_width =
-					(int) Math.Max (((progress_value * width) / 100.0),
-					                (progress_value == 0)? 0 : 1);
-				
-				cairo_context.Rectangle (x, y, scaled_width, height);
-				Gdk.CairoHelper.SetSourceColor (cairo_context, GetValueColor ());
-				cairo_context.Fill ();
-			}
-		}
-	}
-}
diff --git a/src/Widgets/CompositeUtils.cs b/src/Widgets/CompositeUtils.cs
deleted file mode 100644
index b3740f7..0000000
--- a/src/Widgets/CompositeUtils.cs
+++ /dev/null
@@ -1,178 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using Gdk;
-using Gtk;
-using FSpot.Utils;
-using Hyena;
-
-namespace FSpot.Widgets {
-	public class CompositeUtils {
-		[DllImport("libgdk-2.0-0.dll")]
-	        static extern bool gdk_screen_is_composited (IntPtr screen);
-		
-		[DllImport("libgdk-2.0-0.dll")]
-		static extern bool gdk_x11_screen_supports_net_wm_hint (IntPtr screen,
-									IntPtr property);
-
-		[DllImport("libgdk-2.0-0.dll")]
-		static extern IntPtr gdk_screen_get_rgba_colormap (IntPtr screen);
-
-		[DllImport("libgdk-2.0-0.dll")]
-		static extern IntPtr gdk_screen_get_rgba_visual (IntPtr screen);
-
-		[DllImport ("libgtk-win32-2.0-0.dll")]
-		static extern void gtk_widget_input_shape_combine_mask (IntPtr raw, IntPtr shape_mask, int offset_x, int offset_y);
-
-		[DllImport("libgdk-2.0-0.dll")]
-		static extern void gdk_property_change(IntPtr window, IntPtr property, IntPtr type, int format, int mode, uint [] data, int nelements);
-
-		[DllImport("libgdk-2.0-0.dll")]
-		static extern void gdk_property_change(IntPtr window, IntPtr property, IntPtr type, int format, int mode, byte [] data, int nelements);
-		
-		public static Colormap GetRgbaColormap (Screen screen)
-		{
-			try {
-				IntPtr raw_ret = gdk_screen_get_rgba_colormap (screen.Handle);
-				Gdk.Colormap ret = GLib.Object.GetObject(raw_ret) as Gdk.Colormap;
-				return ret;
-			} catch {
-				Gdk.Visual visual = Gdk.Visual.GetBestWithDepth (32);
-				if (visual != null) {
-					Gdk.Colormap cmap = new Gdk.Colormap (visual, false);
-					Log.Debug ("fallback");
-					return cmap;
-				}
-			}
-			return null;
-		}
-
-		public static void  ChangeProperty (Gdk.Window win, Atom property, Atom type, PropMode mode, uint [] data)
-		{
-			gdk_property_change (win.Handle, property.Handle, type.Handle, 32, (int)mode,  data, data.Length * 4);
-		}
-
-		public static void  ChangeProperty (Gdk.Window win, Atom property, Atom type, PropMode mode, byte [] data)
-		{
-			gdk_property_change (win.Handle, property.Handle, type.Handle, 8, (int)mode,  data, data.Length);
-		}
-
-		public static bool SupportsHint (Screen screen, string name)
-		{
-			try {
-				Atom atom = Atom.Intern (name, false);
-				return gdk_x11_screen_supports_net_wm_hint (screen.Handle, atom.Handle);
-			} catch {
-				
-				return false;
-			}
-		}
-
-		public static bool SetRgbaColormap (Widget w)
-		{
-			Gdk.Colormap cmap = GetRgbaColormap (w.Screen);
-
-			if (cmap != null) {
-				w.Colormap = cmap;
-				return true;
-			}
-
-			return false;
-		}
-
-
-		public static Visual GetRgbaVisual (Screen screen)
-		{
-			try {
-				IntPtr raw_ret = gdk_screen_get_rgba_visual (screen.Handle);
-				Gdk.Visual ret = GLib.Object.GetObject(raw_ret) as Gdk.Visual;
-				return ret;
-			} catch {
-				Gdk.Visual visual = Gdk.Visual.GetBestWithDepth (32);
-				if (visual != null) {
-					return visual;
-				}
-			}
-			return null;
-		}
-
-		public static bool IsComposited (Screen screen) {
-			bool composited;
-			try {
-				composited = gdk_screen_is_composited (screen.Handle);
-			} catch (EntryPointNotFoundException) {
-				Log.Debug ("query composite manager locally");
-				Atom atom = Atom.Intern (String.Format ("_NET_WM_CM_S{0}", screen.Number), false);
-				composited = Gdk.Selection.OwnerGetForDisplay (screen.Display, atom) != null;
-			}
-
-			// FIXME check for WINDOW_OPACITY so that we support compositing on older composite manager
-			// versions before they started supporting the real check given above
-			if (!composited)
-				composited = CompositeUtils.SupportsHint (screen, "_NET_WM_WINDOW_OPACITY");
-
-			return composited;
-		}
-
-		public static void InputShapeCombineMask (Widget w, Pixmap shape_mask, int offset_x, int offset_y)
-		{
-			gtk_widget_input_shape_combine_mask (w.Handle, shape_mask == null ? IntPtr.Zero : shape_mask.Handle, offset_x, offset_y);
-		}
-
-		[DllImport("libXcomposite.dll")]
-		static extern void XCompositeRedirectWindow (IntPtr display, uint window, CompositeRedirect update);
-
-		public enum CompositeRedirect {
-			Automatic = 0,
-			Manual = 1
-		};
-
-		public static void RedirectDrawable (Drawable d)
-		{
-			uint xid = GdkUtils.GetXid (d);
-			Log.DebugFormat ("xid = {0} d.handle = {1}, d.Display.Handle = {2}", xid, d.Handle, d.Display.Handle);
-			XCompositeRedirectWindow (GdkUtils.GetXDisplay (d.Display), GdkUtils.GetXid (d), CompositeRedirect.Manual);
-		}
-
-		public static void SetWinOpacity (Gtk.Window win, double opacity)
-		{
-			CompositeUtils.ChangeProperty (win.GdkWindow, 
-						       Atom.Intern ("_NET_WM_WINDOW_OPACITY", false),
-						       Atom.Intern ("CARDINAL", false),
-						       PropMode.Replace,
-						       new uint [] { (uint) (0xffffffff * opacity) });
-		}
-
-		public static Cms.Profile GetScreenProfile (Screen screen)
-		{
-			Atom atype;
-			int  aformat;
-			int  alength;
-			byte [] data;
-
-			if (Gdk.Property.Get (screen.RootWindow,
-					      Atom.Intern ("_ICC_PROFILE", false),
-					      Atom.Intern ("CARDINAL", false),
-					      0,
-					      Int32.MaxValue,
-					      0, // FIXME in gtk# should be a bool
-					      out atype,
-					      out aformat,
-					      out alength,
-					      out data)) {
-				return new Cms.Profile (data);
-			}
-			
-			return null;
-		}
-
-		public static void SetScreenProfile (Screen screen, Cms.Profile profile)
-		{
-			byte [] data = profile.Save ();
-			ChangeProperty (screen.RootWindow,
-					Atom.Intern ("_ICC_PROFILE", false),
-					Atom.Intern ("CARDINAL", false),
-					PropMode.Replace,
-					data);
-		}
-	}
-}
diff --git a/src/Widgets/CustomPrintWidget.cs b/src/Widgets/CustomPrintWidget.cs
deleted file mode 100644
index ec44c22..0000000
--- a/src/Widgets/CustomPrintWidget.cs
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * FSpot.Widgets.CustomPrintWidget.cs
- *
- * Author(s):
- *	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Mono.Unix;
-using Gtk;
-using FSpot.Utils;
-
-namespace FSpot.Widgets
-{
-	public class CustomPrintWidget : Table
-	{
-		public delegate void ChangedHandler (Gtk.Widget widget);
-
-		public enum FitMode {
-			Zoom,
-			Scaled,
-			Fill,
-		}
-
-		Gtk.Image preview_image;
-		CheckButton fullpage;
-
-		RadioButton ppp1, ppp2, ppp4, ppp9, ppp20, ppp30;
-		RadioButton zoom, fill, scaled;
-
-		CheckButton repeat, white_border, crop_marks, print_tags,
-			print_filename, print_date, print_time, print_comments;
-		Entry custom_text;
-	
-		PrintOperation print_operation;
-
-		public event ChangedHandler Changed;
-		private void TriggerChanged (object sender, EventArgs e)
-		{
-			if (Changed != null)
-				Changed (this);
-		}
-
-		public bool CropMarks {
-			get { return crop_marks.Active; }
-		}
-
-		public string PrintLabelFormat {
-			get {
-				string label_format = "{0}";
-
-				if (print_tags.Active)
-					label_format += "\t{4}";
-				if (print_filename.Active)
-					label_format += "\t{1}";
-				if (print_date.Active)
-					label_format += "\t{2}";
-				if (print_time.Active)
-					label_format += " {3}";
-				if (print_comments.Active)
-					label_format += "\t{5}";
-
-				return label_format;
-			}
-		}
-
-		public string CustomText {
-			get { return custom_text.Text; }
-		}
-
-		public FitMode Fitmode {
-			get {
-				if (zoom.Active)	return FitMode.Zoom;
-				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;
-				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 Gtk.Image PreviewImage {
-			get { return preview_image; }
-		}
-
-		public bool Repeat {
-			get { return repeat.Active; }
-		}
-
-		public bool UseFullPage {
-			get { return fullpage.Active; }
-		}
-
-		public bool WhiteBorders {
-			get { return white_border.Active; }
-		}
-
-		public CustomPrintWidget (PrintOperation print_operation) : base (2, 4, false)
-		{
-			this.print_operation = print_operation;
-
-			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 ();
-			Label current_settings = new Label ();
-			if (FSpot.Global.PageSetup != null)
-				current_settings.Text = String.Format (Catalog.GetString ("Paper Size: {0} x {1} mm"), 
-								Math.Round (print_operation.DefaultPageSetup.GetPaperWidth (Unit.Mm), 1), 
-								Math.Round (print_operation.DefaultPageSetup.GetPaperHeight (Unit.Mm), 1));
-			else
-				current_settings.Text = String.Format (Catalog.GetString ("Paper Size: {0} x {1} mm"), "...", "...");
-
-			page_box.PackStart (current_settings, false, false, 0);
-			Button page_setup_btn = new Button (Catalog.GetString ("Set Page Size and Orientation"));
-			page_setup_btn.Clicked += delegate {
-				this.print_operation.DefaultPageSetup = Print.RunPageSetupDialog (null, print_operation.DefaultPageSetup, this.print_operation.PrintSettings); 
-				current_settings.Text = String.Format (Catalog.GetString ("Paper Size: {0} x {1} mm"), 
-								Math.Round (print_operation.DefaultPageSetup.GetPaperWidth (Unit.Mm), 1), 
-								Math.Round (print_operation.DefaultPageSetup.GetPaperHeight (Unit.Mm), 1));
-			};
-			page_box.PackStart (page_setup_btn, false, false, 0);
-			page_frame.Add (page_box);
-			Attach (page_frame, 1, 2, 3, 4);
-
-			Frame ppp_frame = new Frame (Catalog.GetString ("Photos per page"));
-			Table ppp_tbl = new Table(2, 7, false);
-
-			ppp_tbl.Attach (ppp1 = new RadioButton ("1"), 0, 1, 1, 2);
-			ppp_tbl.Attach (ppp2 = new RadioButton (ppp1, "2"), 0, 1, 2, 3);
-			ppp_tbl.Attach (ppp4 = new RadioButton (ppp1, "2 x 2"), 0, 1, 3, 4);
-			ppp_tbl.Attach (ppp9 = new RadioButton (ppp1, "3 x 3"), 0, 1, 4, 5);
-			ppp_tbl.Attach (ppp20 = new RadioButton (ppp1, "4 x 5"), 0, 1, 5, 6);
-			ppp_tbl.Attach (ppp30 = new RadioButton (ppp1, "5 x 6"), 0, 1, 6, 7);
-
-			ppp_tbl.Attach (repeat = new CheckButton (Catalog.GetString ("Repeat")), 1, 2, 2, 3);
-			ppp_tbl.Attach (crop_marks = new CheckButton (Catalog.GetString ("Print cut marks")), 1, 2, 3, 4);
-//			crop_marks.Toggled += TriggerChanged;
-
-			ppp_frame.Child = ppp_tbl;
-			Attach (ppp_frame, 0, 1, 1, 2);
-
-			Frame layout_frame = new Frame (Catalog.GetString ("Photos layout"));
-			VBox layout_vbox = new VBox();
-			layout_vbox.PackStart (fullpage = new CheckButton (Catalog.GetString ("Full Page (no margin)")), false, false, 0);
-			HBox hb = new HBox ();
-			// Note for translators: "Zoom" is a Fit Mode
-			hb.PackStart (zoom = new RadioButton (Catalog.GetString ("Zoom")), false, false, 0);
-			hb.PackStart (fill = new RadioButton (zoom, Catalog.GetString ("Fill")), false, false, 0);
-			hb.PackStart (scaled = new RadioButton (zoom, Catalog.GetString ("Scaled")), false, false, 0);
-			zoom.Toggled += TriggerChanged;
-			fill.Toggled += TriggerChanged;
-			scaled.Toggled += TriggerChanged;
-			layout_vbox.PackStart (hb, false, false, 0);
-			layout_vbox.PackStart (white_border = new CheckButton (Catalog.GetString ("White borders")), false, false, 0);
-			white_border.Toggled += TriggerChanged;
-
-			layout_frame.Child = layout_vbox;
-			Attach (layout_frame, 1, 2, 1, 2);
-
-			Frame cmt_frame = new Frame (Catalog.GetString ("Custom Text"));
-			cmt_frame.Child = custom_text = new Entry ();
-			Attach (cmt_frame, 1, 2, 2, 3);
-
-			Frame detail_frame = new Frame (Catalog.GetString ("Photos infos"));
-			VBox detail_vbox = new VBox();
-			detail_vbox.PackStart (print_filename = new CheckButton (Catalog.GetString ("Print file name")), false, false, 0);
-			detail_vbox.PackStart (print_date = new CheckButton (Catalog.GetString ("Print photo date")), false, false, 0);
-			detail_vbox.PackStart (print_time = new CheckButton (Catalog.GetString ("Print photo time")), false, false, 0);
-			detail_vbox.PackStart (print_tags = new CheckButton (Catalog.GetString ("Print photo tags")), false, false, 0);
-			detail_vbox.PackStart (print_comments = new CheckButton (Catalog.GetString ("Print photo comment")), false, false, 0);
-			detail_frame.Child = detail_vbox;
-			Attach (detail_frame, 0, 1, 2, 4);
-
-			TriggerChanged (this, null);
-		}
-	}
-}
diff --git a/src/Widgets/Dissolve.cs b/src/Widgets/Dissolve.cs
deleted file mode 100644
index 40e2f8e..0000000
--- a/src/Widgets/Dissolve.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Dissolve.cs
- *
- * Copyright 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- * See COPYING for license information.
- *
- */
-using System;
-using Cairo;
-using Gtk;
-
-namespace FSpot.Widgets {
-	public class Dissolve : ITransition {
-		DateTime start;
-		TimeSpan duration = new TimeSpan (0, 0, 1);
-		ImageInfo begin;
-		ImageInfo end;
-		ImageInfo begin_buffer;
-		ImageInfo end_buffer;
-		int frames = 0;
-		
-		public Dissolve (ImageInfo begin, ImageInfo end)
-		{
-			this.begin = begin;
-			this.end = end;
-		}
-		
-		public int Frames {
-			get { return frames; }
-		}
-		
-		public bool OnEvent (Widget w)
-		{
-			if (begin_buffer == null) {
-				begin_buffer = new ImageInfo (begin, w); //.Allocation);
-			}
-			
-			if (end_buffer == null) {
-				end_buffer = new ImageInfo (end, w); //.Allocation);
-			}
-			
-			w.QueueDraw ();
-			w.GdkWindow.ProcessUpdates (false);
-
-			TimeSpan elapsed = DateTime.UtcNow - start;
-			double fraction = elapsed.Ticks / (double) duration.Ticks; 
-			
-			return fraction < 1.0;
-		}
-		
-		public bool OnExpose (Context ctx, Gdk.Rectangle allocation)
-		{
-			if (frames == 0)
-				start = DateTime.UtcNow;
-			
-			frames ++;
-			TimeSpan elapsed = DateTime.UtcNow - start;
-			double fraction = elapsed.Ticks / (double) duration.Ticks; 
-			double opacity = Math.Sin (Math.Min (fraction, 1.0) * Math.PI * 0.5);
-			
-			ctx.Operator = Operator.Source;
-			
-			SurfacePattern p = new SurfacePattern (begin_buffer.Surface);
-			ctx.Matrix = begin_buffer.Fill (allocation);
-			p.Filter = Filter.Fast;
-			ctx.Source = p;
-			ctx.Paint ();
-			
-			ctx.Operator = Operator.Over;
-			ctx.Matrix = end_buffer.Fill (allocation);
-			SurfacePattern sur = new SurfacePattern (end_buffer.Surface);
-			Pattern black = new SolidPattern (new Cairo.Color (0.0, 0.0, 0.0, opacity));
-			//ctx.Source = black;
-			//ctx.Fill ();
-			sur.Filter = Filter.Fast;
-			ctx.Source = sur;
-			ctx.Mask (black);
-			//ctx.Paint ();
-			
-			ctx.Matrix = new Matrix ();
-			
-			ctx.MoveTo (allocation.Width / 2.0, allocation.Height / 2.0);
-			ctx.Source = new SolidPattern (1.0, 0, 0);	
-			#if debug
-			ctx.ShowText (String.Format ("{0} {1} {2} {3} {4} {5} {6} {7}", 
-						     frames,
-						     sur.Status,
-						     p.Status,
-						     opacity, fraction, elapsed, start, DateTime.UtcNow));
-			#endif
-			sur.Destroy ();
-			p.Destroy ();
-			return fraction < 1.0;
-		}
-		
-		public void Dispose ()
-		{
-			if (begin_buffer != null) {
-				begin_buffer.Dispose ();
-				begin_buffer = null;
-			}
-			
-			if (end_buffer != null) {
-				end_buffer.Dispose ();
-				end_buffer = null;
-			}
-		}
-	}
-}
-
- 
diff --git a/src/Widgets/DissolveTransition.cs b/src/Widgets/DissolveTransition.cs
deleted file mode 100644
index 2618ec3..0000000
--- a/src/Widgets/DissolveTransition.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// FSpot.Widgets.DissolveTransition.cs
-//
-// Author(s):
-//	Stephane Delcroix  <stephane at delcroix.org>
-//
-// Copyright (c) 2009 Novell, Inc.
-//
-// This is open source software. See COPYING for details.
-//
-
-using System;
-
-using Cairo;
-using Gdk;
-
-using FSpot.Utils;
-using FSpot.Widgets;
-
-using Color = Cairo.Color;
-
-namespace FSpot.Widgets
-{
-	public class DissolveTransition : CairoTransition
-	{
-		public DissolveTransition () : base ("Dissolve")
-		{
-		}
-
-		protected override void Draw (Context cr, Pixbuf prev, Pixbuf next, int width, int height, double progress)
-		{
-			cr.Color = new Color (0, 0, 0, progress);
-			if (next != null) {
-				double scale = Math.Min ((double)width/(double)next.Width, (double)height/(double)next.Height);
-				cr.Save ();
-
-				cr.Rectangle (0, 0, width, .5 * (height - scale*next.Height));
-				cr.Fill ();
-
-				cr.Rectangle (0, height - .5 * (height - scale*next.Height), width, .5 * (height - scale*next.Height));
-				cr.Fill ();
-
-				cr.Rectangle (0, 0, .5 * (width - scale*next.Width), height);
-				cr.Fill ();
-
-				cr.Rectangle (width - .5 * (width - scale*next.Width), 0, .5 * (width - scale*next.Width), height);
-				cr.Fill ();
-
-				cr.Rectangle (0, 0, width, height);
-				cr.Scale (scale, scale);
-				CairoHelper.SetSourcePixbuf (cr, next, .5 * ((double)width/scale - next.Width), .5 * ((double)height/scale - next.Height));
-				cr.PaintWithAlpha (progress);
-				cr.Restore ();
-			}
-		}
-	}
-}
diff --git a/src/Widgets/EditorPage.cs b/src/Widgets/EditorPage.cs
deleted file mode 100644
index 8f0ee94..0000000
--- a/src/Widgets/EditorPage.cs
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Widgets.EditorPage.cs
- *
- * Author(s)
- * 	Ruben Vermeersch <ruben at savanne.be>
- *
- * This is free software. See COPYING for details.
- */
-
-using FSpot;
-using FSpot.Extensions;
-using FSpot.Editors;
-using FSpot.UI.Dialog;
-using FSpot.Utils;
-
-using Gtk;
-
-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;
-		private readonly EditorPageWidget EditorPageWidget;
-
-		public EditorPage () : base (new EditorPageWidget (),
-									   Catalog.GetString ("Edit"),
-									   "mode-image-edit") {
-			// TODO: Somebody might need to change the icon to something more suitable.
-			// FIXME: The icon isn't shown in the menu, are we missing a size?
-			EditorPageWidget = SidebarWidget as EditorPageWidget;
-			EditorPageWidget.Page = this;
-		}
-
-		protected override void AddedToSidebar () {
-			(Sidebar as Sidebar).SelectionChanged += delegate (IBrowsableCollection collection) { EditorPageWidget.ShowTools (); };
-			(Sidebar as Sidebar).ContextChanged += HandleContextChanged;
-		}
-
-		private void HandleContextChanged (object sender, EventArgs args)
-		{
-			InPhotoView = ((Sidebar as Sidebar).Context == ViewContext.Edit);
-			EditorPageWidget.ChangeButtonVisibility ();
-		}
-	}
-
-	public class EditorPageWidget : Gtk.ScrolledWindow {
-		private VBox widgets;
-		private VButtonBox buttons;
-		private Widget active_editor;
-
-		private List<Editor> editors;
-		private Editor current_editor;
-
-		// Used to make buttons insensitive when selecting multiple images.
-		private Dictionary<Editor, Button> editor_buttons;
-
-		private EditorPage page;
-		internal EditorPage Page {
-			get { return page; }
-			set { page = value; ChangeButtonVisibility (); }
-		}
-
-		public EditorPageWidget () {
-			editors = new List<Editor> ();
-			editor_buttons = new Dictionary<Editor, Button> ();
-			ShowTools ();
-			AddinManager.AddExtensionNodeHandler ("/FSpot/Editors", OnExtensionChanged);
-
-		}
-
-		private void OnExtensionChanged (object s, ExtensionNodeEventArgs args) {
-			// FIXME: We do not do run-time removal of editors yet!
-			if (args.Change == ExtensionChange.Add) {
-				Editor editor = (args.ExtensionNode as EditorNode).GetEditor ();
-				editor.ProcessingStarted += OnProcessingStarted;
-				editor.ProcessingStep += OnProcessingStep;
-				editor.ProcessingFinished += OnProcessingFinished;
-				editors.Add (editor);
-				PackButton (editor);
-			}
-		}
-
-		private ProgressDialog progress;
-
-		private void OnProcessingStarted (string name, int count) {
-			progress = new ProgressDialog (name, ProgressDialog.CancelButtonType.None, count, App.Instance.Organizer.Window);
-		}
-
-		private void OnProcessingStep (int done) {
-			if (progress != null)
-				progress.Update (String.Empty);
-		}
-
-		private void OnProcessingFinished () {
-			if (progress != null) {
-				progress.Destroy ();
-				progress = null;
-			}
-		}
-
-		internal void ChangeButtonVisibility () {
-			foreach (Editor editor in editors) {
-				Button button;
-				if (editor_buttons.TryGetValue (editor, out button))
-					button.Visible = Page.InPhotoView || editor.CanHandleMultiple;
-			}
-		}
-
-		void PackButton (Editor editor)
-		{
-			Button button = new Button (editor.Label);
-			if (editor.IconName != null)
-				button.Image = new Image (GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, editor.IconName, 22, (Gtk.IconLookupFlags)0));
-			button.Clicked += delegate (object o, EventArgs e) { ChooseEditor (editor); };
-			button.Show ();
-			buttons.Add (button);
-			editor_buttons.Add (editor, button);
-		}
-
-		public void ShowTools () {
-			// Remove any open editor, if present.
-			if (current_editor != null) {
-				active_editor.Hide ();
-				widgets.Remove (active_editor);
-				active_editor = null;
-				current_editor.Restore ();
-				current_editor = null;
-			}
-
-			// No need to build the widget twice.
-			if (buttons != null) {
-				buttons.Show ();
-				return;
-			}
-
-			if (widgets == null) {
-				widgets = new VBox (false, 0);
-				widgets.NoShowAll = true;
-				widgets.Show ();
-				Viewport widgets_port = new Viewport ();
-				widgets_port.Add (widgets);
-				Add (widgets_port);
-				widgets_port.ShowAll ();
-			}
-
-			// Build the widget (first time we call this method).
-			buttons = new VButtonBox ();
-			buttons.BorderWidth = 5;
-			buttons.Spacing = 5;
-			buttons.LayoutStyle = ButtonBoxStyle.Start;
-
-			foreach (Editor editor in editors) 
-				PackButton (editor);
-
-			buttons.Show ();
-			widgets.Add (buttons);
-		}
-
-		private void ChooseEditor (Editor editor) {
-			SetupEditor (editor);
-
-			if (!editor.CanBeApplied || editor.HasSettings)
-				ShowEditor (editor);
-			else
-				Apply (editor); // Instant apply
-		}
-
-		private bool SetupEditor (Editor editor) {
-			EditorState state = editor.CreateState ();
-
-			PhotoImageView photo_view = App.Instance.Organizer.PhotoView.View;
-
-			if (Page.InPhotoView && photo_view != null) {
-				state.Selection = photo_view.Selection;
-				state.PhotoImageView = photo_view;
-			} else {
-				state.Selection = Gdk.Rectangle.Zero;
-				state.PhotoImageView = null;
-			}
-			if ((Page.Sidebar as Sidebar).Selection == null)
-				return false;
-			state.Items = (Page.Sidebar as Sidebar).Selection.Items;
-
-			editor.Initialize (state);
-			return true;
-		}
-
-		private void Apply (Editor editor) {
-			if (!SetupEditor (editor))
-				return;
-
-			if (!editor.CanBeApplied) {
-				string msg = Catalog.GetString ("No selection available");
-				string desc = Catalog.GetString ("This tool requires an active selection. Please select a region of the photo and try the operation again");
-
-				HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window,
-										DialogFlags.DestroyWithParent,
-										Gtk.MessageType.Error, ButtonsType.Ok,
-										msg,
-										desc);
-
-				md.Run ();
-				md.Destroy ();
-				return;
-			}
-
-			// TODO: Might need to do some nicer things for multiple selections (progress?)
-			try {
-				editor.Apply ();
-			} catch (Exception e) {
-				Log.DebugException (e);
-				string msg = Catalog.GetPluralString ("Error saving adjusted photo", "Error saving adjusted photos", 
-									editor.State.Items.Length);
-				string desc = String.Format (Catalog.GetString ("Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."),
-							     e.Message);
-
-				HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window,
-									    DialogFlags.DestroyWithParent,
-									    Gtk.MessageType.Error, ButtonsType.Ok,
-									    msg,
-									    desc);
-				md.Run ();
-				md.Destroy ();
-			}
-			ShowTools ();
-		}
-
-		private void ShowEditor (Editor editor) {
-			SetupEditor (editor);
-			current_editor = editor;
-
-			buttons.Hide ();
-
-			// Top label
-			VBox vbox = new VBox (false, 4);
-			Label label = new Label ();
-			label.Markup = String.Format("<big><b>{0}</b></big>", editor.Label);
-			vbox.PackStart (label, false, false, 5);
-
-			// Optional config widget
-			Widget config = editor.ConfigurationWidget ();
-			if (config != null) {
-				vbox.PackStart (config, false, false, 0);
-			}
-
-			// Apply / Cancel buttons
-			HButtonBox tool_buttons = new HButtonBox ();
-			tool_buttons.LayoutStyle = ButtonBoxStyle.End;
-			tool_buttons.Spacing = 5;
-			tool_buttons.BorderWidth = 5;
-			tool_buttons.Homogeneous = false;
-
-			Button cancel = new Button (Stock.Cancel);
-			cancel.Clicked += HandleCancel;
-			tool_buttons.Add (cancel);
-
-			Button apply = new Button (editor.ApplyLabel);
-			apply.Image = new Image (GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, editor.IconName, 22, (Gtk.IconLookupFlags)0));
-			apply.Clicked += delegate { Apply (editor); };
-			tool_buttons.Add (apply);
-
-			// Pack it all together
-			vbox.PackEnd (tool_buttons, false, false, 0);
-			active_editor = vbox;
-			widgets.Add (active_editor);
-			active_editor.ShowAll ();
-		}
-
-		void HandleCancel (object sender, System.EventArgs args) {
-			ShowTools ();
-		}
-	}
-}
diff --git a/src/Widgets/Filmstrip.cs b/src/Widgets/Filmstrip.cs
deleted file mode 100644
index c3fc8c9..0000000
--- a/src/Widgets/Filmstrip.cs
+++ /dev/null
@@ -1,706 +0,0 @@
-/*
- * Widgets.Filmstrip.cs
- *
- * Author(s)
- * 	Stephane Delcroix  <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-//TODO:
-//	* only redraw required parts on ExposeEvents (low)
-//	* Handle orientation changes (low) (require gtk# changes, so I can trigger an OrientationChanged event)
-
-using System;
-using System.Collections;
-
-using Gtk;
-using Gdk;
-
-using FSpot.Utils;
-using FSpot.Platform;
-using FSpot.Bling;
-using Hyena;
-
-namespace FSpot.Widgets
-{
-	public class Filmstrip : EventBox, IDisposable
-	{
-
-//		public event OrientationChangedHandler OrientationChanged;
-		public event EventHandler PositionChanged;
-
-		DoubleAnimation animation;
-
-		bool extendable = true;
-		public bool Extendable {
-			get { return extendable; }
-			set { extendable = value; }
-		}
-
-		Orientation orientation = Orientation.Horizontal;
-		public Orientation Orientation {
-			get { return orientation; }
-			set {
-				if (orientation == value)
-					return;
-
-				BackgroundPixbuf = null;
-				orientation = value;
-//				if (OrientationChanged != null) {
-//					OrientationChangedArgs args = new OrientationChangedArgs ();
-//					args.Orientation = value;
-//					OrientationChanged (this, args);
-//				}
-			}
-		}
-
-		int spacing = 6;
-		public int Spacing {
-			get { return spacing; }
-			set {
-				if (value < 0)
-					throw new ArgumentException ("Spacing is negative!");
-				spacing = value;
-			}
-		}
-
-		int thumb_offset = 17;
-		public int ThumbOffset {
-			get { return thumb_offset; }
-			set { 
-				if (value < 0)
-					throw new ArgumentException ("ThumbOffset is negative!");
-				thumb_offset = value;
-			}
-		}
-
-		int thumb_size = 67;
-		public int ThumbSize {
-			get { return thumb_size; }
-			set { 
-				if (value < 0)
-					throw new ArgumentException ("ThumbSize is negative!");
-				thumb_size = value;
-			}
-		}
-
-		bool squared_thumbs = false;
-		public bool SquaredThumbs {
-			get { return squared_thumbs; }
-			set { squared_thumbs = value; }
-		}
-
-		static string [] film_100_xpm = {
-		"14 100 2 1",
-		" 	c None",
-		".	c #000000",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		".....    .....",
-		"....      ....",
-		"....      ....",
-		"....      ....",
-		"....      ....",
-		"....      ....",
-		"....      ....",
-		".....    .....",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		".....    .....",
-		"....      ....",
-		"....      ....",
-		"....      ....",
-		"....      ....",
-		"....      ....",
-		"....      ....",
-		".....    .....",
-		"..............",
-		"..............",
-		"..............",
-		"..............",
-		".............."};
-
-		Pixbuf background_tile;
-		public Pixbuf BackgroundTile {
-			get {
-				if (background_tile == null)
-					background_tile = new Pixbuf(film_100_xpm);
-
-				if (Orientation == Orientation.Horizontal && background_tile.Height < background_tile.Width) 
-					background_tile = background_tile.RotateSimple (PixbufRotation.Counterclockwise); 
-				else if (Orientation == Orientation.Vertical && background_tile.Width < background_tile.Height) 
-					background_tile = background_tile.RotateSimple (PixbufRotation.Clockwise); 
-				return background_tile;
-			}
-			set { 
-				if (background_tile != value && background_tile != null)
-					background_tile.Dispose ();
-				background_tile = value;
-				BackgroundPixbuf = null;
-			}
-		}
-
-		int x_offset = 2;
-		public int XOffset {
-			get { return x_offset; }
-			set { 
-				if (value < 0)
-					throw new ArgumentException ("value is negative!");
-				x_offset = value;
-			}
-		}
-
-		int y_offset = 2;
-		public int YOffset {
-			get { return y_offset; }
-			set { 
-				if (value < 0)
-					throw new ArgumentException ("value is negative!");
-				y_offset = value;
-			}
-		}
-
-		float x_align = 0.5f, y_align = 0.5f;
-		public float XAlign {
-			get { return x_align; }
-			set {
-				if (value < 0.0 || value > 1.0)
-					throw new ArgumentException ("value is not between 0.0 and 1.0");
-				x_align = value;
-			}
-		}
-
-		public float YAlign {
-			get { return y_align; }
-			set {
-				if (value < 0.0 || value > 1.0)
-					throw new ArgumentException ("value is not between 0.0 and 1.0");
-				y_align = value;
-			}
-		}
-
-		public int ActiveItem {
-			get { return selection.Index; }
-			set {
-				if (value == selection.Index)
-					return;
-				if (value < 0)
-					value = 0;
-				if (value > selection.Collection.Count - 1)
-					value = selection.Collection.Count - 1;
-
-				selection.Index = value;
-			}
-		}
-
-		double position;
-		public double Position {
-			get { 
-				return position; 
-			}
-			set {
-				if (value == position)
-					return;
-				if (value < 0)
-					value = 0;
-				if (value > selection.Collection.Count - 1)
-					value = selection.Collection.Count - 1;
-
-				animation.From = position;
-				animation.To = value;
-				animation.Restart ();
-
-				if (PositionChanged != null)
-					PositionChanged (this, EventArgs.Empty);
-			}
-		}
-
-		FSpot.BrowsablePointer selection;
-		DisposableCache<SafeUri, Pixbuf> thumb_cache;
-
-		public Filmstrip (FSpot.BrowsablePointer selection) : this (selection, true)
-		{
-		}
-
-		public Filmstrip (FSpot.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.squared_thumbs = squared_thumbs;
-			thumb_cache = new DisposableCache<SafeUri, Pixbuf> (30);
-			ThumbnailLoader.Default.OnPixbufLoaded += HandlePixbufLoaded;
-
-			animation = new DoubleAnimation (0, 0, TimeSpan.FromSeconds (1.5), SetPositionCore, new CubicEase (EasingMode.EaseOut));
-		}
-	
-		int min_length = 400;
-		int min_height = 200;
-		protected override void OnSizeRequested (ref Gtk.Requisition requisition)
-		{
-			base.OnSizeRequested (ref requisition);
-			requisition.Width = (Orientation == Orientation.Horizontal ? min_length : BackgroundTile.Width) + 2 * x_offset;
-			requisition.Height = (Orientation == Orientation.Vertical ? min_height : BackgroundTile.Height) + 2 * y_offset;
-			switch (Orientation) {
-			case Orientation.Horizontal:
-				if (min_length % BackgroundTile.Width != 0)
-					requisition.Width += BackgroundTile.Width - min_length % BackgroundTile.Width;
-				break;
-			case Orientation.Vertical:
-				if (min_height % BackgroundTile.Height != 0)
-					requisition.Height += BackgroundTile.Height - min_height % BackgroundTile.Height;
-				break;
-			}
-		}
-
-		Pixbuf background_pixbuf;
-		protected Pixbuf BackgroundPixbuf {
-			get {
-				if (background_pixbuf == null) {
-					int length = BackgroundTile.Width;
-					int height = BackgroundTile.Height;
-					switch (Orientation) {
-					case Orientation.Horizontal:
-						if (Allocation.Width < min_length || !extendable)
-							length = min_length;
-						else
-							length = Allocation.Width;
-
-						length = length - length % BackgroundTile.Width;
-						break;
-					case Orientation.Vertical:
-						if (Allocation.Height < min_height || !extendable)
-							height = min_height;
-						else
-							height = Allocation.Height;
-
-						height = height - height % BackgroundTile.Height;
-						break;
-					}
-
-					background_pixbuf = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, length, height);
-					switch (Orientation) {
-					case Orientation.Horizontal:
-						for (int i = 0; i < length; i += BackgroundTile.Width) {
-							BackgroundTile.CopyArea (0, 0, BackgroundTile.Width, BackgroundTile.Height, 
-									background_pixbuf, i, 0);
-						}
-						break;
-					case Orientation.Vertical:
-						for (int i = 0; i < height; i += BackgroundTile.Height) {
-							BackgroundTile.CopyArea (0, 0, BackgroundTile.Width, BackgroundTile.Height, 
-									background_pixbuf, 0, i);
-						}
-						break;
-					}
-				}
-				return background_pixbuf;
-			}
-			set {
-				if (background_pixbuf != value && background_pixbuf != null) {
-					background_pixbuf.Dispose ();
-					background_pixbuf = value;
-				}
-			}
-		}
-
-		Hashtable start_indexes;
-		int filmstrip_start_pos;
-		int filmstrip_end_pos;
-		protected override bool OnExposeEvent (EventExpose evnt)
-		{
-			if (evnt.Window != GdkWindow)
-				return true;
-
-			if (selection.Collection.Count == 0)
-				return true;
-
-			if (Orientation == Orientation.Horizontal && (extendable && Allocation.Width >= BackgroundPixbuf.Width + (2 * x_offset) + BackgroundTile.Width) ||
-				Orientation == Orientation.Vertical && (extendable && Allocation.Height >= BackgroundPixbuf.Height + (2 * y_offset) + BackgroundTile.Height) )
-				BackgroundPixbuf = null;
-
-			if ( Orientation == Orientation.Horizontal && (extendable && Allocation.Width < BackgroundPixbuf.Width + (2 * x_offset) ) || 
-				Orientation == Orientation.Vertical && ( extendable && Allocation.Height < BackgroundPixbuf.Height + (2 * y_offset) ))
-				BackgroundPixbuf = null;
-
-			int xpad = 0, ypad = 0;
-			if (Allocation.Width > BackgroundPixbuf.Width + (2 * x_offset))
-				xpad = (int) (x_align * (Allocation.Width - (BackgroundPixbuf.Width + (2 * x_offset))));
-
-			if (Allocation.Height > BackgroundPixbuf.Height + (2 * y_offset))
-				ypad = (int) (y_align * (Allocation.Height - (BackgroundPixbuf.Height + (2 * y_offset))));
-
-			GdkWindow.DrawPixbuf (Style.BackgroundGC (StateType.Normal), BackgroundPixbuf, 
-					0, 0, x_offset + xpad, y_offset + ypad, 
-					BackgroundPixbuf.Width, BackgroundPixbuf.Height, Gdk.RgbDither.None, 0, 0);
-
-			//drawing the icons...
-			start_indexes = new Hashtable ();
-
-			Pixbuf icon_pixbuf = null;
-			if (Orientation == Orientation.Horizontal)
-				icon_pixbuf = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, BackgroundPixbuf.Width, thumb_size);
-			else if (Orientation == Orientation.Vertical)
-				icon_pixbuf = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, thumb_size, BackgroundPixbuf.Height);
-			icon_pixbuf.Fill (0x00000000);
-
-			Pixbuf current = GetPixbuf ((int) Math.Round (Position));
-			int ref_x = (int)(icon_pixbuf.Width / 2.0 - current.Width * (Position + 0.5f - Math.Round (Position))); //xpos of the reference icon
-			int ref_y = (int)(icon_pixbuf.Height / 2.0 - current.Height * (Position + 0.5f - Math.Round (Position))); 
-
-			int start_x = Orientation == Orientation.Horizontal ? ref_x : 0;
-			int start_y = Orientation == Orientation.Vertical ? ref_y : 0;
-			for (int i = (int) Math.Round (Position); i < selection.Collection.Count; i++) {
-				current = GetPixbuf (i, ActiveItem == i);
-				if (Orientation == Orientation.Horizontal) {
-					current.CopyArea (0, 0, Math.Min (current.Width, icon_pixbuf.Width - start_x) , current.Height, icon_pixbuf, start_x, start_y);	
-					start_indexes [start_x] = i; 
-					start_x += current.Width + spacing;
-					if (start_x > icon_pixbuf.Width)
-						break;
-				} else if (Orientation == Orientation.Vertical) {
-					current.CopyArea (0, 0, current.Width, Math.Min (current.Height, icon_pixbuf.Height - start_y), icon_pixbuf, start_x, start_y);	
-					start_indexes [start_y] = i; 
-					start_y += current.Height + spacing;
-					if (start_y > icon_pixbuf.Height)
-						break;
-				}
-			}
-			filmstrip_end_pos = (Orientation == Orientation.Horizontal ? start_x : start_y);
-
-			start_x = Orientation == Orientation.Horizontal ? ref_x : 0;
-			start_y = Orientation == Orientation.Vertical ? ref_y : 0;
-			for (int i = (int) Math.Round (Position) - 1; i >= 0; i--) {
-				current = GetPixbuf (i, ActiveItem == i);
-				if (Orientation == Orientation.Horizontal) {
-					start_x -= (current.Width + spacing);
-					current.CopyArea (Math.Max (0, -start_x), 0, Math.Min (current.Width, current.Width + start_x), current.Height, icon_pixbuf, Math.Max (start_x, 0), 0);
-					start_indexes [Math.Max (0, start_x)] = i; 
-					if (start_x < 0)
-						break;
-				} else if (Orientation == Orientation.Vertical) {
-					start_y -= (current.Height + spacing);
-					current.CopyArea (0, Math.Max (0, -start_y), current.Width, Math.Min (current.Height, current.Height + start_y), icon_pixbuf, 0, Math.Max (start_y, 0));
-					start_indexes [Math.Max (0, start_y)] = i; 
-					if (start_y < 0)
-						break;
-				}
-			}
-			filmstrip_start_pos = Orientation == Orientation.Horizontal ? start_x : start_y;
-			
-			GdkWindow.DrawPixbuf (Style.BackgroundGC (StateType.Normal), icon_pixbuf,
-					0, 0, x_offset + xpad, y_offset + ypad + thumb_offset,
-					icon_pixbuf.Width, icon_pixbuf.Height, Gdk.RgbDither.None, 0, 0);
-
-			icon_pixbuf.Dispose ();
-
-			return true;
-		}
-
-		protected override bool OnScrollEvent (EventScroll args)
-		{
-			float shift = 1f;
-			if ((args.State & Gdk.ModifierType.ShiftMask) > 0)
-				shift = 6f;
-
-			switch (args.Direction) {
-			case ScrollDirection.Up:
-			case ScrollDirection.Right:
-				Position = animation.To - shift;
-				return true;
-			case Gdk.ScrollDirection.Down:
-			case Gdk.ScrollDirection.Left:
-				Position = animation.To + shift;
-				return true;
-			}
-			return false;
-		}
-
-		protected override bool OnKeyPressEvent (Gdk.EventKey ek)
-		{
-			switch (ek.Key) {
-			case Gdk.Key.Page_Down:
-			case Gdk.Key.Down:
-			case Gdk.Key.Right:
-				ActiveItem ++;
-				return true;
-				
-			case Gdk.Key.Page_Up:
-			case Gdk.Key.Up:
-			case Gdk.Key.Left:
-				ActiveItem --;
-				return true;
-			}
-			return false;
-		}
-
-		protected virtual void SetPositionCore (double position)
-		{
-			if (this.position == position)
-				return;
-			if (position < 0)
-				position = 0;
-			if (position > selection.Collection.Count - 1)
-				position = selection.Collection.Count - 1;
-
-
-			this.position = position;
-			QueueDraw ();
-		}
-
-		void HandlePointerChanged (object sender, BrowsablePointerChangedEventArgs args)
-		{
-			Position = ActiveItem;
-		}
-
-		void HandleCollectionChanged (IBrowsableCollection coll)
-		{
-			this.position = ActiveItem;
-			QueueDraw ();
-		}
-
-		void HandleCollectionItemsChanged (IBrowsableCollection coll, BrowsableEventArgs args)
-		{
-			if (!args.Changes.DataChanged)
-				return;
-			foreach (int item in args.Items)
-				thumb_cache.TryRemove ((selection.Collection [item]).DefaultVersion.Uri);
-
-			//FIXME call QueueDrawArea
-			QueueDraw ();
-		}
-
-		void HandlePixbufLoaded (ImageLoaderThread pl, ImageLoaderThread.RequestItem item) {
-			if (!thumb_cache.Contains (item.Uri)) {
-				return;
-			}
-			
-			//FIXME use QueueDrawArea
-			//FIXME only invalidate if displayed
-			QueueDraw ();
-			
-
-		}
-		
-		protected override bool OnPopupMenu ()
-		{
-			DrawOrientationMenu (null);
-			return true;
-		}
-
-		private bool DrawOrientationMenu (Gdk.EventButton args)
-		{
-			Gtk.Menu placement_menu = new Gtk.Menu ();
-			GtkUtil.MakeCheckMenuItem (placement_menu, 
-							Mono.Unix.Catalog.GetString ("_Horizontal"), 
-							App.Instance.Organizer.HandleFilmstripHorizontal, 
-							true, Orientation == Orientation.Horizontal, true);
-			GtkUtil.MakeCheckMenuItem (placement_menu, 
-							Mono.Unix.Catalog.GetString ("_Vertical"), 
-							App.Instance.Organizer.HandleFilmstripVertical, 
-							true, Orientation == Orientation.Vertical, true);
-
-			if (args != null)
-				placement_menu.Popup (null, null, null, args.Button, args.Time);
-			else
-				placement_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
-			
-			return true;
-		}
-
-		protected override bool OnButtonPressEvent (EventButton evnt)
-		{
-			if (evnt.Button == 3)
-				return DrawOrientationMenu (evnt); 
-
-			if (evnt.Button != 1 || (
-				(Orientation == Orientation.Horizontal && (evnt.X > filmstrip_end_pos || evnt.X < filmstrip_start_pos)) || 
-				(Orientation == Orientation.Vertical && (evnt.Y > filmstrip_end_pos || evnt.Y < filmstrip_start_pos)) 
-				))
-				return false;
-			HasFocus = true;
-			int pos = -1;
-			foreach (int key in start_indexes.Keys)
-				if (key <= (Orientation == Orientation.Horizontal ? evnt.X : evnt.Y) && key > pos)
-					pos = key;
-			ActiveItem = (int)start_indexes [pos];
-			return true;
-		}
- 
- 		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;
-			try {
-				var pixbuf = thumb_cache.Get (uri);
-				if (pixbuf != null)
-					current = pixbuf.ShallowCopy ();
-			} catch (IndexOutOfRangeException) {
-				current = null;
-			}
-
-			if (current == null) {
-                var pixbuf = XdgThumbnailSpec.LoadThumbnail (uri, ThumbnailSize.Large, null);
-                if (pixbuf == null) {
-					ThumbnailLoader.Default.Request (uri, ThumbnailSize.Large, 0);
-                    current = FSpot.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 ();
-					thumb_cache.Add (uri, current);
-                }
-			}
-			
-			//FIXME: we might end up leaking a pixbuf here
-			Cms.Profile screen_profile;
-			if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) { 
-				Pixbuf t = current.Copy ();
-				current = t;
-				FSpot.ColorManagement.ApplyProfile (current, screen_profile);
-			}
-			
-			// Add a four pixel white border around the thumbnail
-			Pixbuf whiteBorder = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, current.Width, current.Height);
-			whiteBorder.Fill (0);
-			current.CopyArea (1, 1, current.Width - 8, current.Height - 8, whiteBorder, 4, 4);
-			current = whiteBorder;
-
-			if (!highlighted)
-				return current;
-
-			Pixbuf highlight = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, current.Width, current.Height);
-
-			highlight.Fill (ColorToInt (Style.Light (StateType.Selected)));
-
-			// Add a two pixel highlight around the thumbnail
-			current.CopyArea (2, 2, current.Width - 4, current.Height - 4, highlight, 2, 2);
-
-			return highlight;
-		}
-
-		private static uint ColorToInt(Gdk.Color color) {
-			return (uint)((uint)color.Red / 256 << 24 ) + ((uint)color.Green / 256 << 16) + ((uint)color.Blue / 256 << 8) + 255;
-		}
-
-		~Filmstrip ()
-		{
-			Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
-			Dispose (false);
-		}
-			
-		public override void Dispose ()
-		{
-			Dispose (true);
-			base.Dispose ();
-			System.GC.SuppressFinalize (this);
-		}
-
-		bool is_disposed = false;
-		protected virtual void Dispose (bool disposing)
-		{
-			if (is_disposed)
-				return;
-			if (disposing) {
-				this.selection.Changed -= HandlePointerChanged;
-				this.selection.Collection.Changed -= HandleCollectionChanged;
-				this.selection.Collection.ItemsChanged -= HandleCollectionItemsChanged;
-				ThumbnailLoader.Default.OnPixbufLoaded -= HandlePixbufLoaded;
-				if (background_pixbuf != null)
-					background_pixbuf.Dispose ();
-				if (background_tile != null)
-					background_tile.Dispose ();
-				thumb_cache.Dispose ();
-			}
-			//Free unmanaged resources
-
-			is_disposed = true;
-		}
-	}
-}
diff --git a/src/Widgets/FindBar.cs b/src/Widgets/FindBar.cs
deleted file mode 100644
index e469f2a..0000000
--- a/src/Widgets/FindBar.cs
+++ /dev/null
@@ -1,616 +0,0 @@
-/*
- * Widgets/FindBar.cs
- *
- * Author(s)
- *  Gabriel Burt  <gabriel.burt at gmail.com>
- *  Stephane Delcroix  <stephane at delcroix.org>
- * 
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Collections;
-using System.Text;
-using System.Text.RegularExpressions;
-using Gtk;
-using Gdk;
-using Mono.Unix;
-
-using FSpot.Query;
-using Hyena;
-
-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;
-
-		/*
-		 * Properties
-		 */
-		public bool Completing {
-			get {
-				return (entry.Completion as LogicEntryCompletion).Completing;
-			}
-		}
-
-		public Gtk.Entry Entry {
-			get { return entry; }
-		}
-
-		public Term RootTerm  {
-			get { return root_term; }
-		}
-
-		/*
-		 * Constructor
-		 */
-		public FindBar (PhotoQuery query, TreeModel model) : base(new HBox())
-		{
-			this.query = query;
-			box = Child as HBox;
-
-			box.Spacing = 6;
-			box.BorderWidth = 2;
-
-			box.PackStart (new Label (Catalog.GetString ("Find:")), false, false, 0);
-
-			entry = new Entry ();
-			entry.Completion = new LogicEntryCompletion (entry, model);
-
-			entry.TextInserted  += HandleEntryTextInserted;
-			entry.TextDeleted   += HandleEntryTextDeleted;
-			entry.KeyPressEvent += HandleEntryKeyPress;
-
-			box.PackStart (entry, true, true, 0);
-
-			Button clear_button = new Gtk.Button ();
-			clear_button.Add (new Gtk.Image ("gtk-close", Gtk.IconSize.Button));
-			clear_button.Clicked += HandleCloseButtonClicked;
-			clear_button.Relief = Gtk.ReliefStyle.None;
-			box.PackStart (clear_button, false, false, 0);
-		}
-
-		/*
-		 * Event Handlers
-		 */
-
-		private void HandleCloseButtonClicked (object sender, EventArgs args)
-		{
-			Clear ();
-		}
-
-		private void HandleEntryTextInserted (object sender, TextInsertedArgs args)
-		{
-			//Log.DebugFormat ("inserting {0}, ( = {1}  ) = {2}", args.Text, open_parens, close_parens);
-
-			//int start = args.Position - args.Length;
-
-			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 close_parens_needed = open_parens - close_parens;
-			for (int i = 0; i < close_parens_needed; i++) {
-				entry.TextInserted -= HandleEntryTextInserted;
-				entry.InsertText (")", ref pos);
-				close_parens++;
-				entry.TextInserted += HandleEntryTextInserted;
-				pos++;
-			}
-			//Log.DebugFormat ("done w/ insert, {0}, ( = {1}  ) = {2}", args.Text, open_parens, close_parens);
-			last_entry_text = entry.Text;
-
-			QueueUpdate ();
-		}
-
-		private void HandleEntryTextDeleted (object sender, TextDeletedArgs args)
-		{
-			int length = args.EndPos - args.StartPos;
-			//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);
-
-			for (int i = 0; i < txt.Length; i++) {
-				if (txt [i] == '(')
-					open_parens--;
-				else if (txt [i] == ')')
-					close_parens--;
-			}
-
-			last_entry_text = entry.Text;
-
-			QueueUpdate ();
-		}
-
-		private void HandleEntryKeyPress (object sender, KeyPressEventArgs args)
-		{
-			//bool shift = ModifierType.ShiftMask == (args.Event.State & ModifierType.ShiftMask);
-
-			switch (args.Event.Key) {
-			case (Gdk.Key.Escape):
-				Clear ();
-				args.RetVal = true;
-				break;
-
-			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) {
-					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++;
-
-				// Put the cursor right after the open paren
-				entry.Position++;
-
-				args.RetVal = true;
-				break;
-
-			default:
-				args.RetVal = false;
-				break;
-			}
-		}
-
-		/*
-		 * Helper methods.
-		 */
-
-		private void Clear ()
-		{
-			entry.Text = String.Empty;
-			Hide ();
-		}
-
-		// OPS The operators we support, case insensitive
-		//private static string op_str = "(?'Ops' or | and |, | \\s+ )";
-		private static string op_str = "(?'Ops' "+ Catalog.GetString ("or") + " | "+ Catalog.GetString ("and")  + " |, )";
-
-		// Match literals, eg tags or other text to search on
-		private static string literal_str = "[^{0}{1}]+?";
-		//private static string not_literal_str = "not\\s*\\((?'NotTag'[^{0}{1}]+)\\)";
-
-		// Match a group surrounded by parenthesis and one or more terms separated by operators
-		private static string term_str = "(((?'Open'{0})(?'Pre'[^{0}{1}]*?))+((?'Close-Open'{1})(?'Post'[^{0}{1}]*?))+)*?(?(Open)(?!))";
-
-		// Match a group surrounded by parenthesis and one or more terms separated by operators, surrounded by not()
-		//private static string not_term_str = String.Format("not\\s*(?'NotTerm'{0})", term_str);
-
-		// Match a simple term or a group term or a not(group term)
-		//private static string comb_term_str = String.Format ("(?'Term'{0}|{2}|{1})", simple_term_str, term_str, not_term_str);
-		private static string comb_term_str = String.Format ("(?'Term'{0}|{1})|not\\s*\\((?'NotTerm'{0})\\)|not\\s*(?'NotTerm'{1})", literal_str, term_str);
-
-		// Match a single term or a set of terms separated by operators
-		private static string regex_str = String.Format ("^((?'Terms'{0}){1})*(?'Terms'{0})$", comb_term_str, op_str);
-
-		private static Regex term_regex = new Regex (
-							  String.Format (regex_str, "\\(", "\\)"),
-							  RegexOptions.IgnoreCase | RegexOptions.Compiled
-						  );
-
-		// Breaking the query the user typed into something useful involves running
-		// it through the above regular expression recursively until it is broken down
-		// into literals and operators that we can use to generate SQL queries.
-		private bool ConstructQuery (Term parent, int depth, string txt)
-		{
-			return ConstructQuery(parent, depth, txt, false);
-		}
-
-		private bool ConstructQuery (Term parent, int depth, string txt, bool negated)
-		{
-			if (txt == null || txt.Length == 0)
-				return true;
-
-			string indent = String.Format ("{0," + depth*2 + "}", " ");
-
-			//Log.DebugFormat (indent + "Have text: {0}", txt);
-
-			// Match the query the user typed against our regular expression
-			Match match = term_regex.Match (txt);
-
-			if (!match.Success) {
-				//Log.Debug (indent + "Failed to match.");
-				return false;
-			}
-
-			bool op_valid = true;
-			string op = String.Empty;
-
-			// For the moment at least we don't support operator precedence, so we require
-			// that only a single operator is used for any given term unless it is made unambiguous
-			// by using parenthesis.
-			foreach (Capture capture in match.Groups ["Ops"].Captures) {
-				if (op == String.Empty)
-					op = capture.Value;
-				else if (op != capture.Value) {
-					op_valid = false;
-					break;
-				}
-			}
-
-			if (!op_valid) {
-				Log.Information (indent + "Ambiguous operator sequence.  Use parenthesis to explicitly define evaluation order.");
-				return false;
-			}
-
-			if (match.Groups ["Terms"].Captures.Count == 1 && match.Groups["NotTerm"].Captures.Count != 1) {
-				//Log.DebugFormat (indent + "Unbreakable term: {0}", match.Groups ["Terms"].Captures [0]);
-				string literal;
-				bool is_negated = false;
-				Tag tag = null;
-
-
-				if (match.Groups ["NotTag"].Captures.Count == 1) {
-					literal = match.Groups ["NotTag"].Captures [0].Value;
-					is_negated = true;
-				} else {
-					literal = match.Groups ["Terms"].Captures [0].Value;
-				}
-
-				is_negated = is_negated || negated;
-
-				tag = App.Instance.Database.Tags.GetTagByName (literal);
-
-				// New OR term so we can match against both tag and text search
-				parent = new OrTerm(parent, null);
-
-				// If the literal is the name of a tag, include it in the OR
-				//AbstractLiteral term = null;
-				if (tag != null) {
-					new Literal (parent, tag, null);
-				}
-
-				// Always include the literal text in the search (path, comment, etc)
-				new TextLiteral (parent, literal);
-
-				// If the term was negated, negate the OR parent term
-				if (is_negated) {
-					parent = parent.Invert(true);
-				}
-
-				if (RootTerm == null)
-					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;
-				}
-
-				foreach (Capture capture in match.Groups ["Term"].Captures) {
-					string subterm = capture.Value.Trim ();
-
-					if (subterm == null || subterm.Length == 0)
-						continue;
-
-					// Strip leading/trailing parens
-					if (subterm [0] == '(' && subterm [subterm.Length - 1] == ')') {
-						subterm = subterm.Remove (subterm.Length - 1, 1);
-						subterm = subterm.Remove (0, 1);
-					}
-
-					//Log.DebugFormat (indent + "Breaking subterm apart: {0}", subterm);
-
-					if (!ConstructQuery (us, depth + 1, subterm, negated))
-						return false;
-				}
-
-				foreach (Capture capture in match.Groups ["NotTerm"].Captures) {
-					string subterm = capture.Value.Trim ();
-
-					if (subterm == null || subterm.Length == 0)
-						continue;
-
-					// Strip leading/trailing parens
-					if (subterm [0] == '(' && subterm [subterm.Length - 1] == ')') {
-						subterm = subterm.Remove (subterm.Length - 1, 1);
-						subterm = subterm.Remove (0, 1);
-					}
-
-					//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);
-				}
-
-				return true;
-			}
-		}
-
-		private bool updating = false;
-		private uint update_timeout_id = 0;
-		private void QueueUpdate ()
-		{
-			if (updating || update_timeout_id != 0) {
-				lock(this) {
-					// If there is a timer set and we are not yet handling its timeout, then remove the timer
-					// so we delay its trigger for another 500ms.
-					if (!updating && update_timeout_id != 0)
-						GLib.Source.Remove (update_timeout_id);
-
-					// Assuming we're not currently handling a timeout, add a new timer
-					if (!updating)
-						update_timeout_id = GLib.Timeout.Add(500, OnUpdateTimer);
-				}
-			} else {
-				// If we are not updating and there isn't a timer already set, then there is
-				// no risk of race condition with the  timeout handler.
-				update_timeout_id = GLib.Timeout.Add(500, OnUpdateTimer);
-			}
-		}
-
-		private bool OnUpdateTimer ()
-		{
-			lock(this) {
-				updating = true;
-			}
-
-			Update();
-
-			lock(this) {
-				updating = false;
-				update_timeout_id = 0;
-			}
-
-			return false;
-		}
-
-		private void Update ()
-		{
-			// Clear the last root term
-			root_term = null;
-
-			if (ParensValid () && ConstructQuery (null, 0, entry.Text)) {
-				if (RootTerm != null) {
-					//Log.DebugFormat("rootTerm = {0}", RootTerm);
-					if (!(RootTerm is AndTerm)) {
-						// A little hacky, here to make sure the root term is a AndTerm which will
-						// ensure we handle the Hidden tag properly
-						AndTerm root_parent = new AndTerm(null, null);
-						RootTerm.Parent = root_parent;
-						root_term = root_parent;
-					}
-
-					//Log.DebugFormat("rootTerm = {0}", RootTerm);
-					if (!(RootTerm is AndTerm)) {
-						// A little hacky, here to make sure the root term is a AndTerm which will
-						// ensure we handle the Hidden tag properly
-						AndTerm root_parent = new AndTerm(null, null);
-						RootTerm.Parent = root_parent;
-						root_term = root_parent;
-					}
-					//Log.DebugFormat ("condition = {0}", RootTerm.SqlCondition ());
-					query.TagTerm = new ConditionWrapper (RootTerm.SqlCondition ());
-				} else {
-					query.TagTerm = null;
-					//Log.Debug ("root term is null");
-				}
-			}
-		}
-
-		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);
-
-					if (pair_pos == -1)
-						return false;
-				}
-			}
-
-			return true;
-		}
-
-		/*
-		 * Static Utility Methods
-		 */
-		private static int ParenPairPosition (string txt, int pos)
-		{
-			char one = txt [pos];
-			bool open = (one == '(');
-			char two = (open) ? ')' : '(';
-
-			//int level = 0;
-			int num = (open) ? txt.Length - pos - 1: pos;
-
-			int sames = 0;
-			for (int i = 0; i < num; i++) {
-				if (open)
-					pos++;
-				else
-					pos--;
-
-				if (pos < 0 || pos > txt.Length - 1)
-					return -1;
-
-				if (txt [pos] == one)
-					sames++;
-				else if (txt [pos] == two) {
-					if (sames == 0)
-						return pos;
-					else
-						sames--;
-				}
-			}
-
-			return -1;
-		}
-
-		/*private static string ReverseString (string txt)
-		{
-		    char [] txt_a = txt.ToCharArray ();
-		    System.Reverse (txt_a);
-		    return new String (txt_a);
-		}*/
-	}
-
-	public class LogicEntryCompletion : EntryCompletion {
-		private Entry entry;
-
-		private bool completing = false;
-		public bool Completing {
-			get { return completing; }
-		}
-
-		public LogicEntryCompletion (Entry entry, TreeModel tree_model)
-		{
-			this.entry = entry;
-
-			Model = new DependentListStore(tree_model);
-
-			InlineCompletion = false;
-			MinimumKeyLength = 1;
-			TextColumn = 1;
-			PopupSetWidth = false;
-			MatchFunc = LogicEntryCompletionMatchFunc;
-			MatchSelected += HandleMatchSelected;
-
-			// Insert these when appropriate..
-			//InsertActionText (0, "or");
-			//InsertActionText (1, "and");
-			// HandleAction...
-		}
-
-		[GLib.ConnectBefore]
-		private void HandleMatchSelected (object sender, MatchSelectedArgs args)
-		{
-			string name = args.Model.GetValue (args.Iter, TextColumn) as string;
-			//Log.DebugFormat ("match selected..{0}", name);
-
-			int pos = entry.Position;
-			string updated_text = completion_logic.ReplaceKey (entry.Text, name, ref pos);
-
-			completing = true;
-			entry.Text = updated_text;
-			entry.Position = pos;
-			completing = false;
-
-			args.RetVal = true;
-			//Log.Debug ("done w/ match selected");
-		}
-
-		private CompletionLogic completion_logic = new CompletionLogic ();
-		public bool LogicEntryCompletionMatchFunc (EntryCompletion completion, string key, TreeIter iter)
-		{
-			if (Completing)
-				return false;
-
-			key = key == null ? null : key.Normalize(NormalizationForm.FormC);
-			string name = completion.Model.GetValue (iter, completion.TextColumn) as string;
-			int pos = entry.Position - 1;
-			return completion_logic.MatchFunc (name, key, pos);
-		}
-	}
-
-	public class CompletionLogic
-	{
-		string last_key = String.Empty;
-		string transformed_key = String.Empty;
-		int start = 0;
-
-		private static string or_op = " " + Catalog.GetString ("or") + " ";
-		private static string and_op = " " + Catalog.GetString ("and") + " ";
-
-		private static int or_op_len = or_op.Length;
-		private static int and_op_len = and_op.Length;
-
-		public bool MatchFunc (string name, string key, int pos)
-		{
-			// If this is the fist comparison for this key, convert the key (which is the entire search string)
-			// into just the part that is relevant to completing this tag name.
-			if (key != last_key) {
-				last_key = key;
-
-				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;
-				else {
-					start = 0;
-					for (int i = pos; i >= 0; i--) {
-						if (key [i] == ')' || key [i] == '(' ||
-						   (i >= and_op_len - 1 && String.Compare (key.Substring (i - and_op_len + 1, and_op_len), and_op, true) == 0) ||
-						   (i >= or_op_len - 1 && String.Compare (key.Substring (i - or_op_len + 1, or_op_len), or_op, true) == 0)) {
-							//Log.DebugFormat ("have start break char at {0}", i);
-							start = i + 1;
-							break;
-						}
-					}
-
-					int end = key.Length - 1;
-					for (int j = pos; j < key.Length; j++) {
-						if (key [j] == ')' || key [j] == '(' ||
-						   (key.Length >= j + and_op_len && String.Compare (key.Substring (j, and_op_len), and_op, true) == 0) ||
-						   (key.Length >= j + or_op_len && String.Compare (key.Substring (j, or_op_len), or_op, true) == 0)) {
-							end = j - 1;
-							break;
-						}
-					}
-
-					//Log.DebugFormat ("start = {0} end = {1}", start, end);
-
-					int len = end - start + 1;
-					if (len > 0 && start < last_key.Length)
-						transformed_key = last_key.Substring (start, end - start + 1);
-					else
-						transformed_key = String.Empty;
-				}
-				//Log.DebugFormat ("transformed key {0} into {1}", key, transformed_key);
-			}
-
-			if (transformed_key == String.Empty)
-				return false;
-
-			// Ignore null or names that are too short
-			if (name == null || name.Length <= transformed_key.Length)
-				return false;
-
-			//Log.DebugFormat ("entered = {0} compared to {1}", transformed_key, name);
-
-			// Try to match key and name case insensitive
-			if (String.Compare (transformed_key, name.Substring (0, transformed_key.Length), true) == 0) {
-				return true;
-			}
-
-			// Try to match with diacritics removed from name
-			string simplified_name = StringUtil.SearchKey (name.Substring (0, transformed_key.Length));
-			//Log.DebugFormat ("entered = {0} compared to {1}", transformed_key, simplified_name);
-			return (String.Compare (transformed_key, simplified_name, true) == 0);
-		}
-
-		public string ReplaceKey (string query, string name, ref int pos)
-		{
-			// do some sanity checks first
-			if (start > query.Length) {
-				Log.Error ("ReplaceKey: start > query.length");
-				return query;
-			}
-			// move caret after inserted name, even if it was not
-			// at the end of the key
-			pos = start + name.Length;
-			return query.Substring (0, start) + name + query.Substring (start + transformed_key.Length);
-		}
-	}
-}
diff --git a/src/Widgets/FolderTreeModel.cs b/src/Widgets/FolderTreeModel.cs
deleted file mode 100644
index 1afd1da..0000000
--- a/src/Widgets/FolderTreeModel.cs
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * FSpot.Widgets.FolderTreeModel.cs
- *
- * Author(s)
- * 	Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.Collections.Generic;
-
-using Gtk;
-using GLib;
-
-using FSpot;
-using Hyena;
-
-using Banshee.Database;
-
-using Mono.Unix;
-using Mono.Data.SqliteClient;
-
-namespace FSpot.Widgets
-{
-	public class FolderTreeModel : TreeStore
-	{
-		Db database;
-		
-		const string query_string = 
-			"SELECT base_uri, COUNT(*) AS count " +
-			"FROM photos " + 
-			"GROUP BY base_uri " +
-			"ORDER BY base_uri ASC";
-		
-		
-		public FolderTreeModel ()
-			: base (typeof (string), typeof (int), typeof (SafeUri))
-		{
-			database = App.Instance.Database;
-			database.Photos.ItemsChanged += HandlePhotoItemsChanged;
-			
-			UpdateFolderTree ();
-		}
-		
-		void HandlePhotoItemsChanged (object sender, DbItemEventArgs<Photo> e)
-		{
-			UpdateFolderTree ();
-		}
-		
-		public string GetFolderNameByIter (TreeIter iter)
-		{
-			if ( ! IterIsValid (iter))
-				return null;
-			
-			return (string) GetValue (iter, 0);
-		}
-		
-		public int GetPhotoCountByIter (TreeIter iter)
-		{
-			if ( ! IterIsValid (iter))
-				return -1;
-			
-			return (int) GetValue (iter, 1);
-		}
-		
-		public SafeUri GetUriByIter (TreeIter iter)
-		{
-			if ( ! IterIsValid (iter))
-				return null;
-			
-			return (SafeUri) GetValue (iter, 2);
-		}	
-		
-		public SafeUri GetUriByPath (TreePath row)
-		{
-			TreeIter iter;
-			
-			GetIter (out iter, row);
-			
-			return GetUriByIter (iter);
-		}
-		
-		int count_all;
-		public int Count {
-			get { return count_all; }
-		}
-		
-		/*
-		 * UpdateFolderTree queries for directories in database and updates
-		 * a possibly existing folder-tree to the queried structure
-		 */
-		private void UpdateFolderTree ()
-		{
-			Clear ();
-			
-			count_all = 0;
-			
-			/* points at start of each iteration to the leaf of the last inserted uri */
-			TreeIter iter = TreeIter.Zero;
-			
-			/* stores the segments of the last inserted uri */
-			string[] last_segments = new string[] {};
-			
-			int last_count = 0;
-			
-			SqliteDataReader reader = database.Database.Query (query_string);
-			
-			while (reader.Read ()) {
-				var base_uri = new SafeUri (reader["base_uri"].ToString (), true);
-				
-				int count = Convert.ToInt32 (reader["count"]);
-				
-				// FIXME: this is a workaround hack to stop things from crashing - https://bugzilla.gnome.org/show_bug.cgi?id=622318
-				int index = base_uri.ToString ().IndexOf ("://");
-				var hack = base_uri.ToString ().Substring (index + 3);
-				hack = hack.IndexOf ('/') == 0 ? hack : "/" + hack;
-				string[] segments = hack.TrimEnd ('/').Split ('/');
-
-				/* First segment contains nothing (since we split by /), so we
-				 * can overwrite the first segment for our needs and put the
-				 * scheme here.
-				 */
-				segments[0] = base_uri.Scheme;
-				
-				int i = 0;
-				
-				/* find first difference of last inserted an current uri */
-				while (i < last_segments.Length && i < segments.Length) {
-					if (segments[i] != last_segments[i])
-						break;
-					
-					i++;
-				}
-				
-				/* points to the parent node of the current iter */
-				TreeIter parent_iter = iter;
-				
-				/* step back to the level, where the difference occur */
-				for (int j = 0; j + i < last_segments.Length; j++) {
-					
-					iter = parent_iter;
-					
-					if (IterParent (out parent_iter, iter)) { 
-						last_count += (int)GetValue (parent_iter, 1);
-						SetValue (parent_iter, 1, last_count);
-					} else
-						count_all += (int)last_count;
-				}
-				
-				while (i < segments.Length) {
-					if (IterIsValid (parent_iter)) {
-						iter =
-							AppendValues (parent_iter,
-							              Uri.UnescapeDataString (segments[i]),
-							              (segments.Length - 1 == i)? count : 0,
-							              (GetValue (parent_iter, 2) as SafeUri).Append (String.Format ("{0}/", segments[i]))
-							              );
-					} else {
-						iter =
-							AppendValues (Uri.UnescapeDataString (segments[i]),
-							              (segments.Length - 1 == i)? count : 0,
-							              new SafeUri (String.Format ("{0}:///", base_uri.Scheme), true));
-					}
-
-					parent_iter = iter;
-					
-					i++;
-				}
-				
-				last_count = count;
-				last_segments = segments;
-				
-			}
-			
-			if (IterIsValid (iter)) {
-				/* and at least, step back and update photo count */
-				while (IterParent (out iter, iter)) {
-					last_count += (int)GetValue (iter, 1);
-					SetValue (iter, 1, last_count);
-				}
-				count_all += (int)last_count;
-			}
-		}
-	}
-}
diff --git a/src/Widgets/FolderTreePage.cs b/src/Widgets/FolderTreePage.cs
deleted file mode 100644
index 6221794..0000000
--- a/src/Widgets/FolderTreePage.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * FSpot.Widgets.FolderTreePage.cs
- *
- * Author(s)
- * 	Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using Gtk;
-using Mono.Unix;
-using FSpot.Extensions;
-
-namespace FSpot.Widgets
-{
-	public class FolderTreePage : SidebarPage
-	{
-		readonly FolderTreeView folder_tree_widget;
-		
-		public FolderTreePage () 
-			: base (new ScrolledWindow (), Catalog.GetString ("Folders"), "gtk-directory")
-		{
-			ScrolledWindow scrolled_window = SidebarWidget as ScrolledWindow;
-			folder_tree_widget = new FolderTreeView ();
-			scrolled_window.Add (folder_tree_widget);
-		}
-	}
-}
diff --git a/src/Widgets/FolderTreeView.cs b/src/Widgets/FolderTreeView.cs
deleted file mode 100644
index f69553e..0000000
--- a/src/Widgets/FolderTreeView.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * FSpot.Widgets.FolderTreeView.cs
- *
- * Author(s)
- * 	Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- */
-
-
-using System;
-using System.Collections.Generic;
-
-using Gtk;
-using GLib;
-
-using FSpot;
-using FSpot.Utils;
-
-using Hyena;
-using Mono.Unix;
-
-namespace FSpot.Widgets
-{
-	public class FolderTreeView : SaneTreeView
-	{	
-		FolderTreeModel folder_tree_model;
-	
-		public FolderTreeView () : this (new FolderTreeModel ())
-		{
-		}
-
-		public FolderTreeView (FolderTreeModel tree_model) : base (tree_model)
-		{		
-			folder_tree_model = tree_model;
-			
-			HeadersVisible = false;
-			
-			TreeViewColumn column = new TreeViewColumn ();
-			
-			CellRendererPixbuf pixbuf_renderer = new CellRendererPixbuf ();
-			column.PackStart (pixbuf_renderer, false);
-			column.SetCellDataFunc (pixbuf_renderer, PixbufDataFunc as TreeCellDataFunc);
-			
-			CellRendererTextProgress folder_renderer = new CellRendererTextProgress ();
-			column.PackStart (folder_renderer, true);
-			column.SetCellDataFunc (folder_renderer, FolderDataFunc as TreeCellDataFunc);
-			
-			AppendColumn (column);
-			
-			Gtk.Drag.SourceSet (this, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
-				    folder_tree_source_target_table, Gdk.DragAction.Copy | Gdk.DragAction.Move);
-		}
-		
-		public UriList SelectedUris {
-			get {
-				UriList list = new UriList ();
-				
-				TreePath[] selected_rows = Selection.GetSelectedRows ();
-				
-				foreach (TreePath row in selected_rows)
-					list.Add (new SafeUri (folder_tree_model.GetUriByPath (row)));
-				
-				return list;
-			}
-		}
-		
-		void PixbufDataFunc (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter)
-		{
-			CellRendererPixbuf renderer = cell as CellRendererPixbuf;
-			
-			string stock;
-			var uri = folder_tree_model.GetUriByIter (iter);
-			if (uri == null)
-				return;
-			File file = FileFactory.NewForUri (uri);
-			try {
-				FileInfo info =
-					file.QueryInfo ("standard::icon", FileQueryInfoFlags.None, null);
-				
-				ThemedIcon themed_icon = info.Icon as ThemedIcon;
-				if (themed_icon != null && themed_icon.Names.Length > 0)
-					stock = themed_icon.Names[0];
-				else
-					stock = "gtk-directory";
-				
-			} catch (Exception) {
-				stock = "gtk-directory";
-			}
-
-			TreeIter tmp;
-			if (tree_model.IterParent (out tmp, iter)) {
-				renderer.IconName = stock;
-				renderer.CellBackground = null;
-			} else {
-				renderer.IconName = stock;
-				renderer.CellBackgroundGdk = Style.Background (StateType.Selected);
-			}
-		}
-		
-		void FolderDataFunc (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter)
-		{
-			CellRendererTextProgress renderer = cell as CellRendererTextProgress;
-			
-			int progress_value = 0;
-			int count = (tree_model as FolderTreeModel).Count;
-			
-			if (count != 0)
-				progress_value = (int) ((100.0 * folder_tree_model.GetPhotoCountByIter (iter)) / count);
-			
-			renderer.Value = progress_value;
-			
-			string text = folder_tree_model.GetFolderNameByIter (iter);
-			
-			TreeIter tmp;
-			if (tree_model.IterParent (out tmp, iter)) {
-				renderer.UseMarkup = false;
-				renderer.Text = text;
-				renderer.CellBackground = null;
-			} else {
-				renderer.UseMarkup = true;
-				
-				/* since import do not use GIO at the moment, no other prefix than file:/// is
-				 * possible.
-				 */
-				if (text == Uri.UriSchemeFile)
-					renderer.Text = String.Format ("<b>{0}</b>", Catalog.GetString ("Filesystem"));
-				else
-					renderer.Text = String.Format ("<b>{0}</b>", text);
-				
-				renderer.CellBackgroundGdk = Style.Background (StateType.Selected);
-			}
-		}
-			
-		private static TargetEntry [] folder_tree_source_target_table =
-			new TargetEntry [] {
-				DragDropTargets.UriQueryEntry,
-				DragDropTargets.UriListEntry,
-				DragDropTargets.PlainTextEntry
-		};
-		
-		
-		protected override void OnDragDataGet (Gdk.DragContext context, Gtk.SelectionData selection_data, uint info, uint time_)
-		{
-			if (info == DragDropTargets.UriQueryEntry.Info
-			    || info == DragDropTargets.UriListEntry.Info
-			    || info == DragDropTargets.PlainTextEntry.Info) {
-				
-				selection_data.SetUriListData (SelectedUris, context.Targets[0]);
-				return;
-			}
-		}
-		
-		protected override bool OnDragDrop (Gdk.DragContext context, int x, int y, uint time_)
-		{
-			return true;
-		}
-		
-		protected override void OnRowActivated (Gtk.TreePath path, Gtk.TreeViewColumn column)
-		{
-			App.Instance.Organizer.SetFolderQuery (SelectedUris);	
-		}
-
-	}
-}
diff --git a/src/Widgets/HighlightedBox.cs b/src/Widgets/HighlightedBox.cs
deleted file mode 100644
index 51927c5..0000000
--- a/src/Widgets/HighlightedBox.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * FSpot.Widgets.HighlightedBox.cs
- *
- * Author(s)
- *  Gabriel Burt  <gabriel.burt at gmail.com>
- * 
- * This is free software. See COPYING for details.
- */
-
-using Gtk;
-
-namespace FSpot.Widgets
-{
-	public class HighlightedBox : EventBox
-	{
-		private bool changing_style = false;
-
-		public HighlightedBox (Widget child) : base ()
-		{
-			Child = child;
-			AppPaintable = true;
-		}
-
-		protected override void OnStyleSet(Style style)
-		{
-			if (!changing_style) {
-				changing_style = true;
-				ModifyBg(StateType.Normal, Style.Background(StateType.Selected));
-				changing_style = false;
-			}
-		}
-
-		protected override bool OnExposeEvent(Gdk.EventExpose evnt)
-		{
-			GdkWindow.DrawRectangle(Style.ForegroundGC(StateType.Normal), false, 0, 0, Allocation.Width - 1, Allocation.Height - 1);
-			return base.OnExposeEvent(evnt);
-		}
-	}
-}
diff --git a/src/Widgets/IEffect.cs b/src/Widgets/IEffect.cs
deleted file mode 100644
index 7d784a5..0000000
--- a/src/Widgets/IEffect.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * IEffect.cs
- * 
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- * See COPYING for details.
- */
-using System;
-
-namespace FSpot {
-	public interface IEffect : IDisposable {
-		bool OnExpose (Cairo.Context ctx, Gdk.Rectangle allocation);
-	}
-}
diff --git a/src/Widgets/ITransition.cs b/src/Widgets/ITransition.cs
deleted file mode 100644
index 91c6aaf..0000000
--- a/src/Widgets/ITransition.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * ITranstion.cs
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- * Larry had a little lamb
- * 
- */
-using System;
-
-namespace FSpot {
-	public interface ITransition : IEffect {
-		bool OnEvent (Gtk.Widget w);
-		int Frames { get; }
-	}
-}
diff --git a/src/Widgets/IconView.cs b/src/Widgets/IconView.cs
deleted file mode 100644
index fa92e69..0000000
--- a/src/Widgets/IconView.cs
+++ /dev/null
@@ -1,1835 +0,0 @@
-/*
-* Widgets/IconView.cs
-*
-* Author(s):
-* 	Etore Perazzoli
-*	Larry Ewing <lewing at novell.com>
-*	Stephane Delcroix <stephane at delcroix.org>
-*
-* This is free software. See COPYING for details.
-*/
-
-using Gtk;
-using Gdk;
-using System;
-using System.Reflection;
-using System.Collections;
-using System.IO;
-using FSpot.Utils;
-using FSpot.Platform;
-
-namespace FSpot.Widgets
-{
-    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 class IconView : Gtk.Layout {
-
-		// Public properties.
-		FSpot.PixbufCache cache;
-
-		/* preserve the scroll postion when possible */
-		private bool scroll;
-		private double scroll_value;
-
-		/* suppress it sometimes */
-		bool suppress_scroll = false;
-
-		// Zooming factor.
-		protected const double ZOOM_FACTOR = 1.2;
-
-		/* Width of the thumbnails. */
-		protected int thumbnail_width = 128;
-		protected const int MAX_THUMBNAIL_WIDTH = 256;
-		protected const int MIN_THUMBNAIL_WIDTH = 64;
-		public int ThumbnailWidth {
-			get {
-				return thumbnail_width;
-			}
-			set {
-				value = Math.Min(value, MAX_THUMBNAIL_WIDTH);
-				value = Math.Max(value, MIN_THUMBNAIL_WIDTH);
-
-				if (thumbnail_width != value) {
-					thumbnail_width = value;
-					QueueResize ();
-
-					if (ZoomChanged != null)
-						ZoomChanged (this, System.EventArgs.Empty);
-				}
-			}
-		}
-
-		public double Zoom {
-			get {
-				return ((double)(ThumbnailWidth - MIN_THUMBNAIL_WIDTH) / (double)(MAX_THUMBNAIL_WIDTH - MIN_THUMBNAIL_WIDTH));
-			}
-			set {
-				ThumbnailWidth = (int) ((value) * (MAX_THUMBNAIL_WIDTH - MIN_THUMBNAIL_WIDTH)) + MIN_THUMBNAIL_WIDTH;
-			}
-		}
-
-		protected double thumbnail_ratio = 4.0 / 3.0;
-		public double ThumbnailRatio {
-			get {
-				return thumbnail_ratio;
-			}
-			set {
-				thumbnail_ratio = value;
-				QueueResize ();
-			}
-		}
-
-		public int ThumbnailHeight {
-			get {
-				return (int) Math.Round ((double) thumbnail_width / ThumbnailRatio);
-			}
-		}
-
-		public FSpot.PixbufCache Cache {
-			get {
-				return cache;
-			}
-		}
-
-		private bool display_tags = true;
-		public bool DisplayTags {
-			get {
-				return display_tags;
-			}
-
-			set {
-				display_tags = value;
-				QueueResize ();
-			}
-		}
-
-		private bool display_dates = true;
-		public bool DisplayDates {
-			get {
-				if (cell_width > 100)
-					return display_dates;
-				else
-					return false;
-			}
-
-			set {
-				display_dates = value;
-				QueueResize ();
-			}
-		}
-
-		private bool display_filenames = false;
-		public bool DisplayFilenames {
-			get { return display_filenames; }
-			set {
-				if (value != display_filenames) {
-					display_filenames = value;
-					QueueResize ();
-				}
-			}
-		}
-
-		private bool display_ratings = true;
-		public bool DisplayRatings {
-			get {
-				if (cell_width > 100)
-					return display_ratings;
-				else
-					return false;
-			}
-
-			set {
-				display_ratings  = value;
-				QueueResize ();
-			}
-		}
-
-		// Size of the frame around the thumbnail.
-		protected int cell_border_width = 10;
-
-		// Size of the frame that may be selected
-        protected int cell_border_padding = 3;
-
-		// Border around the scrolled area.
-		protected const int BORDER_SIZE = 6;
-
-		// Thickness of the outline used to indicate selected items.
-		private const int SELECTION_THICKNESS = 5;
-
-		// Size of the tag icon in the view.
-		protected int tag_icon_size = 16;
-
-		// Horizontal spacing between the tag icons
-		protected int tag_icon_hspacing = 2;
-
-		// Vertical spacing between the thumbnail and additional infos (tags, dates, ...).
-		protected int tag_icon_vspacing = 3;
-
-		// Various other layout values.
-		protected int cells_per_row;
-		protected int cell_width;
-		protected int cell_height;
-		protected int cell_details;
-		protected int displayed_rows; //for pgUp pgDn support
-
-		// 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;
-
-		// Focus Handling
-		private int real_focus_cell;
-		public int FocusCell {
-			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;
-				}
-			}
-			get {
-				return real_focus_cell;
-			}
-		}
-
-		// Public events.
-		public event EventHandler<BrowsableEventArgs> DoubleClicked;
-		public event EventHandler ZoomChanged;
-		public delegate void StartDragHandler (object o, StartDragArgs args);
-		public event StartDragHandler StartDrag;
-
-		// Public API.
-		public IconView (IntPtr raw) : base (raw) {}
-
-		protected IconView () : base (null, null)
-		{
-			cache = new FSpot.PixbufCache ();
-			cache.OnPixbufLoaded += HandlePixbufLoaded;
-
-			ScrollAdjustmentsSet += new ScrollAdjustmentsSetHandler (HandleScrollAdjustmentsSet);
-
-			ButtonPressEvent += new ButtonPressEventHandler (HandleButtonPressEvent);
-			ButtonReleaseEvent += new ButtonReleaseEventHandler (HandleButtonReleaseEvent);
-			KeyPressEvent += new KeyPressEventHandler (HandleKeyPressEvent);
-			ScrollEvent += new ScrollEventHandler(HandleScrollEvent);
-			MotionNotifyEvent += new MotionNotifyEventHandler (HandleSelectMotionNotify);
-
-			Destroyed += HandleDestroyed;
-
-			AddEvents (
-				(int) EventMask.KeyPressMask
-				| (int) EventMask.KeyReleaseMask
-				| (int) EventMask.PointerMotionMask
-				| (int) EventMask.PointerMotionHintMask
-				| (int) EventMask.ButtonPressMask
-				| (int) EventMask.ButtonReleaseMask);
-
-			CanFocus = true;
-
-			//FSpot.Global.ModifyColors (this);
-		}
-
-		public IconView (FSpot.IBrowsableCollection collection) : this ()
-		{
-			this.collection = collection;
-			this.selection = new SelectionCollection (collection);
-
-			Name = "ImageContainer";
-			collection.Changed += HandleChanged;
-			collection.ItemsChanged += HandleItemsChanged;
-
-			selection.DetailedChanged += HandleSelectionChanged;
-		}
-
-		private void HandleSelectionChanged (FSpot.IBrowsableCollection collection, int [] ids)
-		{
-			if (ids == null)
-				QueueDraw ();
-			else
-				foreach (int id in ids)
-					InvalidateCell (id);
-		}
-
-		private void HandleChanged (FSpot.IBrowsableCollection sender)
-		{
-			// FIXME we should probably try to merge the selection forward
-			// but it needs some thought to be efficient.
-			suppress_scroll = true;
-			QueueResize ();
-		}
-
-		private void HandleItemsChanged (FSpot.IBrowsableCollection sender, BrowsableEventArgs args)
-		{
-			foreach (int item in args.Items) {
-				if (args.Changes.DataChanged)
-					UpdateThumbnail (item);
-				InvalidateCell (item);
-			}
-		}
-
-		//
-		// IPhotoSelection
-		//
-
-		protected FSpot.IBrowsableCollection collection;
-		public FSpot.IBrowsableCollection Collection {
-			get {
-				return collection;
-			}
-		}
-
-		protected SelectionCollection selection;
-		public SelectionCollection Selection {
-			get {
-				return selection;
-			}
-		}
-
-		// FIXME right now a selection change triggers a complete view redraw
-		// This should be optimized away by directly notifyiing the view of changed
-		// indexes rather than having the view connect to the collection.Changed event.
-		public class SelectionCollection : IBrowsableCollection {
-			IBrowsableCollection parent;
-			Hashtable selected_cells;
-			BitArray bit_array;
-			int [] selection;
-			IBrowsableItem [] items;
-			IBrowsableItem [] old;
-
-			public SelectionCollection (IBrowsableCollection collection)
-			{
-				this.selected_cells = new Hashtable ();
-				this.parent = collection;
-				this.bit_array = new BitArray (this.parent.Count);
-				this.parent.Changed += HandleParentChanged;
-				this.parent.ItemsChanged += HandleParentItemsChanged;
-			}
-
-			private void HandleParentChanged (IBrowsableCollection collection)
-			{
-				IBrowsableItem [] local = old;
-				selected_cells.Clear ();
-				bit_array = new BitArray (parent.Count);
-				ClearCached ();
-
-				if (old != null) {
-					int i = 0;
-
-					for (i = 0; i < local.Length; i++) {
-						int parent_index = parent.IndexOf (local [i]);
-						if (parent_index >= 0)
-							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 (this.Changed != null)
-					Changed (this);
-
-				if (this.DetailedChanged != null)
-					DetailedChanged (this, null);
-
-			}
-
-			public void MarkChanged (int item, IBrowsableItemChanges changes)
-			{
-				// Forward the change event up to our parent
-				// we'll fire the event when the parent calls us back
-				parent.MarkChanged ((int) selected_cells [item], changes);
-			}
-
-			private void HandleParentItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args)
-			{
-				if (this.ItemsChanged == null)
-					return;
-
-				ArrayList local_ids = new ArrayList ();
-				foreach (int parent_index in args.Items) {
-					// If the item isn't part of the selection ignore it
-					if (!this.Contains (collection [parent_index]))
-						return;
-
-					int local_index = this.IndexOf (parent_index);
-					if (local_index >= 0)
-						local_ids.Add (local_index);
-				}
-
-				if (local_ids.Count == 0)
-					return;
-
-				int [] items = (int [])local_ids.ToArray (typeof (int));
-				ItemsChanged (this, new BrowsableEventArgs (items, args.Changes));
-			}
-
-			public BitArray ToBitArray () {
-				return bit_array;
-			}
-
-			public int [] Ids {
-				get {
-					if (selection != null)
-						return selection;
-
-					selection = new int [selected_cells.Count];
-
-					int i = 0;
-					foreach (int cell in selected_cells.Values)
-						selection [i ++] = cell;
-
-					Array.Sort (selection);
-					return selection;
-				}
-			}
-
-			public IBrowsableItem this [int index] {
-				get {
-					int [] ids = this.Ids;
-					return parent [ids[index]];
-				}
-			}
-
-			public IBrowsableItem [] Items {
-				get {
-					if (items != null)
-						return items;
-
-					int [] ids = this.Ids;
-					items = new IBrowsableItem [ids.Length];
-					for (int i = 0; i < items.Length; i++) {
-						items [i] = parent [ids[i]];
-					}
-					return items;
-				}
-			}
-
-			public void Clear ()
-			{
-				Clear (true);
-			}
-
-			public void Clear (bool update)
-			{
-				int [] ids = Ids;
-				selected_cells.Clear ();
-				bit_array.SetAll (false);
-				SignalChange (ids);
-			}
-
-			public void Add (IBrowsableItem item)
-			{
-				if (this.Contains (item))
-					return;
-
-				int index = parent.IndexOf (item);
-				this.Add (index);
-			}
-
-			public int Count {
-				get {
-					return selected_cells.Count;
-				}
-			}
-
-			public bool Contains (IBrowsableItem item)
-			{
-				return selected_cells.ContainsKey (item);
-			}
-
-			public bool Contains (int num)
-			{
-				if (num < 0 || num > parent.Count)
-					return false;
-
-				return this.Contains (parent [num]);
-			}
-
-			public void Add (int num)
-			{
-				this.Add (num, true);
-			}
-
-			public void Add (int num, bool notify)
-			{
-				if (num == -1)
-					return;
-
-				if (this.Contains (num))
-					return;
-
-				IBrowsableItem item = parent [num];
-				selected_cells [item] = num;
-				bit_array.Set (num, true);
-
-				if (notify)
-					SignalChange (new int [] {num});
-			}
-
-			public void Add (int start, int end)
-			{
-				if (start == -1 || end == -1)
-					return;
-
-				int current = Math.Min (start, end);
-				int final = Math.Max (start, end);
-				int count = final - current + 1;
-				int [] ids = new int [count];
-
-				for (int i = 0; i < count; i++) {
-					this.Add (current, false);
-					ids [i] = current;
-					current++;
-				}
-
-				SignalChange (ids);
-			}
-
-			public void Remove (int cell, bool notify)
-			{
-				IBrowsableItem item = parent [cell];
-				if (item != null)
-					this.Remove (item, notify);
-
-			}
-
-			public void Remove (IBrowsableItem item)
-			{
-				Remove (item, true);
-			}
-
-			public void Remove (int cell)
-			{
-				Remove (cell, true);
-			}
-
-			private void Remove (IBrowsableItem item, bool notify)
-			{
-				if (item == null)
-					return;
-
-				int parent_index = (int) selected_cells [item];
-				selected_cells.Remove (item);
-				bit_array.Set (parent_index, false);
-
-				if (notify)
-					SignalChange (new int [] {parent_index});
-			}
-
-			// Remove a range, except the start entry
-			public void Remove (int start, int end)
-			{
-				if (start == -1 || end == -1)
-					return;
-
-				int current = Math.Min (start + 1, end);
-				int final = Math.Max (start - 1, end);
-				int count = final - current + 1;
-				int [] ids = new int [count];
-
-				for (int i = 0; i < count; i++) {
-					this.Remove (current, false);
-					ids [i] = current;
-					current++;
-				}
-
-				SignalChange (ids);
-			}
-
-			public int IndexOf (int parent_index)
-			{
-				return System.Array.IndexOf (this.Ids, parent_index);
-			}
-
-			public int IndexOf (IBrowsableItem item)
-			{
-				if (!this.Contains (item))
-					return -1;
-
-				int parent_index = (int) selected_cells [item];
-				return System.Array.IndexOf (Ids, parent_index);
-			}
-
-			private void ToggleCell (int cell_num, bool notify)
-			{
-				if (Contains (cell_num))
-					Remove (cell_num, notify);
-				else
-					Add (cell_num, notify);
-			}
-
-			public void ToggleCell (int cell_num)
-			{
-				ToggleCell (cell_num, true);
-			}
-
-			public void SelectionInvert ()
-			{
-				int [] changed_cell = new int[parent.Count];
-				for (int i = 0; i < parent.Count; i++) {
-					ToggleCell (i, false);
-					changed_cell[i] = i;
-				}
-
-				SignalChange (changed_cell);
-			}
-
-			public void SelectRect (int start_row, int end_row, int start_line, int end_line, int cells_per_row)
-			{
-				for (int row = start_row; row < end_row; row++)
-					for (int line = start_line; line < end_line; line++) {
-						int index = line*cells_per_row + row;
-						if (index < parent.Count)
-							Add (index, false);
-					}
-			}
-
-			public void ToggleRect (int start_row, int end_row, int start_line, int end_line, int cells_per_row)
-			{
-				for  (int row = start_row; row < end_row; row++)
-					for (int line = start_line; line < end_line; line++) {
-						int index = line*cells_per_row + row;
-						if (index < parent.Count)
-							ToggleCell (index, false);
-					}
-			}
-
-
-			public event IBrowsableCollectionChangedHandler Changed;
-			public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
-
-			public delegate void DetailedCollectionChanged (IBrowsableCollection collection, int [] ids);
-			public event DetailedCollectionChanged DetailedChanged;
-
-			private void ClearCached ()
-			{
-				selection = null;
-				items = null;
-			}
-
-			public void SignalChange (int [] ids)
-			{
-				ClearCached ();
-				old = this.Items;
-
-
-				if (Changed != null)
-					Changed (this);
-
-				if (DetailedChanged!= null)
-					DetailedChanged (this, ids);
-			}
-		}
-
-		// Updating.
-		public void UpdateThumbnail (int thumbnail_num)
-		{
-			FSpot.IBrowsableItem photo = collection [thumbnail_num];
-			cache.Remove (photo.DefaultVersion.Uri);
-			InvalidateCell (thumbnail_num);
-		}
-
-		// Cell Geometry
-		public int CellAtPosition (int x, int y)
-		{
-			return CellAtPosition (x, y, true, false);
-		}
-
-		public int CellAtPosition (int x, int y, bool crop_visible, bool include_border)
-		{
-			if (collection == null)
-				return -1;
-
-			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 + cells_per_row * cell_width)
-				return -1;
-			if (y < BORDER_SIZE || y >= BORDER_SIZE + (collection.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 cell_num = column + row * cells_per_row;
-			if (cell_num >= collection.Count)
-				return -1;
-
-			// check if the click is in the gap between unselected cells
-			if (!include_border) {
-				Gdk.Rectangle displayed = CellBounds (cell_num);
-				displayed.Inflate (-cell_border_padding, -cell_border_padding-cell_details);
-				displayed.Offset (-cell_border_padding, -cell_border_padding);
-				if (displayed.Contains (x, y))
-					return cell_num;
-				else if (selection.Contains (cell_num))
-					return cell_num;
-				else
-					return -1;
-			} else
-				return cell_num;
-		}
-
-		public int TopLeftVisibleCell ()
-		{
-			//return CellAtPosition(BORDER_SIZE, (int)Vadjustment.Value + BORDER_SIZE + 8);
-			return CellAtPosition(BORDER_SIZE, (int) (Vadjustment.Value + Allocation.Height * (Vadjustment.Value / Vadjustment.Upper)) + BORDER_SIZE + 8);
-		}
-
-		public void GetCellCenter (int cell_num, out int x, out int y)
-		{
-			if (cell_num == -1) {
-				x = -1;
-				y = -1;
-			}
-
-			x = BORDER_SIZE + (cell_num % cells_per_row) * cell_width + cell_width / 2;
-			y = BORDER_SIZE + (cell_num / cells_per_row) * cell_height + cell_height / 2;
-		}
-
-		public void GetCellSize (int cell_num, out int w, out int h)
-		{
-			// Trivial for now.
-			w = cell_width;
-			h = cell_height;
-		}
-
-
-		// Private utility methods.
-		public void SelectAllCells ()
-		{
-			selection.Add (0, collection.Count - 1);
-		}
-
-		// Layout and drawing.
-
-		// FIXME I can't find a c# wrapper for the C PANGO_PIXELS () macro
-		// So this Function is for that.
-		protected static int PangoPixels (int val)
-		{
-			return val >= 0 ? (val + 1024 / 2) / 1024 :
-				(val - 1024 / 2) / 1024;
-		}
-
-		protected virtual void UpdateLayout ()
-		{
-			UpdateLayout (Allocation);
-		}
-
-		protected virtual void UpdateLayout (Gdk.Rectangle allocation)
-		{
-			int available_width = allocation.Width - 2 * BORDER_SIZE;
-			int available_height = allocation.Height - 2 * BORDER_SIZE;
-			cell_width = ThumbnailWidth + 2 * cell_border_width;
-			cell_height = ThumbnailHeight + 2 * cell_border_width;
-			cells_per_row = Math.Max ((int) (available_width / cell_width), 1);
-			cell_width += (available_width - cells_per_row * cell_width) / cells_per_row;
-			cell_details = 0;
-
-			if (DisplayTags || DisplayDates || DisplayFilenames)
-				cell_details += tag_icon_vspacing;
-
-			if (DisplayTags)
-				cell_details += tag_icon_size;
-
-			if (DisplayDates && this.Style != null) {
-				Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
-						Pango.Language.FromString ("en_US"));
-				cell_details += PangoPixels (metrics.Ascent + metrics.Descent);
-			}
-
-			if (DisplayFilenames && this.Style != null) {
-				Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
-						Pango.Language.FromString ("en_US"));
-				cell_details += PangoPixels (metrics.Ascent + metrics.Descent);
-			}
-			cell_height += cell_details;
-
-			displayed_rows = (int)Math.Max (available_height / cell_height, 1);
-
-			int num_thumbnails;
-			if (collection != null)
-				num_thumbnails = collection.Count;
-			else
-				num_thumbnails = 0;
-
-			int num_rows = num_thumbnails / cells_per_row;
-			if (num_thumbnails % cells_per_row != 0)
-				num_rows ++;
-
-			int height = num_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);
-		}
-
-		void SetSize (int x, int y, int width, int height)
-		{
-			bool xchange = false;
-			bool ychange = false;
-
-			Hadjustment.Upper = System.Math.Max (Allocation.Width, width);
-			Vadjustment.Upper = System.Math.Max (Allocation.Height, height);
-
-			if (scroll) {
-				xchange = (int)(Hadjustment.Value) != x;
-				ychange = (int)(Vadjustment.Value) != y;
-				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 (scroll)
-				scroll = false;
-
-			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);
-			}
-		}
-
-		int ThrobExpansion (int cell, bool selected)
-		{
-			int expansion = 0;
-			if (cell == throb_cell) {
-				double t = throb_state / (double) (throb_state_max - 1);
-				double s;
-				if (selected)
-					s = Math.Cos (-2 * Math.PI * t);
-				else
-					s = 1 - Math.Cos (-2 * Math.PI * t);
-
-				expansion = (int) (SELECTION_THICKNESS * s);
-			} else if (selected) {
-				expansion = SELECTION_THICKNESS;
-			}
-
-			return expansion;
-		}
-
-		// rectangle of dragging selection
-		private Rectangle rect_select;
-
-		System.Collections.Hashtable date_layouts = new Hashtable ();
-		// FIXME Cache the GCs?
-		private void DrawCell (int thumbnail_num, Gdk.Rectangle area)
-		{
-			Gdk.Rectangle bounds = CellBounds (thumbnail_num);
-
-			if (!bounds.Intersect (area, out area))
-				return;
-
-			FSpot.IBrowsableItem photo = collection [thumbnail_num];
-
-			FSpot.PixbufCache.CacheEntry entry = cache.Lookup (photo.DefaultVersion.Uri);
-			if (entry == null)
-				cache.Request (photo.DefaultVersion.Uri, thumbnail_num, ThumbnailWidth, ThumbnailHeight);
-			else
-				entry.Data = thumbnail_num;
-
-			bool selected = selection.Contains (thumbnail_num);
-			StateType cell_state = selected ? (HasFocus ? StateType.Selected : StateType.Active) : State;
-
-			if (cell_state != State)
-				Style.PaintBox (Style, BinWindow, cell_state,
-					ShadowType.Out, area, this, "IconView",
-					bounds.X, bounds.Y,
-					bounds.Width - 1, bounds.Height - 1);
-
-			Gdk.Rectangle focus = Gdk.Rectangle.Inflate (bounds, -3, -3);
-
-			if (HasFocus && thumbnail_num == FocusCell) {
-				Style.PaintFocus(Style, BinWindow,
-						cell_state, area,
-						this, null,
-						focus.X, focus.Y,
-						focus.Width, focus.Height);
-			}
-
-			Gdk.Rectangle region = Gdk.Rectangle.Zero;
-			Gdk.Rectangle image_bounds = Gdk.Rectangle.Inflate (bounds, -cell_border_width, -cell_border_width);
-			int expansion = ThrobExpansion (thumbnail_num, selected);
-
-			Gdk.Pixbuf thumbnail = null;
-			if (entry != null)
-				thumbnail = entry.ShallowCopyPixbuf ();
-
-			Gdk.Rectangle draw = Gdk.Rectangle.Zero;
-			if (Gdk.Rectangle.Inflate (image_bounds, expansion + 1, expansion + 1).Intersect (area, out image_bounds) && thumbnail != null) {
-
-				PixbufUtils.Fit (thumbnail, ThumbnailWidth, ThumbnailHeight,
-						true, out region.Width, out region.Height);
-
-				region.X = (int) (bounds.X + (bounds.Width - region.Width) / 2);
-				region.Y = (int) bounds.Y + ThumbnailHeight - region.Height + cell_border_width;
-
-				if (Math.Abs (region.Width - thumbnail.Width) > 1
-					&& Math.Abs (region.Height - thumbnail.Height) > 1)
-				cache.Reload (entry, thumbnail_num, thumbnail.Width, thumbnail.Height);
-
-				region = Gdk.Rectangle.Inflate (region, expansion, expansion);
-				Pixbuf temp_thumbnail;
-				region.Width = System.Math.Max (1, region.Width);
-				region.Height = System.Math.Max (1, region.Height);
-
-				if (Math.Abs (region.Width - thumbnail.Width) > 1
-					&& Math.Abs (region.Height - thumbnail.Height) > 1) {
-					if (region.Width < thumbnail.Width && region.Height < thumbnail.Height) {
-						/*
-						temp_thumbnail = PixbufUtils.ScaleDown (thumbnail,
-								region.Width, region.Height);
-						*/
-						temp_thumbnail = thumbnail.ScaleSimple (region.Width, region.Height,
-								InterpType.Bilinear);
-
-
-						lock (entry) {
-							if (entry.Reload && expansion == 0 && !entry.IsDisposed) {
-								entry.SetPixbufExtended (temp_thumbnail.ShallowCopy (), false);
-								entry.Reload = true;
-							}
-						}
-					} else {
-						temp_thumbnail = thumbnail.ScaleSimple (region.Width, region.Height,
-								InterpType.Bilinear);
-					}
-				} else
-					temp_thumbnail = thumbnail;
-
-				// FIXME There seems to be a rounding issue between the
-				// scaled thumbnail sizes, we avoid this for now by using
-				// the actual thumnail sizes here.
-				region.Width = temp_thumbnail.Width;
-				region.Height = temp_thumbnail.Height;
-
-				draw = Gdk.Rectangle.Inflate (region, 1, 1);
-
-				if (!temp_thumbnail.HasAlpha)
-					Style.PaintShadow (Style, BinWindow, cell_state,
-						ShadowType.Out, area, this,
-						"IconView",
-						draw.X, draw.Y,
-						draw.Width, draw.Height);
-
-				if (region.Intersect (area, out draw)) {
-					Cms.Profile screen_profile;
-					if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) {
-						Pixbuf t = temp_thumbnail.Copy ();
-						temp_thumbnail.Dispose ();
-						temp_thumbnail = t;
-						FSpot.ColorManagement.ApplyProfile (temp_thumbnail, screen_profile);
-					}
-					temp_thumbnail.RenderToDrawable (BinWindow, Style.WhiteGC,
-							draw.X - region.X,
-							draw.Y - region.Y,
-							draw.X, draw.Y,
-							draw.Width, draw.Height,
-							RgbDither.None,
-							draw.X, draw.Y);
-				}
-
-				if (temp_thumbnail != thumbnail) {
-					temp_thumbnail.Dispose ();
-				}
-
-			}
-
-			if (thumbnail != null) {
-				thumbnail.Dispose ();
-			}
-			if (DisplayRatings && photo.Rating > 0 && region.X == draw.X && region.X != 0) {
-				FSpot.Widgets.RatingSmall rating;
-				rating = new FSpot.Widgets.RatingSmall ((int) photo.Rating, false);
-				rating.DisplayPixbuf.RenderToDrawable (BinWindow, Style.WhiteGC,
-						0, 0, region.X, region.Y, -1, -1, RgbDither.None, 0, 0);
-				
-			}
-			Gdk.Rectangle layout_bounds = Gdk.Rectangle.Zero;
-			if (DisplayDates) {
-				string date;
-				if (cell_width > 200) {
-					date = photo.Time.ToString ();
-				} else {
-					date = photo.Time.ToShortDateString ();
-				}
-
-				Pango.Layout layout = (Pango.Layout)date_layouts [date];
-				if (layout == null) {
-					layout = new Pango.Layout (this.PangoContext);
-					layout.SetText (date);
-					date_layouts [date] = layout;
-				}
-
-				layout.GetPixelSize (out layout_bounds.Width, out layout_bounds.Height);
-
-				layout_bounds.Y = bounds.Y + bounds.Height -
-					cell_border_width - layout_bounds.Height + tag_icon_vspacing;
-				layout_bounds.X = bounds.X + (bounds.Width - layout_bounds.Width) / 2;
-
-				if (DisplayTags)
-					layout_bounds.Y -= tag_icon_size;
-
-				if (DisplayFilenames) {
-					Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
-							Pango.Language.FromString ("en_US"));
-					layout_bounds.Y -= PangoPixels (metrics.Ascent + metrics.Descent);
-				}
-
-				if (layout_bounds.Intersect (area, out region)) {
-					Style.PaintLayout (Style, BinWindow, cell_state,
-							true, area, this, "IconView",
-							layout_bounds.X, layout_bounds.Y,
-							layout);
-				}
-			}
-
-			if (DisplayFilenames) {
-
-				string filename = System.IO.Path.GetFileName (photo.DefaultVersion.Uri.LocalPath);
-				Pango.Layout layout = new Pango.Layout (this.PangoContext);
-				layout.SetText (filename);
-
-				layout.GetPixelSize (out layout_bounds.Width, out layout_bounds.Height);
-
-				layout_bounds.Y = bounds.Y + bounds.Height - cell_border_width - layout_bounds.Height + tag_icon_vspacing;
-				layout_bounds.X = bounds.X + (bounds.Width - layout_bounds.Width) / 2;
-
-				if (DisplayTags)
-					layout_bounds.Y -= tag_icon_size;
-
-				if (layout_bounds.Intersect (area, out region)) {
-					Style.PaintLayout (Style, BinWindow, cell_state,
-							true, area, this, "IconView",
-							layout_bounds.X, layout_bounds.Y,
-							layout);
-				}
-
-			}
-
-			if (DisplayTags) {
-				Tag [] tags = photo.Tags;
-				Gdk.Rectangle tag_bounds;
-
-				tag_bounds.X = bounds.X + (bounds.Width  + tag_icon_hspacing - tags.Length * (tag_icon_size + tag_icon_hspacing)) / 2;
-				tag_bounds.Y = bounds.Y + bounds.Height - cell_border_width - tag_icon_size + tag_icon_vspacing;
-				tag_bounds.Width = tag_icon_size;
-				tag_bounds.Height = tag_icon_size;
-
-				foreach (Tag t in tags) {
-					if (t == null)
-						continue;
-
-					Pixbuf icon = t.Icon;
-
-					Tag tag_iter = t.Category;
-					while (icon == null && tag_iter != App.Instance.Database.Tags.RootCategory && tag_iter != null) {
-						icon = tag_iter.Icon;
-						tag_iter = tag_iter.Category;
-					}
-
-					if (icon == null)
-						continue;
-
-					if (tag_bounds.Intersect (area, out region)) {
-						Pixbuf scaled_icon;
-						if (icon.Width == tag_bounds.Width) {
-							scaled_icon = icon;
-						} else {
-							scaled_icon = icon.ScaleSimple (tag_bounds.Width,
-									tag_bounds.Height,
-									InterpType.Bilinear);
-						}
-						
-						Cms.Profile screen_profile;
-						if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile))
-							FSpot.ColorManagement.ApplyProfile (scaled_icon, screen_profile);
-
-						scaled_icon.RenderToDrawable (BinWindow, Style.WhiteGC,
-								region.X - tag_bounds.X,
-								region.Y - tag_bounds.Y,
-								region.X, region.Y,
-								region.Width, region.Height,
-								RgbDither.None, region.X, region.Y);
-						if (scaled_icon != icon) {
-							scaled_icon.Dispose ();
-						}
-					}
-					tag_bounds.X += tag_bounds.Width + tag_icon_hspacing;
-				}
-			}
-
-		}
-
-		private void DrawAllCells (Gdk.Rectangle area)
-		{
-			if (cell_width == 0 || cell_height == 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 start_cell_x, cell_y;
-			GetCellPosition (start_cell_num, out start_cell_x, out cell_y);
-
-			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 num_rows = end_cell_row - start_cell_row + 1;
-			int num_cols = Math.Min (end_cell_column - start_cell_column + 1,
-					cells_per_row - start_cell_column);
-
-			int i, cell_num;
-			//Preload (area, false);
-
-			for (i = 0, cell_num = start_cell_num;
-			     i < num_rows && cell_num < collection.Count;
-			     i ++) {
-				int cell_x = start_cell_x;
-
-				//Log.Debug ("Drawing row {0}", start_cell_row + i);
-				for (int j = 0; j < num_cols && cell_num + j < collection.Count; j ++) {
-					DrawCell (cell_num + j, area);
-					cell_x += cell_width;
-				}
-
-				cell_y += cell_height;
-				cell_num += cells_per_row;
-			}
-
-			// draw dragging selection
-			if (isRectSelection) {
-				Gdk.Rectangle inter;
-				if (area.Intersect (rect_select, out inter)) {
-					Cairo.Context cairo_g = CairoHelper.Create (BinWindow);
-					Gdk.Color col = Style.Background(StateType.Selected);
-					cairo_g.Color = new Cairo.Color (col.Red/65535.0, col.Green/65535.0, col.Blue/65535.0, 0.5);
-					cairo_g.Rectangle (inter.X, inter.Y, inter.Width, inter.Height);
-					cairo_g.Fill ();
-
-					((IDisposable) cairo_g.Target).Dispose ();
-					((IDisposable) cairo_g).Dispose ();
-				}
-			}
-
-		}
-
-		private void GetCellPosition (int cell_num, out int x, out int y)
-		{
-			if (cells_per_row == 0) {
-				x = 0;
-				y = 0;
-				return;
-			}
-
-			int row = cell_num / cells_per_row;
-			int col = cell_num % cells_per_row;
-
-			x = col * cell_width + BORDER_SIZE;
-			y = row * cell_height + BORDER_SIZE;
-		}
-
-
-		// Scrolling.  We do this in an idle loop so we can catch up if the user scrolls quickly.
-
-		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;
-
-			FSpot.IBrowsableItem photo;
-			FSpot.PixbufCache.CacheEntry entry;
-
-			// Preload the cache with images aroud the expose area
-			// FIXME the preload need to be tuned to the Cache size but this is a resonable start
-
-			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 > collection.Count - len) {
-				ecell = collection.Count;
-				scell = System.Math.Max (0, scell - len);
-			} else
-				ecell = scell + len;
-
-			int mid = (ecell - scell) / 2;
-			for (i = 0; i < mid; i++)
-				{
-				int cell = back ? ecell - i - 1 : scell + mid + i;
-
-				photo = collection [cell];
-
-				entry = cache.Lookup (photo.DefaultVersion.Uri);
-				if (entry == null)
-					cache.Request (photo.DefaultVersion.Uri, cell, ThumbnailWidth, ThumbnailHeight);
-
-				cell = back ? scell + i : scell + mid - i - 1;
-				photo = collection [cell];
-
-				entry = cache.Lookup (photo.DefaultVersion.Uri);
-				if (entry == null)
-					cache.Request (photo.DefaultVersion.Uri, cell, ThumbnailWidth, ThumbnailHeight);
-			}
-		}
-
-		//
-		// The throb interface
-		//
-		private uint throb_timer_id;
-		private int throb_cell = -1;
-		private int throb_state;
-		private const int throb_state_max = 40;
-		public void Throb (int cell_num)
-		{
-			throb_state = 0;
-			throb_cell = cell_num;
-			if (throb_timer_id == 0)
-				throb_timer_id = GLib.Timeout.Add ((39000/throb_state_max)/100,
-					new GLib.TimeoutHandler (HandleThrobTimer));
-
-			InvalidateCell (cell_num);
-		}
-
-		private void CancelThrob ()
-		{
-			if (throb_timer_id != 0)
-				GLib.Source.Remove (throb_timer_id);
-		}
-
-		private bool HandleThrobTimer ()
-		{
-			InvalidateCell (throb_cell);
-			if (throb_state++ < throb_state_max) {
-				return true;
-			} else {
-				throb_cell = -1;
-				throb_timer_id = 0;
-				return false;
-			}
-		}
-
-		public void ScrollTo (int cell_num)
-		{
-			ScrollTo (cell_num, true);
-		}
-
-		public void ScrollTo (int cell_num, bool center)
-		{
-			if (!IsRealized)
-				return;
-
-			Adjustment adjustment = Vadjustment;
-			int x;
-			int y;
-
-			GetCellPosition (cell_num, out x, out y);
-
-			if (y + cell_height > adjustment.Upper)
-				UpdateLayout ();
-
-			if (center)
-				adjustment.Value = y + cell_height / 2 - adjustment.PageSize / 2;
-			else
-				adjustment.Value = y;
-
-			adjustment.ChangeValue ();
-
-		}
-
-		public void ZoomIn ()
-		{
-			ThumbnailWidth = (int) (ThumbnailWidth * ZOOM_FACTOR);
-		}
-
-		public void ZoomOut ()
-		{
-			ThumbnailWidth = (int) (ThumbnailWidth / ZOOM_FACTOR);
-		}
-
-		// Event handlers.
-
-		[GLib.ConnectBefore]
-		private void HandleAdjustmentValueChanged (object sender, EventArgs args)
-		{
-			Scroll ();
-		}
-
-		private void HandlePixbufLoaded (FSpot.PixbufCache cache, FSpot.PixbufCache.CacheEntry entry)
-		{
-			Gdk.Pixbuf result = entry.ShallowCopyPixbuf ();
-			int order = (int) entry.Data;
-
-			if (result == null)
-				return;
-
-			// We have to do the scaling here rather than on load because we need to preserve the
-			// Pixbuf option iformation to verify the thumbnail validity later
-			int width, height;
-			PixbufUtils.Fit (result, ThumbnailWidth, ThumbnailHeight, false, out width, out height);
-			if (result.Width > width && result.Height > height) {
-				//  Log.Debug ("scaling");
-				Gdk.Pixbuf temp = PixbufUtils.ScaleDown (result, width, height);
-				result.Dispose ();
-				result = temp;
-			} else if (result.Width < ThumbnailWidth && result.Height < ThumbnailHeight) {
-				// FIXME this is a workaround to handle images whose actual size is smaller than
-				// the thumbnail size, it needs to be fixed at a different level.
-				Gdk.Pixbuf temp = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, ThumbnailWidth, ThumbnailHeight);
-				temp.Fill (0x00000000);
-				result.CopyArea (0, 0,
-						result.Width, result.Height,
-						temp,
-						(temp.Width - result.Width)/ 2,
-						temp.Height - result.Height);
-
-				result.Dispose ();
-				result = temp;
-			}
-
-			cache.Update (entry, result);
-			InvalidateCell (order);
-		}
-
-		public Gdk.Rectangle CellBounds (int cell)
-		{
-			Rectangle bounds;
-			GetCellPosition (cell, out bounds.X, out bounds.Y);
-			bounds.Width = cell_width;
-			bounds.Height = cell_height;
-			return bounds;
-		}
-
-		public void InvalidateCell (int order)
-		{
-			Rectangle cell_area = CellBounds (order);
-			// 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);
-
-			if (BinWindow != null && cell_area.Intersect (visible, out cell_area))
-				BinWindow.InvalidateRect (cell_area, false);
-		}
-
-		private void HandleScrollAdjustmentsSet (object sender, ScrollAdjustmentsSetArgs args)
-		{
-			if (args.Vadjustment != null)
-				args.Vadjustment.ValueChanged += new EventHandler (HandleAdjustmentValueChanged);
-		}
-
-		private void HandleScrollEvent(object sender, ScrollEventArgs args)
-		{
-			// Activated only by Control + ScrollWheelUp/ScrollWheelDown
-			if (ModifierType.ControlMask != (args.Event.State & ModifierType.ControlMask))
-				return;
-
-			if (args.Event.Direction == ScrollDirection.Up) {
-				ZoomIn ();
-				// stop event from propagating.
-				args.RetVal = true;
-			} else if (args.Event.Direction == ScrollDirection.Down ) {
-				ZoomOut ();
-				args.RetVal = true;
-			}
-		}
-
-		private void SetColors ()
-		{
-			if (IsRealized) {
-				BinWindow.Background = Style.DarkColors [(int)State];
-			}
-		}
-
-		protected override void OnRealized ()
-		{
-			base.OnRealized ();
-			SetColors ();
-		}
-
-		protected override void OnStateChanged (StateType previous)
-		{
-			base.OnStateChanged (previous);
-			SetColors ();
-		}
-
-		protected override void OnStyleSet (Style previous)
-		{
-			base.OnStyleSet (previous);
-			SetColors ();
-		}
-
-		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 bool OnExposeEvent (Gdk.EventExpose args)
-		{
-			foreach (Rectangle area in args.Region.GetRectangles ()) {
-				DrawAllCells (area);
-			}
-			return base.OnExposeEvent (args);
-		}
-
-
-		private bool isRectSelection = false;
-		private bool isDragDrop = false;
-
-		// initial click and scroll value
-		private int start_select_x, start_select_y, start_select_vadj, start_select_hadj;
-		// 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;
-		// initial click
-	        private int start_press_x, start_press_y;
-
-		// during pointer motion, select/toggle pictures between initial x/y (param)
-		// and current x/y (get pointer)
-		private void SelectMotion ()
-		{
-			int x2, y2;
-			Gdk.ModifierType mod;
-			Display.GetPointer (out x2, out y2, out mod);
-			GetPointer (out x2, out y2);
-
-			// check new coord
-			int x1 = start_select_x;
-			if (x1 < 0)
-				x1 = 0;
-			int y1 = start_select_y;
-			if (y1 < 0)
-				y1 = 0;
-			if (y1 > Allocation.Height)
-				y1 = (int) Allocation.Height;
-			x1 += start_select_hadj;
-			y1 += start_select_vadj;
-
-			if (x2 < 0)
-				x2 = 0;
-			if (y2 < 0)
-				y2 = 0;
-			if (y2 > Allocation.Height)
-				y2 = (int) Allocation.Height;
-			x2 += (int) Hadjustment.Value;
-			y2 += (int) Vadjustment.Value;
-
-			int start_x = x1 < x2 ? x1 : x2;
-			int end_x =   x1 > x2 ? x1 : x2;
-			int start_y = y1 < y2 ? y1 : y2;
-			int end_y =   y1 > y2 ? y1 : y2;
-
-			// Restore initial selection
-			BitArray initial_selection = selection.ToBitArray();
-			selection.Clear (false);
-			foreach (int i in start_select_selection)
-				selection.Add (i, false);
-
-			// Select or toggle according to modifiers
-			int start_row  = (start_x - BORDER_SIZE) / cell_width;
-			int start_line = (start_y - BORDER_SIZE) / cell_height;
-			int end_row    = (end_x - BORDER_SIZE + cell_width - 1) / cell_width;
-			int end_line   = (end_y - BORDER_SIZE + cell_height - 1) / cell_height;
-			if (start_row > cells_per_row)
-				start_row = cells_per_row;
-			if (end_row > cells_per_row)
-				end_row = cells_per_row;
-
-
-			FocusCell = start_line * cells_per_row + start_row;
-
-			if ((mod & ModifierType.ControlMask) == 0)
-				selection.SelectRect (start_row, end_row, start_line, end_line, cells_per_row);
-			else
-				selection.ToggleRect (start_row, end_row, start_line, end_line, cells_per_row);
-
-			// fire events for cells which have changed selection flag
-			BitArray new_selection = selection.ToBitArray();
-			BitArray selection_changed = initial_selection.Xor (new_selection);
-			System.Collections.Generic.List<int> changed = new System.Collections.Generic.List<int>();
-			for (int i = 0; i < selection_changed.Length; i++)
-				if (selection_changed.Get(i))
-					changed.Add (i);
-			if (selection_changed.Length != 0)
-				selection.SignalChange (changed.ToArray());
-
-			// redraw selection box
-			if (BinWindow != null) {
-				BinWindow.InvalidateRect (rect_select, true); // old selection
-				rect_select = new Rectangle (start_x, start_y, end_x - start_x, end_y - start_y);
-				BinWindow.InvalidateRect (rect_select, true); // new selection
-				BinWindow.ProcessUpdates (true);
-			}
-		}
-
-		// 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;
-			ModifierType new_mod;
-			Display.GetPointer (out new_x, out new_y, out new_mod);
-			GetPointer (out new_x, out new_y);
-
-			// do scroll
-			double newVadj = Vadjustment.Value;
-			if (deltaVscroll < 130)
-				deltaVscroll += 15;
-
-			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;
-			Vadjustment.ChangeValue();
-
-			// do again selection after scroll
-			SelectMotion ();
-
-			// stop firing timeout when no button pressed
-			return (new_mod & (ModifierType.Button1Mask | ModifierType.Button3Mask)) != 0;
-		}
-
-		private void HandleSelectMotionNotify (object sender, MotionNotifyEventArgs args)
-		{
-			if ((args.Event.State & (ModifierType.Button1Mask | ModifierType.Button3Mask)) != 0 ) {
-				if (Gtk.Drag.CheckThreshold (this, start_press_x, start_press_y,
-							     (int) args.Event.X, (int) args.Event.Y))
-					if (isRectSelection) {
-						// scroll if out of window
-						double d_x, d_y;
-						deltaVscroll = 30;
-						if (EventHelper.GetCoords (args.Event, 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;
-						}
-
-						// handle selection
-						SelectMotion ();
-					} else  {
-						int cell_num = CellAtPosition (start_press_x, start_press_y, false, false);
-						if (selection.Contains (cell_num)) {
-							// on a selected cell : do drag&drop
-							isDragDrop = true;
-							if (StartDrag != null) {
-								uint but;
-								if ((args.Event.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;
-							start_select_hadj = (int) Hadjustment.Value;
-							start_select_vadj = (int) Vadjustment.Value;
-							start_select_x = start_press_x - start_select_hadj;
-							start_select_y = start_press_y - start_select_vadj;
-
-							// ctrl : toggle selected, shift : keep selected
-							if ((args.Event.State & (ModifierType.ShiftMask | ModifierType.ControlMask)) == 0)
-								selection.Clear ();
-
-							start_select_selection = selection.Ids; // keep initial selection
-							// no rect draw at beginning
-							rect_select = new Rectangle ();
-
-							args.RetVal = false;
-						}
-					}
-			}
-		}
-
-		private void HandleButtonPressEvent (object obj, ButtonPressEventArgs args)
-		{
-			int cell_num = CellAtPosition ((int) args.Event.X, (int) args.Event.Y, false, false);
-
-			args.RetVal = true;
-
-			start_select_event = args.Event;
-			start_press_x = (int) args.Event.X;
-			start_press_y = (int) args.Event.Y;
-			isRectSelection = false;
-			isDragDrop = false;
-
-			switch (args.Event.Type) {
-			case EventType.TwoButtonPress:
-				if (args.Event.Button != 1 ||
-				    (args.Event.State &  (ModifierType.ControlMask | ModifierType.ShiftMask)) != 0)
-					return;
-				if (DoubleClicked != null)
-					DoubleClicked (this, new BrowsableEventArgs (cell_num, null));
-				return;
-
-			case EventType.ButtonPress:
-				GrabFocus ();
-				// on a cell : context menu if button 3
-				// cell selection is done on button release
-				if (args.Event.Button == 3){
-					ContextMenu (args, cell_num);
-					return;
-				} else args.RetVal = false;
-
-				break;
-
-			default:
-				args.RetVal = false;
-				break;
-			}
-		}
-
-		protected virtual void ContextMenu (ButtonPressEventArgs args, int cell_num)
-		{
-		}
-
-		private void HandleButtonReleaseEvent (object sender, ButtonReleaseEventArgs args)
-		{
-			if (isRectSelection) {
-				// remove scrolling and rectangular selection
-				if (scroll_timeout != 0) {
-					GLib.Source.Remove (scroll_timeout);
-					scroll_timeout = 0;
-				}
-				SelectMotion ();
-
-				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) args.Event.X, (int) args.Event.Y, false, true);
-				if (cell_num != -1) {
-					if ((args.Event.State & ModifierType.ControlMask) != 0) {
-						selection.ToggleCell (cell_num);
-					} else if ((args.Event.State & ModifierType.ShiftMask) != 0) {
-						selection.Add (FocusCell, cell_num);
-					} else {
-						selection.Clear ();
-						selection.Add (cell_num);
-					}
-					FocusCell = cell_num;
-				}
-			}
-			isDragDrop = false;
-		}
-
-		private void HandleKeyPressEvent (object sender, KeyPressEventArgs args)
-		{
-			int focus_old;
-			args.RetVal = true;
-			bool shift = ModifierType.ShiftMask == (args.Event.State & ModifierType.ShiftMask);
-			bool control = ModifierType.ControlMask == (args.Event.State & ModifierType.ControlMask);
-
-			focus_old = FocusCell;
-			switch (args.Event.Key) {
-			case Gdk.Key.Down:
-			case Gdk.Key.J:
-			case Gdk.Key.j:
-				FocusCell += cells_per_row;
-				break;
-			case Gdk.Key.Left:
-			case Gdk.Key.H:
-			case Gdk.Key.h:
-				if (control && shift)
-					FocusCell -= FocusCell % cells_per_row;
-				else
-					FocusCell--;
-				break;
-			case Gdk.Key.Right:
-			case Gdk.Key.L:
-			case Gdk.Key.l:
-				if (control && shift)
-					FocusCell += cells_per_row - (FocusCell % cells_per_row) - 1;
-				else
-					FocusCell++;
-				break;
-			case Gdk.Key.Up:
-			case Gdk.Key.K:
-			case Gdk.Key.k:
-				FocusCell -= cells_per_row;
-				break;
-			case Gdk.Key.Page_Up:
-				FocusCell -= cells_per_row * displayed_rows;
-				break;
-			case Gdk.Key.Page_Down:
-				FocusCell += cells_per_row * displayed_rows;
-				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:
-				args.RetVal = false;
-				return;
-			}
-
-			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);
-		}
-
-		private void HandleDestroyed (object sender, System.EventArgs args)
-		{
-			cache.OnPixbufLoaded -= HandlePixbufLoaded;
-			CancelThrob ();
-		}
-	}
-}
diff --git a/src/Widgets/ImageInfo.cs b/src/Widgets/ImageInfo.cs
deleted file mode 100644
index 1944c22..0000000
--- a/src/Widgets/ImageInfo.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * ImageInfo.cs
- * 
- * Author
- *   LarryEwing <lewing at novell.com
- *
- * See COPYING for license information
- */
-using System;
-using Cairo;
-using Gdk;
-using Gtk;
-using FSpot.Utils;
-using FSpot.Imaging;
-using Hyena;
-
-namespace FSpot.Widgets {
-	public class ImageInfo : IDisposable {
-		public Surface Surface;
-		public Gdk.Rectangle Bounds;
-		
-		public ImageInfo (SafeUri uri)
-		{
-				using (var img = ImageFile.Create (uri)) {
-					Pixbuf pixbuf = img.Load ();
-					SetPixbuf (pixbuf);
-					pixbuf.Dispose ();
-				}
-		}
-		
-		public ImageInfo (Pixbuf pixbuf)
-		{
-			SetPixbuf (pixbuf);
-		}
-		
-		public ImageInfo (ImageInfo info, Widget w) : this (info, w, w.Allocation)
-		{
-		}
-		
-		public ImageInfo (ImageInfo info, Widget w, Gdk.Rectangle bounds)
-		{
-			Cairo.Surface similar = CairoUtils.CreateSurface (w.GdkWindow);
-			Bounds = bounds;
-			Surface = similar.CreateSimilar (Content.ColorAlpha, Bounds.Width, Bounds.Height);
-			Context ctx = new Context (Surface);
-			
-			ctx.Matrix = info.Fill (Bounds);
-			Pattern p = new SurfacePattern (info.Surface);
-			ctx.Source = p;
-			ctx.Paint ();
-			((IDisposable)ctx).Dispose ();
-			p.Destroy ();
-		}
-		
-		public ImageInfo (ImageInfo info, Gdk.Rectangle allocation)
-		{
-			#if false
-			Surface = new ImageSurface (Format.RGB24,
-						    allocation.Width,
-						    allocation.Height);
-			Context ctx = new Context (Surface);
-			#else
-			Log.DebugFormat ("source status = {0}", info.Surface.Status);
-			Surface = info.Surface.CreateSimilar (Content.Color,
-							      allocation.Width,
-							      allocation.Height);
-			
-			Log.DebugFormat ("status = {1} pointer = {0}", Surface.Handle.ToString (), Surface.Status);
-			Context ctx = new Context (Surface);
-			#endif
-			Bounds = allocation;
-			
-			ctx.Matrix = info.Fill (allocation);
-			Pattern p = new SurfacePattern (info.Surface);
-			ctx.Source = p;
-			ctx.Paint ();
-			((IDisposable)ctx).Dispose ();
-			p.Destroy ();
-		}
-		
-		private void SetPixbuf (Pixbuf pixbuf)
-		{
-			Surface = MemorySurface.CreateSurface (pixbuf);
-			Bounds.Width = pixbuf.Width;
-			Bounds.Height = pixbuf.Height;
-		}
-		
-		public Matrix Fill (Gdk.Rectangle viewport) 
-		{
-			Matrix m = new Matrix ();
-			m.InitIdentity ();
-			
-			double scale = Math.Max (viewport.Width / (double) Bounds.Width,
-						 viewport.Height / (double) Bounds.Height);
-			
-			double x_offset = Math.Round (((viewport.Width  - Bounds.Width * scale) / 2.0));
-			double y_offset = Math.Round (((viewport.Height  - Bounds.Height * scale) / 2.0));
-			
-			m.Translate (x_offset, y_offset);
-			m.Scale (scale, scale);
-			return m;
-		}
-		
-		//
-		// this functions calculates the transformation needed to center and completely fill the
-		// viewport with the Surface at the given tilt
-		//
-		public Matrix Fill (Gdk.Rectangle viewport, double tilt)
-		{
-			if (tilt == 0.0)
-				return Fill (viewport);
-			
-			Matrix m = new Matrix ();
-			m.InitIdentity ();
-			
-			double len;
-			double orig_len;
-			if (Bounds.Width > Bounds.Height) {
-				len = viewport.Height;
-				orig_len = Bounds.Height;
-			} else {
-				len = viewport.Width;
-				orig_len = Bounds.Width;
-			}
-			
-			double a = Math.Sqrt (viewport.Width * viewport.Width + viewport.Height * viewport.Height);
-			double alpha = Math.Acos (len / a);
-			double theta = alpha - Math.Abs (tilt);
-			
-			double slen = a * Math.Cos (theta);
-			
-			double scale = slen / orig_len;
-			
-			double x_offset = (viewport.Width  - Bounds.Width * scale) / 2.0;
-			double y_offset = (viewport.Height  - Bounds.Height * scale) / 2.0;
-			
-			m.Translate (x_offset, y_offset);
-			m.Scale (scale, scale);
-			m.Invert ();
-			m.Translate (viewport.Width * 0.5, viewport.Height * 0.5);
-			m.Rotate (tilt);
-			m.Translate (viewport.Width * -0.5, viewport.Height * -0.5);
-			m.Invert ();
-			return m;
-		}
-		
-		public Matrix Fit (Gdk.Rectangle viewport)
-		{
-			Matrix m = new Matrix ();
-			m.InitIdentity ();
-			
-			double scale = Math.Min (viewport.Width / (double) Bounds.Width,
-						 viewport.Height / (double) Bounds.Height);
-			
-			double x_offset = (viewport.Width  - Bounds.Width * scale) / 2.0;
-			double y_offset = (viewport.Height  - Bounds.Height * scale) / 2.0;
-			
-			m.Translate (x_offset, y_offset);
-			m.Scale (scale, scale);
-			return m;
-		}
-		
-		public void Dispose ()
-		{
-			((IDisposable)Surface).Dispose ();
-		}
-	}
-}
diff --git a/src/Widgets/ImageView.cs b/src/Widgets/ImageView.cs
deleted file mode 100644
index 8796ee9..0000000
--- a/src/Widgets/ImageView.cs
+++ /dev/null
@@ -1,1175 +0,0 @@
-//
-// FSpot.Widgets.ImageView.cs
-//
-// Author(s):
-//	Stephane Delcroix  <stephane at delcroix.org>
-//
-// This is free software. See COPYING for details.
-//
-
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-
-using Gtk;
-using Gdk;
-
-using FSpot.Utils;
-using TagLib.Image;
-
-namespace FSpot.Widgets
-{
-	public class ImageView : Container
-	{
-#region public API
-		protected ImageView (IntPtr raw) : base (raw) { }
-
-		public ImageView (Adjustment hadjustment, Adjustment vadjustment, bool can_select) : base ()
-		{
-			OnSetScrollAdjustments (hadjustment, vadjustment);
-			children = new List<LayoutChild> ();
-			AdjustmentsChanged += ScrollToAdjustments;
-			WidgetFlags &= ~WidgetFlags.NoWindow;
-			SetFlag (WidgetFlags.CanFocus);
-
-			this.can_select = can_select;
-		}
-
-		public ImageView (bool can_select) : this (null, null, can_select)
-		{
-		}
-
-		public ImageView () : this (true)
-		{
-		}
-
-		Pixbuf pixbuf;
-		public Pixbuf Pixbuf {
-			get { return pixbuf; } 
-			set {
-				if (pixbuf == value)
-					return;
-
-				pixbuf = value;
-				min_zoom = ComputeMinZoom (upscale);
-
-				ComputeScaledSize ();
-				AdjustmentsChanged -= ScrollToAdjustments;
-				Hadjustment.Value = Vadjustment.Value = 0;
-				XOffset = YOffset = 0;
-				AdjustmentsChanged += ScrollToAdjustments;
-				QueueDraw ();
-			} 
-		}
-
-		ImageOrientation pixbuf_orientation;
-		public ImageOrientation PixbufOrientation {
-			get { return pixbuf_orientation; }
-			set {
-				if (value == pixbuf_orientation)
-					return;
-				pixbuf_orientation = value;
-				min_zoom = ComputeMinZoom (upscale);
-				ComputeScaledSize ();
-				QueueDraw ();
-			}
-		}
-
-		CheckPattern check_pattern = CheckPattern.Dark;
-		public CheckPattern CheckPattern {
-			get { return check_pattern; } 
-			set { 
-				if (check_pattern == value)
-					return;
-				check_pattern = value;
-				if (Pixbuf != null && Pixbuf.HasAlpha)
-					QueueDraw ();
-			} 
-		}
-
-		PointerMode pointer_mode = PointerMode.Select;
-		public PointerMode PointerMode {
-			get { return pointer_mode; } 
-			set { pointer_mode = value; } 
-		}
-
-		Adjustment hadjustment;
-		public Adjustment Hadjustment {
-			get { return hadjustment; }
-		}
-
-		Adjustment vadjustment;
-		public Adjustment Vadjustment {
-			get { return vadjustment; }
-		}
-
-		bool can_select = false;
-		public bool CanSelect {
-			get { return can_select; }
-			set { 
-				if (can_select == value)
-					return;
-				can_select = value;
-				if (!can_select)
-					selection = Rectangle.Zero;
-			}
-		}
-
-		Gdk.Rectangle selection = Rectangle.Zero;
-		public Gdk.Rectangle Selection {
-			get {
-				if (!can_select)
-					return Rectangle.Zero;
-				return selection;
-			}
-			set { 
-				if (!can_select)
-					return;
-
-				if (value == selection)
-					return;
-
-				selection = value;
-
-				EventHandler eh = SelectionChanged;
-				if (eh != null)
-					eh (this, EventArgs.Empty);
-				QueueDraw ();
-			}
-		}
-
-		double selection_xy_ratio = 0;
-		public double SelectionXyRatio {
-			get { return selection_xy_ratio; } 
-			set {
-				if (selection_xy_ratio == value)
-					return;
-				selection_xy_ratio = value;
-
-				if (selection_xy_ratio == 0)
-					return;
-
-				if (Selection == Rectangle.Zero)
-					return;
-
-				Selection = ConstrainSelection (Selection, false, false);
-			} 
-		}
-
-		InterpType interpolation = InterpType.Bilinear;
-		public Gdk.InterpType Interpolation {
-			get { return interpolation; } 
-			set { 
-				if (interpolation == value)
-					return;
-				interpolation = value;
-				QueueDraw ();
-			} 
-		}
-
-		double zoom = 1.0;
-		public double Zoom {
-			get { return zoom; }
-			set { DoZoom (value, false, 0, 0); }
-		}
-
-		public void ZoomIn ()
-		{
-			Zoom *= ZOOM_FACTOR;
-		}
-
-		public void ZoomOut ()
-		{
-			Zoom *= 1.0/ZOOM_FACTOR;
-		}
-
-		public void ZoomAboutPoint (double zoom_increment, int x, int y)
-		{
-			DoZoom (zoom * zoom_increment, true, x, y);
-		}	
-
-		bool fit;
-		public bool Fit {
-			get { return fit; } 
-		}
-
-		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);
-			
-			this.upscale = upscale;
-
-			fit = true;
-			DoZoom (MIN_ZOOM, false, 0, 0);
-
-			if (scrolled != null)
-				GLib.Idle.Add (delegate {scrolled.SetPolicy (Gtk.PolicyType.Automatic, Gtk.PolicyType.Automatic); return false;});
-		}
-
-		bool panning = false;
-		public bool Panning {
-			get {
-				return panning;
-			}
-		}
-
-		public Point WindowCoordsToImage (Point win)
-		{
-			if (Pixbuf == null)
-				return Point.Zero;
-
-			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;
-
-			win.X = Clamp (win.X - x_offset, 0, (int)scaled_width - 1);
-			win.Y = Clamp (win.Y - y_offset, 0, (int)scaled_height - 1);
-
-			win = PixbufUtils.TransformOrientation ((int)scaled_width, (int)scaled_height, win, PixbufUtils.ReverseTransformation (pixbuf_orientation));
-
-			return  new Point ((int) Math.Floor (win.X * (double)(((int)PixbufOrientation <= 4 ? Pixbuf.Width : Pixbuf.Height) - 1) / (double)(scaled_width - 1) + .5),
-					   (int) Math.Floor (win.Y * (double)(((int)PixbufOrientation <= 4 ? Pixbuf.Height : Pixbuf.Width) - 1) / (double)(scaled_height - 1) + .5));
-		}
-
-		List<LayoutChild> children;
-		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 ();
-		}
-
-		public event EventHandler ZoomChanged;
-		public event EventHandler SelectionChanged;
-#endregion
-
-#region protectedAPI
-		protected static double ZOOM_FACTOR = 1.1;
-		protected double max_zoom = 10.0;
-		protected double MAX_ZOOM {
-			get { return max_zoom; }
-		}
-
-		protected double min_zoom = 0.1;
-		protected double MIN_ZOOM {
-			get { return min_zoom; }
-		}
-
-		bool upscale;
-		protected void ZoomFit ()
-		{
-			ZoomFit (upscale);
-		}
-
-		protected virtual void ApplyColorTransform (Pixbuf pixbuf)
-		{
-		}
-
-		protected Point ImageCoordsToWindow (Point image)
-		{
-			if (this.Pixbuf == null)
-				return Point.Zero;
-
-			image = PixbufUtils.TransformOrientation (Pixbuf.Width, Pixbuf.Height, image, pixbuf_orientation);
-			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;
-
-			return new Point ((int) Math.Floor (image.X * (double) (scaled_width - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Width : Pixbuf.Height) - 1) + 0.5) + x_offset,
-					  (int) Math.Floor (image.Y * (double) (scaled_height - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Height : Pixbuf.Width) - 1) + 0.5) + y_offset);
-		}
-
-		protected Rectangle ImageCoordsToWindow (Rectangle image)
-		{
-			if (this.Pixbuf == null)
-				return Gdk.Rectangle.Zero;
-
-			image = PixbufUtils.TransformOrientation (Pixbuf.Width, Pixbuf.Height, image, pixbuf_orientation);
-			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;
-
-			Gdk.Rectangle win = Gdk.Rectangle.Zero;
-			win.X = (int) Math.Floor (image.X * (double) (scaled_width - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Width : Pixbuf.Height) - 1) + 0.5) + x_offset;
-			win.Y = (int) Math.Floor (image.Y * (double) (scaled_height - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Height : Pixbuf.Width) - 1) + 0.5) + y_offset;
-			win.Width = (int) Math.Floor ((image.X + image.Width) * (double) (scaled_width - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Width : Pixbuf.Height) - 1) + 0.5) - win.X + x_offset;
-			win.Height = (int) Math.Floor ((image.Y + image.Height) * (double) (scaled_height - 1) / (((int)pixbuf_orientation <= 4 ? Pixbuf.Height : Pixbuf.Width) - 1) + 0.5) - win.Y + y_offset;
-
-			return win;
-		}
-#endregion
-
-#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 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);
-
-			foreach (var child in children)
-				child.Widget.ParentWindow = GdkWindow;
-		}
-
-		protected override void OnMapped ()
-		{
-			SetFlag (Gtk.WidgetFlags.Mapped);
-
-			foreach (var child in children)
-				if (child.Widget.Visible && !child.Widget.IsMapped)
-					child.Widget.Map ();
-			GdkWindow.Show ();
-		}
-
-		protected override void OnSizeRequested (ref Gtk.Requisition requisition)
-		{
-			requisition.Width = requisition.Height = 0;
-
-			foreach (var child in children)
-				child.Widget.SizeRequest ();
-		}
-
-		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 ();
-
-			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));
-			}
-
-			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)
-		{
-			if (evnt.Window != GdkWindow)
-				return false;
-
-			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));
-				if (p_area == Rectangle.Zero)
-					continue;
-
-				//draw synchronously if InterpType.Nearest or zoom 1:1
-				if (Interpolation == InterpType.Nearest || zoom == 1.0) {
-					PaintRectangle (p_area, InterpType.Nearest);
-					continue;
-				}
-				
-				//Do this on idle ???
-				PaintRectangle (p_area, Interpolation);
-			}
-			
-			if (can_select)
-				OnSelectionExposeEvent (evnt);
-
-			return true;
-		}
-
-		protected override void OnSetScrollAdjustments (Gtk.Adjustment hadjustment, Gtk.Adjustment vadjustment)
-		{
-			if (hadjustment == null)
-				hadjustment = new Gtk.Adjustment (0, 0, 0, 0, 0, 0);
-			if (vadjustment == null)
-				vadjustment = new Gtk.Adjustment (0, 0, 0, 0, 0, 0);
-			bool need_change = false;
-			if (this.hadjustment != hadjustment) {
-				this.hadjustment = hadjustment;
-				this.hadjustment.Upper = scaled_width;
-				this.hadjustment.ValueChanged += HandleAdjustmentsValueChanged;
-				need_change = true;
-			}
-			if (this.vadjustment != vadjustment) {
-				this.vadjustment = vadjustment;
-				this.vadjustment.Upper = scaled_height;
-				this.vadjustment.ValueChanged += HandleAdjustmentsValueChanged;
-				need_change = true;
-			}
-
-			if (need_change)
-				HandleAdjustmentsValueChanged (this, EventArgs.Empty);
-		}	
-
-		protected override bool OnButtonPressEvent (EventButton evnt)
-		{
-			bool handled = false;
-
-			if (!HasFocus)
-				GrabFocus ();
-
-			if (PointerMode == PointerMode.None)
-				return false;
-
-			handled = handled || OnPanButtonPressEvent (evnt);
-
-			if (can_select)
-				handled = handled || OnSelectionButtonPressEvent (evnt);
-
-			return handled || base.OnButtonPressEvent (evnt);
-		}
-
-		protected override bool OnButtonReleaseEvent (EventButton evnt)
-		{
-			bool handled = false;
-
-			handled = handled || OnPanButtonReleaseEvent (evnt);
-
-			if (can_select)
-				handled = handled || OnSelectionButtonReleaseEvent (evnt);
-
-			return handled || base.OnButtonReleaseEvent (evnt);
-		}
-
-		protected override bool OnMotionNotifyEvent (EventMotion evnt)
-		{
-			bool handled = false;
-
-			handled = handled || OnPanMotionNotifyEvent (evnt);
-
-			if (can_select)
-				handled = handled || OnSelectionMotionNotifyEvent (evnt);
-
-			return handled || base.OnMotionNotifyEvent (evnt);
-
-		}
-
-		protected override bool OnScrollEvent (EventScroll evnt)
-		{
-			if ((evnt.State & ModifierType.ShiftMask) == 0) {//no shift, let's zoom
-				ZoomAboutPoint ((evnt.Direction == ScrollDirection.Up || evnt.Direction == ScrollDirection.Right) ? ZOOM_FACTOR : 1.0 / ZOOM_FACTOR,
-						 (int)evnt.X, (int)evnt.Y);
-				return true;
-			}
-
-			int x_incr = (int)Hadjustment.PageIncrement / 4;
-			int y_incr = (int)Vadjustment.PageIncrement / 4;
-			if ((evnt.State & ModifierType.ControlMask) == 0) {//no control scroll
-				ScrollBy ((evnt.Direction == ScrollDirection.Left) ? -x_incr : (evnt.Direction == ScrollDirection.Right) ? x_incr : 0,
-					  (evnt.Direction == ScrollDirection.Up) ? -y_incr : (evnt.Direction == ScrollDirection.Down) ? y_incr : 0);
-				return true;
-			} else { //invert x and y for scrolling
-				ScrollBy ((evnt.Direction == ScrollDirection.Up) ? -y_incr : (evnt.Direction == ScrollDirection.Down) ? y_incr : 0,
-					  (evnt.Direction == ScrollDirection.Left) ? -x_incr : (evnt.Direction == ScrollDirection.Right) ? x_incr : 0);	
-				return true;
-			}
-		}
-
-		protected override bool OnKeyPressEvent (EventKey evnt)
-		{
-			if ((evnt.State & (ModifierType.Mod1Mask | ModifierType.ControlMask)) != 0)
-				return base.OnKeyPressEvent (evnt);
-
-			bool handled = true;
-			int x, y;
-			Gdk.ModifierType type;
-
-			switch(evnt.Key) {
-			case Gdk.Key.Up:
-			case Gdk.Key.KP_Up:
-			case Gdk.Key.k:
-			case Gdk.Key.K:
-				ScrollBy (0, -Vadjustment.StepIncrement);
-				break;
-			case Gdk.Key.Down:
-			case Gdk.Key.KP_Down:
-			case Gdk.Key.j:
-			case Gdk.Key.J:
-				ScrollBy (0, Vadjustment.StepIncrement);
-				break;
-			case Gdk.Key.Left:
-			case Gdk.Key.KP_Left:
-			case Gdk.Key.h:
-			case Gdk.Key.H:
-				ScrollBy (-Hadjustment.StepIncrement, 0);
-				break;
-			case Gdk.Key.Right:
-			case Gdk.Key.KP_Right:
-			case Gdk.Key.l:
-			case Gdk.Key.L:
-				ScrollBy (Hadjustment.StepIncrement, 0);
-				break;
-			case Gdk.Key.equal:
-			case Gdk.Key.plus:
-			case Gdk.Key.KP_Add:
-				ZoomIn ();
-				break;
-			case Gdk.Key.minus:
-			case Gdk.Key.KP_Subtract:
-				ZoomOut ();
-				break;
-			case Gdk.Key.Key_0:
-			case Gdk.Key.KP_0:
-				ZoomFit ();
-				break;
-			case Gdk.Key.KP_1:
-			case Gdk.Key.Key_1:
-				GdkWindow.GetPointer (out x, out y, out type);
-				DoZoom (1.0, true, x, y);
-				break;
-			case Gdk.Key.Key_2:
-			case Gdk.Key.KP_2:
-				GdkWindow.GetPointer (out x, out y, out type);
-				DoZoom (2.0, true, x, y);
-				break;
-			default:
-				handled = false;
-				break;
-			}
-			
-			return handled || base.OnKeyPressEvent (evnt);
-		}
-#endregion
-
-#region private painting, zooming and misc 
-		int XOffset { get; set;}
-		int YOffset { get; set;}
-		void DoZoom (double zoom, bool use_anchor, int x, int y)
-		{
-			fit = zoom == MIN_ZOOM;
-
-			if (zoom == this.zoom)
-				return;
-			
-			if (System.Math.Abs (this.zoom - zoom) < System.Double.Epsilon)
-				return;
-
-			if (zoom > MAX_ZOOM)
-				zoom = MAX_ZOOM;
-			else if (zoom < MIN_ZOOM)
-				zoom = MIN_ZOOM;
-
-			this.zoom = zoom;
-			
-			if (!use_anchor) {
-				x = (int)Allocation.Width / 2;
-				y = (int)Allocation.Height / 2;
-			}
-
-			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)
-		{
-			GdkWindow.DrawRectangle (Style.BackgroundGCs [(int)StateType.Normal], true, area);
-		}
-
-		void PaintRectangle (Rectangle area, InterpType interpolation)
-		{
-			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;
-			//Draw background
-			if (y_offset > 0) 	//Top
-				PaintBackground (new Rectangle (0, 0, Allocation.Width, y_offset), area);
-			if (x_offset > 0) 	//Left
-				PaintBackground (new Rectangle (0, y_offset, x_offset, (int)scaled_height), area);
-			if (x_offset >= 0)	//Right
-				PaintBackground (new Rectangle (x_offset + (int)scaled_width, y_offset, Allocation.Width - x_offset - (int)scaled_width, (int)scaled_height), area);
-			if (y_offset >= 0)	//Bottom
-				PaintBackground (new Rectangle (0, y_offset + (int)scaled_height, Allocation.Width, Allocation.Height - y_offset - (int)scaled_height), area);
-
-			if (Pixbuf == null)
-				return;
-
-			area.Intersect (new Rectangle (x_offset, y_offset, (int)scaled_width, (int)scaled_height));
-
-			if (area.Width <= 0  || area.Height <= 0)
-				return;
-
-			//Short circuit for 1:1 zoom
-			if (zoom == 1.0 &&
-			    !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);
-				return;
-			}
-
-			Rectangle pixbuf_area = PixbufUtils.TransformOrientation ((int)scaled_width,
-										  (int)scaled_height,
-										  new Rectangle ((area.X - x_offset),
-												 (area.Y - y_offset),
-												 area.Width,
-												 area.Height),
-										  PixbufUtils.ReverseTransformation (pixbuf_orientation));
-			using (Pixbuf temp_pixbuf = new Pixbuf (Colorspace.Rgb, false, 8, pixbuf_area.Width, pixbuf_area.Height)) {
-				if (Pixbuf.HasAlpha)
-					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);
-
-
-				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);
-				}
-			}
-		}
-
-		uint scaled_width, scaled_height;
-		void ComputeScaledSize ()
-		{
-			if (Pixbuf == null)
-				scaled_width = scaled_height = 0;
-			else {
-				double width;
-				double height;
-				if ((int)pixbuf_orientation <= 4 ) { //TopLeft, TopRight, BottomRight, BottomLeft
-					width = Pixbuf.Width;
-					height = Pixbuf.Height;
-				} else {			//LeftTop, RightTop, RightBottom, LeftBottom
-					width = Pixbuf.Height;
-					height = Pixbuf.Width;
-				}
-				scaled_width = (uint)Math.Floor (width * Zoom + .5);
-				scaled_height = (uint)Math.Floor (height * Zoom + .5);
-			}
-
-			Hadjustment.PageSize = Math.Min (scaled_width, Allocation.Width);
-			Hadjustment.PageIncrement = scaled_width * .9;
-			Hadjustment.StepIncrement = 32;
-			Hadjustment.Upper = scaled_width;
-			Hadjustment.Lower = 0;
-
-			Vadjustment.PageSize = Math.Min (scaled_height, Allocation.Height);
-			Vadjustment.PageIncrement = scaled_height * .9;
-			Vadjustment.StepIncrement = 32;
-			Vadjustment.Upper = scaled_height;
-			Vadjustment.Lower = 0;
-
-		}
-
-		event EventHandler AdjustmentsChanged;
-		void HandleAdjustmentsValueChanged (object sender, EventArgs e)
-		{
-			EventHandler eh = AdjustmentsChanged;
-			if (eh != null)
-				eh (this, EventArgs.Empty);
-		}
-
-		void ScrollToAdjustments (object sender, EventArgs e)
-		{
-			ScrollTo ((int)Hadjustment.Value, (int)Vadjustment.Value, false);
-		}
-
-		void ScrollTo (int x, int y, bool change_adjustments)
-		{
-			x = Clamp (x, 0, (int)(Hadjustment.Upper - Hadjustment.PageSize));
-			y = Clamp (y, 0, (int)(Vadjustment.Upper - Vadjustment.PageSize));
-
-			int xof = x - XOffset;
-			int yof = y - YOffset;
-			XOffset = x;
-			YOffset = y;
-
-			if (IsRealized) {
-				GdkWindow.Scroll (-xof, -yof);
-				GdkWindow.ProcessUpdates (true);
-			}
-
-			if (change_adjustments) {
-				AdjustmentsChanged -= ScrollToAdjustments;
-				Hadjustment.Value = XOffset;
-				Vadjustment.Value = YOffset;
-				AdjustmentsChanged += ScrollToAdjustments;
-			}
-		}
-
-		void ScrollBy (double x, double y)
-		{
-			ScrollTo ((int)(XOffset + x), (int)(YOffset + y), true);
-		}
-
-		static int Clamp (int value, int min, int max)
-		{
-			return Math.Min (Math.Max (value, min), max);
-		}
-
-		double ComputeMinZoom (bool upscale)
-		{
-			if (Pixbuf == null)
-				return 0.1;
-
-			double width;
-			double height;
-			if ((int)pixbuf_orientation <= 4 ) { //TopLeft, TopRight, BottomRight, BottomLeft
-				width = Pixbuf.Width;
-				height = Pixbuf.Height;
-			} else {			//LeftTop, RightTop, RightBottom, LeftBottom
-				width = Pixbuf.Height;
-				height = Pixbuf.Width;
-			}
-			if (upscale)
-				return Math.Min ((double)Allocation.Width / width,
-						 (double)Allocation.Height / height);
-			return Math.Min (1.0,
-					 Math.Min ((double)Allocation.Width / width,
-						   (double)Allocation.Height / height));
-		}
-#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 selection
-		bool OnSelectionExposeEvent (EventExpose evnt)
-		{
-			if (selection == Rectangle.Zero)
-				return false;
-
-			Rectangle win_selection = ImageCoordsToWindow (selection);
-			using (var evnt_region = evnt.Region.Copy ()) {
-				using (Region r = new Region ()) {
-					r.UnionWithRect (win_selection);
-					evnt_region.Subtract (r);
-				}
-
-				using (Cairo.Context ctx = CairoHelper.Create (GdkWindow)) {
-					ctx.SetSourceRGBA (.5, .5, .5, .7);
-					CairoHelper.Region (ctx, evnt_region);
-					ctx.Fill ();
-				}
-			}
-			return true;
-		}
-
-		enum DragMode {
-			None,
-			Move,
-			Extend,
-		}
-
-		const int SELECTION_SNAP_DISTANCE = 8;
-		DragMode GetDragMode (int x, int y)
-		{
-			Rectangle win_selection = ImageCoordsToWindow (selection);
-			if (Rectangle.Inflate (win_selection, -SELECTION_SNAP_DISTANCE, -SELECTION_SNAP_DISTANCE).Contains (x, y))
-				return DragMode.Move;
-			if (Rectangle.Inflate (win_selection, SELECTION_SNAP_DISTANCE, SELECTION_SNAP_DISTANCE).Contains (x, y))
-				return DragMode.Extend;
-			return DragMode.None;
-		}
-
-		bool is_dragging_selection = false;
-		bool fixed_height = false;
-		bool fixed_width = false;
-		bool is_moving_selection = false;
-		Point selection_anchor = Point.Zero;
-		bool OnSelectionButtonPressEvent (EventButton evnt)
-		{
-			if (evnt.Button != 1)
-				return false;
-
-			if (evnt.Type == EventType.TwoButtonPress) {
-				is_dragging_selection = false;
-				is_moving_selection = false;
-				return false;
-			}
-			
-			Point img = WindowCoordsToImage (new Point ((int)evnt.X, (int)evnt.Y));
-			switch (GetDragMode ((int)evnt.X, (int)evnt.Y)) {
-				case DragMode.None:
-					is_dragging_selection = true;
-					PointerMode = PointerMode.Select;
-					Selection = Rectangle.Zero;
-					selection_anchor = img;
-					break;
-				case DragMode.Extend:
-					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
-						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
-						selection_anchor = new Point (Selection.X, Selection.Y + Selection.Height);
-					} else if (Math.Abs (win_sel.X - evnt.X) < SELECTION_SNAP_DISTANCE &&
-						   Math.Abs (win_sel.Y + win_sel.Height - evnt.Y) < SELECTION_SNAP_DISTANCE) {	//BottomLeft
-						selection_anchor = new Point (Selection.X + Selection.Width, Selection.Y);
-					} else if (Math.Abs (win_sel.X + win_sel.Width - evnt.X) < SELECTION_SNAP_DISTANCE &&
-						   Math.Abs (win_sel.Y + win_sel.Height - evnt.Y) < SELECTION_SNAP_DISTANCE) {	//BottomRight
-						selection_anchor = new Point (Selection.X, Selection.Y);
-					} else if (Math.Abs (win_sel.X - evnt.X) < SELECTION_SNAP_DISTANCE) {			//Left
-						selection_anchor = new Point (Selection.X + Selection.Width, Selection.Y);
-						fixed_height = true;
-					} else if (Math.Abs (win_sel.X + win_sel.Width - evnt.X) < SELECTION_SNAP_DISTANCE) {	//Right
-						selection_anchor = new Point (Selection.X, Selection.Y);
-						fixed_height = true;
-					} else if (Math.Abs (win_sel.Y - evnt.Y) < SELECTION_SNAP_DISTANCE) {			//Top
-						selection_anchor = new Point (Selection.X, Selection.Y + Selection.Height);
-						fixed_width = true;
-					} else if (Math.Abs (win_sel.Y + win_sel.Height - evnt.Y) < SELECTION_SNAP_DISTANCE) {	//Bottom
-						selection_anchor = new Point (Selection.X, Selection.Y);
-						fixed_width = true;
-					} else {
-						fixed_width = fixed_height = false;
-						is_dragging_selection = false;
-					}
-						
-					break;
-				case DragMode.Move:
-					is_moving_selection = true;
-					selection_anchor = img;
-					SelectionSetPointer ((int)evnt.X, (int)evnt.Y);
-					break;
-			}
-
-			return true;
-		}
-
-		bool OnSelectionButtonReleaseEvent (EventButton evnt)
-		{
-			if (evnt.Button != 1)
-				return false;
-
-			is_dragging_selection = false;
-			is_moving_selection = false;
-			fixed_width = fixed_height = false;
-
-			SelectionSetPointer ((int)evnt.X, (int)evnt.Y);
-			return true;
-		}
-
-		void SelectionSetPointer (int x, int y)
-		{
-			if (is_moving_selection)
-				GdkWindow.Cursor = new Cursor (CursorType.Crosshair);
-			else {
-				switch (GetDragMode (x, y)) {
-				case DragMode.Move:
-					GdkWindow.Cursor = new Cursor (CursorType.Hand1);
-					break;
-				default:
-					GdkWindow.Cursor = null;
-					break;
-				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
-						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
-						GdkWindow.Cursor = new Cursor (CursorType.TopRightCorner);
-					} else if (Math.Abs (win_sel.X - x) < SELECTION_SNAP_DISTANCE &&
-						   Math.Abs (win_sel.Y + win_sel.Height - y) < SELECTION_SNAP_DISTANCE) {	//BottomLeft
-						GdkWindow.Cursor = new Cursor (CursorType.BottomLeftCorner);
-					} else if (Math.Abs (win_sel.X + win_sel.Width - x) < SELECTION_SNAP_DISTANCE &&
-						   Math.Abs (win_sel.Y + win_sel.Height - y) < SELECTION_SNAP_DISTANCE) {	//BottomRight
-						GdkWindow.Cursor = new Cursor (CursorType.BottomRightCorner);
-					} else if (Math.Abs (win_sel.X - x) < SELECTION_SNAP_DISTANCE) {			//Left
-						GdkWindow.Cursor = new Cursor (CursorType.LeftSide);
-					} else if (Math.Abs (win_sel.X + win_sel.Width - x) < SELECTION_SNAP_DISTANCE) {	//Right
-						GdkWindow.Cursor = new Cursor (CursorType.RightSide);
-					} else if (Math.Abs (win_sel.Y - y) < SELECTION_SNAP_DISTANCE) {			//Top
-						GdkWindow.Cursor = new Cursor (CursorType.TopSide);
-					} else if (Math.Abs (win_sel.Y + win_sel.Height - y) < SELECTION_SNAP_DISTANCE) {	//Bottom
-						GdkWindow.Cursor = new Cursor (CursorType.BottomSide);
-					}
-					break;
-				}
-			}
-
-			
-		}
-
-
-		const int SELECTION_THRESHOLD = 5;
-		bool OnSelectionMotionNotifyEvent (EventMotion evnt)
-		{
-			int x, y;
-			ModifierType mod;
-
-			if (evnt.IsHint)
-				GdkWindow.GetPointer (out x, out y, out mod);
-			else {
-				x = (int)evnt.X;
-				y = (int)evnt.Y;
-			}
-
-
-			Point img = WindowCoordsToImage (new Point (x, y));
-			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) {
-					SelectionSetPointer (x, y);
-					return true;
-				}
-	
-				
-				if (selection_xy_ratio == 0)
-					Selection = new Rectangle (fixed_width ? Selection.X : Math.Min (selection_anchor.X, img.X),
-								   fixed_height ? Selection.Y : Math.Min (selection_anchor.Y, img.Y),
-								   fixed_width ? Selection.Width : Math.Abs (selection_anchor.X - img.X),
-								   fixed_height ? Selection.Height : Math.Abs (selection_anchor.Y - img.Y));
-
-				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)),
-									fixed_width, fixed_height);
-
-				SelectionSetPointer (x, y);
-				return true;
-			}
-
-			if (is_moving_selection) {
-				Selection = new Rectangle (Clamp (Selection.X + img.X - selection_anchor.X, 0, Pixbuf.Width - Selection.Width),
-							   Clamp (Selection.Y + img.Y - selection_anchor.Y, 0, Pixbuf.Height - Selection.Height),
-							   Selection.Width, Selection.Height);
-				selection_anchor = img;
-				SelectionSetPointer (x, y);
-				return true;
-			}
-
-			SelectionSetPointer (x, y);
-			return true;
-		}
-
-		Rectangle ConstrainSelection (Rectangle sel, bool fixed_width, bool fixed_height)
-		{
-			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)
-				constrain = 1.0 / constrain;
-
-
-			double ratio = (double)sel.Width / (double)sel.Height;
-			int height = sel.Height;
-			int width = sel.Width;
-			if (ratio > constrain) {
-				height = (int)((double)sel.Width / constrain);
-				if (height > Pixbuf.Height) {
-					height = sel.Height;
-					width = (int)(height * constrain);
-				}
-			} else {
-				width = (int)(height * constrain);
-				if (width > Pixbuf.Width) {
-					width = sel.Width;
-					height = (int)((double)width / constrain);
-				}
-			}
-
-			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);
-		}
-#endregion
-
-#region panning
-		Point pan_anchor = new Point (0, 0);
-
-		bool OnPanButtonPressEvent (EventButton evnt)
-		{
-			if (2 != evnt.Button) {
-				return false;
-			}
-
-			System.Diagnostics.Debug.Assert (!panning);
-			panning = true;
-
-			pan_anchor.X = (int) evnt.X;
-			pan_anchor.Y = (int) evnt.Y;
-
-			PanSetPointer ();
-
-			return true;
-		}
-
-		bool OnPanMotionNotifyEvent (EventMotion evnt)
-		{
-			if (!panning) {
-				return false;
-			}
-
-			int pan_x = pan_anchor.X - (int) evnt.X;
-			int pan_y = pan_anchor.Y - (int) evnt.Y;
-			ScrollBy (pan_x, pan_y);
-
-			pan_anchor.X = (int) evnt.X;
-			pan_anchor.Y = (int) evnt.Y;
-
-			PanSetPointer ();
-
-			return true;
-		}
-
-		bool OnPanButtonReleaseEvent (EventButton evnt)
-		{
-			if (2 != evnt.Button) {
-				return false;
-			}
-
-			System.Diagnostics.Debug.Assert (panning);
-			panning = false;
-
-			PanSetPointer ();
-
-			return true;
-		}
-
-		void PanSetPointer ()
-		{
-			GdkWindow.Cursor = panning
-					? new Cursor (CursorType.Fleur)
-					: null;
-		}
-#endregion
-	}
-}
diff --git a/src/Widgets/InfoBox.cs b/src/Widgets/InfoBox.cs
deleted file mode 100644
index 4c645e2..0000000
--- a/src/Widgets/InfoBox.cs
+++ /dev/null
@@ -1,943 +0,0 @@
-/*
- * FSpot.Widgets.InfoBox
- *
- * Author(s)
- * 	Ettore Perazzoli
- * 	Larry Ewing  <lewing at novell.com>
- * 	Gabriel Burt
- *	Stephane Delcroix  <stephane at delcroix.org>
- *	Ruben Vermeersch <ruben at savanne.be>
- *	Mike Gemuende <mike at gemuende.de>
- *
- * This is free software. See COPYING for details.
- */
-
-
-using Gtk;
-using System;
-using System.IO;
-using FSpot.Imaging;
-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 {
-		Delay update_delay;
-	
-		private IBrowsableItem [] photos = new IBrowsableItem [0];
-		public IBrowsableItem [] Photos {
-			set {
-				photos = value;
-				update_delay.Start ();
-			}
-			private get {
-				return photos;
-			}
-		}
-
-		public IBrowsableItem Photo {
-			set {
-				if (value != null) {
-					Photos = new IBrowsableItem [] { 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, IBrowsableItemVersion version);
-		public event VersionChangedHandler VersionChanged;
-	
-		private Expander info_expander;
-		private Expander histogram_expander;
-
-		private Gtk.Image histogram_image;
-		private Histogram histogram;
-
-		private Delay 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 Label name_label;
-		private Label name_value_label;
-
-		private Label version_label;
-		private ListStore version_list;
-		private ComboBox version_combo;
-
-		private Label date_label;
-		private Label date_value_label;
-
-		private Label size_label;
-		private Label size_value_label;
-
-		private Label exposure_label;
-		private Label exposure_value_label;
-		
-		private Label focal_length_label;
-		private Label focal_length_value_label;
-		
-		private Label camera_label;
-		private Label camera_value_label;
-		
-		private Label file_size_label;
-		private Label file_size_value_label;
-
-		private Label rating_label;
-		private RatingSmall rating_view;
-
-		private TagView tag_view;
-		private string default_exposure_string;
-		
-		private bool show_name;
-		private bool show_date;
-		private bool show_size;
-		private bool show_exposure;
-		private bool show_focal_length;
-		private bool show_camera;
-		private bool show_file_size;
-
-		private void HandleRatingChanged (object o, EventArgs e)
-		{
-			App.Instance.Organizer.HandleRatingMenuSelected ((o as Widgets.Rating).Value);
-	 	}
-	
-		private Label CreateRightAlignedLabel (string text)
-		{
-			Label label = new Label ();
-			label.UseMarkup = true;
-			label.Markup = text;
-			label.Xalign = 1;
-
-			return label;
-		}
-	
-		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 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 += delegate (object sender, EventArgs e) {
-				ContextSwitchStrategy.SetInfoBoxVisible (Context, info_expander.Expanded);
-			};
-			
-			Table info_table = new Table (10, 2, false);
-			info_table.BorderWidth = 0;
-	
-			string name_pre = "<b>";
-			string name_post = "</b>";
-
-			name_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Name") + name_post);
-			info_table.Attach (name_label, 0, 1, 0, 1, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-
-			version_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Version") + name_post); 
-			info_table.Attach (version_label, 0, 1, 1, 2, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-
-			date_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Date") + name_post + Environment.NewLine);
-			info_table.Attach (date_label, 0, 1, 2, 3, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-
-			size_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Size") + name_post);
-			info_table.Attach (size_label, 0, 1, 3, 4, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-
-			default_exposure_string = name_pre + Catalog.GetString ("Exposure") + name_post;
-			exposure_label = CreateRightAlignedLabel (default_exposure_string);
-			info_table.Attach (exposure_label, 0, 1, 4, 5, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-			
-			focal_length_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Focal Length") + name_post);
-			info_table.Attach (focal_length_label, 0, 1, 5, 6, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-			
-			camera_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Camera") + name_post);
-			info_table.Attach (camera_label, 0, 1, 6, 7, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-			
-			file_size_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("File Size") + name_post);
-			info_table.Attach (file_size_label, 0, 1, 7, 8, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-			
-			rating_label = CreateRightAlignedLabel (name_pre + Catalog.GetString ("Rating") + name_post);
-			info_table.Attach (rating_label, 0, 1, 8, 9, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-			rating_label.Visible = false;
-
-			name_value_label = new Label ();
-			name_value_label.Ellipsize = Pango.EllipsizeMode.Middle;
-			name_value_label.Justify = Gtk.Justification.Left;
-			name_value_label.Selectable = true;
-			name_value_label.Xalign = 0;
-			name_value_label.PopulatePopup += HandlePopulatePopup;
-			
-			info_table.Attach (name_value_label, 1, 2, 0, 1, AttachOptions.Fill | AttachOptions.Expand, AttachOptions.Fill, 3, 0);
-			
-			date_value_label = AttachLabel (info_table, 2, name_value_label);
-			size_value_label = AttachLabel (info_table, 3, name_value_label);
-			exposure_value_label = AttachLabel (info_table, 4, name_value_label);
-			
-			version_list = new ListStore (typeof (IBrowsableItemVersion), 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;
-			info_table.Attach (version_combo, 1, 2, 1, 2, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-	
-			date_value_label.Text = Environment.NewLine;
-			exposure_value_label.Text = Environment.NewLine;
-			focal_length_value_label = AttachLabel (info_table, 5, name_value_label);
-			camera_value_label = AttachLabel (info_table, 6, name_value_label);
-			file_size_value_label = AttachLabel (info_table, 7, name_value_label);
-
-			Gtk.Alignment rating_align = new Gtk.Alignment( 0, 0, 0, 0);
-			info_table.Attach (rating_align, 1, 2, 8, 9, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-			
-			rating_view = new RatingSmall ();
-			rating_view.Visible = false;
-			rating_view.Changed += HandleRatingChanged;
-			rating_align.Add (rating_view);
-
-			tag_view = new TagView ();
-			info_table.Attach (tag_view, 0, 2, 9, 10, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
-
-			info_table.ShowAll ();
-
-			EventBox eb = new EventBox ();
-			eb.Add (info_table);
-			info_expander.Add (eb);
-			eb.ButtonPressEvent += HandleButtonPressEvent;
-
-			Add (info_expander);
-			rating_label.Visible = show_rating;
-			rating_view.Visible = show_rating;
-		}
-
-        // FIXME: We should pull this info directly out of IBrowsableItem
-		private class ImageInfo {
-			int width;
-			int height;
-			double? fnumber;
-			double? exposure_time;
-			uint? iso_speed;
-			double? focal_length;
-			string camera_model;
-
-			public ImageInfo (IImageFile img)
-			{
-				if (img == null)
-					return;
-
-				using (var metadata = Metadata.Parse (img.Uri)) {
-					width = metadata.Properties.PhotoWidth;
-					height = metadata.Properties.PhotoHeight;
-					fnumber = metadata.ImageTag.FNumber;
-					exposure_time = metadata.ImageTag.ExposureTime;
-					iso_speed = metadata.ImageTag.ISOSpeedRatings;
-					focal_length = metadata.ImageTag.FocalLength;
-					camera_model = metadata.ImageTag.Model;
-				}
-			}
-
-			public string ExposureInfo {
-				get {
-					string info = String.Empty;
-
-					if (fnumber.HasValue && fnumber.Value != 0.0) {
-						try {
-							info += String.Format ("f/{0:.0} ", fnumber.Value);
-						} catch (FormatException) {
-							return Catalog.GetString("(wrong format)");
-						}
-					}
-
-					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);
-					}
-
-					if (info == String.Empty)
-						return Catalog.GetString ("(None)");
-
-					return info;
-				}
-			}
-			
-			public string FocalLength {
-				get {
-					if (focal_length == null)
-						return Catalog.GetString ("(Unknown)");
-
-					return String.Format ("{0} mm", focal_length.Value);
-				}
-			}
-
-			public string CameraModel {
-				get {
-					if (camera_model != String.Empty)
-						return camera_model;
-					else
-						return Catalog.GetString ("(Unknown)");
-				}
-			}
-
-	
-			public string Dimensions {
-				get {
-					if (width != 0 && height != 0)
-						return String.Format ("{0}x{1}", width, height);
-					else 
-						return Catalog.GetString ("(Unknown)");
-				}
-			}
-		}
-			
-	
-		public bool Update ()
-		{
-			if (Photos == null || Photos.Length == 0) {
-				Hide ();
-			} else if (Photos.Length == 1) {
-				Show ();
-				UpdateSingle ();
-			} else if (Photos.Length > 1) {
-				Show ();
-				UpdateMultiple ();
-			}
-			return false;
-		}	
-	
-		private void UpdateSingle () 
-		{
-			ImageInfo info;
-
-			IBrowsableItem photo = Photos [0];
-
-			histogram_expander.Visible = true;
-			UpdateHistogram ();
-
-			if (show_name) {
-				name_value_label.Text = photo.Name != null ? photo.Name : String.Empty;
-			}
-			name_label.Visible = show_name;	
-			name_value_label.Visible = show_name;
-			
-			try {
-				using (var img = ImageFile.Create (photo.DefaultVersion.Uri))
-				{
-					info = new ImageInfo (img);
-				}
-			} catch (System.Exception e) {
-				Hyena.Log.Debug (e.StackTrace);
-				info = new ImageInfo (null);			
-			}
-
-			if (show_exposure) {
-				exposure_value_label.Text = info.ExposureInfo;
-				if (exposure_value_label.Text.IndexOf (Environment.NewLine) != -1)
-					exposure_label.Markup = default_exposure_string + Environment.NewLine;
-				else
-					exposure_label.Markup = default_exposure_string;
-			}
-			exposure_label.Visible = show_exposure;
-			exposure_value_label.Visible = show_exposure;
-
-			if (show_size)
-				size_value_label.Text = info.Dimensions;
-			size_label.Visible = show_size;
-			size_value_label.Visible = show_size;
-
-			if (show_date) {
-				DateTime local_time = photo.Time;
-				date_value_label.Text = String.Format ("{0}{2}{1}",
-				                                       local_time.ToShortDateString (),
-				                                       local_time.ToShortTimeString (),
-				                                       Environment.NewLine
-				                                       );
-			}
-			date_label.Visible = show_date;
-			date_value_label.Visible = show_date;
-			
-			if (show_focal_length)
-				focal_length_value_label.Text = info.FocalLength;
-			focal_length_label.Visible = show_focal_length;
-			focal_length_value_label.Visible = show_focal_length;
-			
-			if (show_camera)
-				camera_value_label.Text = info.CameraModel;
-			camera_label.Visible = show_camera;
-			camera_value_label.Visible = show_camera;
-
-			version_label.Visible = true;
-			version_combo.Visible = true;
-			version_list.Clear ();
-			version_combo.Changed -= OnVersionComboChanged;
-			
-			int count = 0;
-			foreach (IBrowsableItemVersion 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;
-
-			if (show_file_size) {
-				try {
-					GFile file = FileFactory.NewForUri (photo.DefaultVersion.Uri);
-					GFileInfo file_info = file.QueryInfo ("standard::size", FileQueryInfoFlags.None, null);
-					file_size_value_label.Text = Format.SizeForDisplay (file_info.Size);
-				} catch (GLib.GException e) {
-					file_size_value_label.Text = Catalog.GetString("(File read error)");
-					Hyena.Log.DebugException (e);
-				}
-			}
-			
-			file_size_label.Visible = show_file_size;
-			file_size_value_label.Visible = show_file_size;			
-			
-			if (show_tags)
-				tag_view.Current = photo;
-			rating_label.Visible = show_rating;
-			rating_view.Visible = show_rating;
-			if (show_rating) {
-				rating_view.Value = (int) photo.Rating;
-			}
-	
-			Show ();
-		}
-
-		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, (IBrowsableItemVersion)version_list.GetValue (iter, 0));
-		}
-
-		private void UpdateMultiple ()
-		{
-			histogram_expander.Visible = false;
-
-			name_label.Visible = false;
-			name_value_label.Text = String.Format(Catalog.GetString("{0} Photos"), Photos.Length);
-			name_value_label.Visible = true;
-			
-			version_label.Visible = false;
-			version_combo.Visible = false;
-
-			exposure_label.Visible = false;
-			exposure_value_label.Visible = false;
-			
-			focal_length_label.Visible = false;
-			focal_length_value_label.Visible = false;
-			
-			camera_label.Visible = false;
-			camera_value_label.Visible = false;
-
-			if (show_date) {
-				IBrowsableItem first = Photos[Photos.Length-1];
-				IBrowsableItem last = Photos [0];
-				if (first.Time.Date == last.Time.Date) {
-					//Note for translators: {0} is a date, {1} and {2} are times.
-					date_value_label.Text = String.Format(Catalog.GetString("On {0} between \n{1} and {2}"), 
-					                                      first.Time.ToShortDateString (),
-					                                      first.Time.ToShortTimeString (),
-					                                      last.Time.ToShortTimeString ());
-				} else {
-					date_value_label.Text = String.Format(Catalog.GetString("Between {0} \nand {1}"),
-					                                      first.Time.ToShortDateString (),
-					                                      last.Time.ToShortDateString ());
-				}
-			}
-			date_label.Visible = show_date;
-			date_value_label.Visible = show_date;
-
-			if (show_file_size) {
-				long file_size = 0;
-				foreach (IBrowsableItem photo in Photos) {
-					
-					try {
-						GFile file = FileFactory.NewForUri (photo.DefaultVersion.Uri);
-						GFileInfo file_info = file.QueryInfo ("standard::size", FileQueryInfoFlags.None, null);
-						file_size += file_info.Size;
-					} catch (GLib.GException e) {
-						file_size = -1;
-						Hyena.Log.DebugException (e);
-						break;
-					}
-				}
-				
-				if (file_size != -1)
-					file_size_value_label.Text = Format.SizeForDisplay (file_size);
-
-				else
-					file_size_value_label.Text = Catalog.GetString("(At least one File not found)");
-			}
-			file_size_label.Visible = show_file_size;
-			file_size_value_label.Visible = show_file_size;	
-
-			size_label.Visible = false;
-			size_value_label.Visible = false;
-
-			rating_label.Visible = false;
-			rating_view.Visible = false;
-		}
-
-		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;
-
-			IBrowsableItem 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;
-			
-			show_name = ContextSwitchStrategy.InfoBoxNameVisible (Context);
-			show_date = ContextSwitchStrategy.InfoBoxDateVisible (Context);
-			show_size = ContextSwitchStrategy.InfoBoxSizeVisible (Context);
-			show_exposure = ContextSwitchStrategy.InfoBoxExposureVisible (Context);
-			show_focal_length = ContextSwitchStrategy.InfoBoxFocalLengthVisible (Context);
-			show_camera = ContextSwitchStrategy.InfoBoxCameraVisible (Context);
-			show_file_size = ContextSwitchStrategy.InfoBoxFileSizeVisible (Context);
-			
-			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) {
-			
-			if (popup_menu.Children.Length > 0) {
-				GtkUtil.MakeMenuSeparator (popup_menu);
-			}
-			
-			MenuItem item;
-			
-			item = GtkUtil.MakeCheckMenuItem (popup_menu,
-			                                  Catalog.GetString ("Show Photo Name"),
-			                                  HandleMenuItemSelected,
-			                                  true,
-			                                  show_name,
-			                                  false);
-			
-			item.SetData ("cb", name_label.Handle);
-				
-			item = GtkUtil.MakeCheckMenuItem (popup_menu,
-			                           Catalog.GetString ("Show Date"),
-			                           HandleMenuItemSelected,
-			                           true,
-			                           show_date,
-			                           false);
-			
-			item.SetData ("cb", date_label.Handle);			
-			
-			item = GtkUtil.MakeCheckMenuItem (popup_menu,
-			                           Catalog.GetString ("Show Size"),
-			                           HandleMenuItemSelected,
-			                           true,
-			                           show_size,
-			                           false);
-			
-			item.SetData ("cb", size_label.Handle);
-			
-			item = GtkUtil.MakeCheckMenuItem (popup_menu,
-			                           Catalog.GetString ("Show Exposure"),
-			                           HandleMenuItemSelected,
-			                           true,
-			                           show_exposure,
-			                           false);
-			
-			item.SetData ("cb", exposure_label.Handle);
-			
-			item = GtkUtil.MakeCheckMenuItem (popup_menu,
-			                           Catalog.GetString ("Show Focal Length"),
-			                           HandleMenuItemSelected,
-			                           true,
-			                           show_focal_length,
-			                           false);
-			
-			item.SetData ("cb", focal_length_label.Handle);
-			
-			item = GtkUtil.MakeCheckMenuItem (popup_menu,
-			                           Catalog.GetString ("Show Camera"),
-			                           HandleMenuItemSelected,
-			                           true,
-			                           show_camera,
-			                           false);
-			
-			item.SetData ("cb", camera_label.Handle);
-			
-			item = GtkUtil.MakeCheckMenuItem (popup_menu,
-			                           Catalog.GetString ("Show File Size"),
-			                           HandleMenuItemSelected,
-			                           true,
-			                           show_file_size,
-			                           false);
-			
-			item.SetData ("cb", file_size_label.Handle);
-		}
-		
-		private void HandleMenuItemSelected (object sender, EventArgs args)
-		{
-			IntPtr handle = (sender as CheckMenuItem).GetData ("cb");
-			
-			if (handle == name_label.Handle) {
-				show_name = (sender as CheckMenuItem).Active;
-				ContextSwitchStrategy.SetInfoBoxNameVisible (Context, show_name);
-			} else if (handle == date_label.Handle) {
-				show_date = (sender as CheckMenuItem).Active;
-				ContextSwitchStrategy.SetInfoBoxDateVisible (Context, show_date);
-			} else if (handle == size_label.Handle) {
-				show_size = (sender as CheckMenuItem).Active;
-				ContextSwitchStrategy.SetInfoBoxSizeVisible (Context, show_size);
-			} else if (handle == exposure_label.Handle) {
-				show_exposure = (sender as CheckMenuItem).Active;
-				ContextSwitchStrategy.SetInfoBoxExposureVisible (Context, show_exposure);
-			} else if (handle == focal_length_label.Handle) {
-				show_focal_length = (sender as CheckMenuItem).Active;
-				ContextSwitchStrategy.SetInfoBoxFocalLengthVisible (Context, show_focal_length);
-			} else if (handle == camera_label.Handle) {
-				show_camera = (sender as CheckMenuItem).Active;
-				ContextSwitchStrategy.SetInfoBoxCameraVisible (Context, show_camera);
-			} else if (handle == file_size_label.Handle) {
-				show_file_size = (sender as CheckMenuItem).Active;
-				ContextSwitchStrategy.SetInfoBoxFileSizeVisible (Context, show_file_size);
-			}
-			
-			update_delay.Start ();
-		}
-	
-		// Constructor.
-	
-		public InfoBox () : base (false, 0)
-		{
-			ContextSwitchStrategy = new MRUInfoBoxContextSwitchStrategy ();
-			ContextChanged += HandleContextChanged;
-
-			SetupWidgets ();
-
-			update_delay = new Delay (Update);
-			update_delay.Start ();
-
-			histogram_delay = new Delay (DelayedUpdateHistogram);
-			
-			BorderWidth = 2;
-			Hide ();
-		}
-	}
-
-	// 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 InfoBoxNameVisible (ViewContext context);
-		public abstract bool InfoBoxDateVisible (ViewContext context);
-		public abstract bool InfoBoxSizeVisible (ViewContext context);
-		public abstract bool InfoBoxExposureVisible (ViewContext context);
-		public abstract bool InfoBoxFocalLengthVisible (ViewContext context);
-		public abstract bool InfoBoxCameraVisible (ViewContext context);
-		public abstract bool InfoBoxFileSizeVisible (ViewContext context);
-
-		public abstract void SetInfoBoxVisible (ViewContext context, bool visible);
-		public abstract void SetHistogramVisible (ViewContext context, bool visible);
-		public abstract void SetInfoBoxNameVisible (ViewContext context, bool visible);
-		public abstract void SetInfoBoxDateVisible (ViewContext context, bool visible);
-		public abstract void SetInfoBoxSizeVisible (ViewContext context, bool visible);
-		public abstract void SetInfoBoxExposureVisible (ViewContext context, bool visible);
-		public abstract void SetInfoBoxFocalLengthVisible (ViewContext context, bool visible);
-		public abstract void SetInfoBoxCameraVisible (ViewContext context, bool visible);
-		public abstract void SetInfoBoxFileSizeVisible (ViewContext context, 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 InfoBoxNameVisible (ViewContext context) {
-			return VisibilityForContext (context, "infobox", "name", true);
-		}
-		
-		public override bool InfoBoxDateVisible (ViewContext context) {
-			return VisibilityForContext (context, "infobox", "date", true);
-		}
-		
-		public override bool InfoBoxSizeVisible (ViewContext context) {
-			return VisibilityForContext (context, "infobox", "size", true);
-		}
-		
-		public override bool InfoBoxExposureVisible (ViewContext context) {
-			return VisibilityForContext (context, "infobox", "exposure", true);
-		}
-		
-		public override bool InfoBoxFocalLengthVisible (ViewContext context) {
-			return VisibilityForContext (context, "infobox", "focal_length", false);
-		}
-		
-		public override bool InfoBoxCameraVisible (ViewContext context)  {
-			return VisibilityForContext (context, "infobox", "camera", false);
-		}
-		
-		public override bool InfoBoxFileSizeVisible (ViewContext context) {
-			return VisibilityForContext (context, "infobox", "file_size", false);
-		}
-
-		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 SetInfoBoxNameVisible (ViewContext context, bool visible) {
-			SetVisibilityForContext (context, "infobox", "name", visible);
-		}
-		
-		public override void SetInfoBoxDateVisible (ViewContext context, bool visible) {
-			SetVisibilityForContext (context, "infobox", "date", visible);
-		}
-		
-		public override void SetInfoBoxSizeVisible (ViewContext context, bool visible) {
-			SetVisibilityForContext (context, "infobox", "size", visible);
-		}
-		
-		public override void SetInfoBoxExposureVisible (ViewContext context, bool visible) {
-			SetVisibilityForContext (context, "infobox", "exposure", visible);
-		}
-		
-		public override void SetInfoBoxFocalLengthVisible (ViewContext context, bool visible) {
-			SetVisibilityForContext (context, "infobox", "focal_length", visible);
-		}
-		
-		public override void SetInfoBoxCameraVisible (ViewContext context, bool visible) {
-			SetVisibilityForContext (context, "infobox", "camera", visible);
-		}
-		
-		public override void SetInfoBoxFileSizeVisible (ViewContext context, bool visible) {
-			SetVisibilityForContext (context, "infobox", "file_size", visible);
-		}
-	}
-}
diff --git a/src/Widgets/Makefile.am b/src/Widgets/Makefile.am
deleted file mode 100644
index 43f1aa5..0000000
--- a/src/Widgets/Makefile.am
+++ /dev/null
@@ -1,34 +0,0 @@
-ASSEMBLY = FSpot.Widgets
-TARGET = library
-LINK = $(REF_FSPOT_WIDGETS)
-
-SOURCES = \
-	ApplicationActivatedEventArgs.cs \
-	BuilderWindow.cs \
-	CheckPattern.cs \
-	ComplexMenuItem.cs \
-	Curve.cs \
-	CurveType.cs \
-	CustomPrintWidget.cs \
-	DateEdit.cs \
-	DateEditFlags.cs \
-	DissolveTransition.cs \
-	HighlightedBox.cs \
-	ImageView.cs \
-	Layout.cs \
-	MenuButton.cs \
-	OpenWithMenu.cs \
-	PointerMode.cs \
-	Rating.cs \
-	SaneTreeView.cs \
-	ScrolledView.cs \
-	PushTransition.cs \
-	CairoTransition.cs \
-	SlideShowTransition.cs
-
-RESOURCES =
-
-include $(top_srcdir)/build/build.mk
-
-EXTRA_DIST += FSpot.Widgets.dll.config
-module_SCRIPTS += FSpot.Widgets.dll.config
diff --git a/src/Widgets/Makefile.in b/src/Widgets/Makefile.in
deleted file mode 100644
index 65ee241..0000000
--- a/src/Widgets/Makefile.in
+++ /dev/null
@@ -1,825 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/FSpot.Widgets.dll.config.in \
-	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/build/build.environment.mk \
-	$(top_srcdir)/build/build.mk \
-	$(top_srcdir)/build/build.rules.mk
- at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
-subdir = src/Widgets
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
-	$(top_srcdir)/build/m4/shamrock/expansions.m4 \
-	$(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
-	$(top_srcdir)/build/m4/shamrock/mono.m4 \
-	$(top_srcdir)/build/m4/shamrock/nunit.m4 \
-	$(top_srcdir)/build/m4/shamrock/programs.m4 \
-	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
-	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
-	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
-	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = FSpot.Widgets.dll.config
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(moduledir)"
-SCRIPTS = $(module_SCRIPTS)
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
-FLICKRNET_LIBS = @FLICKRNET_LIBS@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
-GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
-GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
-GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
-GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
-GTKSHARP_LIBS = @GTKSHARP_LIBS@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
-KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
-MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
-MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
-MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
-MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
-MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-ASSEMBLY = FSpot.Widgets
-TARGET = library
-LINK = $(REF_FSPOT_WIDGETS) $(am__append_1)
-SOURCES = \
-	ApplicationActivatedEventArgs.cs \
-	BuilderWindow.cs \
-	CheckPattern.cs \
-	ComplexMenuItem.cs \
-	Curve.cs \
-	CurveType.cs \
-	CustomPrintWidget.cs \
-	DateEdit.cs \
-	DateEditFlags.cs \
-	DissolveTransition.cs \
-	HighlightedBox.cs \
-	ImageView.cs \
-	Layout.cs \
-	MenuButton.cs \
-	OpenWithMenu.cs \
-	PointerMode.cs \
-	Rating.cs \
-	SaneTreeView.cs \
-	ScrolledView.cs \
-	PushTransition.cs \
-	CairoTransition.cs \
-	SlideShowTransition.cs
-
-RESOURCES = 
-
-# Initializers
-MONO_BASE_PATH = 
-MONO_ADDINS_PATH = 
-
-# Install Paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
-EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_ICONS = $(top_builddir)/icons
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-DIR_TAGLIB = $(top_builddir)/lib/TagLib
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_SYSTEMDATA = -r:System.Data
-LINK_SYSTEM_WEB = -r:System.Web
-LINK_MONO_POSIX = -r:Mono.Posix
-LINK_MONO_CAIRO = -r:Mono.Cairo
-LINK_MONO_SIMD = -r:Mono.Simd
-LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
-LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
-LINK_KEYRING = $(KEYRINGSHARP_LIBS)
-LINK_GLIB = $(GLIBSHARP_LIBS)
-LINK_GTK = $(GTKSHARP_LIBS)
-LINK_GNOME = $(GNOME_SHARP_LIBS)
-LINK_GCONF = $(GCONF_SHARP_LIBS)
-LINK_GLADE = -pkg:glade-sharp-2.0
-LINK_FLICKRNET = -pkg:flickrnet
-LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
-LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
-LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
-LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
-LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
-
-# GIO
-REF_GIO = 
-LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
-
-# Gtk Beans
-REF_GTK_BEANS = $(LINK_GIO_DEPS)
-LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
-
-# Uniqe
-REF_UNIQUE = 
-LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
-
-# Hyena
-REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
-LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
-
-# TagLib
-REF_TAGLIB = 
-LINK_TAGLIB = -r:$(DIR_BIN)/TagLib.dll
-LINK_TAGLIB_DEPS = $(REF_TAGLIB) $(LINK_TAGLIB)
-
-# Hyena.Data.Sqlite
-REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
-LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
-LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
-
-# Hyena.Gui
-REF_HYENA_GUI = $(LINK_HYENA_DEPS)
-LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
-LINK_HYENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
-
-# FSpot.Cms
-REF_FSPOT_CMS = $(LINK_GTK)
-LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
-LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
-
-# FSpot.Utils
-REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO) $(LINK_TAGLIB)
-LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
-LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
-
-# FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
-LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
-LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
-
-# FSpot.Query
-REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
-LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
-LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
-
-# FSpot.JobScheduler
-REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
-LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
-LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
-
-# FSpot.Bling
-REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
-LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
-LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
-
-# FSpot.Platform
-REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
-LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
-LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
-
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
-
-# FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
-            $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
-            $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
-
-# FIXME: do not link executables
-LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
-LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
-
-# Extensions
-REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
-REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
-REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
-REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
-REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
-REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
-LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
-LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
-REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
-LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
-LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
-REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
-LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
-LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
-REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
-REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
-REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
-
-# Cute hack to replace a space with something
-colon := :
-empty := 
-space := $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-# If no such file is specified, the default AssemblyInfo.cs is used.
-ASSEMBLY_INFO_SOURCE_REAL = \
-	$(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
-	then \
-		echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
-	else \
-		echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
-	fi)
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
-	$(ASSEMBLY_INFO_SOURCE_REAL)
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
-	-resource:$(resource),$(notdir $(resource)))
-
-INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
-THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
-THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
- at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
- at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-OUTPUT_FILES = \
-	$(ASSEMBLY_FILE) \
-	$(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES) FSpot.Widgets.dll.config
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
-	$(THEME_ICONS_SOURCE) FSpot.Widgets.dll.config
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Widgets/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign src/Widgets/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-FSpot.Widgets.dll.config: $(top_builddir)/config.status $(srcdir)/FSpot.Widgets.dll.config.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-install-moduleSCRIPTS: $(module_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n' \
-	    -e 'h;s|.*|.|' \
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
-	      if (++n[d] == $(am__install_max)) { \
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
-	    else { print "f", d "/" $$4, $$1 } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	     test -z "$$files" || { \
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
-	     } \
-	; done
-
-uninstall-moduleSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(moduledir)" && rm -f $$files
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(moduledir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-data-local install-moduleSCRIPTS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-local \
-	uninstall-moduleSCRIPTS
-
-
-all: $(ASSEMBLY_FILE) theme-icons
-
-run: 
-	@pushd $(top_builddir); \
-	make run; \
-	popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-#	@pushd $(top_builddir)/tests; \
-#	make $(ASSEMBLY); \
-#	popd;
-
-build-debug:
-	@echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
-	@mkdir -p $(top_builddir)/bin
-	@if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
-		$(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
-		$(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
-	fi;
-	$(MCS) \
-		$(GMCS_FLAGS) \
-		$(ASSEMBLY_BUILD_FLAGS) \
-		-nowarn:0278 -nowarn:0078 $$warn \
-		-define:HAVE_GTK_2_10 -define:NET_2_0 \
-		-debug -target:$(TARGET) -out:$@ \
-		$(BUILD_DEFINES) $(CSC_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
-		$(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
-	@if [ -e $(srcdir)/$(notdir $@.config) ]; then \
-		cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
-	fi;
-	@if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
-		cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
-	fi;
-
-theme-icons: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-install-data-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-uninstall-local: $(THEME_ICONS_SOURCE)
-	@$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/Widgets/MetadataDisplay.cs b/src/Widgets/MetadataDisplay.cs
deleted file mode 100644
index 7362560..0000000
--- a/src/Widgets/MetadataDisplay.cs
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * Widgets.MetadataDisplay.cs
- *
- * Author(s)
- * 	Mike Gemuende <mike at gemuende.de>
- * 	Ruben Vermeersch <ruben at savanne.be>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using System.IO;
-using System.Text;
-using System.Collections.Generic;
-using Gtk;
-
-using Mono.Unix;
-
-using FSpot.Extensions;
-using FSpot.Imaging;
-
-namespace FSpot.Widgets {
-	public class MetadataDisplayPage : SidebarPage {
-		public MetadataDisplayPage() : base(new MetadataDisplayWidget(), 
-											Catalog.GetString ("Metadata"), 
-											"gtk-info") {
-			(SidebarWidget as MetadataDisplayWidget).Page = this;
-		}
-
-		protected override void AddedToSidebar ()
-		{
-			MetadataDisplayWidget widget = SidebarWidget as MetadataDisplayWidget;
-			(Sidebar as Sidebar).SelectionChanged += widget.HandleSelectionChanged;
-			(Sidebar as Sidebar).SelectionItemsChanged += widget.HandleSelectionItemsChanged;
-		}
-	}
-
-	public class MetadataDisplayWidget : ScrolledWindow {
-		Delay update_delay;
-		
-		/* 	This VBox only contains exif-data,
-			so it is seperated from other information */
-		VBox metadata_vbox;
-		
-		VBox main_vbox;
-		Label metadata_message;
-		State display;
-		
-		private MetadataDisplayPage page;
-		public MetadataDisplayPage Page {
-			set { page = value; }
-			get { return page; }
-		}
-		
-		// stores list of the expanded expanders
-		List<string> open_list;
-		
-		ListStore extended_metadata;
-		
-		bool up_to_date = false;
-		
-		enum State {
-			metadata,
-			message
-		};
-		
-		public MetadataDisplayWidget ()
-		{
-			main_vbox = new VBox ();
-			main_vbox.Spacing = 6;
-			
-			metadata_message = new Label (String.Empty);
-			metadata_message.UseMarkup = true;
-			metadata_message.LineWrap = true;
-			metadata_vbox = new VBox ();
-			metadata_vbox.Spacing = 6;
-			
-			main_vbox.PackStart (metadata_vbox, false, false, 0);
-			AddWithViewport (metadata_message);
-			((Viewport) Child).ShadowType = ShadowType.None;
-			BorderWidth = 3;
-			
-			display = State.message;
-			ExposeEvent += HandleExposeEvent;
-			
-			open_list = new List<string> ();
-			
-			// Create Expander and TreeView for
-			// extended metadata
-			TreeView tree_view = new TreeView ();
-			tree_view.HeadersVisible = false;
-			tree_view.RulesHint = true;
-						
-			TreeViewColumn col = new TreeViewColumn ();
-			col.Sizing = TreeViewColumnSizing.Autosize;
-			CellRenderer colr = new CellRendererText ();
-			col.PackStart (colr, false);
-
-			col.AddAttribute (colr, "markup", 0);
-
-			tree_view.AppendColumn (col);
-			
-			extended_metadata = new ListStore (typeof(string));
-			tree_view.Model = extended_metadata;
-			
-			Expander expander = new Expander (String.Format("<span weight=\"bold\"><small>{0}</small></span>", Catalog.GetString ("Extended Metadata")));
-			expander.UseMarkup = true;
-			expander.Add (tree_view);
-			expander.Expanded = true;
-			
-			main_vbox.PackStart (expander, false, false, 6);
-			expander.ShowAll ();
-			
-			update_delay = new Delay (Update);
-			update_delay.Start ();
-		}
-		
-		private IBrowsableItem photo;
-		public IBrowsableItem Photo {
-			get { return photo; }
-			set {
-				photo = value;
-				
-				if (!Visible) {
-					up_to_date = false;
-				} else {
-					update_delay.Start ();
-				}
-			}
-		}
-		
-		private void HandleExposeEvent (object sender, ExposeEventArgs args)
-		{
-			if (!up_to_date) {
-				update_delay.Start ();
-			}
-		}
-		
-		internal void HandleSelectionChanged (IBrowsableCollection collection) {
-            // Don't show metadata when multiple photos are selected.
-			Photo = (collection != null && collection.Count == 1) ? collection [0] : null;
-		}
-		
-		internal void HandleSelectionItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args) {
-			if (!args.Changes.MetadataChanged)
-				return;
-
-			if (!Visible) {
-				up_to_date = false;
-            } else {
-				update_delay.Start ();
-            }
-		}
-
-        private bool Visible {
-            get {
-                return (Page.Sidebar as Sidebar).IsActive (Page);
-            }
-        }
-		
-		private ListStore AddExpander (string name, int pos)
-		{
-			TreeView tree_view = new TreeView ();
-			tree_view.HeadersVisible = false;
-			tree_view.RulesHint = true;
-						
-			TreeViewColumn col = new TreeViewColumn ();
-			col.Sizing = TreeViewColumnSizing.Autosize;
-			CellRenderer colr = new CellRendererText ();
-			col.PackStart (colr, false);
-
-			col.AddAttribute (colr, "markup", 0);
-
-			tree_view.AppendColumn (col);
-			
-			ListStore model = new ListStore (typeof(string));
-			tree_view.Model = model;
-			
-			Expander expander = new Expander (String.Format ("<span weight=\"bold\"><small>{0}</small></span>", name));
-			expander.UseMarkup = true;
-			expander.Add (tree_view);
-			expander.Expanded = true;
-			
-			metadata_vbox.PackStart (expander, false, false, 6);
-			metadata_vbox.ReorderChild (expander, pos);
-			
-			if (open_list.Contains (name))
-				expander.Expanded = true;
-			
-			expander.Activated += HandleExpanderActivated;
-			
-			expander.ShowAll ();
-			
-			return model;
-		}
-		
-		public void HandleExpanderActivated (object sender, EventArgs e)
-		{
-			Expander expander = (Expander) sender;
-			if (expander.Expanded)
-				open_list.Add (expander.Label);
-			else
-				open_list.Remove (expander.Label);
-		}		
-		
-		private bool Update ()
-		{
-			bool empty = true;
-			int index_of_expander = 0;
-			bool missing = false;
-			System.Exception error = null;
-
-			/*
-            // FIXME: The stuff below needs to be ported to Taglib#.
-            TreeIter iter;
-			ListStore model;
-			string name;
-			
-			up_to_date = true;
-			
-			int i = 0;
-			
-			// Write Exif-Data
-			if (exif_info != null) {
-				foreach (ExifContent content in exif_info.GetContents ()) {
-					ExifEntry [] entries = content.GetEntries ();
-					
-					i++;
-					
-					if (entries.Length < 1)
-						continue;
-					
-					empty = false;
-										
-					name = ExifUtil.GetIfdNameExtended ((Ifd)i - 1);
-					
-					if (index_of_expander >= metadata_vbox.Children.Length)
-						model = AddExpander (name, index_of_expander);
-					else {
-						Expander expander = (Expander)metadata_vbox.Children[index_of_expander];
-						if (expander.Label == name)
-							model = (ListStore)((TreeView)expander.Child).Model;
-						else {
-							model = AddExpander (name, index_of_expander);					
-						}
-					}
-					
-					model.GetIterFirst(out iter);
-				
-					foreach (ExifEntry entry in entries) {
-						string s;
-						
-						if (entry.Title != null)
-							s = String.Format ("{0}\n\t<small>{1}</small>", entry.Title, entry.Value);
-						else
-							s = String.Format ("Unknown Tag ID={0}\n\t<small>{1}</small>", entry.Tag.ToString (), entry.Value);
-												
-						if (model.IterIsValid(iter)) {
-							model.SetValue (iter, 0, s);
-							model.IterNext(ref iter);
-						} else
-							model.AppendValues (s);
-					}
-					
-					// remove rows, that are not used
-					while (model.IterIsValid(iter)) {
-						model.Remove (ref iter);
-					}
-					
-					index_of_expander++;
-				}
-			}
-			
-			
-			// Write Extended Metadata
-			if (photo != null) {
-				MetadataStore store = new MetadataStore ();
-				try {
-					using (var img = ImageFile.Create (photo.DefaultVersion.Uri)) {
-						if (img is SemWeb.StatementSource) {
-							StatementSource source = (StatementSource)img;
-							source.Select (store);
-						}
-					}
-				} catch (System.IO.FileNotFoundException) {
-					missing = true;
-				} catch (System.Exception e){
-					// Sometimes we don't get the right exception, check for the file
-					if (!System.IO.File.Exists (photo.DefaultVersion.Uri.LocalPath)) {
-						missing = true;
-					} else {
-						// if the file is there but we still got an exception display it.
-						error = e;
-					}
-				}
-				
-				model = extended_metadata;
-				model.GetIterFirst(out iter);
-				
-				if (store.StatementCount > 0) {
-					empty = false;
-
-					
-					foreach (Statement stmt in store) {
-						// Skip anonymous subjects because they are
-						// probably part of a collection
-						if (stmt.Subject.Uri == null && store.SelectSubjects (null, stmt.Subject).Length > 0)
-							continue;
-						
-						string title;
-						string value;
-						string s;
-
-						Description.GetDescription (store, stmt, out title, out value);
-						
-						if (value == null)
-						{
-							MemoryStore substore = store.Select (new Statement ((Entity)stmt.Object, null, null, null)).Load();
-							StringBuilder collection = new StringBuilder ();
-							collection.Append (title);
-							WriteCollection (substore, collection);
-							if (model.IterIsValid(iter))
-							{
-								model.SetValue (iter, 0, collection.ToString ());
-								model.IterNext(ref iter);
-							} else
-								model.AppendValues (collection.ToString ());
-						} else {
-							s = String.Format ("{0}\n\t<small>{1}</small>", title, value);
-							if (model.IterIsValid(iter))
-							{
-								model.SetValue (iter, 0, s);
-								model.IterNext(ref iter);
-							} else
-								model.AppendValues (s);
-						}
-					}
-					
-				} else {
-					// clear Extended Metadata
-					String s = String.Format ("<small>{0}</small>", Catalog.GetString ("No Extended Metadata Available"));
-					if (model.IterIsValid(iter))
-					{
-						model.SetValue (iter, 0, s);
-						model.IterNext(ref iter);
-					} else
-						model.AppendValues (s);
-				}
-				
-				// remove rows, that are not used
-				while (model.IterIsValid(iter)) {
-					model.Remove (ref iter);
-				}
-			}*/
-			
-			if (empty) {
-				string msg;
-				if (photo == null) {
-				     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");
-
-					if (error != null) {
-						msg = String.Format ("<i>{0}</i>", error);
-					}
-				}
-				
-				metadata_message.Markup = "<span weight=\"bold\">" + msg + "</span>";
-				
-				if (display == State.metadata) {
-					// Child is a Viewport, (AddWithViewport in ctor)
-					((Viewport)Child).Remove (main_vbox);
-					((Viewport)Child).Add (metadata_message);
-					display = State.message;
-					metadata_message.Show ();
-				}
-			} else {
-				// remove Expanders, that are not used
-				while (index_of_expander < metadata_vbox.Children.Length)
-					metadata_vbox.Remove (metadata_vbox.Children[index_of_expander]);
-				
-				if (display == State.message) {
-					// Child is a Viewport, (AddWithViewport in ctor)
-					((Viewport)Child).Remove (metadata_message);
-					((Viewport)Child).Add (main_vbox);
-					display = State.metadata;
-					main_vbox.ShowAll ();
-				}
-			}
-			
-			return false;		
-		}
-		
-        /*
-		private void WriteCollection (MemoryStore substore, StringBuilder collection)
-		{
-			string type = null;
-
-			foreach (Statement stmt in substore) {
-				if (stmt.Predicate.Uri == MetadataStore.Namespaces.Resolve ("rdf:type")) {
-					string prefix;
-					MetadataStore.Namespaces.Normalize (stmt.Object.Uri, out prefix, out type);
-				}
-			}
-			
-			foreach (Statement sub in substore) {
-				if (sub.Object is SemWeb.Literal) {
-					string title;
-					string value = ((SemWeb.Literal)sub.Object).Value;
-					
-					Description.GetDescription (substore, sub, out title, out value);
-
-					if (type == null) 
-						collection.AppendFormat ("\n\t<small>{0}: {1}</small>", title, value);
-					else
-						collection.AppendFormat ("\n\t<small>{0}</small>", value);
-					
-				} else {
-					if (type == null) {
-						MemoryStore substore2 = substore.Select (new Statement ((Entity)sub.Object, null, null, null)).Load();
-						if (substore.StatementCount > 0)
-							WriteCollection (substore2, collection);
-					}
-				}
-			}
-		}*/
-	}
-}
diff --git a/src/Widgets/PanZoom.cs b/src/Widgets/PanZoom.cs
deleted file mode 100644
index cc7cf28..0000000
--- a/src/Widgets/PanZoom.cs
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * PanZoom.cs
- *
- * Copyright 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- *  See COPYING for License information.
- *
- */
-using System;
-using Cairo;
-using Gtk;
-
-namespace FSpot.Widgets {		
-	public class PanZoomOld : ITransition {
-		ImageInfo info;
-		TimeSpan duration = new TimeSpan (0, 0, 7);
-		double pan_x;
-		double pan_y;
-		double x_offset;
-		double y_offset;
-		DateTime start;
-		int frames = 0;
-		double zoom;
-		
-		public PanZoomOld (ImageInfo info)
-		{
-			this.info = info;
-		}
-		
-		public int Frames {
-			get { return frames; }
-		}
-		
-		public bool OnEvent (Widget w)
-		{
-			if (frames == 0) {
-				start = DateTime.UtcNow;
-				Gdk.Rectangle viewport = w.Allocation;
-				
-				zoom = Math.Max (viewport.Width / (double) info.Bounds.Width,
-						 viewport.Height / (double) info.Bounds.Height);
-				
-				zoom *= 1.2;		     
-				
-				x_offset = (viewport.Width - info.Bounds.Width * zoom);
-				y_offset = (viewport.Height - info.Bounds.Height * zoom);
-				
-				pan_x = 0;
-				pan_y = 0;
-				w.QueueDraw ();
-			}
-			frames ++;
-			
-			double percent = Math.Min ((DateTime.UtcNow - start).Ticks / (double) duration.Ticks, 1.0);
-			
-			double x = x_offset * percent;
-			double y = y_offset * percent;
-
-			if (w.IsRealized){
-				w.GdkWindow.Scroll ((int)(x - pan_x), (int)(y - pan_y));
-				pan_x = x;
-				pan_y = y;
-				//w.GdkWindow.ProcessUpdates (false);
-			}
-			
-			return percent < 1.0;
-		}
-		
-		public bool OnExpose (Context ctx, Gdk.Rectangle viewport)
-		{
-			double percent = Math.Min ((DateTime.UtcNow - start).Ticks / (double) duration.Ticks, 1.0);
-			
-			//Matrix m = info.Fill (allocation);
-			Matrix m = new Matrix ();
-			m.Translate (pan_x, pan_y);
-			m.Scale (zoom, zoom);
-			ctx.Matrix = m;
-			
-			SurfacePattern p = new SurfacePattern (info.Surface);
-			ctx.Source = p;
-			ctx.Paint ();
-			p.Destroy ();
-			
-			return percent < 1.0;
-		}
-		
-		public void Dispose ()
-		{
-			//info.Dispose ();
-		}
-	}
-	
-	public class PanZoom : ITransition {
-		ImageInfo info;
-		ImageInfo buffer;
-		TimeSpan duration = new TimeSpan (0, 0, 7);
-		int pan_x;
-		int pan_y;
-		DateTime start;
-		int frames = 0;
-		double zoom;
-		
-		public PanZoom (ImageInfo info)
-		{
-			this.info = info;
-		}
-		
-		public int Frames {
-			get { return frames; }
-		}
-		
-		public bool OnEvent (Widget w)
-		{
-			Gdk.Rectangle viewport = w.Allocation;
-			if (buffer == null) {
-				double scale = Math.Max (viewport.Width / (double) info.Bounds.Width,
-							 viewport.Height / (double) info.Bounds.Height);
-				
-				scale *= 1.2;		     
-				buffer = new ImageInfo (info, w, 
-							new Gdk.Rectangle (0, 0, 
-									   (int) (info.Bounds.Width * scale), 
-									   (int) (info.Bounds.Height * scale)));
-				start = DateTime.UtcNow;
-				//w.QueueDraw ();
-				zoom = 1.0;
-			}
-			
-			double percent = Math.Min ((DateTime.UtcNow - start).Ticks / (double) duration.Ticks, 1.0);
-			
-			int n_x = (int) Math.Floor ((buffer.Bounds.Width - viewport.Width) * percent);
-			int n_y = (int) Math.Floor ((buffer.Bounds.Height - viewport.Height) * percent);
-			
-			if (n_x != pan_x || n_y != pan_y) {
-				//w.GdkWindow.Scroll (- (n_x - pan_x), - (n_y - pan_y));
-				w.QueueDraw ();
-				w.GdkWindow.ProcessUpdates (false);
-				//Log.Debug ("{0} {1} elapsed", DateTime.UtcNow, DateTime.UtcNow - start);
-			}
-			pan_x = n_x;
-			pan_y = n_y;
-			
-			return percent < 1.0;
-		}
-		
-		public bool OnExpose (Context ctx, Gdk.Rectangle viewport)
-		{
-			double percent = Math.Min ((DateTime.UtcNow - start).Ticks / (double) duration.Ticks, 1.0);
-			frames ++;
-			
-			//ctx.Matrix = m;
-			
-			SurfacePattern p = new SurfacePattern (buffer.Surface);
-			p.Filter = Filter.Fast;
-			Matrix m = new Matrix ();
-			m.Translate (pan_x * zoom, pan_y * zoom);
-			m.Scale (zoom, zoom);
-			zoom *= .98;
-			p.Matrix = m;
-			ctx.Source = p;
-			ctx.Paint ();
-			p.Destroy ();
-			
-			return percent < 1.0;
-		}
-		
-		public void Dispose ()
-		{
-			buffer.Dispose ();
-		}
-	}
-}
diff --git a/src/Widgets/PreviewPopup.cs b/src/Widgets/PreviewPopup.cs
deleted file mode 100644
index dba727b..0000000
--- a/src/Widgets/PreviewPopup.cs
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- *
- * Author(s)
- *
- *   Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details
- *
- */
-
-using System;
-using Cairo;
-using Gdk;
-using FSpot.Widgets;
-using FSpot.Utils;
-
-namespace FSpot {
-	public class PreviewPopup : Gtk.Window {
-		private IconView view;
-		private Gtk.Image image;
-		private Gtk.Label label;
-
-		private bool show_histogram;
-		public bool ShowHistogram {
-			get {
-				return show_histogram;
-			}
-			set {
-				if (value != show_histogram)
-					item = -1;
-				show_histogram = value;
-			}
-		}
-					
-		private FSpot.Histogram hist;
-		private DisposableCache<string, Pixbuf> preview_cache = new DisposableCache<string, Pixbuf> (50);
-
-		private int item = -1;
-		public int Item {
-			get {
-				return item;
-			}
-			set {
-				if (value != item) {
-					item = value;
-					UpdateImage ();
-				}
-				UpdatePosition ();
-			}
-		}
-
-		private void AddHistogram (Gdk.Pixbuf pixbuf)
-		{
-			if (show_histogram) {
-				Gdk.Pixbuf image = hist.Generate (pixbuf);
-				double scalex = 0.5;
-				double scaley = 0.5;
-				
-				int width = (int)(image.Width * scalex);
-				int height = (int)(image.Height * scaley);
-				
-				image.Composite (pixbuf, 
-						 pixbuf.Width - width - 10, pixbuf.Height - height - 10,
-						 width, height, 
-						 pixbuf.Width - width - 10, pixbuf.Height - height - 10,
-						 scalex, scaley, 
-						 Gdk.InterpType.Bilinear, 200);
-			}
-		}
-
-		protected override void OnRealized ()
-		{
-			bool composited = CompositeUtils.IsComposited (Screen) && CompositeUtils.SetRgbaColormap (this);
-			AppPaintable = composited;
-			base.OnRealized ();
-		}
-
-
-		protected override bool OnExposeEvent (Gdk.EventExpose args)
-		{
-			int round = 12;
-			Context g = Gdk.CairoHelper.Create (GdkWindow);
-			g.Operator = Operator.Source;
-			g.Source = new SolidPattern (new Cairo.Color (0, 0, 0, 0));
-			g.Paint ();
-			g.Operator = Operator.Over;
-#if true
-			g.Source = new SolidPattern (new Cairo.Color (0, 0, 0, .7));
-			g.MoveTo (round, 0);
-			//g.LineTo (Allocation.Width - round, 0);
-			g.Arc (Allocation.Width - round, round, round, - Math.PI * 0.5, 0);
-			//g.LineTo (Allocation.Width, Allocation.Height - round);
-			g.Arc (Allocation.Width - round, Allocation.Height - round, round, 0, Math.PI * 0.5);
-			//g.LineTo (round, Allocation.Height);
-			g.Arc (round, Allocation.Height - round, round, Math.PI * 0.5, Math.PI);
-			g.Arc (round, round, round, Math.PI, Math.PI * 1.5);
-			g.ClosePath ();
-			g.Fill ();
-#endif
-			((IDisposable)g).Dispose ();
-			return base.OnExposeEvent (args);
-		}
-
-		private void UpdateImage ()
-		{
-			FSpot.IBrowsableItem item = view.Collection [Item];
-			
-			string orig_path = item.DefaultVersion.Uri.LocalPath;
-
-			Gdk.Pixbuf pixbuf = FSpot.Utils.PixbufUtils.ShallowCopy (preview_cache.Get (orig_path + show_histogram.ToString ()));
-			if (pixbuf == null) {
-				// A bizarre pixbuf = hack to try to deal with cinematic displays, etc.
-				int preview_size = ((this.Screen.Width + this.Screen.Height)/2)/3;
-				try {
-					pixbuf = FSpot.PhotoLoader.LoadAtMaxSize (item, preview_size, preview_size);
-				} catch (Exception) {
-					pixbuf = null;
-				}
-
-				if (pixbuf != null) {
-					preview_cache.Add (orig_path + show_histogram.ToString (), pixbuf);
-					AddHistogram (pixbuf);
-					image.Pixbuf = pixbuf;
-				} else {
-					image.Pixbuf = PixbufUtils.ErrorPixbuf;
-				}
-			} else {
-				image.Pixbuf = pixbuf;
-				pixbuf.Dispose ();
-			}
-
-			string desc = String.Empty;
-			if (item.Description != null && item.Description.Length > 0)
-				desc = item.Description + Environment.NewLine;
-
-			desc += item.Time.ToString () + "   " + item.Name;			
-			label.Text = desc;
-		}
-
-	
-		private void UpdatePosition ()
-		{
-			int x, y;
-			Gdk.Rectangle bounds = view.CellBounds (this.Item);
-
-			Gtk.Requisition requisition = this.SizeRequest ();
-			this.Resize (requisition.Width, requisition.Height);
-
-			view.GdkWindow.GetOrigin (out x, out y);
-
-			// Acount for scrolling
-			bounds.X -= (int)view.Hadjustment.Value;
-			bounds.Y -= (int)view.Vadjustment.Value;
-
-			// calculate the cell center
-			x += bounds.X + (bounds.Width / 2);
-			y += bounds.Y + (bounds.Height / 2);
-			
-			// find the window's x location limiting it to the screen
-			x = Math.Max (0, x - requisition.Width / 2);
-			x = Math.Min (x, this.Screen.Width - requisition.Width);
-
-			// find the window's y location offset above or below depending on space
-#if USE_OFFSET_PREVIEW
-			int margin = (int) (bounds.Height * .6);
-			if (y - requisition.Height - margin < 0)
-				y += margin;
-			else
-				y = y - requisition.Height - margin;
-#else 
-			y = Math.Max (0, y - requisition.Height / 2);
-			y = Math.Min (y, this.Screen.Height - requisition.Height);
-#endif			
-
-			this.Move (x, y);
-		}
-		
-		private void UpdateItem (int x, int y)
-		{
-			int item = view.CellAtPosition (x, y);
-			if (item >= 0) {
-				this.Item = item;
-				Show ();
-			} else {
-				this.Hide ();
-			}
-		}
-		
-	        private void UpdateItem ()
-		{
-			int x, y;
-			view.GetPointer (out x, out y);
-			x += (int) view.Hadjustment.Value;
-			y += (int) view.Vadjustment.Value;
-			UpdateItem (x, y);
-			
-		}
-
-		private void HandleIconViewMotion (object sender, Gtk.MotionNotifyEventArgs args)
-		{
-			if (!this.Visible)
-				return;
-
-			int x = (int) args.Event.X;
-			int y = (int) args.Event.Y;
-			view.GrabFocus ();
-			UpdateItem (x, y);
-		}
-
-		private void HandleIconViewKeyPress (object sender, Gtk.KeyPressEventArgs args)
-		{
-			switch (args.Event.Key) {
-			case Gdk.Key.v:
-				ShowHistogram = false;
-				UpdateItem ();
-				args.RetVal = true;
-				break;
-			case Gdk.Key.V:
-				ShowHistogram = true;
-				UpdateItem ();
-				args.RetVal = true;
-				break;
-			}
-		}
-
-		private void HandleKeyRelease (object sender, Gtk.KeyReleaseEventArgs args)
-		{
-			switch (args.Event.Key) {
-			case Gdk.Key.v:
-			case Gdk.Key.V:
-			case Gdk.Key.h:
-				this.Hide ();
-				break;
-			}
-		}
-		
-		private void HandleButtonPress (object sender, Gtk.ButtonPressEventArgs args)
-		{
-			this.Hide ();
-		}
-
-		private void HandleIconViewDestroy (object sender, Gtk.DestroyEventArgs args)
-		{
-			this.Destroy ();
-		}
-
-		private void HandleDestroyed (object sender, System.EventArgs args)
-		{
-			this.preview_cache.Dispose ();
-		}
-
-		protected override bool OnMotionNotifyEvent (Gdk.EventMotion args)
-		{
-			//
-			// We look for motion events on the popup window so that
-			// if the pointer manages to get over the window we can
-			// Update the image properly and/or get out of the way.
-			//
-			UpdateItem ();
-			return false;
-		}
-
-		public PreviewPopup (IconView view) : base (Gtk.WindowType.Toplevel)
-		{	
-			Gtk.VBox vbox = new Gtk.VBox ();
-			this.Add (vbox);
-			this.AddEvents ((int) (Gdk.EventMask.PointerMotionMask | 
-					       Gdk.EventMask.KeyReleaseMask | 
-					       Gdk.EventMask.ButtonPressMask));
-
-			this.Decorated = false;
-			this.SkipTaskbarHint = true;
-			this.SkipPagerHint = true;
-			this.SetPosition (Gtk.WindowPosition.None);
-			
-			this.KeyReleaseEvent += HandleKeyRelease;
-			this.ButtonPressEvent += HandleButtonPress;
-			this.Destroyed += HandleDestroyed;
-
-			this.view = view;
-			view.MotionNotifyEvent += HandleIconViewMotion;
-			view.KeyPressEvent += HandleIconViewKeyPress;
-			view.KeyReleaseEvent += HandleKeyRelease;
-			view.DestroyEvent += HandleIconViewDestroy;
-
-			this.BorderWidth = 6;
-
-			hist = new FSpot.Histogram ();
-			hist.RedColorHint = 127;
-			hist.GreenColorHint = 127;
-			hist.BlueColorHint = 127;
-			hist.BackgroundColorHint = 0xff;
-
-			image = new Gtk.Image ();
-			image.CanFocus = false;
-
-
-			label = new Gtk.Label (String.Empty);
-			label.CanFocus = false;
-			label.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
-			label.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
-
-			this.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
-			this.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
-
-			vbox.PackStart (image, true, true, 0);
-			vbox.PackStart (label, true, false, 0);
-			vbox.ShowAll ();
-		}
-	}
-}
diff --git a/src/Widgets/Push.cs b/src/Widgets/Push.cs
deleted file mode 100644
index 3420956..0000000
--- a/src/Widgets/Push.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Push.cs
- *
- * Copyright 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- * See COPYING for license information.
- *
- */
-using System;
-using Cairo;
-using Gtk;
-
-namespace FSpot.Widgets {
-	public class Push : ITransition {
-		DateTime start;
-		TimeSpan duration = new TimeSpan (0, 0, 2);
-		ImageInfo end;
-		ImageInfo begin;
-		ImageInfo end_buffer;
-		ImageInfo begin_buffer;
-		double fraction;
-		int frames;
-		
-		public int Frames {
-			get { return frames; }
-		}
-		
-		public Push (ImageInfo begin, ImageInfo end)
-		{
-			this.begin = begin;
-			this.end = end;
-		}
-		
-		public bool OnEvent (Widget w)
-		{
-			if (begin_buffer == null) {
-				begin_buffer = new ImageInfo (begin, w); //.Allocation);
-			}
-			
-			if (end_buffer == null) {
-				end_buffer = new ImageInfo (end, w); //.Allocation);
-				start = DateTime.UtcNow;
-			}
-			
-			w.QueueDraw ();
-			
-			TimeSpan elapsed = DateTime.UtcNow - start;
-			fraction = elapsed.Ticks / (double) duration.Ticks; 
-			
-			frames++;
-			
-			return fraction < 1.0;
-		}
-		
-		public bool OnExpose (Context ctx, Gdk.Rectangle allocation)
-		{
-			fraction = Math.Min (fraction, 1.0);
-			
-			ctx.Operator = Operator.Source;
-			Matrix em = end_buffer.Fill (allocation);
-			em.Translate (Math.Round (allocation.Width - allocation.Width * fraction), 0);
-			ctx.Matrix = em;
-			SurfacePattern sur = new SurfacePattern (end_buffer.Surface);
-			sur.Filter = Filter.Fast;
-			ctx.Source = sur;
-			ctx.Paint ();
-			sur.Destroy ();
-			
-			ctx.Operator = Operator.Over;
-			SurfacePattern p = new SurfacePattern (begin_buffer.Surface);
-			Matrix m = begin_buffer.Fill (allocation);
-			m.Translate (Math.Round (- allocation.Width * fraction), 0);
-			ctx.Matrix = m;
-			p.Filter = Filter.Fast;
-			ctx.Source = p;
-			ctx.Paint ();
-			p.Destroy ();
-			
-			return fraction < 1.0;
-		}
-		
-		public void Dispose ()
-		{
-			end_buffer.Dispose ();
-			begin_buffer.Dispose ();
-		}
-	}
-}
diff --git a/src/Widgets/PushTransition.cs b/src/Widgets/PushTransition.cs
deleted file mode 100644
index 2a54484..0000000
--- a/src/Widgets/PushTransition.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// FSpot.Widgets.PushTransition.cs
-//
-// Author(s):
-//	Stephane Delcroix  <stephane at delcroix.org>
-//
-// Copyright (c) 2009 Novell, Inc.
-//
-// This is open source software. See COPYING for details.
-//
-
-using System;
-
-using Cairo;
-using Gdk;
-
-using FSpot.Utils;
-
-using Color = Cairo.Color;
-
-namespace FSpot.Widgets
-{
-	public class PushTransition : CairoTransition
-	{
-		public PushTransition () : base ("Push")
-		{
-		}
-
-		protected override void Draw (Context cr, Pixbuf prev, Pixbuf next, int width, int height, double progress)
-		{
-			cr.Color = new Color (0, 0, 0);
-			if (prev != null) {
-				double scale = Math.Min ((double)width/(double)prev.Width, (double)height/(double)prev.Height);
-				cr.Save ();
-				cr.Translate (-progress * width, 0);
-
-				cr.Rectangle (0, 0, width, .5 * (height - scale*prev.Height));
-				cr.Fill ();
-
-				cr.Rectangle (0, height - .5 * (height - scale*prev.Height), width, .5 * (height - scale*prev.Height));
-				cr.Fill ();
-
-				cr.Rectangle (0, 0, .5 * (width - scale*prev.Width), height);
-				cr.Fill ();
-
-				cr.Rectangle (width - .5 * (width - scale*prev.Width), 0, .5 * (width - scale*prev.Width), height);
-				cr.Fill ();
-
-				cr.Rectangle (0, 0, width, height);
-				cr.Scale (scale, scale);
-				CairoHelper.SetSourcePixbuf (cr, prev, .5 * ((double)width/scale - prev.Width), .5 * ((double)height/scale - prev.Height));
-				cr.Fill ();
-				cr.Restore ();
-			}
-			if (next != null) {
-				double scale = Math.Min ((double)width/(double)next.Width, (double)height/(double)next.Height);
-				cr.Save ();
-				cr.Translate (width * (1.0 - progress), 0);
-
-				cr.Rectangle (0, 0, width, .5 * (height - scale*next.Height));
-				cr.Fill ();
-
-				cr.Rectangle (0, height - .5 * (height - scale*next.Height), width, .5 * (height - scale*next.Height));
-				cr.Fill ();
-
-				cr.Rectangle (0, 0, .5 * (width - scale*next.Width), height);
-				cr.Fill ();
-
-				cr.Rectangle (width - .5 * (width - scale*next.Width), 0, .5 * (width - scale*next.Width), height);
-				cr.Fill ();
-
-				cr.Rectangle (0, 0, width, height);
-				cr.Scale (scale, scale);
-				CairoHelper.SetSourcePixbuf (cr, next, .5 * ((double)width/scale - next.Width), .5 * ((double)height/scale - next.Height));
-				cr.Fill ();
-				cr.Restore ();
-			}
-		}
-	}
-}
diff --git a/src/Widgets/QueryView.cs b/src/Widgets/QueryView.cs
deleted file mode 100644
index 6aaa08a..0000000
--- a/src/Widgets/QueryView.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// QueryView.cs
-//
-// Copyright (C) 2004 Novell, Inc.
-//
-
-namespace FSpot.Widgets
-{
-	public class QueryView : IconView {
-		public QueryView (System.IntPtr raw) : base (raw) {}
-	
-		public QueryView (FSpot.IBrowsableCollection query) : base (query) {}
-	
-		protected override bool OnPopupMenu ()
-		{
-			PhotoPopup popup = new PhotoPopup ();
-			popup.Activate ();
-			return true;
-		}
-	
-		protected override void ContextMenu (Gtk.ButtonPressEventArgs args, int cell_num)
-		{
-			PhotoPopup popup = new PhotoPopup ();
-			popup.Activate (this.Toplevel, args.Event);
-		}
-	}
-}
diff --git a/src/Widgets/Rating.cs b/src/Widgets/Rating.cs
deleted file mode 100644
index 3030d14..0000000
--- a/src/Widgets/Rating.cs
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * Rating.cs
- *
- * Author[s]
- *    Gabriel Burt (original widget in Banshee)
- *    Cosme Sevestre (original porting to F-Spot)
- *    Stephane Delcroix
- *
- * Copyright (C) 2006 by the respective authors.
- *
- * This is free software, see COPYING for details
- *
- */
-
-using Gtk;
-using Gdk;
-using System;
-using FSpot.Utils;
-
-namespace FSpot.Widgets
-{
-	public class Rating : Gtk.EventBox
-	{
-		int rating;
-		Pixbuf display_pixbuf;
-		public object RatedObject;
-		bool mouse_over;
-		bool editable;
-
-		protected static int max_rating = 5;
-		static Pixbuf icon_rated;
-		static Pixbuf icon_blank;
-
-		public event EventHandler Changed;
-		
-		public Rating () : this (0, true)
-		{
-		}
-
-		public Rating (bool editable) : this (0, editable)
-		{
-		}
-
-		public Rating (int rating) : this (rating, true)
-		{
-		} 
-
-		public Rating (int rating, bool editable)
-		{
-			this.rating = rating;
-			this.editable = editable;
-			
-			MouseOver = false;
-			EnterNotifyEvent += HandleMouseEnter;
-			LeaveNotifyEvent += HandleMouseLeave;
-			
-			VisibleWindow = false;
-			CanFocus = true;
-			
-			display_pixbuf = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, Width, Height);
-			
-			display_pixbuf.Fill (0xffffff00);
-			DrawRating (DisplayPixbuf, Value);
-			Add (new Gtk.Image (display_pixbuf));
-			
-			ShowAll ();
-		}
-		
-		~Rating ()
-		{
-			display_pixbuf.Dispose ();
-			display_pixbuf = null;
-			
-			icon_rated = null;
-			icon_blank = null;
-		}
-		
-		public Pixbuf DrawRating (int val)
-		{
-			Pixbuf buf = new Pixbuf (Gdk.Colorspace.Rgb, true, 8, Width, Height);
-			DrawRating (buf, val);
-			return buf;
-		}
-		
-		public virtual void DrawRating (Pixbuf pbuf, int val)
-		{
-			// Clean pixbuf
-			pbuf.Fill (0xffffff00);
-			
-			//Stars
-			for (int i = 0; i < MaxRating; i ++)
-				if (i <= val - 1)
-					IconRated.CopyArea (0, 0, IconRated.Width, IconRated.Height, 
-							pbuf, (i + 1) * IconRated.Width, 0);
-				else {
-					IconNotRated.CopyArea (0, 0, IconRated.Width, IconRated.Height, 
-							pbuf, (i + 1) * IconRated.Width, 0);
-				}
-		}
-
-		public void SetValueFromPosition (int x)
-		{
-			Value = RatingFromPosition (x);
-		}
-		
-		public virtual int RatingFromPosition (double x)
-		{
-			int pos = (int) (x / (double) IconRated.Width);
-			
-			return pos;
-		}
-		
-		private void HandleMouseEnter (object sender, EventArgs args)
-		{
-			mouse_over = true;
-			Redraw ();
-		}
-		
-		private void HandleMouseLeave (object sender, EventArgs args)
-		{
-			mouse_over = false;
-			Redraw ();
-		}
-		
-		// Event Handlers
-		[GLib.ConnectBefore]
-		protected override bool OnButtonPressEvent (Gdk.EventButton eb)
-		{
-			if (editable) {
-				if (eb.Button != 1)
-					return false;
-			
-				Value = RatingFromPosition (eb.X);
-			}
-			return true;
-		}
-		
-		public bool HandleKeyPress (Gdk.EventKey ek)
-		{
-			return this.OnKeyPressEvent (ek);
-		}
-		
-		[GLib.ConnectBefore]
-		protected override bool OnKeyPressEvent (Gdk.EventKey ek)
-		{
-			if (editable) {
-				switch (ek.Key) {
-				case Gdk.Key.Up:
-				case Gdk.Key.Right:
-				case Gdk.Key.plus:
-				case Gdk.Key.equal:
-					Value ++;
-					return true;
-					
-				case Gdk.Key.Down:
-				case Gdk.Key.Left:
-				case Gdk.Key.minus:
-					Value --;
-					return true;
-				}
-				
-				if (ek.KeyValue >= (48 + 1) &&
-				       ek.KeyValue <= (48 + MaxRating) &&
-				       ek.KeyValue <= 59) {
-					Value = (int) ek.KeyValue - 48;
-					return true;
-				}
-				
-				return false;
-			} else
-				return true;
-		}
-		
-		[GLib.ConnectBefore]
-		protected override bool OnScrollEvent (EventScroll args)
-		{
-			return HandleScroll (args);
-		}
-
-		public bool HandleScroll (EventScroll args)
-		{
-			if (editable) {
-				switch (args.Direction) {
-				case Gdk.ScrollDirection.Up:
-				case Gdk.ScrollDirection.Right:
-					Value ++;
-					return true;
-					
-				case Gdk.ScrollDirection.Down:
-				case Gdk.ScrollDirection.Left:
-					Value --;
-					return true;
-				}
-				
-				return false;
-			} else
-				return true;
-		}
-		
-		[GLib.ConnectBefore]
-		protected override bool OnMotionNotifyEvent (Gdk.EventMotion evnt)
-		{
-			if (editable) {
-				// TODO draw highlights onmouseover a rating? (and clear on leaveNotify)
-				if (evnt.State != Gdk.ModifierType.Button1Mask)
-					return false;
-			
-				Value = RatingFromPosition (evnt.X);
-			}
-			return true;
-		}
-		
-		[GLib.ConnectBefore]
-		protected override bool OnFocusInEvent (Gdk.EventFocus evnt)
-		{
-			return true;
-		}
-		
-		[GLib.ConnectBefore]
-		protected override bool OnFocused (DirectionType direction)
-		{
-			return true;
-		}
-
-		private void Redraw()
-		{
-			DrawRating (DisplayPixbuf, Value);
-			QueueDraw ();
-		}
-
-		// Event Changed Dispatcher
-		private void OnChanged ()
-		{
-			Redraw();
-			EventHandler changed = Changed;
-			
-			if (changed != null)
-				changed (this, new EventArgs ());
-		}
-		
-		// Properties
-		public int Value {
-			get { return rating; }
-			
-			set {
-				// Same rating
-				if (rating == value)
-					return;
-				// Remove.trash.1-5 rating
-				if (value >= 0 && value <= max_rating) {
-					rating = value;
-					OnChanged ();
-				}
-			}
-		}
-		
-		public Pixbuf DisplayPixbuf {
-			get { return display_pixbuf; }
-		}
-		
-		public bool MouseOver {
-			get { return mouse_over; }
-			set { mouse_over = value; }
-		}
-		
-		public int MaxRating {
-			get { return max_rating; }
-		}
-		
-		public virtual int NumLevels {
-			get { return max_rating + 1; }
-		}
-		
-		public virtual Pixbuf IconRated {
-			get {
-				if (icon_rated == null)
-					icon_rated = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "rating-rated", 16, (Gtk.IconLookupFlags)0);
-				
-				return icon_rated;
-			}
-			
-			set { icon_rated = value; }
-		}
-		
-		public virtual Pixbuf IconNotRated {
-			get {
-				if (icon_blank == null)
-					icon_blank = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "rating-blank", 16, (Gtk.IconLookupFlags)0);
-				
-				return icon_blank;
-			}
-			
-			set { icon_blank = value; }
-		}
-		
-		public virtual int Width {
-			get { return IconRated.Width * NumLevels; }
-		}
-		
-		public virtual int Height {
-			get { return IconRated.Height; }
-		}
-	}
-
-	public class RatingSmall : Rating
-	{
-		static Pixbuf icon_rated_small;
-		static Pixbuf icon_blank_small;
-		
-		public RatingSmall () : base (0)
-		{
-		}
-
-		public RatingSmall (int rating) : base (rating) 
-		{
-		}
-
-		public RatingSmall (bool editable) : base (editable)
-		{
-		}
-
-		public RatingSmall (int rating, bool editable) : base (rating, editable)
-		{
-		}
-
-		public override void DrawRating (Pixbuf pbuf, int val)
-		{
-			// Clean pixbuf
-			pbuf.Fill (0xffffff00);
-			
-			//Stars
-			for (int i = 0; i < MaxRating; i ++)
-				if (i <= val - 1)
-					IconRated.CopyArea (0, 0, IconRated.Width, IconRated.Height, 
-							pbuf, i * IconRated.Width, 0);
-		}
-		
-		public override Pixbuf IconRated {
-			get {
-				if (icon_rated_small == null)
-					icon_rated_small = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "rating-rated", 16, (Gtk.IconLookupFlags)0);
-				
-				return icon_rated_small;
-			}
-		}
-		
-		public override Pixbuf IconNotRated {
-			get {
-				if (icon_blank_small == null)
-					icon_blank_small = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "rating-blank", 16, (Gtk.IconLookupFlags)0);
-				
-				return icon_blank_small;
-			}
-		}
-		
-		public override int NumLevels {
-			get { return max_rating; }
-		}
-		
-		public override int RatingFromPosition (double x)
-		{
-			return base.RatingFromPosition (x) + 1;
-		}
-	}
-}
diff --git a/src/Widgets/RatingMenuItem.cs b/src/Widgets/RatingMenuItem.cs
deleted file mode 100644
index 53d8f99..0000000
--- a/src/Widgets/RatingMenuItem.cs
+++ /dev/null
@@ -1,158 +0,0 @@
-//
-// RatingMenuItem.cs
-//
-// Author:
-//   Aaron Bockover <abockover at novell.com>
-//
-// Copyright (C) 2007 Novell, Inc.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using Gtk;
-using Mono.Unix;
-using Hyena;
-
-namespace FSpot.Widgets
-{
-	public class RatingMenuItem : ComplexMenuItem
-	{
-		private Rating entry;
-		private bool pressing;
-		private bool can_activate = true;
-
-		protected RatingMenuItem (IntPtr raw) : base (raw) 
-		{
-		}
-
-		public RatingMenuItem () : this (null)
-		{
-		}
-
-		public RatingMenuItem (object parent) : base ()
-		{
-			HBox box = new HBox ();
-			box.Spacing = 5;
-
-			Label label = new Label ();
-			label.Markup = String.Format ("<i>{0}</i>",
-					GLib.Markup.EscapeText (Catalog.GetString ("Rating:")));
-			box.PackStart (label, false, false, 0);
-
-			if (parent is FullScreenView) {
-				Log.Debug ("PARENT IS FSVIEW");
-				FullScreenView fsview = parent as FullScreenView;
-				entry = new Rating ((int)fsview.View.Item.Current.Rating, true);
-			} else if (App.Instance.Organizer.Selection.Count == 1)
-				entry = new Rating ((int)App.Instance.Organizer.Selection[0].Rating, true);
-			else
-				entry = new Rating (-1, true);
-			entry.Changed += OnEntryChanged;
-			box.PackStart (entry, false, false, 0);
-
-			box.ShowAll ();
-			Add (box);
-		}
-
-		protected override void OnRealized ()
-		{
-			entry.ModifyBg (Gtk.StateType.Prelight, entry.Style.BaseColors [(int)Gtk.StateType.Selected]);
-			base.OnRealized();
-
-		}
-
-		private int TransformX (double inx)
-		{
-			int x = (int)inx - entry.Allocation.X;
-
-			if (x < 0) {
-				x = 0;
-			} else if (x > entry.Allocation.Width) {
-				x = entry.Allocation.Width;
-			}
-
-			return x;
-		}
-
-		protected override bool OnButtonPressEvent (Gdk.EventButton evnt)
-		{
-			pressing = true;
-			entry.SetValueFromPosition (TransformX (evnt.X));
-			return true;
-		}
-
-		protected override bool OnButtonReleaseEvent (Gdk.EventButton evnt)
-		{
-			pressing = false;
-			return true;
-		}
-
-		protected override bool OnMotionNotifyEvent (Gdk.EventMotion evnt)
-		{
-			if (!pressing) {
-				return false;
-			}
-
-			entry.SetValueFromPosition (TransformX (evnt.X));
-			return true;
-		}
-
-		protected override bool OnLeaveNotifyEvent (Gdk.EventCrossing evnt)
-		{
-			pressing = false;
-			return true;
-		}
-
-		protected override bool OnScrollEvent (Gdk.EventScroll evnt)
-		{
-			return entry.HandleScroll (evnt);
-		}
-
-		protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
-		{
-			return entry.HandleKeyPress (evnt);
-		}
-
-		private void OnEntryChanged (object o, EventArgs args)
-		{
-			if (can_activate) {
-				Activate ();
-				OnChanged (o, args);
-			}
-		}
-
-		public void Reset (int value)
-		{
-			can_activate = false;
-			Value = value;
-			can_activate = true;
-		}
-
-		public int Value {
-			get { return entry.Value; }
-			set { entry.Value = value; }
-		}
-
-		public Rating RatingEntry {
-			get { return entry; }
-		}
-	}
-}
diff --git a/src/Widgets/Reveal.cs b/src/Widgets/Reveal.cs
deleted file mode 100644
index 8f61d30..0000000
--- a/src/Widgets/Reveal.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Reveal.cs
- * 
- * Copyright 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- * 
- * See COPYING for license information.
- *
- */
-using System;
-using Cairo;
-using Gtk;
-
-namespace FSpot.Widgets {
-	public class Reveal : ITransition {
-		DateTime start;
-		TimeSpan duration = new TimeSpan (0, 0, 2);
-		ImageInfo end;
-		ImageInfo begin;
-		ImageInfo end_buffer;
-		ImageInfo begin_buffer;
-		double fraction;
-		int frames;
-		
-		public int Frames {
-			get { return frames; }
-		}
-
-		public Reveal (ImageInfo begin, ImageInfo end)
-		{
-			this.begin = begin;
-			this.end = end;
-		}
-		
-		public bool OnEvent (Widget w)
-		{
-			if (begin_buffer == null) {
-				begin_buffer = new ImageInfo (begin, w); //.Allocation);
-			}
-			
-			if (end_buffer == null) {
-				end_buffer = new ImageInfo (end, w); //.Allocation);
-				start = DateTime.UtcNow;
-			}		
-			
-			w.QueueDraw ();
-			
-			TimeSpan elapsed = DateTime.UtcNow - start;
-			fraction = elapsed.Ticks / (double) duration.Ticks; 
-			
-			frames++;
-			
-			return fraction < 1.0;
-		}
-		
-		public bool OnExpose (Context ctx, Gdk.Rectangle allocation)
-		{
-			ctx.Operator = Operator.Source;
-			ctx.Matrix = end_buffer.Fill (allocation);
-			SurfacePattern sur = new SurfacePattern (end_buffer.Surface);
-			ctx.Source = sur;
-			ctx.Paint ();
-			sur.Destroy ();
-			
-			ctx.Operator = Operator.Over;
-			SurfacePattern p = new SurfacePattern (begin_buffer.Surface);
-			Matrix m = begin_buffer.Fill (allocation);
-			m.Translate (Math.Round (- allocation.Width * fraction), 0);
-			ctx.Matrix = m;
-			p.Filter = Filter.Fast;
-			ctx.Source = p;
-			ctx.Paint ();
-			p.Destroy ();
-			
-			return fraction < 1.0;
-		}
-		
-		public void Dispose ()
-		{
-			begin_buffer.Dispose ();
-			end_buffer.Dispose ();
-		}
-	}
-}
diff --git a/src/Widgets/ScalingIconView.cs b/src/Widgets/ScalingIconView.cs
deleted file mode 100644
index bdeb19a..0000000
--- a/src/Widgets/ScalingIconView.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * ScalingIconView.cs
- *
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- *
- * This is free software. See COPYING for details
- */
-namespace FSpot.Widgets {
-	public class ScalingIconView : IconView {
-		public ScalingIconView () : base () { }
- 		public ScalingIconView (IBrowsableCollection collection) : base (collection) { }
-		
-		protected override void UpdateLayout ()
-		{
-			//Log.Debug ("in update layout {0}", Allocation.ToString ());
-
-			int num_thumbnails;
-			if (collection != null)
-				num_thumbnails = collection.Count;
-			else
-				num_thumbnails = 0;
-
-			cells_per_row = System.Math.Max (num_thumbnails, 1);
-			
-			int num_rows = 1;
-			int num_cols = num_thumbnails;
-
-			int available_height = Allocation.Height - 2 * BORDER_SIZE;
-			if (DisplayTags)
-				available_height -= tag_icon_size + tag_icon_vspacing;
-			
-			if (DisplayDates && this.Style != null) {
-				Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription, 
-											  Pango.Language.FromString ("en_US"));
-				available_height -= PangoPixels (metrics.Ascent + metrics.Descent);
-			}
-			
-			thumbnail_width = (int) (available_height / thumbnail_ratio);
-
-			cell_width = ThumbnailWidth + 2 * cell_border_width;
-			cell_height = ThumbnailHeight + 2 * cell_border_width;
-			
-			SetSize (System.Math.Max (((uint) (num_cols * cell_width + 2 * BORDER_SIZE)), (uint)Allocation.Width), (uint) (num_rows * cell_height + 2 * BORDER_SIZE));
-
-			Vadjustment.StepIncrement = cell_height;
-			Vadjustment.Change ();
-
-			Hadjustment.StepIncrement = cell_width;
-			Hadjustment.Change ();
-		}
-#if false		
-		protected override void UpdateLayout ()
-		{
-			if (collection != null) {
-				int total = collection.Count;
-
-				if (total > 0)
-					thumbnail_width = (Allocation.Width - (total * 2 * cell_border_width) - 2 * BORDER_SIZE)/ total;
-			}
-
-			base.UpdateLayout ();
-		}
-#endif
-
-	}
-}
diff --git a/src/Widgets/ScrolledView.cs b/src/Widgets/ScrolledView.cs
deleted file mode 100644
index 27900d2..0000000
--- a/src/Widgets/ScrolledView.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-using Gtk;
-
-namespace FSpot.Widgets {
-	public class ScrolledView : Fixed {
-		private EventBox ebox;
-		private ScrolledWindow scroll;
-		private Delay hide;
-
-		public ScrolledView (IntPtr raw) : base (raw) {}
-
-		public ScrolledView () : base () {
-			scroll = new ScrolledWindow  (null, null);
-			this.Put (scroll, 0, 0);
-			scroll.Show ();
-			
-			//ebox = new BlendBox ();
-			ebox = new EventBox ();
-			this.Put (ebox, 0, 0);
-			ebox.ShowAll ();
-			
-			hide = new Delay (2000, new GLib.IdleHandler (HideControls));
-			this.Destroyed += HandleDestroyed;
-		}
-
-		public bool HideControls ()
-		{
-			return HideControls (false);
-		}
-
-		public bool HideControls (bool force)
-		{
-			int x, y;
-			Gdk.ModifierType type;
-
-			if (!force && IsRealized) {
-				ebox.GdkWindow.GetPointer (out x, out y, out type);
-				if (x < ebox.Allocation.Width && y < ebox.Allocation.Height) {
-					hide.Start ();
-					return true;
-				}
-			}
-
-			hide.Stop ();
-			ebox.Hide ();
-			return false;
-		}
-		
-		public void ShowControls ()
-		{
-			hide.Stop ();
-			hide.Start ();
-			ebox.Show ();
-		}
-
-		private void HandleDestroyed (object sender, System.EventArgs args)
-		{
-			hide.Stop ();
-		}
-
-		public EventBox ControlBox {
-			get {
-				return ebox;
-			}
-		}
-		public ScrolledWindow ScrolledWindow {
-			get {
-				return scroll;
-			}
-		}
-
-		protected override void OnSizeAllocated (Gdk.Rectangle allocation)
-		{
-			scroll.SetSizeRequest (allocation.Width, allocation.Height);
-			base.OnSizeAllocated (allocation);
-		}
-	}
-}
diff --git a/src/Widgets/Sidebar.cs b/src/Widgets/Sidebar.cs
deleted file mode 100644
index 067ad21..0000000
--- a/src/Widgets/Sidebar.cs
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Widgets.Sidebar.cs
- *
- * Author(s)
- * 	Mike Gemuende <mike at gemuende.de>
- *	Stephane Delcroix <stephane at delcroix.org>
- *	Ruben Vermeersch <ruben at savanne.be>
- *
- * This is free software. See COPYING for details.
- */
-
-using FSpot.Extensions;
-using FSpot.Utils;
-using Gtk;
-using Mono.Addins;
-using Mono.Unix;
-using System;
-using System.Collections.Generic;
-
-namespace FSpot.Widgets
-{
-
-	// Decides which sidebar page should be shown for each context. Implemented
-	// using the Strategy pattern, to make it swappable easily, in case the 
-	// default MRUSidebarContextSwitchStrategy is not sufficiently usable.
-	public interface ISidebarContextSwitchStrategy {
-		string PageForContext (ViewContext context);
-
-		void SwitchedToPage (ViewContext context, string name);
-	}
-
-	// Implements a Most Recently Used switching strategy. The last page you used
-	// for a given context is used.
-	public class MRUSidebarContextSwitchStrategy : ISidebarContextSwitchStrategy {
-		public const string PREF_PREFIX = Preferences.APP_FSPOT + "ui/sidebar";
-
-		private string PrefKeyForContext (ViewContext context) {
-			return String.Format ("{0}/{1}", PREF_PREFIX, context);
-		}
-
-		public string PageForContext (ViewContext context) {
-			string name = Preferences.Get<string> (PrefKeyForContext (context));
-			if (name == null) 
-				name = DefaultForContext (context);
-			return name;
-		}
-
-		public void SwitchedToPage (ViewContext context, string name) {
-			Preferences.Set (PrefKeyForContext (context), name);
-		}
-
-		private string DefaultForContext (ViewContext context) {
-			if (context == ViewContext.Edit)
-				return Catalog.GetString ("Edit");
-			// Don't care otherwise, Tags sounds reasonable
-			return Catalog.GetString ("Tags");
-		}
-	}
-
-	public class Sidebar : VBox  {
-		
-		private HBox button_box;
-		public Notebook Notebook { get; private set; }
-		private MenuButton choose_button;
-		private EventBox eventBox;
-		private Menu choose_menu;
-		private List<string> menu_list;
-		private List<string> image_list;
-
-		public event EventHandler CloseRequested;
-
-        	// Selection change events, sidebar pages can subscribed to this.
-		public event IBrowsableCollectionChangedHandler SelectionChanged;
-		public event IBrowsableCollectionItemsChangedHandler SelectionItemsChanged;
-
-		// The photos selected.
-		private IBrowsableCollection selection;
-		public IBrowsableCollection Selection {
-			get { return selection; }
-			private set { selection = value; }
-		}
-
-		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 ISidebarContextSwitchStrategy ContextSwitchStrategy;
-
-		public Sidebar () : base ()
-		{
-			ContextSwitchStrategy = new MRUSidebarContextSwitchStrategy ();
-			ContextChanged += HandleContextChanged;
-
-			button_box = new HBox ();
-			PackStart (button_box, false, false, 0);
-			
-			Notebook = new Notebook ();
-			Notebook.ShowTabs = false;
-			Notebook.ShowBorder = false;
-			PackStart (Notebook, true, true, 0);
-			
-			Button button = new Button ();
-			button.Image = new Image ("gtk-close", IconSize.Button);
-			button.Relief = ReliefStyle.None;
-			button.Pressed += HandleCloseButtonPressed;
-			button_box.PackEnd (button, false, true, 0);
-			
-			choose_button = new MenuButton ();
-			choose_button.Relief = ReliefStyle.None;
-			
-			eventBox = new EventBox ();
-			eventBox.Add (choose_button);
-			
-			button_box.PackStart (eventBox, true, true, 0);
-			
-			choose_menu = new Menu ();
-			choose_button.Menu = choose_menu;
-
-			menu_list = new List<string> ();
-			image_list = new List<string> ();
-		}
-
-		private void HandleContextChanged (object sender, EventArgs args)
-		{
-			// Make sure the ViewModeCondition is set correctly.
-			if (Context == ViewContext.Single)
-				ViewModeCondition.Mode = FSpot.Extensions.ViewMode.Single;
-			else if (Context == ViewContext.Library || Context == ViewContext.Edit)
-				ViewModeCondition.Mode = FSpot.Extensions.ViewMode.Library;
-			else
-				ViewModeCondition.Mode = FSpot.Extensions.ViewMode.Unknown;
-
-			string name = ContextSwitchStrategy.PageForContext (Context);
-			SwitchTo (name);
-		}
-
-		private void HandleCanSelectChanged (object sender, EventArgs args)
-		{
-			//Log.Debug ("Can select changed for {0} to {1}", sender, (sender as SidebarPage).CanSelect);
-		}
-
-		public void AppendPage (Widget widget, string label, string icon_name)
-		{
-			AppendPage (new SidebarPage (widget, label, icon_name));
-		}
-		
-        public void AppendPage (SidebarPage page)
-		{	
-			page.Sidebar = this;
-			page.CanSelectChanged += HandleCanSelectChanged;
-
-			string label = page.Label;
-			string icon_name = page.IconName;
-
-			Notebook.AppendPage (page.SidebarWidget, new Label (label));
-			page.SidebarWidget.Show ();
-			
-			MenuItem item; 
-			if (icon_name == null)
-				item = new MenuItem (label);
-			else {
-				item = new ImageMenuItem (label);
-				(item as ImageMenuItem).Image = new Image ();
-				((item as ImageMenuItem).Image as Image).IconName = icon_name;
-			}
-
-			item.Activated += HandleItemClicked;
-			choose_menu.Append (item);
-			item.Show ();
-			
-			if (Notebook.Children.Length == 1) {
-				choose_button.Label = label;
-				choose_button.Image.IconName = icon_name;
-			}
-			menu_list.Add (label);
-			image_list.Add (icon_name);
-		}
-
-		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;
-		}
-		
-		public void HandleItemClicked (object o, EventArgs args)
-		{
-			string name = ((o as MenuItem).Child as Label).Text;
-			SwitchTo (name);
-			ContextSwitchStrategy.SwitchedToPage (Context, name);
-		}
-		
-		public void HandleCloseButtonPressed (object sender, EventArgs args)
-		{
-			if (CloseRequested != null)
-				CloseRequested (this, args);
-		}
-		
-		public void SwitchTo (int n)
-		{
-			if (n >= Notebook.Children.Length) {
-				n = 0;
-			}
-
-			Notebook.CurrentPage = n;
-			choose_button.Label = menu_list [n];
-			choose_button.Image.IconName = image_list [n];
-		}
-
-		public int CurrentPage
-		{
-			get { return Notebook.CurrentPage; }
-		}
-
-		public void SwitchTo (string name)
-		{
-			if (menu_list.Contains (name))
-				SwitchTo (menu_list.IndexOf (name));
-		}
-		
-		public bool IsActive (SidebarPage page)
-		{
-			return (Notebook.GetNthPage (Notebook.CurrentPage) == page.SidebarWidget);
-		}
-
-		public void HandleSelectionChanged (IBrowsableCollection collection) {
-			Selection = collection;
-        		// Proxy selection change to the subscribed sidebar pages.
-			if (SelectionChanged != null) 
-				SelectionChanged (collection);
-		}
-
-		// Proxy selection item changes to the subscribed sidebar pages.
-		public void HandleSelectionItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args) {
-			if (SelectionItemsChanged != null)
-				SelectionItemsChanged (collection, args);
-		}
-	} 
-}
diff --git a/src/Widgets/SlideShow.cs b/src/Widgets/SlideShow.cs
deleted file mode 100644
index 1290a21..0000000
--- a/src/Widgets/SlideShow.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-//
-// FSpot.Widgets.SlideShow.cs
-//
-// Author(s):
-//	Stephane Delcroix  <stephane at delcroix.org>
-//
-// This is open source software. See COPYING for details.
-//
-
-using System;
-using System.Collections.Generic;
-
-using Gtk;
-using Gdk;
-using Mono.Addins;
-using FSpot.Bling;
-using FSpot.Extensions;
-using FSpot.Imaging;
-
-namespace FSpot.Widgets
-{
-	public class SlideShow : DrawingArea
-	{
-		bool running;
-		BrowsablePointer item;
-		int loadRetries = 0;
-#region Public API
-
-		public SlideShow (BrowsablePointer item) : this (item, 6000, false)
-		{
-		}
-
-		public SlideShow (BrowsablePointer item, uint interval_ms, bool init) : base ()
-		{
-			this.item = item;
-			DoubleBuffered = false;
-			AppPaintable = true;
-			CanFocus = true;
-			item.Changed += HandleItemChanged;
-
-			foreach (TransitionNode transition in AddinManager.GetExtensionNodes ("/FSpot/SlideShow")) {
-				if (this.transition == null)
-					this.transition = transition.Transition;
-				transitions.Add (transition.Transition);
-			}
-
-			flip = new Delay (interval_ms, delegate {item.MoveNext (true); return true;});
-			animation = new DoubleAnimation (0, 1, new TimeSpan (0, 0, 2), HandleProgressChanged, GLib.Priority.Default);
-
-			if (init) {
-				HandleItemChanged (null, null);
-			}
-		}
-
-		SlideShowTransition transition;
-		public SlideShowTransition Transition {
-			get { return transition; }
-			set {
-				if (value == transition)
-					return;
-				transition = value;
-				QueueDraw ();
-			}
-		}
-
-		List<SlideShowTransition> transitions = new List<SlideShowTransition> ();
-		public IEnumerable<SlideShowTransition> Transitions {
-			get { return transitions; }
-		}
-
-		DoubleAnimation animation;
-		Delay flip;
-		public void Start ()
-		{
-			running = true;
-			flip.Start ();	
-		}
-
-		public void Stop ()
-		{
-			running = false;
-			flip.Stop ();
-		}
-#endregion
-
-#region Event Handlers
-		Pixbuf prev, next;
-		object sync_handle = new object ();
-		void HandleItemChanged (object sender, EventArgs e)
-		{
-			flip.Stop ();
-			if (running)
-				flip.Start ();
-			lock (sync_handle) {
-				if (prev != null && prev != PixbufUtils.ErrorPixbuf)
-					prev.Dispose ();
-				prev = next;
-
-				LoadNext ();
-
-				if (animation.IsRunning)
-					animation.Stop ();
-				progress = 0;
-				animation.Start ();
-			}
-		}
-
-		void LoadNext ()
-		{
-				if (next != null) {
-					next = null;
-				}
-	
-				if (item == null || item.Current == null)
-					return;
-
-				using (var img = ImageFile.Create (item.Current.DefaultVersion.Uri)) {
-					try {
-						using (var pb =  img.Load ()) {
-							double scale = Math.Min ((double)Allocation.Width/(double)pb.Width, (double)Allocation.Height/(double)pb.Height);
-							int w = (int)(pb.Width * scale);
-							int h = (int)(pb.Height * scale);
-	
-							if (w > 0 && h > 0)
-								next = pb.ScaleSimple ((int)(pb.Width * scale), (int)(pb.Height * scale), InterpType.Bilinear);
-						}
-						Cms.Profile screen_profile;
-						if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) 
-							FSpot.ColorManagement.ApplyProfile (next, screen_profile);
-						loadRetries = 0;
-					} catch (Exception) {
-						next = PixbufUtils.ErrorPixbuf;
-						if (++loadRetries < 10)
-							item.MoveNext (true);
-						else
-							loadRetries = 0;
-					}
-				}
-		}
-
-		double progress = 0;
-		void HandleProgressChanged (double progress)
-		{
-			lock (sync_handle) {
-				this.progress = progress;
-				QueueDraw ();
-			}
-		}
-#endregion
-
-#region Gtk Widgetry
-		protected override bool OnExposeEvent (Gdk.EventExpose args)
-		{
-			lock (sync_handle) {
-				transition.Draw (args.Window, prev, next, Allocation.Width, Allocation.Height, progress);
-			}
-			return true;
-		}
-		protected override void OnDestroyed ()
-		{
-			if (prev != null && prev != PixbufUtils.ErrorPixbuf)
-				prev.Dispose ();
-			if (next != null && next != PixbufUtils.ErrorPixbuf)
-				next.Dispose ();
-
-			base.OnDestroyed ();
-		}
-
-		protected override void OnSizeAllocated (Rectangle allocation)
-		{
-			base.OnSizeAllocated (allocation);
-			LoadNext ();
-			QueueDraw ();
-		}
-
-		protected override void OnUnrealized ()
-		{
-			flip.Stop ();
-			base.OnUnrealized ();
-		}
-#endregion
-	}
-}
diff --git a/src/Widgets/SlideShowTransition.cs b/src/Widgets/SlideShowTransition.cs
deleted file mode 100644
index ac98957..0000000
--- a/src/Widgets/SlideShowTransition.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// FSpot.Widgets.SlideShowTransition.cs
-//
-// Author(s):
-//	Stephane Delcroix  <stephane at delcroix.org>
-//
-// Copyright (c) 2009 Novell, Inc.
-//
-// This is open source software. See COPYING for details.
-//
-
-using System;
-
-using Cairo;
-using Gdk;
-
-using FSpot.Utils;
-
-using Color = Cairo.Color;
-
-namespace FSpot.Widgets
-{
-	public abstract class SlideShowTransition
-	{
-		public SlideShowTransition (string name)
-		{
-			this.name = name;
-		}
-
-		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/Widgets/TagEntry.cs b/src/Widgets/TagEntry.cs
deleted file mode 100644
index c4c67b1..0000000
--- a/src/Widgets/TagEntry.cs
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Widgets/TagEntry.cs
- *
- * Author(s)
- *   Original work by Nat Friedman in MainWindow.cs
- *   Refactored as a self-contained widget by Stephane Delcroix
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using System.Text;
-using System.Collections;
-
-namespace FSpot.Widgets {
-
-	public delegate void TagsAttachedHandler (object sender, string [] tags);
-	public delegate void TagsRemovedHandler (object sender, Tag [] tags);
-
-	public class TagEntry : Gtk.Entry {
-
-		public event TagsAttachedHandler TagsAttached;
-		public event TagsRemovedHandler TagsRemoved;
-
-		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) : base ()
-		{
-			this.tag_store = tag_store;
-			this.KeyPressEvent += HandleKeyPressEvent;
-			if (update_on_focus_out)
-				this.FocusOutEvent += HandleFocusOutEvent;
-		}
-
-		ArrayList selected_photos_tagnames;
-		public void UpdateFromSelection (IBrowsableItem [] sel)
-		{
-			Hashtable taghash = new Hashtable ();
-	
-			for (int i = 0; i < sel.Length; i++) {
-				foreach (Tag tag in sel [i].Tags) {
-					int count = 1;
-	
-					if (taghash.Contains (tag))
-						count = ((int) taghash [tag]) + 1;
-	
-					if (count <= i)
-						taghash.Remove (tag);
-					else 
-						taghash [tag] = count;
-				}
-				
-				if (taghash.Count == 0)
-					break;
-			}
-	
-			selected_photos_tagnames = new ArrayList ();
-			foreach (Tag tag in taghash.Keys)
-				if ((int) (taghash [tag]) == sel.Length)
-					selected_photos_tagnames.Add (tag.Name);
-	
-			Update ();
-		}
-
-		public void UpdateFromTagNames (string [] tagnames)
-		{
-			selected_photos_tagnames = new ArrayList ();
-			foreach (string tagname in tagnames)
-				selected_photos_tagnames.Add (tagname);
-
-			Update ();
-		}
-
-		private void Update ()
-		{
-			selected_photos_tagnames.Sort ();
-
-			StringBuilder sb = new StringBuilder ();
-			foreach (string tagname in selected_photos_tagnames) {
-				if (sb.Length > 0)
-					sb.Append (", ");
-	
-				sb.Append (tagname);
-			}
-	
-			Text = sb.ToString ();
-			ClearTagCompletions ();
-		}
-
-		private void AppendComma ()
-		{
-			if (Text.Length != 0 && !Text.Trim ().EndsWith (","))
-				AppendText (", ");	
-		}
-
-		public string [] GetTypedTagNames ()
-		{
-			string [] tagnames = Text.Split (new char [] {','});
-	
-			ArrayList list = new ArrayList ();
-			for (int i = 0; i < tagnames.Length; i ++) {
-				string s = tagnames [i].Trim ();
-	
-				if (s.Length > 0)
-					list.Add (s);
-			}
-	
-			return (string []) (list.ToArray (typeof (string)));
-		}
-
-		int tag_completion_index = -1;
-		Tag [] tag_completions;
-
-		public void ClearTagCompletions ()
-		{
-			tag_completion_index = -1;
-			tag_completions = null;
-		}
-
-		[GLib.ConnectBefore]
-		private void HandleKeyPressEvent (object o, Gtk.KeyPressEventArgs args)
-		{
-			args.RetVal = false;
-			if (args.Event.Key == Gdk.Key.Escape) { 
-				args.RetVal = false;
-			} else if (args.Event.Key == Gdk.Key.comma) { 
-				if (tag_completion_index != -1) {
-					// If we are completing a tag, then finish that
-					FinishTagCompletion ();
-					args.RetVal = true;
-				} else 
-					// Otherwise do not handle this event here
-					args.RetVal = false;
-			} else if (args.Event.Key == Gdk.Key.Return) { 
-				// If we are completing a tag, then finish that
-				if (tag_completion_index != -1) 
-					FinishTagCompletion ();
-				// And pass the event to Gtk.Entry in any case,
-				// which will call OnActivated
-				args.RetVal = false;
-			} else if (args.Event.Key == Gdk.Key.Tab) {
-				DoTagCompletion (true);
-				args.RetVal = true;
-			} else if (args.Event.Key == Gdk.Key.ISO_Left_Tab) {
-				DoTagCompletion (false);
-				args.RetVal = true;
-			}
-		}
-
-		bool tag_ignore_changes = false;
-
-		protected override void OnChanged ()
-		{
-			if (tag_ignore_changes)
-				return;
-
-			ClearTagCompletions ();
-		}
-
-		string tag_completion_typed_so_far;
-		int tag_completion_typed_position;
-
-		private void DoTagCompletion (bool forward)
-		{
-			string completion;
-			
-			if (tag_completion_index != -1) {
-				if (forward)
-					tag_completion_index = (tag_completion_index + 1) % tag_completions.Length;
-				else
-					tag_completion_index = (tag_completion_index + tag_completions.Length - 1) % tag_completions.Length;
-			} else {
-	
-				tag_completion_typed_position = Position;
-			    
-				string right_of_cursor = Text.Substring (tag_completion_typed_position);
-				if (right_of_cursor.Length > 1)
-					return;
-	
-				int last_comma = Text.LastIndexOf (',');
-				if (last_comma > tag_completion_typed_position)
-					return;
-	
-				tag_completion_typed_so_far = Text.Substring (last_comma + 1).TrimStart (new char [] {' '});
-				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);
-				if (tag_completions == null)
-					return;
-	
-				if (forward)
-					tag_completion_index = 0;
-				else
-					tag_completion_index = tag_completions.Length - 1;
-			}
-	
-			tag_ignore_changes = true;
-			completion = tag_completions [tag_completion_index].Name.Substring (tag_completion_typed_so_far.Length);
-			Text = Text.Substring (0, tag_completion_typed_position) + completion;
-			tag_ignore_changes = false;
-	
-			Position = Text.Length;
-			SelectRegion (tag_completion_typed_position, Text.Length);
-		}
-
-		void FinishTagCompletion ()
-		{
-			if (tag_completion_index == -1)
-				return;
-
-			int sel_start, sel_end, pos;
-			pos = Position;
-			if (GetSelectionBounds (out sel_start, out sel_end)) {
-				pos = sel_end;
-				SelectRegion (-1, -1);
-			}
-
-			InsertText (", ", ref pos);
-			Position = pos + 2;
-			ClearTagCompletions ();
-			
-		}
-
-		//Activated means the user pressed 'Enter'
-		protected override void OnActivated ()
-		{
-			string [] tagnames = GetTypedTagNames ();
-	
-			if (tagnames == null)
-				return;
-
-			// Add any new tags to the selected photos
-			ArrayList new_tags = new ArrayList ();
-			for (int i = 0; i < tagnames.Length; i ++) {
-				if (tagnames [i].Length == 0)
-					continue;
-
-				if (selected_photos_tagnames.Contains (tagnames [i]))
-					continue;
-
-				Tag t = tag_store.GetTagByName (tagnames [i]);
-
-				if (t != null) // Correct for capitalization differences
-					tagnames [i] = t.Name;
-
-				new_tags.Add (tagnames [i]);
-			}
-
-			//Send event
-			if (new_tags.Count != 0 && TagsAttached != null)
-				TagsAttached (this, (string []) new_tags.ToArray (typeof (string)));
-
-			// Remove any removed tags from the selected photos
-			ArrayList remove_tags = new ArrayList ();
-			foreach (string tagname in selected_photos_tagnames) {
-				if (! IsTagInList (tagnames, tagname)) {
-					Tag tag = tag_store.GetTagByName (tagname);
-					remove_tags.Add (tag);
-				}
-			}
-
-			//Send event
-			if (remove_tags.Count != 0 && TagsRemoved != null)
-				TagsRemoved (this, (Tag []) remove_tags.ToArray (typeof (Tag)));
-		}
-
-		private static bool IsTagInList (string [] tags, string tag)
-		{
-			foreach (string t in tags)
-				if (t == tag)
-					return true;
-			return false;
-		}
-
-		private void HandleFocusOutEvent (object o, Gtk.FocusOutEventArgs args)
-		{
-			Update ();
-		}
-
-		protected override bool OnFocusInEvent (Gdk.EventFocus evnt)
-		{
-			AppendComma ();
-			return base.OnFocusInEvent (evnt);
-		}
-	}	
-}
diff --git a/src/Widgets/TagMenu.cs b/src/Widgets/TagMenu.cs
deleted file mode 100644
index c1ea1c4..0000000
--- a/src/Widgets/TagMenu.cs
+++ /dev/null
@@ -1,166 +0,0 @@
-using Gtk;
-#if GTK_2_16
-using GtkBeans;
-#endif
-using System;
-using FSpot;
-using FSpot.Utils;
-using Hyena;
-
-public class TagMenu : Menu {
-	private TagStore tag_store;
-
-	public delegate void TagSelectedHandler (Tag t);
-	public event TagSelectedHandler TagSelected;
-	
-	private EventHandler new_tag_handler = null;
-	public EventHandler NewTagHandler {
-		get { return new_tag_handler; }
-		set { new_tag_handler = value; }
-	}
-
-	public class TagMenuItem : Gtk.ImageMenuItem {
-		public Tag Value;
-
-		public TagMenuItem (Tag t) : this (t, t.Name) { }
-		
-		public TagMenuItem (Tag t, string name) : base (name.Replace ("_", "__"))
-		{
-			Value = t;
-			if (t.Icon != null) {
-				this.Image = new Gtk.Image (t.SizedIcon);
-#if GTK_2_16
-				// override Gnome 2.28+ default setting not to show menuitem icons
-				this.SetAlwaysShowImage (true);
-#endif
-			}
-		}
-
-		public static TagMenuItem IndentedItem (Tag t)
-		{
-			System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
-			
-			for (Category parent = t.Category; 
-			     parent != null && parent.Category != null;
-			     parent = parent.Category)
-				label_builder.Append ("  ");
-			
-			label_builder.Append (t.Name);
-			return new TagMenuItem (t, label_builder.ToString ());
-		}
-
-		protected TagMenuItem (IntPtr raw) : base (raw) {}
-	}
-
-	public TagMenu (MenuItem item, TagStore store) 
-	{
-		if (item != null) {
-			item.Submenu = this;
-			item.Activated += HandlePopulate;
-		}
-
-		tag_store = store;
-	}
-
-	protected TagMenu (IntPtr raw) : base (raw) {}
-
-	public void Populate ()
-	{
-		Populate (false);
-	}
-
-	public int GetPosition (Tag t)
-	{
-		// FIXME right now this only works on flat menus
-
-		int i = 0;
-		foreach (Widget w in this.Children) {
-			TagMenuItem item = w as TagMenuItem;
-			if (item != null) {
-				if (t == item.Value)
-					return i;
-			}
-			i++;
-		}
-		
-		return -1;
-	}
-
-	public void Populate (bool flat)
-	{ 
-		if (flat)
-			PopulateFlat (tag_store.RootCategory, this);
-		else
-			Populate (tag_store.RootCategory, this);
-
-		if (NewTagHandler != null) {
-			GtkUtil.MakeMenuSeparator (this);
-			GtkUtil.MakeMenuItem (this, Mono.Unix.Catalog.GetString ("Create New Tag..."),
-					"tag-new", NewTagHandler, true);
-		}
-	}
-
-        public void PopulateFlat (Category cat, Gtk.Menu parent)
-	{
-		foreach (Tag t in cat.Children) {
-			TagMenuItem item = TagMenuItem.IndentedItem (t);
-			parent.Append (item);
-			item.ShowAll ();
-
-			Category subcat = t as Category;
-			if (subcat != null && subcat.Children.Count != 0) {
-				PopulateFlat (t as Category, parent);
-			} else {
-				item.Activated += HandleActivate;
-			}
-		} 
-	}
-
-	public void Populate (Category cat, Gtk.Menu parent)
-	{
-		Widget [] dead_pool = parent.Children;
-		for (int i = 0; i < dead_pool.Length; i++)
-			dead_pool [i].Destroy ();
-
-		foreach (Tag t in cat.Children) {
-			TagMenuItem item = new TagMenuItem (t);
-			parent.Append (item);
-			item.ShowAll ();
-
-			Category subcat = t as Category;
-			if (subcat != null && subcat.Children.Count != 0) {
-				Gtk.Menu submenu = new Menu ();
-				Populate (t as Category, submenu);
-
-				Gtk.SeparatorMenuItem sep = new Gtk.SeparatorMenuItem ();
-				submenu.Prepend (sep);
-				sep.ShowAll ();
-
-				TagMenuItem subitem = new TagMenuItem (t);
-				subitem.Activated += HandleActivate;
-				submenu.Prepend (subitem);
-				subitem.ShowAll ();
-
-				item.Submenu = submenu;
-			} else {
-				item.Activated += HandleActivate;
-			}
-		} 
-	}
-	
-	private void HandlePopulate (object obj, EventArgs args)
-	{
-		this.Populate ();
-	}
-	
-	void HandleActivate (object obj, EventArgs args)
-	{
-		if (TagSelected != null) {
-			TagMenuItem t = obj as TagMenuItem;
-			if (t != null)
-				TagSelected (t.Value);
-			else 
-				Log.Debug ("TagMenu.HandleActivate: Item was not a TagMenuItem");
-		}
-	}
-}
diff --git a/src/Widgets/TagView.cs b/src/Widgets/TagView.cs
deleted file mode 100644
index 199b6d5..0000000
--- a/src/Widgets/TagView.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * FSpot.Widgets.TagView
- *
- * Author(s):
- * 	Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using System;
-using Gtk;
-using Gdk;
-
-namespace FSpot.Widgets {
-public class TagView : EventBox {
-	private int thumbnail_size = 20;
-	private IBrowsableItem photo;
-	private Tag [] tags;
-	private static int TAG_ICON_VSPACING = 5;
-	
-	private bool HideTags {
-		get { 
-			return (FSpot.Preferences.Get<int> (FSpot.Preferences.TAG_ICON_SIZE) == (int) Tag.IconSize.Hidden); 
-		}
-	}
-
-
-	public TagView ()
-	{
-		VisibleWindow = false;
-	}
-
-	protected TagView (IntPtr raw) : base (raw)
-	{
-		VisibleWindow = false;	
-	}
-
-	public IBrowsableItem Current {
-		set {
-			photo = value;
-
-			if (photo != null && photo.Tags != null && !HideTags) {
-				SetSizeRequest ((thumbnail_size + TAG_ICON_VSPACING) * photo.Tags.Length,
-						thumbnail_size);
-			} else {
-				SetSizeRequest (0, thumbnail_size);	
-			}
-			QueueResize ();
-			QueueDraw ();
-		}
-	}
-
-	public Tag [] Tags {
-		get { return tags; }
-		set {
-			this.tags = value;
-			this.QueueDraw ();
-		}
-	}
-	
-	protected override bool OnExposeEvent (Gdk.EventExpose args)
-	{
-		if (photo != null)
-			tags = photo.Tags;
-
-		if (tags == null || HideTags) {
-			SetSizeRequest(0,thumbnail_size);
-			return base.OnExposeEvent (args);
-		}
-		
-		DrawTags();
-		
-		return base.OnExposeEvent (args);
-	}
-	
-	public void DrawTags()
-	{
-		if (tags == null)
-			return;
-
-		SetSizeRequest ((thumbnail_size + TAG_ICON_VSPACING) * tags.Length,
-				thumbnail_size);
-
-		int tag_x = Allocation.X;
-		int tag_y = Allocation.Y + (Allocation.Height - thumbnail_size)/2;
-		
-		string [] names = new string [tags.Length];
-		int i = 0;
-		foreach (Tag t in tags) {
-			names [i++] = t.Name;
-			
-			Pixbuf icon = t.Icon;
-
-			Category category = t.Category;
-			while (icon == null && category != null) {
-				icon = category.Icon;
-				category = category.Category;
-			}
-			
-			if (icon == null)
-				continue;
-			
-			Pixbuf scaled_icon;
-			if (icon.Width == thumbnail_size) {
-				scaled_icon = icon;
-			} else {
-				scaled_icon = icon.ScaleSimple (thumbnail_size, thumbnail_size, InterpType.Bilinear);
-			}
-				Cms.Profile screen_profile;
-				if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile)) 
-					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);
-			tag_x += thumbnail_size + TAG_ICON_VSPACING;
-		}
-
-        this.TooltipText =  String.Join (", ", names);
-	}
-}
-}
diff --git a/src/Widgets/TrayView.cs b/src/Widgets/TrayView.cs
deleted file mode 100644
index 4b2523d..0000000
--- a/src/Widgets/TrayView.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * TrayView.cs
- *
- * Author(s):
- *	Larry Ewing  <lewing at novell.com>
- *
- *
- * Copyright (C) 2004 Novell, Inc.
- * This is free software. See COPYING for details.
- */
-
-namespace FSpot.Widgets
-{
-	public class TrayView : IconView {
-		public TrayView (System.IntPtr raw) : base (raw) {}
-	
-		public TrayView (FSpot.IBrowsableCollection query) : base (query) 
-		{
-			DisplayDates = false;
-			DisplayTags = false;
-			cell_border_width = 10;
-			tag_icon_vspacing = 0;
-			tag_icon_size = 0;
-		}
-		
-		protected override void UpdateLayout ()
-		{
-			//DisplayDates = false;
-			//DisplayTags = false;
-	
-			int total_rows;
-			int available_width = Allocation.Width - 2 * BORDER_SIZE;
-			cells_per_row = System.Math.Max (available_width / 256, 1);
-			int width = 0;
-			//int height = 0;
-			
-			do {
-				cell_width = System.Math.Min (256, available_width / cells_per_row);
-				width = cell_width - 2 * cell_border_width;
-				cell_height = (int)(width / ThumbnailRatio) + 2 * cell_border_width;
-				total_rows = (int) System.Math.Ceiling (collection.Count / (double)cells_per_row);
-				cells_per_row ++;
-			} while (total_rows > Allocation.Height / cell_height);
-			cells_per_row --;
-	
-	
-			if (width != ThumbnailWidth) {
-				thumbnail_width = width;
-			}
-	
-			//base.UpdateLayout ();
-		}
-	}
-}
diff --git a/src/Widgets/Wipe.cs b/src/Widgets/Wipe.cs
deleted file mode 100644
index 0ef41c8..0000000
--- a/src/Widgets/Wipe.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-/* 
- * Wipe.cs
- *
- * Copyright 2007 Novell Inc.
- *
- * Author
- *   Larry Ewing <lewing at novell.com>
- *
- * See COPYING for license information.
- *
- */
-
-using System;
-using Cairo;
-using Gtk;
-
-namespace FSpot.Widgets {
-	public class Wipe : ITransition {
-		DateTime start;
-		TimeSpan duration = new TimeSpan (0, 0, 3);
-		ImageInfo end;
-		ImageInfo begin;
-		ImageInfo end_buffer;
-		ImageInfo begin_buffer;
-		int frames;
-		double fraction;
-		
-		public int Frames {
-			get { return frames; }
-		}
-		
-		public Wipe (ImageInfo begin, ImageInfo end)
-		{
-			this.begin = begin;
-			this.end = end;
-		}
-		
-		public bool OnEvent (Widget w)
-		{
-			if (begin_buffer == null) {
-				begin_buffer = new ImageInfo (begin, w); //.Allocation);
-			}
-
-			if (end_buffer == null) {
-				end_buffer = new ImageInfo (end, w); //.Allocation);
-				start = DateTime.UtcNow;
-			}
-			
-			w.QueueDraw ();
-			
-			TimeSpan elapsed = DateTime.UtcNow - start;
-			fraction = elapsed.Ticks / (double) duration.Ticks; 
-			
-			frames++;
-			
-			return fraction < 1.0;
-		}
-		
-		Pattern CreateMask (Gdk.Rectangle coverage, double fraction)
-		{
-			LinearGradient fade = new LinearGradient (0, 0,
-								  coverage.Width, 0);
-			fade.AddColorStop (Math.Max (fraction - .1, 0.0), new Cairo.Color (1.0, 1.0, 1.0, 1.0));
-			fade.AddColorStop (Math.Min (fraction + .1, 1.0), new Cairo.Color (0.0, 0.0, 0.0, 0.0));
-			
-			return fade;
-		}
-		
-		public bool OnExpose (Context ctx, Gdk.Rectangle allocation)
-		{
-			ctx.Operator = Operator.Source;
-			SurfacePattern p = new SurfacePattern (begin_buffer.Surface);
-			ctx.Matrix = begin_buffer.Fill (allocation);
-			p.Filter = Filter.Fast;
-			ctx.Source = p;
-			ctx.Paint ();
-			
-			ctx.Operator = Operator.Over;
-			ctx.Matrix = end_buffer.Fill (allocation);
-			SurfacePattern sur = new SurfacePattern (end_buffer.Surface);
-			sur.Filter = Filter.Fast;
-			ctx.Source = sur;
-			Pattern mask = CreateMask (allocation, fraction);
-			ctx.Mask (mask);
-			mask.Destroy ();
-			p.Destroy ();
-			sur.Destroy ();
-			
-			return fraction < 1.0;
-		}
-		
-		public void Dispose ()
-		{
-			begin_buffer.Dispose ();
-			end_buffer.Dispose ();
-		}
-	}
-}
diff --git a/src/XScreenSaverSlide.cs b/src/XScreenSaverSlide.cs
deleted file mode 100644
index 0e26169..0000000
--- a/src/XScreenSaverSlide.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-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 {
-		public const string ScreenSaverEnviroment = "XSCREENSAVER_WINDOW";
-
-		public XScreenSaverSlide () : base (String.Empty)
-		{
-		}
-	       
-		protected override void OnRealized ()
-		{
-			string env = Environment.GetEnvironmentVariable (ScreenSaverEnviroment);
-			
-			if (env != null) {
-				try {
-					env = env.ToLower ();
-					
-					if (env.StartsWith ("0x"))
-						env = env.Substring (2);
-
-					uint xid = UInt32.Parse (env, System.Globalization.NumberStyles.HexNumber);
-					
-					GdkWindow = Gdk.Window.ForeignNew (xid);
-					Style.Attach (GdkWindow);
-					GdkWindow.Events = EventMask.ExposureMask 
-						| EventMask.StructureMask 
-						| EventMask.EnterNotifyMask 
-						| EventMask.LeaveNotifyMask 
-						| EventMask.FocusChangeMask;
-					
-					Style.SetBackground (GdkWindow, Gtk.StateType.Normal);
-					GdkWindow.SetDecorations ((Gdk.WMDecoration) 0);
-					GdkWindow.UserData = this.Handle;
-					SetFlag (WidgetFlags.Realized);
-					SizeRequest ();
-					Gdk.Rectangle geom;
-					int depth;
-					GdkWindow.GetGeometry (out geom.X, out geom.Y, out geom.Width, out geom.Height, out depth);
-					SizeAllocate (new Gdk.Rectangle (geom.X, geom.Y, geom.Width, geom.Height));
-					Resize (geom.Width, geom.Height);
-					return;
-				} catch (System.Exception e) {
-					Hyena.Log.Exception (e);
-				}
-			} else {
-				Hyena.Log.DebugFormat ("{0} not set, falling back to window", ScreenSaverEnviroment);
-			}
-
-			SetSizeRequest (640, 480);
-			base.OnRealized ();
-		}
-	}
-}		
diff --git a/src/f-spot.glade b/src/f-spot.glade
deleted file mode 100644
index f954d21..0000000
--- a/src/f-spot.glade
+++ /dev/null
@@ -1,940 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--*- mode: xml -*-->
-<glade-interface>
-  <requires lib="canvas"/>
-  <requires lib="gnome"/>
-  <widget class="GtkDialog" id="tag_selection_dialog">
-    <property name="width_request">300</property>
-    <property name="height_request">300</property>
-    <property name="visible">True</property>
-    <property name="title" translatable="yes">Select a Tag...</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="selection_vbox">
-        <property name="visible">True</property>
-        <child>
-          <widget class="GtkScrolledWindow" id="tag_selection_scrolled">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-            <property name="shadow_type">GTK_SHADOW_IN</property>
-            <child>
-              <placeholder/>
-            </child>
-          </widget>
-          <packing>
-            <property name="position">2</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="dialog-action_area9">
-            <property name="visible">True</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
-            <child>
-              <widget class="GtkButton" id="cancel_button">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-cancel</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-6</property>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkButton" id="ok_button">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-ok</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-5</property>
-              </widget>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="GtkDialog" id="tag_selection_dialog">
-    <property name="width_request">300</property>
-    <property name="height_request">300</property>
-    <property name="visible">True</property>
-    <property name="title" translatable="yes">Select a Tag...</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="selection_vbox">
-        <property name="visible">True</property>
-        <child>
-          <widget class="GtkScrolledWindow" id="tag_selection_scrolled">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-            <property name="shadow_type">GTK_SHADOW_IN</property>
-            <child>
-              <placeholder/>
-            </child>
-          </widget>
-          <packing>
-            <property name="position">2</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="dialog-action_area9">
-            <property name="visible">True</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
-            <child>
-              <widget class="GtkButton" id="cancel_button">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-cancel</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-6</property>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkButton" id="ok_button">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-ok</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-5</property>
-              </widget>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="GtkDialog" id="tag_selection_dialog">
-    <property name="width_request">300</property>
-    <property name="height_request">300</property>
-    <property name="visible">True</property>
-    <property name="title" translatable="yes">Select a Tag...</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="selection_vbox">
-        <property name="visible">True</property>
-        <child>
-          <widget class="GtkScrolledWindow" id="tag_selection_scrolled">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-            <property name="shadow_type">GTK_SHADOW_IN</property>
-            <child>
-              <placeholder/>
-            </child>
-          </widget>
-          <packing>
-            <property name="position">2</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="dialog-action_area9">
-            <property name="visible">True</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
-            <child>
-              <widget class="GtkButton" id="cancel_button">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-cancel</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-6</property>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkButton" id="ok_button">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-ok</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-5</property>
-              </widget>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-<widget class="GtkWindow" id="color_editor_prefs_window">
-  <property name="title" translatable="yes"></property>
-  <property name="type">GTK_WINDOW_TOPLEVEL</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
-  <property name="modal">False</property>
-  <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
-  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-  <property name="focus_on_map">True</property>
-  <property name="urgency_hint">False</property>
-
-  <child>
-    <widget class="GtkVBox" id="color_editor_prefs">
-      <property name="visible">True</property>
-      <property name="homogeneous">False</property>
-      <property name="spacing">0</property>
-
-      <child>
-	<widget class="GtkExpander" id="expander13">
-	  <property name="visible">True</property>
-	  <property name="can_focus">True</property>
-	  <property name="expanded">True</property>
-	  <property name="spacing">0</property>
-
-	  <child>
-	    <widget class="GtkTable" id="table20">
-	      <property name="border_width">6</property>
-	      <property name="visible">True</property>
-	      <property name="n_rows">10</property>
-	      <property name="n_columns">2</property>
-	      <property name="homogeneous">False</property>
-	      <property name="row_spacing">0</property>
-	      <property name="column_spacing">6</property>
-
-	      <child>
-		<widget class="GtkSpinButton" id="contrast_spinbutton">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="climb_rate">1</property>
-		  <property name="digits">2</property>
-		  <property name="numeric">False</property>
-		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
-		  <property name="snap_to_ticks">False</property>
-		  <property name="wrap">False</property>
-		  <property name="adjustment">0 -1 1 0.00999999977648 0.00999999977648 0.10000000149</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">1</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">8</property>
-		  <property name="bottom_attach">9</property>
-		  <property name="x_options"></property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkSpinButton" id="hue_spinbutton">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="climb_rate">1</property>
-		  <property name="digits">0</property>
-		  <property name="numeric">False</property>
-		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
-		  <property name="snap_to_ticks">False</property>
-		  <property name="wrap">False</property>
-		  <property name="adjustment">0 0 100 1 10 10</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">1</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">6</property>
-		  <property name="bottom_attach">7</property>
-		  <property name="x_options"></property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkSpinButton" id="brightness_spinbutton">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="climb_rate">1</property>
-		  <property name="digits">1</property>
-		  <property name="numeric">False</property>
-		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
-		  <property name="snap_to_ticks">False</property>
-		  <property name="wrap">False</property>
-		  <property name="adjustment">0 0 100 1 10 10</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">1</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">4</property>
-		  <property name="bottom_attach">5</property>
-		  <property name="x_options"></property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkSpinButton" id="sat_spinbutton">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="climb_rate">1</property>
-		  <property name="digits">0</property>
-		  <property name="numeric">False</property>
-		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
-		  <property name="snap_to_ticks">False</property>
-		  <property name="wrap">False</property>
-		  <property name="adjustment">0 0 100 1 10 10</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">1</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">2</property>
-		  <property name="bottom_attach">3</property>
-		  <property name="x_options"></property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkHScale" id="exposure_scale">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="draw_value">False</property>
-		  <property name="value_pos">GTK_POS_TOP</property>
-		  <property name="digits">1</property>
-		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
-		  <property name="inverted">False</property>
-		  <property name="adjustment">0 -4 4 0.10000000149 0.10000000149 0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">1</property>
-		  <property name="bottom_attach">2</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkHScale" id="sat_scale">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="draw_value">False</property>
-		  <property name="value_pos">GTK_POS_RIGHT</property>
-		  <property name="digits">0</property>
-		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
-		  <property name="inverted">False</property>
-		  <property name="adjustment">0 -100 100 1 10 0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">3</property>
-		  <property name="bottom_attach">4</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkHScale" id="brightness_scale">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="draw_value">False</property>
-		  <property name="value_pos">GTK_POS_RIGHT</property>
-		  <property name="digits">1</property>
-		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
-		  <property name="inverted">False</property>
-		  <property name="adjustment">0 -100 100 1 1 0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">5</property>
-		  <property name="bottom_attach">6</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkHScale" id="hue_scale">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="draw_value">False</property>
-		  <property name="value_pos">GTK_POS_RIGHT</property>
-		  <property name="digits">0</property>
-		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
-		  <property name="inverted">False</property>
-		  <property name="adjustment">0 -180 180 0.5 36 0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">7</property>
-		  <property name="bottom_attach">8</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkHScale" id="contrast_scale">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="draw_value">False</property>
-		  <property name="value_pos">GTK_POS_RIGHT</property>
-		  <property name="digits">2</property>
-		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
-		  <property name="inverted">False</property>
-		  <property name="adjustment">0 -1 1 0.00999999977648 0.00999999977648 0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">9</property>
-		  <property name="bottom_attach">10</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkSpinButton" id="exposure_spinbutton">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="climb_rate">1</property>
-		  <property name="digits">1</property>
-		  <property name="numeric">False</property>
-		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
-		  <property name="snap_to_ticks">False</property>
-		  <property name="wrap">False</property>
-		  <property name="adjustment">0 -4 4 1 10 10</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">1</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">0</property>
-		  <property name="bottom_attach">1</property>
-		  <property name="x_options"></property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkLabel" id="label166">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">C_ontrast:</property>
-		  <property name="use_underline">True</property>
-		  <property name="use_markup">True</property>
-		  <property name="justify">GTK_JUSTIFY_CENTER</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="mnemonic_widget">contrast_scale</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">1</property>
-		  <property name="top_attach">8</property>
-		  <property name="bottom_attach">9</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkLabel" id="label163">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">_Hue:</property>
-		  <property name="use_underline">True</property>
-		  <property name="use_markup">True</property>
-		  <property name="justify">GTK_JUSTIFY_RIGHT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="mnemonic_widget">hue_scale</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">1</property>
-		  <property name="top_attach">6</property>
-		  <property name="bottom_attach">7</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkLabel" id="label164">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">_Brightness:</property>
-		  <property name="use_underline">True</property>
-		  <property name="use_markup">True</property>
-		  <property name="justify">GTK_JUSTIFY_RIGHT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="mnemonic_widget">brightness_scale</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">1</property>
-		  <property name="top_attach">4</property>
-		  <property name="bottom_attach">5</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkLabel" id="label167">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">_Saturation:</property>
-		  <property name="use_underline">True</property>
-		  <property name="use_markup">True</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="mnemonic_widget">sat_scale</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">1</property>
-		  <property name="top_attach">2</property>
-		  <property name="bottom_attach">3</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkLabel" id="label165">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">_Exposure:</property>
-		  <property name="use_underline">True</property>
-		  <property name="use_markup">True</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="mnemonic_widget">exposure_scale</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">1</property>
-		  <property name="top_attach">0</property>
-		  <property name="bottom_attach">1</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkLabel" id="label168">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes"><b>Co_rrections</b></property>
-	      <property name="use_underline">True</property>
-	      <property name="use_markup">True</property>
-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">0</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
-	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-	      <property name="width_chars">-1</property>
-	      <property name="single_line_mode">False</property>
-	      <property name="angle">0</property>
-	    </widget>
-	    <packing>
-	      <property name="type">label_item</property>
-	    </packing>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkExpander" id="expander14">
-	  <property name="visible">True</property>
-	  <property name="can_focus">True</property>
-	  <property name="expanded">True</property>
-	  <property name="spacing">0</property>
-
-	  <child>
-	    <widget class="GtkTable" id="table21">
-	      <property name="border_width">6</property>
-	      <property name="visible">True</property>
-	      <property name="n_rows">4</property>
-	      <property name="n_columns">2</property>
-	      <property name="homogeneous">False</property>
-	      <property name="row_spacing">0</property>
-	      <property name="column_spacing">6</property>
-
-	      <child>
-		<widget class="GtkSpinButton" id="temp_spinbutton">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="climb_rate">1</property>
-		  <property name="digits">0</property>
-		  <property name="numeric">False</property>
-		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
-		  <property name="snap_to_ticks">False</property>
-		  <property name="wrap">False</property>
-		  <property name="adjustment">1 0 100 1 10 10</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">1</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">0</property>
-		  <property name="bottom_attach">1</property>
-		  <property name="x_options"></property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkSpinButton" id="temptint_spinbutton">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="climb_rate">1</property>
-		  <property name="digits">0</property>
-		  <property name="numeric">False</property>
-		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
-		  <property name="snap_to_ticks">False</property>
-		  <property name="wrap">False</property>
-		  <property name="adjustment">0 0 100 1 10 10</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">1</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">2</property>
-		  <property name="bottom_attach">3</property>
-		  <property name="x_options"></property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkHScale" id="temp_scale">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="draw_value">False</property>
-		  <property name="value_pos">GTK_POS_TOP</property>
-		  <property name="digits">0</property>
-		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
-		  <property name="inverted">False</property>
-		  <property name="adjustment">5000 1000 25000 1 100 0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">1</property>
-		  <property name="bottom_attach">2</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkHScale" id="temptint_scale">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="draw_value">False</property>
-		  <property name="value_pos">GTK_POS_TOP</property>
-		  <property name="digits">0</property>
-		  <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
-		  <property name="inverted">False</property>
-		  <property name="adjustment">0 -150 150 1 12 24</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">3</property>
-		  <property name="bottom_attach">4</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkLabel" id="label169">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">_Tint:</property>
-		  <property name="use_underline">True</property>
-		  <property name="use_markup">True</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="mnemonic_widget">temptint_scale</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">1</property>
-		  <property name="top_attach">2</property>
-		  <property name="bottom_attach">3</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkLabel" id="label170">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes" comments="Note for translators: meant as Temperature">Te_mp:</property>
-		  <property name="use_underline">True</property>
-		  <property name="use_markup">True</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="mnemonic_widget">temp_scale</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">1</property>
-		  <property name="top_attach">0</property>
-		  <property name="bottom_attach">1</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkLabel" id="label171">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes"><b>_White Balance</b></property>
-	      <property name="use_underline">True</property>
-	      <property name="use_markup">True</property>
-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">0</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
-	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-	      <property name="width_chars">-1</property>
-	      <property name="single_line_mode">False</property>
-	      <property name="angle">0</property>
-	    </widget>
-	    <packing>
-	      <property name="type">label_item</property>
-	    </packing>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkLabel" id="label172">
-	  <property name="visible">True</property>
-	  <property name="label" translatable="yes"></property>
-	  <property name="use_underline">False</property>
-	  <property name="use_markup">False</property>
-	  <property name="justify">GTK_JUSTIFY_LEFT</property>
-	  <property name="wrap">False</property>
-	  <property name="selectable">False</property>
-	  <property name="xalign">0.5</property>
-	  <property name="yalign">0.5</property>
-	  <property name="xpad">0</property>
-	  <property name="ypad">0</property>
-	  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-	  <property name="width_chars">-1</property>
-	  <property name="single_line_mode">False</property>
-	  <property name="angle">0</property>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">False</property>
-	</packing>
-      </child>
-    </widget>
-  </child>
-</widget>
-  <widget class="GtkDialog" id="customratio_dialog">
-    <property name="border_width">5</property>
-    <property name="has_separator">False</property>
-    <property name="title" translatable="yes">Selection Constraints</property>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="dialog-vbox26">
-        <property name="visible">True</property>
-        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-        <property name="spacing">2</property>
-        <child>
-          <widget class="GtkVBox" id="vbox6">
-            <property name="visible">True</property>
-            <child>
-              <widget class="GtkLabel" id="label6">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="xpad">6</property>
-                <property name="label" translatable="yes">Manage your custom selection ratios</property>
-              </widget>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="padding">6</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkHBox" id="hbox7">
-                <property name="visible">True</property>
-                <child>
-                  <widget class="GtkTreeView" id="content_treeview">
-                    <property name="visible">True</property>
-                  </widget>
-                  <packing>
-                    <property name="padding">6</property>
-                  </packing>
-                </child>
-                <child>
-                  <widget class="GtkVButtonBox" id="vbuttonbox1">
-                    <property name="visible">True</property>
-                    <property name="spacing">6</property>
-                    <property name="layout_style">GTK_BUTTONBOX_START</property>
-                    <child>
-                      <widget class="GtkButton" id="add_button">
-                        <property name="visible">True</property>
-                        <property name="label">gtk-add</property>
-                        <property name="use_stock">True</property>
-                      </widget>
-                    </child>
-                    <child>
-                      <widget class="GtkButton" id="delete_button">
-                        <property name="visible">True</property>
-                        <property name="label">gtk-delete</property>
-                        <property name="use_stock">True</property>
-                      </widget>
-                      <packing>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="GtkButton" id="up_button">
-                        <property name="visible">True</property>
-                        <property name="label">gtk-go-up</property>
-                        <property name="use_stock">True</property>
-                      </widget>
-                      <packing>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="GtkButton" id="down_button">
-                        <property name="visible">True</property>
-                        <property name="label">gtk-go-down</property>
-                        <property name="use_stock">True</property>
-                      </widget>
-                      <packing>
-                        <property name="position">3</property>
-                      </packing>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="padding">6</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </widget>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="dialog-action_area26">
-            <property name="visible">True</property>
-            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
-            <child>
-              <widget class="GtkButton" id="close_button">
-                <property name="visible">True</property>
-                <property name="label">gtk-close</property>
-                <property name="use_stock">True</property>
-              </widget>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-</glade-interface>
diff --git a/src/f-spot.in b/src/f-spot.in
deleted file mode 100644
index 89d5308..0000000
--- a/src/f-spot.in
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/bash
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@ 
-turtledir=@TURTLEDIR@
-
-EXE_TO_RUN="$libdir/f-spot/f-spot.exe"
-
-if test "x$DBUS_SESSION_BUS_ADDRESS" == "x"; then
-    echo "** No session dbus found. Starting one **"
-    DBUSLAUNCH="dbus-launch" 
-else
-    DBUSLAUNCH=""
-fi
-
-if test "x$turtledir" != "x"; then
-    export MONO_PATH=$turtledir/lib:$turtledir/gui:$MONO_PATH
-fi
-
-[ -n "$FSPOT_DEBUG" ] && FSPOT_DEBUG="--debug"
-[ -n "$FSPOT_TRACE" ] && FSPOT_TRACE="--trace=$FSPOT_TRACE"
-[ -n "$FSPOT_PROFILE" ] && FSPOT_PROFILE="--profile=$FSPOT_PROFILE"
-run_mdb=false
-run_gdb=false
-run_valgrind=false
-run_strace=false
-basedir_set=false
-
-for arg in "$@"; do
-    case "x$arg" in
-    	x--debug)
-	    FSPOT_DEBUG="$arg"
-	    ;;
-	x--mdb)
-	    run_mdb=true
-	    ;;
-	x--gdb)
-	    run_gdb=true
-	    ;;
-	x-b) basedir_set=true;;
-	x-basedir) basedir_set=true;;
-	x--basedir) basedir_set=true;;
-	x--valgrind)
-	    run_valgrind=true
-	    ;;
-	x--trace=*)
-	    FSPOT_TRACE="$arg"
-	    ;;
-	x--strace)
-	    run_strace=true
-	    ;;
-	x--profile=*)
-	    FSPOT_PROFILE="$arg"
-	    ;;
-	x--uninstalled)
-	    echo "*** Running uninstalled f-spot ***"
-	    EXE_TO_RUN="./f-spot.exe"
-	    export MONO_PATH=../lib/gio-sharp/gio:../lib/gtk-sharp-beans:../lib/unique-sharp/unique:../bin:$MONO_PATH
-	    ;;
-    esac
-done
-
-if [ "$basedir_set" != "true" ]; then
-    if [ ! -n "$XDG_CONFIG_HOME" ]; then
-        XDG_CONFIG_HOME="$HOME/.config"
-    fi
-    if [ -e "$HOME/.gnome2/f-spot" ] && [ -e "$XDG_CONFIG_HOME/f-spot" ]; then
-        echo "It looks like you have 2 settings directories for f-spot ($HOME/.gnome2/f-spot and $XDG_CONFIG_HOME/f-spot). Remove one or run f-spot with --basedir option"
-        zenity --error --text="It looks like you have 2 settings directories for f-spot ($HOME/.gnome2/f-spot and $XDG_CONFIG_HOME/f-spot). Remove one or run f-spot with --basedir option"
-	exit -1
-    elif [ -e "$HOME/.gnome2/f-spot" ]; then
-        mkdir -p $XDG_CONFIG_HOME/
-	echo "Moving $HOME/.gnome2/f-spot to $XDG_CONFIG_HOME/"
-        mv $HOME/.gnome2/f-spot $XDG_CONFIG_HOME/
-	rm -rf $XDG_CONFIG_HOME/addin*
-    fi
-fi
-
-if [ -n "$FSPOT_DEBUG" ]; then
-    echo "** Running f-spot in Debug Mode **"
-fi
-
-if [ -n "$FSPOT_DEBUG" -o -n "$FSPOT_TRACE" -o -n "$FSPOT_PROFILE" ]; then
-    MONO_OPTIONS="$FSPOT_DEBUG $FSPOT_TRACE $FSPOT_PROFILE"
-    echo "** Running Mono with $MONO_OPTIONS **"
-fi
-
-if $run_mdb; then
-	mdb $EXE_TO_RUN -args "$@"
-elif $run_gdb; then
-	gdb --eval-command="handle SIGXCPU SIG33 SIG35 SIGPWR nostop noprint" --eval-command=run --args mono $MONO_OPTIONS $EXE_TO_RUN "$@"
-elif $run_valgrind; then
-	valgrind --tool=memcheck --leak-check=full --show-reachable=yes --log-file=valgrind --smc-check=all --suppressions=/home/sde/Mono/mono/data/mono.supp mono $MONO_OPTIONS $EXE_TO_RUN "$@"
-elif $run_strace; then
-	strace -ttt -f -o /tmp/f-spot.strace mono $MONO_OPTIONS $EXE_TO_RUN "$@"
-else
-	exec -a @PACKAGE@ $DBUSLAUNCH mono $MONO_OPTIONS $EXE_TO_RUN "$@"
-fi
diff --git a/src/main.cs b/src/main.cs
deleted file mode 100644
index 00234cb..0000000
--- a/src/main.cs
+++ /dev/null
@@ -1,336 +0,0 @@
-using Gtk;
-using System;
-using System.Reflection;
-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.Utils;
-using FSpot.UI.Dialog;
-using FSpot.Extensions;
-using FSpot.Imaging;
-using Hyena;
-using Hyena.CommandLine;
-using Hyena.Gui;
-
-namespace FSpot
-{
-	public static class Driver
-	{
-		private static void ShowVersion ()
-		{
-			Console.WriteLine ("F-Spot {0}", FSpot.Defines.VERSION);
-			Console.WriteLine ("http://f-spot.org");
-			Console.WriteLine ("\t(c)2003-2009, Novell Inc");
-			Console.WriteLine ("\t(c)2009 Stephane Delcroix");
-			Console.WriteLine("Personal photo management for the GNOME Desktop");
-		}
-
-		private static void ShowAssemblyVersions ()
-		{
-			ShowVersion ();
-			Console.WriteLine ();
-			Console.WriteLine ("Mono/.NET Version: " + Environment.Version.ToString ());
-			Console.WriteLine (String.Format ("{0}Assembly Version Information:", Environment.NewLine));
-
-			foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies ())
-			{
-				AssemblyName name = asm.GetName ();
-				Console.WriteLine ("\t" + name.Name + " (" + name.Version.ToString () + ")");
-			}
-		}
-
-		private static void ShowHelp ()
-		{
-			Console.WriteLine ("Usage: f-spot [options...] [files|URIs...]");
-			Console.WriteLine ();
-
-			Hyena.CommandLine.Layout commands = new Hyena.CommandLine.Layout (
-				new LayoutGroup ("help", "Help Options",
-					new LayoutOption ("help", "Show this help"),
-					new LayoutOption ("help-options", "Show command line options"),
-					new LayoutOption ("help-all", "Show all options"),
-					new LayoutOption ("version", "Show version information"),
-					new LayoutOption ("versions", "Show detailed version information")),
-				new LayoutGroup ("options", "General options",
-					new LayoutOption ("basedir=DIR", "Path to the photo database folder"),
-					new LayoutOption ("import=URI", "Import from the given uri"),
-					new LayoutOption ("photodir=DIR", "Default import folder"),
-					new LayoutOption ("view ITEM", "View file(s) or directories"),
-					new LayoutOption ("shutdown", "Shut down a running instance of F-Spot"),
-					new LayoutOption ("slideshow", "Display a slideshow"),
-					new LayoutOption ("debug", "Run in debug mode")));
-
-			if (ApplicationContext.CommandLine.Contains ("help-all")) {
-				Console.WriteLine (commands);
-				return;
-			}
-
-			List<string> errors = null;
-			foreach (KeyValuePair<string, string> argument in ApplicationContext.CommandLine.Arguments) {
-				switch (argument.Key) {
-					case "help": Console.WriteLine (commands.ToString ("help")); break;
-					case "help-options": Console.WriteLine (commands.ToString ("options")); break;
-					default:
-						if (argument.Key.StartsWith ("help")) {
-							(errors ?? (errors = new List<string> ())).Add (argument.Key);
-						}
-						break;
-				}
-			}
-
-			if (errors != null) {
-				Console.WriteLine (commands.LayoutLine (String.Format (
-					"The following help arguments are invalid: {0}",
-					Hyena.Collections.CollectionExtensions.Join (errors, "--", null, ", "))));
-			}
-		}
-
-		static string [] FixArgs (string [] args)
-		{
-			// Makes sure command line arguments are parsed backwards compatible.
-			var outargs = new List<string> ();
-			for (int i = 0; i < args.Length; i++) {
-				switch (args [i]) {
-					case "-h": case "-help": case "-usage":
-						outargs.Add ("--help");
-						break;
-					case "-V": case "-version":
-						outargs.Add ("--version");
-						break;
-					case "-versions":
-						outargs.Add ("--versions");
-						break;
-					case "-shutdown":
-						outargs.Add ("--shutdown");
-						break;
-					case "-b": case "-basedir": case "--basedir":
-						outargs.Add ("--basedir=" + (i + 1 == args.Length ? String.Empty : args [++i]));
-						break;
-					case "-p": case "-photodir": case "--photodir":
-						outargs.Add ("--photodir=" + (i + 1 == args.Length ? String.Empty : args [++i]));
-						break;
-					case "-i": case "-import": case "--import":
-						outargs.Add ("--import=" + (i + 1 == args.Length ? String.Empty : args [++i]));
-						break;
-					case "-v": case "-view":
-						outargs.Add ("--view");
-						break;
-					case "-slideshow":
-						outargs.Add ("--slideshow");
-						break;
-					default:
-						outargs.Add (args [i]);
-						break;
-				}
-			}
-			return outargs.ToArray ();
-		}
-
-		static int Main (string [] args)
-		{
-			args = FixArgs (args);
-
-			ApplicationContext.ApplicationName = "F-Spot";
-			ApplicationContext.TrySetProcessName (Defines.PACKAGE);
-
-			Paths.ApplicationName = "f-spot";
-			ThreadAssist.InitializeMainThread ();
-			ThreadAssist.ProxyToMainHandler = RunIdle;
-			XdgThumbnailSpec.DefaultLoader = (uri) => {
-				using (var file = ImageFile.Create (uri))
-					return file.Load ();
-			};
-
-			// Options and Option parsing
-			bool shutdown = false;
-			bool view = false;
-			bool slideshow = false;
-			bool import = false;
-
-			GLib.GType.Init ();
-			Catalog.Init ("f-spot", Defines.LOCALE_DIR);
-			
-			FSpot.Global.PhotoUri = new SafeUri (Preferences.Get<string> (Preferences.STORAGE_PATH));
-
-			ApplicationContext.CommandLine = new CommandLineParser (args, 0);
-
-			if (ApplicationContext.CommandLine.ContainsStart ("help")) {
-				ShowHelp ();
-				return 0;
-			}
-
-			if (ApplicationContext.CommandLine.Contains ("version")) {
-				ShowVersion ();
-				return 0;
-			}
-
-			if (ApplicationContext.CommandLine.Contains ("versions")) {
-				ShowAssemblyVersions ();
-				return 0;
-			}
-
-			if (ApplicationContext.CommandLine.Contains ("shutdown")) {
-				Log.Information ("Shutting down existing F-Spot server...");
-				shutdown = true;
-			}
-
-			if (ApplicationContext.CommandLine.Contains ("slideshow")) {
-				Log.Information ("Running F-Spot in slideshow mode.");
-				slideshow = true;
-			}
-
-			if (ApplicationContext.CommandLine.Contains ("basedir")) {
-				string dir = ApplicationContext.CommandLine ["basedir"];
-
-				if (!string.IsNullOrEmpty (dir))
-				{
-					FSpot.Global.BaseDirectory = dir;
-					Log.InformationFormat ("BaseDirectory is now {0}", dir);
-				} else {
-					Log.Error ("f-spot: -basedir option takes one argument");
-					return 1;
-				}
-			}
-
-			if (ApplicationContext.CommandLine.Contains ("photodir")) {
-				string dir = ApplicationContext.CommandLine ["photodir"];
-
-				if (!string.IsNullOrEmpty (dir))
-				{
-					FSpot.Global.PhotoUri = new SafeUri (dir);
-					Log.InformationFormat ("PhotoDirectory is now {0}", dir);
-				} else {
-					Log.Error ("f-spot: -photodir option takes one argument");
-					return 1;
-				}
-			}
-
-			if (ApplicationContext.CommandLine.Contains ("import"))
-				import = true;
-
-			if (ApplicationContext.CommandLine.Contains ("view"))
-				view = true;
-
-			if (ApplicationContext.CommandLine.Contains ("debug")) {
-				Log.Debugging = true;
-				// Debug GdkPixbuf critical warnings
-				GLib.LogFunc logFunc = new GLib.LogFunc (GLib.Log.PrintTraceLogFunction);
-				GLib.Log.SetLogHandler ("GdkPixbuf", GLib.LogLevelFlags.Critical, logFunc);
-
-				// Debug Gtk critical warnings
-				GLib.Log.SetLogHandler ("Gtk", GLib.LogLevelFlags.Critical, logFunc);
-
-				// Debug GLib critical warnings
-				GLib.Log.SetLogHandler ("GLib", GLib.LogLevelFlags.Critical, logFunc);
-
-				//Debug GLib-GObject critical warnings
-				GLib.Log.SetLogHandler ("GLib-GObject", GLib.LogLevelFlags.Critical, logFunc);
-
-				GLib.Log.SetLogHandler ("GLib-GIO", GLib.LogLevelFlags.Critical, logFunc);
-			}
-
-			// Validate command line options
-			if ((import && (view || shutdown || slideshow)) ||
-				(view && (shutdown || slideshow)) ||
-				(shutdown && slideshow))
-			{
-				Log.Error ("Can't mix -import, -view, -shutdown or -slideshow");
-				return 1;
-			}
-
-			InitializeAddins ();
-
-			// Gtk initialization
-			Gtk.Application.Init (Defines.PACKAGE, ref args);
-
-			// init web proxy globally
-			Platform.WebProxy.Init ();
-
-			if (File.Exists (Preferences.Get<string> (Preferences.GTK_RC))) {
-				if (File.Exists (Path.Combine (Global.BaseDirectory, "gtkrc")))
-					Gtk.Rc.AddDefaultFile (Path.Combine (Global.BaseDirectory, "gtkrc"));
-
-				Global.DefaultRcFiles = Gtk.Rc.DefaultFiles;
-				Gtk.Rc.AddDefaultFile (Preferences.Get<string> (Preferences.GTK_RC));
-				Gtk.Rc.ReparseAllForSettings (Gtk.Settings.Default, true);
-			}
-
-			try {
-				Gtk.Window.DefaultIconList = new Gdk.Pixbuf [] {
-					GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "f-spot", 16, (Gtk.IconLookupFlags)0),
-					GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "f-spot", 22, (Gtk.IconLookupFlags)0),
-					GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "f-spot", 32, (Gtk.IconLookupFlags)0),
-					GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "f-spot", 48, (Gtk.IconLookupFlags)0)
-				};
-			} catch {}
-
-			CleanRoomStartup.Startup (Startup);
-
-			return 0;
-		}
-
-		static void InitializeAddins ()
-		{
-			uint timer = Log.InformationTimerStart ("Initializing Mono.Addins");
-			AddinManager.Initialize (FSpot.Global.BaseDirectory);
-			AddinManager.Registry.Update (null);
-			SetupService setupService = new SetupService (AddinManager.Registry);
-			foreach (AddinRepository repo in setupService.Repositories.GetRepositories ()) {
-				if (repo.Url.StartsWith ("http://addins.f-spot.org/")) {
-					Log.InformationFormat ("Unregistering {0}", repo.Url);
-					setupService.Repositories.RemoveRepository (repo.Url);
-				}
-			}
-			Log.DebugTimerPrint (timer, "Mono.Addins Initialization took {0}");
-		}
-
-		static void Startup ()
-		{
-			if (ApplicationContext.CommandLine.Contains ("slideshow"))
-				App.Instance.Slideshow (null);
-			else if (ApplicationContext.CommandLine.Contains ("shutdown"))
-				App.Instance.Shutdown ();
-			else if (ApplicationContext.CommandLine.Contains ("view")) {
-				if (ApplicationContext.CommandLine.Files.Count == 0) {
-					Log.Error ("f-spot: -view option takes at least one argument");
-					System.Environment.Exit (1);
-				}
-
-				var list = new UriList ();
-
-				foreach (var f in ApplicationContext.CommandLine.Files)
-					list.AddUnknown (f);
-
-				if (list.Count == 0) {
-					ShowHelp ();
-					System.Environment.Exit (1);
-				}
-
-				App.Instance.View (list);
-			} else if (ApplicationContext.CommandLine.Contains ("import")) {
-				string dir = ApplicationContext.CommandLine ["import"];
-
-				if (string.IsNullOrEmpty (dir)) {
-					Log.Error ("f-spot: -import option takes one argument");
-					System.Environment.Exit (1);
-				}
-
-				App.Instance.Import (dir);
-			} else
-				App.Instance.Organize ();
-
-			if (!App.Instance.IsRunning)
-				Gtk.Application.Run ();
-		}
-
-		public static void RunIdle (InvokeHandler handler)
-		{
-			GLib.Idle.Add (delegate { handler (); return false; });
-		}
-	}
-}
diff --git a/src/ui/import.ui b/src/ui/import.ui
deleted file mode 100644
index 49ff912..0000000
--- a/src/ui/import.ui
+++ /dev/null
@@ -1,343 +0,0 @@
-<?xml version="1.0"?>
-<interface>
-  <!-- interface-requires gtk+ 2.12 -->
-  <!-- interface-naming-policy toplevel-contextual -->
-  <object class="GtkDialog" id="import_dialog">
-    <property name="title" translatable="yes">Import</property>
-    <property name="modal">True</property>
-    <property name="default_width">664</property>
-    <property name="type_hint">dialog</property>
-    <property name="has_separator">False</property>
-    <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox14">
-        <property name="visible">True</property>
-        <property name="orientation">vertical</property>
-        <child>
-          <object class="GtkVBox" id="vbox62">
-            <property name="visible">True</property>
-            <property name="border_width">6</property>
-            <property name="orientation">vertical</property>
-            <property name="spacing">6</property>
-            <child>
-              <object class="GtkVBox" id="vbox65">
-                <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">6</property>
-                <child>
-                  <object class="GtkHBox" id="hbox59">
-                    <property name="visible">True</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="import_label">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes" comments="Translators: this string means 'source of import'">Import from:</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkComboBox" id="sources_combo">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHPaned" id="import_hpaned">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="position">1</property>
-                    <child>
-                      <object class="GtkScrolledWindow" id="icon_scrolled">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="hscrollbar_policy">automatic</property>
-                        <property name="vscrollbar_policy">automatic</property>
-                        <property name="shadow_type">in</property>
-                        <child>
-                          <placeholder/>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="resize">False</property>
-                        <property name="shrink">True</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkScrolledWindow" id="photo_scrolled">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="hscrollbar_policy">automatic</property>
-                        <property name="vscrollbar_policy">automatic</property>
-                        <property name="shadow_type">in</property>
-                        <child>
-                          <placeholder/>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="resize">True</property>
-                        <property name="shrink">True</property>
-                      </packing>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkProgressBar" id="progress_bar">
-                    <property name="visible">True</property>
-                    <property name="pulse_step">0.02</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">2</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkHBox" id="hbox1">
-                <property name="visible">True</property>
-                <property name="spacing">6</property>
-                <child>
-                  <object class="GtkLabel" id="label228">
-                    <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Attach Tags:</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHBox" id="tagentry_box">
-                    <property name="visible">True</property>
-                    <child>
-                      <placeholder/>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkTable" id="table1">
-                <property name="visible">True</property>
-                <property name="n_rows">2</property>
-                <property name="n_columns">2</property>
-                <property name="column_spacing">6</property>
-                <property name="row_spacing">6</property>
-                <property name="homogeneous">True</property>
-                <child>
-                  <object class="GtkCheckButton" id="duplicate_check">
-                    <property name="label" translatable="yes">Detect duplicates</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="active">True</property>
-                    <property name="draw_indicator">True</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkCheckButton" id="copy_check">
-                    <property name="label" translatable="yes">Copy files to the Photos folder</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="active">True</property>
-                    <property name="draw_indicator">True</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="right_attach">2</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkCheckButton" id="recurse_check">
-                    <property name="label" translatable="yes">Include subfolders</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="active">True</property>
-                    <property name="draw_indicator">True</property>
-                  </object>
-                  <packing>
-                    <property name="top_attach">1</property>
-                    <property name="bottom_attach">2</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHBox" id="hbox2">
-                    <property name="visible">True</property>
-                    <property name="spacing">2</property>
-                    <child>
-                      <object class="GtkCheckButton" id="remove_check">
-                        <property name="label" translatable="yes">Remove original files after import</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="draw_indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkAlignment" id="alignment1">
-                        <property name="visible">True</property>
-                        <property name="xalign">1</property>
-                        <child>
-                          <object class="GtkButton" id="remove_warning_button">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <child>
-                              <object class="GtkImage" id="image1">
-                                <property name="visible">True</property>
-                                <property name="stock">gtk-dialog-warning</property>
-                                <property name="icon-size">1</property>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="right_attach">2</property>
-                    <property name="top_attach">1</property>
-                    <property name="bottom_attach">2</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">2</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area14">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="cancel_button">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="import_button">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <child>
-                  <object class="GtkAlignment" id="alignment49">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox64">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image15">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-ok</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label157">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">Import</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-    <action-widgets>
-      <action-widget response="-6">cancel_button</action-widget>
-      <action-widget response="-5">import_button</action-widget>
-    </action-widgets>
-  </object>
-</interface>
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 70109f0..bf5c6cb 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -46,6 +46,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -69,6 +70,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -78,9 +83,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -94,6 +96,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -121,6 +124,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -217,14 +221,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
@@ -304,7 +306,6 @@ LINK_MONO_POSIX = -r:Mono.Posix
 LINK_MONO_CAIRO = -r:Mono.Cairo
 LINK_MONO_SIMD = -r:Mono.Simd
 LINK_MONODATA = -r:Mono.Data
-LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
 LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
 LINK_KEYRING = $(KEYRINGSHARP_LIBS)
 LINK_GLIB = $(GLIBSHARP_LIBS)
@@ -365,7 +366,7 @@ LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
 LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
 
 # FSpot.Core
-REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS) $(LINK_HYENA_DATA_SQLITE_DEPS)
 LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
 LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
 
@@ -374,6 +375,10 @@ REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
 LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
 LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
 
+# FSpot.Database
+REF_FSPOT_DATABASE = $(LINK_HYENA_DATA_SQLITE_DEPS) $(LINK_FSPOT_CORE_DEPS) $(LINK_SYSTEMDATA) $(LINK_FSPOT_QUERY_DEPS)
+LINK_FSPOT_DATABASE_DEPS = $(REF_FSPOT_DATABASE)
+
 # FSpot.JobScheduler
 REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
 LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
@@ -389,17 +394,18 @@ REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DB
 LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
 LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
 
-# FSpot.Widgets
-REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
-LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
-LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS) $(LINK_HENA_GUI_DEPS)
+# FSpot.Gui
+REF_FSPOT_GUI = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_GUI = -r:$(DIR_BIN)/FSpot.Gui.dll
+LINK_FSPOT_GUI_DEPS = $(REF_FSPOT_GUI) $(LINK_FSPOT_GUI) $(LINK_HENA_GUI_DEPS)
 
 # FSpot (executable)
-REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+REF_FSPOT = $(LINK_FSPOT_GUI_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
             $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
-            $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+            $(LINK_GLADE) $(LINK_MONODATA) \
             $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
-            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB)
+            $(LINK_GNOME) $(LINK_HYENA_GUI_DEPS) $(LINK_TAGLIB) $(LINK_FSPOT_DATABASE_DEPS)
+
 
 # FIXME: do not link executables
 LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
@@ -420,10 +426,10 @@ REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
 LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
 LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
 REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
-REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+REF_SMUGMUGNET = $(LINK_HYENA_DEPS)
 LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
 LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
-REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING) $(LINK_FSPOT_DEPS)
 REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
 LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
 LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
diff --git a/tools/Makefile.in b/tools/Makefile.in
index c2ee3fa..f1e3963 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -47,6 +47,7 @@ am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
 	$(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
 	$(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
 	$(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+	$(top_srcdir)/build/m4/f-spot/libfspot.m4 \
 	$(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -95,6 +96,10 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_HOST_CPU = @BUILD_HOST_CPU@
+BUILD_HOST_OS = @BUILD_HOST_OS@
+BUILD_TIME = @BUILD_TIME@
+BUILD_VENDOR_ID = @BUILD_VENDOR_ID@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -104,9 +109,6 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CSC_DEFINES = @CSC_DEFINES@
 CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DATADIRNAME = @DATADIRNAME@
 DEFS = @DEFS@
@@ -120,6 +122,7 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ENABLE_RELEASE = @ENABLE_RELEASE@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
@@ -147,6 +150,7 @@ GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
+GMCS_FLAGS = @GMCS_FLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
@@ -243,14 +247,12 @@ UNIQUE_LIBS = @UNIQUE_LIBS@
 USE_NLS = @USE_NLS@
 V = @V@
 VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@

-- 
f-spot



More information about the Pkg-cli-apps-commits mailing list