Index: MainWindow/Window.cpp
===================================================================
--- MainWindow/Window.cpp	(revision 668027)
+++ MainWindow/Window.cpp	(working copy)
@@ -23,6 +23,7 @@
 #include "ThumbnailView/ThumbnailBuilder.h"
 #include "AnnotationDialog/Dialog.h"
 #include <qdir.h>
+#include <qfileinfo.h>
 #include <qmessagebox.h>
 #include "Viewer/ViewerWidget.h"
 #include "WelcomeDialog.h"
@@ -441,9 +442,9 @@
     QStringList listOnDisk;
     QStringList list = selected();
     if ( list.count() == 0 )
-        list = DB::ImageDB::instance()->currentScope(  true );
+        list = DB::ImageDB::instance()->currentScope( false );
 
-    for( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
+    for( QStringList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it ) {
         if ( DB::ImageInfo::imageOnDisk( *it ) )
             listOnDisk.append( *it );
     }
@@ -467,7 +468,7 @@
         // we fake it so it appears the user has selected all images
         // and magically scrolls to the originally selected one
         const QString fileName = ((const QStringList&)files).first();
-        files = DB::ImageDB::instance()->currentScope(  true );
+        files = DB::ImageDB::instance()->currentScope( false );
         seek = files.findIndex(fileName);
     }
 
Index: Viewer/ViewerWidget.cpp
===================================================================
--- Viewer/ViewerWidget.cpp	(revision 668027)
+++ Viewer/ViewerWidget.cpp	(working copy)
@@ -46,6 +46,7 @@
 #include "ViewerWidget.h"
 #include <qapplication.h>
 #include <qeventloop.h>
+#include <qfileinfo.h>
 
 #ifdef HASEXIV2
 #  include "Exif/InfoDialog.h"
@@ -446,11 +447,22 @@
 void Viewer::ViewerWidget::showNextN(int n)
 {
     save();
+    int original = _current;
     if ( _current +1 < (int) _list.count() )  {
         _current += n;
 	if (_current >= (int) _list.count())
 	  _current = (int) _list.count() - 1;
         _forward = true;
+
+        bool found = QFileInfo(_list[_current]).isReadable();
+        while ( !found && _current + 1 < (int) _list.count() ) {
+            ++_current;
+            if ( QFileInfo(_list[_current]).isReadable() )
+                found = true;
+        }
+        if ( !found )
+            _current = original;
+
         load();
     }
 }
@@ -478,11 +490,22 @@
 void Viewer::ViewerWidget::showPrevN(int n)
 {
     save();
+    int original = _current;
     if ( _current > 0  )  {
         _current -= n;
 	if (_current < 0)
 	  _current = 0;
         _forward = false;
+
+        bool found = QFileInfo(_list[_current]).isReadable();
+        while ( !found && _current > 1 ) {
+            --_current;
+            if ( QFileInfo(_list[_current]).isReadable() )
+                found = true;
+        }
+        if ( !found )
+            _current = original;
+
         load();
     }
 }
