diff --git a/NEWS b/NEWS
index a8828d345..168c3dc48 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
 ver 0.16 (20??/??/??)
 * protocol:
   - send song modification time to client
+  - added "update" idle event
 * decoders:
   - ffmpeg: support multiple tags
 * mixers:
diff --git a/doc/protocol.xml b/doc/protocol.xml
index 7ef1dc379..6b2ff587f 100644
--- a/doc/protocol.xml
+++ b/doc/protocol.xml
@@ -134,7 +134,16 @@
               <listitem>
                 <para>
                   <returnvalue>database</returnvalue>: the song database
-                  has been updated
+                  has been modified
+                </para>
+              </listitem>
+              <listitem>
+                <para>
+                  <returnvalue>update</returnvalue>: a database update
+                  has started or finished.  If the database was
+                  modified during the update, the
+                  <returnvalue>database</returnvalue> event is also
+                  emitted.
                 </para>
               </listitem>
               <listitem>
diff --git a/src/idle.c b/src/idle.c
index 11b57376d..c0bb7a908 100644
--- a/src/idle.c
+++ b/src/idle.c
@@ -40,6 +40,7 @@ static const char *const idle_names[] = {
 	"output",
 	"options",
 	"sticker",
+	"update",
         NULL
 };
 
diff --git a/src/idle.h b/src/idle.h
index a69acabb0..c8ed57f74 100644
--- a/src/idle.h
+++ b/src/idle.h
@@ -50,6 +50,9 @@ enum {
 
 	/** a sticker has been modified. */
 	IDLE_STICKER = 0x80,
+
+	/** a database update has started or finished. */
+	IDLE_UPDATE = 0x100,
 };
 
 /**
diff --git a/src/update.c b/src/update.c
index 1088f5338..d3e3b7650 100644
--- a/src/update.c
+++ b/src/update.c
@@ -822,6 +822,9 @@ directory_update_init(char *path)
 		return next_task_id > update_task_id_max ?  1 : next_task_id;
 	}
 	spawn_update_task(path);
+
+	idle_add(IDLE_UPDATE);
+
 	return update_task_id;
 }
 
@@ -861,6 +864,8 @@ static void update_finished_event(void)
 
 	g_thread_join(update_thr);
 
+	idle_add(IDLE_UPDATE);
+
 	if (modified) {
 		/* send "idle" events */
 		playlistVersionChange(&g_playlist);