diff --git a/src/Clients/MainApp/f-spot.in b/src/Clients/MainApp/f-spot.in
index ee10345..bd32807 100644
--- a/src/Clients/MainApp/f-spot.in
+++ b/src/Clients/MainApp/f-spot.in
@@ -4,6 +4,7 @@ prefix=@prefix@
 exec_prefix=@exec_prefix@
 libdir=@libdir@
 turtledir=@TURTLEDIR@
+beagledir=@BEAGLE_DIR@
 
 EXE_TO_RUN="$libdir/f-spot/f-spot.exe"
 
@@ -14,6 +15,10 @@ else
     DBUSLAUNCH=""
 fi
 
+if test "x$beagledir" != "x"; then
+    export MONO_PATH=$beagledir:$MONO_PATH
+fi
+
 if test "x$turtledir" != "x"; then
     export MONO_PATH=$turtledir/lib:$turtledir/gui:$MONO_PATH
 fi
diff --git a/configure.ac b/configure.ac
index e4086a6..bdef114 100644
--- a/configure.ac
+++ b/configure.ac
@@ -133,6 +133,7 @@ GIO_REQUIRED=2.22.0
 GTKSHARPBEANS_REQUIRED=2.13.92
 GTKSHARP_REQUIRED=2.12.2
 GTK_REQUIRED=2.14
+BEAGLE_REQUIRED=0.3.8
 NDESK_DBUS_REQUIRED=0.4.2
 NDESK_DBUS_GLIB_REQUIRED=0.3.0
 MONO_CAIRO_REQUIRED=1.2.5
@@ -177,6 +178,19 @@ AC_SUBST(CSC_DEFINES)
 dnl Mono.Addins libraries
 FSPOT_CHECK_MONO_ADDINS
 
+PKG_CHECK_MODULES(BEAGLE, beagle-0.0 >= $BEAGLE_REQUIRED,
+	   [
+	            dnl this is a work around to avoid linking against beagles Util.dll
+	            BEAGLE_DIR=`$PKG_CONFIG --variable=dlldir beagle-0.0`   
+	            LINK_BEAGLE="-r:$BEAGLE_DIR/Beagle"
+	            CSC_DEFINES="$CSC_DEFINES -d:ENABLE_BEAGLE"
+	   ],
+	   [
+	            AC_MSG_RESULT([beagle not found])
+	   ])
+AC_SUBST(BEAGLE_DIR)
+AC_SUBST(LINK_BEAGLE)
+
 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)
@@ -375,6 +389,8 @@ 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/Services/Makefile
+src/Extensions/Services/FSpot.Services.BeagleService/Makefile
 src/Extensions/Tools/Makefile
 src/Extensions/Tools/FSpot.Tools.RawPlusJpeg/Makefile
 src/Extensions/Tools/FSpot.Tools.ChangePhotoPath/Makefile
diff --git a/src/Extensions/Makefile.am b/src/Extensions/Makefile.am
index 5c6087c..c41aada 100644
--- a/src/Extensions/Makefile.am
+++ b/src/Extensions/Makefile.am
@@ -1,5 +1,6 @@
 SUBDIRS = 			\
 	Editors		\
 	Exporters		\
+	Services		\
 	Tools			\
 	Transitions
diff --git a/src/Extensions/Services/FSpot.Services.BeagleService/FSpot.Services.BeagleService.csproj b/src/Extensions/Services/FSpot.Services.BeagleService/FSpot.Services.BeagleService.csproj
new file mode 100644
index 0000000..8917337
--- /dev/null
+++ b/src/Extensions/Services/FSpot.Services.BeagleService/FSpot.Services.BeagleService.csproj
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E47DE926-4490-480C-89F5-ADB6E22C488C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>FSpot.Services.Beagle</RootNamespace>
+    <AssemblyName>FSpot.Services.Beagle</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <ReleaseVersion>0.7.2</ReleaseVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\bin</OutputPath>
+    <DefineConstants>DEBUG</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>none</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\bin</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+  </PropertyGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <ItemGroup>
+    <Compile Include="FSpot.Services.BeagleService\BeagleService.cs" />
+    <Compile Include="FSpot.Services.BeagleService\BeagleNotifier.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Resources\BeagleService.addin.xml">
+      <LogicalName>BeagleService.addin.xml</LogicalName>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ProjectExtensions>
+    <MonoDevelop>
+      <Properties>
+        <MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="true" RelativeMakefileName="Makefile.am" BuildTargetName="" CleanTargetName="" IsAutotoolsProject="true" RelativeConfigureInPath="../../../..">
+          <BuildFilesVar Sync="true" Name="SOURCES" />
+          <DeployFilesVar />
+          <ResourcesVar Sync="true" Name="RESOURCES" />
+          <OthersVar />
+          <GacRefVar />
+          <AsmRefVar />
+          <ProjectRefVar />
+        </MonoDevelop.Autotools.MakefileInfo>
+      </Properties>
+    </MonoDevelop>
+  </ProjectExtensions>
+  <ItemGroup>
+    <Reference Include="System" />
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="FSpot.Services.BeagleService\" />
+    <Folder Include="Resources\" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Core\FSpot.Utils\FSpot.Utils.csproj">
+      <Project>{CE160879-1BF0-4711-A18F-FDA2772900FA}</Project>
+      <Name>FSpot.Utils</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\Clients\MainApp\MainApp.csproj">
+      <Project>{27EC05FB-0223-4B26-8157-E49AF81D0007}</Project>
+      <Name>MainApp</Name>
+    </ProjectReference>
+  </ItemGroup>
+</Project>
diff --git a/src/Extensions/Services/FSpot.Services.BeagleService/FSpot.Services.BeagleService/BeagleNotifier.cs b/src/Extensions/Services/FSpot.Services.BeagleService/FSpot.Services.BeagleService/BeagleNotifier.cs
new file mode 100644
index 0000000..92edb69
--- /dev/null
+++ b/src/Extensions/Services/FSpot.Services.BeagleService/FSpot.Services.BeagleService/BeagleNotifier.cs
@@ -0,0 +1,53 @@
+#if ENABLE_BEAGLE
+using Beagle;
+using FSpot.Core;
+
+namespace FSpot
+{
+    public static class BeagleNotifier
+    {
+        public static void SendUpdate (IPhoto item)
+        {
+	     System.Uri uri = new System.Uri (item.DefaultVersion.Uri);
+            Indexable indexable = new Indexable (uri);
+            indexable.Type = IndexableType.PropertyChange;
+            Beagle.Property prop;
+
+            // Clear the existing tags
+            prop = Beagle.Property.NewKeyword ("fspot:Tag", "");
+            prop.IsMutable = true;
+            prop.IsPersistent = true;
+            indexable.AddProperty (prop);
+            prop = Beagle.Property.NewKeyword ("image:Tag", "");
+            prop.IsMutable = true;
+            prop.IsPersistent = true;
+            indexable.AddProperty (prop);
+
+            foreach (Tag t in item.Tags) {
+                prop = Beagle.Property.NewKeyword ("fspot:Tag", t.Name);
+                prop.IsMutable = true;
+                prop.IsPersistent = true;
+                indexable.AddProperty (prop);
+                prop = Beagle.Property.NewKeyword ("image:Tag", t.Name);
+                prop.IsMutable = true;
+                prop.IsPersistent = true;
+                indexable.AddProperty (prop);
+            }
+
+            prop = Beagle.Property.New ("fspot:Description", item.Description);
+            prop.IsMutable = true;
+            prop.IsPersistent = true;
+            indexable.AddProperty (prop);
+
+            // Create a message to send to the daemon with this information.
+            // The source tells it what index the existing "/home/joe/test.txt" document lives.
+            IndexingServiceRequest req = new IndexingServiceRequest ();
+            req.Keepalive = false;
+            req.Source = "Files";
+            req.Add (indexable);
+
+            req.SendAsync ();
+        }
+    }
+}
+#endif
\ No newline at end of file
diff --git a/src/Extensions/Services/FSpot.Services.BeagleService/FSpot.Services.BeagleService/BeagleService.cs b/src/Extensions/Services/FSpot.Services.BeagleService/FSpot.Services.BeagleService/BeagleService.cs
new file mode 100644
index 0000000..ba7d81a
--- /dev/null
+++ b/src/Extensions/Services/FSpot.Services.BeagleService/FSpot.Services.BeagleService/BeagleService.cs
@@ -0,0 +1,55 @@
+/*
+ * BeagleService.BeagleService.cs
+ *
+ * Author(s):
+ *     Stephane Delcroix  <stephane@delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ *
+ */
+using System;
+using FSpot;
+using FSpot.Core;
+using FSpot.Extensions;
+using Hyena;
+
+namespace BeagleService
+{
+    public class BeagleService : IService
+    {
+        public bool Start ()
+        {
+            uint timer = Log.InformationTimerStart ("Starting BeagleService");
+            try {
+                App.Instance.Database.Photos.ItemsChanged += HandleDbItemsChanged;
+            } catch {
+                Log.Warning ("unable to hook the BeagleNotifier. are you running view mode?");
+            }
+            Log.DebugTimerPrint (timer, "BeagleService startup took {0}");
+            return true;
+        }
+
+        public bool Stop ()
+        {
+            uint timer = Log.InformationTimerStart ("Stopping BeagleService");
+            Log.DebugTimerPrint (timer, "BeagleService shutdown took {0}");
+            return true;
+        }
+
+        private void HandleDbItemsChanged (object sender, DbItemEventArgs<Photo> args)
+        {
+#if ENABLE_BEAGLE
+            Log.Debug ("Notifying beagle");
+            foreach (DbItem item in args.Items) {
+                if (item as Photo != null) {
+                    try {
+                        BeagleNotifier.SendUpdate (item as Photo);
+                    } catch (Exception e) {
+                        Log.Debug ("BeagleNotifier.SendUpdate failed with {0}", e.Message);
+                    }
+                }
+#endif
+            }
+        }
+    }
+}
diff --git a/src/Extensions/Services/FSpot.Services.BeagleService/Makefile.am b/src/Extensions/Services/FSpot.Services.BeagleService/Makefile.am
new file mode 100644
index 0000000..6450308
--- /dev/null
+++ b/src/Extensions/Services/FSpot.Services.BeagleService/Makefile.am
@@ -0,0 +1,12 @@
+ASSEMBLY = FSpot.Services.BeagleService
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_BEAGLESERVICE)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	FSpot.Services.BeagleService/BeagleNotifier.cs \
+	FSpot.Services.BeagleService/BeagleService.cs
+
+RESOURCES = Resources/BeagleService.addin.xml
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Extensions/Services/FSpot.Services.BeagleService/Resources/BeagleService.addin.xml b/src/Extensions/Services/FSpot.Services.BeagleService/Resources/BeagleService.addin.xml
new file mode 100644
index 0000000..667fa58
--- /dev/null
+++ b/src/Extensions/Services/FSpot.Services.BeagleService/Resources/BeagleService.addin.xml
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+ id="BeagleService"
+ version="0.7.0.0"
+ compatVersion="0.7.0.0"
+ name="Beagle Service"
+ description="Notify Beagle on image changes"
+ author="Stephane Delcroix"
+ url="http://f-spot.org/Extensions"
+ category="Services"
+ defaultEnabled="true">
+ <Dependencies>
+     <Addin id="Core" version="0.8"/>
+ </Dependencies>
+ <Extension path = "/FSpot/Services">
+     <Service class = "BeagleService.BeagleService" />
+ </Extension>
+</Addin>
diff --git a/src/Extensions/Services/Makefile.am b/src/Extensions/Services/Makefile.am
new file mode 100644
index 0000000..60970c3
--- /dev/null
+++ b/src/Extensions/Services/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = 			\
+	FSpot.Services.BeagleService
diff --git a/build/build.environment.mk b/build/build.environment.mk
index e9ef74a..d54f45f 100644
--- a/build/build.environment.mk
+++ b/build/build.environment.mk
@@ -169,6 +169,7 @@ REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
 REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
 REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
 
+REF_FSPOT_EXTENSION_BEAGLESERVICE = $(LINK_BEAGLE) $(LINK_FSPOT_DEPS)
 
 
 
-- 
1.7.6
