Index: monitor/gphoto2/ggphoto2volume.c
===================================================================
--- monitor/gphoto2/ggphoto2volume.c	(revision 2042)
+++ monitor/gphoto2/ggphoto2volume.c	(working copy)
@@ -260,21 +260,28 @@
   g_return_val_if_fail (pool != NULL, NULL);
   g_return_val_if_fail (foreign_mount_root != NULL, NULL);
 
+#if 0
   if (!hal_device_has_capability (device, "camera") ||
       (hal_device_has_capability (device, "portable_audio_player") &&
-       hal_device_get_property_bool (device, "camera.libgphoto2.support")))
+       hal_device_get_property_bool (device, "camera.libgphoto2.support"))) {
+       	  g_message ("not audio player, photo, or camera");
     return NULL;
-
+  }
+#endif
   /* OK, so we abuse storage_udi and drive_device for the USB main
    * device that holds this interface...
    */
   storage_udi = hal_device_get_property_string (device, "info.parent");
-  if (storage_udi == NULL)
+  if (storage_udi == NULL) {
+  	  g_message ("no parent");
     return NULL;
+  }
 
   drive_device = hal_pool_get_device_by_udi (pool, storage_udi);
-  if (drive_device == NULL)
+  if (drive_device == NULL) {
+  	  g_message ("no drive device");
     return NULL;
+  }
 
   /* TODO: other OS'es? Will address this with DK aka HAL 2.0 */
   device_path = hal_device_get_property_string (drive_device, "linux.device_file");
Index: monitor/gphoto2/Makefile.am
===================================================================
--- monitor/gphoto2/Makefile.am	(revision 2042)
+++ monitor/gphoto2/Makefile.am	(working copy)
@@ -29,6 +29,7 @@
 	-I$(top_srcdir)/monitor/proxy           \
 	$(GLIB_CFLAGS)                          \
 	$(HAL_CFLAGS)                           \
+	$(GPHOTO2_CFLAGS)			\
 	-DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\"	\
 	-DGVFS_LOCALEDIR=\""$(localedir)"\"	\
 	-DG_DISABLE_DEPRECATED			\
@@ -40,6 +41,7 @@
 gvfs_gphoto2_volume_monitor_LDADD  =		     			      \
 	$(GLIB_LIBS)                                 			      \
 	$(HAL_LIBS)                                  			      \
+	$(GPHOTO2_LIBS)                              			      \
 	$(top_builddir)/common/libgvfscommon.la 			      \
 	$(top_builddir)/monitor/proxy/libgvfsproxyvolumemonitordaemon-noin.la \
 	$(NULL)
Index: monitor/gphoto2/ggphoto2volumemonitor.c
===================================================================
--- monitor/gphoto2/ggphoto2volumemonitor.c	(revision 2042)
+++ monitor/gphoto2/ggphoto2volumemonitor.c	(working copy)
@@ -29,6 +29,7 @@
 
 #include <glib.h>
 #include <glib/gi18n-lib.h>
+#include <gphoto2.h>
 #include <gio/gio.h>
 
 #include "ggphoto2volumemonitor.h"
@@ -448,6 +449,68 @@
     }
 }
 
+static GList *
+get_stores_for_camera (int bus_num, int device_num)
+{
+	GList *l;
+	CameraStorageInformation *storage_info;
+	GPContext *context;
+	GPPortInfo info;
+	GPPortInfoList *il;
+	int num_storage_info, n;
+	Camera *camera;
+	char *port;
+	guint i;
+
+	il = NULL;
+	camera = NULL;
+	context = NULL;
+	l = NULL;
+	port = g_strdup_printf ("usb:%d,%d", bus_num, device_num);
+
+	/* Connect to the camera */
+	context = gp_context_new ();
+	if (gp_camera_new (&camera) != 0)
+		goto out;
+	if (gp_port_info_list_new (&il) != 0)
+		goto out;
+	if (gp_port_info_list_load (il) != 0)
+		goto out;
+	n = gp_port_info_list_lookup_path (il, port);
+	if (n == GP_ERROR_UNKNOWN_PORT)
+		goto out;
+	if (gp_port_info_list_get_info (il, n, &info) != 0)
+		goto out;
+	if (gp_camera_set_port_info (camera, info) != 0)
+		goto out;
+	gp_port_info_list_free (il);
+	if (gp_camera_init (camera, context) != 0)
+		goto out;
+
+	/* Get information about the storage heads */
+	if (gp_camera_get_storageinfo (camera, &storage_info, &num_storage_info, context) != 0)
+		goto out;
+
+	/* Append the data to the list */
+	for (i = 0; i < num_storage_info; i++)
+	{
+		l = g_list_prepend (l, g_strdup (storage_info[0].basedir));
+	}
+
+out:
+	/* Clean up */
+	if (il != NULL)
+		gp_port_info_list_free (il);
+	if (context != NULL)
+		gp_context_unref (context);
+	if (camera != NULL)
+		gp_camera_unref (camera);
+
+	g_free (port);
+
+	return l;
+}
+
 static void
 update_cameras (GGPhoto2VolumeMonitor *monitor,
                 GList **added_volumes,
@@ -518,6 +581,7 @@
       int usb_bus_num;
       int usb_device_num;
       gboolean found;
+      GList *store_heads, *l;
 
       /* Look for the device in the added volumes, so as
        * not to add devices that are both audio players, and cameras */
@@ -537,24 +601,39 @@
       usb_bus_num = hal_device_get_property_int (d, "usb.bus_number");
       usb_device_num = hal_device_get_property_int (d, "usb.linux.device_number");
 
-      uri = g_strdup_printf ("gphoto2://[usb:%03d,%03d]", usb_bus_num, usb_device_num);
-      /*g_warning ("uri is '%s'", uri);*/
-      foreign_mount_root = g_file_new_for_uri (uri);
-      g_free (uri);
+      store_heads = get_stores_for_camera (usb_bus_num, usb_device_num);
+      for (l = store_heads ; l != NULL; l = l->next)
+      {
+      	      char *store_path = (char *) l->data;
+          uri = g_strdup_printf ("gphoto2://[usb:%03d,%03d,%s]", usb_bus_num, usb_device_num, store_path);
 
-      udi = hal_device_get_udi (d);
-      /*g_warning ("camera adding %s", udi);*/
+	  /*g_warning ("uri is '%s'", uri);*/
+	  foreign_mount_root = g_file_new_for_uri (uri);
+//	  g_free (uri);
 
-      volume = g_gphoto2_volume_new (G_VOLUME_MONITOR (monitor),
-                                     d,
-                                     monitor->pool,
-                                     foreign_mount_root);
-      g_object_unref (foreign_mount_root);
-      if (volume != NULL)
-        {
-          monitor->camera_volumes = g_list_prepend (monitor->camera_volumes, volume);
-          *added_volumes = g_list_prepend (*added_volumes, g_object_ref (volume));
-        }
+	  udi = hal_device_get_udi (d);
+	  /*g_warning ("camera adding %s", udi);*/
+
+	  volume = g_gphoto2_volume_new (G_VOLUME_MONITOR (monitor),
+					 d,
+					 monitor->pool,
+					 foreign_mount_root);
+	  g_object_unref (foreign_mount_root);
+	  if (volume != NULL)
+            {
+            	    g_message ("added volume for uri %s", uri);
+		    monitor->camera_volumes = g_list_prepend (monitor->camera_volumes, volume);
+		    *added_volumes = g_list_prepend (*added_volumes, g_object_ref (volume));
+	    }
+	  else
+	    {
+	    	    g_message ("didn't add volume for uri %s", uri);
+	    }
+
+	  g_free (l->data);
+
+      }
+      g_list_free (store_heads);
     }
 
   g_list_free (added);
