diff --git a/configure.ac b/configure.ac
index eff584b..d7f70fd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -94,7 +94,7 @@ if test "$enable_maintainer_mode" = "yes"; then
 	GECKO_WARN_CXXFLAGS="-Wall -Wconversion -Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth $GECKO_WARN_CXXFLAGS"
 fi
 
-GLIB_REQUIRED=2.15.0
+GLIB_REQUIRED=2.15.1
 GTK_REQUIRED=2.11.6
 LIBXML_REQUIRED=2.6.12
 LIBXSLT_REQUIRED=1.1.7
@@ -110,7 +110,7 @@ DBUS_GLIB_REQUIRED=0.35
 PKG_CHECK_MODULES([DEPENDENCIES], [
 		  glib-2.0 >= $GLIB_REQUIRED
 		  gmodule-2.0
-		  gio-unix-2.0
+		  gio-unix-2.0 >= $GLIB_REQUIRED
 		  gtk+-2.0 >= $GTK_REQUIRED
 		  gtk+-unix-print-2.0 >= $GTK_REQUIRED
 		  libxml-2.0 >= $LIBXML_REQUIRED
diff --git a/embed/ephy-base-embed.c b/embed/ephy-base-embed.c
index a51f4a9..adb2e0a 100644
--- a/embed/ephy-base-embed.c
+++ b/embed/ephy-base-embed.c
@@ -75,7 +75,7 @@ struct _EphyBaseEmbedPrivate {
   GdkPixbuf *icon;
 
   /* File watch */
-  GObject *monitor;
+  GFileMonitor *monitor;
   guint reload_scheduled_id;
   guint reload_delay_ticks;
 
@@ -1266,15 +1266,8 @@ ephy_base_embed_file_monitor_cancel (EphyBaseEmbed *embed)
 
   if (priv->monitor != NULL) {
     LOG ("Cancelling file monitor");
-
-    if (G_IS_FILE_MONITOR (priv->monitor))
-    {
-      g_file_monitor_cancel (G_FILE_MONITOR (priv->monitor));
-    }
-    else if (G_IS_DIRECTORY_MONITOR (priv->monitor))
-    {
-      g_directory_monitor_cancel (G_DIRECTORY_MONITOR (priv->monitor));
-    }
+    
+    g_file_monitor_cancel (G_FILE_MONITOR (priv->monitor));
     priv->monitor = NULL;
   }
 
@@ -1319,15 +1312,25 @@ ephy_base_embed_file_monitor_reload_cb (EphyBaseEmbed *embed)
 }
 
 static void
-ephy_base_embed_file_monitor_process_event (GFile *file,
-                                            gboolean uri_is_directory,
-                                            GFileMonitorEvent event_type,
-                                            EphyBaseEmbed *embed)
+ephy_base_embed_file_monitor_cb (GFileMonitor *monitor,
+                                 GFile *file,
+                                 GFile *other_file,
+                                 GFileMonitorEvent event_type,
+                                 EphyBaseEmbed *embed)
 {
   gboolean should_reload;
+  gboolean uri_is_directory;
   EphyBaseEmbedPrivate *priv = embed->priv;
-
-  LOG ("File '%s' has changed, scheduling reload", monitor_uri);
+  GFileInfo *file_info;
+  GFileType file_type;
+  
+  file_info = g_file_query_info (file,
+                                 G_FILE_ATTRIBUTE_STANDARD_TYPE,
+                                 0, NULL, NULL);
+  file_type = g_file_info_get_file_type (file_info);
+  g_object_unref (file_info);
+  
+  uri_is_directory = (file_type == G_FILE_TYPE_DIRECTORY);
 
   switch (event_type) {
     /* These events will always trigger a reload: */
@@ -1374,26 +1377,6 @@ ephy_base_embed_file_monitor_process_event (GFile *file,
 }
 
 static void
-ephy_base_embed_directory_monitor_cb (GDirectoryMonitor *monitor,
-                                      GFile *child,
-                                      GFile *other_child,
-                                      GFileMonitorEvent event_type,
-                                      EphyBaseEmbed *embed)
-{
-  ephy_base_embed_file_monitor_process_event (child, TRUE, event_type, embed);
-}
-
-static void
-ephy_base_embed_file_monitor_cb (GFileMonitor *monitor,
-                                 GFile *file,
-                                 GFile *other_file,
-                                 GFileMonitorEvent event_type,
-                                 EphyBaseEmbed *embed)
-{
-  ephy_base_embed_file_monitor_process_event (file, FALSE, event_type, embed);
-}
-
-static void
 ephy_base_embed_update_file_monitor (EphyBaseEmbed *embed,
                                      const gchar *address)
 {
@@ -1402,6 +1385,7 @@ ephy_base_embed_update_file_monitor (EphyBaseEmbed *embed,
   GFile *file;
   GFileType file_type;
   GFileInfo *file_info;
+  GFileMonitor *monitor = NULL;
 
   if (priv->monitor != NULL &&
       priv->address != NULL && address != NULL &&
@@ -1424,24 +1408,21 @@ ephy_base_embed_update_file_monitor (EphyBaseEmbed *embed,
 
   if (file_type == G_FILE_TYPE_DIRECTORY)
   {
-    GDirectoryMonitor *monitor;
     monitor = g_file_monitor_directory (file, 0, NULL);
     g_signal_connect (monitor, "changed",
-                      G_CALLBACK (ephy_base_embed_directory_monitor_cb),
+                      G_CALLBACK (ephy_base_embed_file_monitor_cb),
                       embed);
     LOG ("Installed monitor for directory '%s'", address);
-    priv->monitor = G_OBJECT (monitor);
   }
   else if (file_type == G_FILE_TYPE_REGULAR)
   {
-    GFileMonitor *monitor;
     monitor = g_file_monitor_file (file, 0, NULL);
     g_signal_connect (monitor, "changed",
                       G_CALLBACK (ephy_base_embed_file_monitor_cb),
                       embed);
     LOG ("Installed monitor for file '%s'", address);
-    priv->monitor = G_OBJECT (monitor);
   }
+  priv->monitor = monitor;
 }
 
 void
diff --git a/src/ephy-extensions-manager.c b/src/ephy-extensions-manager.c
index c91885f..10aa75f 100644
--- a/src/ephy-extensions-manager.c
+++ b/src/ephy-extensions-manager.c
@@ -996,10 +996,10 @@ schedule_load_from_monitor (EphyExtensionsManager *manager,
 }
 
 static void
-dir_changed_cb (GDirectoryMonitor *monitor,
+dir_changed_cb (GFileMonitor *monitor,
 		GFile *child,
 		GFile *other_child,
-		gint event_type,
+		GFileMonitorEvent event_type,
 		EphyExtensionsManager *manager)
 {
 	char *path;
@@ -1036,7 +1036,7 @@ ephy_extensions_manager_load_dir (EphyExtensionsManager *manager,
 	struct dirent *e;
 	char *file_path;
 	GFile *directory;
-	GDirectoryMonitor *monitor;
+	GFileMonitor *monitor;
 
 	LOG ("Scanning directory '%s'", path);
 
@@ -1160,7 +1160,7 @@ ephy_extensions_manager_dispose (GObject *object)
 
 	if (priv->dir_monitors != NULL)
 	{
-		g_list_foreach (priv->dir_monitors, (GFunc) g_directory_monitor_cancel, NULL);
+		g_list_foreach (priv->dir_monitors, (GFunc) g_file_monitor_cancel, NULL);
 		g_list_free (priv->dir_monitors);
 		priv->dir_monitors = NULL;
 	}
