diff -u -r pristine/gtk/gtkfilechooserbutton.c gtk+-2.18.3/gtk/gtkfilechooserbutton.c
--- pristine/gtk/gtkfilechooserbutton.c	2009-10-09 01:00:43.000000000 -0400
+++ gtk+-2.18.3/gtk/gtkfilechooserbutton.c	2009-11-10 19:25:55.257874597 -0500
@@ -1776,10 +1776,16 @@
 	      GFile *base_file;
 
 	      base_file = _gtk_file_system_volume_get_root (volume);
-	      if (base_file != NULL && !g_file_is_native (base_file))
+	      if (base_file != NULL)
 		{
-		  _gtk_file_system_volume_free (volume);
-		  continue;
+                  if (!g_file_is_native (base_file))
+                    {
+                      g_object_unref (base_file);
+		      _gtk_file_system_volume_free (volume);
+		      continue;
+                    }
+                  else
+                    g_object_unref (base_file);
 		}
 	    }
 	}
diff -u -r pristine/gtk/gtkfilechooserdefault.c gtk+-2.18.3/gtk/gtkfilechooserdefault.c
--- pristine/gtk/gtkfilechooserdefault.c	2009-10-16 10:35:45.000000000 -0400
+++ gtk+-2.18.3/gtk/gtkfilechooserdefault.c	2009-11-10 19:25:49.165873229 -0500
@@ -828,7 +828,7 @@
   if (cancellable)
     g_cancellable_cancel (cancellable);
 
-  if (!(shortcut_type == SHORTCUT_TYPE_FILE || 
+  if (!(shortcut_type == SHORTCUT_TYPE_FILE ||
 	shortcut_type == SHORTCUT_TYPE_VOLUME) ||
       !col_data)
     return;
@@ -840,12 +840,10 @@
       volume = col_data;
       _gtk_file_system_volume_free (volume);
     }
-  else
+  if (shortcut_type == SHORTCUT_TYPE_FILE)
     {
       GFile *file;
 
-      g_assert (shortcut_type == SHORTCUT_TYPE_FILE);
-
       file = col_data;
       g_object_unref (file);
     }
@@ -2094,7 +2092,10 @@
                 }
 
               if (!base_is_native)
-                continue;
+                {
+                  _gtk_file_system_volume_free (volume);
+                  continue;
+                }
 	    }
 	}
 
@@ -3587,9 +3588,7 @@
       if (shortcut_type == SHORTCUT_TYPE_SEPARATOR)
 	return FALSE;
       else if (shortcut_type == SHORTCUT_TYPE_VOLUME)
-	{
-	  return FALSE;
-	}
+        return FALSE;
       else if (shortcut_type == SHORTCUT_TYPE_FILE)
 	{
 	  GFile *file;
@@ -10794,6 +10793,9 @@
 	 			       "standard::type",
 				       shortcuts_activate_get_info_cb, data);
 	}
+
+      if (volume)
+        _gtk_file_system_volume_free (volume);
     }
   else if (shortcut_type == SHORTCUT_TYPE_SEARCH)
     {
diff -u -r pristine/gtk/gtkfilesystem.c gtk+-2.18.3/gtk/gtkfilesystem.c
--- pristine/gtk/gtkfilesystem.c	2009-06-04 15:18:04.000000000 -0400
+++ gtk+-2.18.3/gtk/gtkfilesystem.c	2009-11-10 19:20:13.192873941 -0500
@@ -468,6 +468,8 @@
 
 	  priv->volumes = g_slist_prepend (priv->volumes, g_object_ref (drive));
 	}
+
+      g_object_unref (drive);
     }
 
   g_list_free (drives);
@@ -499,6 +501,8 @@
           /* see comment above in why we add an icon for a volume */
           priv->volumes = g_slist_prepend (priv->volumes, g_object_ref (volume));
         }
+
+      g_object_unref (volume);
     }
 
   /* add mounts that has no volume (/etc/mtab mounts, ftp, sftp,...) */
@@ -520,11 +524,13 @@
        */
       if (mount_referenced_by_volume_activation_root (volumes, mount))
         {
+          g_object_unref (mount);
           continue;
         }
 
       /* show this mount */
       priv->volumes = g_slist_prepend (priv->volumes, g_object_ref (mount));
+      g_object_unref (mount);
     }
 
   g_list_free (volumes);
@@ -604,6 +610,7 @@
   get_volumes_list (GTK_FILE_SYSTEM (file_system));
 
   list = g_slist_copy (priv->volumes);
+  g_slist_foreach (list, (GFunc)g_object_ref, NULL);
 
 #ifndef G_OS_WIN32
   /* Prepend root volume */
@@ -1025,6 +1032,8 @@
 
   if (error)
     g_error_free (error);
+
+  _gtk_file_system_volume_free (volume);
 }
 
 GCancellable *
