diff --git a/src/camera/ImportPage.vala b/src/camera/ImportPage.vala
index ba66990..b86c57f 100644
--- a/src/camera/ImportPage.vala
+++ b/src/camera/ImportPage.vala
@@ -766,8 +766,17 @@ class PhotoImportSource : ImportSource {
     ~ImportPage() {
         LibraryPhoto.global.contents_altered.disconnect(on_media_added_removed);
         Video.global.contents_altered.disconnect(on_media_added_removed);
+
+        // iOS 8 issue. Release the camera here
+        if (camera != null) {
+          GPhoto.Result res = camera.exit(spin_idle_context.context);
+          if (res != GPhoto.Result.OK) {
+              // log but don't fail
+              warning("ImportPage destructor: Unable to unlock camera: %s", res.to_full_string());
+          }
+        }
     }
     
     public override Gtk.Toolbar get_toolbar() {
         if (toolbar == null) {
             base.get_toolbar();
@@ -1149,19 +1158,22 @@ public class ImportPage : CheckerboardPage {
     private RefreshResult refresh_camera() {
         if (busy)
             return RefreshResult.BUSY;
             
         update_status(busy, false);
         
         refresh_error = null;
-        refresh_result = camera.init(spin_idle_context.context);
-        if (refresh_result != GPhoto.Result.OK) {
-            warning("Unable to initialize camera: %s", refresh_result.to_full_string());
-            
-            return (refresh_result == GPhoto.Result.IO_LOCK) ? RefreshResult.LOCKED : RefreshResult.LIBRARY_ERROR;
+        // iOS 8 issue
+        if (camera == null) {
+          refresh_result = camera.init(spin_idle_context.context);
+          if (refresh_result != GPhoto.Result.OK) {
+              warning("Unable to initialize camera: %s", refresh_result.to_full_string());
+
+              return (refresh_result == GPhoto.Result.IO_LOCK) ? RefreshResult.LOCKED : RefreshResult.LIBRARY_ERROR;
+          }
         }
 
         update_status(true, refreshed);
         
         on_view_changed();
 
         progress_bar.set_ellipsize(Pango.EllipsizeMode.NONE);
@@ -1261,15 +1272,17 @@ public class ImportPage : CheckerboardPage {
         progress_bar.visible = false;
         progress_bar.set_ellipsize(Pango.EllipsizeMode.NONE);
         progress_bar.set_text("");
         progress_bar.set_fraction(0.0);
-        
+
+#if 0
         GPhoto.Result res = camera.exit(spin_idle_context.context);
         if (res != GPhoto.Result.OK) {
             // log but don't fail
             warning("Unable to unlock camera: %s", res.to_full_string());
         }
-        
+#endif
+
         if (refresh_result == GPhoto.Result.OK) {
             update_status(false, true);
         } else {
             update_status(false, false);
@@ -1628,23 +1641,27 @@ public class ImportPage : CheckerboardPage {
     private void on_import_selected() {
         import(get_view().get_selected());
     }
     
     private void on_import_all() {
         import(get_view().get_all());
     }
     
     private void import(Gee.Iterable<DataObject> items) {
-        GPhoto.Result res = camera.init(spin_idle_context.context);
-        if (res != GPhoto.Result.OK) {
-            AppWindow.error_message(_("Unable to lock camera: %s").printf(res.to_full_string()));
-            
-            return;
+        // We now keep the camera open as long as we can to
+        // work around the iOS 8 directory name shuffling issue.
+        if (camera == null) {
+          GPhoto.Result res = camera.init(spin_idle_context.context);
+          if (res != GPhoto.Result.OK) {
+              AppWindow.error_message(_("Unable to lock camera: %s").printf(res.to_full_string()));
+
+              return;
+          }
         }
 
         update_status(true, refreshed);
         
         on_view_changed();
         progress_bar.visible = false;
 
         SortedList<CameraImportJob> jobs = new SortedList<CameraImportJob>(import_job_comparator);
         Gee.ArrayList<CameraImportJob> already_imported = new Gee.ArrayList<CameraImportJob>();
@@ -1772,18 +1789,21 @@ public class ImportPage : CheckerboardPage {
         // to stop build warnings
         local_ref = null;
     }
 
     private void close_import() {
+// iOS 8 issue
+#if 0
         GPhoto.Result res = camera.exit(spin_idle_context.context);
         if (res != GPhoto.Result.OK) {
             // log but don't fail
             message("Unable to unlock camera: %s", res.to_full_string());
         }
-        
+#endif
+
         update_status(false, refreshed);
         
         on_view_changed();
     }
 
     public override void set_display_titles(bool display) {
         base.set_display_titles(display);
